diff --git a/src/main/java/xyz/twovb/sgm/SGM.java b/src/main/java/xyz/twovb/sgm/SGM.java index 72db0e5..24597a1 100644 --- a/src/main/java/xyz/twovb/sgm/SGM.java +++ b/src/main/java/xyz/twovb/sgm/SGM.java @@ -18,6 +18,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.plugin.java.JavaPlugin; import xyz.twovb.sgm.commands.handlers.InvalidArgsHandler; import xyz.twovb.sgm.commands.handlers.NoPermissionsHandler; @@ -85,6 +86,11 @@ public final class SGM extends JavaPlugin implements Listener { event.setCancelled(true); } + @EventHandler + public void onFoodLose(FoodLevelChangeEvent event) { + event.setCancelled(true); + } + private void loadScoreboard() { try { scoreboardLibrary = ScoreboardLibrary.loadScoreboardLibrary(this); diff --git a/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java b/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java index b3ce748..3394915 100644 --- a/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java +++ b/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java @@ -81,6 +81,39 @@ public class GameCommand { new JoinGameGui().getGui().show(player); } + @Execute(name = "leave") + void leave(@Context Player player) { + Minigame game = SGM.getInstance().getGameManager().findGame(player); + if (game == null) { + CustomPlayer cPlayer = new CustomPlayer(player); + cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.not-found")); + } else { + game.removePlayer(player); + } + } + + @Execute(name = "stop") + void stop(@Context Player player) { + Minigame game = SGM.getInstance().getGameManager().findGame(player); + if (game == null) { + CustomPlayer cPlayer = new CustomPlayer(player); + cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.not-found")); + } else { + game.stop(); + } + } + + @Execute(name = "forcestop") + @Permission("sgm.games.forcestop") + void endGame(@Context CommandSender sender, @Arg("id") String id) { + Minigame game = SGM.getInstance().getGameManager().findGame(UUID.fromString(id)); + if (game == null) { + sender.sendMessage(ChatUtils.translate(SGM.getInstance().getMessages().getString("sgm.game.not-found"))); + } else { + game.stop(); + } + } + @Execute(name = "addplayer") @Permission("sgm.games.addplayer") void testjoin(@Context CommandSender sender, @Arg("player") Player target, @Arg("id") String id) { diff --git a/src/main/java/xyz/twovb/sgm/commands/impl/LevelCommand.java b/src/main/java/xyz/twovb/sgm/commands/impl/LevelCommand.java index d3043b0..7239b55 100644 --- a/src/main/java/xyz/twovb/sgm/commands/impl/LevelCommand.java +++ b/src/main/java/xyz/twovb/sgm/commands/impl/LevelCommand.java @@ -73,8 +73,9 @@ public class LevelCommand { void export(@Context CommandSender sender, @Arg("name") String name) { try { SGM.getInstance().getLevelManager().exportLevel(name); + sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.level.export.done"), sender).replace("%level%", name))); } catch (IOException e) { - SGM.getInstance().getCLogger().error(e); + sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.level.not-found"), sender))); } } diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java index 8b4e78e..b40ac5e 100644 --- a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java @@ -21,6 +21,7 @@ import net.megavex.scoreboardlibrary.api.team.TeamDisplay; import net.megavex.scoreboardlibrary.api.team.TeamManager; import net.megavex.scoreboardlibrary.api.team.enums.CollisionRule; import org.bukkit.*; +import org.bukkit.attribute.Attribute; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; @@ -279,6 +280,7 @@ public class CTB implements Minigame { HandlerList.unregisterAll(this); for (Player player : gameWorld.getPlayers()) { player.teleport(Bukkit.getServer().getWorlds().get(0).getSpawnLocation()); + player.getInventory().clear(); } Bukkit.unloadWorld(gameWorld, false); if (teamManager != null) { @@ -306,6 +308,7 @@ public class CTB implements Minigame { sb.removePlayer(player); removePlayerFromTeams(player); player.setRespawnLocation(Bukkit.getWorlds().get(0).getSpawnLocation()); + player.getInventory().clear(); players.remove(player); } @@ -362,7 +365,7 @@ public class CTB implements Minigame { private void releasePlayer(Player tagged, Player tagger) { playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Free); - playerStateMap.replace(tagged, CtbData.PlayerState.Tagged, CtbData.PlayerState.Invulnerable); + playerStateMap.replace(tagged, CtbData.PlayerState.Tagged, CtbData.PlayerState.Free); CustomPlayer cTagged = new CustomPlayer(tagged); CustomPlayer cTagger = new CustomPlayer(tagger); cTagged.sendMessage(messages.getString("system.player.released.info").replace("%player%", tagger.getName())); @@ -398,7 +401,6 @@ public class CTB implements Minigame { Player player = event.getThief(); if (!players.contains(player)) return; ScoreboardTeam team = getTeam(player); - player.getInventory().clear(); addScore(team, 1); } @@ -425,6 +427,8 @@ public class CTB implements Minigame { if (!players.contains(player)) return; if (this.state != GameState.STARTED) return; if (playerStateMap.get(player) != CtbData.PlayerState.Stealing) return; + EntityEquipment entityEquipment = player.getEquipment(); + entityEquipment.setHelmet(new ItemStack(Material.AIR)); player.sendMessage(event.getMessage()); } @@ -740,6 +744,8 @@ public class CTB implements Minigame { CtbData.PlayerState playerState = playerStateMap.get(player); playerStateMap.replace(player, playerState, CtbData.PlayerState.Jailed); PlayerJailedEvent jailedEvent = new PlayerJailedEvent(player); + player.setFireTicks(0); + player.setHealth(Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)).getValue()); jailedEvent.callEvent(); ScoreboardTeam team = getTeam(player); // SGM.getInstance().getCLogger().log(team.name()); diff --git a/src/main/resources/games/capturethebrick/messages.yml b/src/main/resources/games/capturethebrick/messages.yml index b0601b9..c51f882 100644 --- a/src/main/resources/games/capturethebrick/messages.yml +++ b/src/main/resources/games/capturethebrick/messages.yml @@ -17,8 +17,8 @@ system: notime: notify: "&7You have run out of time to bring %player% to Jail! You must head back to Neutral before you can do anything." info: "&7%player% has run out of time to take you to Jail! You have been released and you must head back to Neutral before you can do anything." - notify: "&7You have been tagged! %player% now has 25 seconds to take you to Jail or you will be freed!" - info: "&7You have tagged %player%! You have 25 seconds to take them to Jail! Crouch if you would like to set them free." + notify: "&7You have been tagged! %player% now has %seconds% seconds to take you to Jail or you will be freed!" + info: "&7You have tagged %player%! You have %seconds% seconds to take them to Jail! Crouch if you would like to set them free." released: notify: "&7You have released %player%" info: "&7%player% let you free! You must head back to Neutral before you can do anything."