Skip to content

Commit

Permalink
Fixed minor bugs, added packet pipeline reload support and drowneds h…
Browse files Browse the repository at this point in the history
…ave 50% chance of dropping tridents.
  • Loading branch information
PauMAVA committed Dec 21, 2019
1 parent e1fcab7 commit cb1bcda
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 25 deletions.
9 changes: 7 additions & 2 deletions src/me/PauMAVA/UhcPlugin/UhcPluginCore.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,19 @@

package me.PauMAVA.UhcPlugin;

import java.util.logging.Logger;

import me.PauMAVA.UhcPlugin.commands.UhcCmdHub;
import me.PauMAVA.UhcPlugin.commands.UhcCompleteTab;
import me.PauMAVA.UhcPlugin.gameplay.CustomRecipes;
import me.PauMAVA.UhcPlugin.match.UhcMatchHandler;
import me.PauMAVA.UhcPlugin.teams.UhcTeamsManager;
import me.PauMAVA.UhcPlugin.util.EventsRegister;
import me.PauMAVA.UhcPlugin.util.PacketIntercepter;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.logging.Logger;

public class UhcPluginCore extends JavaPlugin {


Expand All @@ -54,6 +56,9 @@ public void onEnable() {

@Override
public void onDisable() {
for(Player p: Bukkit.getServer().getOnlinePlayers()) {
PacketIntercepter.rmPlayer(p);
}
UhcLogger.info("Disabled UhcPlugin!");
}

Expand Down
4 changes: 4 additions & 0 deletions src/me/PauMAVA/UhcPlugin/match/UhcMatchHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import me.PauMAVA.UhcPlugin.commands.UhcConfigCmd;
import me.PauMAVA.UhcPlugin.teams.UhcTeam;
import me.PauMAVA.UhcPlugin.teams.UhcTeamsManager;
import me.PauMAVA.UhcPlugin.util.PacketIntercepter;
import me.PauMAVA.UhcPlugin.world.UhcWorldConfig;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
Expand Down Expand Up @@ -59,6 +60,9 @@ public void start() {
UhcWorldConfig.setTime(0L);
RandomTeleporter.teleportPlayers();
UhcScoreboardManager.setUp();
for(Player p: Bukkit.getServer().getOnlinePlayers()) {
PacketIntercepter.injectPlayer(p);
}
this.timer = new UhcMatchTimer();
this.timerTaskID = timer.runTaskTimer(plugin, 0L, 20L).getTaskId();
}
Expand Down
2 changes: 2 additions & 0 deletions src/me/PauMAVA/UhcPlugin/match/UhcMatchTimer.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package me.PauMAVA.UhcPlugin.match;

import me.PauMAVA.UhcPlugin.UhcPluginCore;
import me.PauMAVA.UhcPlugin.world.UhcWorldBorder;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;

Expand All @@ -43,6 +44,7 @@ public void run() {
minutes = chapterLength - 1;
episode++;
UhcPluginCore.getInstance().getMatchHandler().episodeAnnouncement(episode);
UhcWorldBorder.refreshBorder(episode);
}
}
if(seconds < 10) {
Expand Down
7 changes: 4 additions & 3 deletions src/me/PauMAVA/UhcPlugin/teams/UhcTeamsManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -329,14 +329,15 @@ public static void revive(Player invoker, Block block) {
new BukkitRunnable(){
@Override
public void run() {
invoker.getWorld().strikeLightningEffect(block.getLocation());
invoker.getWorld().spawn(new Location(invoker.getWorld(), block.getX(), block.getY() + 1, block.getZ()), EnderCrystal.class);
block.setType(Material.AIR);
if(team.dead().size() == 0 || plugin.getMatchHandler().getTimer().getEpisode() >= 10 || team.hasBeenRevived(team.dead().get(0))) {
invoker.sendMessage(Prefix.INGAME_UHC + "" + "You just wasted a " + ChatColor.BLACK + "" + ChatColor.BOLD + "DARK " + ChatColor.AQUA + "" + ChatColor.BOLD + "Crystal");
} else {
invoker.getWorld().strikeLightningEffect(block.getLocation());
invoker.getWorld().spawn(new Location(invoker.getWorld(), block.getX(), block.getY() + 1, block.getZ()), EnderCrystal.class);
block.setType(Material.AIR);
Player revived = team.dead().get(0);
team.markPlayerAsAlive(revived);
team.markPlayerAsRevived(revived);
revived.setGameMode(GameMode.SURVIVAL);
revived.setExp(0);
revived.setFoodLevel(20);
Expand Down
48 changes: 35 additions & 13 deletions src/me/PauMAVA/UhcPlugin/util/EventsRegister.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,23 @@
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.advancement.Advancement;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.entity.Drowned;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class EventsRegister implements Listener {

Expand All @@ -47,60 +52,77 @@ public class EventsRegister implements Listener {
/*Listens for players joining the server and:
* - Injects them to the pipeline*/
@EventHandler(priority=EventPriority.HIGH)
public void onjoin(PlayerJoinEvent event) {
plugin.getPluginLogger().info("Registered event!");
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
PacketIntercepter.injectPlayer(player);
}

/*Listens for players quitting the game and:
* - Removes them from the pipeline*/
@EventHandler(priority=EventPriority.HIGH)
public void onleave(PlayerQuitEvent event) {
plugin.getPluginLogger().info("Registered event!");
public void onPlayerLeave(PlayerQuitEvent event) {
Player player = event.getPlayer();
PacketIntercepter.rmPlayer(player);
}

@EventHandler
public void onDeath(PlayerDeathEvent event) {
if(plugin.getMatchHandler().getMatchStatus()) {
UhcDeathManager death = new UhcDeathManager(event.getEntity(), event.getEntity().getWorld(), event.getDeathMessage());
death.setTotem(Material.BLACK_STAINED_GLASS_PANE);
death.setPlayerGamemode(GameMode.SPECTATOR);
death.displayDeathMsgAndUpdateTeam();
}
}

@EventHandler
public void onAdvancement(PlayerAdvancementDoneEvent event) {
Advancement advancement = event.getAdvancement();
String advancementID = advancement.getKey().toString();
if(advancementID.contains("story") || advancementID.contains("nether") || advancementID.contains("husbandry") || advancementID.contains("end")|| advancementID.contains("adventure")) {
AdvancementsDatabase db = new AdvancementsDatabase();
String advancementName = db.getCanonicalName(advancementID);
UhcChatManager.dispatchAdvancementEvent(advancementName);
if(plugin.getMatchHandler().getMatchStatus()) {
Advancement advancement = event.getAdvancement();
String advancementID = advancement.getKey().toString();
if(advancementID.contains("story") || advancementID.contains("nether") || advancementID.contains("husbandry") || advancementID.contains("end")|| advancementID.contains("adventure")) {
AdvancementsDatabase db = new AdvancementsDatabase();
String advancementName = db.getCanonicalName(advancementID);
UhcChatManager.dispatchAdvancementEvent(advancementName);
}
}
}

@EventHandler
public void onPlayerDamage(EntityDamageEvent event) {
if(event.getEntity() instanceof Player) {
if(event.getEntity() instanceof Player && plugin.getMatchHandler().getMatchStatus()) {
UhcScoreboardManager.updateHealth();
}
}

@EventHandler
public void onPlayerHeal(EntityRegainHealthEvent event) {
if(event.getEntity() instanceof Player) {
if(event.getEntity() instanceof Player && plugin.getMatchHandler().getMatchStatus()) {
UhcScoreboardManager.updateHealth();
}
}

@EventHandler(priority=EventPriority.MONITOR)
public void onPlayerInteract(PlayerInteractEvent event) {
if(event.getMaterial() == Material.END_CRYSTAL && event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.BEDROCK) {
if(event.getMaterial() == Material.END_CRYSTAL && event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.BEDROCK && plugin.getMatchHandler().getMatchStatus()) {
event.getItem().setType(Material.COAL);
UhcTeamsManager.revive(event.getPlayer(), event.getClickedBlock());
}
}

@EventHandler
public void onEntityKill(EntityDeathEvent event) {
if(event.getEntity() instanceof Drowned && event.getEntity().getKiller() != null) {
Integer randomNum = new Range(0 , 100).getRandomInteger();
if(randomNum > 50) {
ItemStack item = new ItemStack(Material.TRIDENT, 1);
Damageable meta = (Damageable) item.getItemMeta();
meta.setDamage(new Range(100, 250).getRandomInteger());
item.setItemMeta((ItemMeta) meta);
event.getEntity().getWorld().dropItem(event.getEntity().getLocation(), item);
}
Bukkit.getServer().broadcastMessage("KILLED Drowned!: " + randomNum);
}
}

}
6 changes: 3 additions & 3 deletions src/me/PauMAVA/UhcPlugin/util/PacketIntercepter.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@
import net.minecraft.server.v1_15_R1.PacketPlayOutChat;


class PacketIntercepter {
public class PacketIntercepter {

private static final UhcPluginCore plugin = UhcPluginCore.getInstance();

static void rmPlayer(Player player) {
public static void rmPlayer(Player player) {
Channel channel = ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
channel.eventLoop().submit(() -> {
channel.pipeline().remove(player.getName());
Expand All @@ -49,7 +49,7 @@ static void rmPlayer(Player player) {
}


static void injectPlayer(Player player) {
public static void injectPlayer(Player player) {
ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
/* Override parent method to print all packets before letting the client/server to read them
This enables to block any packet or modify it before sending it to the client or server */
Expand Down
9 changes: 5 additions & 4 deletions src/me/PauMAVA/UhcPlugin/world/UhcWorldBorder.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.List;

import me.PauMAVA.UhcPlugin.UhcPluginCore;
import me.PauMAVA.UhcPlugin.chat.Prefix;
import me.PauMAVA.UhcPlugin.commands.UhcConfigCmd;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
Expand All @@ -46,11 +47,11 @@ public static void refreshBorder(Integer episode) {
for(World dimension: dimensions) {
dimension.getWorldBorder().setSize(getFinalRadius(), (10 - getBorderClosingEpisode()) * config.getInt("chapter_length") * 60);
}
float velocity = (getOriginalBorderRadius() - getFinalRadius()) / ((10 - getBorderClosingEpisode())* config.getInt("chapter_length") * 60);
float velocity = (getOriginalBorderRadius() - getFinalRadius()) / ((10 - getBorderClosingEpisode())* (float) config.getInt("chapter_length") * 60);
for(Player p: Bukkit.getServer().getOnlinePlayers()) {
p.sendMessage(ChatColor.GOLD + "[Game] " + ChatColor.YELLOW + "The border is closing as you have reached episode " + getBorderClosingEpisode() + "!");
p.sendMessage(ChatColor.GOLD + "[Game] " + ChatColor.YELLOW + "It is time for you to reach 0,0. Get ready for the fight. Good luck!");
p.sendMessage(ChatColor.BLUE + "[Info] " + ChatColor.AQUA + "The border is closing at a velocity of " + velocity + " blocks/second.");
p.sendMessage(Prefix.INGAME_UHC + "" + ChatColor.YELLOW + "The border is closing as you have reached episode " + getBorderClosingEpisode() + "!");
p.sendMessage(Prefix.INGAME_UHC + "" + ChatColor.YELLOW + "It is time for you to reach 0,0. Get ready for the fight. Good luck!");
p.sendMessage(Prefix.INGAME_UHC + "" + ChatColor.AQUA + "The border is closing at a velocity of " + velocity + " blocks/second.");
}
}
return;
Expand Down

0 comments on commit cb1bcda

Please sign in to comment.