Search in sources :

Example 11 with CompiledOpcode

use of mcjty.rftoolscontrol.logic.compiled.CompiledOpcode in project RFToolsControl by McJty.

the class ProcessorTileEntity method getCraftableItems.

public void getCraftableItems(List<ItemStack> stacks) {
    try {
        for (CardInfo info : cardInfo) {
            CompiledCard compiledCard = info.getCompiledCard();
            if (compiledCard != null) {
                for (CompiledEvent event : compiledCard.getEvents(Opcodes.EVENT_CRAFT)) {
                    int index = event.getIndex();
                    CompiledOpcode compiledOpcode = compiledCard.getOpcodes().get(index);
                    ItemStack stack = evaluateItemParameter(compiledOpcode, null, 0);
                    Inventory inv = evaluateInventoryParameter(compiledOpcode, null, 1);
                    if (!stack.isEmpty() && inv != null) {
                        throw new ProgException(EXCEPT_BADPARAMETERS);
                    }
                    if (stack.isEmpty() && inv == null) {
                        throw new ProgException(EXCEPT_BADPARAMETERS);
                    }
                    if (!stack.isEmpty()) {
                        stacks.add(stack);
                    } else {
                        // Find all crafting cards in the inventory
                        IItemHandler handler = getItemHandlerAt(inv);
                        for (int i = 0; i < handler.getSlots(); i++) {
                            ItemStack s = handler.getStackInSlot(i);
                            if (!s.isEmpty() && s.getItem() == ModItems.craftingCardItem) {
                                ItemStack result = CraftingCardItem.getResult(s);
                                if (!result.isEmpty()) {
                                    stacks.add(result);
                                }
                            }
                        }
                    }
                }
            }
        }
    } catch (ProgException e) {
        exception(e.getExceptionType(), null);
    }
}
Also used : ProgException(mcjty.rftoolscontrol.logic.running.ProgException) IItemHandler(net.minecraftforge.items.IItemHandler) CompiledCard(mcjty.rftoolscontrol.logic.compiled.CompiledCard) ICompiledOpcode(mcjty.rftoolscontrol.api.code.ICompiledOpcode) CompiledOpcode(mcjty.rftoolscontrol.logic.compiled.CompiledOpcode) CompiledEvent(mcjty.rftoolscontrol.logic.compiled.CompiledEvent) ItemStack(net.minecraft.item.ItemStack) ISidedInventory(net.minecraft.inventory.ISidedInventory) IInventory(net.minecraft.inventory.IInventory) DefaultSidedInventory(mcjty.lib.container.DefaultSidedInventory)

Example 12 with CompiledOpcode

use of mcjty.rftoolscontrol.logic.compiled.CompiledOpcode in project RFToolsControl by McJty.

the class ProcessorTileEntity method handleEventsRedstoneOn.

private void handleEventsRedstoneOn(int i, CompiledCard compiledCard) {
    int redstoneOnMask = powerLevel & ~prevIn;
    if (redstoneOnMask != 0) {
        for (CompiledEvent event : compiledCard.getEvents(Opcodes.EVENT_REDSTONE_ON)) {
            int index = event.getIndex();
            CompiledOpcode compiledOpcode = compiledCard.getOpcodes().get(index);
            BlockSide side = evaluateSideParameter(compiledOpcode, null, 0);
            if (side == null || !side.hasNodeName()) {
                EnumFacing facing = side == null ? null : side.getSide();
                if (facing == null || ((redstoneOnMask >> facing.ordinal()) & 1) == 1) {
                    runOrQueueEvent(i, event, null, null);
                }
            }
        }
    }
}
Also used : ICompiledOpcode(mcjty.rftoolscontrol.api.code.ICompiledOpcode) CompiledOpcode(mcjty.rftoolscontrol.logic.compiled.CompiledOpcode) EnumFacing(net.minecraft.util.EnumFacing) CompiledEvent(mcjty.rftoolscontrol.logic.compiled.CompiledEvent)

Example 13 with CompiledOpcode

use of mcjty.rftoolscontrol.logic.compiled.CompiledOpcode in project RFToolsControl by McJty.

the class ProcessorTileEntity method handleEventsRedstoneOff.

private void handleEventsRedstoneOff(int i, CompiledCard compiledCard) {
    int redstoneOffMask = prevIn & ~powerLevel;
    if (redstoneOffMask != 0) {
        for (CompiledEvent event : compiledCard.getEvents(Opcodes.EVENT_REDSTONE_OFF)) {
            int index = event.getIndex();
            CompiledOpcode compiledOpcode = compiledCard.getOpcodes().get(index);
            BlockSide side = evaluateSideParameter(compiledOpcode, null, 0);
            if (side == null || !side.hasNodeName()) {
                EnumFacing facing = side == null ? null : side.getSide();
                if (facing == null || ((redstoneOffMask >> facing.ordinal()) & 1) == 1) {
                    runOrQueueEvent(i, event, null, null);
                }
            }
        }
    }
}
Also used : ICompiledOpcode(mcjty.rftoolscontrol.api.code.ICompiledOpcode) CompiledOpcode(mcjty.rftoolscontrol.logic.compiled.CompiledOpcode) EnumFacing(net.minecraft.util.EnumFacing) CompiledEvent(mcjty.rftoolscontrol.logic.compiled.CompiledEvent)

Example 14 with CompiledOpcode

use of mcjty.rftoolscontrol.logic.compiled.CompiledOpcode in project RFToolsControl by McJty.

the class RunningProgram method run.

public boolean run(ProcessorTileEntity processor) {
    if (delay > 0) {
        delay--;
        return false;
    }
    if (lock != null) {
        if (processor.testLock(lock)) {
            return false;
        }
        lock = null;
    }
    try {
        CompiledOpcode opcode = opcodes(processor).get(current);
        if (DEBUG) {
            System.out.println(opcode.getOpcode());
        }
        IOpcodeRunnable.OpcodeResult result = opcode.run(processor, this);
        if (result == IOpcodeRunnable.OpcodeResult.POSITIVE) {
            current = opcode.getPrimaryIndex();
        } else if (result == IOpcodeRunnable.OpcodeResult.NEGATIVE) {
            current = opcode.getSecondaryIndex();
        } else {
        // Stay at this opcode
        }
    } catch (ProgException e) {
        throw e;
    } catch (Exception e) {
        LogManager.getLogger().log(Level.ERROR, "Opcode failed with: ", e);
        throw new ProgException(ExceptionType.EXCEPT_INTERNALERROR);
    }
    return true;
}
Also used : CompiledOpcode(mcjty.rftoolscontrol.logic.compiled.CompiledOpcode) IOpcodeRunnable(mcjty.rftoolscontrol.api.code.IOpcodeRunnable)

Aggregations

CompiledOpcode (mcjty.rftoolscontrol.logic.compiled.CompiledOpcode)14 ICompiledOpcode (mcjty.rftoolscontrol.api.code.ICompiledOpcode)12 CompiledEvent (mcjty.rftoolscontrol.logic.compiled.CompiledEvent)12 CompiledCard (mcjty.rftoolscontrol.logic.compiled.CompiledCard)6 NBTTagString (net.minecraft.nbt.NBTTagString)4 EnumFacing (net.minecraft.util.EnumFacing)4 IItemHandler (net.minecraftforge.items.IItemHandler)3 DefaultSidedInventory (mcjty.lib.container.DefaultSidedInventory)2 ProgException (mcjty.rftoolscontrol.logic.running.ProgException)2 IInventory (net.minecraft.inventory.IInventory)2 ISidedInventory (net.minecraft.inventory.ISidedInventory)2 ItemStack (net.minecraft.item.ItemStack)2 IOpcodeRunnable (mcjty.rftoolscontrol.api.code.IOpcodeRunnable)1 RunningProgram (mcjty.rftoolscontrol.logic.running.RunningProgram)1