From 7f6c429a55c80edb4ac155d28f9b5b3a142d725c Mon Sep 17 00:00:00 2001 From: KennyTV Date: Tue, 28 Jan 2020 13:31:36 +0100 Subject: [PATCH] Minor blockconnection cleanup, reduce map lookups --- .../bukkit/platform/BukkitViaLoader.java | 5 +- .../AbstractFenceConnectionHandler.java | 37 +++---- .../AbstractStempConnectionHandler.java | 37 +++---- .../blockconnections/BlockData.java | 2 +- .../ChestConnectionHandler.java | 32 +++--- .../ChorusPlantConnectionHandler.java | 13 +-- .../blockconnections/ConnectionData.java | 25 +++-- .../blockconnections/ConnectionHandler.java | 6 +- .../DoorConnectionHandler.java | 87 +++++++++------ .../FlowerConnectionHandler.java | 24 ++--- .../GlassConnectionHandler.java | 8 +- .../RedstoneConnectionHandler.java | 21 ++-- .../SnowyGrassConnectionHandler.java | 29 +++-- .../StairConnectionHandler.java | 101 +++++++++++------- .../TripwireConnectionHandler.java | 59 +++++----- .../blockconnections/WrappedBlockData.java | 23 ++-- .../providers/BlockConnectionProvider.java | 2 +- .../packets/WorldPackets.java | 6 +- 18 files changed, 275 insertions(+), 242 deletions(-) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaLoader.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaLoader.java index bc036be75..50d5eba46 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaLoader.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaLoader.java @@ -24,6 +24,7 @@ import us.myles.ViaVersion.bukkit.providers.BukkitViaBulkChunkTranslator; import us.myles.ViaVersion.bukkit.providers.BukkitViaMovementTransmitter; import us.myles.ViaVersion.protocols.base.ProtocolInfo; import us.myles.ViaVersion.protocols.protocol1_12to1_11_1.providers.InventoryQuickMoveProvider; +import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionData; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers.BlockConnectionProvider; import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.BulkChunkTranslatorProvider; import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.HandItemProvider; @@ -143,7 +144,9 @@ public class BukkitViaLoader implements ViaPlatformLoader { } if (ProtocolRegistry.SERVER_PROTOCOL < ProtocolVersion.v1_13.getId()) { if (Via.getConfig().getBlockConnectionMethod().equalsIgnoreCase("world")) { - Via.getManager().getProviders().use(BlockConnectionProvider.class, new BukkitBlockConnectionProvider()); + BukkitBlockConnectionProvider blockConnectionProvider = new BukkitBlockConnectionProvider(); + Via.getManager().getProviders().use(BlockConnectionProvider.class, blockConnectionProvider); + ConnectionData.blockConnectionProvider = blockConnectionProvider; } } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/AbstractFenceConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/AbstractFenceConnectionHandler.java index 85bcdcc92..36889ec4c 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/AbstractFenceConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/AbstractFenceConnectionHandler.java @@ -1,6 +1,5 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections; -import lombok.Getter; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.BlockFace; import us.myles.ViaVersion.api.minecraft.Position; @@ -13,27 +12,23 @@ import java.util.Map; import java.util.Set; public abstract class AbstractFenceConnectionHandler extends ConnectionHandler { - private final String blockConnections; - @Getter - private Set blockStates = new HashSet<>(); - private Map connectedBlockStates = new HashMap<>(); private static final StairConnectionHandler STAIR_CONNECTION_HANDLER = new StairConnectionHandler(); + private final String blockConnections; + private final Set blockStates = new HashSet<>(); + private final Map connectedBlockStates = new HashMap<>(); - public AbstractFenceConnectionHandler(String blockConnections) { + protected AbstractFenceConnectionHandler(String blockConnections) { this.blockConnections = blockConnections; } public ConnectionData.ConnectorInitAction getInitAction(final String key) { final AbstractFenceConnectionHandler handler = this; - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - if (key.equals(blockData.getMinecraftKey())) { - if (blockData.hasData("waterlogged") && blockData.getValue("waterlogged").equals("true")) return; - blockStates.add(blockData.getSavedBlockStateId()); - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); - connectedBlockStates.put(getStates(blockData), blockData.getSavedBlockStateId()); - } + return blockData -> { + if (key.equals(blockData.getMinecraftKey())) { + if (blockData.hasData("waterlogged") && blockData.getValue("waterlogged").equals("true")) return; + blockStates.add(blockData.getSavedBlockStateId()); + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); + connectedBlockStates.put(getStates(blockData), blockData.getSavedBlockStateId()); } }; } @@ -69,8 +64,14 @@ public abstract class AbstractFenceConnectionHandler extends ConnectionHandler { } protected boolean connects(BlockFace side, int blockState, boolean pre1_12) { - return blockStates.contains(blockState) || blockConnections != null - && ConnectionData.blockConnectionData.containsKey(blockState) - && ConnectionData.blockConnectionData.get(blockState).connectsTo(blockConnections, side.opposite(), pre1_12); + if (blockStates.contains(blockState)) return true; + if (blockConnections == null) return false; + + BlockData blockData = ConnectionData.blockConnectionData.get(blockState); + return blockData != null && blockData.connectsTo(blockConnections, side.opposite(), pre1_12); + } + + public Set getBlockStates() { + return blockStates; } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/AbstractStempConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/AbstractStempConnectionHandler.java index 344ec1b60..7ac6d1a45 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/AbstractStempConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/AbstractStempConnectionHandler.java @@ -4,39 +4,32 @@ import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.BlockFace; import us.myles.ViaVersion.api.minecraft.Position; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Locale; -import java.util.Map; -import java.util.Set; +import java.util.*; -public class AbstractStempConnectionHandler extends ConnectionHandler { +public abstract class AbstractStempConnectionHandler extends ConnectionHandler { private static final BlockFace[] BLOCK_FACES = {BlockFace.EAST, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST}; - private int baseStateId; - private Set blockId = new HashSet<>(); + private final int baseStateId; + private final Set blockId = new HashSet<>(); - private Map stemps = new HashMap<>(); + private final Map stemps = new HashMap<>(); - public AbstractStempConnectionHandler(String baseStateId) { + protected AbstractStempConnectionHandler(String baseStateId) { this.baseStateId = ConnectionData.getId(baseStateId); } public ConnectionData.ConnectorInitAction getInitAction(final String blockId, final String toKey) { final AbstractStempConnectionHandler handler = this; - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - if (blockData.getSavedBlockStateId() == baseStateId || blockId.equals(blockData.getMinecraftKey())) { - if (blockData.getSavedBlockStateId() != baseStateId) { - handler.blockId.add(blockData.getSavedBlockStateId()); - } - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); - } - if (blockData.getMinecraftKey().equals(toKey)) { - String facing = blockData.getValue("facing").toUpperCase(Locale.ROOT); - stemps.put(BlockFace.valueOf(facing), blockData.getSavedBlockStateId()); + return blockData -> { + if (blockData.getSavedBlockStateId() == baseStateId || blockId.equals(blockData.getMinecraftKey())) { + if (blockData.getSavedBlockStateId() != baseStateId) { + handler.blockId.add(blockData.getSavedBlockStateId()); } + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); + } + if (blockData.getMinecraftKey().equals(toKey)) { + String facing = blockData.getValue("facing").toUpperCase(Locale.ROOT); + stemps.put(BlockFace.valueOf(facing), blockData.getSavedBlockStateId()); } }; } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/BlockData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/BlockData.java index a8adc7a15..7ca651847 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/BlockData.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/BlockData.java @@ -6,7 +6,7 @@ import java.util.HashMap; import java.util.Map; public class BlockData { - private Map connectData = new HashMap<>(); + private final Map connectData = new HashMap<>(); public void put(String key, boolean[] booleans) { connectData.put(key, booleans); diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ChestConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ChestConnectionHandler.java index 397ec5e97..279d5dd3e 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ChestConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ChestConnectionHandler.java @@ -4,31 +4,25 @@ import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.BlockFace; import us.myles.ViaVersion.api.minecraft.Position; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Locale; -import java.util.Map; -import java.util.Set; +import java.util.*; class ChestConnectionHandler extends ConnectionHandler { - private static Map chestFacings = new HashMap<>(); - private static Map connectedStates = new HashMap<>(); - private static Set trappedChests = new HashSet<>(); + private static final Map chestFacings = new HashMap<>(); + private static final Map connectedStates = new HashMap<>(); + private static final Set trappedChests = new HashSet<>(); static ConnectionData.ConnectorInitAction init() { final ChestConnectionHandler connectionHandler = new ChestConnectionHandler(); - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - if (!blockData.getMinecraftKey().equals("minecraft:chest") && !blockData.getMinecraftKey().equals("minecraft:trapped_chest")) - return; - if (blockData.getValue("waterlogged").equals("true")) return; - chestFacings.put(blockData.getSavedBlockStateId(), BlockFace.valueOf(blockData.getValue("facing").toUpperCase(Locale.ROOT))); - if (blockData.getMinecraftKey().equalsIgnoreCase("minecraft:trapped_chest")) - trappedChests.add(blockData.getSavedBlockStateId()); - connectedStates.put(getStates(blockData), blockData.getSavedBlockStateId()); - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), connectionHandler); + return blockData -> { + if (!blockData.getMinecraftKey().equals("minecraft:chest") && !blockData.getMinecraftKey().equals("minecraft:trapped_chest")) + return; + if (blockData.getValue("waterlogged").equals("true")) return; + chestFacings.put(blockData.getSavedBlockStateId(), BlockFace.valueOf(blockData.getValue("facing").toUpperCase(Locale.ROOT))); + if (blockData.getMinecraftKey().equalsIgnoreCase("minecraft:trapped_chest")) { + trappedChests.add(blockData.getSavedBlockStateId()); } + connectedStates.put(getStates(blockData), blockData.getSavedBlockStateId()); + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), connectionHandler); }; } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ChorusPlantConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ChorusPlantConnectionHandler.java index 7e60ba630..da94d8a02 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ChorusPlantConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ChorusPlantConnectionHandler.java @@ -3,14 +3,12 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.BlockFace; import us.myles.ViaVersion.api.minecraft.Position; -import us.myles.ViaVersion.api.protocol.ProtocolVersion; -import us.myles.ViaVersion.protocols.base.ProtocolInfo; import java.util.ArrayList; import java.util.List; public class ChorusPlantConnectionHandler extends AbstractFenceConnectionHandler { - private int endstone; + private final int endstone; static List init() { List actions = new ArrayList<>(2); @@ -26,12 +24,9 @@ public class ChorusPlantConnectionHandler extends AbstractFenceConnectionHandler } public ConnectionData.ConnectorInitAction getExtraAction() { - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - if (blockData.getMinecraftKey().equals("minecraft:chorus_flower")) { - getBlockStates().add(blockData.getSavedBlockStateId()); - } + return blockData -> { + if (blockData.getMinecraftKey().equals("minecraft:chorus_flower")) { + getBlockStates().add(blockData.getSavedBlockStateId()); } }; } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java index 41ac95c1b..f9ae3188f 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java @@ -21,6 +21,8 @@ import java.util.*; import java.util.Map.Entry; public class ConnectionData { + private static final BlockChangeRecord[] A = new BlockChangeRecord[0]; + public static BlockConnectionProvider blockConnectionProvider; static Map idToKey = new HashMap<>(); static Map keyToId = new HashMap<>(); static Map connectionHandlerMap = new HashMap<>(); @@ -28,10 +30,9 @@ public class ConnectionData { static Set occludingStates = new HashSet<>(); public static void update(UserConnection user, Position position) { - BlockConnectionProvider connectionProvider = Via.getManager().getProviders().get(BlockConnectionProvider.class); for (BlockFace face : BlockFace.values()) { Position pos = position.getRelative(face); - int blockState = connectionProvider.getBlockData(user, pos.getX(), pos.getY(), pos.getZ()); + int blockState = blockConnectionProvider.getBlockData(user, pos.getX(), pos.getY(), pos.getZ()); ConnectionHandler handler = connectionHandlerMap.get(blockState); if (handler == null) continue; @@ -112,7 +113,7 @@ public class ConnectionData { PacketWrapper wrapper = new PacketWrapper(0x0F, null, user); wrapper.write(Type.INT, chunkX + chunkDeltaX); wrapper.write(Type.INT, chunkZ + chunkDeltaZ); - wrapper.write(Type.BLOCK_CHANGE_RECORD_ARRAY, updates.toArray(new BlockChangeRecord[0])); + wrapper.write(Type.BLOCK_CHANGE_RECORD_ARRAY, updates.toArray(A)); try { wrapper.send(Protocol1_13To1_12_2.class, true, true); } catch (Exception e) { @@ -124,7 +125,7 @@ public class ConnectionData { } public static void updateBlock(UserConnection user, Position pos, List records) { - int blockState = Via.getManager().getProviders().get(BlockConnectionProvider.class).getBlockData(user, pos.getX(), pos.getY(), pos.getZ()); + int blockState = blockConnectionProvider.getBlockData(user, pos.getX(), pos.getY(), pos.getZ()); ConnectionHandler handler = getConnectionHandler(blockState); if (handler == null) return; @@ -132,26 +133,22 @@ public class ConnectionData { records.add(new BlockChangeRecord((short) (((pos.getX() & 0xF) << 4) | (pos.getZ() & 0xF)), pos.getY(), newBlockState)); } - public static BlockConnectionProvider getProvider() { - return Via.getManager().getProviders().get(BlockConnectionProvider.class); - } - public static void updateBlockStorage(UserConnection userConnection, int x, int y, int z, int blockState) { if (!needStoreBlocks()) return; if (ConnectionData.isWelcome(blockState)) { - ConnectionData.getProvider().storeBlock(userConnection, x, y, z, blockState); + blockConnectionProvider.storeBlock(userConnection, x, y, z, blockState); } else { - ConnectionData.getProvider().removeBlock(userConnection, x, y, z); + blockConnectionProvider.removeBlock(userConnection, x, y, z); } } public static void clearBlockStorage(UserConnection connection) { if (!needStoreBlocks()) return; - getProvider().clearStorage(connection); + blockConnectionProvider.clearStorage(connection); } public static boolean needStoreBlocks() { - return getProvider().storesBlocks(); + return blockConnectionProvider.storesBlocks(); } public static void connectBlocks(UserConnection user, Chunk chunk) { @@ -260,7 +257,8 @@ public class ConnectionData { } if (Via.getConfig().getBlockConnectionMethod().equalsIgnoreCase("packet")) { - Via.getManager().getProviders().register(BlockConnectionProvider.class, new PacketBlockConnectionProvider()); + blockConnectionProvider = new PacketBlockConnectionProvider(); + Via.getManager().getProviders().register(BlockConnectionProvider.class, blockConnectionProvider); } } @@ -289,6 +287,7 @@ public class ConnectionData { return idToKey.get(id); } + @FunctionalInterface interface ConnectorInitAction { void check(WrappedBlockData blockData); diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionHandler.java index e017bce73..e0c568221 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionHandler.java @@ -6,14 +6,10 @@ import us.myles.ViaVersion.api.minecraft.Position; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers.BlockConnectionProvider; public abstract class ConnectionHandler { + public abstract int connect(UserConnection user, Position position, int blockState); public int getBlockData(UserConnection user, Position position) { return Via.getManager().getProviders().get(BlockConnectionProvider.class).getBlockData(user, position.getX(), position.getY(), position.getZ()); } - - public boolean canConnect(int id) { - ConnectionHandler handler = ConnectionData.connectionHandlerMap.get(id); - return handler != null && handler == this; - } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/DoorConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/DoorConnectionHandler.java index a9675f2aa..52d4e0a4e 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/DoorConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/DoorConnectionHandler.java @@ -1,21 +1,14 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.BlockFace; import us.myles.ViaVersion.api.minecraft.Position; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; public class DoorConnectionHandler extends ConnectionHandler { - private static Map doorDataMap = new HashMap<>(); - private static Map connectedStates = new HashMap<>(); + private static final Map doorDataMap = new HashMap<>(); + private static final Map connectedStates = new HashMap<>(); static ConnectionData.ConnectorInitAction init() { final List baseDoors = new LinkedList<>(); @@ -28,29 +21,26 @@ public class DoorConnectionHandler extends ConnectionHandler { baseDoors.add("minecraft:iron_door"); final DoorConnectionHandler connectionHandler = new DoorConnectionHandler(); - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - int type = baseDoors.indexOf(blockData.getMinecraftKey()); - if (type == -1) return; + return blockData -> { + int type = baseDoors.indexOf(blockData.getMinecraftKey()); + if (type == -1) return; - int id = blockData.getSavedBlockStateId(); + int id = blockData.getSavedBlockStateId(); - DoorData doorData = new DoorData( - blockData.getValue("half").equals("lower"), - blockData.getValue("hinge").equals("right"), - blockData.getValue("powered").equals("true"), - blockData.getValue("open").equals("true"), - BlockFace.valueOf(blockData.getValue("facing").toUpperCase(Locale.ROOT)), - type - ); + DoorData doorData = new DoorData( + blockData.getValue("half").equals("lower"), + blockData.getValue("hinge").equals("right"), + blockData.getValue("powered").equals("true"), + blockData.getValue("open").equals("true"), + BlockFace.valueOf(blockData.getValue("facing").toUpperCase(Locale.ROOT)), + type + ); - doorDataMap.put(id, doorData); + doorDataMap.put(id, doorData); - connectedStates.put(getStates(doorData), id); + connectedStates.put(getStates(doorData), id); - ConnectionData.connectionHandlerMap.put(id, connectionHandler); - } + ConnectionData.connectionHandlerMap.put(id, connectionHandler); }; } @@ -87,16 +77,47 @@ public class DoorConnectionHandler extends ConnectionHandler { if (doorData.isRightHinge()) s |= 8; s |= lowerHalf.getFacing().ordinal() << 4; } + Integer newBlockState = connectedStates.get(s); return newBlockState == null ? blockState : newBlockState; } - @AllArgsConstructor - @Getter - @ToString - private static class DoorData { + private static final class DoorData { private final boolean lower, rightHinge, powered, open; private final BlockFace facing; - private int type; + private final int type; + + private DoorData(boolean lower, boolean rightHinge, boolean powered, boolean open, BlockFace facing, int type) { + this.lower = lower; + this.rightHinge = rightHinge; + this.powered = powered; + this.open = open; + this.facing = facing; + this.type = type; + } + + public boolean isLower() { + return lower; + } + + public boolean isRightHinge() { + return rightHinge; + } + + public boolean isPowered() { + return powered; + } + + public boolean isOpen() { + return open; + } + + public BlockFace getFacing() { + return facing; + } + + public int getType() { + return type; + } } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/FlowerConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/FlowerConnectionHandler.java index b35992dca..2f181262e 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/FlowerConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/FlowerConnectionHandler.java @@ -12,7 +12,7 @@ import java.util.Set; public class FlowerConnectionHandler extends ConnectionHandler { - private static Map flowers = new HashMap<>(); + private static final Map flowers = new HashMap<>(); static ConnectionData.ConnectorInitAction init() { final Set baseFlower = new HashSet<>(); @@ -24,15 +24,12 @@ public class FlowerConnectionHandler extends ConnectionHandler { baseFlower.add("minecraft:lilac"); final FlowerConnectionHandler handler = new FlowerConnectionHandler(); - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - if (baseFlower.contains(blockData.getMinecraftKey())) { - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); - if (blockData.getValue("half").equals("lower")) { - blockData.set("half", "upper"); - flowers.put(blockData.getSavedBlockStateId(), blockData.getBlockStateId()); - } + return blockData -> { + if (baseFlower.contains(blockData.getMinecraftKey())) { + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); + if (blockData.getValue("half").equals("lower")) { + blockData.set("half", "upper"); + flowers.put(blockData.getSavedBlockStateId(), blockData.getBlockStateId()); } } }; @@ -41,14 +38,15 @@ public class FlowerConnectionHandler extends ConnectionHandler { @Override public int connect(UserConnection user, Position position, int blockState) { int blockBelowId = getBlockData(user, position.getRelative(BlockFace.BOTTOM)); - if (flowers.containsKey(blockBelowId)) { + Integer connectBelow = flowers.get(blockBelowId); + if (connectBelow != null) { int blockAboveId = getBlockData(user, position.getRelative(BlockFace.TOP)); if (Via.getConfig().isStemWhenBlockAbove()) { if (blockAboveId == 0) { - return flowers.get(blockBelowId); + return connectBelow; } } else if (!flowers.containsKey(blockAboveId)) { - return flowers.get(blockBelowId); + return connectBelow; } } return blockState; diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/GlassConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/GlassConnectionHandler.java index 77e4b9817..79c3d62e0 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/GlassConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/GlassConnectionHandler.java @@ -39,8 +39,10 @@ public class GlassConnectionHandler extends AbstractFenceConnectionHandler { @Override protected byte getStates(UserConnection user, Position position, int blockState) { byte states = super.getStates(user, position, blockState); - return states == 0 - && user.get(ProtocolInfo.class).getServerProtocolVersion() <= 47 - && user.get(ProtocolInfo.class).getServerProtocolVersion() != -1 ? 0xF : states; + if (states != 0) return states; + + ProtocolInfo protocolInfo = user.get(ProtocolInfo.class); + return protocolInfo.getServerProtocolVersion() <= 47 + && protocolInfo.getServerProtocolVersion() != -1 ? 0xF : states; } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/RedstoneConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/RedstoneConnectionHandler.java index b5454d0c3..bfb3ef5ac 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/RedstoneConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/RedstoneConnectionHandler.java @@ -10,22 +10,19 @@ import java.util.Map; import java.util.Set; public class RedstoneConnectionHandler extends ConnectionHandler { - private static Set redstone = new HashSet<>(); - private static Map connectedBlockStates = new HashMap<>(); - private static Map powerMappings = new HashMap<>(); + private static final Set redstone = new HashSet<>(); + private static final Map connectedBlockStates = new HashMap<>(); + private static final Map powerMappings = new HashMap<>(); static ConnectionData.ConnectorInitAction init() { final RedstoneConnectionHandler connectionHandler = new RedstoneConnectionHandler(); final String redstoneKey = "minecraft:redstone_wire"; - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - if (!redstoneKey.equals(blockData.getMinecraftKey())) return; - redstone.add(blockData.getSavedBlockStateId()); - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), connectionHandler); - connectedBlockStates.put(getStates(blockData), blockData.getSavedBlockStateId()); - powerMappings.put(blockData.getSavedBlockStateId(), Integer.valueOf(blockData.getValue("power"))); - } + return blockData -> { + if (!redstoneKey.equals(blockData.getMinecraftKey())) return; + redstone.add(blockData.getSavedBlockStateId()); + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), connectionHandler); + connectedBlockStates.put(getStates(blockData), blockData.getSavedBlockStateId()); + powerMappings.put(blockData.getSavedBlockStateId(), Integer.valueOf(blockData.getValue("power"))); }; } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/SnowyGrassConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/SnowyGrassConnectionHandler.java index 9d20d4168..b0941689a 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/SnowyGrassConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/SnowyGrassConnectionHandler.java @@ -11,8 +11,8 @@ import java.util.Map; import java.util.Set; public class SnowyGrassConnectionHandler extends ConnectionHandler { - private static Map, Integer> grassBlocks = new HashMap<>(); - private static Set snows = new HashSet<>(); + private static final Map, Integer> grassBlocks = new HashMap<>(); + private static final Set snows = new HashSet<>(); static ConnectionData.ConnectorInitAction init() { final Set snowyGrassBlocks = new HashSet<>(); @@ -21,20 +21,17 @@ public class SnowyGrassConnectionHandler extends ConnectionHandler { snowyGrassBlocks.add("minecraft:mycelium"); final SnowyGrassConnectionHandler handler = new SnowyGrassConnectionHandler(); - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - if (snowyGrassBlocks.contains(blockData.getMinecraftKey())) { - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); - blockData.set("snowy", "true"); - grassBlocks.put(new Pair<>(blockData.getSavedBlockStateId(), true), blockData.getBlockStateId()); - blockData.set("snowy", "false"); - grassBlocks.put(new Pair<>(blockData.getSavedBlockStateId(), false), blockData.getBlockStateId()); - } - if (blockData.getMinecraftKey().equals("minecraft:snow") || blockData.getMinecraftKey().equals("minecraft:snow_block")) { - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); - snows.add(blockData.getSavedBlockStateId()); - } + return blockData -> { + if (snowyGrassBlocks.contains(blockData.getMinecraftKey())) { + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); + blockData.set("snowy", "true"); + grassBlocks.put(new Pair<>(blockData.getSavedBlockStateId(), true), blockData.getBlockStateId()); + blockData.set("snowy", "false"); + grassBlocks.put(new Pair<>(blockData.getSavedBlockStateId(), false), blockData.getBlockStateId()); + } + if (blockData.getMinecraftKey().equals("minecraft:snow") || blockData.getMinecraftKey().equals("minecraft:snow_block")) { + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), handler); + snows.add(blockData.getSavedBlockStateId()); } }; } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/StairConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/StairConnectionHandler.java index ec032a24b..ebd416007 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/StairConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/StairConnectionHandler.java @@ -1,21 +1,14 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.BlockFace; import us.myles.ViaVersion.api.minecraft.Position; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; public class StairConnectionHandler extends ConnectionHandler { - private static Map stairDataMap = new HashMap<>(); - private static Map connectedBlocks = new HashMap<>(); + private static final Map stairDataMap = new HashMap<>(); + private static final Map connectedBlocks = new HashMap<>(); static ConnectionData.ConnectorInitAction init() { final List baseStairs = new LinkedList<>(); @@ -38,35 +31,43 @@ public class StairConnectionHandler extends ConnectionHandler { baseStairs.add("minecraft:dark_prismarine_stairs"); final StairConnectionHandler connectionHandler = new StairConnectionHandler(); - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - int type = baseStairs.indexOf(blockData.getMinecraftKey()); - if (type == -1) return; + return blockData -> { + int type = baseStairs.indexOf(blockData.getMinecraftKey()); + if (type == -1) return; - if (blockData.getValue("waterlogged").equals("true")) return; + if (blockData.getValue("waterlogged").equals("true")) return; - byte shape; - switch (blockData.getValue("shape")) { - case "straight": shape = 0; break; - case "inner_left": shape = 1; break; - case "inner_right": shape = 2; break; - case "outer_left": shape = 3; break; - case "outer_right": shape = 4; break; - default: return; - } - - StairData stairData = new StairData( - blockData.getValue("half").equals("bottom"), - shape, (byte) type, - BlockFace.valueOf(blockData.getValue("facing").toUpperCase(Locale.ROOT)) - ); - - stairDataMap.put(blockData.getSavedBlockStateId(), stairData); - connectedBlocks.put(getStates(stairData), blockData.getSavedBlockStateId()); - - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), connectionHandler); + byte shape; + switch (blockData.getValue("shape")) { + case "straight": + shape = 0; + break; + case "inner_left": + shape = 1; + break; + case "inner_right": + shape = 2; + break; + case "outer_left": + shape = 3; + break; + case "outer_right": + shape = 4; + break; + default: + return; } + + StairData stairData = new StairData( + blockData.getValue("half").equals("bottom"), + shape, (byte) type, + BlockFace.valueOf(blockData.getValue("facing").toUpperCase(Locale.ROOT)) + ); + + stairDataMap.put(blockData.getSavedBlockStateId(), stairData); + connectedBlocks.put(getStates(stairData), blockData.getSavedBlockStateId()); + + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), connectionHandler); }; } @@ -136,12 +137,32 @@ public class StairConnectionHandler extends ConnectionHandler { } } - @AllArgsConstructor - @Getter - @ToString - private static class StairData { + private static final class StairData { private final boolean bottom; private final byte shape, type; private final BlockFace facing; + + private StairData(boolean bottom, byte shape, byte type, BlockFace facing) { + this.bottom = bottom; + this.shape = shape; + this.type = type; + this.facing = facing; + } + + public boolean isBottom() { + return bottom; + } + + public byte getShape() { + return shape; + } + + public byte getType() { + return type; + } + + public BlockFace getFacing() { + return facing; + } } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/TripwireConnectionHandler.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/TripwireConnectionHandler.java index ed0dd135e..d19986699 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/TripwireConnectionHandler.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/TripwireConnectionHandler.java @@ -1,8 +1,5 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.BlockFace; import us.myles.ViaVersion.api.minecraft.Position; @@ -12,29 +9,26 @@ import java.util.Locale; import java.util.Map; public class TripwireConnectionHandler extends ConnectionHandler { - private static Map tripwireDataMap = new HashMap<>(); - private static Map connectedBlocks = new HashMap<>(); - private static Map tripwireHooks = new HashMap<>(); + private static final Map tripwireDataMap = new HashMap<>(); + private static final Map connectedBlocks = new HashMap<>(); + private static final Map tripwireHooks = new HashMap<>(); static ConnectionData.ConnectorInitAction init() { final TripwireConnectionHandler connectionHandler = new TripwireConnectionHandler(); - return new ConnectionData.ConnectorInitAction() { - @Override - public void check(WrappedBlockData blockData) { - if (blockData.getMinecraftKey().equals("minecraft:tripwire_hook")) { - tripwireHooks.put(blockData.getSavedBlockStateId(), BlockFace.valueOf(blockData.getValue("facing").toUpperCase(Locale.ROOT))); - } else if (blockData.getMinecraftKey().equals("minecraft:tripwire")) { - TripwireData tripwireData = new TripwireData( - blockData.getValue("attached").equals("true"), - blockData.getValue("disarmed").equals("true"), - blockData.getValue("powered").equals("true") - ); + return blockData -> { + if (blockData.getMinecraftKey().equals("minecraft:tripwire_hook")) { + tripwireHooks.put(blockData.getSavedBlockStateId(), BlockFace.valueOf(blockData.getValue("facing").toUpperCase(Locale.ROOT))); + } else if (blockData.getMinecraftKey().equals("minecraft:tripwire")) { + TripwireData tripwireData = new TripwireData( + blockData.getValue("attached").equals("true"), + blockData.getValue("disarmed").equals("true"), + blockData.getValue("powered").equals("true") + ); - tripwireDataMap.put(blockData.getSavedBlockStateId(), tripwireData); - connectedBlocks.put(getStates(blockData), blockData.getSavedBlockStateId()); + tripwireDataMap.put(blockData.getSavedBlockStateId(), tripwireData); + connectedBlocks.put(getStates(blockData), blockData.getSavedBlockStateId()); - ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), connectionHandler); - } + ConnectionData.connectionHandlerMap.put(blockData.getSavedBlockStateId(), connectionHandler); } }; } @@ -82,10 +76,25 @@ public class TripwireConnectionHandler extends ConnectionHandler { return newBlockState == null ? blockState : newBlockState; } - @AllArgsConstructor - @Getter - @ToString - private static class TripwireData { + private static final class TripwireData { private final boolean attached, disarmed, powered; + + private TripwireData(final boolean attached, final boolean disarmed, final boolean powered) { + this.attached = attached; + this.disarmed = disarmed; + this.powered = powered; + } + + public boolean isAttached() { + return attached; + } + + public boolean isDisarmed() { + return disarmed; + } + + public boolean isPowered() { + return powered; + } } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/WrappedBlockData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/WrappedBlockData.java index f69737a61..212307d35 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/WrappedBlockData.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/WrappedBlockData.java @@ -1,17 +1,14 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections; -import lombok.Getter; import us.myles.ViaVersion.api.Via; import java.util.LinkedHashMap; import java.util.Map.Entry; public class WrappedBlockData { - @Getter - private String minecraftKey; - @Getter - private int savedBlockStateId; - private LinkedHashMap blockData = new LinkedHashMap<>(); + private final String minecraftKey; + private final int savedBlockStateId; + private final LinkedHashMap blockData = new LinkedHashMap<>(); public static WrappedBlockData fromString(String s) { String[] array = s.split("\\["); @@ -43,12 +40,21 @@ public class WrappedBlockData { this.savedBlockStateId = savedBlockStateId; } + @Override public String toString() { StringBuilder sb = new StringBuilder(minecraftKey + "["); for (Entry entry : blockData.entrySet()) { sb.append(entry.getKey()).append('=').append(entry.getValue()).append(','); } - return sb.substring(0, sb.length()-1) + "]"; + return sb.substring(0, sb.length() - 1) + "]"; + } + + public String getMinecraftKey() { + return minecraftKey; + } + + public int getSavedBlockStateId() { + return savedBlockStateId; } public int getBlockStateId() { @@ -56,7 +62,8 @@ public class WrappedBlockData { } public WrappedBlockData set(String data, Object value) { - if (!hasData(data)) throw new UnsupportedOperationException("No blockdata found for " + data + " at " + minecraftKey); + if (!hasData(data)) + throw new UnsupportedOperationException("No blockdata found for " + data + " at " + minecraftKey); blockData.put(data, value.toString()); return this; } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/providers/BlockConnectionProvider.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/providers/BlockConnectionProvider.java index 447926ffe..aa3d5351e 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/providers/BlockConnectionProvider.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/blockconnections/providers/BlockConnectionProvider.java @@ -1,11 +1,11 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers; import us.myles.ViaVersion.api.data.UserConnection; -import us.myles.ViaVersion.api.minecraft.Position; import us.myles.ViaVersion.api.platform.providers.Provider; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData; public class BlockConnectionProvider implements Provider { + public int getBlockData(UserConnection connection, int x, int y, int z) { int oldId = getWorldBlockData(connection, x, y, z); return MappingData.blockMappings.getNewId(oldId); diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java index 56a90b4e2..28c2d801f 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java @@ -12,13 +12,13 @@ import us.myles.ViaVersion.api.protocol.Protocol; import us.myles.ViaVersion.api.remapper.PacketHandler; import us.myles.ViaVersion.api.remapper.PacketRemapper; import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.api.type.types.Particle; import us.myles.ViaVersion.packets.State; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.Protocol1_13To1_12_2; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionData; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionHandler; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.NamedSoundRewriter; -import us.myles.ViaVersion.api.type.types.Particle; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.ParticleRewriter; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.providers.BlockEntityProvider; import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.providers.PaintingProvider; @@ -264,7 +264,7 @@ public class WorldPackets { public void handle(PacketWrapper wrapper) throws Exception { int x = wrapper.passthrough(Type.INT); int z = wrapper.passthrough(Type.INT); - ConnectionData.getProvider().unloadChunk(wrapper.user(), x, z); + ConnectionData.blockConnectionProvider.unloadChunk(wrapper.user(), x, z); } }); } @@ -355,7 +355,7 @@ public class WorldPackets { for (int x = 0; x < 16; x++) { int block = section.getFlatBlock(x, y, z); if (ConnectionData.isWelcome(block)) { - ConnectionData.getProvider().storeBlock(wrapper.user(), x + (chunk.getX() << 4), + ConnectionData.blockConnectionProvider.storeBlock(wrapper.user(), x + (chunk.getX() << 4), y + (i << 4), z + (chunk.getZ() << 4), block);