From c5c6e8c32b9df3d6852fdeff97106f04cdb1392a Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 23 Jan 2020 08:31:32 +0100 Subject: [PATCH] Implement personal kits (untested) Signed-off-by: Lixfel --- .../src/de/steamwar/fightsystem/Config.java | 2 + FightSystem_Main/src/config.yml | 2 + .../de/steamwar/fightsystem/FightSystem.java | 2 + .../de/steamwar/fightsystem/commands/GUI.java | 6 +++ .../steamwar/fightsystem/fight/FightTeam.java | 2 +- .../fightsystem/utils/PersonalKitCreator.java | 49 ++++++++++++++++--- 6 files changed, 55 insertions(+), 8 deletions(-) diff --git a/FightSystem_API/src/de/steamwar/fightsystem/Config.java b/FightSystem_API/src/de/steamwar/fightsystem/Config.java index 51f438e..c362ec4 100644 --- a/FightSystem_API/src/de/steamwar/fightsystem/Config.java +++ b/FightSystem_API/src/de/steamwar/fightsystem/Config.java @@ -98,6 +98,7 @@ public class Config { public static final String MemberDefault; public static final String LeaderDefault; public static final boolean PersonalKits; + public static final List ForbiddenItems; //tech hider parameter public static final Set HiddenBlocks; @@ -179,6 +180,7 @@ public class Config { MemberDefault = config.getString("Kits.MemberDefault"); LeaderDefault = config.getString("Kits.LeaderDefault"); PersonalKits = config.getBoolean("Kits.PersonalKits"); + ForbiddenItems = config.getStringList("Kits.ForbiddenItems"); ConfigurationSection techhiderConfig = config.getConfigurationSection("Techhider.HiddenBlocks"); Set blocks = new HashSet<>(); diff --git a/FightSystem_Main/src/config.yml b/FightSystem_Main/src/config.yml index 3960676..7b64223 100644 --- a/FightSystem_Main/src/config.yml +++ b/FightSystem_Main/src/config.yml @@ -41,6 +41,8 @@ WinConditionParams: Kits: MemberDefault: default LeaderDefault: default + PersonalKits: false + ForbiddenItems: [] Techhider: ObfuscateWith: 121 ObfuscateWithTag: ENDER_STONE diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java b/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java index 00766cd..999292d 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java @@ -10,6 +10,7 @@ import de.steamwar.fightsystem.listener.*; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependent; import de.steamwar.fightsystem.utils.FightScoreboard; +import de.steamwar.fightsystem.utils.PersonalKitCreator; import de.steamwar.fightsystem.utils.TechHider; import de.steamwar.fightsystem.utils.WaterRemover; import de.steamwar.fightsystem.winconditions.*; @@ -136,6 +137,7 @@ public class FightSystem extends JavaPlugin { throw new SecurityException(fightState.name()); setFightState(FightState.PRE_RUNNING); + PersonalKitCreator.closeAll(); loadKits(Fight.getBlueTeam()); loadKits(Fight.getRedTeam()); setAllPlayersGM(GameMode.SURVIVAL); diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/commands/GUI.java b/FightSystem_Main/src/de/steamwar/fightsystem/commands/GUI.java index dc9fe1d..e58eadf 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/commands/GUI.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/commands/GUI.java @@ -8,6 +8,7 @@ import de.steamwar.fightsystem.kit.Kit; import de.steamwar.fightsystem.kit.KitManager; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.utils.PersonalKitCreator; import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWListInv; @@ -77,6 +78,11 @@ public class GUI { if(fightPlayer == null) return; + if(Config.PersonalKits){ + new PersonalKitCreator(p); + return; + } + List> iconList = new ArrayList<>(); List kitList = KitManager.getKits(fightPlayer.isLeader()); diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/fight/FightTeam.java b/FightSystem_Main/src/de/steamwar/fightsystem/fight/FightTeam.java index 8dc57cf..783a53b 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/fight/FightTeam.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/fight/FightTeam.java @@ -149,7 +149,7 @@ public class FightTeam implements IFightTeam{ Fight.setPlayerGamemode(player, GameMode.SURVIVAL); player.teleport(spawn); - if(KitManager.getKits(false).size() > 1) + if(KitManager.getKits(false).size() > 1 || Config.PersonalKits) player.getInventory().setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAttributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build()); player.getInventory().setItem(7, new ItemBuilder(Material.BEACON).removeAllAttributs().setDisplayName("§eRespawn").build()); TechHider.reloadChunks(player, chunksToReload); diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/utils/PersonalKitCreator.java b/FightSystem_Main/src/de/steamwar/fightsystem/utils/PersonalKitCreator.java index 2a36a20..8e5e3d9 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/utils/PersonalKitCreator.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/utils/PersonalKitCreator.java @@ -1,18 +1,30 @@ package de.steamwar.fightsystem.utils; +import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; +import de.steamwar.fightsystem.fight.Fight; +import de.steamwar.fightsystem.fight.FightPlayer; +import de.steamwar.sql.PersonalKit; +import de.steamwar.sql.SteamwarUser; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.ItemStack; +import java.util.HashSet; +import java.util.Set; + public class PersonalKitCreator implements Listener { + private static final Set openKitCreators = new HashSet<>(); + private final Player player; + private final SteamwarUser user; private final ItemStack[] contents; private final ItemStack[] armor; @@ -20,15 +32,33 @@ public class PersonalKitCreator implements Listener { this.player = player; contents = player.getInventory().getContents(); armor = player.getInventory().getArmorContents(); + user = SteamwarUser.get(player.getUniqueId()); - //TODO Get Current Kit inventory - //TODO Prevent unwanted items - player.getInventory().setContents(); - player.getInventory().setArmorContents(); + PersonalKit kit = PersonalKit.get(user.getId(), Config.SchematicType.toDB()); + if(kit == null){ + FightPlayer fightPlayer = Fight.getFightPlayer(player); + assert fightPlayer != null; + fightPlayer.getKit().loadToPlayer(player); + }else{ + player.getInventory().setContents(kit.getInventory()); + player.getInventory().setArmorContents(kit.getArmor()); + } player.setGameMode(GameMode.CREATIVE); - player.openInventory(this.inventory); + player.openInventory(player.getInventory()); Bukkit.getPluginManager().registerEvents(this, FightSystem.getPlugin()); + openKitCreators.add(this); + } + + public static void closeAll(){ + for(PersonalKitCreator creator : openKitCreators) + creator.close(); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e){ + if(e.getCursor() != null && Config.ForbiddenItems.contains(e.getCursor().getType().name())) + e.setCancelled(true); } @EventHandler @@ -36,11 +66,16 @@ public class PersonalKitCreator implements Listener { if(!player.equals(e.getPlayer())) return; - //TODO Autoclose inventory on PreFightStart + close(); + } + + private void close(){ + PersonalKit.save(user.getId(), Config.SchematicType.toDB(), player.getInventory().getContents(), player.getInventory().getArmorContents()); player.closeInventory(); player.getInventory().setContents(contents); - player.getInventory().setArmorContents(contents); + player.getInventory().setArmorContents(armor); player.setGameMode(GameMode.SURVIVAL); HandlerList.unregisterAll(this); + openKitCreators.remove(this); } }