Skip to content

Commit

Permalink
Merge pull request #182 from SquidDev-CC/hotfix/redstone-checks
Browse files Browse the repository at this point in the history
Redstone behaviour tweaks
  • Loading branch information
SquidDev authored Apr 24, 2019
2 parents 2e0ef63 + 7071cc9 commit b867ada
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@
import dan200.computercraft.shared.util.RedstoneUtil;
import joptsimple.internal.Strings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockRedstoneWire;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
Expand All @@ -34,6 +37,7 @@
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.IWorldNameable;
import net.minecraft.world.World;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -124,16 +128,14 @@ else if( !player.isSneaking() )
@Override
public boolean getRedstoneConnectivity( EnumFacing side )
{
if( side == null ) return false;
ComputerSide localDir = remapLocalSide( DirectionUtil.toLocal( this, side.getOpposite() ) );
return !isRedstoneBlockedOnSide( localDir );
return true;
}

@Override
public int getRedstoneOutput( EnumFacing side )
{
ComputerSide localDir = remapLocalSide( DirectionUtil.toLocal( this, side ) );
if( !isRedstoneBlockedOnSide( localDir ) && world != null && !world.isRemote )
if( world != null && !world.isRemote )
{
ServerComputer computer = getServerComputer();
if( computer != null ) return computer.getRedstoneOutput( localDir );
Expand All @@ -144,15 +146,14 @@ public int getRedstoneOutput( EnumFacing side )
@Override
public boolean getBundledRedstoneConnectivity( @Nonnull EnumFacing side )
{
ComputerSide localDir = remapLocalSide( DirectionUtil.toLocal( this, side ) );
return !isRedstoneBlockedOnSide( localDir );
return true;
}

@Override
public int getBundledRedstoneOutput( @Nonnull EnumFacing side )
{
ComputerSide localDir = remapLocalSide( DirectionUtil.toLocal( this, side ) );
if( !isRedstoneBlockedOnSide( localDir ) && !world.isRemote )
if( !world.isRemote )
{
ServerComputer computer = getServerComputer();
if( computer != null ) return computer.getBundledRedstoneOutput( localDir );
Expand Down Expand Up @@ -259,11 +260,6 @@ protected boolean isPeripheralBlockedOnSide( ComputerSide localSide )
return false;
}

protected boolean isRedstoneBlockedOnSide( ComputerSide localSide )
{
return false;
}

protected ComputerSide remapLocalSide( ComputerSide localSide )
{
return localSide;
Expand All @@ -273,17 +269,36 @@ private void updateSideInput( ServerComputer computer, EnumFacing dir, BlockPos
{
EnumFacing offsetSide = dir.getOpposite();
ComputerSide localDir = remapLocalSide( DirectionUtil.toLocal( this, dir ) );
if( !isRedstoneBlockedOnSide( localDir ) )
{
computer.setRedstoneInput( localDir, getWorld().getRedstonePower( offset, dir ) );
computer.setBundledRedstoneInput( localDir, BundledRedstone.getOutput( getWorld(), offset, offsetSide ) );
}

computer.setRedstoneInput( localDir, getRedstoneInput( world, offset, dir ) );
computer.setBundledRedstoneInput( localDir, BundledRedstone.getOutput( getWorld(), offset, offsetSide ) );

if( !isPeripheralBlockedOnSide( localDir ) )
{
computer.setPeripheral( localDir, Peripherals.getPeripheral( getWorld(), offset, offsetSide ) );
}
}

/**
* Gets the redstone input for an adjacent block
*
* @param world The world we exist in
* @param pos The position of the neighbour
* @param side The side we are reading from
* @return The effective redstone power
* @see net.minecraft.block.BlockRedstoneDiode#calculateInputStrength(World, BlockPos, IBlockState)
*/
protected static int getRedstoneInput( World world, BlockPos pos, EnumFacing side )
{
int power = world.getRedstonePower( pos, side );
if( power >= 15 ) return power;

IBlockState neighbour = world.getBlockState( pos );
return neighbour.getBlock() == Blocks.REDSTONE_WIRE
? Math.max( power, neighbour.getValue( BlockRedstoneWire.POWER ) )
: power;
}

public void updateInput()
{
if( getWorld() == null || getWorld().isRemote ) return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -317,12 +317,6 @@ protected boolean isPeripheralBlockedOnSide( ComputerSide localSide )
return hasPeripheralUpgradeOnSide( localSide );
}

@Override
protected boolean isRedstoneBlockedOnSide( ComputerSide localSide )
{
return false;
}

// IDirectionalTile

@Override
Expand Down

0 comments on commit b867ada

Please sign in to comment.