From 11cd20c3d372b0f104900733d4fefa148762b6ed Mon Sep 17 00:00:00 2001 From: Christian Knaapen Date: Mon, 8 Jul 2019 22:54:33 +0200 Subject: [PATCH] Fixed QuickReplace in normal mode not placing any blocks. --- .../requios/effortlessbuilding/BuildConfig.java | 2 +- .../requios/effortlessbuilding/EventHandler.java | 10 +++++++--- .../network/RequestLookAtMessage.java | 16 +++++++++++++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/nl/requios/effortlessbuilding/BuildConfig.java b/src/main/java/nl/requios/effortlessbuilding/BuildConfig.java index 6bfc945..1663000 100644 --- a/src/main/java/nl/requios/effortlessbuilding/BuildConfig.java +++ b/src/main/java/nl/requios/effortlessbuilding/BuildConfig.java @@ -55,7 +55,7 @@ public class BuildConfig { @Comment({"Determines what blocks can be replaced in survival.", "-1: only blocks that can be harvested by hand (default)", - "0: blocks that can be harvested with wooden oref gold tools", + "0: blocks that can be harvested with wooden or gold tools", "1: blocks that can be harvested with stone tools", "2: blocks that can be harvested with iron tools", "3: blocks that can be harvested with diamond tools", diff --git a/src/main/java/nl/requios/effortlessbuilding/EventHandler.java b/src/main/java/nl/requios/effortlessbuilding/EventHandler.java index 5ca6cec..bec9f94 100644 --- a/src/main/java/nl/requios/effortlessbuilding/EventHandler.java +++ b/src/main/java/nl/requios/effortlessbuilding/EventHandler.java @@ -91,14 +91,18 @@ public class EventHandler BuildModes.BuildModeEnum buildMode = ModeSettingsManager.getModeSettings(player).getBuildMode(); ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player); - if (buildMode != BuildModes.BuildModeEnum.NORMAL || modifierSettings.doQuickReplace()) { + if (buildMode != BuildModes.BuildModeEnum.NORMAL) { event.setCanceled(true); + } else if (modifierSettings.doQuickReplace()) { + //Cancel event and send message if QuickReplace + event.setCanceled(true); + EffortlessBuilding.packetHandler.sendTo(new RequestLookAtMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState(), true), (EntityPlayerMP) player); } else { //NORMAL mode, let vanilla handle block placing - //But modifiers and QuickReplace should still work + //But modifiers should still work //Send message to client, which sends message back with raytrace info - EffortlessBuilding.packetHandler.sendTo(new RequestLookAtMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState()), (EntityPlayerMP) player); + EffortlessBuilding.packetHandler.sendTo(new RequestLookAtMessage(event.getPos(), event.getBlockSnapshot().getReplacedBlock(), event.getState(), false), (EntityPlayerMP) player); } } diff --git a/src/main/java/nl/requios/effortlessbuilding/network/RequestLookAtMessage.java b/src/main/java/nl/requios/effortlessbuilding/network/RequestLookAtMessage.java index 372d11f..ce59ba7 100644 --- a/src/main/java/nl/requios/effortlessbuilding/network/RequestLookAtMessage.java +++ b/src/main/java/nl/requios/effortlessbuilding/network/RequestLookAtMessage.java @@ -25,17 +25,20 @@ public class RequestLookAtMessage implements IMessage { private BlockPos coordinate; private IBlockState previousBlockState; private IBlockState newBlockState; + private boolean placeStartPos; public RequestLookAtMessage() { coordinate = BlockPos.ORIGIN; previousBlockState = null; newBlockState = null; + placeStartPos = false; } - public RequestLookAtMessage(BlockPos coordinate, IBlockState previousBlockState, IBlockState newBlockState) { + public RequestLookAtMessage(BlockPos coordinate, IBlockState previousBlockState, IBlockState newBlockState, boolean placeStartPos) { this.coordinate = coordinate; this.previousBlockState = previousBlockState; this.newBlockState = newBlockState; + this.placeStartPos = placeStartPos; } public BlockPos getCoordinate() { @@ -50,6 +53,10 @@ public class RequestLookAtMessage implements IMessage { return newBlockState; } + public boolean getPlaceStartPos() { + return placeStartPos; + } + @Override public void toBytes(ByteBuf buf) { buf.writeInt(this.coordinate.getX()); @@ -57,6 +64,7 @@ public class RequestLookAtMessage implements IMessage { buf.writeInt(this.coordinate.getZ()); buf.writeInt(Block.getStateId(this.previousBlockState)); buf.writeInt(Block.getStateId(this.newBlockState)); + buf.writeBoolean(this.placeStartPos); } @Override @@ -64,6 +72,7 @@ public class RequestLookAtMessage implements IMessage { coordinate = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt()); previousBlockState = Block.getStateById(buf.readInt()); newBlockState = Block.getStateById(buf.readInt()); + placeStartPos = buf.readBoolean(); } // The params of the IMessageHandler are @@ -90,8 +99,9 @@ public class RequestLookAtMessage implements IMessage { message.getCoordinate(), message.getCoordinate())); }); - //Prevent double placing in normal mode with placeStartPos false - return new BlockPlacedMessage(ClientProxy.previousLookAt, false); + //Prevent double placing in normal mode with placeStartPos false. + //Unless QuickReplace is on, then we do need to place start pos. + return new BlockPlacedMessage(ClientProxy.previousLookAt, message.getPlaceStartPos()); } return null; }