package com.austinv11.peripheralsplusplus.turtles.peripherals;
import com.austinv11.peripheralsplusplus.reference.Config;
import com.austinv11.peripheralsplusplus.utils.Util;
import dan200.computercraft.api.lua.ILuaContext;
import dan200.computercraft.api.lua.LuaException;
import dan200.computercraft.api.peripheral.IComputerAccess;
import dan200.computercraft.api.peripheral.IPeripheral;
import dan200.computercraft.api.turtle.ITurtleAccess;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSign;
import net.minecraft.tileentity.TileEntitySign;
import net.minecraft.util.Facing;
public class PeripheralSignReader extends MountedPeripheral
{
private ITurtleAccess turtle;
public PeripheralSignReader(ITurtleAccess turtle) {
this.turtle = turtle;
}
@Override
public String getType() {
return "signReader";
}
@Override
public String[] getMethodNames() {
return new String[]{"read", "readUp", "readDown"};
}
@Override
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException {
if (!Config.enableReaderTurtle)
throw new LuaException("Sign Reading Turtles have been disabled");
if (method == 0) {
int blockX = turtle.getPosition().posX+ Facing.offsetsXForSide[turtle.getDirection()];
int blockY = turtle.getPosition().posY+Facing.offsetsYForSide[turtle.getDirection()];
int blockZ = turtle.getPosition().posZ+Facing.offsetsZForSide[turtle.getDirection()];
Block blockFacing = turtle.getWorld().getBlock(blockX, blockY, blockZ);
if (blockFacing instanceof BlockSign) {
TileEntitySign tileEntitySign = (TileEntitySign) turtle.getWorld().getTileEntity(blockX, blockY, blockZ);
return new Object[] {Util.arrayToMap(tileEntitySign.signText)};
}
} else if (method == 1) {
int blockX = turtle.getPosition().posX;
int blockY = turtle.getPosition().posY+1;
int blockZ = turtle.getPosition().posZ;
Block blockFacing = turtle.getWorld().getBlock(blockX, blockY, blockZ);
if (blockFacing instanceof BlockSign) {
TileEntitySign tileEntitySign = (TileEntitySign) turtle.getWorld().getTileEntity(blockX, blockY, blockZ);
return new Object[] {Util.arrayToMap(tileEntitySign.signText)};
}
} else if (method == 2) {
int blockX = turtle.getPosition().posX;
int blockY = turtle.getPosition().posY-1;
int blockZ = turtle.getPosition().posZ;
Block blockFacing = turtle.getWorld().getBlock(blockX, blockY, blockZ);
if (blockFacing instanceof BlockSign) {
TileEntitySign tileEntitySign = (TileEntitySign) turtle.getWorld().getTileEntity(blockX, blockY, blockZ);
return new Object[]{Util.arrayToMap(tileEntitySign.signText)};
}
}
return new Object[0];
}
@Override
public boolean equals(IPeripheral other) {
return (other == this);
}
}