diff --git a/src/main/java/mod/chiselsandbits/api/IBitAccess.java b/src/main/java/mod/chiselsandbits/api/IBitAccess.java index 4b5fb3b5..6f3684d5 100644 --- a/src/main/java/mod/chiselsandbits/api/IBitAccess.java +++ b/src/main/java/mod/chiselsandbits/api/IBitAccess.java @@ -1,5 +1,7 @@ package mod.chiselsandbits.api; +import javax.annotation.Nullable; + import mod.chiselsandbits.api.APIExceptions.SpaceOccupied; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; @@ -74,16 +76,6 @@ void setBitAt( void commitChanges( boolean triggerUpdates ); - /** - * Any time you modify a block you must commit your changes for them to take - * affect, please move to above method and specify true to prepare for - * future removal. - * - * If the {@link IBitAccess} is not in the world this method does nothing. - */ - @Deprecated - void commitChanges(); - /** * Returns an ItemStack for the {@link IBitAccess} * @@ -94,33 +86,15 @@ void commitChanges( * @param type * what type of item to give. * @param crossWorld - * determines if the NBT for the ItemStack is specific to this world - * or if it is portable, cross world NBT is larger and slower, - * you should only request cross world NBT if you specifically - * need it. + * determines if the NBT for the ItemStack is specific to this + * world or if it is portable, cross world NBT is larger and + * slower, you should only request cross world NBT if you + * specifically need it. * @return an ItemStack for bits, which is empty if there are no bits. */ ItemStack getBitsAsItem( - EnumFacing side, + @Nullable EnumFacing side, ItemType type, boolean crossWorld ); - /** - * Returns an ItemStack for the {@link IBitAccess}, this method all ways returns - * non-cross world NBT, please move to the above method and specify false to - * prepare for future removal. - * - * Usable for any {@link IBitAccess} - * - * @param side - * angle the player is looking at, can be null. - * @param type - * what type of item to give. - * @return an ItemStack for bits, which is empty if there are no bits. - */ - @Deprecated - ItemStack getBitsAsItem( - EnumFacing side, - ItemType type ); - } diff --git a/src/main/java/mod/chiselsandbits/api/IChiselAndBitsAPI.java b/src/main/java/mod/chiselsandbits/api/IChiselAndBitsAPI.java index ef1427dd..f4c1586a 100644 --- a/src/main/java/mod/chiselsandbits/api/IChiselAndBitsAPI.java +++ b/src/main/java/mod/chiselsandbits/api/IChiselAndBitsAPI.java @@ -1,5 +1,7 @@ package mod.chiselsandbits.api; +import javax.annotation.Nullable; + import mod.chiselsandbits.api.APIExceptions.CannotBeChiseled; import mod.chiselsandbits.api.APIExceptions.InvalidBitItem; import net.minecraft.block.material.Material; @@ -24,6 +26,7 @@ public interface IChiselAndBitsAPI * @param stack * @return ItemType of the item, or null if it is not any of them. */ + @Nullable ItemType getItemType( ItemStack stack ); @@ -65,11 +68,12 @@ IBitAccess getBitAccess( BlockPos pos ) throws CannotBeChiseled; /** - * Create a bit access from an ItemStack, passing an empty ItemStack creates an empty bit access, - * passing an invalid item returns null. + * Create a bit access from an ItemStack, passing an empty ItemStack creates + * an empty bit access, passing an invalid item returns null. * * @return a {@link IBitAccess} for an ItemStack. */ + @Nullable IBitAccess createBitItem( ItemStack stack ); @@ -77,8 +81,8 @@ IBitAccess createBitItem( * Create a brush from an ItemStack, once created you can use it many times. * * @param bitItem - * @return A brush for the specified ItemStack, if passed an empty ItemStack an - * air brush is created. + * @return A brush for the specified ItemStack, if passed an empty ItemStack + * an air brush is created. * @throws InvalidBitItem */ IBitBrush createBrush( @@ -93,7 +97,7 @@ IBitBrush createBrush( * @throws InvalidBitItem */ IBitBrush createBrushFromState( - IBlockState state ) throws InvalidBitItem; + @Nullable IBlockState state ) throws InvalidBitItem; /** * Convert ray trace information into bit location information, note that @@ -105,8 +109,7 @@ IBitBrush createBrushFromState( * @param side * @param pos * @param placement - * @return details about the target bit, if any parameters are missing will - * return null. + * @return details about the target bit, no arguments should be null. */ IBitLocation getBitPos( float hitX, @@ -120,8 +123,7 @@ IBitLocation getBitPos( * Get an ItemStack for the bit type of the state... * * VERY IMPORTANT: C&B lets you disable bits, if this happens the Item in - * this ItemStack WILL BE NULL, if you put this item in an inventory, drop - * it on the ground, or anything else.. CHECK THIS!!!!! + * this ItemStack WILL BE empty. * * @param defaultState * @return the bit. @@ -157,6 +159,7 @@ void giveBitToPlayer( * * @return internal object to manipulate bag. */ + @Nullable IBitBag getBitbag( ItemStack stack ); @@ -166,17 +169,10 @@ IBitBag getBitbag( * * @formatter:off * - * Example: + * Example: * - * try - * { - * api.beginUndoGroup(); - * this.manipulateAllTheBlocks(); - * } - * finally - * { - * api.endUndoGroup(); - * } + * try { api.beginUndoGroup(); this.manipulateAllTheBlocks(); + * } finally { api.endUndoGroup(); } * */ void beginUndoGroup( @@ -193,11 +189,14 @@ void endUndoGroup( /** * Register a custom material as equivalent to another material. * - * @param newMaterial your custom material - * @param target default MC Material C&B knows about. + * @param newMaterial + * your custom material + * @param target + * default MC Material C&B knows about. */ void addEquivilantMaterial( Material newMaterial, - Material target ); // this should be a material C&B understands, other wise you'll get stone anyway. + Material target ); // this should be a material C&B understands, + // other wise you'll get stone anyway. } diff --git a/src/main/java/mod/chiselsandbits/api/package-info.java b/src/main/java/mod/chiselsandbits/api/package-info.java index 4a2ab979..11665bac 100644 --- a/src/main/java/mod/chiselsandbits/api/package-info.java +++ b/src/main/java/mod/chiselsandbits/api/package-info.java @@ -1,2 +1,8 @@ -@net.minecraftforge.fml.common.API( apiVersion = "12.5.0", owner = "chiselsandbits", provides = "ChiselsAndBitsAPI" ) -package mod.chiselsandbits.api; \ No newline at end of file +@net.minecraftforge.fml.common.API( apiVersion = "13.6.0", owner = "chiselsandbits", provides = "ChiselsAndBitsAPI" ) +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package mod.chiselsandbits.api; + +import javax.annotation.ParametersAreNonnullByDefault; + +import mcp.MethodsReturnNonnullByDefault; diff --git a/src/main/java/mod/chiselsandbits/bitbag/BagGui.java b/src/main/java/mod/chiselsandbits/bitbag/BagGui.java index 225c561f..12f99cef 100644 --- a/src/main/java/mod/chiselsandbits/bitbag/BagGui.java +++ b/src/main/java/mod/chiselsandbits/bitbag/BagGui.java @@ -65,7 +65,12 @@ protected boolean checkHotbarKeys( { if ( theSlot instanceof SlotBit ) { - theSlot = null; + final Slot s = inventorySlots.getSlotFromInventory( getBagContainer().thePlayer.inventory, 0 ); + + if ( s != null ) + { + theSlot = s; + } } return super.checkHotbarKeys( keyCode ); @@ -135,7 +140,7 @@ protected void drawGuiContainerForegroundLayer( final int mouseX, final int mouseY ) { - fontRendererObj.drawString( ChiselsAndBits.getItems().itemBitBag.getItemStackDisplayName( null ), 8, 6, 0x404040 ); + fontRendererObj.drawString( ChiselsAndBits.getItems().itemBitBag.getItemStackDisplayName( ModUtil.getEmptyStack() ), 8, 6, 0x404040 ); fontRendererObj.drawString( I18n.format( "container.inventory", new Object[0] ), 8, ySize - 93, 0x404040 ); RenderHelper.enableGUIStandardItemLighting(); diff --git a/src/main/java/mod/chiselsandbits/bitbag/BagInventory.java b/src/main/java/mod/chiselsandbits/bitbag/BagInventory.java index 6d0c36ae..04f6c19c 100644 --- a/src/main/java/mod/chiselsandbits/bitbag/BagInventory.java +++ b/src/main/java/mod/chiselsandbits/bitbag/BagInventory.java @@ -20,6 +20,8 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.CapabilityItemHandler; @@ -61,7 +63,7 @@ public ItemStack getItemStack() @Override public String getName() { - return null; + return "container.inventory"; } @Override @@ -73,7 +75,7 @@ public boolean hasCustomName() @Override public ITextComponent getDisplayName() { - return null; + return hasCustomName() ? new TextComponentString( getName() ) : new TextComponentTranslation( getName(), new Object[0] ); } @Override diff --git a/src/main/java/mod/chiselsandbits/bittank/TileEntityBitTank.java b/src/main/java/mod/chiselsandbits/bittank/TileEntityBitTank.java index dc67d905..66e6e207 100644 --- a/src/main/java/mod/chiselsandbits/bittank/TileEntityBitTank.java +++ b/src/main/java/mod/chiselsandbits/bittank/TileEntityBitTank.java @@ -382,6 +382,12 @@ boolean addAllPossibleBits( if ( ChiselsAndBits.getApi().getItemType( stackInSlot ) == ItemType.BIT_BAG ) { final IBitBag bag = ChiselsAndBits.getApi().getBitbag( stackInSlot ); + + if ( bag == null ) + { + continue; + } + for ( int y = 0; y < bag.getSlots(); ++y ) { bag.insertItem( y, insertItem( 0, bag.extractItem( y, bag.getSlotLimit( y ), false ), false ), false ); diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/BlockBitInfo.java b/src/main/java/mod/chiselsandbits/chiseledblock/BlockBitInfo.java index 9db0f739..c276b249 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/BlockBitInfo.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/BlockBitInfo.java @@ -333,8 +333,8 @@ public static BlockBitInfo createFromState( // is it perfect? if ( test_a && test_b && test_c && test_d && !isFluid ) { - final float blockHardness = blk.getBlockHardness( null, null, null ); - final float resistance = blk.getExplosionResistance( null ); + final float blockHardness = blk.blockHardness; + final float resistance = blk.blockResistance; return new BlockBitInfo( true, blockHardness, resistance ); } @@ -344,7 +344,7 @@ public static BlockBitInfo createFromState( // hardness... say like stone? final Block stone = Blocks.STONE; - return new BlockBitInfo( ChiselsAndBits.getConfig().compatabilityMode, stone.getBlockHardness( null, null, null ), stone.getExplosionResistance( null ) ); + return new BlockBitInfo( ChiselsAndBits.getConfig().compatabilityMode, blk.blockHardness, blk.blockResistance ); } } catch ( final Exception err ) diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java b/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java index 70de16eb..36ddeba5 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/BlockChiseled.java @@ -1224,6 +1224,7 @@ public IBlockState getPrimaryState( } catch ( final ExceptionNoTileEntity e ) { + Log.noTileError( e ); return Blocks.STONE.getDefaultState(); } } diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/ReflectionHelperBlock.java b/src/main/java/mod/chiselsandbits/chiseledblock/ReflectionHelperBlock.java index 4d8a1740..504337d0 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/ReflectionHelperBlock.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/ReflectionHelperBlock.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.Random; +import javax.annotation.Nullable; + import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -29,9 +31,9 @@ protected ReflectionHelperBlock() @Override public float getBlockHardness( - final IBlockState state, - final World world, - final BlockPos pos ) + final @Nullable IBlockState state, + final @Nullable World world, + final @Nullable BlockPos pos ) { markMethod(); return 0; @@ -39,22 +41,22 @@ public float getBlockHardness( @Override public void addCollisionBoxToList( - final IBlockState state, - final World worldIn, - final BlockPos pos, - final AxisAlignedBB p_185477_4_, - final List p_185477_5_, - final Entity p_185477_6_ ) + final @Nullable IBlockState state, + final @Nullable World worldIn, + final @Nullable BlockPos pos, + final @Nullable AxisAlignedBB p_185477_4_, + final @Nullable List p_185477_5_, + final @Nullable Entity p_185477_6_ ) { markMethod(); } @Override public float getPlayerRelativeBlockHardness( - final IBlockState state, - final EntityPlayer player, - final World world, - final BlockPos pos ) + final @Nullable IBlockState state, + final @Nullable EntityPlayer player, + final @Nullable World world, + final @Nullable BlockPos pos ) { markMethod(); return 0; @@ -62,7 +64,7 @@ public float getPlayerRelativeBlockHardness( @Override public float getExplosionResistance( - final Entity exploder ) + final @Nullable Entity exploder ) { markMethod(); return 0; @@ -70,10 +72,10 @@ public float getExplosionResistance( @Override public float getExplosionResistance( - final World world, - final BlockPos pos, - final Entity exploder, - final Explosion explosion ) + final @Nullable World world, + final @Nullable BlockPos pos, + final @Nullable Entity exploder, + final @Nullable Explosion explosion ) { markMethod(); return 0; @@ -81,9 +83,9 @@ public float getExplosionResistance( @Override public int quantityDropped( - final IBlockState state, + final @Nullable IBlockState state, final int fortune, - final Random random ) + final @Nullable Random random ) { markMethod(); @@ -92,7 +94,7 @@ public int quantityDropped( @Override public int quantityDropped( - final Random random ) + final @Nullable Random random ) { markMethod(); return 0; @@ -101,7 +103,7 @@ public int quantityDropped( @Override public int quantityDroppedWithBonus( final int fortune, - final Random random ) + final @Nullable Random random ) { markMethod(); return 0; @@ -109,10 +111,10 @@ public int quantityDroppedWithBonus( @Override public void onEntityCollidedWithBlock( - final World worldIn, - final BlockPos pos, - final IBlockState state, - final Entity entityIn ) + final @Nullable World worldIn, + final @Nullable BlockPos pos, + final @Nullable IBlockState state, + final @Nullable Entity entityIn ) { markMethod(); } diff --git a/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java b/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java index d1dfddba..4f8186ca 100644 --- a/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java +++ b/src/main/java/mod/chiselsandbits/chiseledblock/TileEntityBlockChiseled.java @@ -3,6 +3,8 @@ import java.util.Collection; import java.util.Collections; +import javax.annotation.Nonnull; + import mod.chiselsandbits.api.EventBlockBitPostModification; import mod.chiselsandbits.api.EventFullBlockRestoration; import mod.chiselsandbits.api.ItemType; @@ -113,6 +115,7 @@ public IExtendedBlockState getRenderState( return getState( true, 1, access ); } + @Nonnull protected IExtendedBlockState getState( final boolean updateNeightbors, final int updateCost, @@ -601,7 +604,7 @@ public void setBlob( // are most of the bits in the center solid? final int sideFlags = vb.getSideFlags( 5, 11, 4 * 4 ); - if ( worldObj == null ) + if ( !hasWorldObj() ) { if ( common.mostCommonState == 0 ) { diff --git a/src/main/java/mod/chiselsandbits/client/ClipboardStorage.java b/src/main/java/mod/chiselsandbits/client/ClipboardStorage.java index fcddef53..be0e3c64 100644 --- a/src/main/java/mod/chiselsandbits/client/ClipboardStorage.java +++ b/src/main/java/mod/chiselsandbits/client/ClipboardStorage.java @@ -94,10 +94,14 @@ public List read() final String item = b.readStringFromBuffer( 127 ); final NBTTagCompound c = b.readNBTTagCompoundFromBuffer(); - final ItemStack stack = new ItemStack( Item.getByNameOrId( item ) ); - stack.setTagCompound( c ); + final Item it = Item.getByNameOrId( item ); + if ( it != null ) + { + final ItemStack stack = new ItemStack( it ); + stack.setTagCompound( c ); - myItems.add( stack ); + myItems.add( stack ); + } } catch ( final IOException e ) { diff --git a/src/main/java/mod/chiselsandbits/core/Log.java b/src/main/java/mod/chiselsandbits/core/Log.java index 2bb89a92..ced15efe 100644 --- a/src/main/java/mod/chiselsandbits/core/Log.java +++ b/src/main/java/mod/chiselsandbits/core/Log.java @@ -36,7 +36,7 @@ public static void noTileError( { if ( ChiselsAndBits.getConfig().logTileErrors ) { - getLogger().error( "Unable to find TileEntity while interacting with block.", e ); + getLogger().error( "Unable to find TileEntity while interacting with block.", new Exception() ); } } diff --git a/src/main/java/mod/chiselsandbits/core/api/BitAccess.java b/src/main/java/mod/chiselsandbits/core/api/BitAccess.java index e59272ad..0d44ab8c 100644 --- a/src/main/java/mod/chiselsandbits/core/api/BitAccess.java +++ b/src/main/java/mod/chiselsandbits/core/api/BitAccess.java @@ -3,6 +3,8 @@ import java.util.HashMap; import java.util.Map; +import javax.annotation.Nullable; + import mod.chiselsandbits.api.APIExceptions.SpaceOccupied; import mod.chiselsandbits.api.BitQueryResults; import mod.chiselsandbits.api.IBitAccess; @@ -126,16 +128,10 @@ public void commitChanges( } } - @Override - public void commitChanges() - { - commitChanges( true ); - } - @Override public ItemStack getBitsAsItem( - final EnumFacing side, - final ItemType type, + final @Nullable EnumFacing side, + final @Nullable ItemType type, final boolean crossWorld ) { if ( type == null ) @@ -198,14 +194,6 @@ public ItemStack getBitsAsItem( return stack; } - @Override - public ItemStack getBitsAsItem( - final EnumFacing side, - final ItemType type ) - { - return getBitsAsItem( side, type, false ); - } - @Override public void visitBits( final IBitVisitor visitor ) diff --git a/src/main/java/mod/chiselsandbits/core/api/ChiselAndBitsAPI.java b/src/main/java/mod/chiselsandbits/core/api/ChiselAndBitsAPI.java index 35a54c70..49cb3a70 100644 --- a/src/main/java/mod/chiselsandbits/core/api/ChiselAndBitsAPI.java +++ b/src/main/java/mod/chiselsandbits/core/api/ChiselAndBitsAPI.java @@ -118,12 +118,12 @@ public IBitAccess getBitAccess( public IBitBrush createBrush( final ItemStack stack ) throws InvalidBitItem { - if ( ModUtil.isEmpty(stack) ) + if ( ModUtil.isEmpty( stack ) ) { return new BitBrush( 0 ); } - if ( stack.getItem() == null || getItemType( stack ) == ItemType.CHISLED_BIT ) + if ( getItemType( stack ) == ItemType.CHISLED_BIT ) { final int stateID = ItemChiseledBit.getStackState( stack ); final IBlockState state = ModUtil.getStateById( stateID ); @@ -146,11 +146,6 @@ public IBitLocation getBitPos( final BlockPos pos, final boolean placement ) { - if ( side == null || pos == null ) - { - return null; - } - final RayTraceResult mop = new RayTraceResult( RayTraceResult.Type.BLOCK, new Vec3d( hitX, hitY, hitZ ), side, pos ); return new BitLocation( mop, false, placement ? BitOperation.PLACE : BitOperation.CHISEL ); } @@ -206,7 +201,7 @@ public ItemType getItemType( public IBitAccess createBitItem( final ItemStack stack ) { - if ( ModUtil.isEmpty(stack) ) + if ( ModUtil.isEmpty( stack ) ) { return new BitAccess( null, null, new VoxelBlob(), VoxelBlob.NULL_BLOB ); } @@ -268,7 +263,7 @@ public void giveBitToPlayer( final ItemStack stack, Vec3d spawnPos ) { - if ( ModUtil.isEmpty(stack) ) + if ( ModUtil.isEmpty( stack ) ) { return; } @@ -301,7 +296,7 @@ else if ( !player.inventory.addItemStackToInventory( stack ) ) public IBitBag getBitbag( final ItemStack stack ) { - if ( !ModUtil.isEmpty(stack) ) + if ( !ModUtil.isEmpty( stack ) ) { final Object o = stack.getCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.UP ); if ( o instanceof IBitBag ) diff --git a/src/main/java/mod/chiselsandbits/crafting/BitSawCrafting.java b/src/main/java/mod/chiselsandbits/crafting/BitSawCrafting.java index 268869cb..a5dcecdd 100644 --- a/src/main/java/mod/chiselsandbits/crafting/BitSawCrafting.java +++ b/src/main/java/mod/chiselsandbits/crafting/BitSawCrafting.java @@ -120,13 +120,13 @@ public ItemStack getCraftingResult( if ( sc == null ) { - return null; + return ModUtil.getEmptyStack(); } final IBitAccess contents = ChiselsAndBits.getApi().createBitItem( sc.chisledBlock ); if ( contents == null ) { - return null; + return ModUtil.getEmptyStack(); } final VoxelBlob blob = ( (BitAccess) contents ).getNativeBlob(); @@ -264,7 +264,7 @@ else if ( tr.stateId == 0 && tr.quantity == VoxelBlob.full_size - 1 ) } } - return null; + return ModUtil.getEmptyStack(); } @Override diff --git a/src/main/java/mod/chiselsandbits/crafting/ChiselBlockCrafting.java b/src/main/java/mod/chiselsandbits/crafting/ChiselBlockCrafting.java index 38b2fcec..6dbd04c7 100644 --- a/src/main/java/mod/chiselsandbits/crafting/ChiselBlockCrafting.java +++ b/src/main/java/mod/chiselsandbits/crafting/ChiselBlockCrafting.java @@ -101,6 +101,11 @@ public void doLogic() final IBitAccess ba = ChiselsAndBits.getApi().createBitItem( block ); final Chiseler c = new Chiseler( chisel, ChiselsAndBits.getApi().getBitbag( bag ) ); + if ( ba == null ) + { + return; + } + ba.visitBits( c ); modified = c.modified; @@ -181,7 +186,8 @@ private ChiselBlockInfo getInfo( try { final IBitBrush state = ChiselsAndBits.getApi().createBrushFromState( actingState ); - final IBitAccess item = ChiselsAndBits.getApi().createBitItem( null ); + final IBitAccess item = ChiselsAndBits.getApi().createBitItem( ModUtil.getEmptyStack() ); + assert item != null; item.visitBits( new IBitVisitor() { diff --git a/src/main/java/mod/chiselsandbits/debug/DebugAction.java b/src/main/java/mod/chiselsandbits/debug/DebugAction.java index e40b2525..90e292a3 100644 --- a/src/main/java/mod/chiselsandbits/debug/DebugAction.java +++ b/src/main/java/mod/chiselsandbits/debug/DebugAction.java @@ -1,5 +1,7 @@ package mod.chiselsandbits.debug; +import javax.annotation.Nonnull; + import mod.chiselsandbits.api.APIExceptions.CannotBeChiseled; import mod.chiselsandbits.api.APIExceptions.InvalidBitItem; import mod.chiselsandbits.api.APIExceptions.SpaceOccupied; @@ -76,13 +78,13 @@ private static void apiAssert( } public abstract void run( - final World w, - final BlockPos pos, - final EnumFacing side, + final @Nonnull World w, + final @Nonnull BlockPos pos, + final @Nonnull EnumFacing side, final float hitX, final float hitY, final float hitZ, - EntityPlayer player ); + @Nonnull EntityPlayer player ); static class ItemTests extends DebugAction { @@ -97,7 +99,8 @@ public void run( final float hitZ, final EntityPlayer player ) { - final IBitAccess access = api.createBitItem( null ); + final IBitAccess access = api.createBitItem( ModUtil.getEmptyStack() ); + assert access != null; apiAssert( "BIT_BAG", player, api.getItemType( new ItemStack( ChiselsAndBits.getItems().itemBitBag ) ) == ItemType.BIT_BAG ); apiAssert( "CHISEL", player, api.getItemType( new ItemStack( ChiselsAndBits.getItems().itemChiselDiamond ) ) == ItemType.CHISEL ); @@ -106,7 +109,7 @@ public void run( apiAssert( "POSITIVE_DESIGN 1", player, api.getItemType( new ItemStack( ChiselsAndBits.getItems().itemPositiveprint ) ) == ItemType.POSITIVE_DESIGN ); apiAssert( "WRENCH", player, api.getItemType( new ItemStack( ChiselsAndBits.getItems().itemWrench ) ) == ItemType.WRENCH ); apiAssert( "CHISLED_BIT-cobblestone", player, api.getItemType( ItemChiseledBit.createStack( ModUtil.getStateId( Blocks.COBBLESTONE.getDefaultState() ), 1, true ) ) == ItemType.CHISLED_BIT ); - apiAssert( "CHISLED_BLOCK", player, api.getItemType( access.getBitsAsItem( null, ItemType.CHISLED_BLOCK, false ) ) == null ); + apiAssert( "CHISLED_BLOCK", player, api.getItemType( access.getBitsAsItem( EnumFacing.UP, ItemType.CHISLED_BLOCK, false ) ) == null ); apiAssert( "MIRROR_DESIGN 2", player, api.getItemType( access.getBitsAsItem( null, ItemType.MIRROR_DESIGN, false ) ) == null ); apiAssert( "NEGATIVE_DESIGN 2", player, api.getItemType( access.getBitsAsItem( null, ItemType.NEGATIVE_DESIGN, false ) ) == null ); apiAssert( "POSITIVE_DESIGN 2", player, api.getItemType( access.getBitsAsItem( null, ItemType.POSITIVE_DESIGN, false ) ) == null ); @@ -290,7 +293,7 @@ public void run( try { final IBitAccess access = api.getBitAccess( w, loc.getBlockPos() ); - final IBitBrush brush = api.createBrush( null ); + final IBitBrush brush = api.createBrush( ModUtil.getEmptyStack() ); access.setBitAt( loc.getBitX(), loc.getBitY(), loc.getBitZ(), brush ); access.commitChanges( true ); @@ -339,7 +342,7 @@ public IBitBrush visitBit( final int z, final IBitBrush currentValue ) { - IBitBrush bit = null; + IBitBrush bit = currentValue; final IBlockState state = Blocks.WOOL.getDefaultState(); try diff --git a/src/main/java/mod/chiselsandbits/helpers/ModUtil.java b/src/main/java/mod/chiselsandbits/helpers/ModUtil.java index 36fd00de..3f79bfe3 100644 --- a/src/main/java/mod/chiselsandbits/helpers/ModUtil.java +++ b/src/main/java/mod/chiselsandbits/helpers/ModUtil.java @@ -339,6 +339,7 @@ public static BlockPos getPartialOffset( return new BlockPos( t_x, t_y, t_z ); } + @SafeVarargs static public T firstNonNull( final T... options ) { @@ -783,6 +784,7 @@ public static boolean isEmpty( return c; } + @SuppressWarnings( "deprecation" ) public static IBlockState getStateFromItem( final ItemStack is ) { diff --git a/src/main/java/mod/chiselsandbits/helpers/NullInventory.java b/src/main/java/mod/chiselsandbits/helpers/NullInventory.java index bebc37b4..7b632b4b 100644 --- a/src/main/java/mod/chiselsandbits/helpers/NullInventory.java +++ b/src/main/java/mod/chiselsandbits/helpers/NullInventory.java @@ -4,6 +4,8 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; public class NullInventory implements IInventory { @@ -19,7 +21,7 @@ public NullInventory( @Override public String getName() { - return null; + return "container.inventory"; } @Override @@ -31,7 +33,7 @@ public boolean hasCustomName() @Override public ITextComponent getDisplayName() { - return null; + return hasCustomName() ? new TextComponentString( getName() ) : new TextComponentTranslation( getName(), new Object[0] ); } @Override diff --git a/src/main/java/mod/chiselsandbits/helpers/PlayerCopiedInventory.java b/src/main/java/mod/chiselsandbits/helpers/PlayerCopiedInventory.java index 639ad417..4d0f9f7d 100644 --- a/src/main/java/mod/chiselsandbits/helpers/PlayerCopiedInventory.java +++ b/src/main/java/mod/chiselsandbits/helpers/PlayerCopiedInventory.java @@ -5,6 +5,8 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; public class PlayerCopiedInventory implements IInventory { @@ -32,7 +34,7 @@ public PlayerCopiedInventory( @Override public String getName() { - return "NULL"; + return "container.inventory"; } @Override @@ -44,7 +46,7 @@ public boolean hasCustomName() @Override public ITextComponent getDisplayName() { - return null; + return hasCustomName() ? new TextComponentString( getName() ) : new TextComponentTranslation( getName(), new Object[0] ); } @Override @@ -77,7 +79,7 @@ public ItemStack decrStackSize( } } - return null; + return ModUtil.getEmptyStack(); } @Override diff --git a/src/main/java/mod/chiselsandbits/items/ItemChiseledBit.java b/src/main/java/mod/chiselsandbits/items/ItemChiseledBit.java index 64f40e9a..7f15f3d6 100644 --- a/src/main/java/mod/chiselsandbits/items/ItemChiseledBit.java +++ b/src/main/java/mod/chiselsandbits/items/ItemChiseledBit.java @@ -326,7 +326,12 @@ public void getSubItems( try { Item it = (Item) obj; - it.getSubItems( it, it.getCreativeTab(), List ); + final CreativeTabs ctab = it.getCreativeTab(); + + if ( ctab != null ) + { + it.getSubItems( it, ctab, List ); + } for ( final ItemStack out : List ) { diff --git a/src/main/java/mod/chiselsandbits/items/ItemMirrorPrint.java b/src/main/java/mod/chiselsandbits/items/ItemMirrorPrint.java index 4d4e6533..54f0cd18 100644 --- a/src/main/java/mod/chiselsandbits/items/ItemMirrorPrint.java +++ b/src/main/java/mod/chiselsandbits/items/ItemMirrorPrint.java @@ -145,7 +145,7 @@ public ItemStack getPatternedItem( return null; } - final NBTTagCompound tag = stack.getTagCompound(); + final NBTTagCompound tag = ModUtil.getTagCompound( stack ); // Detect and provide full blocks if pattern solid full and solid. final NBTBlobConverter conv = new NBTBlobConverter(); diff --git a/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java b/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java index a787ccb5..b119ca61 100644 --- a/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java +++ b/src/main/java/mod/chiselsandbits/items/ItemNegativePrint.java @@ -230,7 +230,7 @@ public ItemStack getPatternedItem( return null; } - final NBTTagCompound tag = stack.getTagCompound(); + final NBTTagCompound tag = ModUtil.getTagCompound( stack ); // Detect and provide full blocks if pattern solid full and solid. final NBTBlobConverter conv = new NBTBlobConverter(); diff --git a/src/main/java/mod/chiselsandbits/network/NetworkRouter.java b/src/main/java/mod/chiselsandbits/network/NetworkRouter.java index 4dff80a8..43e402ea 100644 --- a/src/main/java/mod/chiselsandbits/network/NetworkRouter.java +++ b/src/main/java/mod/chiselsandbits/network/NetworkRouter.java @@ -9,6 +9,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketThreadUtil; import net.minecraft.network.ThreadQuickExitException; +import net.minecraft.server.MinecraftServer; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; import net.minecraftforge.fml.common.network.FMLEventChannel; @@ -55,7 +56,13 @@ public void onPacketData( final ModPacket innerPacket = parsePacket( buffer ); innerPacket.serverEntity = playerEntity; - PacketThreadUtil.checkThreadAndEnqueue( innerPacket, handler, playerEntity.getServer() ); + final MinecraftServer serv = playerEntity.getServer(); + + if ( serv != null ) + { + PacketThreadUtil.checkThreadAndEnqueue( innerPacket, handler, serv ); + } + innerPacket.server( playerEntity ); } }; diff --git a/src/main/java/mod/chiselsandbits/network/packets/PacketAccurateSneakPlace.java b/src/main/java/mod/chiselsandbits/network/packets/PacketAccurateSneakPlace.java index 112d14f3..d8e90ef5 100644 --- a/src/main/java/mod/chiselsandbits/network/packets/PacketAccurateSneakPlace.java +++ b/src/main/java/mod/chiselsandbits/network/packets/PacketAccurateSneakPlace.java @@ -60,7 +60,7 @@ public void server( if ( !playerEntity.capabilities.isCreativeMode && ModUtil.getStackSize( inHand ) <= 0 ) { - playerEntity.setHeldItem( hand, null ); + playerEntity.setHeldItem( hand, ModUtil.getEmptyStack() ); } } } diff --git a/src/main/java/mod/chiselsandbits/render/SmartModelManager.java b/src/main/java/mod/chiselsandbits/render/SmartModelManager.java index bd21db06..b00f1b4b 100644 --- a/src/main/java/mod/chiselsandbits/render/SmartModelManager.java +++ b/src/main/java/mod/chiselsandbits/render/SmartModelManager.java @@ -60,8 +60,8 @@ private void add( clearable.add( (ICacheClearable) modelGen ); } - res.add( new ModelResourceLocation( modelLocation, null ) ); - res.add( new ModelResourceLocation( second, null ) ); + res.add( new ModelResourceLocation( modelLocation, "normal" ) ); + res.add( new ModelResourceLocation( second, "normal" ) ); res.add( new ModelResourceLocation( modelLocation, "inventory" ) ); res.add( new ModelResourceLocation( second, "inventory" ) ); @@ -72,8 +72,8 @@ private void add( models.put( modelLocation, modelGen ); models.put( second, modelGen ); - models.put( new ModelResourceLocation( modelLocation, null ), modelGen ); - models.put( new ModelResourceLocation( second, null ), modelGen ); + models.put( new ModelResourceLocation( modelLocation, "normal" ), modelGen ); + models.put( new ModelResourceLocation( second, "normal" ), modelGen ); models.put( new ModelResourceLocation( modelLocation, "inventory" ), modelGen ); models.put( new ModelResourceLocation( second, "inventory" ), modelGen ); diff --git a/src/main/java/mod/chiselsandbits/render/chiseledblock/tesr/ChisledBlockRenderChunkTESR.java b/src/main/java/mod/chiselsandbits/render/chiseledblock/tesr/ChisledBlockRenderChunkTESR.java index 798090ce..7a666145 100644 --- a/src/main/java/mod/chiselsandbits/render/chiseledblock/tesr/ChisledBlockRenderChunkTESR.java +++ b/src/main/java/mod/chiselsandbits/render/chiseledblock/tesr/ChisledBlockRenderChunkTESR.java @@ -388,8 +388,7 @@ public void renderBreakingEffects( return; } - @Override - public void renderTileEntityFast( + private void renderTileEntityInner( final TileEntityBlockChiseledTESR te, final double x, final double y, @@ -648,6 +647,19 @@ private void unconfigureGLState() RenderHelper.enableStandardItemLighting(); } + @Override + public void renderTileEntityFast( + final TileEntityBlockChiseledTESR te, + final double x, + final double y, + final double z, + final float partialTicks, + final int destroyStage, + final VertexBuffer worldRenderer ) + { + renderTileEntityInner( te, x, y, z, partialTicks, destroyStage, worldRenderer ); + } + @Override public void renderTileEntityAt( final TileEntityBlockChiseledTESR te, @@ -659,7 +671,7 @@ public void renderTileEntityAt( { if ( destroyStage > 0 ) { - renderTileEntityFast( te, x, y, z, partialTicks, destroyStage, null ); + renderTileEntityInner( te, x, y, z, partialTicks, destroyStage, null ); } } diff --git a/src/main/resources/chiselsandbits_at.cfg b/src/main/resources/chiselsandbits_at.cfg index 597ebed7..a3c05560 100644 --- a/src/main/resources/chiselsandbits_at.cfg +++ b/src/main/resources/chiselsandbits_at.cfg @@ -1,6 +1,10 @@ -#baggui +# baggui protected net.minecraft.client.gui.inventory.GuiContainer func_146977_a(Lnet/minecraft/inventory/Slot;)V # drawSlot protected net.minecraft.client.gui.inventory.GuiContainer func_146981_a(Lnet/minecraft/inventory/Slot;II)Z # isMouseOverSlot protected net.minecraft.client.gui.inventory.GuiContainer field_147006_u # theSlot public net.minecraft.client.gui.FontRenderer func_180455_b(Ljava/lang/String;FFIZ)I # + +# need to read these in certain cases. public net.minecraft.item.EnumDyeColor field_176793_x # chatColor +public net.minecraft.block.Block field_149782_v # blockHardness +public net.minecraft.block.Block field_149781_w # blockResistance \ No newline at end of file