diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2021-08-31 21:55:27 -0400 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2021-08-31 21:55:27 -0400 |
commit | f1379a94754b68cc3904d2b96b5815854d5565c1 (patch) | |
tree | 39ef970eabaaeabf0993ea1cec6ffbd31c83a07b /src/main/java/net/tylermurphy/hideAndSeek/bukkit | |
parent | 1.3.0 beta 4 (diff) | |
download | kenshinshideandseek-f1379a94754b68cc3904d2b96b5815854d5565c1.tar.gz kenshinshideandseek-f1379a94754b68cc3904d2b96b5815854d5565c1.tar.bz2 kenshinshideandseek-f1379a94754b68cc3904d2b96b5815854d5565c1.zip |
1.3.0 beta 5
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/bukkit')
4 files changed, 462 insertions, 0 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/bukkit/CommandHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/CommandHandler.java new file mode 100644 index 0000000..73bfd08 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/CommandHandler.java @@ -0,0 +1,67 @@ +package net.tylermurphy.hideAndSeek.bukkit; + +import static net.tylermurphy.hideAndSeek.Store.*; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.tylermurphy.hideAndSeek.command.*; +import net.tylermurphy.hideAndSeek.util.ICommand; + +public class CommandHandler { + + public static Map<String,ICommand> COMMAND_REGISTER = new LinkedHashMap<String,ICommand>(); + + private static void registerCommand(ICommand command) { + if(!COMMAND_REGISTER.containsKey(command.getLabel())) { + COMMAND_REGISTER.put(command.getLabel().toLowerCase(), command); + } + } + + public static void registerCommands() { + registerCommand(new About()); + registerCommand(new Help()); + registerCommand(new Start()); + registerCommand(new Stop()); + registerCommand(new SetSpawnLocation()); + registerCommand(new SetBorder()); + registerCommand(new Reload()); + registerCommand(new SaveMap()); + } + + public static boolean handleCommand(CommandSender sender, Command cmd, String label, String[] args) { + if(sender instanceof Player == false) { + sender.sendMessage(errorPrefix + "This command can only be run as a player."); + } else if(args.length < 1 || !COMMAND_REGISTER.containsKey(args[0].toLowerCase()) ) { + if(permissionsRequired && !sender.hasPermission("hideandseek.about")) { + sender.sendMessage(errorPrefix + "You are not allowed to run this command."); + } else { + COMMAND_REGISTER.get("about").execute(sender, null); + } + } else { + if(!args[0].toLowerCase().equals("about") && !args[0].toLowerCase().equals("help") && runningBackup) { + sender.sendMessage(errorPrefix + "Map save is currently in progress. Try again later."); + } else if(permissionsRequired && !sender.hasPermission("hideandseek."+args[0].toLowerCase())) { + sender.sendMessage(errorPrefix + "You are not allowed to run this command."); + } else { + try { + COMMAND_REGISTER.get(args[0].toLowerCase()).execute(sender,Arrays.copyOfRange(args, 1, args.length)); + } catch (Exception e) { + sender.sendMessage(errorPrefix + "An error has occured."); + e.printStackTrace(); + } + } + } + return true; + } + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + return CommandHandler.handleCommand(sender, command, label, args); + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/bukkit/EventListener.java b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/EventListener.java new file mode 100644 index 0000000..c46dc87 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/EventListener.java @@ -0,0 +1,274 @@ +package net.tylermurphy.hideAndSeek.bukkit; + +import static net.tylermurphy.hideAndSeek.Store.*; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.attribute.Attribute; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.Painting; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowball; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.potion.PotionEffect; + +import net.md_5.bungee.api.ChatColor; +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.util.Functions; +import net.tylermurphy.hideAndSeek.util.Packet; + +public class EventListener implements Listener { + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + if(status.equals("Playing") || status.equals("Starting")) { + Spectator.add(event.getPlayer().getName()); + SpectatorTeam.addEntry(event.getPlayer().getName()); + event.getPlayer().sendMessage(messagePrefix + "You have joined mid game, and thus have been placed on the spectator team."); + event.getPlayer().setGameMode(GameMode.SPECTATOR); + event.getPlayer().getInventory().clear(); + for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){ + event.getPlayer().removePotionEffect(effect.getType()); + } + event.getPlayer().teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + } else if(status.equals("Setup") || status.equals("Standby")) { + Hider.add(event.getPlayer().getName()); + HiderTeam.addEntry(event.getPlayer().getName()); + event.getPlayer().setGameMode(GameMode.ADVENTURE); + event.getPlayer().teleport(new Location(Bukkit.getWorld(spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + } + playerList.put(event.getPlayer().getName(), event.getPlayer()); + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) { + if(!playerList.containsKey(event.getPlayer().getName())) return; + playerList.remove(event.getPlayer().getName()); + Hider.remove(event.getPlayer().getName()); + HiderTeam.removeEntry(event.getPlayer().getName()); + Seeker.remove(event.getPlayer().getName()); + SeekerTeam.removeEntry(event.getPlayer().getName()); + Spectator.remove(event.getPlayer().getName()); + SpectatorTeam.removeEntry(event.getPlayer().getName()); + } + + @EventHandler + public void onKick(PlayerKickEvent event) { + if(!playerList.containsKey(event.getPlayer().getName())) return; + playerList.remove(event.getPlayer().getName()); + Hider.remove(event.getPlayer().getName()); + HiderTeam.removeEntry(event.getPlayer().getName()); + Seeker.remove(event.getPlayer().getName()); + SeekerTeam.removeEntry(event.getPlayer().getName()); + Spectator.remove(event.getPlayer().getName()); + SpectatorTeam.removeEntry(event.getPlayer().getName()); + } + + @EventHandler + public void onEntityDamage(EntityDamageEvent event) { + if(event.getEntity() instanceof Player) { + if(!status.equals("Playing")) { + event.setCancelled(true); + return; + } + Player player = (Player) event.getEntity(); + if(player.getHealth()-event.getDamage() < 0) { + if(spawnPosition == null) return; + event.setCancelled(true); + player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + Packet.playSound(player, Sound.ENTITY_PLAYER_DEATH, 1, 1); + if(Hider.contains(event.getEntity().getName())) { + Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s was found and became a seeker", ChatColor.GOLD, event.getEntity().getName(), ChatColor.WHITE)); + } + if(Seeker.contains(event.getEntity().getName())) { + Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s was killed", ChatColor.RED, event.getEntity().getName(), ChatColor.WHITE)); + } + Seeker.add(player.getName()); + Hider.remove(player.getName()); + SeekerTeam.addEntry(player.getName()); + Functions.resetPlayer(player); + for(Player temp : playerList.values()) { + Packet.setGlow(player, temp, false); + } + } + } + + } + + @EventHandler + public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { + if(event.getEntity() instanceof ArmorStand) { + if(unbreakableArmorstands) { + if(event.getDamager() instanceof Player) { + Player player = (Player) event.getDamager(); + if(status.equals("Playing") || status.equals("Starting") || !player.hasPermission("hideandseek.blockbypass")) { + System.out.println('t'); + event.setCancelled(true); + } + } else { + event.setCancelled(true); + } + } + } + } + + @EventHandler + public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { + if(!interactableArmorstands) { + if(event.getRightClicked() instanceof ArmorStand) { + if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) { + event.setCancelled(true); + } + } + } + if(!interactableItemframes) { + if(event.getRightClicked() instanceof ItemFrame) { + if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) { + event.setCancelled(true); + } + } + } + } + + @EventHandler + public void onPlayerInteractBlock(PlayerInteractEvent event) { + if(!interactableDoors) { + if( + event.getClickedBlock().getType() == Material.ACACIA_DOOR || + event.getClickedBlock().getType() == Material.BIRCH_DOOR || + event.getClickedBlock().getType() == Material.CRIMSON_DOOR || + event.getClickedBlock().getType() == Material.DARK_OAK_DOOR || + event.getClickedBlock().getType() == Material.IRON_DOOR || + event.getClickedBlock().getType() == Material.JUNGLE_DOOR || + event.getClickedBlock().getType() == Material.OAK_DOOR || + event.getClickedBlock().getType() == Material.SPRUCE_DOOR || + event.getClickedBlock().getType() == Material.WARPED_DOOR + ) { + if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) { + event.setCancelled(true); + } + } + } + if(!interactableTrapdoors) { + if( + event.getClickedBlock().getType() == Material.ACACIA_TRAPDOOR || + event.getClickedBlock().getType() == Material.BIRCH_TRAPDOOR || + event.getClickedBlock().getType() == Material.CRIMSON_TRAPDOOR || + event.getClickedBlock().getType() == Material.DARK_OAK_TRAPDOOR || + event.getClickedBlock().getType() == Material.IRON_TRAPDOOR || + event.getClickedBlock().getType() == Material.JUNGLE_TRAPDOOR || + event.getClickedBlock().getType() == Material.OAK_TRAPDOOR || + event.getClickedBlock().getType() == Material.SPRUCE_TRAPDOOR || + event.getClickedBlock().getType() == Material.WARPED_TRAPDOOR + ) { + if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) { + event.setCancelled(true); + } + } + } + if(!interactableFencegate) { + if( + event.getClickedBlock().getType() == Material.ACACIA_FENCE_GATE || + event.getClickedBlock().getType() == Material.BIRCH_FENCE_GATE || + event.getClickedBlock().getType() == Material.CRIMSON_FENCE_GATE || + event.getClickedBlock().getType() == Material.DARK_OAK_FENCE_GATE || + event.getClickedBlock().getType() == Material.JUNGLE_FENCE_GATE || + event.getClickedBlock().getType() == Material.OAK_FENCE_GATE || + event.getClickedBlock().getType() == Material.SPRUCE_FENCE_GATE || + event.getClickedBlock().getType() == Material.WARPED_FENCE_GATE + ) { + if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) { + event.setCancelled(true); + } + } + } + } + + @EventHandler + public void onHangingBreakByEntity(HangingBreakByEntityEvent event) { + if(event.getEntity() instanceof ItemFrame) { + if(unbreakableItemframes) { + if(event.getRemover() instanceof Player) { + Player player = (Player) event.getRemover(); + if(status.equals("Playing") || status.equals("Starting") || !player.hasPermission("hideandseek.blockbypass")) { + event.setCancelled(true); + } + } else { + event.setCancelled(true); + } + + } + } + if(event.getEntity() instanceof Painting) { + if(unbreakableArmorstands) { + if(event.getRemover() instanceof Player) { + Player player = (Player) event.getRemover(); + if(status.equals("Playing") || status.equals("Starting") || !player.hasPermission("hideandseek.blockbypass")) { + event.setCancelled(true); + } + } else { + event.setCancelled(true); + } + } + } + } + + @EventHandler + public void onProjectile(ProjectileLaunchEvent event) { + if(!status.equals("Playing")) return; + if(event.getEntity() instanceof Snowball) { + Snowball snowball = (Snowball) event.getEntity(); + if(snowball.getShooter() instanceof Player) { + Player player = (Player) snowball.getShooter(); + if(Hider.contains(player.getName())) { + Main.glow.onProjectilve(); + snowball.remove(); + player.getInventory().remove(Material.SNOWBALL); + } + } + } + } + + @EventHandler + public void onFoodLevelChange(FoodLevelChangeEvent event) { + event.setCancelled(true); + } + + @EventHandler + public void onPlayerRegainHealth(EntityRegainHealthEvent event) { + if(event.getRegainReason() == RegainReason.SATIATED || event.getRegainReason() == RegainReason.REGEN) + event.setCancelled(true); + } + + @EventHandler + public void onPlayerCommandPreProccess(PlayerCommandPreprocessEvent event) { + if(status.equals("Setup") || status.equals("Standby")) return; + String handle = event.getMessage().split(" ")[0].substring(1); + for(String blocked : blockedCommands) { + if(handle.equalsIgnoreCase(blocked) || handle.equalsIgnoreCase("minecraft:"+blocked)) { + event.setCancelled(true); + event.getPlayer().sendMessage(errorPrefix + "This command is blocked during gameplay!"); + break; + } + } + } +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/bukkit/TabCompleter.java b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/TabCompleter.java new file mode 100644 index 0000000..2a88178 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/TabCompleter.java @@ -0,0 +1,40 @@ +package net.tylermurphy.hideAndSeek.bukkit; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class TabCompleter{ + + public static List<String> handleTabComplete(CommandSender sender, Command command, String label, String[] args) { + if(args.length == 1) { + return new ArrayList<String>(CommandHandler.COMMAND_REGISTER.keySet()) + .stream() + .filter(handle -> sender.hasPermission("hideandseek."+handle.toLowerCase())) + .collect(Collectors.toList()); + } else if(args.length > 1) { + if(!CommandHandler.COMMAND_REGISTER.containsKey(args[0].toLowerCase())) { + return null; + } else { + String[] usage = CommandHandler.COMMAND_REGISTER.get(args[0].toLowerCase()).getUsage().split(" "); + if(args.length - 2 < usage.length) { + String parameter = usage[args.length-2]; + if(parameter.equals("<player>")) { + return null; + } else { + List<String> temp = new ArrayList<String>(); + temp.add(parameter.replace("<", "").replace(">", "")); + return temp; + } + } else { + return null; + } + } + } + return null; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/bukkit/Tick.java b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/Tick.java new file mode 100644 index 0000000..eccaf39 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/Tick.java @@ -0,0 +1,81 @@ +package net.tylermurphy.hideAndSeek.bukkit; + +import static net.tylermurphy.hideAndSeek.Store.*; + + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; + +import net.tylermurphy.hideAndSeek.command.Stop; +import net.tylermurphy.hideAndSeek.util.Functions; +import net.tylermurphy.hideAndSeek.util.Packet; + +public class Tick { + + static int tick = 0; + + public static void onTick() { + + if(board == null) { + Functions.loadScoreboard(); + } + + if(status.equals("Starting")) { + onStarting(); + } else if(status.equals("Playing")) { + onPlaying(); + } + + tick ++; + + if(( status.equals("Starting") || status.equals("Playing") ) && Hider.size() < 1) { + Bukkit.broadcastMessage(gameoverPrefix + "All hiders have been found."); + Stop.onStop(); + } + if(( status.equals("Starting") || status.equals("Playing") ) && Seeker.size() < 1) { + Bukkit.broadcastMessage(abortPrefix + "All seekers have quit."); + Stop.onStop(); + } + } + + private static void onStarting() { + for(String playerName : Seeker) { + Player player = playerList.get(playerName); + if(player != null) { + player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + } + } + } + + private static void onPlaying() { + for(String playerName : Hider) { + Player player = playerList.get(playerName); + int distance = 100; + for(String seekerName : Seeker) { + Player seeker = playerList.get(seekerName); + int temp = (int) player.getLocation().distance(seeker.getLocation()); + if(distance > temp) { + distance = temp; + } + } + switch(tick%10) { + case 0: + if(distance < 30) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .5f, 1f); + if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 3: + if(distance < 30) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .3f, 1f); + if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 6: + if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 9: + if(distance < 20) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + } + } + } +}
\ No newline at end of file |