summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/bukkit
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2021-08-31 21:55:27 -0400
committerTyler Murphy <tylermurphy534@gmail.com>2021-08-31 21:55:27 -0400
commitf1379a94754b68cc3904d2b96b5815854d5565c1 (patch)
tree39ef970eabaaeabf0993ea1cec6ffbd31c83a07b /src/main/java/net/tylermurphy/hideAndSeek/bukkit
parent1.3.0 beta 4 (diff)
downloadkenshinshideandseek-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')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/bukkit/CommandHandler.java67
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/bukkit/EventListener.java274
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/bukkit/TabCompleter.java40
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/bukkit/Tick.java81
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