From 0bf13562b9f4fbda5b79d0f21d5e49bc18e77523 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sun, 8 Jul 2018 22:48:50 +0100 Subject: [PATCH] Provide a more direct way to get the related computer Effectively shift extracting the computer away from Plethora into CC:T. Ideally we wouldn't need this at all, but Plethora does some funky things with tick timings. See SquidDev-CC/plethora#125 --- .../computercraft/core/apis/ComputerAccess.java | 12 +++++++++++- .../computercraft/core/apis/IAPIEnvironment.java | 6 ++++-- .../computercraft/core/computer/IComputerOwned.java | 9 +++++++++ .../peripheral/modem/WiredModemPeripheral.java | 11 ++++++++++- 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/main/java/dan200/computercraft/core/computer/IComputerOwned.java diff --git a/src/main/java/dan200/computercraft/core/apis/ComputerAccess.java b/src/main/java/dan200/computercraft/core/apis/ComputerAccess.java index ae2b945ae..19ec347e1 100644 --- a/src/main/java/dan200/computercraft/core/apis/ComputerAccess.java +++ b/src/main/java/dan200/computercraft/core/apis/ComputerAccess.java @@ -3,14 +3,17 @@ import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.api.filesystem.IWritableMount; import dan200.computercraft.api.peripheral.IComputerAccess; +import dan200.computercraft.core.computer.Computer; +import dan200.computercraft.core.computer.IComputerOwned; import dan200.computercraft.core.filesystem.FileSystem; import dan200.computercraft.core.filesystem.FileSystemException; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.HashSet; import java.util.Set; -public abstract class ComputerAccess implements IComputerAccess +public abstract class ComputerAccess implements IComputerAccess, IComputerOwned { private final IAPIEnvironment m_environment; private final Set m_mounts = new HashSet<>(); @@ -133,6 +136,13 @@ public void queueEvent( @Nonnull final String event, final Object[] arguments ) m_environment.queueEvent( event, arguments ); } + @Nullable + @Override + public Computer getComputer() + { + return m_environment.getComputer(); + } + private String findFreeLocation( String desiredLoc ) { try diff --git a/src/main/java/dan200/computercraft/core/apis/IAPIEnvironment.java b/src/main/java/dan200/computercraft/core/apis/IAPIEnvironment.java index ff1204133..1aa7db87d 100644 --- a/src/main/java/dan200/computercraft/core/apis/IAPIEnvironment.java +++ b/src/main/java/dan200/computercraft/core/apis/IAPIEnvironment.java @@ -9,17 +9,19 @@ import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.core.computer.Computer; import dan200.computercraft.core.computer.IComputerEnvironment; +import dan200.computercraft.core.computer.IComputerOwned; import dan200.computercraft.core.filesystem.FileSystem; import dan200.computercraft.core.terminal.Terminal; import dan200.computercraft.core.tracking.TrackingField; -public interface IAPIEnvironment +public interface IAPIEnvironment extends IComputerOwned { interface IPeripheralChangeListener { void onPeripheralChanged( int side, IPeripheral newPeripheral ); } - + + @Override Computer getComputer(); int getComputerID(); IComputerEnvironment getComputerEnvironment(); diff --git a/src/main/java/dan200/computercraft/core/computer/IComputerOwned.java b/src/main/java/dan200/computercraft/core/computer/IComputerOwned.java new file mode 100644 index 000000000..3e1a00d6a --- /dev/null +++ b/src/main/java/dan200/computercraft/core/computer/IComputerOwned.java @@ -0,0 +1,9 @@ +package dan200.computercraft.core.computer; + +import javax.annotation.Nullable; + +public interface IComputerOwned +{ + @Nullable + Computer getComputer(); +} diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/WiredModemPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/WiredModemPeripheral.java index 56211c468..47536d1c3 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/WiredModemPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/WiredModemPeripheral.java @@ -10,6 +10,8 @@ import dan200.computercraft.api.network.wired.IWiredSender; import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.core.computer.Computer; +import dan200.computercraft.core.computer.IComputerOwned; import net.minecraft.world.World; import javax.annotation.Nonnull; @@ -273,7 +275,7 @@ private Object[] callMethodRemote( String remoteName, ILuaContext context, Strin throw new LuaException( "No peripheral: " + remoteName ); } - private static class RemotePeripheralWrapper implements IComputerAccess + private static class RemotePeripheralWrapper implements IComputerAccess, IComputerOwned { private final WiredModemElement m_element; private final IPeripheral m_peripheral; @@ -408,5 +410,12 @@ public IPeripheral getAvailablePeripheral( @Nonnull String name ) return m_element.getRemotePeripherals().get( name ); } } + + @Nullable + @Override + public Computer getComputer() + { + return m_computer instanceof IComputerOwned ? ((IComputerOwned) m_computer).getComputer() : null; + } } }