From 0e323735301d768e61a95fc0c65dd4ccc5fc9d60 Mon Sep 17 00:00:00 2001 From: jascotty2 Date: Thu, 30 May 2019 13:36:13 -0500 Subject: [PATCH 1/2] Update for 1.13/1.14, WorldEdit 7 --- .../v8/core/TreasureManager.java | 140 +++++------ .../v8/plugin/RegionCommand.java | 223 +++++++++--------- .../rewardfactory/rewards/RedstoneReward.java | 33 +-- .../rewards/RedstoneRewardFactory.java | 8 +- .../rewardfactory/rewards/RegionIterator.java | 13 +- .../v8/rewardfactory/rewards/RestoreTask.java | 38 +-- .../v8/util/prompts/SelectBlockPrompt.java | 4 +- .../v8/util/prompts/SelectRegionPrompt.java | 29 ++- src/main/resources/plugin.yml | 5 +- 9 files changed, 237 insertions(+), 256 deletions(-) diff --git a/src/main/java/com/mtihc/minecraft/treasurechest/v8/core/TreasureManager.java b/src/main/java/com/mtihc/minecraft/treasurechest/v8/core/TreasureManager.java index 9f39a4c..5b4fcd8 100644 --- a/src/main/java/com/mtihc/minecraft/treasurechest/v8/core/TreasureManager.java +++ b/src/main/java/com/mtihc/minecraft/treasurechest/v8/core/TreasureManager.java @@ -17,6 +17,8 @@ import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; import org.bukkit.block.DoubleChest; +import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.type.Chest; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.entity.Player; import org.bukkit.event.Event.Result; @@ -94,15 +96,15 @@ else if(holder instanceof BlockState) { } } - private JavaPlugin plugin; + private final JavaPlugin plugin; private ITreasureManagerConfiguration config; - private LinkedHashMap inventories = new LinkedHashMap(); - private String permAccessNormal; - private String permAccessUnlimited; - private String permRank; + private final LinkedHashMap inventories = new LinkedHashMap(); + private final String permAccessNormal; + private final String permAccessUnlimited; + private final String permRank; - private RewardFactoryManager rewardManager; + private final RewardFactoryManager rewardManager; @@ -455,61 +457,6 @@ public ITreasureChest getTreasureChest(Block clickedBlock) { return getTreasure(location); } - public boolean isBlock(Block block) { - - // returns whether the given block would prevent a chest from opening - // based on: - // http://www.minecraftwiki.net/wiki/Chest - - if(block == null || block.getType().isTransparent()) { - // translucent/transparent, or non-block - return false; - } - switch (block.getType()) { - // water and lava - case LAVA: - case WATER: - case STATIONARY_LAVA: - case STATIONARY_WATER: - - // plants - case LEAVES: - case CACTUS: - - // translucent blocks - case GLASS: - case MOB_SPAWNER: - case SNOW: - case ICE: - case FENCE: - case CAKE: - case BED: - case GLOWSTONE: - case ANVIL: - case BEACON: - case CHEST: - case SIGN: - case SIGN_POST: - // slabs - case STEP: - case WOOD_STEP: - // stairs - case WOOD_STAIRS: - case COBBLESTONE_STAIRS: - case BRICK_STAIRS: - case SMOOTH_STAIRS: - case NETHER_BRICK_STAIRS: - case SANDSTONE_STAIRS: - case SPRUCE_WOOD_STAIRS: - case BIRCH_WOOD_STAIRS: - case JUNGLE_WOOD_STAIRS: - case QUARTZ_STAIRS: - return false; - default: - return true; - } - } - public boolean isBlockedByBlockAbove(Block block) { if(!(block.getState() instanceof InventoryHolder)) { return false; @@ -517,23 +464,46 @@ public boolean isBlockedByBlockAbove(Block block) { if(block.getType() != Material.CHEST && block.getType() != Material.ENDER_CHEST && block.getType() != Material.TRAPPED_CHEST) { return false; } - InventoryHolder holder = (InventoryHolder) block.getState(); - Block above = block.getRelative(BlockFace.UP); - if(holder.getInventory() instanceof DoubleChestInventory) { - DoubleChest dchest = (DoubleChest) holder.getInventory().getHolder(); - - Block rightSide = ((BlockState)dchest.getRightSide()).getBlock(); - Block rightAbove = rightSide.getRelative(BlockFace.UP); - if(isBlock(rightAbove)) { - return true; - } - Block leftSide = ((BlockState)dchest.getLeftSide()).getBlock(); - above = leftSide.getRelative(BlockFace.UP); - } - - return isBlock(above); - } - + Block rightSide; + return block.getRelative(BlockFace.UP).getType().isSolid() + || ((rightSide = findAdjacentDoubleChest(block)) != null && rightSide.getRelative(BlockFace.UP).getType().isSolid()); + } + + /** + * Look for a double chest adjacent to a chest + * + * @param block + * @return + */ + public static Block findAdjacentDoubleChest(Block block) { + final BlockData d = block.getBlockData(); + if (d instanceof Chest) { + final Chest c = (Chest) d; + if(c.getType() != Chest.Type.SINGLE) { + // this is a double chest - check the other chest for registration data + Block other = null; + switch(c.getFacing()) { + case SOUTH: + other = block.getRelative(c.getType() != Chest.Type.RIGHT ? BlockFace.WEST : BlockFace.EAST); + break; + case NORTH: + other = block.getRelative(c.getType() != Chest.Type.RIGHT ? BlockFace.EAST : BlockFace.WEST); + break; + case EAST: + other = block.getRelative(c.getType() != Chest.Type.RIGHT ? BlockFace.SOUTH : BlockFace.NORTH); + break; + case WEST: + other = block.getRelative(c.getType() != Chest.Type.RIGHT ? BlockFace.NORTH : BlockFace.SOUTH); + } + // double-check + if (other != null && other.getType() == block.getType()) { + return other; + } + } + } + return null; + } + public Set getRanks(ITreasureChest tchest) { HashSet result = new HashSet(); List chestRanks = tchest.getRanks(); @@ -659,7 +629,7 @@ private ItemStack[] getRandomizedInventory(ItemStack[] inventory, int randomAmou // copy inventory to result ItemStack[] result = new ItemStack[inventory.length]; - for (int i = 0; i < inventory.length; i++) { + for (int i = 0; i < inventory.length; ++i) { result[i] = inventory[i]; } @@ -669,7 +639,7 @@ private ItemStack[] getRandomizedInventory(ItemStack[] inventory, int randomAmou // find indices of non-empty inventory slots List nonNulls = new ArrayList(); - for (int i = 0; i < inventory.length; i++) { + for (int i = 0; i < inventory.length; ++i) { if(inventory[i] != null) { nonNulls.add(i); } @@ -719,7 +689,7 @@ protected void toInventory(ItemStack[] contents, int random, Inventory inventory } else { // add items at correct positions - for (int i = 0; i < tchest.length; i++) { + for (int i = 0; i < tchest.length; ++i) { result[i] = tchest[i]; } } @@ -732,7 +702,7 @@ protected void toInventory(ItemStack[] contents, int random, Inventory inventory private static HashSet getInvisibleBlocks() { if(invisibleBlocks == null) { - invisibleBlocks = new HashSet(); + invisibleBlocks = new HashSet(); Material[] mats = Material.values(); for (Material mat : mats) { if(mat.isTransparent()) { @@ -933,11 +903,11 @@ public boolean treasureGroupRemove(Player player, Block block, String name, bool abstract class TreasureInventory implements Runnable { - private JavaPlugin plugin; - private long delay; + private final JavaPlugin plugin; + private final long delay; private int taskId; - private Inventory inventory; + private final Inventory inventory; TreasureInventory(JavaPlugin plugin, long delay, Inventory inventory) { this.plugin = plugin; diff --git a/src/main/java/com/mtihc/minecraft/treasurechest/v8/plugin/RegionCommand.java b/src/main/java/com/mtihc/minecraft/treasurechest/v8/plugin/RegionCommand.java index 793c5ad..85fdb8f 100644 --- a/src/main/java/com/mtihc/minecraft/treasurechest/v8/plugin/RegionCommand.java +++ b/src/main/java/com/mtihc/minecraft/treasurechest/v8/plugin/RegionCommand.java @@ -4,7 +4,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; - import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -15,28 +14,33 @@ import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; -import org.bukkit.util.Vector; - import com.mtihc.minecraft.treasurechest.v8.core.TreasureException; import com.mtihc.minecraft.treasurechest.v8.core.TreasureManager; import com.mtihc.minecraft.treasurechest.v8.util.commands.Command; import com.mtihc.minecraft.treasurechest.v8.util.commands.CommandException; import com.mtihc.minecraft.treasurechest.v8.util.commands.ICommand; import com.mtihc.minecraft.treasurechest.v8.util.commands.SimpleCommand; +import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldedit.bukkit.selections.Selection; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.regions.Region; public class RegionCommand extends SimpleCommand { + private enum TaskType { + SET, SET_SHARED, GROUP_ADD, GROUP_REMOVE, DELETE, /** - * @deprecated Will become obsolete once the book-config feature is implemented. + * @deprecated Will become obsolete once the book-config feature is + * implemented. */ @Deprecated USE_META_DATA; } - - private final EnumSet ContainerBlocks = EnumSet.of(Material.DISPENSER, Material.CHEST, Material.FURNACE, Material.BURNING_FURNACE, Material.TRAPPED_CHEST, Material.HOPPER, Material.DROPPER); + + private final EnumSet ContainerBlocks = EnumSet.of( + Material.DISPENSER, Material.CHEST, Material.FURNACE, Material.TRAPPED_CHEST, Material.HOPPER, Material.DROPPER, + Material.BARREL, Material.BLAST_FURNACE, Material.SMOKER); private TreasureManager manager; @@ -53,18 +57,18 @@ public RegionCommand(TreasureManager manager, ICommand parent) { addNested("delete"); } - @Command(aliases = { "set" }, args = "[block,white-list]", desc = "Create/update all treasure in the selected region", help = { "" }) + @Command(aliases = {"set"}, args = "[block,white-list]", desc = "Create/update all treasure in the selected region", help = {""}) public void set(CommandSender sender, String[] args) throws CommandException { - - if(!(sender instanceof Player)) { + + if (!(sender instanceof Player)) { throw new CommandException("Command must be executed by a player, in game."); } - if(!sender.hasPermission(Permission.SET.getNode())) { + if (!sender.hasPermission(Permission.SET.getNode())) { throw new CommandException("You don't have permission to create treasure."); } - - if(args == null || args.length > 1) { + + if (args == null || args.length > 1) { throw new CommandException("Expected no arguments or optional block type filter (comma seperated without spaces)"); } @@ -76,21 +80,21 @@ public void set(CommandSender sender, String[] args) throws CommandException { schudleFindContainerBlocks(player, TaskType.SET, filter); } - @Command(aliases = {"set-shared" }, args = "[block,white-list]", desc = "Create/update all treasure with a shared inventory in the selected regio", help = { "" }) + @Command(aliases = {"set-shared"}, args = "[block,white-list]", desc = "Create/update all treasure with a shared inventory in the selected regio", help = {""}) public void setShared(CommandSender sender, String[] args) throws CommandException { - - if(!(sender instanceof Player)) { + + if (!(sender instanceof Player)) { throw new CommandException("Command must be executed by a player, in game."); } - if(!sender.hasPermission(Permission.SET.getNode())) { + if (!sender.hasPermission(Permission.SET.getNode())) { throw new CommandException("You don't have permission to create treasure."); } - if(args == null || args.length > 1) { + if (args == null || args.length > 1) { throw new CommandException("Expected no arguments or optional block type filter (comma seperated without spaces)"); } - + String filter = null; if (args.length == 1) { filter = args[0]; @@ -98,28 +102,28 @@ public void setShared(CommandSender sender, String[] args) throws CommandExcepti Player player = (Player) sender; schudleFindContainerBlocks(player, TaskType.SET_SHARED, filter); } - - @Command(aliases = {"group-add" }, args = " [block,white-list]", desc = "Add all treasure in the selected region to a group", help = { "" }) + + @Command(aliases = {"group-add"}, args = " [block,white-list]", desc = "Add all treasure in the selected region to a group", help = {""}) public void groupAdd(CommandSender sender, String[] args) throws CommandException { - - if(!(sender instanceof Player)) { + + if (!(sender instanceof Player)) { throw new CommandException("Command must be executed by a player, in game."); } - if(!sender.hasPermission(Permission.SET.getNode())) { + if (!sender.hasPermission(Permission.SET.getNode())) { throw new CommandException("You don't have permission to create treasure."); } - - if(args == null || args.length > 2) { + + if (args == null || args.length > 2) { throw new CommandException("Group name or group name with optional block type filter (comma seperated without spaces)"); } String name = args[0]; - + if (!manager.hasGroup(name)) { throw new CommandException("Group " + name + " doesn't exist"); } - + String filter = null; if (args.length == 2) { filter = args[1]; @@ -127,28 +131,28 @@ public void groupAdd(CommandSender sender, String[] args) throws CommandExceptio Player player = (Player) sender; schudleFindContainerBlocks(player, TaskType.GROUP_ADD, name, filter); } - - @Command(aliases = { "group-remove" }, args = " [block,white-list]", desc = "Remove all treasure in the selected region from a group", help = { "" }) + + @Command(aliases = {"group-remove"}, args = " [block,white-list]", desc = "Remove all treasure in the selected region from a group", help = {""}) public void groupRemove(CommandSender sender, String[] args) throws CommandException { - - if(!(sender instanceof Player)) { + + if (!(sender instanceof Player)) { throw new CommandException("Command must be executed by a player, in game."); } - if(!sender.hasPermission(Permission.SET.getNode())) { + if (!sender.hasPermission(Permission.SET.getNode())) { throw new CommandException("You don't have permission to create treasure."); } - if(args == null || args.length > 2) { + if (args == null || args.length > 2) { throw new CommandException("Expected group name or group name with optional block type filter (comma seperated without spaces)"); } - + String name = args[0]; - + if (!manager.hasGroup(name)) { throw new CommandException("Group " + name + " doesn't exist"); } - + String filter = null; if (args.length == 2) { filter = args[1]; @@ -161,21 +165,21 @@ public void groupRemove(CommandSender sender, String[] args) throws CommandExcep * @deprecated Will be obsolete once book-config feature is implemented. */ @Deprecated - @Command(aliases = { "use-meta-data" }, args = "[block,white-list]", desc = "Create/update all treasure in the selected region using the meta-data of items in the chest (sticks with names where shared will make a chest shared and any other name will add the chest to a group with that name)", help = { "" }) + @Command(aliases = {"use-meta-data"}, args = "[block,white-list]", desc = "Create/update all treasure in the selected region using the meta-data of items in the chest (sticks with names where shared will make a chest shared and any other name will add the chest to a group with that name)", help = {""}) public void useMetaData(CommandSender sender, String[] args) throws CommandException { - - if(!(sender instanceof Player)) { + + if (!(sender instanceof Player)) { throw new CommandException("Command must be executed by a player, in game."); } - if(!sender.hasPermission(Permission.SET.getNode())) { + if (!sender.hasPermission(Permission.SET.getNode())) { throw new CommandException("You don't have permission to create treasure."); } - if(args == null || args.length > 1) { + if (args == null || args.length > 1) { throw new CommandException("Expected no arguments or optional block type filter (comma seperated without spaces)"); } - + String filter = null; if (args.length == 1) { filter = args[0]; @@ -183,19 +187,19 @@ public void useMetaData(CommandSender sender, String[] args) throws CommandExcep Player player = (Player) sender; schudleFindContainerBlocks(player, TaskType.USE_META_DATA, filter); } - - @Command(aliases = { "delete" }, args = "[block,white-list]", desc = "Delete all treasure in the selected region", help = { "" }) + + @Command(aliases = {"delete"}, args = "[block,white-list]", desc = "Delete all treasure in the selected region", help = {""}) public void delete(CommandSender sender, String[] args) throws CommandException { - - if(!(sender instanceof Player)) { + + if (!(sender instanceof Player)) { throw new CommandException("Command must be executed by a player, in game."); } - if(!sender.hasPermission(Permission.DEL.getNode())) { + if (!sender.hasPermission(Permission.DEL.getNode())) { throw new CommandException("You don't have permission to create treasure."); } - - if(args == null || args.length > 1) { + + if (args == null || args.length > 1) { throw new CommandException("Expected no arguments or optional block type filter (comma seperated without spaces)"); } @@ -206,11 +210,11 @@ public void delete(CommandSender sender, String[] args) throws CommandException Player player = (Player) sender; schudleFindContainerBlocks(player, TaskType.DELETE, filter); } - + private void schudleFindContainerBlocks(Player player, TaskType task, String filter) throws CommandException { schudleFindContainerBlocks(player, task, null, filter); } - + private void schudleFindContainerBlocks(Player player, TaskType task, String group, String filter) throws CommandException { Set filterList = new HashSet(); @@ -218,12 +222,12 @@ private void schudleFindContainerBlocks(Player player, TaskType task, String gro // Process the comma separated block list if we have one ... String[] materialNames = filter.split(","); - for (int i=0;i i = ContainerBlocks.iterator(); - while(i.hasNext()) { + while (i.hasNext()) { Material addMaterial = i.next(); filterList.add(addMaterial); } } - - // FIXME Should we be using RegionSelect? + Plugin we = manager.getPlugin().getServer().getPluginManager().getPlugin("WorldEdit"); if (!(we != null && we instanceof WorldEditPlugin)) { throw new CommandException("This command requires WE"); } WorldEditPlugin worldEdit = (WorldEditPlugin) we; - Selection sel = worldEdit.getSelection(player); + Region sel = null; + try { + sel = worldEdit.getSession(player).getSelection(BukkitAdapter.adapt(player.getWorld())); + } catch (com.sk89q.worldedit.IncompleteRegionException ex) { + } + if (sel == null || sel.getMaximumPoint() == null || sel.getMinimumPoint() == null) { throw new CommandException("You didn't select a region."); } - World world = sel.getWorld(); - Vector min = sel.getMinimumPoint().toVector(); - Vector max = sel.getMaximumPoint().toVector(); + World world = BukkitAdapter.adapt(sel.getWorld()); + BlockVector3 min = sel.getMinimumPoint(); + BlockVector3 max = sel.getMaximumPoint(); + + player.sendMessage(ChatColor.GOLD + "Searching for container blocks in the region (" + world.getName() + ";" + min.toString() + ";" + max.toString() + ") this may take some time"); - player.sendMessage(ChatColor.GOLD + "Searching for container blocks in the region (" + world.getName() + ";" + min.toString() + ";" + max.toString() + ") this may take some time"); - // Do the work of finding the containers in a worker thread as we don't want to timeout the server - manager.getPlugin().getServer().getScheduler().runTaskAsynchronously(manager.getPlugin(), new FindContainers(manager, player, sel.getWorld(), min, max, task, group, filterList)); + manager.getPlugin().getServer().getScheduler().runTaskAsynchronously(manager.getPlugin(), new FindContainers(manager, player, world, min, max, task, group, filterList)); } - + private class FindContainers implements Runnable { + TreasureManager manager; Player player; World world; - Vector min,max; + BlockVector3 min, max; TaskType task; String group; - + Set found; Set filterList; - public FindContainers(TreasureManager manager, Player player, World world, Vector min, Vector max, TaskType task, String group, Set filterList) { + public FindContainers(TreasureManager manager, Player player, World world, BlockVector3 min, BlockVector3 max, TaskType task, String group, Set filterList) { this.manager = manager; this.player = player; this.world = world; @@ -283,18 +292,18 @@ public FindContainers(TreasureManager manager, Player player, World world, Vecto } public void run() { - int x,y,z; + int x, y, z; // FIXME Need to round up where the min/max is using the inner side or corner of selected cord // Search the selected cuboid for containers - for (y=min.getBlockY();y i = filterList.iterator(); - while (i.hasNext()) { - Material checkMaterial = i.next(); - if (world.getBlockAt(x,y,z).getType() == checkMaterial) { - found.add(new Location(world,x,y,z)); + for (y = min.getBlockY(); y < max.getBlockY(); ++y) { + for (z = min.getBlockZ(); z < max.getBlockZ(); ++z) { + for (x = min.getBlockX(); x < max.getBlockX(); ++x) { + Block b = world.getBlockAt(x, y, z); + Material type = b.getType(); + for(Material checkMaterial : filterList) { + if (type == checkMaterial) { + found.add(b.getLocation()); break; } } @@ -306,14 +315,15 @@ public void run() { manager.getPlugin().getServer().getScheduler().runTask(manager.getPlugin(), new AddContainers(manager, player, found, task, group)); } } - + private class AddContainers implements Runnable { + TreasureManager manager; Player player; Set found; TaskType task; String group; - + public AddContainers(TreasureManager manager, Player player, Set found, TaskType task, String group) { this.manager = manager; this.player = player; @@ -323,7 +333,8 @@ public AddContainers(TreasureManager manager, Player player, Set found } /** - * @deprecated Will become obsolete once the book-config feature is implemented + * @deprecated Will become obsolete once the book-config feature is + * implemented */ @Deprecated private void createChestFromMetadata(Player player, Block block) { @@ -333,7 +344,7 @@ private void createChestFromMetadata(Player player, Block block) { boolean shared = false; // First we loop through all the the data we need ... - while(ic.hasNext()) { + while (ic.hasNext()) { ItemStack item = ic.next(); if (item != null) { // Sticks with custom names are use to store the Meta Data @@ -351,7 +362,7 @@ private void createChestFromMetadata(Player player, Block block) { // ... then we check that all the groups are valid and if not bail ... if (!groups.isEmpty()) { Iterator is = groups.iterator(); - while(is.hasNext()) { + while (is.hasNext()) { String tmpGroup = is.next(); if (!manager.hasGroup(tmpGroup)) { Location loc = block.getLocation(); @@ -360,13 +371,13 @@ private void createChestFromMetadata(Player player, Block block) { } } } - + // ... finally all is good so we create the chest and add it to the groups manager.treasureSet(player, block, shared); if (!groups.isEmpty()) { Iterator is = groups.iterator(); - while(is.hasNext()) { + while (is.hasNext()) { String tmpGroup = is.next(); try { manager.treasureGroupAdd(player, block, tmpGroup, false); @@ -377,13 +388,13 @@ private void createChestFromMetadata(Player player, Block block) { } } - + @Override public void run() { if (player.isOnline()) { player.sendMessage(ChatColor.GOLD + "Finished searching region and found " + found.size() + " container blocks"); } - + // FIXME might want to only update a few chests per tick Iterator i = found.iterator(); while (i.hasNext()) { @@ -392,26 +403,26 @@ public void run() { try { switch (task) { - case SET: - manager.treasureSet(player, block, false); - break; - case SET_SHARED: - manager.treasureSetShared(player, block, false); - break; - case DELETE: - manager.treasureDelete(player, block, false); - break; - case GROUP_ADD: - manager.treasureGroupAdd(player, block, group, false); - break; - case USE_META_DATA: - createChestFromMetadata(player, block); - break; - case GROUP_REMOVE: - manager.treasureGroupRemove(player, block, group, false); - break; - default: - break; + case SET: + manager.treasureSet(player, block, false); + break; + case SET_SHARED: + manager.treasureSetShared(player, block, false); + break; + case DELETE: + manager.treasureDelete(player, block, false); + break; + case GROUP_ADD: + manager.treasureGroupAdd(player, block, group, false); + break; + case USE_META_DATA: + createChestFromMetadata(player, block); + break; + case GROUP_REMOVE: + manager.treasureGroupRemove(player, block, group, false); + break; + default: + break; } } catch (TreasureException e) { player.sendMessage(ChatColor.RED + e.getMessage()); diff --git a/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RedstoneReward.java b/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RedstoneReward.java index adee2dd..3a8d1b7 100644 --- a/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RedstoneReward.java +++ b/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RedstoneReward.java @@ -9,8 +9,8 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.block.data.Directional; import org.bukkit.entity.Player; -import org.bukkit.material.RedstoneTorch; import org.bukkit.util.Vector; import com.mtihc.minecraft.treasurechest.v8.rewardfactory.IReward; @@ -21,16 +21,16 @@ public class RedstoneReward implements IReward { private RewardInfo info; - + public RedstoneReward(Block attachedBlock, BlockFace facing) { Map data = new HashMap(); this.info = new RewardInfo("redstone", data); - + setAttachedBlock(attachedBlock.getLocation()); setAttachedBlockType(attachedBlock.getType()); setFacingDirection(facing); } - + RedstoneReward(RewardInfo info) { this.info = info; } @@ -39,30 +39,30 @@ public RedstoneReward(Block attachedBlock, BlockFace facing) { public RewardInfo getInfo() { return info; } - + public Location getAttachedBlock() { World world = Bukkit.getWorld((String) info.getData("world")); Vector coords = (Vector) info.getData("coords"); return coords.toLocation(world); } - + public void setAttachedBlock(Location location) { info.setData("world", location.getWorld().getName()); info.setData("coords", location.toVector()); } - + public Material getAttachedBlockType() { - return Material.getMaterial((Integer) info.getData("block-type")); + return Material.getMaterial(info.getData("block-type").toString()); } - + public void setAttachedBlockType(Material type) { - info.setData("block-type", type.getId()); + info.setData("block-type", type); } - + public BlockFace getFacingDirection() { return BlockFace.valueOf((String) info.getData("facing")); } - + public void setFacingDirection(BlockFace facing) { info.setData("facing", facing.name()); } @@ -77,12 +77,13 @@ public String getDescription() { public void give(Player player) throws RewardException { Location loc = getAttachedBlock(); BlockFace facing = getFacingDirection(); - RedstoneTorch torch = new RedstoneTorch(); - torch.setFacingDirection(facing); Block attachedBlock = loc.getBlock(); attachedBlock.setType(getAttachedBlockType()); - attachedBlock.getRelative(facing).setTypeIdAndData(torch.getItemTypeId(), torch.getData(), false); - + Block torchBlock = attachedBlock.getRelative(facing); + torchBlock.setType(Material.REDSTONE_WALL_TORCH); + Directional torch = (Directional) torchBlock.getBlockData(); + torch.setFacing(facing); + torchBlock.setBlockData(torch); } } diff --git a/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RedstoneRewardFactory.java b/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RedstoneRewardFactory.java index 1e77004..0d4fd8b 100644 --- a/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RedstoneRewardFactory.java +++ b/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RedstoneRewardFactory.java @@ -7,7 +7,6 @@ import org.bukkit.conversations.ConversationFactory; import org.bukkit.conversations.Prompt; import org.bukkit.entity.Player; -import org.bukkit.material.RedstoneTorch; import org.bukkit.plugin.java.JavaPlugin; import com.mtihc.minecraft.treasurechest.v8.rewardfactory.IReward; @@ -15,6 +14,7 @@ import com.mtihc.minecraft.treasurechest.v8.rewardfactory.RewardFactory; import com.mtihc.minecraft.treasurechest.v8.rewardfactory.RewardInfo; import com.mtihc.minecraft.treasurechest.v8.util.prompts.SelectBlockPrompt; +import org.bukkit.block.data.Directional; @SuppressWarnings("deprecation") public class RedstoneRewardFactory extends RewardFactory { @@ -64,12 +64,12 @@ public void createReward(final CommandSender sender, final String[] args, } new ConversationFactory(plugin) - .withFirstPrompt(new SelectBlockPrompt(Material.REDSTONE_TORCH_ON, null, null, null) { + .withFirstPrompt(new SelectBlockPrompt(Material.REDSTONE_WALL_TORCH, null, null, null) { @Override protected Prompt onFinish(ConversationContext context, Block block) { - RedstoneTorch torch = (RedstoneTorch) Material.REDSTONE_TORCH_ON.getNewData(block.getData()); - RedstoneReward reward = new RedstoneReward(block.getRelative(torch.getAttachedFace()), torch.getFacing()); + Directional dir = (Directional) block.getBlockData(); + RedstoneReward reward = new RedstoneReward(block.getRelative(dir.getFacing().getOppositeFace()), dir.getFacing()); callback.onCreate(sender, args, reward); return END_OF_CONVERSATION; } diff --git a/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RegionIterator.java b/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RegionIterator.java index 138f241..9c11ac9 100644 --- a/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RegionIterator.java +++ b/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RegionIterator.java @@ -1,8 +1,9 @@ package com.mtihc.minecraft.treasurechest.v8.rewardfactory.rewards; -import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.CuboidRegion; + public class RegionIterator { private int x; @@ -10,10 +11,10 @@ public class RegionIterator { private int z; private int size; - private Vector min; - private Vector max; + private BlockVector3 min; + private BlockVector3 max; - public RegionIterator(Vector min, Vector max, int subregionSize) { + public RegionIterator(BlockVector3 min, BlockVector3 max, int subregionSize) { this.size = subregionSize; this.min = min; this.max = max; @@ -68,7 +69,7 @@ private CuboidRegion createRegion() { int newY = y; int newZ = z; - Vector minimum = new Vector(newX, newY, newZ); + BlockVector3 minimum = BlockVector3.at(newX, newY, newZ); newX += size; newY += size; @@ -84,7 +85,7 @@ private CuboidRegion createRegion() { newZ = max.getBlockZ(); } - Vector maximum = new Vector(newX, newY, newZ); + BlockVector3 maximum = BlockVector3.at(newX, newY, newZ); return new CuboidRegion(minimum, maximum); } diff --git a/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RestoreTask.java b/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RestoreTask.java index 623e44c..7ffbc44 100644 --- a/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RestoreTask.java +++ b/src/main/java/com/mtihc/minecraft/treasurechest/v8/rewardfactory/rewards/RestoreTask.java @@ -2,8 +2,9 @@ import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.MaxChangedBlocksException; -import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.world.snapshot.InvalidSnapshotException; @@ -11,38 +12,23 @@ import com.sk89q.worldedit.world.snapshot.SnapshotRestore; import com.sk89q.worldedit.world.storage.ChunkStore; import com.sk89q.worldedit.world.storage.MissingWorldException; - -import java.util.List; +import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; abstract class RestoreTask implements Runnable { - public static com.sk89q.worldedit.world.World getLocalWorld(WorldEdit worldEdit, String worldName) { - List worlds = worldEdit.getServer().getWorlds(); - for (com.sk89q.worldedit.world.World world : worlds) { - if (world.getName().toLowerCase() == worldName.toLowerCase()) { - return world; - } - } - return null; - } - - public static Vector getVector(org.bukkit.util.Vector vec) { - return new Vector(vec.getBlockX(), vec.getBlockY(), vec.getBlockZ()); - } - //private RestoreRepository repo; - private JavaPlugin plugin; + private final JavaPlugin plugin; private long delay; - private int subregionSize; + private final int subregionSize; private int taskId; private ChunkStore chunkStore; - private String snapshotName; - private String worldName; - private org.bukkit.util.Vector min; - private org.bukkit.util.Vector max; + private final String snapshotName; + private final String worldName; + private final org.bukkit.util.Vector min; + private final org.bukkit.util.Vector max; private RegionIterator iterator; RestoreTask(JavaPlugin plugin, String snapshotName, String worldName, org.bukkit.util.Vector min, org.bukkit.util.Vector max, long subregionTicks, int subregionSize) { @@ -67,7 +53,9 @@ public void start() { if(!isRunning()) { onStart(); - iterator = new RegionIterator(getVector(min), getVector(max), subregionSize); + iterator = new RegionIterator( + BlockVector3.at(min.getX(), min.getY(), min.getZ()), + BlockVector3.at(max.getX(), max.getY(), max.getZ()), subregionSize); // toggle isRunning taskId = 0; @@ -138,7 +126,7 @@ public synchronized void run() { return; } else { - region.setWorld(getLocalWorld(WorldEdit.getInstance(), worldName)); + region.setWorld(BukkitAdapter.adapt(Bukkit.getWorld(worldName))); } restoreRegionInstantly(chunkStore, region); } diff --git a/src/main/java/com/mtihc/minecraft/treasurechest/v8/util/prompts/SelectBlockPrompt.java b/src/main/java/com/mtihc/minecraft/treasurechest/v8/util/prompts/SelectBlockPrompt.java index 6e1cec7..33ff700 100644 --- a/src/main/java/com/mtihc/minecraft/treasurechest/v8/util/prompts/SelectBlockPrompt.java +++ b/src/main/java/com/mtihc/minecraft/treasurechest/v8/util/prompts/SelectBlockPrompt.java @@ -27,12 +27,10 @@ public SelectBlockPrompt(Material type, String worldName, Vector min, Vector max this.min = min; this.max = max; - invisible = new HashSet(); + invisible = new HashSet(); invisible.add(Material.AIR); invisible.add(Material.WATER); - invisible.add(Material.STATIONARY_WATER); invisible.add(Material.LAVA); - invisible.add(Material.STATIONARY_LAVA); } diff --git a/src/main/java/com/mtihc/minecraft/treasurechest/v8/util/prompts/SelectRegionPrompt.java b/src/main/java/com/mtihc/minecraft/treasurechest/v8/util/prompts/SelectRegionPrompt.java index 23c872a..25334f0 100644 --- a/src/main/java/com/mtihc/minecraft/treasurechest/v8/util/prompts/SelectRegionPrompt.java +++ b/src/main/java/com/mtihc/minecraft/treasurechest/v8/util/prompts/SelectRegionPrompt.java @@ -1,7 +1,8 @@ package com.mtihc.minecraft.treasurechest.v8.util.prompts; +import com.mtihc.minecraft.treasurechest.v8.util.commands.CommandException; +import com.sk89q.worldedit.bukkit.BukkitAdapter; import java.util.Set; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -13,9 +14,10 @@ import org.bukkit.conversations.ValidatingPrompt; import org.bukkit.entity.Player; import org.bukkit.util.Vector; - import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldedit.bukkit.selections.Selection; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.regions.Region; + public abstract class SelectRegionPrompt extends ValidatingPrompt { @@ -73,17 +75,26 @@ protected boolean isInputValid(ConversationContext context, String input) { Player player = (Player) context.getForWhom(); if (hasWorldEdit()) { - Selection sel = worldEdit.getSelection(player); + + Region sel = null; + try { + sel = worldEdit.getSession(player).getSelection(BukkitAdapter.adapt(player.getWorld())); + } catch (com.sk89q.worldedit.IncompleteRegionException ex) { + } + if (sel == null || sel.getMaximumPoint() == null || sel.getMinimumPoint() == null) { - player.sendRawMessage(ChatColor.RED - + "You didn't select a region."); + player.sendRawMessage(ChatColor.RED + "You didn't select a region."); return false; } - + context.setSessionData("world", sel.getWorld()); - context.setSessionData("min", sel.getMinimumPoint().toVector()); - context.setSessionData("max", sel.getMaximumPoint().toVector()); + BlockVector3 point = sel.getMinimumPoint(); + Vector min = new Vector(point.getX(), point.getY(), point.getZ()); + context.setSessionData("min", min); + point = sel.getMaximumPoint(); + Vector max = new Vector(point.getX(), point.getY(), point.getZ()); + context.setSessionData("max", max); return true; } else { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5e57045..2f4db3a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,12 +1,13 @@ name: TreasureChest -author: Mtihc +author: jascotty2, Mtihc description: Place chest that adds some items everytime someone opens it for the first time. main: com.mtihc.minecraft.treasurechest.v8.plugin.TreasureChestPlugin startup: postworld url: http://dev.bukkit.org/server-mods/treasurechest/ depend: [] softdepend: [Vault, WorldEdit] -version: 8.4.5 +version: 8.5 +api-version: 1.14 commands: treasurechest: aliases: [tchest] From 540128c189dcc691ce15ad319d0cf6dc4aacfe36 Mon Sep 17 00:00:00 2001 From: jascotty2 Date: Thu, 30 May 2019 13:36:19 -0500 Subject: [PATCH 2/2] Update for 1.13/1.14, WorldEdit 7 --- pom.xml | 109 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 51 deletions(-) diff --git a/pom.xml b/pom.xml index 9d5f9e5..551320d 100644 --- a/pom.xml +++ b/pom.xml @@ -1,53 +1,60 @@ - 4.0.0 - com.mtihc.minecraft.treasurechest.v8.plugin - TreasureChest - 8.4.5 - TreasureChest - http://dev.bukkit.org/server-mods/treasurechest/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - sk89q-repo - http://maven.sk89q.com/repo/ - - - milkbowl-repo - http://nexus.hc.to/content/repositories/pub_releases - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.0.2 - - 1.6 - 1.6 - - - - - - - org.bukkit - bukkit - 1.12-R0.1-SNAPSHOT - - - com.sk89q - worldedit - 6.0.0-SNAPSHOT - - - net.milkbowl.vault - Vault - 1.5.6 - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.mtihc.minecraft.treasurechest.v8.plugin + TreasureChest + 8.5 + TreasureChest + http://dev.bukkit.org/server-mods/treasurechest/ + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + papermc + https://papermc.io/repo/repository/maven-public/ + + + sk89q-repo + http://maven.sk89q.com/repo/ + + + milkbowl-repo + http://nexus.hc.to/content/repositories/pub_releases + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.6 + 1.6 + + + + + + + org.spigotmc + spigot-api + 1.14.1-R0.1-SNAPSHOT + provided + + + com.sk89q.worldedit + worldedit-bukkit + 7.0.0-SNAPSHOT + provided + + + net.milkbowl.vault + VaultAPI + 1.6 + compile + +