From 26fcdfe3bc74bd8722037eca561d2cebe81d2dc9 Mon Sep 17 00:00:00 2001 From: Myles Date: Wed, 22 Jun 2016 23:34:32 +0100 Subject: [PATCH] Allow ability to replace piston extension block to prevent crashing. --- src/main/java/us/myles/ViaVersion/ViaConfig.java | 10 ++++++++++ .../us/myles/ViaVersion/api/ViaVersionConfig.java | 14 ++++++++++++++ .../us/myles/ViaVersion/api/data/StoredObject.java | 3 +-- .../protocol1_9to1_8/types/ChunkType.java | 9 ++++++++- src/main/resources/config.yml | 6 +++++- 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/main/java/us/myles/ViaVersion/ViaConfig.java b/src/main/java/us/myles/ViaVersion/ViaConfig.java index d3e157e53..af23dca75 100644 --- a/src/main/java/us/myles/ViaVersion/ViaConfig.java +++ b/src/main/java/us/myles/ViaVersion/ViaConfig.java @@ -150,6 +150,16 @@ public class ViaConfig implements ViaVersionConfig { return plugin.getConfig().getBoolean("nms-player-ticking", true); } + @Override + public boolean isReplacePistons() { + return plugin.getConfig().getBoolean("replace-pistons", false); + } + + @Override + public int getPistonReplacementId() { + return plugin.getConfig().getInt("replacement-piston-id", 0); + } + public boolean isAutoTeam() { // Collision has to be enabled first return isPreventCollision() && plugin.getConfig().getBoolean("auto-team", true); diff --git a/src/main/java/us/myles/ViaVersion/api/ViaVersionConfig.java b/src/main/java/us/myles/ViaVersion/api/ViaVersionConfig.java index b54e8e963..9682564dc 100644 --- a/src/main/java/us/myles/ViaVersion/api/ViaVersionConfig.java +++ b/src/main/java/us/myles/ViaVersion/api/ViaVersionConfig.java @@ -172,4 +172,18 @@ public interface ViaVersionConfig { * @return if true, enabled */ boolean isNMSPlayerTicking(); + + /** + * Replace extended pistons on 1.10 chunk loading. + * + * @return True if to replace them + */ + boolean isReplacePistons(); + + /** + * Get the id for replacing extended pistons. + * + * @return The integer id + */ + int getPistonReplacementId(); } diff --git a/src/main/java/us/myles/ViaVersion/api/data/StoredObject.java b/src/main/java/us/myles/ViaVersion/api/data/StoredObject.java index aa9b29584..80d7e2a85 100644 --- a/src/main/java/us/myles/ViaVersion/api/data/StoredObject.java +++ b/src/main/java/us/myles/ViaVersion/api/data/StoredObject.java @@ -1,10 +1,9 @@ package us.myles.ViaVersion.api.data; -import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; -@Getter(AccessLevel.PROTECTED) +@Getter @AllArgsConstructor public class StoredObject { private UserConnection user; diff --git a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/types/ChunkType.java b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/types/ChunkType.java index 1be50dd77..63c57a9ca 100644 --- a/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/types/ChunkType.java +++ b/src/main/java/us/myles/ViaVersion/protocols/protocol1_9to1_8/types/ChunkType.java @@ -3,10 +3,13 @@ package us.myles.ViaVersion.protocols.protocol1_9to1_8.types; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import org.bukkit.Bukkit; +import us.myles.ViaVersion.api.ViaVersion; import us.myles.ViaVersion.api.minecraft.chunks.Chunk; import us.myles.ViaVersion.api.type.PartialType; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.minecraft.BaseChunkType; +import us.myles.ViaVersion.protocols.base.ProtocolInfo; +import us.myles.ViaVersion.protocols.protocol1_10to1_9_3.Protocol1_10To1_9_3_4; import us.myles.ViaVersion.protocols.protocol1_9to1_8.chunks.Chunk1_9to1_8; import us.myles.ViaVersion.protocols.protocol1_9to1_8.chunks.ChunkSection1_9to1_8; import us.myles.ViaVersion.protocols.protocol1_9to1_8.storage.ClientChunks; @@ -46,6 +49,9 @@ public class ChunkType extends PartialType { @Override public Chunk read(ByteBuf input, ClientChunks param) throws Exception { + boolean replacePistons = param.getUser().get(ProtocolInfo.class).getPipeline().contains(Protocol1_10To1_9_3_4.class) && ViaVersion.getConfig().isReplacePistons(); + int replacementId = ViaVersion.getConfig().getPistonReplacementId(); + int chunkX = input.readInt(); int chunkZ = input.readInt(); long chunkHash = toLong(chunkX, chunkZ); @@ -93,7 +99,8 @@ public class ChunkType extends PartialType { int mask = blockBuf.get(); int type = mask >> 4; int data = mask & 0xF; - + if (replacePistons && type == 36) + type = replacementId; section.setBlock(j, type, data); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 44ac2107c..e0ad6dd40 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -70,4 +70,8 @@ use-new-deathmessages: false # Should we cache our items, this will prevent server from being lagged out, however the cost is a constant task caching items item-cache: true # Patch the Anti xray to work on 1.9 & 1.10 (If your server is 1.8) This can cost more performance, so disable it if you don't use it. -anti-xray-patch: true \ No newline at end of file +anti-xray-patch: true +# Should we replace extended pistons to fix 1.10.1 (Only on chunk load) +replace-pistons: false +# What id should we replace with, default is air. (careful of players getting stuck standing on them) +replacement-piston-id: 0 \ No newline at end of file