From 309bd8824b9f327aab4b3405d5f08abdc92b12fd Mon Sep 17 00:00:00 2001 From: Spencer Alves Date: Fri, 9 Jan 2015 23:43:21 -0500 Subject: [PATCH] Fixed dedicated server crashes and ground anchor matching --- .../net/boatcake/MyWorldGen/CommonProxy.java | 4 ++ .../net/boatcake/MyWorldGen/MyWorldGen.java | 31 +++--------- .../net/boatcake/MyWorldGen/Schematic.java | 3 +- .../net/boatcake/MyWorldGen/ServerProxy.java | 5 ++ .../blocks/BlockAnchorMaterialLogic.java | 2 +- .../MyWorldGen/client/ClientProxy.java | 17 +++++++ .../MyWorldGen/utils/DirectionUtils.java | 49 +++++++++++++++++++ 7 files changed, 84 insertions(+), 27 deletions(-) diff --git a/src/main/java/net/boatcake/MyWorldGen/CommonProxy.java b/src/main/java/net/boatcake/MyWorldGen/CommonProxy.java index d3bdcaf..54fb8a9 100644 --- a/src/main/java/net/boatcake/MyWorldGen/CommonProxy.java +++ b/src/main/java/net/boatcake/MyWorldGen/CommonProxy.java @@ -3,6 +3,7 @@ import java.io.File; import net.minecraft.block.Block; +import net.minecraft.block.properties.PropertyEnum; import net.minecraft.item.Item; public abstract class CommonProxy { @@ -14,4 +15,7 @@ public abstract class CommonProxy { public abstract void registerBlock(Block block, int metadata, String blockName); + + public abstract void registerVariants(Block block, PropertyEnum prop, + String postfix); } diff --git a/src/main/java/net/boatcake/MyWorldGen/MyWorldGen.java b/src/main/java/net/boatcake/MyWorldGen/MyWorldGen.java index 86b008c..da806ac 100644 --- a/src/main/java/net/boatcake/MyWorldGen/MyWorldGen.java +++ b/src/main/java/net/boatcake/MyWorldGen/MyWorldGen.java @@ -10,7 +10,6 @@ import net.boatcake.MyWorldGen.blocks.BlockIgnore; import net.boatcake.MyWorldGen.blocks.BlockPlacementIgnore; import net.boatcake.MyWorldGen.blocks.TileEntityAnchorInventory; -import net.boatcake.MyWorldGen.client.NamespacedStateMap; import net.boatcake.MyWorldGen.items.BlockAnchorItem; import net.boatcake.MyWorldGen.items.ItemWandLoad; import net.boatcake.MyWorldGen.items.ItemWandSave; @@ -18,8 +17,6 @@ import net.boatcake.MyWorldGen.utils.NetUtils; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; @@ -150,33 +147,16 @@ public Item getTabIconItem() { BlockAnchorMaterialLogic.class); if (materialAnchorBlock != null) { - String[] names = new String[BlockAnchorMaterial.AnchorType - .values().length]; - for (int i = 0; i < names.length; i++) { - names[i] = MODID + ":" - + BlockAnchorMaterial.AnchorType.get(i).name - + "_anchor"; - } - ModelBakery.addVariantName( - Item.getItemFromBlock(materialAnchorBlock), names); - Minecraft - .getMinecraft() - .getRenderItem() - .getItemModelMesher() - .getModelManager() - .getBlockModelShapes() - .func_178121_a( - materialAnchorBlock, - new NamespacedStateMap( - BlockAnchorMaterial.TYPE_PROP, - "_anchor")); + sidedProxy.registerVariants(materialAnchorBlock, + BlockAnchorMaterial.TYPE_PROP, "_anchor"); } int defaultId; if (materialAnchorBlock == null) { defaultId = 1575; } else { - defaultId = GameData.getBlockRegistry().getId(materialAnchorBlock); + defaultId = GameData.getBlockRegistry().getId( + materialAnchorBlock); } prop = cfg .get("blocks", "materialAnchorBlock", defaultId, @@ -200,7 +180,8 @@ public Item getTabIconItem() { if (inventoryAnchorBlock == null) { defaultId = 1577; } else { - defaultId = GameData.getBlockRegistry().getId(inventoryAnchorBlock); + defaultId = GameData.getBlockRegistry().getId( + inventoryAnchorBlock); } prop = cfg .get("blocks", "inventoryAnchorBlock", defaultId, diff --git a/src/main/java/net/boatcake/MyWorldGen/Schematic.java b/src/main/java/net/boatcake/MyWorldGen/Schematic.java index b32445d..9777671 100644 --- a/src/main/java/net/boatcake/MyWorldGen/Schematic.java +++ b/src/main/java/net/boatcake/MyWorldGen/Schematic.java @@ -503,7 +503,8 @@ public void placeInWorld(World world, BlockPos at, EnumFacing facing = (EnumFacing) state .getValue(prop); for (int i = 0; i < rotationCount; i++) { - facing = facing.rotateAround(rotationAxis); + facing = DirectionUtils.rotateAround(facing, + rotationAxis); } IBlockState rotatedState = state.withProperty(prop, facing); diff --git a/src/main/java/net/boatcake/MyWorldGen/ServerProxy.java b/src/main/java/net/boatcake/MyWorldGen/ServerProxy.java index 14bf256..7431bec 100644 --- a/src/main/java/net/boatcake/MyWorldGen/ServerProxy.java +++ b/src/main/java/net/boatcake/MyWorldGen/ServerProxy.java @@ -3,6 +3,7 @@ import java.io.File; import net.minecraft.block.Block; +import net.minecraft.block.properties.PropertyEnum; import net.minecraft.item.Item; import net.minecraft.server.MinecraftServer; import net.minecraftforge.fml.relauncher.Side; @@ -26,4 +27,8 @@ public void registerItem(Item item, int metadata, String itemName) { @Override public void registerBlock(Block block, int metadata, String blockName) { } + + @Override + public void registerVariants(Block block, PropertyEnum prop, String postfix) { + } } diff --git a/src/main/java/net/boatcake/MyWorldGen/blocks/BlockAnchorMaterialLogic.java b/src/main/java/net/boatcake/MyWorldGen/blocks/BlockAnchorMaterialLogic.java index e976600..2ffb519 100644 --- a/src/main/java/net/boatcake/MyWorldGen/blocks/BlockAnchorMaterialLogic.java +++ b/src/main/java/net/boatcake/MyWorldGen/blocks/BlockAnchorMaterialLogic.java @@ -14,7 +14,7 @@ public static boolean matchesStatic(AnchorType myType, IBlockState otherState, BiomeGenBase currentBiome) { switch (myType) { case GROUND: - return otherState.getBlock() == currentBiome.topBlock; + return otherState.equals(currentBiome.topBlock); case AIR: return otherState.getBlock() instanceof BlockAir || (otherState.getBlock().getMaterial().isReplaceable() && !otherState diff --git a/src/main/java/net/boatcake/MyWorldGen/client/ClientProxy.java b/src/main/java/net/boatcake/MyWorldGen/client/ClientProxy.java index 4f8a01e..023c38c 100644 --- a/src/main/java/net/boatcake/MyWorldGen/client/ClientProxy.java +++ b/src/main/java/net/boatcake/MyWorldGen/client/ClientProxy.java @@ -3,9 +3,13 @@ import java.io.File; import net.boatcake.MyWorldGen.CommonProxy; +import net.boatcake.MyWorldGen.MyWorldGen; import net.boatcake.MyWorldGen.WorldGenerator; +import net.boatcake.MyWorldGen.blocks.BlockAnchorMaterial; import net.minecraft.block.Block; +import net.minecraft.block.properties.PropertyEnum; import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraftforge.fml.relauncher.Side; @@ -37,4 +41,17 @@ public void registerItem(Item item, int metadata, String itemName) { public void registerBlock(Block block, int metadata, String blockName) { registerItem(Item.getItemFromBlock(block), metadata, blockName); } + + @Override + public void registerVariants(Block block, PropertyEnum prop, String postfix) { + String[] names = new String[BlockAnchorMaterial.AnchorType.values().length]; + for (int i = 0; i < names.length; i++) { + names[i] = MyWorldGen.MODID + ":" + + BlockAnchorMaterial.AnchorType.get(i).name + postfix; + } + ModelBakery.addVariantName(Item.getItemFromBlock(block), names); + Minecraft.getMinecraft().getRenderItem().getItemModelMesher() + .getModelManager().getBlockModelShapes() + .func_178121_a(block, new NamespacedStateMap(prop, postfix)); + } } diff --git a/src/main/java/net/boatcake/MyWorldGen/utils/DirectionUtils.java b/src/main/java/net/boatcake/MyWorldGen/utils/DirectionUtils.java index ca27bb8..474a0b0 100644 --- a/src/main/java/net/boatcake/MyWorldGen/utils/DirectionUtils.java +++ b/src/main/java/net/boatcake/MyWorldGen/utils/DirectionUtils.java @@ -143,4 +143,53 @@ public static EnumFacing getDirectionFromYaw(float yaw) { return cardinalDirections[MathHelper .floor_double(yaw * 4.0F / 360.0F + 0.5D) & 0x3]; } + + // This method already exists in EnumFacing, but it's SideOnly(CLIENT) for + // some reason >:( + public static EnumFacing rotateAround(EnumFacing facing, + EnumFacing.Axis axis) { + switch (axis) { + case X: + switch (facing) { + case NORTH: + return EnumFacing.DOWN; + case EAST: + case WEST: + default: + return facing; + case SOUTH: + return EnumFacing.UP; + case UP: + return EnumFacing.NORTH; + case DOWN: + return EnumFacing.SOUTH; + } + + case Y: + if (facing != EnumFacing.UP && facing != EnumFacing.DOWN) { + return facing.rotateY(); + } + return facing; + + case Z: + switch (facing) { + case EAST: + return EnumFacing.DOWN; + case NORTH: + case SOUTH: + default: + return facing; + case WEST: + return EnumFacing.UP; + case UP: + return EnumFacing.EAST; + case DOWN: + return EnumFacing.WEST; + } + + default: + throw new IllegalStateException("Unable to get CW facing for axis " + + axis); + } + } }