mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-02-15 02:20:05 +00:00
Handle tile entity changes
This commit is contained in:
parent
58e6e9ea46
commit
5284b145f8
@ -46,7 +46,7 @@ public abstract class BlockGeneric extends Block implements
|
||||
public final void dropBlockAsItemWithChance( World world, BlockPos pos, IBlockState state, float chance, int fortune )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final List<ItemStack> getDrops( IBlockAccess world, BlockPos pos, IBlockState state, int fortune )
|
||||
{
|
||||
@ -107,7 +107,7 @@ public abstract class BlockGeneric extends Block implements
|
||||
{
|
||||
Block.spawnAsEntity( world, pos, stack );
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final void breakBlock( World world, BlockPos pos, IBlockState newState )
|
||||
{
|
||||
@ -162,6 +162,17 @@ public abstract class BlockGeneric extends Block implements
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isSideSolid( IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side )
|
||||
{
|
||||
|
@ -95,6 +95,10 @@ public abstract class TileGeneric extends TileEntity
|
||||
{
|
||||
}
|
||||
|
||||
public void onNeighbourTileEntityChange( BlockPos neighbour )
|
||||
{
|
||||
}
|
||||
|
||||
public boolean isSolidOnSide( int side )
|
||||
{
|
||||
return true;
|
||||
|
@ -196,6 +196,12 @@ public abstract class TileComputerBase extends TileGeneric
|
||||
updateInput();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighbourTileEntityChange( BlockPos neighbour )
|
||||
{
|
||||
updateInput( neighbour );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update()
|
||||
{
|
||||
@ -307,6 +313,21 @@ public abstract class TileComputerBase extends TileGeneric
|
||||
return localSide;
|
||||
}
|
||||
|
||||
private void updateSideInput( ServerComputer computer, EnumFacing dir, BlockPos offset )
|
||||
{
|
||||
EnumFacing offsetSide = dir.getOpposite();
|
||||
int localDir = remapLocalSide( DirectionUtil.toLocal( this, dir ) );
|
||||
if( !isRedstoneBlockedOnSide( localDir ) )
|
||||
{
|
||||
computer.setRedstoneInput( localDir, RedstoneUtil.getRedstoneOutput( worldObj, offset, offsetSide ) );
|
||||
computer.setBundledRedstoneInput( localDir, RedstoneUtil.getBundledRedstoneOutput( worldObj, offset, offsetSide ) );
|
||||
}
|
||||
if( !isPeripheralBlockedOnSide( localDir ) )
|
||||
{
|
||||
computer.setPeripheral( localDir, PeripheralUtil.getPeripheral( worldObj, offset, offsetSide ) );
|
||||
}
|
||||
}
|
||||
|
||||
public void updateInput()
|
||||
{
|
||||
if( worldObj == null || worldObj.isRemote )
|
||||
@ -315,6 +336,24 @@ public abstract class TileComputerBase extends TileGeneric
|
||||
}
|
||||
|
||||
// Update redstone and peripherals
|
||||
ServerComputer computer = getServerComputer();
|
||||
if( computer != null )
|
||||
{
|
||||
BlockPos pos = computer.getPosition();
|
||||
for( EnumFacing dir : EnumFacing.VALUES )
|
||||
{
|
||||
updateSideInput( computer, dir, pos.offset( dir ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateInput( BlockPos neighbour )
|
||||
{
|
||||
if( worldObj == null || worldObj.isRemote )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ServerComputer computer = getServerComputer();
|
||||
if( computer != null )
|
||||
{
|
||||
@ -322,16 +361,10 @@ public abstract class TileComputerBase extends TileGeneric
|
||||
for( EnumFacing dir : EnumFacing.VALUES )
|
||||
{
|
||||
BlockPos offset = pos.offset( dir );
|
||||
EnumFacing offsetSide = dir.getOpposite();
|
||||
int localDir = remapLocalSide( DirectionUtil.toLocal( this, dir ) );
|
||||
if( !isRedstoneBlockedOnSide( localDir ) )
|
||||
if ( offset.equals( neighbour ) )
|
||||
{
|
||||
computer.setRedstoneInput( localDir, RedstoneUtil.getRedstoneOutput( worldObj, offset, offsetSide ) );
|
||||
computer.setBundledRedstoneInput( localDir, RedstoneUtil.getBundledRedstoneOutput( worldObj, offset, offsetSide ) );
|
||||
}
|
||||
if( !isPeripheralBlockedOnSide( localDir ) )
|
||||
{
|
||||
computer.setPeripheral( localDir, PeripheralUtil.getPeripheral( worldObj, offset, offsetSide ) );
|
||||
updateSideInput( computer, dir, offset );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user