Java tutorial
package com.minestein.novacore.listener; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import com.minestein.novacore.Core; import com.minestein.novacore.command.Guide; import com.minestein.novacore.command.Hub; import com.minestein.novacore.team.Spectator; import com.minestein.novacore.util.general.ChatUtil; import com.minestein.novacore.util.general.Fight; import com.minestein.novacore.util.general.State; import net.minecraft.server.v1_7_R4.*; import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.entity.Arrow; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.*; import org.bukkit.potion.PotionEffect; /** * Copyright MineStein 2014 * All files included within the project are subject under the standard * GNU license. Any and all assets are the sole property of MineStein. */ public class Events implements Listener { /** * Listens for interacting. * * @param event The event. */ @EventHandler public void onInteract(PlayerInteractEvent event) { final Player p = event.getPlayer(); if (Core.getState() != State.INGAME) { if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) return; if (event.getItem() == null) return; if (event.getItem().getItemMeta().getDisplayName() == null) return; p.performCommand("hub"); } } /** * Listens for dying. * * @param event The event. */ @EventHandler public void onDeath(PlayerDeathEvent event) { final Player player = event.getEntity(); event.setDeathMessage( Core.getPrefix() + "el" + event.getEntity().getName().toUpperCase() + " 6has lost!"); player.setHealth(20.0); player.setFoodLevel(20); player.setSaturation(8F); player.setRemainingAir(300); player.getInventory().clear(); player.getInventory().setArmorContents(null); if (Bukkit.getOnlinePlayers().length - 1 <= 1) { player.kickPlayer("clYou have lost! The game is restarting..."); for (Player players : Bukkit.getOnlinePlayers()) { if (players.getName().equals(player.getName())) continue; players.kickPlayer("alYou have won! The game is restarting..."); } Core.setState(State.RESTARTING); Core.setTicks(5); } } /** * Listens for the kicking of a player. * * @param event The event. */ @EventHandler public void onKick(PlayerKickEvent event) { if (event.getReason().equalsIgnoreCase("clYou have lost! The game is restarting...")) { event.setCancelled(true); ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("Connect"); out.writeUTF("lobby"); event.getPlayer().sendPluginMessage(Core.plugin, "BungeeCord", out.toByteArray()); event.getPlayer() .sendMessage("8[5NOVA6U8] 4You lost that game of r" + Core.getPrefix() + "4!"); } else if (event.getReason().equalsIgnoreCase("alYou have won! The game is restarting...")) { event.setCancelled(true); ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("Connect"); out.writeUTF("lobby"); event.getPlayer().sendPluginMessage(Core.plugin, "BungeeCord", out.toByteArray()); event.getPlayer() .sendMessage("8[5NOVA6U8] aYou won that game of r" + Core.getPrefix() + "a!"); } } /** * Listens for an entity being damaged. * * @param event The event. */ @EventHandler public void onDamage(EntityDamageEvent event) { if (event.getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) { if (event.getCause() == EntityDamageEvent.DamageCause.VOID) { if (Core.getState() != State.INGAME) return; if (event.getEntity() instanceof Player) { final Player player = (Player) event.getEntity(); event.setDamage(0); event.setCancelled(true); player.teleport(Core.getLobbySpawnpoint()); player.sendMessage(Core.getPrefix() + "4Not a good idea el" + player.getName().toUpperCase() + "4!"); } } } } /** * Listens for player versus player combat. * * @param event The event. */ @EventHandler public void onPvP(EntityDamageByEntityEvent event, Spectator spectator) { if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { Player damager = (Player) event.getDamager(); Player damaged = (Player) event.getEntity(); if (spectator.spectators.contains(damager.getName())) { event.setCancelled(true); } if (Core.getState() != State.INGAME) { event.setCancelled(true); return; } else { if (!Core.isPvpEnabled()) { event.setCancelled(true); damager.sendMessage(Core.getPrefix() + "4This is not a PvP-oriented game!"); return; } else { event.setCancelled(false); Fight fight = new Fight(damager, damaged); if (Core.isBloodEnabled()) { damaged.playEffect(damaged.getLocation(), Effect.STEP_SOUND, 152); damaged.playEffect(damaged.getLocation(), Effect.STEP_SOUND, 152); damaged.playEffect(damaged.getLocation(), Effect.STEP_SOUND, 152); damaged.playEffect(damaged.getLocation(), Effect.STEP_SOUND, 152); damaged.playEffect(damaged.getLocation(), Effect.STEP_SOUND, 152); } } } } else if (event.getDamager() instanceof Arrow && event.getEntity() instanceof Player) { Arrow arrow = (Arrow) event.getDamager(); Player damaged = (Player) event.getEntity(); if (arrow.getShooter() instanceof Player) { Player shooter = (Player) arrow.getShooter(); if (Core.getState() != State.INGAME) { event.setCancelled(true); return; } else { if (!Core.isArrowHitEnabled()) { event.setCancelled(true); shooter.sendMessage(Core.getPrefix() + "4This is not a PvP-oriented game!"); return; } else { event.setCancelled(false); Fight fight = new Fight(shooter, damaged); if (Core.isBloodEnabled()) { damaged.playEffect(damaged.getLocation(), Effect.STEP_SOUND, 152); damaged.playEffect(damaged.getLocation(), Effect.STEP_SOUND, 152); damaged.playEffect(damaged.getLocation(), Effect.STEP_SOUND, 152); } } } } } } /** * Listens for breaking a block. * * @param event The event. */ @EventHandler public void onBreak(BlockBreakEvent event) { final Player player = event.getPlayer(); if (player.getGameMode() == GameMode.CREATIVE) return; if (Core.getState() != State.INGAME) { event.setCancelled(true); return; } else { if (!Core.isBreakEnabled()) { event.setCancelled(true); player.sendMessage(Core.getPrefix() + "4You cannot break blocks!"); return; } else { event.setCancelled(false); } } } /** * Listens for placing blocks. * * @param event The event. */ @EventHandler public void onPlace(BlockPlaceEvent event) { final Player player = event.getPlayer(); if (player.getGameMode() == GameMode.CREATIVE) return; if (Core.getState() != State.INGAME) { event.setCancelled(true); return; } else { if (!Core.isBuildEnabled()) { event.setCancelled(true); player.sendMessage(Core.getPrefix() + "4You cannot place blocks!"); return; } else { event.setCancelled(false); } } } /** * Listens for a player chatting. * * @param event The event. */ @EventHandler public void onChat(AsyncPlayerChatEvent event) { final Player player = event.getPlayer(); if (player.isOp()) { event.setFormat( "8(4Staff8) el" + player.getName().toUpperCase() + "8: a" + event.getMessage()); } else { event.setFormat( "8(1Player8) el" + player.getName().toUpperCase() + "8: a" + event.getMessage()); } } /** * Listens for a player logging in. * * @param event The event. */ @EventHandler public void onLogin(PlayerLoginEvent event) { State currentState = Core.getState(); switch (currentState) { case LOBBY: if (Bukkit.getOnlinePlayers().length >= Core.getMaxPlayers()) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "4Too many players already! Try a different lobby!"); break; } else { event.allow(); if (Core.getPlayers() == null) return; Core.getPlayers().add(event.getPlayer().getName()); break; } case PREGAME: if (Bukkit.getOnlinePlayers().length >= Core.getMaxPlayers()) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "4Too many players already! Try a different lobby!"); break; } else { event.allow(); Core.getPlayers().add(event.getPlayer().getName()); break; } case WARMUP: if (Bukkit.getOnlinePlayers().length >= Core.getMaxPlayers()) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "4Not enough slots for you to spectate! Try a different lobby!"); break; } else { if (!Core.isSpectatingEnabled()) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "4Spectating is not allowed in this gamemode!"); break; } else { event.allow(); Core.getSpectators().add(event.getPlayer().getName()); break; } } case INGAME: if (Bukkit.getOnlinePlayers().length >= Core.getMaxPlayers()) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "4Not enough slots for you to spectate! Try a different lobby!"); break; } else { if (!Core.isSpectatingEnabled()) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "4Spectating is not allowed in this gamemode!"); return; } else { event.allow(); Core.getSpectators().add(event.getPlayer().getName()); break; } } case RESTARTING: event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "4The game is restarting!"); break; default: System.out.println("This doesn't happen!"); // Impossible, enum constant has to be specified Bukkit.shutdown(); break; } } /** * Listens for a player joining. * * @param event The event. */ @EventHandler public void onJoin(PlayerJoinEvent event) { final CraftPlayer p = (CraftPlayer) event.getPlayer(); final EntityPlayer ep = p.getHandle(); final String guideAlert = "{\"text\":\"\",\"extra\":[{\"text\":\"" + Core.getPrefix() + "bClick me for help in this game!\",\"clickEvent\":{\"action\":\"suggest_command\",\"value\":\"/guide\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"5oProvides help\\5ofor this minigame!\"}]}}}]}"; if (Core.isDefaultScoreboardEnabled()) { Core.getOnline().setScore(Bukkit.getOnlinePlayers().length); } if (Guide.alreadyGuide.contains(p.getName())) { Guide.alreadyGuide.remove(p.getName()); } event.setJoinMessage( Core.getPrefix() + "el" + event.getPlayer().getName().toUpperCase() + " 6has joined 8(3" + Bukkit.getOnlinePlayers().length + "8/3" + Core.getMaxPlayers() + "8)"); Bukkit.getScheduler().runTaskLater(Core.plugin, () -> { for (int i = 0; i < 2; i++) { p.sendMessage(""); } IChatBaseComponent comp = ChatSerializer.a(guideAlert); PacketPlayOutChat packet = new PacketPlayOutChat(comp); ep.playerConnection.sendPacket(packet); }, 5); event.getPlayer().teleport(Core.getLobbySpawnpoint()); p.setHealth(20.0); p.getInventory().clear(); p.getInventory().setArmorContents(null); event.getPlayer().getInventory().setItem(0, Core.getHub()); for (Player players : Bukkit.getOnlinePlayers()) { if (Core.getBoard() == null) return; players.setScoreboard(Core.getBoard()); } } /** * Listens for quiting. * * @param event The event. */ @EventHandler public void onQuit(PlayerQuitEvent event) { if (Core.isDefaultScoreboardEnabled()) { Core.getOnline().setScore(Bukkit.getOnlinePlayers().length - 1); } int playerAmount = Bukkit.getServer().getOnlinePlayers().length - 1; event.setQuitMessage(Core.getPrefix() + "el" + event.getPlayer().getName().toUpperCase() + " 6left 8(3" + playerAmount + "8/3" + Core.getMaxPlayers() + "8)"); if (Core.getState() == State.LOBBY && playerAmount < Core.getMinPlayers()) { ChatUtil.broadcast("6Not enough players, the timer has been reset."); Core.setTicks(31); } else if (Core.getState() == State.PREGAME && playerAmount < Core.getMinPlayers()) { ChatUtil.broadcast("6Not enough players, the timer has been reset."); Core.setState(State.LOBBY); Core.setTicks(31); } else if (Core.getState() == State.WARMUP && playerAmount < Core.getMinPlayers()) { ChatUtil.broadcast("6Not enough players to start, the game has been put back into lobby mode."); for (Player players : Bukkit.getServer().getOnlinePlayers()) { players.teleport(Core.getLobbySpawnpoint()); players.setHealth(20.0); players.setFoodLevel(20); players.setSaturation(8F); players.setRemainingAir(300); players.getInventory().clear(); players.getInventory().setArmorContents(null); players.getInventory().setItem(0, Core.getHub()); for (PotionEffect effects : players.getActivePotionEffects()) { event.getPlayer().removePotionEffect(effects.getType()); } } Core.setState(State.LOBBY); Core.setTicks(31); for (PotionEffect effect : event.getPlayer().getActivePotionEffects()) { event.getPlayer().removePotionEffect(effect.getType()); } event.getPlayer().setHealth(20.0); event.getPlayer().setFoodLevel(20); event.getPlayer().teleport(Core.getLobbySpawnpoint()); event.getPlayer().getInventory().clear(); event.getPlayer().getInventory().setArmorContents(null); event.getPlayer().getInventory().setItem(0, Core.getHub()); } if (Core.getState() == State.INGAME && playerAmount < 1) { for (Player players : Bukkit.getServer().getOnlinePlayers()) { players.kickPlayer("2You have won the game"); } Core.setTicks(5); Core.setState(State.RESTARTING); } } /** * Listens for dropping. * * @param event The event. */ @EventHandler public void onDrop(PlayerDropItemEvent event) { final Player player = event.getPlayer(); if (player.getGameMode() == GameMode.CREATIVE) return; if (Core.getState() != State.INGAME) { event.setCancelled(true); return; } else { if (!Core.isDropItemsEnabled()) { event.setCancelled(true); player.sendMessage(Core.getPrefix() + "4You cannot drop items!"); return; } else { event.setCancelled(false); } } } /** * Listens for moving. * * @param event The event. */ @EventHandler public void onMove(PlayerMoveEvent event) { if (Hub.alreadySending.contains(event.getPlayer().getName())) { if (event.getTo().getY() == event.getFrom().getY() || event.getTo().getX() == event.getFrom().getX() || event.getTo().getZ() == event.getFrom().getZ()) return; event.setTo(event.getFrom()); } if (Core.getState() == State.WARMUP) { if (event.getFrom().getPitch() != event.getTo().getPitch() || event.getFrom().getYaw() != event.getTo().getYaw()) return; event.setTo(event.getFrom()); } } /** * Listens for picking up items. * * @param event The event. */ @EventHandler public void onPickup(PlayerPickupItemEvent event) { final Player player = event.getPlayer(); if (player.getGameMode() == GameMode.CREATIVE) return; if (Core.getState() != State.INGAME) { event.setCancelled(true); return; } else { if (!Core.isPickupItemsEnabled()) { event.setCancelled(true); return; } else { event.setCancelled(false); } } } }