1.3.0 beta 2, bug fixes, added more block settings, added more config options

This commit is contained in:
Tyler Murphy 2021-08-26 09:38:12 -04:00
parent 5306f09eb0
commit 4995dc3544
7 changed files with 254 additions and 105 deletions

View file

@ -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<String,Player> playerList = new HashMap<String,Player>();
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<String> 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<String>());
blockedCommands = getConfig().getStringList("blockedCommands");
}
}

View file

@ -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;

View file

@ -15,31 +15,56 @@ import org.bukkit.util.Vector;
public class Store {
public static Map<String,Player> playerList = new HashMap<String,Player>();
public static Map<String,Player>
playerList = new HashMap<String,Player>();
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<String>
blockedCommands;
public static List<String> 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";
}
}
}

View file

@ -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);
}

View file

@ -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;
}

View file

@ -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;

View file

@ -9,5 +9,39 @@ commands:
hideandseek:
description: Hide and Seek command
usage: /hideandseek [about|help|start|stop|setspawn|setseeker]
permission: hideAndSeek.admin
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