mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-10-26 11:27:38 +00:00
Merge branch 'master' into mc-1.13.x
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
|
||||
package dan200.computercraft.shared;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
import dan200.computercraft.api.redstone.IBundledRedstoneProvider;
|
||||
import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider;
|
||||
@@ -16,6 +15,7 @@ import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public final class BundledRedstone
|
||||
@@ -26,7 +26,7 @@ public final class BundledRedstone
|
||||
|
||||
public static synchronized void register( @Nonnull IBundledRedstoneProvider provider )
|
||||
{
|
||||
Preconditions.checkNotNull( provider, "provider cannot be null" );
|
||||
Objects.requireNonNull( provider, "provider cannot be null" );
|
||||
providers.add( provider );
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.core.apis.IAPIEnvironment;
|
||||
import dan200.computercraft.core.computer.Computer;
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.core.tracking.ComputerTracker;
|
||||
import dan200.computercraft.core.tracking.Tracking;
|
||||
import dan200.computercraft.core.tracking.TrackingContext;
|
||||
@@ -118,12 +118,12 @@ public final class CommandComputerCraft
|
||||
table.row( header( "Position" ), linkPosition( context.getSource(), computer ) );
|
||||
table.row( header( "Family" ), text( computer.getFamily().toString() ) );
|
||||
|
||||
for( int i = 0; i < 6; i++ )
|
||||
for( ComputerSide side : ComputerSide.values() )
|
||||
{
|
||||
IPeripheral peripheral = computer.getPeripheral( i );
|
||||
IPeripheral peripheral = computer.getPeripheral( side );
|
||||
if( peripheral != null )
|
||||
{
|
||||
table.row( header( "Peripheral " + IAPIEnvironment.SIDE_NAMES[i] ), text( peripheral.getType() ) );
|
||||
table.row( header( "Peripheral " + side.getName() ), text( peripheral.getType() ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ public final class Exceptions
|
||||
public static final DynamicCommandExceptionType COMPUTER_ARG_NONE = translated1( "argument.computercraft.computer.no_matching" );
|
||||
public static final Dynamic2CommandExceptionType COMPUTER_ARG_MANY = translated2( "argument.computercraft.computer.many_matching" );
|
||||
|
||||
public static final DynamicCommandExceptionType TRACKING_FIELD_ARG_NONE = translated1( "argument.computercraft.tacking_field.no_field" );
|
||||
public static final DynamicCommandExceptionType TRACKING_FIELD_ARG_NONE = translated1( "argument.computercraft.tracking_field.no_field" );
|
||||
|
||||
static final SimpleCommandExceptionType NOT_TRACKING_EXCEPTION = translated( "commands.computercraft.track.stop.not_enabled" );
|
||||
static final SimpleCommandExceptionType NO_TIMINGS_EXCEPTION = translated( "commands.computercraft.track.dump.no_timings" );
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
package dan200.computercraft.shared.computer.blocks;
|
||||
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.shared.common.BlockGeneric;
|
||||
import dan200.computercraft.shared.common.IBundledRedstoneBlock;
|
||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||
@@ -65,9 +66,8 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc
|
||||
ServerComputer computer = computerEntity.getServerComputer();
|
||||
if( computer == null ) return 0;
|
||||
|
||||
EnumFacing localSide = computerEntity.remapToLocalSide( incomingSide.getOpposite() );
|
||||
return computerEntity.isRedstoneBlockedOnSide( localSide ) ? 0 :
|
||||
computer.getRedstoneOutput( localSide.getIndex() );
|
||||
ComputerSide localSide = computerEntity.remapToLocalSide( incomingSide.getOpposite() );
|
||||
return computerEntity.isRedstoneBlockedOnSide( localSide ) ? 0 : computer.getRedstoneOutput( localSide );
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@@ -105,9 +105,8 @@ public abstract class BlockComputerBase<T extends TileComputerBase> extends Bloc
|
||||
ServerComputer computer = computerEntity.getServerComputer();
|
||||
if( computer == null ) return 0;
|
||||
|
||||
EnumFacing localSide = computerEntity.remapToLocalSide( side );
|
||||
return computerEntity.isRedstoneBlockedOnSide( localSide ) ? 0 :
|
||||
computer.getBundledRedstoneOutput( localSide.getIndex() );
|
||||
ComputerSide localSide = computerEntity.remapToLocalSide( side );
|
||||
return computerEntity.isRedstoneBlockedOnSide( localSide ) ? 0 : computer.getBundledRedstoneOutput( localSide );
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
package dan200.computercraft.shared.computer.blocks;
|
||||
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||
import dan200.computercraft.shared.computer.core.ComputerState;
|
||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||
@@ -95,8 +96,12 @@ public class TileComputer extends TileComputerBase
|
||||
}
|
||||
|
||||
@Override
|
||||
protected EnumFacing remapLocalSide( EnumFacing localSide )
|
||||
protected ComputerSide remapLocalSide( ComputerSide localSide )
|
||||
{
|
||||
return localSide.getAxis() == EnumFacing.Axis.X ? localSide.getOpposite() : localSide;
|
||||
// For legacy reasons, computers invert the meaning of "left" and "right". A computer's front is facing
|
||||
// towards you, but a turtle's front is facing the other way.
|
||||
if( localSide == ComputerSide.RIGHT ) return ComputerSide.LEFT;
|
||||
if( localSide == ComputerSide.LEFT ) return ComputerSide.RIGHT;
|
||||
return localSide;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ package dan200.computercraft.shared.computer.blocks;
|
||||
import dan200.computercraft.ComputerCraft;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.shared.BundledRedstone;
|
||||
import dan200.computercraft.shared.Peripherals;
|
||||
import dan200.computercraft.shared.common.TileGeneric;
|
||||
@@ -198,24 +199,24 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
|
||||
m_on = m_startOn = nbt.getBoolean( NBT_ON );
|
||||
}
|
||||
|
||||
protected boolean isPeripheralBlockedOnSide( EnumFacing localSide )
|
||||
protected boolean isPeripheralBlockedOnSide( ComputerSide localSide )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean isRedstoneBlockedOnSide( EnumFacing localSide )
|
||||
protected boolean isRedstoneBlockedOnSide( ComputerSide localSide )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
protected abstract EnumFacing getDirection();
|
||||
|
||||
protected EnumFacing remapToLocalSide( EnumFacing globalSide )
|
||||
protected ComputerSide remapToLocalSide( EnumFacing globalSide )
|
||||
{
|
||||
return remapLocalSide( DirectionUtil.toLocal( getDirection(), globalSide ) );
|
||||
}
|
||||
|
||||
protected EnumFacing remapLocalSide( EnumFacing localSide )
|
||||
protected ComputerSide remapLocalSide( ComputerSide localSide )
|
||||
{
|
||||
return localSide;
|
||||
}
|
||||
@@ -223,15 +224,15 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
|
||||
private void updateSideInput( ServerComputer computer, EnumFacing dir, BlockPos offset )
|
||||
{
|
||||
EnumFacing offsetSide = dir.getOpposite();
|
||||
EnumFacing localDir = remapToLocalSide( dir );
|
||||
ComputerSide localDir = remapToLocalSide( dir );
|
||||
if( !isRedstoneBlockedOnSide( localDir ) )
|
||||
{
|
||||
computer.setRedstoneInput( localDir.getIndex(), getWorld().getRedstonePower( offset, dir ) );
|
||||
computer.setBundledRedstoneInput( localDir.getIndex(), BundledRedstone.getOutput( getWorld(), offset, offsetSide ) );
|
||||
computer.setRedstoneInput( localDir, getWorld().getRedstonePower( offset, dir ) );
|
||||
computer.setBundledRedstoneInput( localDir, BundledRedstone.getOutput( getWorld(), offset, offsetSide ) );
|
||||
}
|
||||
if( !isPeripheralBlockedOnSide( localDir ) )
|
||||
{
|
||||
computer.setPeripheral( localDir.getIndex(), Peripherals.getPeripheral( getWorld(), offset, offsetSide ) );
|
||||
computer.setPeripheral( localDir, Peripherals.getPeripheral( getWorld(), offset, offsetSide ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,7 +258,6 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
|
||||
ServerComputer computer = getServerComputer();
|
||||
if( computer == null ) return;
|
||||
|
||||
// Find the appropriate side and update.
|
||||
BlockPos pos = computer.getPosition();
|
||||
for( EnumFacing dir : DirectionUtil.FACINGS )
|
||||
{
|
||||
@@ -268,6 +268,9 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If the position is not any adjacent one, update all inputs.
|
||||
updateInput();
|
||||
}
|
||||
|
||||
public void updateOutput()
|
||||
|
||||
@@ -14,6 +14,7 @@ import dan200.computercraft.api.lua.ILuaAPI;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.core.apis.IAPIEnvironment;
|
||||
import dan200.computercraft.core.computer.Computer;
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.core.computer.IComputerEnvironment;
|
||||
import dan200.computercraft.shared.common.ServerTerminal;
|
||||
import dan200.computercraft.shared.network.NetworkHandler;
|
||||
@@ -261,22 +262,22 @@ public class ServerComputer extends ServerTerminal implements IComputer, IComput
|
||||
m_computer.queueEvent( event, arguments );
|
||||
}
|
||||
|
||||
public int getRedstoneOutput( int side )
|
||||
public int getRedstoneOutput( ComputerSide side )
|
||||
{
|
||||
return m_computer.getEnvironment().getExternalRedstoneOutput( side );
|
||||
}
|
||||
|
||||
public void setRedstoneInput( int side, int level )
|
||||
public void setRedstoneInput( ComputerSide side, int level )
|
||||
{
|
||||
m_computer.getEnvironment().setRedstoneInput( side, level );
|
||||
}
|
||||
|
||||
public int getBundledRedstoneOutput( int side )
|
||||
public int getBundledRedstoneOutput( ComputerSide side )
|
||||
{
|
||||
return m_computer.getEnvironment().getExternalBundledRedstoneOutput( side );
|
||||
}
|
||||
|
||||
public void setBundledRedstoneInput( int side, int combination )
|
||||
public void setBundledRedstoneInput( ComputerSide side, int combination )
|
||||
{
|
||||
m_computer.getEnvironment().setBundledRedstoneInput( side, combination );
|
||||
}
|
||||
@@ -286,12 +287,12 @@ public class ServerComputer extends ServerTerminal implements IComputer, IComput
|
||||
m_computer.addApi( api );
|
||||
}
|
||||
|
||||
public void setPeripheral( int side, IPeripheral peripheral )
|
||||
public void setPeripheral( ComputerSide side, IPeripheral peripheral )
|
||||
{
|
||||
m_computer.getEnvironment().setPeripheral( side, peripheral );
|
||||
}
|
||||
|
||||
public IPeripheral getPeripheral( int side )
|
||||
public IPeripheral getPeripheral( ComputerSide side )
|
||||
{
|
||||
return m_computer.getEnvironment().getPeripheral( side );
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import dan200.computercraft.ComputerCraft;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.api.pocket.IPocketAccess;
|
||||
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.shared.common.IColouredItem;
|
||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||
@@ -123,14 +124,14 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces
|
||||
public void invalidatePeripheral()
|
||||
{
|
||||
IPeripheral peripheral = m_upgrade == null ? null : m_upgrade.createPeripheral( this );
|
||||
setPeripheral( 2, peripheral );
|
||||
setPeripheral( ComputerSide.BACK, peripheral );
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Map<ResourceLocation, IPeripheral> getUpgrades()
|
||||
{
|
||||
return m_upgrade == null ? Collections.emptyMap() : Collections.singletonMap( m_upgrade.getUpgradeID(), getPeripheral( 2 ) );
|
||||
return m_upgrade == null ? Collections.emptyMap() : Collections.singletonMap( m_upgrade.getUpgradeID(), getPeripheral( ComputerSide.BACK ) );
|
||||
}
|
||||
|
||||
public IPocketUpgrade getUpgrade()
|
||||
|
||||
@@ -12,6 +12,7 @@ import dan200.computercraft.api.ComputerCraftAPI;
|
||||
import dan200.computercraft.api.filesystem.IMount;
|
||||
import dan200.computercraft.api.media.IMedia;
|
||||
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.shared.PocketUpgrades;
|
||||
import dan200.computercraft.shared.common.IColouredItem;
|
||||
import dan200.computercraft.shared.computer.core.ClientComputer;
|
||||
@@ -120,7 +121,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia, I
|
||||
// Update pocket upgrade
|
||||
if( upgrade != null )
|
||||
{
|
||||
upgrade.update( computer, computer.getPeripheral( 2 ) );
|
||||
upgrade.update( computer, computer.getPeripheral( ComputerSide.BACK ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -149,7 +150,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia, I
|
||||
if( upgrade != null )
|
||||
{
|
||||
computer.updateValues( player, stack, upgrade );
|
||||
stop = upgrade.onRightClick( world, computer, computer.getPeripheral( 2 ) );
|
||||
stop = upgrade.onRightClick( world, computer, computer.getPeripheral( ComputerSide.BACK ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import dan200.computercraft.api.turtle.ITurtleAccess;
|
||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||
import dan200.computercraft.api.turtle.TurtleSide;
|
||||
import dan200.computercraft.shared.common.TileGeneric;
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.shared.computer.blocks.ComputerPeripheral;
|
||||
import dan200.computercraft.shared.computer.blocks.ComputerProxy;
|
||||
import dan200.computercraft.shared.computer.blocks.TileComputerBase;
|
||||
@@ -324,13 +325,13 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isPeripheralBlockedOnSide( EnumFacing localSide )
|
||||
protected boolean isPeripheralBlockedOnSide( ComputerSide localSide )
|
||||
{
|
||||
return hasPeripheralUpgradeOnSide( localSide );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isRedstoneBlockedOnSide( EnumFacing localSide )
|
||||
protected boolean isRedstoneBlockedOnSide( ComputerSide localSide )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -568,15 +569,15 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default
|
||||
|
||||
// Privates
|
||||
|
||||
private boolean hasPeripheralUpgradeOnSide( EnumFacing side )
|
||||
private boolean hasPeripheralUpgradeOnSide( ComputerSide side )
|
||||
{
|
||||
ITurtleUpgrade upgrade;
|
||||
switch( side )
|
||||
{
|
||||
case WEST:
|
||||
case RIGHT:
|
||||
upgrade = getUpgrade( TurtleSide.Right );
|
||||
break;
|
||||
case EAST:
|
||||
case LEFT:
|
||||
upgrade = getUpgrade( TurtleSide.Left );
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -13,6 +13,7 @@ import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.lua.LuaException;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.api.turtle.*;
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import dan200.computercraft.shared.TurtleUpgrades;
|
||||
import dan200.computercraft.shared.computer.blocks.ComputerProxy;
|
||||
import dan200.computercraft.shared.computer.blocks.TileComputerBase;
|
||||
@@ -730,15 +731,15 @@ public class TurtleBrain implements ITurtleAccess
|
||||
: 0.0f;
|
||||
}
|
||||
|
||||
private static int toDirection( TurtleSide side )
|
||||
private static ComputerSide toDirection( TurtleSide side )
|
||||
{
|
||||
switch( side )
|
||||
{
|
||||
case Left:
|
||||
return 5;
|
||||
return ComputerSide.LEFT;
|
||||
case Right:
|
||||
default:
|
||||
return 4;
|
||||
return ComputerSide.RIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
package dan200.computercraft.shared.util;
|
||||
|
||||
import dan200.computercraft.core.computer.ComputerSide;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
public final class DirectionUtil
|
||||
@@ -14,28 +15,16 @@ public final class DirectionUtil
|
||||
|
||||
public static final EnumFacing[] FACINGS = EnumFacing.values();
|
||||
|
||||
public static EnumFacing toLocal( EnumFacing front, EnumFacing relative )
|
||||
public static ComputerSide toLocal( EnumFacing front, EnumFacing dir )
|
||||
{
|
||||
if( relative.getAxis() == EnumFacing.Axis.Y ) return relative;
|
||||
|
||||
if( front.getAxis() == EnumFacing.Axis.Y ) front = EnumFacing.NORTH;
|
||||
|
||||
if( relative == front )
|
||||
{
|
||||
return EnumFacing.SOUTH;
|
||||
}
|
||||
else if( relative == front.getOpposite() )
|
||||
{
|
||||
return EnumFacing.NORTH;
|
||||
}
|
||||
else if( relative == front.rotateYCCW() )
|
||||
{
|
||||
return EnumFacing.EAST;
|
||||
}
|
||||
else
|
||||
{
|
||||
return EnumFacing.WEST;
|
||||
}
|
||||
if( dir == front ) return ComputerSide.FRONT;
|
||||
if( dir == front.getOpposite() ) return ComputerSide.BACK;
|
||||
if( dir == front.rotateYCCW() ) return ComputerSide.LEFT;
|
||||
if( dir == front.rotateY() ) return ComputerSide.RIGHT;
|
||||
if( dir == EnumFacing.UP ) return ComputerSide.TOP;
|
||||
return ComputerSide.BOTTOM;
|
||||
}
|
||||
|
||||
public static float toPitchAngle( EnumFacing dir )
|
||||
|
||||
@@ -10,22 +10,20 @@ import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.event.ForgeEventFactory;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
public final class RedstoneUtil
|
||||
{
|
||||
public static void propagateRedstoneOutput( World world, BlockPos pos, EnumFacing side )
|
||||
{
|
||||
// Propagate ordinary output
|
||||
// Propagate ordinary output. See BlockRedstoneDiode.notifyNeighbors
|
||||
IBlockState block = world.getBlockState( pos );
|
||||
if( ForgeEventFactory.onNeighborNotify( world, pos, block, EnumSet.of( side ), false ).isCanceled() ) return;
|
||||
|
||||
BlockPos neighbourPos = pos.offset( side );
|
||||
IBlockState neighbour = world.getBlockState( neighbourPos );
|
||||
if( !neighbour.isAir( world, pos ) )
|
||||
{
|
||||
world.neighborChanged( neighbourPos, block.getBlock(), pos );
|
||||
if( neighbour.getBlock().isNormalCube( neighbour, world, neighbourPos ) )
|
||||
{
|
||||
world.notifyNeighborsOfStateExcept( neighbourPos, block.getBlock(), side.getOpposite() );
|
||||
}
|
||||
}
|
||||
world.neighborChanged( neighbourPos, block.getBlock(), pos );
|
||||
world.notifyNeighborsOfStateExcept( neighbourPos, block.getBlock(), side.getOpposite() );
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user