diff options
6 files changed, 171 insertions, 17 deletions
diff --git a/src/me/fatpigsarefat/quests/Quests.java b/src/me/fatpigsarefat/quests/Quests.java index bfbc1081..8a730a36 100644 --- a/src/me/fatpigsarefat/quests/Quests.java +++ b/src/me/fatpigsarefat/quests/Quests.java @@ -1,6 +1,7 @@ package me.fatpigsarefat.quests; import com.google.common.io.ByteStreams; +import me.fatpigsarefat.quests.blocktype.SimilarBlocks; import me.fatpigsarefat.quests.bstats.Metrics; import me.fatpigsarefat.quests.commands.CommandQuests; import me.fatpigsarefat.quests.events.EventInventory; @@ -16,7 +17,7 @@ import me.fatpigsarefat.quests.quests.Category; import me.fatpigsarefat.quests.quests.Quest; import me.fatpigsarefat.quests.quests.QuestManager; import me.fatpigsarefat.quests.quests.Task; -import me.fatpigsarefat.quests.quests.tasktypes.*; +import me.fatpigsarefat.quests.quests.tasktypes.TaskTypeManager; import me.fatpigsarefat.quests.quests.tasktypes.types.*; import me.fatpigsarefat.quests.title.*; import me.fatpigsarefat.quests.updater.Updater; @@ -133,6 +134,8 @@ public class Quests extends JavaPlugin { Metrics metrics = new Metrics(this); this.getLogger().log(Level.INFO, "Metrics started. This can be disabled at /plugins/bStats/config.yml."); + SimilarBlocks.addBlocks(); + new BukkitRunnable() { @Override public void run() { diff --git a/src/me/fatpigsarefat/quests/blocktype/Block.java b/src/me/fatpigsarefat/quests/blocktype/Block.java new file mode 100644 index 00000000..f9b61039 --- /dev/null +++ b/src/me/fatpigsarefat/quests/blocktype/Block.java @@ -0,0 +1,34 @@ +package me.fatpigsarefat.quests.blocktype; + +import org.bukkit.Material; + +public class Block { + + private Material material; + private short data; + + public Block(Material material, short data) { + this.material = material; + this.data = data; + } + + public Block(Material material) { + this.material = material; + } + + public Material getMaterial() { + return material; + } + + public short getData() { + return data; + } + + public void setMaterial(Material material) { + this.material = material; + } + + public void setData(short data) { + this.data = data; + } +} diff --git a/src/me/fatpigsarefat/quests/blocktype/SimilarBlocks.java b/src/me/fatpigsarefat/quests/blocktype/SimilarBlocks.java new file mode 100644 index 00000000..11b9f16d --- /dev/null +++ b/src/me/fatpigsarefat/quests/blocktype/SimilarBlocks.java @@ -0,0 +1,93 @@ +package me.fatpigsarefat.quests.blocktype; + +import org.bukkit.Material; + +import java.util.HashMap; +import java.util.Map; + +public class SimilarBlocks { + + private static HashMap<Block, Block> similarBlocks = new HashMap<>(); + + public static void addBlocks() { + // Redstone Ore + similarBlocks.put(new Block(Material.REDSTONE_ORE), new Block(Material.GLOWING_REDSTONE_ORE)); + similarBlocks.put(new Block(Material.GLOWING_REDSTONE_ORE), new Block(Material.REDSTONE_ORE)); + + // Oak Door + similarBlocks.put(new Block(Material.WOODEN_DOOR, (short) 0), new Block(Material.WOODEN_DOOR)); + similarBlocks.put(new Block(Material.WOODEN_DOOR, (short) 1), new Block(Material.WOODEN_DOOR)); + similarBlocks.put(new Block(Material.WOODEN_DOOR, (short) 2), new Block(Material.WOODEN_DOOR)); + similarBlocks.put(new Block(Material.WOODEN_DOOR, (short) 3), new Block(Material.WOODEN_DOOR)); + + // Dark Oak Door + similarBlocks.put(new Block(Material.DARK_OAK_DOOR, (short) 0), new Block(Material.DARK_OAK_DOOR)); + similarBlocks.put(new Block(Material.DARK_OAK_DOOR, (short) 1), new Block(Material.DARK_OAK_DOOR)); + similarBlocks.put(new Block(Material.DARK_OAK_DOOR, (short) 2), new Block(Material.DARK_OAK_DOOR)); + similarBlocks.put(new Block(Material.DARK_OAK_DOOR, (short) 3), new Block(Material.DARK_OAK_DOOR)); + + // Acacia Door + similarBlocks.put(new Block(Material.ACACIA_DOOR, (short) 0), new Block(Material.ACACIA_DOOR)); + similarBlocks.put(new Block(Material.ACACIA_DOOR, (short) 1), new Block(Material.ACACIA_DOOR)); + similarBlocks.put(new Block(Material.ACACIA_DOOR, (short) 2), new Block(Material.ACACIA_DOOR)); + similarBlocks.put(new Block(Material.ACACIA_DOOR, (short) 3), new Block(Material.ACACIA_DOOR)); + + // Birch Door + similarBlocks.put(new Block(Material.BIRCH_DOOR, (short) 0), new Block(Material.BIRCH_DOOR)); + similarBlocks.put(new Block(Material.BIRCH_DOOR, (short) 1), new Block(Material.BIRCH_DOOR)); + similarBlocks.put(new Block(Material.BIRCH_DOOR, (short) 2), new Block(Material.BIRCH_DOOR)); + similarBlocks.put(new Block(Material.BIRCH_DOOR, (short) 3), new Block(Material.BIRCH_DOOR)); + + // Jungle Door + similarBlocks.put(new Block(Material.JUNGLE_DOOR, (short) 0), new Block(Material.JUNGLE_DOOR)); + similarBlocks.put(new Block(Material.JUNGLE_DOOR, (short) 1), new Block(Material.JUNGLE_DOOR)); + similarBlocks.put(new Block(Material.JUNGLE_DOOR, (short) 2), new Block(Material.JUNGLE_DOOR)); + similarBlocks.put(new Block(Material.JUNGLE_DOOR, (short) 3), new Block(Material.JUNGLE_DOOR)); + + // Spruce Door + similarBlocks.put(new Block(Material.SPRUCE_DOOR, (short) 0), new Block(Material.SPRUCE_DOOR)); + similarBlocks.put(new Block(Material.SPRUCE_DOOR, (short) 1), new Block(Material.SPRUCE_DOOR)); + similarBlocks.put(new Block(Material.SPRUCE_DOOR, (short) 2), new Block(Material.SPRUCE_DOOR)); + similarBlocks.put(new Block(Material.SPRUCE_DOOR, (short) 3), new Block(Material.SPRUCE_DOOR)); + + // Iron Door + similarBlocks.put(new Block(Material.IRON_DOOR, (short) 0), new Block(Material.IRON_DOOR)); + similarBlocks.put(new Block(Material.IRON_DOOR, (short) 1), new Block(Material.IRON_DOOR)); + similarBlocks.put(new Block(Material.IRON_DOOR, (short) 2), new Block(Material.IRON_DOOR)); + similarBlocks.put(new Block(Material.IRON_DOOR, (short) 3), new Block(Material.IRON_DOOR)); + + // Oak Log + similarBlocks.put(new Block(Material.LOG, (short) 4), new Block(Material.LOG, (short) 0)); + similarBlocks.put(new Block(Material.LOG, (short) 8), new Block(Material.LOG, (short) 0)); + + // Spruce Log + similarBlocks.put(new Block(Material.LOG, (short) 5), new Block(Material.LOG, (short) 1)); + similarBlocks.put(new Block(Material.LOG, (short) 9), new Block(Material.LOG, (short) 1)); + + // Birch Log + similarBlocks.put(new Block(Material.LOG, (short) 6), new Block(Material.LOG, (short) 2)); + similarBlocks.put(new Block(Material.LOG, (short) 10), new Block(Material.LOG, (short) 2)); + + // Jungle Log + similarBlocks.put(new Block(Material.LOG, (short) 7), new Block(Material.LOG, (short) 3)); + similarBlocks.put(new Block(Material.LOG, (short) 11), new Block(Material.LOG, (short) 3)); + + // Acacia Log + similarBlocks.put(new Block(Material.LOG_2, (short) 4), new Block(Material.LOG, (short) 0)); + similarBlocks.put(new Block(Material.LOG_2, (short) 8), new Block(Material.LOG, (short) 0)); + + // Dark Oak Log + similarBlocks.put(new Block(Material.LOG_2, (short) 5), new Block(Material.LOG, (short) 1)); + similarBlocks.put(new Block(Material.LOG_2, (short) 9), new Block(Material.LOG, (short) 1)); + } + + public static Block getSimilarBlock(Block block) { + for (Map.Entry<Block, Block> entry : similarBlocks.entrySet()) { + if (entry.getKey().getMaterial() == block.getMaterial() && entry.getKey().getData() == block.getData()) { + return entry.getValue(); + } + } + return null; + } + +} diff --git a/src/me/fatpigsarefat/quests/quests/tasktypes/types/BuildingCertainTaskType.java b/src/me/fatpigsarefat/quests/quests/tasktypes/types/BuildingCertainTaskType.java index 425fd693..5bda96c3 100644 --- a/src/me/fatpigsarefat/quests/quests/tasktypes/types/BuildingCertainTaskType.java +++ b/src/me/fatpigsarefat/quests/quests/tasktypes/types/BuildingCertainTaskType.java @@ -1,6 +1,8 @@ package me.fatpigsarefat.quests.quests.tasktypes.types; import me.fatpigsarefat.quests.Quests; +import me.fatpigsarefat.quests.blocktype.Block; +import me.fatpigsarefat.quests.blocktype.SimilarBlocks; import me.fatpigsarefat.quests.player.QPlayer; import me.fatpigsarefat.quests.player.questprogressfile.QuestProgress; import me.fatpigsarefat.quests.player.questprogressfile.QuestProgressFile; @@ -10,6 +12,7 @@ import me.fatpigsarefat.quests.quests.Task; import me.fatpigsarefat.quests.quests.tasktypes.ConfigValue; import me.fatpigsarefat.quests.quests.tasktypes.TaskType; import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -27,6 +30,7 @@ public final class BuildingCertainTaskType extends TaskType { this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of blocks to be placed.")); this.creatorConfigValues.add(new ConfigValue("block", true, "Name or ID of block.")); this.creatorConfigValues.add(new ConfigValue("data", false, "Data code for block.")); + this.creatorConfigValues.add(new ConfigValue("use-similar-blocks", false, "If true, this will ignore orientation of doors, logs etc.")); } @Override @@ -53,6 +57,7 @@ public final class BuildingCertainTaskType extends TaskType { Material material; Object configBlock = task.getConfigValue("block"); Object configData = task.getConfigValue("data"); + Object configSimilarBlocks = task.getConfigValue("use-similar-blocks"); if (StringUtils.isNumeric(String.valueOf(configBlock))) { material = Material.getMaterial((int) configBlock); @@ -60,8 +65,19 @@ public final class BuildingCertainTaskType extends TaskType { material = Material.getMaterial(String.valueOf(configBlock)); } - if (material != null && event.getBlock().getType().equals(material)) { - if (configData != null && (((int) event.getBlock().getData()) != ((int) configData))) { + Material blockType = event.getBlock().getType(); + short blockData = event.getBlock().getData(); + + if (configSimilarBlocks != null && ((Boolean) configSimilarBlocks)) { + Block block; + if ((block = SimilarBlocks.getSimilarBlock(new Block(blockType, blockData))) != null) { + blockType = block.getMaterial(); + blockData = block.getData(); + } + } + + if (blockType.equals(material)) { + if (configData != null && (((int) blockData) != ((int) configData))) { continue; } int brokenBlocksNeeded = (int) task.getConfigValue("amount"); diff --git a/src/me/fatpigsarefat/quests/quests/tasktypes/types/InventoryTaskType.java b/src/me/fatpigsarefat/quests/quests/tasktypes/types/InventoryTaskType.java index b0b7a1a6..ab3c2af5 100644 --- a/src/me/fatpigsarefat/quests/quests/tasktypes/types/InventoryTaskType.java +++ b/src/me/fatpigsarefat/quests/quests/tasktypes/types/InventoryTaskType.java @@ -10,22 +10,17 @@ import me.fatpigsarefat.quests.quests.Task; import me.fatpigsarefat.quests.quests.tasktypes.ConfigValue; import me.fatpigsarefat.quests.quests.tasktypes.TaskType; import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryInteractEvent; import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; import java.util.List; -import java.util.Map; public final class InventoryTaskType extends TaskType { @@ -35,7 +30,8 @@ public final class InventoryTaskType extends TaskType { super("inventory", "fatpigsarefat", "Obtain a set of items."); this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of item to retrieve.")); this.creatorConfigValues.add(new ConfigValue("item", true, "Name or ID of item.")); - this.creatorConfigValues.add(new ConfigValue("remove-items-when-complete", false, "Take the items away from the player on completion (true/false, default = false).")); + this.creatorConfigValues.add(new ConfigValue("remove-items-when-complete", false, "Take the items away from the player on completion (true/false, " + + "default = false).")); } @Override @@ -106,13 +102,10 @@ public final class InventoryTaskType extends TaskType { if (player.getInventory().containsAtLeast(is, amount)) { is.setAmount(amount); - Map<Integer, ItemStack> failures = player.getInventory().removeItem(is); - if (failures.size() == 0) { - taskProgress.setCompleted(true); + taskProgress.setCompleted(true); - if (remove != null && ((Boolean) remove)) { - player.getInventory().remove(is); - } + if (remove != null && ((Boolean) remove)) { + player.getInventory().removeItem(is); } } } diff --git a/src/me/fatpigsarefat/quests/quests/tasktypes/types/MiningCertainTaskType.java b/src/me/fatpigsarefat/quests/quests/tasktypes/types/MiningCertainTaskType.java index e375ed43..0199150e 100644 --- a/src/me/fatpigsarefat/quests/quests/tasktypes/types/MiningCertainTaskType.java +++ b/src/me/fatpigsarefat/quests/quests/tasktypes/types/MiningCertainTaskType.java @@ -1,6 +1,8 @@ package me.fatpigsarefat.quests.quests.tasktypes.types; import me.fatpigsarefat.quests.Quests; +import me.fatpigsarefat.quests.blocktype.Block; +import me.fatpigsarefat.quests.blocktype.SimilarBlocks; import me.fatpigsarefat.quests.player.QPlayer; import me.fatpigsarefat.quests.player.questprogressfile.QuestProgress; import me.fatpigsarefat.quests.player.questprogressfile.QuestProgressFile; @@ -27,6 +29,7 @@ public final class MiningCertainTaskType extends TaskType { this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of blocks to be broken.")); this.creatorConfigValues.add(new ConfigValue("block", true, "Name or ID of block.")); this.creatorConfigValues.add(new ConfigValue("data", false, "Data code for block.")); + this.creatorConfigValues.add(new ConfigValue("use-similar-blocks", false, "If true, this will ignore orientation of doors, logs etc.")); } @Override @@ -53,6 +56,7 @@ public final class MiningCertainTaskType extends TaskType { Material material; Object configBlock = task.getConfigValue("block"); Object configData = task.getConfigValue("data"); + Object configSimilarBlocks = task.getConfigValue("use-similar-blocks"); if (StringUtils.isNumeric(String.valueOf(configBlock))) { material = Material.getMaterial((int) configBlock); @@ -60,8 +64,19 @@ public final class MiningCertainTaskType extends TaskType { material = Material.getMaterial(String.valueOf(configBlock)); } - if (material != null && event.getBlock().getType().equals(material)) { - if (configData != null && (((int) event.getBlock().getData()) != ((int) configData))) { + Material blockType = event.getBlock().getType(); + short blockData = event.getBlock().getData(); + + if (configSimilarBlocks != null && ((Boolean) configSimilarBlocks)) { + Block block; + if ((block = SimilarBlocks.getSimilarBlock(new Block(blockType, blockData))) != null) { + blockType = block.getMaterial(); + blockData = block.getData(); + } + } + + if (blockType.equals(material)) { + if (configData != null && (((int) blockData) != ((int) configData))) { continue; } int brokenBlocksNeeded = (int) task.getConfigValue("amount"); |
