From 1b1954d47d3633697676cc53845039b36d77e823 Mon Sep 17 00:00:00 2001 From: Redemption <25185835+Redemption198@users.noreply.github.com> Date: Wed, 3 Jan 2018 16:25:29 +0100 Subject: [PATCH] Fixed Android Miner not breaking Slimefun blocks correctly --- .../Slimefun/Android/ProgrammableAndroid.java | 89 +++++++++++++------ 1 file changed, 63 insertions(+), 26 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java index bf6e302af..3583225bc 100644 --- a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java @@ -316,17 +316,20 @@ public abstract class ProgrammableAndroid extends SlimefunItem { } case DIG_FORWARD: { Block block = b.getRelative(BlockFace.valueOf(BlockStorage.getBlockInfo(b, "rotation"))); - mine(b, block); + SlimefunItem item = BlockStorage.check(block); + mine(b, block, item); break; } case DIG_UP: { Block block = b.getRelative(BlockFace.UP); - mine(b, block); + SlimefunItem item = BlockStorage.check(block); + mine(b, block, item); break; } case DIG_DOWN: { Block block = b.getRelative(BlockFace.DOWN); - mine(b, block); + SlimefunItem item = BlockStorage.check(block); + mine(b, block, item); break; } case CATCH_FISH: { @@ -344,19 +347,22 @@ public abstract class ProgrammableAndroid extends SlimefunItem { case MOVE_AND_DIG_FORWARD: { BlockFace face = BlockFace.valueOf(BlockStorage.getBlockInfo(b, "rotation")); Block block = b.getRelative(face); - movedig(b, face, block); + SlimefunItem item = BlockStorage.check(block); + movedig(b, face, block, item); break; } case MOVE_AND_DIG_UP: { BlockFace face = BlockFace.valueOf(BlockStorage.getBlockInfo(b, "rotation")); Block block = b.getRelative(BlockFace.UP); - movedig(b, face, block); + SlimefunItem item = BlockStorage.check(block); + movedig(b, face, block, item); break; } case MOVE_AND_DIG_DOWN: { BlockFace face = BlockFace.valueOf(BlockStorage.getBlockInfo(b, "rotation")); Block block = b.getRelative(BlockFace.DOWN); - movedig(b, face, block); + SlimefunItem item = BlockStorage.check(block); + movedig(b, face, block, item); break; } case INTERFACE_ITEMS: { @@ -700,36 +706,67 @@ public abstract class ProgrammableAndroid extends SlimefunItem { } } - private void mine(Block b, Block block) { + private void mine(Block b, Block block, SlimefunItem item) { Collection drops = block.getDrops(); if (!blockblacklist.contains(block.getType()) && !drops.isEmpty() && CSCoreLib.getLib().getProtectionManager().canBuild(UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), block)) { - ItemStack[] items = drops.toArray(new ItemStack[drops.size()]); - if (fits(b, items)) { - pushItems(b, items); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - block.setType(Material.AIR); + if(item != null) { + if(fits(b, BlockStorage.retrieve(block))) { + pushItems(b, BlockStorage.retrieve(block)); + if(SlimefunItem.blockhandler.containsKey(item.getID())) SlimefunItem.blockhandler.get(item.getID()).onBreak(null, block, item, UnregisterReason.ANDROID_DIG); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); + block.setType(Material.AIR); + } + }else { + ItemStack[] items = drops.toArray(new ItemStack[drops.size()]); + if (fits(b, items)) { + pushItems(b, items); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); + block.setType(Material.AIR); + } } } } @SuppressWarnings("deprecation") - private void movedig(Block b, BlockFace face, Block block) { + private void movedig(Block b, BlockFace face, Block block, SlimefunItem item) { Collection drops = block.getDrops(); if (!blockblacklist.contains(block.getType()) && !drops.isEmpty() && CSCoreLib.getLib().getProtectionManager().canBuild(UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), block)) { try { - ItemStack[] items = drops.toArray(new ItemStack[drops.size()]); - if (fits(b, items)) { - pushItems(b, items); - block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); - block.setType(Material.SKULL); - block.setData((byte) 1); - - Skull skull = (Skull) block.getState(); - skull.setRotation(face); - skull.update(true, false); - CustomSkull.setSkull(block, CustomSkull.getTexture(getItem())); - b.setType(Material.AIR); - BlockStorage.moveBlockInfo(b, block); + System.out.println("DEBUG: " + item); + if(item != null) { + if(fits(b, BlockStorage.retrieve(block))) { + pushItems(b, BlockStorage.retrieve(block)); + System.out.println("DEBUG: IF I'm HERE"); + if(SlimefunItem.blockhandler.containsKey(item.getID())) SlimefunItem.blockhandler.get(item.getID()).onBreak(null, block, item, UnregisterReason.ANDROID_DIG); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); + + block.setType(Material.SKULL); + block.setData((byte) 1); + + Skull skull = (Skull) block.getState(); + skull.setRotation(face); + skull.update(true, false); + CustomSkull.setSkull(block, CustomSkull.getTexture(getItem())); + b.setType(Material.AIR); + BlockStorage.moveBlockInfo(b, block); + } + } + else { + ItemStack[] items = drops.toArray(new ItemStack[drops.size()]); + if (fits(b, items)) { + pushItems(b, items); + System.out.println("DEBUG: ELSE I'm HERE"); + block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType()); + block.setType(Material.SKULL); + block.setData((byte) 1); + + Skull skull = (Skull) block.getState(); + skull.setRotation(face); + skull.update(true, false); + CustomSkull.setSkull(block, CustomSkull.getTexture(getItem())); + b.setType(Material.AIR); + BlockStorage.moveBlockInfo(b, block); + } } } catch(Exception x) { x.printStackTrace();