diff --git a/gradle.properties b/gradle.properties index 3343c58..23fba15 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ mcp_mappings=20190719-1.14.3 botania=r1.11-379.354 version_major=2 -version_minor=4 \ No newline at end of file +version_minor=0 \ No newline at end of file diff --git a/src/main/java/thetadev/constructionwand/basics/WandUtil.java b/src/main/java/thetadev/constructionwand/basics/WandUtil.java index 0c7abff..31541cc 100644 --- a/src/main/java/thetadev/constructionwand/basics/WandUtil.java +++ b/src/main/java/thetadev/constructionwand/basics/WandUtil.java @@ -9,7 +9,6 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; import net.minecraft.stats.Stats; import net.minecraft.util.Direction; import net.minecraft.util.EntityPredicates; @@ -17,7 +16,6 @@ import net.minecraft.util.Hand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.World; @@ -28,7 +26,6 @@ import thetadev.constructionwand.ConstructionWand; import thetadev.constructionwand.basics.option.WandOptions; import thetadev.constructionwand.containers.ContainerManager; import thetadev.constructionwand.items.wand.ItemWand; -import thetadev.constructionwand.wand.WandItemUseContext; import javax.annotation.Nullable; import java.util.ArrayList; @@ -203,19 +200,13 @@ public class WandUtil /** * Tests if a wand can place a block at a certain position. - * This check is independent of the used block. + * This check is independent from the used block. */ public static boolean isPositionPlaceable(World world, PlayerEntity player, BlockPos pos, boolean replace) { if(!isPositionModifiable(world, player, pos)) return false; // If replace mode is off, target has to be air - if(world.isAirBlock(pos)) return true; - - // Otherwise, check if the block can be replaced by a generic block - return replace && world.getBlockState(pos).isReplaceable( - new WandItemUseContext(world, player, - new BlockRayTraceResult(new Vec3d(0, 0, 0), Direction.DOWN, pos, false), - pos, (BlockItem) Items.STONE)); + return replace || world.isAirBlock(pos); } public static boolean isBlockRemovable(World world, PlayerEntity player, BlockPos pos) { @@ -227,10 +218,6 @@ public class WandUtil return true; } - public static boolean isBlockPermeable(World world, BlockPos pos) { - return world.isAirBlock(pos) || world.getBlockState(pos).getCollisionShape(world, pos).isEmpty(); - } - public static boolean entitiesCollidingWithBlock(World world, BlockState blockState, BlockPos pos) { VoxelShape shape = blockState.getCollisionShape(world, pos); if(!shape.isEmpty()) { diff --git a/src/main/java/thetadev/constructionwand/wand/action/ActionDestruction.java b/src/main/java/thetadev/constructionwand/wand/action/ActionDestruction.java index 5364101..72340fd 100644 --- a/src/main/java/thetadev/constructionwand/wand/action/ActionDestruction.java +++ b/src/main/java/thetadev/constructionwand/wand/action/ActionDestruction.java @@ -39,14 +39,14 @@ public class ActionDestruction implements IWandAction HashSet allCandidates = new HashSet<>(); // Block face the wand was pointed at - Direction breakFace = rayTraceResult.getFace(); + Direction breakDirection = rayTraceResult.getFace(); // Block the wand was pointed at BlockPos startingPoint = rayTraceResult.getPos(); BlockState targetBlock = world.getBlockState(rayTraceResult.getPos()); // Is break direction allowed by lock? // Tried to break blocks from top/bottom face, so the wand should allow breaking in NS/EW direction - if(breakFace == Direction.UP || breakFace == Direction.DOWN) { + if(breakDirection == Direction.UP || breakDirection == Direction.DOWN) { if(options.testLock(WandOptions.LOCK.NORTHSOUTH) || options.testLock(WandOptions.LOCK.EASTWEST)) candidates.add(startingPoint); } @@ -57,10 +57,6 @@ public class ActionDestruction implements IWandAction // Process current candidates, stop when none are avaiable or block limit is reached while(!candidates.isEmpty() && destroySnapshots.size() < limit) { BlockPos currentCandidate = candidates.removeFirst(); - - // Only break blocks facing the player, with no collidable blocks in between - if(!WandUtil.isBlockPermeable(world, currentCandidate.offset(breakFace))) continue; - try { BlockState candidateBlock = world.getBlockState(currentCandidate); @@ -71,7 +67,7 @@ public class ActionDestruction implements IWandAction if(snapshot == null) continue; destroySnapshots.add(snapshot); - switch(breakFace) { + switch(breakDirection) { case DOWN: case UP: if(options.testLock(WandOptions.LOCK.NORTHSOUTH)) { diff --git a/src/main/java/thetadev/constructionwand/wand/supplier/SupplierInventory.java b/src/main/java/thetadev/constructionwand/wand/supplier/SupplierInventory.java index 2480d9b..19105de 100644 --- a/src/main/java/thetadev/constructionwand/wand/supplier/SupplierInventory.java +++ b/src/main/java/thetadev/constructionwand/wand/supplier/SupplierInventory.java @@ -5,7 +5,6 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; @@ -52,7 +51,7 @@ public class SupplierInventory implements IWandSupplier addBlockItem((BlockItem) offhandStack.getItem()); } // Otherwise use target block - else if(target != null && target != Items.AIR) { + else { addBlockItem(target); // Add replacement items