Search in sources :

Example 1 with IEventSensorSetting

use of pneumaticCraft.api.universalSensor.IEventSensorSetting in project PneumaticCraft by MineMaarten.

the class TileEntityUniversalSensor method addLuaMethods.

@Override
public void addLuaMethods() {
    super.addLuaMethods();
    luaMethods.add(new LuaMethod("getSensorNames") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 0) {
                return SensorHandler.instance().getSensorNames();
            } else {
                throw new IllegalArgumentException("getSensorNames doesn't accept any arguments!");
            }
        }
    });
    luaMethods.add(new LuaMethod("setSensor") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 1) {
                ISensorSetting sensor = null;
                if (args[0] instanceof String) {
                    sensor = SensorHandler.instance().getSensorForName((String) args[0]);
                } else {
                    sensor = SensorHandler.instance().getSensorByIndex(((Double) args[0]).intValue() - 1);
                }
                if (sensor != null)
                    return new Object[] { setSensorSetting(sensor) };
                throw new IllegalArgumentException("Invalid sensor name/index: " + args[0]);
            } else if (args.length == 0) {
                setSensorSetting("");
                return new Object[] { true };
            } else {
                throw new IllegalArgumentException("setSensor needs one argument(a number as index, or a sensor name).");
            }
        }
    });
    luaMethods.add(new LuaMethod("getSensor") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 0) {
                ISensorSetting curSensor = SensorHandler.instance().getSensorFromPath(getSensorSetting());
                return curSensor == null ? null : new Object[] { getSensorSetting().substring(getSensorSetting().lastIndexOf('/') + 1) };
            } else {
                throw new IllegalArgumentException("getSensor doesn't take any arguments!");
            }
        }
    });
    luaMethods.add(new LuaMethod("setTextfield") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 1) {
                setText(0, (String) args[0]);
                return null;
            } else {
                throw new IllegalArgumentException("setTextfield takes one argument (string)");
            }
        }
    });
    luaMethods.add(new LuaMethod("getTextfield") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 0) {
                return new Object[] { getText(0) };
            } else {
                throw new IllegalArgumentException("getTextfield takes no arguments");
            }
        }
    });
    luaMethods.add(new LuaMethod("isSensorEventBased") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 0) {
                return new Object[] { SensorHandler.instance().getSensorFromPath(getSensorSetting()) instanceof IEventSensorSetting };
            } else {
                throw new IllegalArgumentException("isSensorEventBased takes no arguments");
            }
        }
    });
    luaMethods.add(new LuaMethod("getSensorValue") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 0) {
                ISensorSetting s = SensorHandler.instance().getSensorFromPath(getSensorSetting());
                if (s instanceof IPollSensorSetting) {
                    requestPollPullEvent = true;
                    return new Object[] { redstoneStrength };
                } else if (s != null) {
                    throw new IllegalArgumentException("The selected sensor is pull event based. You can't poll the value.");
                } else {
                    throw new IllegalArgumentException("There's no sensor selected!");
                }
            } else {
                throw new IllegalArgumentException("getSensorValue takes no arguments");
            }
        }
    });
    luaMethods.add(new LuaConstant("getMinWorkingPressure", PneumaticValues.MIN_PRESSURE_UNIVERSAL_SENSOR));
    luaMethods.add(new LuaMethod("setGPSToolCoordinate") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 4) {
                //minus one, as lua is 1-oriented.
                ItemStack stack = getStackInSlot(((Double) args[0]).intValue() - 1);
                if (stack != null && stack.getItem() == Itemss.GPSTool) {
                    ItemGPSTool.setGPSLocation(stack, ((Double) args[1]).intValue(), ((Double) args[2]).intValue(), ((Double) args[3]).intValue());
                    return new Object[] { true };
                } else {
                    return new Object[] { false };
                }
            } else {
                throw new IllegalArgumentException("setGPSToolCoordinate needs 4 arguments: slot, x, y, z");
            }
        }
    });
    luaMethods.add(new LuaMethod("getGPSToolCoordinate") {

        @Override
        public Object[] call(Object[] args) throws Exception {
            if (args.length == 1) {
                //minus one, as lua is 1-oriented.
                ItemStack stack = getStackInSlot(((Double) args[0]).intValue() - 1);
                if (stack != null && stack.getItem() == Itemss.GPSTool) {
                    ChunkPosition pos = ItemGPSTool.getGPSLocation(stack);
                    if (pos != null) {
                        return new Object[] { pos.chunkPosX, pos.chunkPosY, pos.chunkPosZ };
                    } else {
                        return new Object[] { 0, 0, 0 };
                    }
                } else {
                    return null;
                }
            } else {
                throw new IllegalArgumentException("setGPSToolCoordinate needs 1 argument: slot");
            }
        }
    });
}
Also used : IEventSensorSetting(pneumaticCraft.api.universalSensor.IEventSensorSetting) IPollSensorSetting(pneumaticCraft.api.universalSensor.IPollSensorSetting) ChunkPosition(net.minecraft.world.ChunkPosition) ISensorSetting(pneumaticCraft.api.universalSensor.ISensorSetting) LuaMethod(pneumaticCraft.common.thirdparty.computercraft.LuaMethod) LuaConstant(pneumaticCraft.common.thirdparty.computercraft.LuaConstant) ItemStack(net.minecraft.item.ItemStack)

Example 2 with IEventSensorSetting

use of pneumaticCraft.api.universalSensor.IEventSensorSetting in project PneumaticCraft by MineMaarten.

the class TileEntityUniversalSensor method onEvent.

public void onEvent(Event event) {
    ISensorSetting sensor = SensorHandler.instance().getSensorFromPath(sensorSetting);
    if (sensor != null && sensor instanceof IEventSensorSetting && getPressure(ForgeDirection.UNKNOWN) > PneumaticValues.MIN_PRESSURE_UNIVERSAL_SENSOR) {
        int newRedstoneStrength = ((IEventSensorSetting) sensor).emitRedstoneOnEvent(event, this, getRange(), sensorGuiText);
        if (newRedstoneStrength != 0)
            eventTimer = ((IEventSensorSetting) sensor).getRedstonePulseLength();
        if (invertedRedstone)
            newRedstoneStrength = 15 - newRedstoneStrength;
        if (eventTimer > 0 && ThirdPartyManager.computerCraftLoaded) {
            if (event instanceof PlayerInteractEvent) {
                PlayerInteractEvent e = (PlayerInteractEvent) event;
                notifyComputers(newRedstoneStrength, e.x, e.y, e.z);
            } else {
                notifyComputers(newRedstoneStrength);
            }
        }
        if (newRedstoneStrength != redstoneStrength) {
            redstoneStrength = newRedstoneStrength;
            updateNeighbours();
        }
    }
}
Also used : IEventSensorSetting(pneumaticCraft.api.universalSensor.IEventSensorSetting) ISensorSetting(pneumaticCraft.api.universalSensor.ISensorSetting) PlayerInteractEvent(net.minecraftforge.event.entity.player.PlayerInteractEvent)

Aggregations

IEventSensorSetting (pneumaticCraft.api.universalSensor.IEventSensorSetting)2 ISensorSetting (pneumaticCraft.api.universalSensor.ISensorSetting)2 ItemStack (net.minecraft.item.ItemStack)1 ChunkPosition (net.minecraft.world.ChunkPosition)1 PlayerInteractEvent (net.minecraftforge.event.entity.player.PlayerInteractEvent)1 IPollSensorSetting (pneumaticCraft.api.universalSensor.IPollSensorSetting)1 LuaConstant (pneumaticCraft.common.thirdparty.computercraft.LuaConstant)1 LuaMethod (pneumaticCraft.common.thirdparty.computercraft.LuaMethod)1