From 4995dc3544be37dfb02cde54442c72b4664499e2 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Thu, 26 Aug 2021 09:38:12 -0400 Subject: [PATCH] 1.3.0 beta 2, bug fixes, added more block settings, added more config options --- src/main/java/Store.java | 67 --------- .../hideAndSeek/CommandHandler.java | 24 ++-- .../net/tylermurphy/hideAndSeek/Store.java | 97 +++++++++---- .../hideAndSeek/commands/Help.java | 2 +- .../hideAndSeek/commands/Start.java | 4 +- .../hideAndSeek/events/EventListener.java | 127 +++++++++++++++++- src/main/resources/plugin.yml | 38 +++++- 7 files changed, 254 insertions(+), 105 deletions(-) delete mode 100644 src/main/java/Store.java diff --git a/src/main/java/Store.java b/src/main/java/Store.java deleted file mode 100644 index f1aec4d..0000000 --- a/src/main/java/Store.java +++ /dev/null @@ -1,67 +0,0 @@ - - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.bukkit.ChatColor; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; -import org.bukkit.util.Vector; - -import net.tylermurphy.hideAndSeek.Main; - -public class Store { - - public static Map playerList = new HashMap(); - - public static Scoreboard board; - public static Team Hider,Seeker,Spectator; - - public static String status = "Setup"; - - public static String messagePrefix = String.format("%sHide and Seek > %s", ChatColor.BLUE, ChatColor.WHITE); - public static String errorPrefix = String.format("%sError > %s", ChatColor.RED, ChatColor.WHITE); - - public static Vector spawnPosition; - - public static Vector worldborderPosition; - public static int worldborderSize,worldborderDelay,currentWorldborderSize; - public static boolean worldborderEnabled = false, decreaseBorder = false; - - public static List blockedCommands; - - public static String tauntPlayer = ""; - - public static int glowTime = 0; - - public static int gameId = 0; - - public static FileConfiguration getConfig() { - return Main.plugin.getConfig(); - } - - public static void saveConfig() { - Main.plugin.saveConfig(); - } - - public static void loadConfig() { - ConfigurationSection spawnConfig = getConfig().getConfigurationSection("spawn"); - if(spawnConfig == null) spawnConfig = getConfig().createSection("spawn"); - spawnPosition = new Vector(spawnConfig.getDouble("x", 0), spawnConfig.getDouble("y", 0), spawnConfig.getDouble("z", 0)); - getConfig().createSection("spawn", spawnConfig.getValues(true)); - ConfigurationSection worldBorderConfig = getConfig().getConfigurationSection("worldBorder"); - if(worldBorderConfig == null) worldBorderConfig = getConfig().createSection("worldBorder"); - worldborderPosition = new Vector(worldBorderConfig.getInt("x", 0), 0, worldBorderConfig.getInt("z", 0)); - worldborderSize = worldBorderConfig.getInt("x", 500); - worldborderEnabled = worldBorderConfig.getBoolean("enabled", false); - getConfig().createSection("worldBorder", worldBorderConfig.getValues(true)); - getConfig().addDefault("blockedCommands", new ArrayList()); - blockedCommands = getConfig().getStringList("blockedCommands"); - } - -} \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java index b1a6f89..d62d153 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java @@ -36,16 +36,22 @@ public class CommandHandler { 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.get("about").execute(sender, new String[0]); - } else if(!COMMAND_REGISTER.containsKey(args[0].toLowerCase())) { - COMMAND_REGISTER.get("about").execute(sender, Arrays.copyOfRange(args, 1, args.length)); + } 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 { - 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(); + 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; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Store.java b/src/main/java/net/tylermurphy/hideAndSeek/Store.java index afbb79c..1014c0e 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/Store.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/Store.java @@ -15,31 +15,56 @@ import org.bukkit.util.Vector; public class Store { - public static Map playerList = new HashMap(); + public static Map + playerList = new HashMap(); - public static Scoreboard board; - public static Team Hider,Seeker,Spectator; + public static Scoreboard + board; - public static String status = "Setup"; + public static Team + Hider, + Seeker, + Spectator; - public static String messagePrefix,errorPrefix,tauntPrefix,worldborderPrefix,abortPrefix,gameoverPrefix; + public static String + messagePrefix, + errorPrefix, + tauntPrefix, + worldborderPrefix, + abortPrefix, + gameoverPrefix, + spawnWorld, + status = "Setup", + tauntPlayer = ""; - public static Vector spawnPosition; - public static String spawnWorld; + public static Vector + spawnPosition, + worldborderPosition; - public static Vector worldborderPosition; - public static int worldborderSize,worldborderDelay,currentWorldborderSize; - public static boolean worldborderEnabled = false, decreaseBorder = false; + public static List + blockedCommands; - public static List blockedCommands; + public static boolean + nametagsVisible, + permissionsRequired, + unbreakableArmorstands, + unbreakablePaintings, + unbreakableItemframes, + interactableArmorstands, + interactableItemframes, + interactableDoors, + interactableTrapdoors, + interactableFencegate, + worldborderEnabled = false, + decreaseBorder = false; - public static boolean nametagsVisible; - - public static String tauntPlayer = ""; - - public static int glowTime = 0; - - public static int gameId = 0; + public static int + minPlayers, + glowTime = 0, + gameId = 0, + worldborderSize, + worldborderDelay, + currentWorldborderSize; public static FileConfiguration getConfig() { return Main.plugin.getConfig(); @@ -53,6 +78,7 @@ public class Store { Main.plugin.reloadConfig(); + //Default getConfig().addDefault("spawn.x", 0); getConfig().addDefault("spawn.y", 0); getConfig().addDefault("spawn.z", 0); @@ -70,25 +96,37 @@ public class Store { getConfig().addDefault("prefix.abort", "&cAbort > &f"); getConfig().addDefault("prefix.gameover", "&aGame Over > &f"); getConfig().addDefault("nametagsVisible", false); + getConfig().addDefault("permissionsRequired", true); + getConfig().addDefault("blockSettings.unbreakable.painting", false); + getConfig().addDefault("blockSettings.unbreakable.armorstand", false); + getConfig().addDefault("blockSettings.unbreakable.itemframe", false); + getConfig().addDefault("blockSettings.interactable.armorstand", true); + getConfig().addDefault("blockSettings.interactable.itemframe", true); + getConfig().addDefault("blockSettings.interactable.door", true); + getConfig().addDefault("blockSettings.interactable.trapdoor", true); + getConfig().addDefault("blockSettings.interactable.fence", true); + getConfig().addDefault("minPlayers", 2); + //Spawn spawnPosition = new Vector( getConfig().getDouble("spawn.x"), - getConfig().getDouble("spawn.y"), + Math.max(0,Math.min(255,getConfig().getDouble("spawn.y"))), getConfig().getDouble("spawn.z") ); spawnWorld = getConfig().getString("spawn.world"); + //World border worldborderPosition = new Vector( getConfig().getInt("worldBorder.x"), 0, getConfig().getInt("worldBorder.z") ); - worldborderSize = getConfig().getInt("worldBorder.size"); - worldborderDelay = getConfig().getInt("worldBorder.delay"); + worldborderSize = Math.max(100,getConfig().getInt("worldBorder.size")); + worldborderDelay = Math.max(1,getConfig().getInt("worldBorder.delay")); worldborderEnabled = getConfig().getBoolean("worldBorder.enabled"); - blockedCommands = getConfig().getStringList("blockedCommands"); + //Prefix char SYMBOLE = '\u00A7'; String SYMBOLE_STRING = new String(new char[] {SYMBOLE}); @@ -99,13 +137,26 @@ public class Store { abortPrefix = getConfig().getString("prefix.abort").replace("&", SYMBOLE_STRING); gameoverPrefix = getConfig().getString("prefix.gameover").replace("&", SYMBOLE_STRING); + //Other nametagsVisible = getConfig().getBoolean("nametagsVisible"); + permissionsRequired = getConfig().getBoolean("permissionsRequired"); + unbreakablePaintings = getConfig().getBoolean("blockSettings.unbreakable.painting"); + unbreakableArmorstands = getConfig().getBoolean("blockSettings.unbreakable.armorstand"); + unbreakableItemframes = getConfig().getBoolean("blockSettings.unbreakable.itemframe"); + interactableArmorstands = getConfig().getBoolean("blockSettings.interactable.armorstand"); + interactableItemframes = getConfig().getBoolean("blockSettings.interactable.itemframe"); + interactableDoors = getConfig().getBoolean("blockSettings.interactable.door"); + interactableTrapdoors = getConfig().getBoolean("blockSettings.interactable.trapdoor"); + interactableFencegate = getConfig().getBoolean("blockSettings.interactable.fence"); + minPlayers = Math.max(2,getConfig().getInt("minPlayers")); getConfig().options().copyDefaults(true); saveConfig(); if(spawnPosition.getBlockX() != 0 || spawnPosition.getBlockY() != 0 || spawnPosition.getBlockZ() != 0) { - status = "Standby"; + if(status.equals("Setup")) { + status = "Standby"; + } } } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java index a74464e..a998a11 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java @@ -13,7 +13,7 @@ public class Help implements ICommand { for(ICommand command : CommandHandler.COMMAND_REGISTER.values()) { message += String.format("%s/hs %s%s %s%s\n %s%s%s", ChatColor.AQUA, ChatColor.WHITE, command.getLabel().toLowerCase(), ChatColor.BLUE, command.getUsage(), ChatColor.GRAY, ChatColor.ITALIC, command.getDescription()+"\n"); } - message = message.substring(0, message.length()-2); + message = message.substring(0, message.length()-1); sender.sendMessage(message); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java index 58d6143..063ba35 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java @@ -28,8 +28,8 @@ public class Start implements ICommand { sender.sendMessage(errorPrefix + "Game is already in session"); return; } - if(playerList.size() < 2) { - sender.sendMessage(errorPrefix + "You must have at least 2 players to start"); + if(playerList.size() < minPlayers) { + sender.sendMessage(errorPrefix + "You must have at least "+minPlayers+" players to start"); return; } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java b/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java index 8ac7d29..541dc68 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java @@ -8,16 +8,23 @@ 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.PlayerQuitEvent; import org.bukkit.potion.PotionEffect; @@ -54,7 +61,7 @@ public class EventListener implements Listener { } @EventHandler - public void onPlayerDamage(EntityDamageEvent event) { + public void onEntityDamage(EntityDamageEvent event) { if(event.getEntity() instanceof Player) { if(!status.equals("Playing")) { event.setCancelled(true); @@ -80,6 +87,124 @@ public class EventListener implements Listener { } + @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; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 61d8b88..a2f80d2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -9,5 +9,39 @@ commands: hideandseek: description: Hide and Seek command usage: /hideandseek [about|help|start|stop|setspawn|setseeker] - permission: hideAndSeek.admin - aliases: hs \ No newline at end of file + aliases: hs +permissions: + hideandseek.*: + description: Gives access to all hideandseek commands + children: + hideandseek.about: true + hideandseek.help: true + hideandseek.reload: true + hideandseek.setborder: true + hideandseek.setspawn: true + hideandseek.start: true + hideandseek.stop: true + hideandseek.about: + description: Allows you to run the about command + default: true + hideandseek.help: + description: Allows you to run the help command + default: true + hideandseek.reload: + description: Allows you to reload the config + default: op + hideandseek.setborder: + description: Allows you to set the game worldborder + default: op + hideandseek.setspawn: + description: Allows you to set the game spawn point + default: op + hideandseek.start: + description: Allows you to start the game + default: op + hideandseek.stop: + description: Allows you to stop the game + default: op + hideandseek.blockbypass: + description: Allows you to bypass the block break prevention + default: op