mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-08-28 00:12:16 +00:00
fix peripherals
This commit is contained in:
parent
b95083c77e
commit
dcf5d59109
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||||
|
* Copyright Daniel Ratcliffe, 2011-2019. This API may be redistributed unmodified and in full only.
|
||||||
|
* For help using the API, and posting your mods, visit the forums at computercraft.info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package dan200.computercraft.api.peripheral;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link net.minecraft.block.entity.BlockEntity} which may act as a peripheral.
|
||||||
|
*
|
||||||
|
* If you need more complex capabilities (such as handling TEs not belonging to your mod), you should use {@link IPeripheralProvider}.
|
||||||
|
*/
|
||||||
|
public interface IPeripheralTile {
|
||||||
|
/**
|
||||||
|
* Get the peripheral on the given {@code side}.
|
||||||
|
*
|
||||||
|
* @param side The side to get the peripheral from.
|
||||||
|
* @return A peripheral, or {@code null} if there is not a peripheral here.
|
||||||
|
* @see IPeripheralProvider#getPeripheral(World, BlockPos, Direction)
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
IPeripheral getPeripheral(@Nonnull Direction side);
|
||||||
|
}
|
@ -6,6 +6,7 @@
|
|||||||
package dan200.computercraft.client.render;
|
package dan200.computercraft.client.render;
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
import dan200.computercraft.ComputerCraft;
|
||||||
import dan200.computercraft.client.FrameInfo;
|
import dan200.computercraft.client.FrameInfo;
|
||||||
import dan200.computercraft.client.gui.FixedWidthFontRenderer;
|
import dan200.computercraft.client.gui.FixedWidthFontRenderer;
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
@ -60,6 +61,7 @@ public class TileEntityMonitorRenderer extends BlockEntityRenderer<TileMonitor>
|
|||||||
public void render( @Nonnull TileMonitor monitor, float partialTicks, @Nonnull MatrixStack transform, @Nonnull VertexConsumerProvider renderer, int lightmapCoord, int overlayLight )
|
public void render( @Nonnull TileMonitor monitor, float partialTicks, @Nonnull MatrixStack transform, @Nonnull VertexConsumerProvider renderer, int lightmapCoord, int overlayLight )
|
||||||
{
|
{
|
||||||
// Render from the origin monitor
|
// Render from the origin monitor
|
||||||
|
// TODO Figure out why this is null.
|
||||||
ClientMonitor originTerminal = monitor.getClientMonitor();
|
ClientMonitor originTerminal = monitor.getClientMonitor();
|
||||||
|
|
||||||
if( originTerminal == null ) return;
|
if( originTerminal == null ) return;
|
||||||
|
@ -13,7 +13,7 @@ import java.util.function.Supplier;
|
|||||||
/**
|
/**
|
||||||
* A proxy object for computer objects, delegating to {@link IComputer} or {@link TileComputer} where appropriate.
|
* A proxy object for computer objects, delegating to {@link IComputer} or {@link TileComputer} where appropriate.
|
||||||
*/
|
*/
|
||||||
public final class ComputerProxy
|
public class ComputerProxy
|
||||||
{
|
{
|
||||||
private final Supplier<TileComputerBase> get;
|
private final Supplier<TileComputerBase> get;
|
||||||
|
|
||||||
|
@ -81,4 +81,18 @@ public class TileComputer extends TileComputerBase
|
|||||||
{
|
{
|
||||||
return new ContainerComputer( id, this );
|
return new ContainerComputer( id, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ComputerProxy createProxy() {
|
||||||
|
if (this.proxy == null) {
|
||||||
|
this.proxy = new ComputerProxy(() -> this) {
|
||||||
|
@Override
|
||||||
|
protected TileComputerBase getTile() {
|
||||||
|
return TileComputer.this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return this.proxy;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ package dan200.computercraft.shared.computer.blocks;
|
|||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.ComputerCraft;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.core.computer.ComputerSide;
|
import dan200.computercraft.core.computer.ComputerSide;
|
||||||
import dan200.computercraft.shared.BundledRedstone;
|
import dan200.computercraft.shared.BundledRedstone;
|
||||||
import dan200.computercraft.shared.Peripherals;
|
import dan200.computercraft.shared.Peripherals;
|
||||||
@ -46,7 +48,7 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public abstract class TileComputerBase extends TileGeneric implements IComputerTile, Tickable, Nameable, NamedScreenHandlerFactory, ExtendedScreenHandlerFactory
|
public abstract class TileComputerBase extends TileGeneric implements IComputerTile, Tickable, IPeripheralTile, Nameable, NamedScreenHandlerFactory, ExtendedScreenHandlerFactory
|
||||||
{
|
{
|
||||||
private static final String NBT_ID = "ComputerId";
|
private static final String NBT_ID = "ComputerId";
|
||||||
private static final String NBT_LABEL = "Label";
|
private static final String NBT_LABEL = "Label";
|
||||||
@ -406,6 +408,14 @@ public abstract class TileComputerBase extends TileGeneric implements IComputerT
|
|||||||
copy.m_instanceID = -1;
|
copy.m_instanceID = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IPeripheral getPeripheral(Direction side) {
|
||||||
|
return new ComputerPeripheral("computer", this.createProxy());
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract ComputerProxy createProxy();
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public Text getName()
|
public Text getName()
|
||||||
|
@ -10,6 +10,8 @@ import dan200.computercraft.api.filesystem.IWritableMount;
|
|||||||
import dan200.computercraft.api.media.IMedia;
|
import dan200.computercraft.api.media.IMedia;
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.shared.MediaProviders;
|
import dan200.computercraft.shared.MediaProviders;
|
||||||
import dan200.computercraft.shared.common.TileGeneric;
|
import dan200.computercraft.shared.common.TileGeneric;
|
||||||
import dan200.computercraft.shared.util.DefaultInventory;
|
import dan200.computercraft.shared.util.DefaultInventory;
|
||||||
@ -32,6 +34,7 @@ import net.minecraft.util.*;
|
|||||||
import net.minecraft.util.hit.BlockHitResult;
|
import net.minecraft.util.hit.BlockHitResult;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@ -39,7 +42,7 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public final class TileDiskDrive extends TileGeneric implements DefaultInventory, Tickable, Nameable, NamedScreenHandlerFactory
|
public final class TileDiskDrive extends TileGeneric implements DefaultInventory, Tickable, IPeripheralTile, Nameable, NamedScreenHandlerFactory
|
||||||
{
|
{
|
||||||
private static final String NBT_NAME = "CustomName";
|
private static final String NBT_NAME = "CustomName";
|
||||||
private static final String NBT_ITEM = "Item";
|
private static final String NBT_ITEM = "Item";
|
||||||
@ -288,6 +291,12 @@ public final class TileDiskDrive extends TileGeneric implements DefaultInventory
|
|||||||
setStack( 0, ItemStack.EMPTY );
|
setStack( 0, ItemStack.EMPTY );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IPeripheral getPeripheral(Direction side) {
|
||||||
|
return new DiskDrivePeripheral(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
ItemStack getDiskStack()
|
ItemStack getDiskStack()
|
||||||
{
|
{
|
||||||
|
@ -10,6 +10,8 @@ import dan200.computercraft.api.ComputerCraftAPI;
|
|||||||
import dan200.computercraft.api.network.wired.IWiredElement;
|
import dan200.computercraft.api.network.wired.IWiredElement;
|
||||||
import dan200.computercraft.api.network.wired.IWiredNode;
|
import dan200.computercraft.api.network.wired.IWiredNode;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.shared.ComputerCraftRegistry;
|
import dan200.computercraft.shared.ComputerCraftRegistry;
|
||||||
import dan200.computercraft.shared.command.CommandCopy;
|
import dan200.computercraft.shared.command.CommandCopy;
|
||||||
import dan200.computercraft.shared.common.TileGeneric;
|
import dan200.computercraft.shared.common.TileGeneric;
|
||||||
@ -36,7 +38,7 @@ import javax.annotation.Nullable;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class TileCable extends TileGeneric
|
public class TileCable extends TileGeneric implements IPeripheralTile
|
||||||
{
|
{
|
||||||
private static final String NBT_PERIPHERAL_ENABLED = "PeirpheralAccess";
|
private static final String NBT_PERIPHERAL_ENABLED = "PeirpheralAccess";
|
||||||
|
|
||||||
@ -313,24 +315,23 @@ public class TileCable extends TileGeneric
|
|||||||
BlockState state = getCachedState();
|
BlockState state = getCachedState();
|
||||||
World world = getWorld();
|
World world = getWorld();
|
||||||
BlockPos current = getPos();
|
BlockPos current = getPos();
|
||||||
for( Direction facing : DirectionUtil.FACINGS )
|
for( Direction facing : DirectionUtil.FACINGS ) {
|
||||||
{
|
BlockPos offset = current.offset(facing);
|
||||||
BlockPos offset = current.offset( facing );
|
if (!world.isChunkLoaded(offset)) continue;
|
||||||
if( !world.isChunkLoaded( offset ) ) continue;
|
|
||||||
|
|
||||||
IWiredElement element = ComputerCraftAPI.getWiredElementAt( world, offset, facing.getOpposite() );
|
IWiredElement element = ComputerCraftAPI.getWiredElementAt(world, offset, facing.getOpposite());
|
||||||
if( element != null ) continue;
|
if (element != null) continue;
|
||||||
|
|
||||||
|
// TODO Figure out why this crashes.
|
||||||
IWiredNode node = element.getNode();
|
IWiredNode node = element.getNode();
|
||||||
if( BlockCable.canConnectIn( state, facing ) )
|
if (node != null && m_node != null) {
|
||||||
{
|
if (BlockCable.canConnectIn(state, facing)) {
|
||||||
// If we can connect to it then do so
|
// If we can connect to it then do so
|
||||||
m_node.connectTo( node );
|
m_node.connectTo(node);
|
||||||
}
|
} else if (m_node.getNetwork() == node.getNetwork()) {
|
||||||
else if( m_node.getNetwork() == node.getNetwork() )
|
// Otherwise if we're on the same network then attempt to void it.
|
||||||
{
|
m_node.disconnectFrom(node);
|
||||||
// Otherwise if we're on the same network then attempt to void it.
|
}
|
||||||
m_node.disconnectFrom( node );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -356,6 +357,12 @@ public class TileCable extends TileGeneric
|
|||||||
return BlockCable.canConnectIn(this.getCachedState(), facing) ? this.m_cable : null;
|
return BlockCable.canConnectIn(this.getCachedState(), facing) ? this.m_cable : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IPeripheral getPeripheral(Direction side) {
|
||||||
|
return !this.m_destroyed && this.hasModem() && side == this.getDirection() ? this.m_modem : null;
|
||||||
|
}
|
||||||
|
|
||||||
private void togglePeripheralAccess()
|
private void togglePeripheralAccess()
|
||||||
{
|
{
|
||||||
if( !m_peripheralAccessAllowed )
|
if( !m_peripheralAccessAllowed )
|
||||||
|
@ -11,6 +11,8 @@ import dan200.computercraft.api.ComputerCraftAPI;
|
|||||||
import dan200.computercraft.api.network.wired.IWiredElement;
|
import dan200.computercraft.api.network.wired.IWiredElement;
|
||||||
import dan200.computercraft.api.network.wired.IWiredNode;
|
import dan200.computercraft.api.network.wired.IWiredNode;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.shared.command.CommandCopy;
|
import dan200.computercraft.shared.command.CommandCopy;
|
||||||
import dan200.computercraft.shared.common.TileGeneric;
|
import dan200.computercraft.shared.common.TileGeneric;
|
||||||
import dan200.computercraft.shared.peripheral.modem.ModemState;
|
import dan200.computercraft.shared.peripheral.modem.ModemState;
|
||||||
@ -37,7 +39,7 @@ import java.util.*;
|
|||||||
import static dan200.computercraft.shared.peripheral.modem.wired.BlockWiredModemFull.MODEM_ON;
|
import static dan200.computercraft.shared.peripheral.modem.wired.BlockWiredModemFull.MODEM_ON;
|
||||||
import static dan200.computercraft.shared.peripheral.modem.wired.BlockWiredModemFull.PERIPHERAL_ON;
|
import static dan200.computercraft.shared.peripheral.modem.wired.BlockWiredModemFull.PERIPHERAL_ON;
|
||||||
|
|
||||||
public class TileWiredModemFull extends TileGeneric
|
public class TileWiredModemFull extends TileGeneric implements IPeripheralTile
|
||||||
{
|
{
|
||||||
private static final String NBT_PERIPHERAL_ENABLED = "PeripheralAccess";
|
private static final String NBT_PERIPHERAL_ENABLED = "PeripheralAccess";
|
||||||
|
|
||||||
@ -341,33 +343,30 @@ public class TileWiredModemFull extends TileGeneric
|
|||||||
return m_element;
|
return m_element;
|
||||||
}
|
}
|
||||||
|
|
||||||
private WiredModemPeripheral getPeripheral( @Nonnull Direction side )
|
@Nonnull
|
||||||
{
|
@Override
|
||||||
|
public IPeripheral getPeripheral(Direction side) {
|
||||||
WiredModemPeripheral peripheral = modems[side.ordinal()];
|
WiredModemPeripheral peripheral = modems[side.ordinal()];
|
||||||
if( peripheral != null ) return peripheral;
|
if (peripheral != null) return peripheral;
|
||||||
|
|
||||||
WiredModemLocalPeripheral localPeripheral = m_peripherals[side.ordinal()];
|
WiredModemLocalPeripheral localPeripheral = m_peripherals[side.ordinal()];
|
||||||
return modems[side.ordinal()] = new WiredModemPeripheral( m_modemState, m_element )
|
return modems[side.ordinal()] = new WiredModemPeripheral(m_modemState, m_element) {
|
||||||
{
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
protected WiredModemLocalPeripheral getLocalPeripheral()
|
protected WiredModemLocalPeripheral getLocalPeripheral() {
|
||||||
{
|
|
||||||
return localPeripheral;
|
return localPeripheral;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public Vec3d getPosition()
|
public Vec3d getPosition() {
|
||||||
{
|
BlockPos pos = getPos().offset(side);
|
||||||
BlockPos pos = getPos().offset( side );
|
return new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5);
|
||||||
return new Vec3d( pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public Object getTarget()
|
public Object getTarget() {
|
||||||
{
|
|
||||||
return TileWiredModemFull.this;
|
return TileWiredModemFull.this;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
package dan200.computercraft.shared.peripheral.modem.wireless;
|
package dan200.computercraft.shared.peripheral.modem.wireless;
|
||||||
|
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.shared.common.TileGeneric;
|
import dan200.computercraft.shared.common.TileGeneric;
|
||||||
import dan200.computercraft.shared.peripheral.modem.ModemPeripheral;
|
import dan200.computercraft.shared.peripheral.modem.ModemPeripheral;
|
||||||
import dan200.computercraft.shared.peripheral.modem.ModemState;
|
import dan200.computercraft.shared.peripheral.modem.ModemState;
|
||||||
@ -20,7 +22,7 @@ import net.minecraft.world.World;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TileWirelessModem extends TileGeneric
|
public class TileWirelessModem extends TileGeneric implements IPeripheralTile
|
||||||
{
|
{
|
||||||
private static class Peripheral extends WirelessModemPeripheral
|
private static class Peripheral extends WirelessModemPeripheral
|
||||||
{
|
{
|
||||||
@ -119,6 +121,13 @@ public class TileWirelessModem extends TileGeneric
|
|||||||
modemDirection = getCachedState().get( BlockWirelessModem.FACING );
|
modemDirection = getCachedState().get( BlockWirelessModem.FACING );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IPeripheral getPeripheral(Direction side) {
|
||||||
|
this.refreshDirection();
|
||||||
|
return side == this.modemDirection ? this.modem : null;
|
||||||
|
}
|
||||||
|
|
||||||
private void updateBlockState()
|
private void updateBlockState()
|
||||||
{
|
{
|
||||||
boolean on = modem.getModemState().isOpen();
|
boolean on = modem.getModemState().isOpen();
|
||||||
|
@ -7,6 +7,9 @@ package dan200.computercraft.shared.peripheral.monitor;
|
|||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.ComputerCraft;
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
import dan200.computercraft.shared.common.ServerTerminal;
|
import dan200.computercraft.shared.common.ServerTerminal;
|
||||||
import dan200.computercraft.shared.common.TileGeneric;
|
import dan200.computercraft.shared.common.TileGeneric;
|
||||||
@ -32,7 +35,7 @@ import javax.annotation.Nullable;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class TileMonitor extends TileGeneric
|
public class TileMonitor extends TileGeneric implements IPeripheralTile
|
||||||
{
|
{
|
||||||
public static final double RENDER_BORDER = 2.0 / 16.0;
|
public static final double RENDER_BORDER = 2.0 / 16.0;
|
||||||
public static final double RENDER_MARGIN = 0.5 / 16.0;
|
public static final double RENDER_MARGIN = 0.5 / 16.0;
|
||||||
@ -134,6 +137,16 @@ public class TileMonitor extends TileGeneric
|
|||||||
m_height = nbt.getInt( NBT_HEIGHT );
|
m_height = nbt.getInt( NBT_HEIGHT );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IPeripheral getPeripheral(Direction side) {
|
||||||
|
this.createServerMonitor(); // Ensure the monitor is created before doing anything else.
|
||||||
|
if (this.peripheral == null) {
|
||||||
|
this.peripheral = new MonitorPeripheral(this);
|
||||||
|
}
|
||||||
|
return this.peripheral;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void blockTick()
|
public void blockTick()
|
||||||
{
|
{
|
||||||
@ -252,7 +265,7 @@ public class TileMonitor extends TileGeneric
|
|||||||
{
|
{
|
||||||
// If our index has changed then it's possible the origin monitor has changed. Thus
|
// If our index has changed then it's possible the origin monitor has changed. Thus
|
||||||
// we'll clear our cache. If we're the origin then we'll need to remove the glList as well.
|
// we'll clear our cache. If we're the origin then we'll need to remove the glList as well.
|
||||||
if(world.isClient() && oldXIndex == 0 && oldYIndex == 0 && m_clientMonitor != null) m_clientMonitor.destroy();
|
if(oldXIndex == 0 && oldYIndex == 0 && m_clientMonitor != null) m_clientMonitor.destroy();
|
||||||
m_clientMonitor = null;
|
m_clientMonitor = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
package dan200.computercraft.shared.peripheral.printer;
|
package dan200.computercraft.shared.peripheral.printer;
|
||||||
|
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
import dan200.computercraft.shared.common.TileGeneric;
|
import dan200.computercraft.shared.common.TileGeneric;
|
||||||
import dan200.computercraft.shared.media.items.ItemPrintout;
|
import dan200.computercraft.shared.media.items.ItemPrintout;
|
||||||
@ -25,13 +27,15 @@ import net.minecraft.text.TranslatableText;
|
|||||||
import net.minecraft.util.*;
|
import net.minecraft.util.*;
|
||||||
import net.minecraft.util.collection.DefaultedList;
|
import net.minecraft.util.collection.DefaultedList;
|
||||||
import net.minecraft.util.hit.BlockHitResult;
|
import net.minecraft.util.hit.BlockHitResult;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public final class TilePrinter extends TileGeneric implements DefaultSidedInventory, Nameable, NamedScreenHandlerFactory
|
public final class TilePrinter extends TileGeneric implements DefaultSidedInventory, IPeripheralTile, Nameable, NamedScreenHandlerFactory
|
||||||
{
|
{
|
||||||
private static final String NBT_NAME = "CustomName";
|
private static final String NBT_NAME = "CustomName";
|
||||||
private static final String NBT_PRINTING = "Printing";
|
private static final String NBT_PRINTING = "Printing";
|
||||||
@ -231,6 +235,12 @@ public final class TilePrinter extends TileGeneric implements DefaultSidedInvent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IPeripheral getPeripheral(Direction side) {
|
||||||
|
return new PrinterPeripheral(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
Terminal getCurrentPage()
|
Terminal getCurrentPage()
|
||||||
{
|
{
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
package dan200.computercraft.shared.peripheral.speaker;
|
package dan200.computercraft.shared.peripheral.speaker;
|
||||||
|
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.shared.common.TileGeneric;
|
import dan200.computercraft.shared.common.TileGeneric;
|
||||||
import net.minecraft.block.entity.BlockEntityType;
|
import net.minecraft.block.entity.BlockEntityType;
|
||||||
import net.minecraft.util.Tickable;
|
import net.minecraft.util.Tickable;
|
||||||
@ -17,7 +19,7 @@ import net.minecraft.world.World;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class TileSpeaker extends TileGeneric implements Tickable
|
public class TileSpeaker extends TileGeneric implements Tickable, IPeripheralTile
|
||||||
{
|
{
|
||||||
public static final int MIN_TICKS_BETWEEN_SOUNDS = 1;
|
public static final int MIN_TICKS_BETWEEN_SOUNDS = 1;
|
||||||
|
|
||||||
@ -35,6 +37,12 @@ public class TileSpeaker extends TileGeneric implements Tickable
|
|||||||
peripheral.update();
|
peripheral.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public IPeripheral getPeripheral(Direction side) {
|
||||||
|
return this.peripheral;
|
||||||
|
}
|
||||||
|
|
||||||
private static final class Peripheral extends SpeakerPeripheral
|
private static final class Peripheral extends SpeakerPeripheral
|
||||||
{
|
{
|
||||||
private final TileSpeaker speaker;
|
private final TileSpeaker speaker;
|
||||||
|
@ -8,6 +8,7 @@ package dan200.computercraft.shared.proxy;
|
|||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.ComputerCraft;
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.media.IMedia;
|
import dan200.computercraft.api.media.IMedia;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheralTile;
|
||||||
import dan200.computercraft.api.turtle.event.TurtleEvent;
|
import dan200.computercraft.api.turtle.event.TurtleEvent;
|
||||||
import dan200.computercraft.core.computer.MainThread;
|
import dan200.computercraft.core.computer.MainThread;
|
||||||
import dan200.computercraft.core.tracking.Tracking;
|
import dan200.computercraft.core.tracking.Tracking;
|
||||||
@ -20,12 +21,15 @@ import dan200.computercraft.shared.data.HasComputerIdLootCondition;
|
|||||||
import dan200.computercraft.shared.data.PlayerCreativeLootCondition;
|
import dan200.computercraft.shared.data.PlayerCreativeLootCondition;
|
||||||
import dan200.computercraft.shared.media.items.RecordMedia;
|
import dan200.computercraft.shared.media.items.RecordMedia;
|
||||||
import dan200.computercraft.shared.network.NetworkHandler;
|
import dan200.computercraft.shared.network.NetworkHandler;
|
||||||
|
import dan200.computercraft.shared.peripheral.commandblock.CommandBlockPeripheral;
|
||||||
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessNetwork;
|
import dan200.computercraft.shared.peripheral.modem.wireless.WirelessNetwork;
|
||||||
import dan200.computercraft.shared.turtle.FurnaceRefuelHandler;
|
import dan200.computercraft.shared.turtle.FurnaceRefuelHandler;
|
||||||
import dan200.computercraft.shared.util.TickScheduler;
|
import dan200.computercraft.shared.util.TickScheduler;
|
||||||
import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback;
|
import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback;
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
|
import net.minecraft.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.block.entity.CommandBlockBlockEntity;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.MusicDiscItem;
|
import net.minecraft.item.MusicDiscItem;
|
||||||
import net.minecraft.loot.condition.LootConditionType;
|
import net.minecraft.loot.condition.LootConditionType;
|
||||||
@ -60,6 +64,17 @@ public final class ComputerCraftProxyCommon
|
|||||||
|
|
||||||
private static void registerProviders()
|
private static void registerProviders()
|
||||||
{
|
{
|
||||||
|
ComputerCraftAPI.registerPeripheralProvider((world, pos, side) -> {
|
||||||
|
BlockEntity tile = world.getBlockEntity(pos);
|
||||||
|
return tile instanceof IPeripheralTile ? ((IPeripheralTile) tile).getPeripheral(side) : null;
|
||||||
|
});
|
||||||
|
|
||||||
|
ComputerCraftAPI.registerPeripheralProvider((world, pos, side) -> {
|
||||||
|
BlockEntity tile = world.getBlockEntity(pos);
|
||||||
|
return ComputerCraft.enableCommandBlock && tile instanceof CommandBlockBlockEntity ?
|
||||||
|
new CommandBlockPeripheral((CommandBlockBlockEntity) tile) : null;
|
||||||
|
});
|
||||||
|
|
||||||
// Register bundled power providers
|
// Register bundled power providers
|
||||||
ComputerCraftAPI.registerBundledRedstoneProvider( new DefaultBundledRedstoneProvider() );
|
ComputerCraftAPI.registerBundledRedstoneProvider( new DefaultBundledRedstoneProvider() );
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user