mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 05:33:00 +00:00 
			
		
		
		
	Some further improvements to BlockGeneric
- Only have computers implement custom block drop logic: everything
   else only drops in creative mode.
 - Fix redstone inputs not being received correctly. Introduced in
   8b86a954ee, yes I'm a silly billy.
 - Only update the neighbour which changed.
			
			
This commit is contained in:
		| @@ -235,7 +235,8 @@ public class ComputerCraft | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public static class Upgrades { | ||||
|     public static class Upgrades | ||||
|     { | ||||
|         public static TurtleModem advancedModem; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -11,11 +11,9 @@ import net.minecraft.block.ITileEntityProvider; | ||||
| import net.minecraft.block.material.Material; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.tileentity.TileEntity; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.EnumHand; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.world.IBlockAccess; | ||||
| import net.minecraft.world.World; | ||||
| @@ -35,96 +33,32 @@ public abstract class BlockGeneric extends Block implements ITileEntityProvider | ||||
|  | ||||
|     protected abstract TileGeneric createTile( int damage ); | ||||
|  | ||||
|     @Override | ||||
|     public final void dropBlockAsItemWithChance( World world, @Nonnull BlockPos pos, @Nonnull IBlockState state, float chance, int fortune ) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public final void getDrops( @Nonnull NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             generic.getDroppedItems( drops, false ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean removedByPlayer( @Nonnull IBlockState state, World world, @Nonnull BlockPos pos, @Nonnull EntityPlayer player, boolean willHarvest ) | ||||
|     { | ||||
|         if( !world.isRemote ) | ||||
|         { | ||||
|             // Drop items | ||||
|             boolean creative = player.capabilities.isCreativeMode; | ||||
|             dropAllItems( world, pos, creative ); | ||||
|         } | ||||
|  | ||||
|         // Remove block | ||||
|         return super.removedByPlayer( state, world, pos, player, willHarvest ); | ||||
|     } | ||||
|  | ||||
|     public final void dropAllItems( World world, BlockPos pos, boolean creative ) | ||||
|     { | ||||
|         // Get items to drop | ||||
|         NonNullList<ItemStack> drops = NonNullList.create(); | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             generic.getDroppedItems( drops, creative ); | ||||
|         } | ||||
|  | ||||
|         // Drop items | ||||
|         if( drops.size() > 0 ) | ||||
|         { | ||||
|             for( ItemStack item : drops ) | ||||
|             { | ||||
|                 dropItem( world, pos, item ); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public final void dropItem( World world, BlockPos pos, @Nonnull ItemStack stack ) | ||||
|     { | ||||
|         Block.spawnAsEntity( world, pos, stack ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public final void breakBlock( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull IBlockState newState ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         super.breakBlock( world, pos, newState ); | ||||
|         world.removeTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             generic.destroy(); | ||||
|         } | ||||
|         if( tile instanceof TileGeneric ) ((TileGeneric) tile).destroy(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public final boolean onBlockActivated( World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             return generic.onActivate( player, hand, side, hitX, hitY, hitZ ); | ||||
|         } | ||||
|         return false; | ||||
|         return tile instanceof TileGeneric && ((TileGeneric) tile).onActivate( player, hand, side, hitX, hitY, hitZ ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Deprecated | ||||
|     public final void neighborChanged( IBlockState state, World world, BlockPos pos, Block block, BlockPos neighorPos ) | ||||
|     public final void neighborChanged( IBlockState state, World world, BlockPos pos, Block block, BlockPos neighbour ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             generic.onNeighbourChange(); | ||||
|             generic.onNeighbourChange( neighbour ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -132,11 +66,7 @@ public abstract class BlockGeneric extends Block implements ITileEntityProvider | ||||
|     public final void onNeighborChange( IBlockAccess world, BlockPos pos, BlockPos neighbour ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             generic.onNeighbourTileEntityChange( neighbour ); | ||||
|         } | ||||
|         if( tile instanceof TileGeneric ) ((TileGeneric) tile).onNeighbourTileEntityChange( neighbour ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -157,12 +87,7 @@ public abstract class BlockGeneric extends Block implements ITileEntityProvider | ||||
|     public final boolean canConnectRedstone( IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             return generic.getRedstoneConnectivity( side ); | ||||
|         } | ||||
|         return false; | ||||
|         return tile instanceof TileGeneric && ((TileGeneric) tile).getRedstoneConnectivity( side ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -172,8 +97,7 @@ public abstract class BlockGeneric extends Block implements ITileEntityProvider | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric && tile.hasWorld() ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             return generic.getRedstoneOutput( oppositeSide.getOpposite() ); | ||||
|             return ((TileGeneric) tile).getRedstoneOutput( oppositeSide.getOpposite() ); | ||||
|         } | ||||
|         return 0; | ||||
|     } | ||||
| @@ -190,8 +114,7 @@ public abstract class BlockGeneric extends Block implements ITileEntityProvider | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             return generic.getBundledRedstoneConnectivity( side ); | ||||
|             return ((TileGeneric) tile).getBundledRedstoneConnectivity( side ); | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
| @@ -201,8 +124,7 @@ public abstract class BlockGeneric extends Block implements ITileEntityProvider | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileGeneric && tile.hasWorld() ) | ||||
|         { | ||||
|             TileGeneric generic = (TileGeneric) tile; | ||||
|             return generic.getBundledRedstoneOutput( side ); | ||||
|             return ((TileGeneric) tile).getBundledRedstoneOutput( side ); | ||||
|         } | ||||
|         return 0; | ||||
|     } | ||||
|   | ||||
| @@ -9,14 +9,12 @@ package dan200.computercraft.shared.common; | ||||
| import net.minecraft.block.Block; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.nbt.NBTTagCompound; | ||||
| import net.minecraft.network.NetworkManager; | ||||
| import net.minecraft.network.play.server.SPacketUpdateTileEntity; | ||||
| import net.minecraft.tileentity.TileEntity; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.EnumHand; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.world.World; | ||||
|  | ||||
| @@ -55,19 +53,20 @@ public abstract class TileGeneric extends TileEntity | ||||
|         getWorld().setBlockState( getPos(), newState, 3 ); | ||||
|     } | ||||
|  | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public boolean onActivate( EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ ) | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void onNeighbourChange() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public void onNeighbourChange( @Nonnull BlockPos neighbour ) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public void onNeighbourTileEntityChange( @Nonnull BlockPos neighbour ) | ||||
|     { | ||||
|     } | ||||
|   | ||||
| @@ -8,11 +8,13 @@ package dan200.computercraft.shared.computer.blocks; | ||||
|  | ||||
| import dan200.computercraft.ComputerCraft; | ||||
| import dan200.computercraft.shared.computer.core.ComputerFamily; | ||||
| import dan200.computercraft.shared.computer.items.ComputerItemFactory; | ||||
| import net.minecraft.block.material.Material; | ||||
| import net.minecraft.block.properties.PropertyDirection; | ||||
| import net.minecraft.block.properties.PropertyEnum; | ||||
| import net.minecraft.block.state.BlockStateContainer; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.tileentity.TileEntity; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| @@ -103,4 +105,11 @@ public class BlockCommandComputer extends BlockComputerBase | ||||
|     { | ||||
|         return new TileCommandComputer(); | ||||
|     } | ||||
|  | ||||
|     @Nonnull | ||||
|     @Override | ||||
|     protected ItemStack getItem( TileComputerBase tile ) | ||||
|     { | ||||
|         return tile instanceof TileCommandComputer ? ComputerItemFactory.create( (TileComputer) tile ) : ItemStack.EMPTY; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -15,14 +15,11 @@ import net.minecraft.block.properties.PropertyDirection; | ||||
| import net.minecraft.block.properties.PropertyEnum; | ||||
| import net.minecraft.block.state.BlockStateContainer; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.tileentity.TileEntity; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.RayTraceResult; | ||||
| import net.minecraft.world.IBlockAccess; | ||||
| import net.minecraft.world.World; | ||||
|  | ||||
| import javax.annotation.Nonnull; | ||||
|  | ||||
| @@ -136,9 +133,8 @@ public class BlockComputer extends BlockComputerBase | ||||
|  | ||||
|     @Nonnull | ||||
|     @Override | ||||
|     public ItemStack getPickBlock( @Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player ) | ||||
|     protected ItemStack getItem( TileComputerBase tile ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         return tile instanceof TileComputer ? ComputerItemFactory.create( (TileComputer) tile ) : super.getPickBlock( state, target, world, pos, player ); | ||||
|         return tile instanceof TileComputer ? ComputerItemFactory.create( (TileComputer) tile ) : ItemStack.EMPTY; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -12,9 +12,13 @@ import dan200.computercraft.shared.util.DirectionUtil; | ||||
| import net.minecraft.block.material.Material; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.entity.EntityLivingBase; | ||||
| import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.tileentity.TileEntity; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.RayTraceResult; | ||||
| import net.minecraft.world.IBlockAccess; | ||||
| import net.minecraft.world.World; | ||||
|  | ||||
| @@ -49,6 +53,9 @@ public abstract class BlockComputerBase extends BlockDirectional | ||||
|  | ||||
|     protected abstract TileComputerBase createTile( ComputerFamily family ); | ||||
|  | ||||
|     @Nonnull | ||||
|     protected abstract ItemStack getItem( TileComputerBase tile ); | ||||
|  | ||||
|     @Nonnull | ||||
|     @Override | ||||
|     @Deprecated | ||||
| @@ -83,4 +90,55 @@ public abstract class BlockComputerBase extends BlockDirectional | ||||
|             computer.updateInput(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Nonnull | ||||
|     public ItemStack getPickBlock( @Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileComputerBase ) | ||||
|         { | ||||
|             ItemStack result = getItem( (TileComputerBase) tile ); | ||||
|             if( !result.isEmpty() ) return result; | ||||
|         } | ||||
|  | ||||
|         return super.getPickBlock( state, target, world, pos, player ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public final void dropBlockAsItemWithChance( World world, @Nonnull BlockPos pos, @Nonnull IBlockState state, float chance, int fortune ) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public final void getDrops( @Nonnull NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         if( tile instanceof TileComputerBase ) | ||||
|         { | ||||
|             ItemStack stack = getItem( (TileComputerBase) tile ); | ||||
|             if( !stack.isEmpty() ) drops.add( stack ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean removedByPlayer( @Nonnull IBlockState state, World world, @Nonnull BlockPos pos, @Nonnull EntityPlayer player, boolean willHarvest ) | ||||
|     { | ||||
|         if( !world.isRemote ) | ||||
|         { | ||||
|             // We drop the item here instead of doing it in the harvest method, as we | ||||
|             // need to drop it for creative players too. | ||||
|             TileEntity tile = world.getTileEntity( pos ); | ||||
|             if( tile instanceof TileComputerBase ) | ||||
|             { | ||||
|                 TileComputerBase computer = (TileComputerBase) tile; | ||||
|                 if( !player.capabilities.isCreativeMode || computer.getLabel() != null ) | ||||
|                 { | ||||
|                     spawnAsEntity( world, pos, getItem( computer ) ); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return super.removedByPlayer( state, world, pos, player, willHarvest ); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -9,13 +9,10 @@ package dan200.computercraft.shared.computer.blocks; | ||||
| import dan200.computercraft.ComputerCraft; | ||||
| import dan200.computercraft.shared.computer.core.ComputerFamily; | ||||
| import dan200.computercraft.shared.computer.core.ServerComputer; | ||||
| import dan200.computercraft.shared.computer.items.ComputerItemFactory; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.nbt.NBTTagCompound; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.NonNullList; | ||||
|  | ||||
| import javax.annotation.Nonnull; | ||||
|  | ||||
| @@ -60,12 +57,6 @@ public class TileComputer extends TileComputerBase | ||||
|         return m_proxy; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     { | ||||
|         if( !creative || getLabel() != null ) drops.add( ComputerItemFactory.create( this ) ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void openGUI( EntityPlayer player ) | ||||
|     { | ||||
|   | ||||
| @@ -173,9 +173,9 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onNeighbourChange() | ||||
|     public void onNeighbourChange( @Nonnull BlockPos neighbour ) | ||||
|     { | ||||
|         updateInput(); | ||||
|         updateInput( neighbour ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -296,7 +296,7 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT | ||||
|         int localDir = remapLocalSide( DirectionUtil.toLocal( this, dir ) ); | ||||
|         if( !isRedstoneBlockedOnSide( localDir ) ) | ||||
|         { | ||||
|             computer.setRedstoneInput( localDir, getWorld().getRedstonePower( offset, offsetSide ) ); | ||||
|             computer.setRedstoneInput( localDir, getWorld().getRedstonePower( offset, dir ) ); | ||||
|             computer.setBundledRedstoneInput( localDir, BundledRedstone.getOutput( getWorld(), offset, offsetSide ) ); | ||||
|         } | ||||
|         if( !isPeripheralBlockedOnSide( localDir ) ) | ||||
|   | ||||
| @@ -29,6 +29,7 @@ import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.tileentity.TileEntity; | ||||
| import net.minecraft.util.BlockRenderLayer; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.AxisAlignedBB; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.RayTraceResult; | ||||
| @@ -600,4 +601,10 @@ public class BlockPeripheral extends BlockGeneric | ||||
|             ? PeripheralItemFactory.create( (ITilePeripheral) tile ) | ||||
|             : super.getPickBlock( state, target, world, pos, player ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDrops( @Nonnull NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune ) | ||||
|     { | ||||
|         drops.add( PeripheralItemFactory.create( getPeripheralType( state ), null, 1 ) ); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -10,11 +10,9 @@ import dan200.computercraft.api.peripheral.IPeripheral; | ||||
| import dan200.computercraft.shared.common.IDirectionalTile; | ||||
| import dan200.computercraft.shared.common.TileGeneric; | ||||
| import dan200.computercraft.shared.peripheral.PeripheralType; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.nbt.NBTTagCompound; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.ITickable; | ||||
| import net.minecraft.util.NonNullList; | ||||
|  | ||||
| import javax.annotation.Nonnull; | ||||
|  | ||||
| @@ -42,15 +40,6 @@ public abstract class TilePeripheralBase extends TileGeneric implements IPeriphe | ||||
|         return (BlockPeripheral) super.getBlock(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     { | ||||
|         if( !creative ) | ||||
|         { | ||||
|             drops.add( PeripheralItemFactory.create( this ) ); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public final PeripheralType getPeripheralType() | ||||
|     { | ||||
|   | ||||
| @@ -14,6 +14,7 @@ import dan200.computercraft.shared.common.TileGeneric; | ||||
| import dan200.computercraft.shared.peripheral.PeripheralType; | ||||
| import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory; | ||||
| import dan200.computercraft.shared.util.WorldUtil; | ||||
| import net.minecraft.block.Block; | ||||
| import net.minecraft.block.material.Material; | ||||
| import net.minecraft.block.properties.PropertyBool; | ||||
| import net.minecraft.block.properties.PropertyEnum; | ||||
| @@ -26,6 +27,7 @@ import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.tileentity.TileEntity; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.AxisAlignedBB; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.RayTraceResult; | ||||
| @@ -322,7 +324,10 @@ public class BlockCable extends BlockGeneric | ||||
|  | ||||
|                     cable.modemChanged(); | ||||
|                     cable.connectionsChanged(); | ||||
|                     if( !world.isRemote && !player.capabilities.isCreativeMode ) dropItem( world, pos, item ); | ||||
|                     if( !world.isRemote && !player.capabilities.isCreativeMode ) | ||||
|                     { | ||||
|                         Block.spawnAsEntity( world, pos, item ); | ||||
|                     } | ||||
|  | ||||
|                     return false; | ||||
|                 } | ||||
| @@ -332,6 +337,23 @@ public class BlockCable extends BlockGeneric | ||||
|         return super.removedByPlayer( state, world, pos, player, willHarvest ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDrops( @Nonnull NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune ) | ||||
|     { | ||||
|         PeripheralType type = getPeripheralType( state ); | ||||
|         switch( type ) | ||||
|         { | ||||
|             case Cable: | ||||
|             case WiredModem: | ||||
|                 drops.add( PeripheralItemFactory.create( type, null, 1 ) ); | ||||
|                 break; | ||||
|             case WiredModemWithCable: | ||||
|                 drops.add( PeripheralItemFactory.create( PeripheralType.WiredModem, null, 1 ) ); | ||||
|                 drops.add( PeripheralItemFactory.create( PeripheralType.Cable, null, 1 ) ); | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Nonnull | ||||
|     @Override | ||||
|     public ItemStack getPickBlock( @Nonnull IBlockState state, RayTraceResult hit, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player ) | ||||
|   | ||||
| @@ -20,13 +20,12 @@ import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory; | ||||
| import dan200.computercraft.shared.peripheral.modem.ModemState; | ||||
| import dan200.computercraft.shared.util.TickScheduler; | ||||
| import dan200.computercraft.shared.wired.CapabilityWiredElement; | ||||
| import net.minecraft.block.Block; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.nbt.NBTTagCompound; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.EnumHand; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.Vec3d; | ||||
| import net.minecraft.util.text.TextComponentTranslation; | ||||
| @@ -177,44 +176,17 @@ public class TileCable extends TileGeneric implements IPeripheralTile | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     { | ||||
|         if( !creative ) | ||||
|         { | ||||
|             PeripheralType type = getPeripheralType(); | ||||
|             switch( type ) | ||||
|             { | ||||
|                 case Cable: | ||||
|                 case WiredModem: | ||||
|                 { | ||||
|                     drops.add( PeripheralItemFactory.create( type, null, 1 ) ); | ||||
|                     break; | ||||
|                 } | ||||
|                 case WiredModemWithCable: | ||||
|                 { | ||||
|                     drops.add( PeripheralItemFactory.create( PeripheralType.WiredModem, null, 1 ) ); | ||||
|                     drops.add( PeripheralItemFactory.create( PeripheralType.Cable, null, 1 ) ); | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onNeighbourChange() | ||||
|     public void onNeighbourChange( @Nonnull BlockPos neighbour ) | ||||
|     { | ||||
|         EnumFacing dir = getDirection(); | ||||
|         if( !getWorld().isSideSolid( | ||||
|             getPos().offset( dir ), | ||||
|             dir.getOpposite() | ||||
|         ) ) | ||||
|         if( neighbour.equals( getPos().offset( dir ) ) && !getWorld().isSideSolid( neighbour, dir.getOpposite() ) ) | ||||
|         { | ||||
|             switch( getPeripheralType() ) | ||||
|             { | ||||
|                 case WiredModem: | ||||
|                 { | ||||
|                     // Drop everything and remove block | ||||
|                     getBlock().dropAllItems( getWorld(), getPos(), false ); | ||||
|                     getBlock().dropBlockAsItem( getWorld(), getPos(), getBlockState(), 0 ); | ||||
|                     getWorld().setBlockToAir( getPos() ); | ||||
|  | ||||
|                     // This'll call #destroy(), so we don't need to reset the network here. | ||||
| @@ -223,7 +195,7 @@ public class TileCable extends TileGeneric implements IPeripheralTile | ||||
|                 case WiredModemWithCable: | ||||
|                 { | ||||
|                     // Drop the modem and convert to cable | ||||
|                     getBlock().dropItem( getWorld(), getPos(), PeripheralItemFactory.create( PeripheralType.WiredModem, null, 1 ) ); | ||||
|                     Block.spawnAsEntity( getWorld(), getPos(), PeripheralItemFactory.create( PeripheralType.WiredModem, null, 1 ) ); | ||||
|                     setBlockState( getBlockState().withProperty( BlockCable.Properties.MODEM, BlockCableModemVariant.None ) ); | ||||
|                     modemChanged(); | ||||
|                     connectionsChanged(); | ||||
|   | ||||
| @@ -7,7 +7,6 @@ | ||||
| package dan200.computercraft.shared.peripheral.modem.wired; | ||||
|  | ||||
| import com.google.common.base.Objects; | ||||
| import dan200.computercraft.ComputerCraft; | ||||
| import dan200.computercraft.api.ComputerCraftAPI; | ||||
| import dan200.computercraft.api.network.wired.IWiredElement; | ||||
| import dan200.computercraft.api.network.wired.IWiredNode; | ||||
| @@ -19,11 +18,9 @@ import dan200.computercraft.shared.peripheral.modem.ModemState; | ||||
| import dan200.computercraft.shared.util.TickScheduler; | ||||
| import dan200.computercraft.shared.wired.CapabilityWiredElement; | ||||
| import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.nbt.NBTTagCompound; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.EnumHand; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.Vec3d; | ||||
| import net.minecraft.util.text.TextComponentString; | ||||
| @@ -136,24 +133,9 @@ public class TileWiredModemFull extends TileGeneric implements IPeripheralTile | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     public void onNeighbourChange( @Nonnull BlockPos neighbour ) | ||||
|     { | ||||
|         drops.add( new ItemStack( ComputerCraft.Items.wiredModemFull ) ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onNeighbourChange() | ||||
|     { | ||||
|         if( !world.isRemote && m_peripheralAccessAllowed ) | ||||
|         { | ||||
|             boolean hasChanged = false; | ||||
|             for( EnumFacing facing : EnumFacing.VALUES ) | ||||
|             { | ||||
|                 hasChanged |= m_peripherals[facing.ordinal()].attach( world, getPos(), facing ); | ||||
|             } | ||||
|  | ||||
|             if( hasChanged ) updateConnectedPeripherals(); | ||||
|         } | ||||
|         onNeighbourTileEntityChange( neighbour ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -6,12 +6,7 @@ | ||||
|  | ||||
| package dan200.computercraft.shared.peripheral.modem.wireless; | ||||
|  | ||||
| import dan200.computercraft.ComputerCraft; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.NonNullList; | ||||
|  | ||||
| import javax.annotation.Nonnull; | ||||
|  | ||||
| public class TileAdvancedModem extends TileWirelessModemBase | ||||
| { | ||||
| @@ -25,10 +20,4 @@ public class TileAdvancedModem extends TileWirelessModemBase | ||||
|     { | ||||
|         return getBlockState().getValue( BlockAdvancedModem.Properties.FACING ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     { | ||||
|         if( !creative ) drops.add( new ItemStack( ComputerCraft.Items.advancedModem ) ); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -12,11 +12,8 @@ import dan200.computercraft.shared.peripheral.PeripheralType; | ||||
| import dan200.computercraft.shared.peripheral.common.BlockPeripheral; | ||||
| import dan200.computercraft.shared.peripheral.common.BlockPeripheralVariant; | ||||
| import dan200.computercraft.shared.peripheral.common.ITilePeripheral; | ||||
| import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.world.World; | ||||
|  | ||||
| @@ -80,12 +77,6 @@ public class TileWirelessModem extends TileWirelessModemBase implements IDirecti | ||||
|         return super.shouldRefresh( world, pos, oldState, newState ) || ComputerCraft.Blocks.peripheral.getPeripheralType( newState ) != PeripheralType.WirelessModem; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     { | ||||
|         if( !creative ) drops.add( PeripheralItemFactory.create( PeripheralType.WirelessModem, null, 1 ) ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public PeripheralType getPeripheralType() | ||||
|     { | ||||
|   | ||||
| @@ -121,13 +121,13 @@ public abstract class TileWirelessModemBase extends TileGeneric implements IPeri | ||||
|     protected abstract EnumFacing getDirection(); | ||||
|  | ||||
|     @Override | ||||
|     public void onNeighbourChange() | ||||
|     public void onNeighbourChange( @Nonnull BlockPos neighbour ) | ||||
|     { | ||||
|         EnumFacing dir = getDirection(); | ||||
|         if( !getWorld().isSideSolid( getPos().offset( dir ), dir.getOpposite() ) ) | ||||
|         if( neighbour.equals( getPos().offset( dir ) ) && !getWorld().isSideSolid( neighbour, dir.getOpposite() ) ) | ||||
|         { | ||||
|             // Drop everything and remove block | ||||
|             getBlock().dropAllItems( getWorld(), getPos(), false ); | ||||
|             getBlock().dropBlockAsItem( getWorld(), getPos(), getBlockState(), 0 ); | ||||
|             getWorld().setBlockToAir( getPos() ); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -16,15 +16,12 @@ import dan200.computercraft.shared.peripheral.PeripheralType; | ||||
| import dan200.computercraft.shared.peripheral.common.BlockPeripheral; | ||||
| import dan200.computercraft.shared.peripheral.common.IPeripheralTile; | ||||
| import dan200.computercraft.shared.peripheral.common.ITilePeripheral; | ||||
| import dan200.computercraft.shared.peripheral.common.PeripheralItemFactory; | ||||
| import net.minecraft.block.state.IBlockState; | ||||
| import net.minecraft.entity.player.EntityPlayer; | ||||
| import net.minecraft.item.ItemStack; | ||||
| import net.minecraft.nbt.NBTTagCompound; | ||||
| import net.minecraft.tileentity.TileEntity; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.EnumHand; | ||||
| import net.minecraft.util.NonNullList; | ||||
| import net.minecraft.util.math.AxisAlignedBB; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.world.World; | ||||
| @@ -757,10 +754,4 @@ public class TileMonitor extends TileGeneric implements ITilePeripheral, IPeriph | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     { | ||||
|         if( !creative ) drops.add( PeripheralItemFactory.create( this ) ); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -27,7 +27,6 @@ import net.minecraft.util.EnumBlockRenderType; | ||||
| import net.minecraft.util.EnumFacing; | ||||
| import net.minecraft.util.math.AxisAlignedBB; | ||||
| import net.minecraft.util.math.BlockPos; | ||||
| import net.minecraft.util.math.RayTraceResult; | ||||
| import net.minecraft.util.math.Vec3d; | ||||
| import net.minecraft.world.IBlockAccess; | ||||
| import net.minecraft.world.World; | ||||
| @@ -200,11 +199,10 @@ public class BlockTurtle extends BlockComputerBase | ||||
|         return super.getExplosionResistance( exploder ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Nonnull | ||||
|     public ItemStack getPickBlock( @Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player ) | ||||
|     @Override | ||||
|     protected ItemStack getItem( TileComputerBase tile ) | ||||
|     { | ||||
|         TileEntity tile = world.getTileEntity( pos ); | ||||
|         return tile instanceof TileTurtle ? TurtleItemFactory.create( (TileTurtle) tile ) : super.getPickBlock( state, target, world, pos, player ); | ||||
|         return tile instanceof TileTurtle ? TurtleItemFactory.create( (TileTurtle) tile ) : ItemStack.EMPTY; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -17,7 +17,6 @@ import dan200.computercraft.shared.computer.core.ComputerFamily; | ||||
| import dan200.computercraft.shared.computer.core.ServerComputer; | ||||
| import dan200.computercraft.shared.turtle.apis.TurtleAPI; | ||||
| import dan200.computercraft.shared.turtle.core.TurtleBrain; | ||||
| import dan200.computercraft.shared.turtle.items.TurtleItemFactory; | ||||
| import dan200.computercraft.shared.util.DefaultInventory; | ||||
| import dan200.computercraft.shared.util.InventoryUtil; | ||||
| import dan200.computercraft.shared.util.RedstoneUtil; | ||||
| @@ -166,12 +165,6 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void getDroppedItems( @Nonnull NonNullList<ItemStack> drops, boolean creative ) | ||||
|     { | ||||
|         if( !creative || getLabel() != null ) drops.add( TurtleItemFactory.create( this ) ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean onActivate( EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ ) | ||||
|     { | ||||
| @@ -262,38 +255,26 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onNeighbourChange() | ||||
|     public void onNeighbourChange( @Nonnull BlockPos neighbour ) | ||||
|     { | ||||
|         if( m_moveState == MoveState.NOT_MOVED ) | ||||
|         { | ||||
|             super.onNeighbourChange(); | ||||
|         } | ||||
|         if( m_moveState == MoveState.NOT_MOVED ) super.onNeighbourChange( neighbour ); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onNeighbourTileEntityChange( @Nonnull BlockPos neighbour ) | ||||
|     { | ||||
|         if( m_moveState == MoveState.NOT_MOVED ) | ||||
|         { | ||||
|             super.onNeighbourTileEntityChange( neighbour ); | ||||
|         } | ||||
|         if( m_moveState == MoveState.NOT_MOVED ) super.onNeighbourTileEntityChange( neighbour ); | ||||
|     } | ||||
|  | ||||
|     public void notifyMoveStart() | ||||
|     { | ||||
|         if( m_moveState == MoveState.NOT_MOVED ) | ||||
|         { | ||||
|             m_moveState = MoveState.IN_PROGRESS; | ||||
|         } | ||||
|         if( m_moveState == MoveState.NOT_MOVED ) m_moveState = MoveState.IN_PROGRESS; | ||||
|     } | ||||
|  | ||||
|     public void notifyMoveEnd() | ||||
|     { | ||||
|         // MoveState.MOVED is final | ||||
|         if( m_moveState == MoveState.IN_PROGRESS ) | ||||
|         { | ||||
|             m_moveState = MoveState.NOT_MOVED; | ||||
|         } | ||||
|         if( m_moveState == MoveState.IN_PROGRESS ) m_moveState = MoveState.NOT_MOVED; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -18,7 +18,7 @@ public class RedstoneUtil | ||||
|     @Deprecated | ||||
|     public static int getRedstoneOutput( World world, BlockPos pos, EnumFacing side ) | ||||
|     { | ||||
|         return world.getRedstonePower( pos, side ); | ||||
|         return world.getRedstonePower( pos, side.getOpposite() ); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 SquidDev
					SquidDev