From 2b4093099fdfd62312b8f80d75300de3e42a58c6 Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Sun, 30 Sep 2018 18:05:04 +0200 Subject: [PATCH] Survival array and mirror. --- .../nl/requios/effortlessbuilding/Array.java | 23 ++++++++++++ .../nl/requios/effortlessbuilding/Mirror.java | 16 +++++++++ .../effortlessbuilding/QuickReplace.java | 10 ++++++ .../effortlessbuilding/SurvivalHelper.java | 35 +++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 src/main/java/nl/requios/effortlessbuilding/SurvivalHelper.java diff --git a/src/main/java/nl/requios/effortlessbuilding/Array.java b/src/main/java/nl/requios/effortlessbuilding/Array.java index 13d948d..fd67a01 100644 --- a/src/main/java/nl/requios/effortlessbuilding/Array.java +++ b/src/main/java/nl/requios/effortlessbuilding/Array.java @@ -51,14 +51,32 @@ public class Array { bagInventory = ItemRandomizerBag.getBagInventory(event.getPlayer().getHeldItemMainhand()); } + //Get itemstack + ItemStack itemStack = event.getPlayer().getHeldItem(event.getHand()); + for (int i = 0; i < a.count; i++) { pos = pos.add(offset); if (event.getWorld().isBlockLoaded(pos, true)) { + if (itemStack.isEmpty()) break; + + //Check if held block = placed block (otherwise its a bag or wand) + if (!event.getPlayer().isCreative() && Block.getBlockFromItem(itemStack.getItem()) == event.getPlacedBlock().getBlock()) { + itemStack.shrink(1); + } + + //Randomizer bag synergy IBlockState blockState = bagInventory == null ? event.getPlacedBlock() : getBlockStateFromRandomizerBag(bagInventory, event.getWorld(), event.getPlayer(), event.getPos()); + + //TODO check if can place (ItemBlock) and if can break replaced + + //Drop existing block + SurvivalHelper.dropBlock(event.getWorld(), pos, event.getPlayer()); + event.getWorld().setBlockState(pos, blockState); } } + //EffortlessBuilding.log(event.getPlayer(), String.valueOf(event.getPlayer().getHeldItem(event.getHand()).getCount())); } private static IBlockState getBlockStateFromRandomizerBag(IItemHandler bagInventory, World world, EntityPlayer player, BlockPos pos) { @@ -83,6 +101,11 @@ public class Array { for (int i = 0; i < a.count; i++) { pos = pos.add(offset); if (event.getWorld().isBlockLoaded(pos, false)) { + //TODO check if can break + + //Drop existing block + SurvivalHelper.dropBlock(event.getWorld(), pos, event.getPlayer()); + event.getWorld().setBlockToAir(pos); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/Mirror.java b/src/main/java/nl/requios/effortlessbuilding/Mirror.java index b1c1dff..866b4b3 100644 --- a/src/main/java/nl/requios/effortlessbuilding/Mirror.java +++ b/src/main/java/nl/requios/effortlessbuilding/Mirror.java @@ -157,8 +157,21 @@ public class Mirror { } private static void placeBlock(World world, EntityPlayer player, BlockPos newBlockPos, IBlockState newBlockState) { + //Check itemstack + ItemStack itemStack = player.getHeldItem(player.swingingHand); //TODO check hand + if (itemStack.isEmpty()) return; + + //TODO check if can place + //TODO check if can break + + SurvivalHelper.dropBlock(world, newBlockPos, player); world.setBlockState(newBlockPos, newBlockState); + //Check if held block = placed block (otherwise its a bag or wand) + if (!player.isCreative() && Block.getBlockFromItem(itemStack.getItem()) == newBlockState.getBlock()) { + itemStack.shrink(1); + } + //Array synergy BlockSnapshot blockSnapshot = new BlockSnapshot(world, newBlockPos, newBlockState); BlockEvent.PlaceEvent placeEvent = new BlockEvent.PlaceEvent(blockSnapshot, newBlockState, player, EnumHand.MAIN_HAND); @@ -271,6 +284,9 @@ public class Mirror { } private static void breakBlock(BlockEvent.BreakEvent event, BlockPos newBlockPos) { + //TODO check if can break + + SurvivalHelper.dropBlock(event.getWorld(), newBlockPos, event.getPlayer()); event.getWorld().setBlockToAir(newBlockPos); //Array synergy diff --git a/src/main/java/nl/requios/effortlessbuilding/QuickReplace.java b/src/main/java/nl/requios/effortlessbuilding/QuickReplace.java index cc9f14c..d8f84eb 100644 --- a/src/main/java/nl/requios/effortlessbuilding/QuickReplace.java +++ b/src/main/java/nl/requios/effortlessbuilding/QuickReplace.java @@ -1,8 +1,10 @@ package nl.requios.effortlessbuilding; +import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.util.BlockSnapshot; @@ -55,8 +57,16 @@ public class QuickReplace { } IBlockState blockState = blockStates.get(player.getUniqueID()); + + SurvivalHelper.dropBlock(player.world, placedAgainstBlockPos, player); player.world.setBlockState(placedAgainstBlockPos, blockState); + //Shrink itemstack with 1 + ItemStack itemStack = player.getHeldItem(player.swingingHand); //TODO check hand + if (!player.isCreative() && Block.getBlockFromItem(itemStack.getItem()) == blockState.getBlock()) { + itemStack.shrink(1); + } + //Mirror and Array synergy BlockSnapshot blockSnapshot = new BlockSnapshot(player.world, placedAgainstBlockPos, blockState); BlockEvent.PlaceEvent placeEvent = new BlockEvent.PlaceEvent(blockSnapshot, blockState, player, EnumHand.MAIN_HAND); diff --git a/src/main/java/nl/requios/effortlessbuilding/SurvivalHelper.java b/src/main/java/nl/requios/effortlessbuilding/SurvivalHelper.java new file mode 100644 index 0000000..0325df0 --- /dev/null +++ b/src/main/java/nl/requios/effortlessbuilding/SurvivalHelper.java @@ -0,0 +1,35 @@ +package nl.requios.effortlessbuilding; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.items.ItemHandlerHelper; + +import java.util.List; + +public class SurvivalHelper { + + public static boolean canBreak(){ + return true; + } + + public static boolean canPlace(){ + return true; + } + + //Gives items directly to player + public static void dropBlock(World world, BlockPos pos, EntityPlayer player){ + if (player.isCreative()) return; + + IBlockState blockState = world.getBlockState(pos); + + List drops = blockState.getBlock().getDrops(world, pos, blockState, 0); + for (ItemStack drop : drops) + { + ItemHandlerHelper.giveItemToPlayer(player, drop); + } + } +}