From b73f0e87f96d29065d5937688544451e481d8c2e Mon Sep 17 00:00:00 2001 From: Colin Godsey Date: Thu, 11 Jul 2019 11:43:05 -0600 Subject: [PATCH] PE mappings --- .../LegacyBlockDataMappingsGenerator.java | 200 ++++++++++++++++-- .../version/ProtocolType.java | 2 +- .../version/ProtocolVersion.java | 12 ++ .../version/ProtocolVersionsHelper.java | 16 ++ 4 files changed, 211 insertions(+), 19 deletions(-) diff --git a/src/protocolsupportresourcesgenerator/generators/mappings/block/LegacyBlockDataMappingsGenerator.java b/src/protocolsupportresourcesgenerator/generators/mappings/block/LegacyBlockDataMappingsGenerator.java index ae3f0e5..df3ed65 100644 --- a/src/protocolsupportresourcesgenerator/generators/mappings/block/LegacyBlockDataMappingsGenerator.java +++ b/src/protocolsupportresourcesgenerator/generators/mappings/block/LegacyBlockDataMappingsGenerator.java @@ -126,6 +126,21 @@ protected Door toPre13DoorState(Door from, Door to) { return to; } + protected Switch toPre13LeverState(Switch from, Switch to) { + to.setFace(from.getFace()); + to.setFacing(from.getFacing()); + if ((from.getFace() == Face.CEILING) || (from.getFace() == Face.FLOOR)) { + // PE levers can only be oriented towards south or east (when off) + if (from.getFacing() == BlockFace.NORTH) { + to.setFacing(BlockFace.SOUTH); + } else if (from.getFacing() == BlockFace.WEST) { + to.setFacing(BlockFace.EAST); + } + } + to.setPowered(from.isPowered()); + return to; + } + protected Slab toPre13SlabState(Slab from, Slab to) { to.setWaterlogged(false); to.setType(from.getType()); @@ -192,6 +207,155 @@ protected MultipleFacing clearMutipleFacing(MultipleFacing mfacing) { public void applyDefaultRemaps() { clear(); + /* PE START */ + this.registerRemapEntryForAllStates( + Arrays.asList(Material.TNT), + o -> o.getMaterial().createBlockData(), + ProtocolVersionsHelper.ALL_PE + ); + + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.WHITE_SHULKER_BOX, Material.ORANGE_SHULKER_BOX, Material.MAGENTA_SHULKER_BOX, + Material.LIGHT_BLUE_SHULKER_BOX, Material.YELLOW_SHULKER_BOX, Material.LIME_SHULKER_BOX, + Material.PINK_SHULKER_BOX, Material.GRAY_SHULKER_BOX, Material.LIGHT_GRAY_SHULKER_BOX, + Material.CYAN_SHULKER_BOX, Material.CYAN_SHULKER_BOX, Material.PURPLE_SHULKER_BOX, + Material.BLUE_SHULKER_BOX, Material.BROWN_SHULKER_BOX, Material.GREEN_SHULKER_BOX, + Material.RED_SHULKER_BOX, Material.BLACK_SHULKER_BOX, Material.SHULKER_BOX + ), + o -> o.getMaterial().createBlockData(), + ProtocolVersionsHelper.ALL_PE + ); + this.registerRemapEntryForAllStates(Material.KELP_PLANT, Material.KELP.createBlockData((blockdata)-> { + ((Ageable) blockdata).setAge(25); //Max age. + }), ProtocolVersionsHelper.ALL_PE); + //Remap to closest match. The normal dead variants get broken instantly in PE. + this.registerRemapEntryForAllStates(Material.DEAD_TUBE_CORAL, Material.DEAD_TUBE_CORAL_FAN.createBlockData(), ProtocolVersionsHelper.ALL_PE); + this.registerRemapEntryForAllStates(Material.DEAD_BRAIN_CORAL, Material.DEAD_BRAIN_CORAL_FAN.createBlockData(), ProtocolVersionsHelper.ALL_PE); + this.registerRemapEntryForAllStates(Material.DEAD_BUBBLE_CORAL, Material.DEAD_BUBBLE_CORAL_FAN.createBlockData(), ProtocolVersionsHelper.ALL_PE); + this.registerRemapEntryForAllStates(Material.DEAD_FIRE_CORAL, Material.DEAD_FIRE_CORAL_FAN.createBlockData(), ProtocolVersionsHelper.ALL_PE); + this.registerRemapEntryForAllStates(Material.DEAD_HORN_CORAL, Material.DEAD_HORN_CORAL_FAN.createBlockData(), ProtocolVersionsHelper.ALL_PE); + this.registerRemapEntryForAllStates( + //Clear all waterlog, but not rotation of all the corals. + Arrays.asList( + Material.DEAD_TUBE_CORAL_WALL_FAN, Material.DEAD_BRAIN_CORAL_WALL_FAN, Material.DEAD_BUBBLE_CORAL_WALL_FAN, Material.DEAD_FIRE_CORAL_WALL_FAN, Material.DEAD_HORN_CORAL_WALL_FAN, + Material.TUBE_CORAL_WALL_FAN, Material.BRAIN_CORAL_WALL_FAN, Material.BUBBLE_CORAL_WALL_FAN, Material.FIRE_CORAL_WALL_FAN, Material.HORN_CORAL_WALL_FAN + ), + o -> { + return cloneDirectional((Directional) o, (Directional) o.getMaterial().createBlockData()); + }, + ProtocolVersionsHelper.ALL_PE + ); + // Remove everything except direction from piston stuff. The rest is handled in tilenbt. + this.registerRemapEntryForAllStates( + Arrays.asList(Material.PISTON, Material.STICKY_PISTON, Material.PISTON_HEAD), + o -> cloneDirectional((Directional) o, (Directional) o.getMaterial().createBlockData()), + ProtocolVersionsHelper.ALL_PE); + + this.registerRemapEntryForAllStates( + //Clear waterlog from remaining non rotatable corals. + Arrays.asList( + Material.DEAD_TUBE_CORAL_FAN, Material.DEAD_BRAIN_CORAL_FAN, Material.DEAD_BUBBLE_CORAL_FAN, Material.DEAD_FIRE_CORAL_FAN, Material.DEAD_HORN_CORAL_FAN + ), + o -> o.getMaterial().createBlockData(), + ProtocolVersionsHelper.ALL_PE + ); + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.SKELETON_SKULL, + Material.WITHER_SKELETON_SKULL, + Material.CREEPER_HEAD, + Material.DRAGON_HEAD, + Material.PLAYER_HEAD, + Material.ZOMBIE_HEAD + ), + o -> o.getMaterial().createBlockData(), + ProtocolVersionsHelper.ALL_PE + ); + + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.SKELETON_WALL_SKULL, + Material.WITHER_SKELETON_WALL_SKULL, + Material.CREEPER_WALL_HEAD, + Material.DRAGON_WALL_HEAD, + Material.PLAYER_WALL_HEAD, + Material.ZOMBIE_WALL_HEAD + ), + o -> cloneDirectional(o, (Directional) o.getMaterial().createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + this.registerRemapEntryForAllStates( + Arrays.asList(Material.LEVER), + o -> toPre13LeverState(o, (Switch) o.getMaterial().createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.PRISMARINE_BRICK_SLAB, + Material.PRISMARINE_SLAB, + Material.DARK_PRISMARINE_SLAB + ), + o -> toPre13SlabState(o, (Slab) o.getMaterial().createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.PRISMARINE_BRICK_STAIRS, + Material.PRISMARINE_STAIRS, + Material.DARK_PRISMARINE_STAIRS + ), + o -> toPre13StairsState(o, (Stairs) o.getMaterial().createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.ACACIA_TRAPDOOR, Material.DARK_OAK_TRAPDOOR, Material.BIRCH_TRAPDOOR, + Material.JUNGLE_TRAPDOOR, Material.SPRUCE_TRAPDOOR + ), + o -> toPre13TrapDoor(o, (TrapDoor) o.getMaterial().createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.BLACK_BANNER, Material.BLUE_BANNER, Material.BROWN_BANNER, Material.CYAN_BANNER, + Material.GRAY_BANNER, Material.GREEN_BANNER, Material.LIGHT_BLUE_BANNER, Material.LIGHT_GRAY_BANNER, + Material.LIME_BANNER, Material.MAGENTA_BANNER, Material.ORANGE_BANNER, Material.PINK_BANNER, + Material.PURPLE_BANNER, Material.RED_BANNER, Material.WHITE_BANNER, Material.YELLOW_BANNER + ), + o -> cloneRotatable(o, (Rotatable) Material.WHITE_BANNER.createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.BLACK_WALL_BANNER, Material.BLUE_WALL_BANNER, Material.BROWN_WALL_BANNER, Material.CYAN_WALL_BANNER, + Material.GRAY_WALL_BANNER, Material.GREEN_WALL_BANNER, Material.LIGHT_BLUE_WALL_BANNER, Material.LIGHT_GRAY_WALL_BANNER, + Material.LIME_WALL_BANNER, Material.MAGENTA_WALL_BANNER, Material.ORANGE_WALL_BANNER, Material.PINK_WALL_BANNER, + Material.PURPLE_WALL_BANNER, Material.RED_WALL_BANNER, Material.WHITE_WALL_BANNER, Material.YELLOW_WALL_BANNER + ), + o -> cloneDirectional(o, (Directional) Material.WHITE_WALL_BANNER.createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + + + this.registerRemapEntryForAllStates( + Arrays.asList(Material.CHEST, Material.TRAPPED_CHEST), + o -> cloneDirectional(o, (Directional) o.getMaterial().createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + + this.registerRemapEntryForAllStates( + Arrays.asList( + Material.IRON_TRAPDOOR, + Material.OAK_TRAPDOOR + ), + o -> toPre13TrapDoor(o, (TrapDoor) o.getMaterial().createBlockData()), + ProtocolVersionsHelper.ALL_PE + ); + /* PE END */ + this.registerRemapEntryForAllStates( Material.BARREL, o -> cloneDirectional(o, (Directional) Material.FURNACE.createBlockData()), @@ -365,7 +529,7 @@ public void applyDefaultRemaps() { Material.GRASS_BLOCK, Material.MYCELIUM, Material.PODZOL ), o -> o.getMaterial().createBlockData(), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.withIgnoringDuplicateRemaps(() -> { this.registerRemapEntryForAllStates( @@ -389,7 +553,7 @@ public void applyDefaultRemaps() { this.registerRemapEntryForAllStates( Arrays.asList(Material.COBBLESTONE_WALL, Material.MOSSY_COBBLESTONE_WALL), o -> clearMutipleFacing((MultipleFacing) o.getMaterial().createBlockData()), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Material.VINE, @@ -398,7 +562,7 @@ public void applyDefaultRemaps() { mfacing.setFace(BlockFace.UP, true); return mfacing; }, - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Arrays.asList( @@ -406,7 +570,7 @@ public void applyDefaultRemaps() { Material.JUNGLE_FENCE_GATE, Material.OAK_FENCE_GATE, Material.SPRUCE_FENCE_GATE ), o -> toPre13GateState(o, (Gate) o.getMaterial().createBlockData()), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Material.LEVER, @@ -416,7 +580,7 @@ public void applyDefaultRemaps() { this.registerRemapEntryForAllStates( Material.STONE_BUTTON, o -> toPre13ButtonState(o, (Switch) o.getMaterial().createBlockData(), false), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Arrays.asList( @@ -424,7 +588,7 @@ public void applyDefaultRemaps() { Material.JUNGLE_BUTTON, Material.OAK_BUTTON, Material.SPRUCE_BUTTON ), o -> toPre13ButtonState(o, (Switch) Material.OAK_BUTTON.createBlockData(), false), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Arrays.asList( @@ -433,7 +597,7 @@ public void applyDefaultRemaps() { Material.IRON_DOOR ), o -> toPre13DoorState(o, (Door) o.getMaterial().createBlockData()), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Arrays.asList( @@ -445,7 +609,7 @@ public void applyDefaultRemaps() { Material.PETRIFIED_OAK_SLAB ), o -> toPre13SlabState(o, (Slab) o.getMaterial().createBlockData()), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Arrays.asList(Material.PRISMARINE_BRICK_SLAB, Material.PRISMARINE_SLAB, Material.DARK_PRISMARINE_SLAB), @@ -470,7 +634,7 @@ public void applyDefaultRemaps() { Material.BRICK_STAIRS ), o -> toPre13StairsState(o, (Stairs) o.getMaterial().createBlockData()), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Arrays.asList( @@ -505,12 +669,12 @@ public void applyDefaultRemaps() { bed.setPart(o.getPart()); return bed; }, - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Arrays.asList(Material.LADDER, Material.ENDER_CHEST, Material.OAK_WALL_SIGN), o -> cloneDirectional(o, (Directional) o.getMaterial().createBlockData()), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Material.OAK_SIGN, @@ -535,12 +699,12 @@ public void applyDefaultRemaps() { pistonHead.setType(o.getType()); return pistonHead; }, - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Material.FIRE, o -> cloneAgeable(o, (Fire) o.getMaterial().createBlockData()), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Material.TRIPWIRE, @@ -551,7 +715,7 @@ public void applyDefaultRemaps() { tripwire.setDisarmed(o.isDisarmed()); return tripwire; }, - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Material.REDSTONE_WIRE, @@ -560,7 +724,7 @@ public void applyDefaultRemaps() { wire.setPower(o.getPower()); return wire; }, - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Material.REPEATER, @@ -571,12 +735,12 @@ public void applyDefaultRemaps() { repeater.setFacing(o.getFacing()); return repeater; }, - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates( Arrays.asList(Material.CAVE_AIR, Material.VOID_AIR), Material.AIR.createBlockData(), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates(Material.ATTACHED_MELON_STEM, o -> { return Material.MELON_STEM.createBlockData(data -> { @@ -704,7 +868,7 @@ public void applyDefaultRemaps() { Material.POTTED_WHITE_TULIP ), Material.FLOWER_POT.createBlockData(), - ProtocolVersionsHelper.BEFORE_1_13 + ProtocolVersionsHelper.BEFORE_1_13_AND_PE ); this.registerRemapEntryForAllStates(Material.SMOOTH_RED_SANDSTONE, Material.CUT_RED_SANDSTONE.createBlockData(), ProtocolVersionsHelper.BEFORE_1_13); this.registerRemapEntryForAllStates(Material.SMOOTH_SANDSTONE, Material.CUT_SANDSTONE.createBlockData(), ProtocolVersionsHelper.BEFORE_1_13); diff --git a/src/protocolsupportresourcesgenerator/version/ProtocolType.java b/src/protocolsupportresourcesgenerator/version/ProtocolType.java index faf2824..10f22fb 100644 --- a/src/protocolsupportresourcesgenerator/version/ProtocolType.java +++ b/src/protocolsupportresourcesgenerator/version/ProtocolType.java @@ -1,5 +1,5 @@ package protocolsupportresourcesgenerator.version; public enum ProtocolType { - PC, UNKNOWN; + PC, PE, UNKNOWN; } diff --git a/src/protocolsupportresourcesgenerator/version/ProtocolVersion.java b/src/protocolsupportresourcesgenerator/version/ProtocolVersion.java index 9c70c1e..4b630ca 100644 --- a/src/protocolsupportresourcesgenerator/version/ProtocolVersion.java +++ b/src/protocolsupportresourcesgenerator/version/ProtocolVersion.java @@ -36,6 +36,12 @@ public enum ProtocolVersion { MINECRAFT_1_5_1(60, new OrderId(ProtocolType.PC, 2), "1.5.1"), MINECRAFT_1_4_7(51, new OrderId(ProtocolType.PC, 1), "1.4.7"), MINECRAFT_LEGACY(-1, new OrderId(ProtocolType.PC, 0)), + MINECRAFT_PE_FUTURE(-1, new OrderId(ProtocolType.PE, 5)), + MINECRAFT_PE_1_11(354, new OrderId(ProtocolType.PE, 4), "PE-1.11.0"), + MINECRAFT_PE_1_10(340, new OrderId(ProtocolType.PE, 3), "PE-1.10.0"), + MINECRAFT_PE_1_9(332, new OrderId(ProtocolType.PE, 2), "PE-1.9.0"), + MINECRAFT_PE_1_8(313, new OrderId(ProtocolType.PE, 1), "PE-1.8.0"), + MINECRAFT_PE_LEGACY(-1, new OrderId(ProtocolType.PE, 0)), UNKNOWN(-1, new OrderId(ProtocolType.UNKNOWN, 0)); private final int id; @@ -260,6 +266,9 @@ public static ProtocolVersion getLatest(ProtocolType type) { case PC: { return MINECRAFT_1_14; } + case PE: { + return MINECRAFT_PE_1_11; + } default: { throw new IllegalArgumentException(MessageFormat.format("No supported versions for protocol type {0}", type)); } @@ -277,6 +286,9 @@ public static ProtocolVersion getOldest(ProtocolType type) { case PC: { return MINECRAFT_1_4_7; } + case PE: { + return MINECRAFT_PE_1_8; + } default: { throw new IllegalArgumentException(MessageFormat.format("No supported versions for protocol type {0}", type)); } diff --git a/src/protocolsupportresourcesgenerator/version/ProtocolVersionsHelper.java b/src/protocolsupportresourcesgenerator/version/ProtocolVersionsHelper.java index 6405614..07399fe 100644 --- a/src/protocolsupportresourcesgenerator/version/ProtocolVersionsHelper.java +++ b/src/protocolsupportresourcesgenerator/version/ProtocolVersionsHelper.java @@ -1,9 +1,14 @@ package protocolsupportresourcesgenerator.version; +import java.util.ArrayList; +import java.util.Arrays; + public class ProtocolVersionsHelper { public static final ProtocolVersion LATEST_PC = ProtocolVersion.getLatest(ProtocolType.PC); + public static final ProtocolVersion LATEST_PE = ProtocolVersion.getLatest(ProtocolType.PE); + public static final ProtocolVersion[] UP_1_6 = ProtocolVersion.getAllAfterI(ProtocolVersion.MINECRAFT_1_6_1); public static final ProtocolVersion[] UP_1_8 = ProtocolVersion.getAllAfterI(ProtocolVersion.MINECRAFT_1_8); @@ -46,4 +51,15 @@ public class ProtocolVersionsHelper { public static final ProtocolVersion[] ALL_PC = ProtocolVersion.getAllBetween(ProtocolVersion.getOldest(ProtocolType.PC), LATEST_PC); + public static final ProtocolVersion[] ALL_PE = ProtocolVersion.getAllBetween(ProtocolVersion.getOldest(ProtocolType.PE), LATEST_PE); + + public static final ProtocolVersion[] BEFORE_1_13_AND_PE = concat(BEFORE_1_13, ALL_PE); + + public static final ProtocolVersion[] concat(ProtocolVersion[] versions, ProtocolVersion... moreVersions) { + ArrayList all = new ArrayList<>(); + all.addAll(Arrays.asList(versions)); + all.addAll(Arrays.asList(moreVersions)); + return all.toArray(new ProtocolVersion[all.size()]); + } + }