From d64dce4a26b69d202f9d2943da8da0d3bc9ddad2 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Tue, 9 Aug 2022 13:43:20 -0400 Subject: [PATCH 1/4] block solidify time, seeker lobby --- pom.xml | 2 +- .../hideAndSeek/command/About.java | 2 +- .../hideAndSeek/command/Setup.java | 4 + .../location/SetSeekerLobbyLocation.java | 31 ++++++ .../command/location/util/Locations.java | 3 +- .../hideAndSeek/configuration/Config.java | 14 ++- .../tylermurphy/hideAndSeek/game/Game.java | 1 + .../hideAndSeek/game/PlayerLoader.java | 5 +- .../game/listener/DisguiseHandler.java | 94 +------------------ .../hideAndSeek/util/CommandHandler.java | 2 + src/main/resources/config.yml | 10 ++ .../resources/lang/localization_de-DE.yml | 1 + .../resources/lang/localization_en-US.yml | 1 + src/main/resources/plugin.yml | 6 +- 14 files changed, 76 insertions(+), 100 deletions(-) create mode 100644 src/main/java/net/tylermurphy/hideAndSeek/command/location/SetSeekerLobbyLocation.java diff --git a/pom.xml b/pom.xml index 9b59f1c..02d3a81 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ 4.0.0 net.tylermurphy KenshinsHideAndSeek - 1.6.0 + 1.6.1 Hide and Seek Plugin diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/About.java b/src/main/java/net/tylermurphy/hideAndSeek/command/About.java index a4eca9f..7c39be2 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/About.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/About.java @@ -26,7 +26,7 @@ public class About implements ICommand { public void execute(Player sender, String[] args) { sender.sendMessage( - String.format("%s%sHide and Seek %s(%s1.6.0%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY,ChatColor.WHITE,ChatColor.GRAY) + + String.format("%s%sHide and Seek %s(%s1.6.1%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY,ChatColor.WHITE,ChatColor.GRAY) + String.format("%sAuthor: %s[KenshinEto]\n", ChatColor.GRAY, ChatColor.WHITE) + String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE) ); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/Setup.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Setup.java index 7b29f79..e961188 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/Setup.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Setup.java @@ -42,6 +42,10 @@ public class Setup implements ICommand { msg = msg + "\n" + message("SETUP_LOBBY"); count++; } + if (seekerLobbyPosition.getBlockX() == 0 && seekerLobbyPosition.getBlockY() == 0 && seekerLobbyPosition.getBlockZ() == 0) { + msg = msg + "\n" + message("SETUP_SEEKER_LOBBY"); + count++; + } if (exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) { msg = msg + "\n" + message("SETUP_EXIT"); count++; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/location/SetSeekerLobbyLocation.java b/src/main/java/net/tylermurphy/hideAndSeek/command/location/SetSeekerLobbyLocation.java new file mode 100644 index 0000000..c6c3ccb --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/location/SetSeekerLobbyLocation.java @@ -0,0 +1,31 @@ +package net.tylermurphy.hideAndSeek.command.location; + +import net.tylermurphy.hideAndSeek.command.ICommand; +import net.tylermurphy.hideAndSeek.command.location.util.LocationUtils; +import net.tylermurphy.hideAndSeek.command.location.util.Locations; +import org.bukkit.entity.Player; + +import static net.tylermurphy.hideAndSeek.configuration.Config.*; + +public class SetSeekerLobbyLocation implements ICommand { + + public void execute(Player sender, String[] args) { + LocationUtils.setLocation(sender, Locations.SEEKER, vector -> { + seekerLobbyWorld = sender.getLocation().getWorld().getName(); + seekerLobbyPosition = vector; + }); + } + + public String getLabel() { + return "setseekerlobby"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Sets hide and seeks seeker lobby location to current position"; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/command/location/util/Locations.java b/src/main/java/net/tylermurphy/hideAndSeek/command/location/util/Locations.java index 137bc69..35f74ea 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/command/location/util/Locations.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/location/util/Locations.java @@ -7,7 +7,8 @@ public enum Locations { GAME("spawns.game"), LOBBY("spawns.lobby"), - EXIT("spawns.exit"); + EXIT("spawns.exit"), + SEEKER("spawns.seeker"); private final String path; Locations(String path) { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java index 4130ec7..853b6a2 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java @@ -50,6 +50,7 @@ public class Config { gameOverPrefix, warningPrefix, spawnWorld, + seekerLobbyWorld, exitWorld, lobbyWorld, locale, @@ -67,6 +68,7 @@ public class Config { spawnPosition, lobbyPosition, exitPosition, + seekerLobbyPosition, worldBorderPosition; public static boolean @@ -116,7 +118,8 @@ public class Config { lobbyItemLeavePosition, lobbyItemStartPosition, flightToggleItemPosition, - teleportItemPosition; + teleportItemPosition, + solidifyTime; public static float seekerPingLeadingVolume, @@ -184,6 +187,14 @@ public class Config { ); lobbyWorld = config.getString("spawns.lobby.world"); + ///Seeker Lobby + seekerLobbyPosition = new Vector( + config.getDouble("spawns.seeker.x"), + Math.max(Main.getInstance().supports(18) ? -64 : 0, Math.min(255, config.getDouble("spawns.seeker.y"))), + config.getDouble("spawns.seeker.z") + ); + seekerLobbyWorld = config.getString("spawns.seeker.world"); + announceMessagesToNonPlayers = config.getBoolean("announceMessagesToNonPlayers"); exitPosition = new Vector( @@ -304,6 +315,7 @@ public class Config { } } } + solidifyTime = Math.max(20,config.getInt("blockhunt.solidifyTime")); //Leaderboard LOBBY_TITLE = leaderboard.getString("lobby.title"); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java index b3fd457..ac210a3 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java @@ -333,6 +333,7 @@ public class Game { if (spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) return true; if (lobbyPosition.getBlockX() == 0 && lobbyPosition.getBlockY() == 0 && lobbyPosition.getBlockZ() == 0) return true; if (exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) return true; + if (seekerLobbyPosition.getBlockX() == 0 && seekerLobbyPosition.getBlockY() == 0 && seekerLobbyPosition.getBlockZ() == 0) return true; if (mapSaveEnabled) { File destination = new File(Main.getInstance().getWorldContainer() + File.separator + getGameWorld()); if (!destination.exists()) return true; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java index bd35ab5..eedfabe 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java @@ -52,11 +52,8 @@ public class PlayerLoader { } public static void loadSeeker(Player player, String gameWorld){ - player.teleport(new Location(Bukkit.getWorld(gameWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + player.teleport(new Location(Bukkit.getWorld(gameWorld), seekerLobbyPosition.getX(),seekerLobbyPosition.getY(),seekerLobbyPosition.getZ())); loadPlayer(player); - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS,1000000,127,false,false)); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,1000000,127,false,false)); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP,1000000,128,false,false)); Titles.sendTitle(player, 10, 70, 20, ChatColor.WHITE + "" + message("SEEKER_TEAM_NAME"), ChatColor.WHITE + message("SEEKERS_SUBTITLE").toString()); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java index 10db324..cb8ad04 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DisguiseHandler.java @@ -1,21 +1,19 @@ package net.tylermurphy.hideAndSeek.game.listener; import static com.comphenix.protocol.PacketType.Play.Client.*; +import static net.tylermurphy.hideAndSeek.configuration.Config.solidifyTime; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; -import com.cryptomorin.xseries.XMaterial; import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.game.util.Disguise; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.attribute.Attribute; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -23,15 +21,9 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - import java.util.ArrayList; import java.util.List; -@SuppressWarnings("deprecation") public class DisguiseHandler implements Listener { private static final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager(); @@ -50,18 +42,11 @@ public class DisguiseHandler implements Listener { if(lastLocation.getWorld() != currentLocation.getWorld()) return; double distance = lastLocation.distance(currentLocation); disguise.setSolidify(distance < .1); - }, 40L); + }, solidifyTime); if(event.getFrom().distance(event.getTo()) > .1) disguise.setSolidify(false); } -// @EventHandler(priority = EventPriority.MONITOR) -// public void onInteract(PlayerInteractEvent event) { -// Action action = event.getAction(); -// Player player = event.getPlayer(); -// Block block = event. -// } - private PacketAdapter createProtocol(){ return new PacketAdapter(Main.getInstance(), USE_ENTITY) { @@ -69,7 +54,6 @@ public class DisguiseHandler implements Listener { public void onPacketReceiving(PacketEvent event){ PacketContainer packet = event.getPacket(); Player player = event.getPlayer(); -// if(!Main.getInstance().getBoard().isSeeker(player)) return; int id = packet.getIntegers().read(0); Disguise disguise = Main.getInstance().getDisguiser().getByEntityID(id); if(disguise == null) disguise = Main.getInstance().getDisguiser().getByHitBoxID(id); @@ -91,7 +75,7 @@ public class DisguiseHandler implements Listener { if(Main.getInstance().supports(9)) { amount = seeker.getAttribute(Attribute.GENERIC_ATTACK_DAMAGE).getValue(); } else { - amount = getItemDamageValue(seeker.getItemInHand(), disguise.getPlayer(), seeker); + return; //1.8 is not supported in Blockhunt yet!!! } disguise.setSolidify(false); @@ -112,76 +96,4 @@ public class DisguiseHandler implements Listener { Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getInstance(), () -> debounce.remove(disguise.getPlayer()), 10); } - private int getItemDamageValue(ItemStack is, Player damaged, Player attacker) { - double damageValue = 0; - if (is != null) { - if (is.getType() == XMaterial.WOODEN_SWORD.parseMaterial()) { - damageValue = 5; - } else if (is.getType() == Material.STONE_SWORD) { - damageValue = 6; - } else if (is.getType() == Material.IRON_SWORD) { - damageValue = 7; - } else if (is.getType() == Material.DIAMOND_SWORD) { - damageValue = 8; - } else { - damageValue = 1; - } - damageValue += is.getEnchantmentLevel(Enchantment.DAMAGE_ALL); - } - - if (damaged != null) { - Inventory i = damaged.getInventory(); - Material helmet = i.getItem(39).getType(); - Material chestplate = i.getItem(40).getType(); - Material leggings = i.getItem(41).getType(); - Material boots = i.getItem(42).getType(); - if (helmet == Material.LEATHER_HELMET) - damageValue -= (0.5 / 1.5); - // value shown at bar above the health bar / 1.5 - else if (helmet == Material.CHAINMAIL_HELMET - || helmet == Material.IRON_HELMET - || helmet == Material.DIAMOND_HELMET - || helmet == XMaterial.GOLDEN_HELMET.parseMaterial()) - damageValue -= (1 / 1.5); - - if (chestplate == Material.LEATHER_CHESTPLATE) - damageValue -= (1.0); - else if (chestplate == Material.CHAINMAIL_CHESTPLATE - || chestplate == XMaterial.GOLDEN_CHESTPLATE.parseMaterial()) - damageValue -= (2.5 / 1.5); - else if (chestplate == Material.IRON_CHESTPLATE) - damageValue -= (3 / 1.5); - else if (chestplate == Material.DIAMOND_CHESTPLATE) - damageValue -= (4 / 1.5); - - if (leggings == Material.LEATHER_LEGGINGS) - damageValue -= (1 / 1.5); - else if (leggings == XMaterial.GOLDEN_LEGGINGS.parseMaterial()) - damageValue -= (1.0); - else if (leggings == Material.CHAINMAIL_LEGGINGS) - damageValue -= (2 / 1.5); - else if (leggings == Material.IRON_LEGGINGS) - damageValue -= (2.5 / 1.5); - else if (leggings == Material.DIAMOND_LEGGINGS) - damageValue -= (3 / 1.5); - - if (boots == Material.LEATHER_BOOTS - || boots == XMaterial.GOLDEN_BOOTS.parseMaterial() - || boots == Material.CHAINMAIL_BOOTS) - damageValue -= (0.5 / 1.5); - else if (boots == Material.IRON_BOOTS) - damageValue -= (1 / 1.5); - else if (boots == Material.DIAMOND_BOOTS) - damageValue -= (1.0); - } - - for (PotionEffect effect : attacker.getActivePotionEffects()){ - if (effect.getType() == PotionEffectType.HARM) { - damageValue += effect.getAmplifier()*1.5; - } - } - - return (int) Math.round(Math.max(damageValue, 0.0)); - } - } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java index 1f0c8a3..2dda402 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java @@ -22,6 +22,7 @@ package net.tylermurphy.hideAndSeek.util; import net.tylermurphy.hideAndSeek.command.*; import net.tylermurphy.hideAndSeek.command.location.SetExitLocation; import net.tylermurphy.hideAndSeek.command.location.SetLobbyLocation; +import net.tylermurphy.hideAndSeek.command.location.SetSeekerLobbyLocation; import net.tylermurphy.hideAndSeek.command.location.SetSpawnLocation; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -53,6 +54,7 @@ public class CommandHandler { registerCommand(new Stop()); registerCommand(new SetSpawnLocation()); registerCommand(new SetLobbyLocation()); + registerCommand(new SetSeekerLobbyLocation()); registerCommand(new SetExitLocation()); registerCommand(new SetBorder()); registerCommand(new Reload()); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9500859..b648c8b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -128,8 +128,11 @@ databaseName: hideandseek # You want block hunt? We have block hunt! Just enable it below, and set the # available blocks to pick from, and you're all set! It's that easy! # Items are displayed in the order that they are listed below. +# The solidifyTime is the time in server ticks that it takes players to solidify. +# Every 20 ticks is a second. Minimum solidifyTime is 20 ticks. blockhunt: enabled: false + solidifyTime: 60 blocks: [CRAFTING_TABLE, GRASS_BLOCK, DIRT, BEACON, BOOKSHELF] worldBorder: @@ -306,6 +309,13 @@ spawns: y: 0 z: 0 world: world + # Location where seekers wait during the hiding grace period + seeker: + x: 0 + y: 0 + z: 0 + # Currently is not used, seekers are teleported to spawns.game.world + world: world # Location where players are teleported when they exit (/hs leave) exit: x: 0 diff --git a/src/main/resources/lang/localization_de-DE.yml b/src/main/resources/lang/localization_de-DE.yml index a1a6eea..4e6e74e 100644 --- a/src/main/resources/lang/localization_de-DE.yml +++ b/src/main/resources/lang/localization_de-DE.yml @@ -46,6 +46,7 @@ Localization: SETUP: "&f&lFühre die folgenden Schritte zur Einrichtung aus:" SETUP_GAME: "&c&l- &fTeleport-Position für den Spielbeginn festlegen mit /hs setspawn" SETUP_LOBBY: "&c&l- &fTeleport-Position für die Lobby festlegen mit /hs setlobby" + SETUP_SEEKER_LOBBY: "&c&l- &fTeleport-Position für die Lobby Seekern festlegen mit /hs setseekerlobby" SETUP_EXIT: "&c&l- &fTeleport-Position für das Spielende festlegen mit /hs setexit" SETUP_SAVEMAP: "&c&l- &fHide and Seek Weltkarte speichern mit /hs savemap (nach /hs setspawn)" SETUP_COMPLETE: "Alles eingerichtet! Hide and Seek ist spielbereit." diff --git a/src/main/resources/lang/localization_en-US.yml b/src/main/resources/lang/localization_en-US.yml index 96ccf7a..32dd5f8 100644 --- a/src/main/resources/lang/localization_en-US.yml +++ b/src/main/resources/lang/localization_en-US.yml @@ -47,6 +47,7 @@ Localization: SETUP: "&f&lThe following is needed for setup..." SETUP_GAME: "&c&l- &fGame spawn isn't set, /hs setspawn" SETUP_LOBBY: "&c&l- &fLobby spawn isn't set, /hs setlobby" + SET_SEEKER_LOBBY: "&c&l- &fSeeker Lobby spawn isn't set, /hs setseekerlobby" SETUP_EXIT: "&c&l- &fQuit/exit teleport location isn't set, /hs setexit" SETUP_SAVEMAP: "&c&l- &fHide and seek map isn't saved, /hs savemap (after /hs setspawn)" SETUP_BOUNDS: "&c&l- &fPlease set game bounds in 2 opposite corners of the game map, /hs setbounds" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index eab74ad..1f61282 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: KenshinsHideAndSeek main: net.tylermurphy.hideAndSeek.Main -version: 1.6.0 +version: 1.6.1 author: KenshinEto load: STARTUP api-version: 1.13 @@ -21,6 +21,7 @@ permissions: hideandseek.setborder: true hideandseek.setspawn: true hideandseek.setlobby: true + hideandseek.setseekerlobby: true hideandseek.setexit: true hideadnseek.setbounds: true hideandseek.setup: true @@ -51,6 +52,9 @@ permissions: hideandseek.setlobby: description: Allows you to set the game lobby point default: op + hideandseek.setseekerlobby: + description: Allows you to set the game seeker lobby point + default: op hideandseek.setexit: description: Allows you to set the game exit point default: op From 71db93f2e2b45ef726491134adee05b97a39dbee Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Tue, 9 Aug 2022 13:46:28 -0400 Subject: [PATCH 2/4] SET_SEEKER_LOBBY typo --- src/main/resources/lang/localization_en-US.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/lang/localization_en-US.yml b/src/main/resources/lang/localization_en-US.yml index 32dd5f8..ef3fe88 100644 --- a/src/main/resources/lang/localization_en-US.yml +++ b/src/main/resources/lang/localization_en-US.yml @@ -47,7 +47,7 @@ Localization: SETUP: "&f&lThe following is needed for setup..." SETUP_GAME: "&c&l- &fGame spawn isn't set, /hs setspawn" SETUP_LOBBY: "&c&l- &fLobby spawn isn't set, /hs setlobby" - SET_SEEKER_LOBBY: "&c&l- &fSeeker Lobby spawn isn't set, /hs setseekerlobby" + SETUP_SEEKER_LOBBY: "&c&l- &fSeeker Lobby spawn isn't set, /hs setseekerlobby" SETUP_EXIT: "&c&l- &fQuit/exit teleport location isn't set, /hs setexit" SETUP_SAVEMAP: "&c&l- &fHide and seek map isn't saved, /hs savemap (after /hs setspawn)" SETUP_BOUNDS: "&c&l- &fPlease set game bounds in 2 opposite corners of the game map, /hs setbounds" From 7a082c860e79f6204e49b4e113dd64269c44dd36 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Tue, 16 Aug 2022 08:46:16 -0400 Subject: [PATCH 3/4] Fix Board Join Exceptions on 1.8, and fixed Failed to Select Seeker --- .../tylermurphy/hideAndSeek/game/Board.java | 12 ----------- .../tylermurphy/hideAndSeek/game/Game.java | 5 +---- .../hideAndSeek/world/VoidGenerator.java | 20 +++++++++++++++++-- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java index 6bf0bfb..55dfa3c 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java @@ -104,9 +104,6 @@ public class Board { } public void addHider(Player player) { - if(!Main.getInstance().supports(9)){ - player.spigot().setCollidesWithEntities(false); - } Hider.add(player.getUniqueId().toString()); Seeker.remove(player.getUniqueId().toString()); Spectator.remove(player.getUniqueId().toString()); @@ -114,9 +111,6 @@ public class Board { } public void addSeeker(Player player) { - if(!Main.getInstance().supports(9)){ - player.spigot().setCollidesWithEntities(false); - } Hider.remove(player.getUniqueId().toString()); Seeker.add(player.getUniqueId().toString()); Spectator.remove(player.getUniqueId().toString()); @@ -124,9 +118,6 @@ public class Board { } public void addSpectator(Player player) { - if(!Main.getInstance().supports(9)){ - player.spigot().setCollidesWithEntities(false); - } Hider.remove(player.getUniqueId().toString()); Seeker.remove(player.getUniqueId().toString()); Spectator.add(player.getUniqueId().toString()); @@ -134,9 +125,6 @@ public class Board { } public void remove(Player player) { - if(!Main.getInstance().supports(9)){ - player.spigot().setCollidesWithEntities(true); - } Hider.remove(player.getUniqueId().toString()); Seeker.remove(player.getUniqueId().toString()); Spectator.remove(player.getUniqueId().toString()); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java index ac210a3..7c5eaf2 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java @@ -107,10 +107,7 @@ public class Game { public void start() { try { Optional rand = board.getPlayers().stream().skip(new Random().nextInt(board.size())).findFirst(); - Player picked = rand.orElse(board.getPlayers().get(0)); - String seekerName = picked.getName(); - Player temp = Bukkit.getPlayer(seekerName); - Player seeker = board.getPlayer(temp.getUniqueId()); + Player seeker = rand.orElse(board.getPlayers().get(0)); start(seeker); } catch (Exception e){ Main.getInstance().getLogger().warning("Failed to select random seeker."); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java b/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java index a81aa51..eadd0a9 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java @@ -29,7 +29,7 @@ import java.util.List; import java.util.Random; @SuppressWarnings({"unused"}) -public class VoidGenerator extends ChunkGenerator{ +public class VoidGenerator extends ChunkGenerator { // 1.14 And On public @NotNull List getDefaultPopulators(@NotNull World world) { @@ -69,6 +69,22 @@ public class VoidGenerator extends ChunkGenerator{ } // 1.13 And Prev - public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome) { return createChunkData(world); } + public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome) { + return createChunkData(world); + } + + // 1.8 + public byte[] generate(World world, Random random, int x, int z) { + return null; + } + + public short[][] generateExtBlockSections(World world, Random random, int x, int z, ChunkGenerator.BiomeGrid biomes) { + return null; + } + + public byte[][] generateBlockSections(World world, Random random, int x, int z, ChunkGenerator.BiomeGrid biomes) { + return null; + } + } From 0bbf648c458edfa189f5edbd5615544c4040b684 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Tue, 16 Aug 2022 20:08:04 -0400 Subject: [PATCH 4/4] delayed respawn --- .../hideAndSeek/configuration/Config.java | 10 ++++++++-- .../net/tylermurphy/hideAndSeek/game/Game.java | 7 ++++++- .../hideAndSeek/game/listener/DamageHandler.java | 14 ++++++++++++-- src/main/resources/config.yml | 8 ++++++++ src/main/resources/lang/localization_de-DE.yml | 1 + src/main/resources/lang/localization_en-US.yml | 1 + 6 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java index 853b6a2..a71369f 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java @@ -93,7 +93,8 @@ public class Config { mapSaveEnabled, allowNaturalCauses, saveInventory, - blockhuntEnabled; + blockhuntEnabled, + delayedRespawn; public static int minPlayers, @@ -119,7 +120,8 @@ public class Config { lobbyItemStartPosition, flightToggleItemPosition, teleportItemPosition, - solidifyTime; + solidifyTime, + delayedRespawnDelay; public static float seekerPingLeadingVolume, @@ -365,6 +367,10 @@ public class Config { Main.getInstance().getLogger().warning("databaseType: "+databaseType+" is not a valid configuration option!"); databaseType = "SQLITE"; } + + delayedRespawn = config.getBoolean("delayedRespawn.enabled"); + delayedRespawnDelay = Math.max(0,config.getInt("delayedRespawn.delay")); + } public static void addToConfig(String path, Object value) { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java index 7c5eaf2..71c3e84 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java @@ -254,7 +254,12 @@ public class Game { if (startingTimer == 0) { message = message("START").toString(); status = Status.PLAYING; - board.getPlayers().forEach(player -> PlayerLoader.resetPlayer(player, board)); + board.getPlayers().forEach(player -> { + PlayerLoader.resetPlayer(player, board); + if(board.isSeeker(player)){ + player.teleport(new Location(Bukkit.getWorld(getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + } + }); } else if (startingTimer == 1){ message = message("START_COUNTDOWN_LAST").addAmount(startingTimer).toString(); } else { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java index cb4cba5..d03d5d6 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java @@ -80,7 +80,7 @@ public class DamageHandler implements Listener { return; } // Players cannot take damage while game is not in session - if (board.contains(player) && (game.getStatus() == Status.STANDBY || game.getStatus() == Status.STARTING)){ + if (board.contains(player) && game.getStatus() != Status.PLAYING){ event.setCancelled(true); return; } @@ -97,7 +97,17 @@ public class DamageHandler implements Listener { // Reveal player if they are disguised Main.getInstance().getDisguiser().reveal(player); // Teleport player to seeker spawn - player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + if(delayedRespawn){ + player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), seekerLobbyPosition.getX(), seekerLobbyPosition.getY(), seekerLobbyPosition.getZ())); + player.sendMessage(messagePrefix + message("RESPAWN_NOTICE").addAmount(delayedRespawnDelay)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.getInstance(), () -> { + if(game.getStatus() == Status.PLAYING){ + player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + } + }, delayedRespawnDelay * 20L); + } else { + player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + } // Add leaderboard stats board.addDeath(player.getUniqueId()); if (attacker != null) board.addKill(attacker.getUniqueId()); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b648c8b..1d61cdc 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -100,6 +100,14 @@ mapSaveEnabled: true # default: false saveInventory: false +# By default, if you die in game, you will have to wait [delay] seconds until you respawn. This make is so that if you are killed as a seeker, you cannot +# instally go to where the Hider that killed you was. Or if you were a Hider and died, you cant instally go to where you know other Hiders are. It gives some +# breathing room. This can be disabled. +# default: true +delayedRespawn: + enabled: true + delay: 5 + # How you want to store game data. If you are running a single server, sqlite is fine, as no setup is necessary. # But if you want the data to go across multiple servers, you can switch it to mysql. # WARNING: Data is not saved across databases. You have to migrate the data yourself! diff --git a/src/main/resources/lang/localization_de-DE.yml b/src/main/resources/lang/localization_de-DE.yml index 4e6e74e..75523b2 100644 --- a/src/main/resources/lang/localization_de-DE.yml +++ b/src/main/resources/lang/localization_de-DE.yml @@ -74,6 +74,7 @@ Localization: BLOCKED_COMMAND: "Command blocked by Kenshin's Hide And Seek" FLYING_ENABLED: "Fliegen aktiviert" FLYING_DISABLED: "Fliegen deaktiviert" + RESPAWN_NOTICE: "Du wirst in {AMOUNT} Sekunden respawnen." # DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE version: 3 diff --git a/src/main/resources/lang/localization_en-US.yml b/src/main/resources/lang/localization_en-US.yml index ef3fe88..02bc942 100644 --- a/src/main/resources/lang/localization_en-US.yml +++ b/src/main/resources/lang/localization_en-US.yml @@ -75,6 +75,7 @@ Localization: BLOCKED_COMMAND: "Command blocked by Hide And Seek plugin." FLYING_ENABLED: "&l&bFlying Enabled" FLYING_DISABLED: "&l&bFlying Disabled" + RESPAWN_NOTICE: "You will respawn in {AMOUNT} seconds." # DO NOT EDIT IT OR IT MAY BREAK OR RESET FILE version: 3