Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Do not instantiate ServerComputer instances in the peripheral provider
Instead we create a ComputerProxy, which delegates methods to the ServerComputer or TileComputerBase, depending on which one exists.
- Loading branch information
Showing
with
137 additions
and 8 deletions.
- +2 −3 src/main/java/dan200/computercraft/shared/computer/blocks/ComputerPeripheral.java
- +87 −0 src/main/java/dan200/computercraft/shared/computer/blocks/ComputerProxy.java
- +19 −2 src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java
- +2 −0 src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java
- +2 −2 src/main/java/dan200/computercraft/shared/peripheral/common/DefaultPeripheralProvider.java
- +7 −1 src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java
- +18 −0 src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java
@@ -0,0 +1,87 @@ | ||
package dan200.computercraft.shared.computer.blocks; | ||
|
||
import dan200.computercraft.shared.computer.core.IComputer; | ||
|
||
/** | ||
* A proxy object for computer objects, delegating to {@link IComputer} or {@link TileComputer} where appropriate. | ||
*/ | ||
public abstract class ComputerProxy | ||
{ | ||
protected abstract TileComputerBase getTile(); | ||
|
||
public void turnOn() | ||
{ | ||
TileComputerBase tile = getTile(); | ||
IComputer computer = tile.getComputer(); | ||
if( computer == null ) | ||
{ | ||
tile.m_startOn = true; | ||
} | ||
else | ||
{ | ||
computer.turnOn(); | ||
} | ||
} | ||
|
||
public void shutdown() | ||
{ | ||
TileComputerBase tile = getTile(); | ||
IComputer computer = tile.getComputer(); | ||
if( computer == null ) | ||
{ | ||
tile.m_startOn = false; | ||
} | ||
else | ||
{ | ||
computer.shutdown(); | ||
} | ||
} | ||
|
||
public void reboot() | ||
{ | ||
TileComputerBase tile = getTile(); | ||
IComputer computer = tile.getComputer(); | ||
if( computer == null ) | ||
{ | ||
tile.m_startOn = true; | ||
} | ||
else | ||
{ | ||
computer.reboot(); | ||
} | ||
} | ||
|
||
public int assignID() | ||
{ | ||
TileComputerBase tile = getTile(); | ||
IComputer computer = tile.getComputer(); | ||
if( computer == null ) | ||
{ | ||
return tile.m_computerID; | ||
} | ||
else | ||
{ | ||
return computer.getID(); | ||
} | ||
} | ||
|
||
public boolean isOn() | ||
{ | ||
IComputer computer = getTile().getComputer(); | ||
return computer != null && computer.isOn(); | ||
} | ||
|
||
public String getLabel() | ||
{ | ||
TileComputerBase tile = getTile(); | ||
IComputer computer = tile.getComputer(); | ||
if( computer == null ) | ||
{ | ||
return tile.m_label; | ||
} | ||
else | ||
{ | ||
return computer.getLabel(); | ||
} | ||
} | ||
} |