From c7f5d039b2c8f478cc8e8250b26a1e762dc53f5d Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sat, 6 May 2017 15:31:06 +0100 Subject: [PATCH] Use IBlockState instead of Block methods There was a crash in RedstoneUtil when redstone state was changing next to a full block due to the incorrect state being passed. By using IBlockState methods we ensure that this cannot happen again. The old IBlockState methods were also deprecated, so this reduces the warning count a little. I've also moved string translation into StringUtils, to reduce the number of deprecation warnings from there. --- .../proxy/ComputerCraftProxyClient.java | 1 - .../shared/computer/apis/CommandAPI.java | 2 +- .../pocket/items/ItemPocketComputer.java | 8 ++-- .../proxy/ComputerCraftProxyCommon.java | 8 +--- .../turtle/core/TurtleInspectCommand.java | 2 +- .../shared/turtle/items/ItemTurtleBase.java | 20 ++++----- .../shared/turtle/upgrades/TurtleHoe.java | 3 +- .../shared/turtle/upgrades/TurtleShovel.java | 3 +- .../shared/turtle/upgrades/TurtleSword.java | 3 +- .../shared/turtle/upgrades/TurtleTool.java | 2 +- .../shared/util/RedstoneUtil.java | 42 +++++++------------ .../computercraft/shared/util/StringUtil.java | 18 ++++++++ .../computercraft/shared/util/WorldUtil.java | 11 +---- 13 files changed, 57 insertions(+), 66 deletions(-) diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index 0897cdecd..eb3366d1e 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -412,7 +412,6 @@ private void processPacket( ComputerCraftPacket packet, EntityPlayer player ) private void registerForgeHandlers() { ForgeHandlers handlers = new ForgeHandlers(); - FMLCommonHandler.instance().bus().register( handlers ); MinecraftForge.EVENT_BUS.register( handlers ); } diff --git a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java index c98b11fca..189855231 100644 --- a/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java +++ b/src/main/java/dan200/computercraft/shared/computer/apis/CommandAPI.java @@ -119,7 +119,7 @@ private Object getBlockInfo( World world, BlockPos pos ) table.put( "metadata", metadata ); Map stateTable = new HashMap(); - for( Object o : block.getActualState( state, world, pos ).getProperties().entrySet() ) + for( Object o : state.getActualState( world, pos ).getProperties().entrySet() ) { ImmutableMap.Entry entry = (ImmutableMap.Entry)o; String propertyName = entry.getKey().getName(); diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java index 1e9371667..1044cbe37 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java @@ -18,6 +18,7 @@ import dan200.computercraft.shared.computer.items.IComputerItem; import dan200.computercraft.shared.pocket.apis.PocketAPI; import dan200.computercraft.shared.pocket.peripherals.PocketModemPeripheral; +import dan200.computercraft.shared.util.StringUtil; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -30,7 +31,6 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.SoundEvent; -import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; import java.util.List; @@ -200,14 +200,14 @@ public String getItemStackDisplayName( ItemStack stack ) boolean modem = getHasModem( stack ); if( modem ) { - return I18n.translateToLocalFormatted( + return StringUtil.translateToLocalFormatted( baseString + ".upgraded.name", - I18n.translateToLocal( "upgrade.computercraft:wireless_modem.adjective" ) + StringUtil.translateToLocal( "upgrade.computercraft:wireless_modem.adjective" ) ); } else { - return I18n.translateToLocal( baseString + ".name" ); + return StringUtil.translateToLocal( baseString + ".name" ); } } diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 242c4150c..d6037bc10 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -48,10 +48,7 @@ import dan200.computercraft.shared.pocket.recipes.PocketComputerUpgradeRecipe; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.inventory.ContainerTurtle; -import dan200.computercraft.shared.util.Colour; -import dan200.computercraft.shared.util.CreativeTabMain; -import dan200.computercraft.shared.util.ImpostorRecipe; -import dan200.computercraft.shared.util.ImpostorShapelessRecipe; +import dan200.computercraft.shared.util.*; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -68,7 +65,6 @@ import net.minecraft.util.IThreadListener; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.WorldEvent; @@ -130,7 +126,7 @@ public String getRecordInfo( ItemStack recordStack ) { ItemRecord record = (ItemRecord) item; String key = ObfuscationReflectionHelper.getPrivateValue( ItemRecord.class, record, "field_185077_c" ); - return I18n.translateToLocal( key ); + return StringUtil.translateToLocal( key ); } return null; } diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleInspectCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleInspectCommand.java index 0562f91f1..6c1abb8cb 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleInspectCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleInspectCommand.java @@ -57,7 +57,7 @@ public TurtleCommandResult execute( ITurtleAccess turtle ) table.put( "metadata", metadata ); Map stateTable = new HashMap(); - for( Object o : block.getActualState( state, world, newPosition ).getProperties().entrySet() ) + for( Object o : state.getActualState( world, newPosition ).getProperties().entrySet() ) { ImmutableMap.Entry entry = (ImmutableMap.Entry)o; String propertyName = entry.getKey().getName(); diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java index 8ce4ca1cf..af4585d90 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleBase.java @@ -14,6 +14,7 @@ import dan200.computercraft.shared.turtle.blocks.ITurtleTile; import dan200.computercraft.shared.turtle.core.TurtleBrain; import dan200.computercraft.shared.util.Colour; +import dan200.computercraft.shared.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; @@ -21,10 +22,9 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.translation.I18n; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.ArrayList; @@ -142,29 +142,29 @@ public String getItemStackDisplayName( ItemStack stack ) ITurtleUpgrade right = getUpgrade( stack, TurtleSide.Right ); if( left != null && right != null ) { - return I18n.translateToLocalFormatted( + return StringUtil.translateToLocalFormatted( baseString + ".upgraded_twice.name", - I18n.translateToLocal( right.getUnlocalisedAdjective() ), - I18n.translateToLocal( left.getUnlocalisedAdjective() ) + StringUtil.translateToLocal( right.getUnlocalisedAdjective() ), + StringUtil.translateToLocal( left.getUnlocalisedAdjective() ) ); } else if( left != null ) { - return I18n.translateToLocalFormatted( + return StringUtil.translateToLocalFormatted( baseString + ".upgraded.name", - I18n.translateToLocal( left.getUnlocalisedAdjective() ) + StringUtil.translateToLocal( left.getUnlocalisedAdjective() ) ); } else if( right != null ) { - return I18n.translateToLocalFormatted( + return StringUtil.translateToLocalFormatted( baseString + ".upgraded.name", - I18n.translateToLocal( right.getUnlocalisedAdjective() ) + StringUtil.translateToLocal( right.getUnlocalisedAdjective() ) ); } else { - return I18n.translateToLocal( baseString + ".name" ); + return StringUtil.translateToLocal( baseString + ".name" ); } } diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java index ab3b523d9..5fa690098 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleHoe.java @@ -34,8 +34,7 @@ protected boolean canBreakBlock( World world, BlockPos pos ) if( super.canBreakBlock( world, pos ) ) { IBlockState state = world.getBlockState( pos ); - Block block = state.getBlock(); - Material material = block.getMaterial( state ); + Material material = state.getMaterial( ); return material == Material.PLANTS || material == Material.CACTUS || diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleShovel.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleShovel.java index 067ae062d..9f9d65398 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleShovel.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleShovel.java @@ -26,8 +26,7 @@ protected boolean canBreakBlock( World world, BlockPos pos ) if( super.canBreakBlock( world, pos ) ) { IBlockState state = world.getBlockState( pos ); - Block block = state.getBlock(); - Material material = block.getMaterial( state ); + Material material = state.getMaterial( ); return material == Material.GROUND || material == Material.SAND || diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSword.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSword.java index ef10e099e..818766729 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSword.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSword.java @@ -26,8 +26,7 @@ protected boolean canBreakBlock( World world, BlockPos pos ) if( super.canBreakBlock( world, pos ) ) { IBlockState state = world.getBlockState( pos ); - Block block = state.getBlock(); - Material material = block.getMaterial( state ); + Material material = state.getMaterial( ); return material == Material.PLANTS || material == Material.LEAVES || diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java index 87bbefd1a..ec90134b6 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleTool.java @@ -136,7 +136,7 @@ protected boolean canBreakBlock( World world, BlockPos pos ) { IBlockState state = world.getBlockState( pos ); Block block = state.getBlock(); - if( block.isAir( state, world, pos ) || block == Blocks.BEDROCK || block.getBlockHardness( state, world, pos ) <= -1.0F ) + if( block.isAir( state, world, pos ) || block == Blocks.BEDROCK || state.getBlockHardness( world, pos ) <= -1.0F ) { return false; } diff --git a/src/main/java/dan200/computercraft/shared/util/RedstoneUtil.java b/src/main/java/dan200/computercraft/shared/util/RedstoneUtil.java index 1b09d4dd2..1a99f300d 100644 --- a/src/main/java/dan200/computercraft/shared/util/RedstoneUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/RedstoneUtil.java @@ -11,43 +11,33 @@ import net.minecraft.block.BlockRedstoneWire; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.EnumFacing; -import net.minecraft.world.IBlockAccess; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class RedstoneUtil { - private static Block getBlock( IBlockAccess world, BlockPos pos ) - { - if( pos.getY() >= 0 ) - { - return world.getBlockState( pos ).getBlock(); - } - return null; - } - public static int getRedstoneOutput( World world, BlockPos pos, EnumFacing side ) { int power = 0; - Block block = getBlock( world, pos ); - if( block != null && block != Blocks.AIR ) + IBlockState state = world.getBlockState( pos ); + Block block = state.getBlock(); + if( block != Blocks.AIR ) { - IBlockState state = world.getBlockState( pos ); if( block == Blocks.REDSTONE_WIRE ) { if( side != EnumFacing.UP ) { - power = ((Integer)state.getValue( BlockRedstoneWire.POWER )).intValue(); + power = state.getValue( BlockRedstoneWire.POWER ); } else { power = 0; } } - else if( block.canProvidePower( state ) ) + else if( state.canProvidePower( ) ) { - power = block.getWeakPower( state, world, pos, side.getOpposite() ); + power = state.getWeakPower( world, pos, side.getOpposite() ); } if( block.isNormalCube( state, world, pos ) ) { @@ -56,10 +46,10 @@ else if( block.canProvidePower( state ) ) if( testSide != side ) { BlockPos testPos = pos.offset( testSide ); - Block neighbour = getBlock( world, testPos ); - if( neighbour != null && neighbour.canProvidePower( state ) ) + IBlockState neighbour = world.getBlockState( testPos ); + if( neighbour.canProvidePower( ) ) { - power = Math.max( power, neighbour.getStrongPower( state, world, testPos, testSide.getOpposite() ) ); + power = Math.max( power, neighbour.getStrongPower( world, testPos, testSide.getOpposite() ) ); } } } @@ -81,15 +71,15 @@ public static int getBundledRedstoneOutput( World world, BlockPos pos, EnumFacin public static void propogateRedstoneOutput( World world, BlockPos pos, EnumFacing side ) { // Propogate ordinary output - Block block = getBlock( world, pos ); + IBlockState block = world.getBlockState( pos ); BlockPos neighbourPos = pos.offset( side ); - Block neighbour = getBlock( world, neighbourPos ); - if( neighbour != null && neighbour != Blocks.AIR ) + IBlockState neighbour = world.getBlockState( neighbourPos ); + if( neighbour.getBlock() != Blocks.AIR ) { - world.notifyBlockOfStateChange( neighbourPos, block ); - if( neighbour.isNormalCube( world.getBlockState( neighbourPos ), world, neighbourPos ) ) + world.notifyBlockOfStateChange( neighbourPos, block.getBlock() ); + if( neighbour.getBlock().isNormalCube( neighbour, world, neighbourPos ) ) { - world.notifyNeighborsOfStateExcept( neighbourPos, neighbour, side.getOpposite() ); + world.notifyNeighborsOfStateExcept( neighbourPos, neighbour.getBlock(), side.getOpposite() ); } } } diff --git a/src/main/java/dan200/computercraft/shared/util/StringUtil.java b/src/main/java/dan200/computercraft/shared/util/StringUtil.java index d1522c388..66e66a5c1 100644 --- a/src/main/java/dan200/computercraft/shared/util/StringUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/StringUtil.java @@ -23,4 +23,22 @@ public static String normaliseLabel( String label ) return builder.toString(); } + + /** + * Translates a Stat name + */ + @SuppressWarnings("deprecation") + public static String translateToLocal( String key ) + { + return net.minecraft.util.text.translation.I18n.translateToLocal( key ); + } + + /** + * Translates a Stat name with format args + */ + @SuppressWarnings("deprecation") + public static String translateToLocalFormatted( String key, Object... format ) + { + return net.minecraft.util.text.translation.I18n.translateToLocalFormatted( key, format ); + } } diff --git a/src/main/java/dan200/computercraft/shared/util/WorldUtil.java b/src/main/java/dan200/computercraft/shared/util/WorldUtil.java index 56df94c61..dccde1b57 100644 --- a/src/main/java/dan200/computercraft/shared/util/WorldUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/WorldUtil.java @@ -27,16 +27,7 @@ public static boolean isBlockInWorld( World world, BlockPos pos ) public static boolean isLiquidBlock( World world, BlockPos pos ) { - if( isBlockInWorld( world, pos ) ) - { - IBlockState state = world.getBlockState( pos ); - Block block = state.getBlock(); - if( block != null ) - { - return block.getMaterial( state ).isLiquid(); - } - } - return false; + return isBlockInWorld( world, pos ) && world.getBlockState( pos ).getMaterial().isLiquid(); } public static BlockPos moveCoords( BlockPos pos, EnumFacing dir )