From a97b345b3074abdd94532c2d04e3d99ef4c8bc99 Mon Sep 17 00:00:00 2001 From: Daniel Saukel Date: Tue, 31 May 2016 18:01:19 +0200 Subject: [PATCH] CaliburnAPI / ItemsXL integration. Closes #74; closes #15 --- pom.xml | 17 +++++++++++- .../github/dre2n/dungeonsxl/DungeonsXL.java | 22 ++++++++++++++++ .../dre2n/dungeonsxl/config/PlayerData.java | 2 -- .../dre2n/dungeonsxl/config/WorldConfig.java | 26 +++++++++---------- .../dre2n/dungeonsxl/game/GameRules.java | 7 ++--- .../dungeonsxl/listener/PlayerListener.java | 4 +-- .../dungeonsxl/listener/WorldListener.java | 1 - .../github/dre2n/dungeonsxl/mob/DMobType.java | 7 ++--- .../dre2n/dungeonsxl/player/DClass.java | 16 ++++++++++-- .../dre2n/dungeonsxl/sign/ClassesSign.java | 1 - ...ItemUtil.java => DeserialisazionUtil.java} | 12 ++++----- .../dre2n/dungeonsxl/world/GameWorld.java | 13 ++++------ src/main/resources/plugin.yml | 2 +- 13 files changed, 85 insertions(+), 45 deletions(-) rename src/main/java/io/github/dre2n/dungeonsxl/util/{ItemUtil.java => DeserialisazionUtil.java} (86%) diff --git a/pom.xml b/pom.xml index 860e1323..358796a7 100644 --- a/pom.xml +++ b/pom.xml @@ -48,10 +48,15 @@ io.github.dre2n.commons io.github.dre2n.dungeonsxl + + io.github.dre2n.caliburn + io.github.dre2n.dungeonsxl.util.caliburn + io.github.dre2n:commons + io.github.dre2n:caliburn @@ -78,6 +83,16 @@ commons 1.0-SNAPSHOT + + io.github.dre2n + caliburn + 0.1.4 + + + io.github.dre2n + itemsxl + 0.1.4 + io.github.dre2n commandsxl @@ -86,7 +101,7 @@ net.citizensnpcs citizensapi - 2.0.17-SNAPSHOT + 2.0.18-SNAPSHOT provided diff --git a/src/main/java/io/github/dre2n/dungeonsxl/DungeonsXL.java b/src/main/java/io/github/dre2n/dungeonsxl/DungeonsXL.java index 9a1ebf64..eb33550c 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/DungeonsXL.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/DungeonsXL.java @@ -16,6 +16,7 @@ */ package io.github.dre2n.dungeonsxl; +import io.github.dre2n.caliburn.CaliburnAPI; import io.github.dre2n.commons.command.BRCommands; import io.github.dre2n.commons.compatibility.Internals; import io.github.dre2n.commons.config.MessageConfig; @@ -53,6 +54,7 @@ import io.github.dre2n.dungeonsxl.task.WorldUnloadTask; import io.github.dre2n.dungeonsxl.trigger.TriggerTypes; import io.github.dre2n.dungeonsxl.world.EditWorld; import io.github.dre2n.dungeonsxl.world.GameWorld; +import io.github.dre2n.itemsxl.ItemsXL; import java.io.File; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; @@ -77,6 +79,8 @@ public class DungeonsXL extends BRPlugin { public static File MOBS; public static File SIGNS; + private CaliburnAPI caliburn; + private GlobalData globalData; private MainConfig mainConfig; private MessageConfig messageConfig; @@ -304,6 +308,24 @@ public class DungeonsXL extends BRPlugin { return instance; } + /** + * @return the loaded instance of CaliburnAPI + */ + public CaliburnAPI getCaliburnAPI() { + return caliburn; + } + + /** + * load / reload a new instance of CaliburnAPI + */ + public void loadCaliburnAPI() { + if (manager.isPluginEnabled("ItemsXL")) { + this.caliburn = ItemsXL.getInstance().getAPI(); + } else { + this.caliburn = new CaliburnAPI(this); + } + } + /** * @return the loaded instance of GlobalData */ diff --git a/src/main/java/io/github/dre2n/dungeonsxl/config/PlayerData.java b/src/main/java/io/github/dre2n/dungeonsxl/config/PlayerData.java index 30ef52bf..9d238163 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/config/PlayerData.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/config/PlayerData.java @@ -23,8 +23,6 @@ import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; /** * @author Daniel Saukel diff --git a/src/main/java/io/github/dre2n/dungeonsxl/config/WorldConfig.java b/src/main/java/io/github/dre2n/dungeonsxl/config/WorldConfig.java index 0f3c9eb9..aa19fe9c 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/config/WorldConfig.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/config/WorldConfig.java @@ -16,6 +16,8 @@ */ package io.github.dre2n.dungeonsxl.config; +import io.github.dre2n.commons.compatibility.CompatibilityHandler; +import io.github.dre2n.commons.compatibility.Version; import io.github.dre2n.commons.util.EnumUtil; import io.github.dre2n.commons.util.NumberUtil; import io.github.dre2n.dungeonsxl.DungeonsXL; @@ -25,6 +27,7 @@ import io.github.dre2n.dungeonsxl.requirement.FeeLevelRequirement; import io.github.dre2n.dungeonsxl.requirement.FeeMoneyRequirement; import io.github.dre2n.dungeonsxl.requirement.GroupSizeRequirement; import io.github.dre2n.dungeonsxl.requirement.Requirement; +import io.github.dre2n.dungeonsxl.util.DeserialisazionUtil; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -32,10 +35,10 @@ import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import org.bukkit.GameMode; -import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemStack; /** * @author Frank Baumann, Milan Albrecht, Daniel Saukel @@ -43,6 +46,7 @@ import org.bukkit.configuration.file.YamlConfiguration; public class WorldConfig extends GameRules { DungeonsXL plugin = DungeonsXL.getInstance(); + CompatibilityHandler compat = CompatibilityHandler.getInstance(); private File file; @@ -79,13 +83,10 @@ public class WorldConfig extends GameRules { /* Secure Objects */ if (configFile.contains("secureObjects")) { List secureObjectList = configFile.getStringList("secureObjects"); - for (String id : secureObjectList) { - if (Material.getMaterial(NumberUtil.parseInt(id)) != null) { - secureObjects.add(Material.getMaterial(NumberUtil.parseInt(id))); - - } else if (Material.getMaterial(id) != null) { - secureObjects.add(Material.getMaterial(id)); - } + if (Version.andHigher(Version.MC1_9).contains(compat.getVersion())) { + secureObjects = plugin.getCaliburnAPI().getItems().deserializeStackList(secureObjectList); + } else { + secureObjects = DeserialisazionUtil.deserializeStackList(secureObjectList); } } @@ -244,14 +245,13 @@ public class WorldConfig extends GameRules { configFile.set("message." + msgs, this.msgs.get(msgs)); } - // Secure Objects - CopyOnWriteArrayList secureObjectsids = new CopyOnWriteArrayList<>(); + List secureObjectIds = new ArrayList<>(); - for (Material mat : secureObjects) { - secureObjectsids.add(mat.getId()); + for (ItemStack item : secureObjects) { + secureObjectIds.add(plugin.getCaliburnAPI().getItems().getCustomItemId(item)); } - configFile.set("secureObjects", secureObjectsids); + configFile.set("secureObjects", secureObjectIds); // Invited Players configFile.set("invitedPlayers", invitedPlayers); diff --git a/src/main/java/io/github/dre2n/dungeonsxl/game/GameRules.java b/src/main/java/io/github/dre2n/dungeonsxl/game/GameRules.java index b79c2917..686bf150 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/game/GameRules.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/game/GameRules.java @@ -16,6 +16,7 @@ */ package io.github.dre2n.dungeonsxl.game; +import io.github.dre2n.caliburn.item.UniversalItem; import io.github.dre2n.dungeonsxl.DungeonsXL; import io.github.dre2n.dungeonsxl.requirement.Requirement; import io.github.dre2n.dungeonsxl.reward.Reward; @@ -24,7 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import org.bukkit.GameMode; -import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; /** * @author Daniel Saukel @@ -109,7 +110,7 @@ public class GameRules { /* Misc */ protected Map msgs; - protected List secureObjects; + protected List secureObjects; /* Getters and setters */ // keepInventory @@ -315,7 +316,7 @@ public class GameRules { /** * @return the objects to get passed to another player of the group when this player leaves */ - public List getSecureObjects() { + public List getSecureObjects() { return secureObjects; } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/listener/PlayerListener.java b/src/main/java/io/github/dre2n/dungeonsxl/listener/PlayerListener.java index 8683ec54..e01b5965 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/listener/PlayerListener.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/listener/PlayerListener.java @@ -350,8 +350,8 @@ public class PlayerListener implements Listener { Game game = Game.getByWorld(gamePlayer.getWorld()); - for (Material material : game.getRules().getSecureObjects()) { - if (material == event.getItemDrop().getItemStack().getType()) { + for (ItemStack item : game.getRules().getSecureObjects()) { + if (event.getItemDrop().getItemStack().isSimilar(item)) { event.setCancelled(true); MessageUtil.sendMessage(player, DMessages.ERROR_DROP.getMessage()); return; diff --git a/src/main/java/io/github/dre2n/dungeonsxl/listener/WorldListener.java b/src/main/java/io/github/dre2n/dungeonsxl/listener/WorldListener.java index 8804bfef..e902336e 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/listener/WorldListener.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/listener/WorldListener.java @@ -18,7 +18,6 @@ package io.github.dre2n.dungeonsxl.listener; import io.github.dre2n.dungeonsxl.world.EditWorld; import io.github.dre2n.dungeonsxl.world.GameWorld; -import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; diff --git a/src/main/java/io/github/dre2n/dungeonsxl/mob/DMobType.java b/src/main/java/io/github/dre2n/dungeonsxl/mob/DMobType.java index 3cc21341..3b4a837d 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/mob/DMobType.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/mob/DMobType.java @@ -19,7 +19,6 @@ package io.github.dre2n.dungeonsxl.mob; import io.github.dre2n.commons.util.EnumUtil; import io.github.dre2n.commons.util.NumberUtil; import io.github.dre2n.commons.util.messageutil.MessageUtil; -import io.github.dre2n.dungeonsxl.DungeonsXL; import io.github.dre2n.dungeonsxl.config.DMessages; import io.github.dre2n.dungeonsxl.world.GameWorld; import java.io.File; @@ -46,8 +45,6 @@ import org.bukkit.inventory.meta.ItemMeta; */ public class DMobType { - static DungeonsXL plugin = DungeonsXL.getInstance(); - private String name; private EntityType type; @@ -75,7 +72,7 @@ public class DMobType { /** * @param name - * the name of the Announcer + * the name of the DMobType * @param config * the config that stores the information */ @@ -178,7 +175,7 @@ public class DMobType { /* Add Item to the drops map */ item.setItemMeta(itemMeta); - getDrops().put(item, chance); + drops.put(item, chance); } } } diff --git a/src/main/java/io/github/dre2n/dungeonsxl/player/DClass.java b/src/main/java/io/github/dre2n/dungeonsxl/player/DClass.java index 176671ec..aec84025 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/player/DClass.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/player/DClass.java @@ -16,7 +16,10 @@ */ package io.github.dre2n.dungeonsxl.player; -import io.github.dre2n.dungeonsxl.util.ItemUtil; +import io.github.dre2n.commons.compatibility.CompatibilityHandler; +import io.github.dre2n.commons.compatibility.Version; +import io.github.dre2n.dungeonsxl.DungeonsXL; +import io.github.dre2n.dungeonsxl.util.DeserialisazionUtil; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -29,6 +32,9 @@ import org.bukkit.inventory.ItemStack; */ public class DClass { + DungeonsXL plugin = DungeonsXL.getInstance(); + CompatibilityHandler compat = CompatibilityHandler.getInstance(); + private String name; private List items = new ArrayList<>(); @@ -42,7 +48,13 @@ public class DClass { this.name = name; if (config.contains("items")) { - items = ItemUtil.fromConfig(config); + List itemList = config.getStringList("items"); + + if (Version.andHigher(Version.MC1_9).contains(compat.getVersion())) { + items = plugin.getCaliburnAPI().getItems().deserializeStackList(itemList); + } else { + items = DeserialisazionUtil.deserializeStackList(itemList); + } } if (config.contains("dog")) { diff --git a/src/main/java/io/github/dre2n/dungeonsxl/sign/ClassesSign.java b/src/main/java/io/github/dre2n/dungeonsxl/sign/ClassesSign.java index dbd9c3d3..b8f886d8 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/sign/ClassesSign.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/sign/ClassesSign.java @@ -19,7 +19,6 @@ package io.github.dre2n.dungeonsxl.sign; import io.github.dre2n.dungeonsxl.player.DClass; import io.github.dre2n.dungeonsxl.world.GameWorld; import org.bukkit.ChatColor; -import org.bukkit.Material; import org.bukkit.block.Sign; /** diff --git a/src/main/java/io/github/dre2n/dungeonsxl/util/ItemUtil.java b/src/main/java/io/github/dre2n/dungeonsxl/util/DeserialisazionUtil.java similarity index 86% rename from src/main/java/io/github/dre2n/dungeonsxl/util/ItemUtil.java rename to src/main/java/io/github/dre2n/dungeonsxl/util/DeserialisazionUtil.java index 8e7bb4d2..95215d00 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/util/ItemUtil.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/util/DeserialisazionUtil.java @@ -17,21 +17,21 @@ package io.github.dre2n.dungeonsxl.util; import io.github.dre2n.commons.util.NumberUtil; +import java.util.ArrayList; import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import org.bukkit.configuration.ConfigurationSection; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; /** + * Deprecated deserialization methods for compatibility with 1.7.8-1.8.x + * * @author Frank Baumann, Daniel Saukel */ @Deprecated -public class ItemUtil { +public class DeserialisazionUtil { - public static List fromConfig(ConfigurationSection configSectionClasses) { - List items = configSectionClasses.getStringList("items"); - CopyOnWriteArrayList itemStacks = new CopyOnWriteArrayList<>(); + public static List deserializeStackList(List items) { + List itemStacks = new ArrayList<>(); for (String item : items) { String[] itemSplit = item.split(","); diff --git a/src/main/java/io/github/dre2n/dungeonsxl/world/GameWorld.java b/src/main/java/io/github/dre2n/dungeonsxl/world/GameWorld.java index 0906da81..a5d9b0f1 100644 --- a/src/main/java/io/github/dre2n/dungeonsxl/world/GameWorld.java +++ b/src/main/java/io/github/dre2n/dungeonsxl/world/GameWorld.java @@ -44,7 +44,6 @@ import java.util.concurrent.CopyOnWriteArrayList; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.WorldCreator; import org.bukkit.block.Block; @@ -53,6 +52,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Spider; +import org.bukkit.inventory.ItemStack; /** * @author Frank Baumann, Milan Albrecht, Daniel Saukel @@ -71,7 +71,7 @@ public class GameWorld { private Location locStart; private boolean isPlaying = false; private int id; - private List secureObjects = new ArrayList<>(); + private List secureObjects = new ArrayList<>(); private CopyOnWriteArrayList loadedChunks = new CopyOnWriteArrayList<>(); private CopyOnWriteArrayList signClass = new CopyOnWriteArrayList<>(); @@ -244,7 +244,7 @@ public class GameWorld { /** * @return the secureObjects */ - public List getSecureObjects() { + public List getSecureObjects() { return secureObjects; } @@ -252,7 +252,7 @@ public class GameWorld { * @param secureObjects * the secureObjects to set */ - public void setSecureObjects(List secureObjects) { + public void setSecureObjects(List secureObjects) { this.secureObjects = secureObjects; } @@ -539,10 +539,7 @@ public class GameWorld { /* Statics */ public static GameWorld getByWorld(World world) { for (GameWorld gameWorld : plugin.getGameWorlds()) { - if (gameWorld.getWorld() == null) { - continue; - - } else if (gameWorld.getWorld().equals(world)) { + if (gameWorld.getWorld() != null && gameWorld.getWorld().equals(world)) { return gameWorld; } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 04f8c93f..83bb3d74 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ version: ${project.version} authors: [Frank Baumann, Milan Albrecht, Tobias Schmitz, Daniel Saukel] description: ${project.description} website: ${project.url} -softdepend: [BlueRoseCommons, CommandsXL, Vault, CustomMobs, InsaneMobs, MythicMobs] +softdepend: [BlueRoseCommons, CommandsXL, ItemsXL, Vault, CustomMobs, InsaneMobs, MythicMobs] commands: dungeonsxl: description: Reference command for DungeonsXL.