diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ControllerBlock.java b/src/main/java/com/ticticboooom/mods/mm/block/ControllerBlock.java index 18b4d2e..d232f7c 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/ControllerBlock.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/ControllerBlock.java @@ -1,14 +1,12 @@ package com.ticticboooom.mods.mm.block; import com.ticticboooom.mods.mm.block.tile.ControllerBlockEntity; -import com.ticticboooom.mods.mm.model.ModelOverrideModel; import lombok.Getter; import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.DirectionProperty; import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; @@ -17,10 +15,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.shapes.IBooleanFunction; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.common.ToolType; @@ -28,16 +22,15 @@ import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.fml.network.NetworkHooks; import javax.annotation.Nullable; -import java.util.stream.Stream; public class ControllerBlock extends DirectionalBlock { - private RegistryObject> type; + private final RegistryObject> type; @Getter - private String controllerName; + private final String controllerName; @Getter - private String controllerId; + private final String controllerId; @Getter - private String texOverride; + private final String texOverride; public ControllerBlock(RegistryObject> type, String name, String id, String texOverride) { super(AbstractBlock.Properties.create(Material.IRON).setRequiresTool().hardnessAndResistance(5.0F, 6.0F).sound(SoundType.METAL).harvestLevel(0) @@ -82,5 +75,16 @@ public class ControllerBlock extends DirectionalBlock { return ActionResultType.SUCCESS; } - + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + if (!worldIn.isRemote()) { + TileEntity blockEntity = worldIn.getTileEntity(pos); + if (blockEntity instanceof ControllerBlockEntity) { + // Send an update to ports notifying that the current recipe was interrupted + ControllerBlockEntity controller = (ControllerBlockEntity) blockEntity; + controller.invalidateRecipe(); + } + } + super.onReplaced(state, worldIn, pos, newState, isMoving); + } } diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/ControllerBlockEntity.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/ControllerBlockEntity.java index e9fc220..8d13546 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/tile/ControllerBlockEntity.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/ControllerBlockEntity.java @@ -29,10 +29,10 @@ import java.util.List; public class ControllerBlockEntity extends UpdatableTile implements ITickableTileEntity, INamedContainerProvider { - private RegistryObject> container; - private String controllerId; + private final RegistryObject> container; + private final String controllerId; @Getter - private ProcessUpdate update = new ProcessUpdate(0, "", "", "", new ArrayList<>()); + private ProcessUpdate processData = new ProcessUpdate(); public ControllerBlockEntity(RegistryObject> type, RegistryObject> container, String controllerId) { super(type.get()); @@ -46,62 +46,94 @@ public class ControllerBlockEntity extends UpdatableTile implements ITickableTil return; } - update.setMsg("Failed to construct \nthe machine"); + processData.setMsg("Failed to construct \nthe machine"); List structures = world.getRecipeManager().getRecipesForType(RecipeTypes.MACHINE_STRUCTURE); + // TODO Maybe check if our structure is still matching before finding a new structure? + boolean foundStructure = false; for (MachineStructureRecipe structure : structures) { int index = structure.matches(this.pos, world, controllerId); if (index != -1) { - if (!update.getSid().equals(structure.getId().toString())) { - update.setTicksTaken(0); + if (!structure.equals(processData.getStructureDefinition().getStructure())) { + processData.setTicksTaken(0); } - update.setSid(structure.getId().toString()); - update.setMsg("Found structure"); + processData.getStructureDefinition().setStructure(structure); + processData.setMsg("Found structure"); onStructureFound(structure, index); + foundStructure = true; break; } } update(); + + if (!foundStructure) { + invalidateRecipe(); + processData.getStructureDefinition().setStructure(null); + processData.setRecipe(null); + } } private void onStructureFound(MachineStructureRecipe structure, int index) { - ArrayList ports = structure.getPorts(pos, world, index); + ArrayList portPoses = structure.getPorts(pos, world, index); List inputPorts = new ArrayList<>(); List outputPorts = new ArrayList<>(); - for (BlockPos port : ports) { - TileEntity blockEntity = world.getTileEntity(port); + for (BlockPos pos : portPoses) { + TileEntity blockEntity = world.getTileEntity(pos); if (blockEntity instanceof IMachinePortTile) { - IMachinePortTile portBE = (IMachinePortTile) blockEntity; + IMachinePortTile port = (IMachinePortTile) blockEntity; - if (portBE.isInput()) { - inputPorts.add(portBE.getStorage()); + if (port.isInput()) { + inputPorts.add(port.getStorage()); } else { - outputPorts.add(portBE.getStorage()); + outputPorts.add(port.getStorage()); } } } + processData.getStructureDefinition().setInputPorts(inputPorts); + processData.getStructureDefinition().setOutputPorts(outputPorts); onPortsEstablished(inputPorts, outputPorts, structure); } private void onPortsEstablished(List inputPorts, List outputPorts, MachineStructureRecipe structure) { List processRecipes = world.getRecipeManager().getRecipesForType(RecipeTypes.MACHINE_PROCESS); boolean processed = false; - for (MachineProcessRecipe recipe : processRecipes) { - if (recipe.matches(inputPorts, structure.getStructureId(), update)) { - if (!update.getId().equals(recipe.getId().toString())) { - update.setTicksTaken(0); + // Maybe instead of checking all recipe again first check if our current recipe is still valid? + if (processData.getRecipe() != null && processData.getRecipe().matches(inputPorts, structure.getStructureId(), processData)) { + processData.getRecipe().process(inputPorts, outputPorts, processData); + processed = true; + } + + if (!processed) { + // If we havent processed the previous recipe that means it needs to be invalidated + invalidateRecipe(); + for (MachineProcessRecipe recipe : processRecipes) { + if (recipe.matches(inputPorts, structure.getStructureId(), processData)) { + // TODO Make sure the recipe doesn't stop progress when some inputs aren't present + if (!recipe.equals(processData.getRecipe())) { + if (processData.getRecipe() != null){ + processData.getRecipe().onInterrupted(inputPorts, outputPorts); + } + processData.setTicksTaken(0); + } + processData.setRecipe(recipe); + recipe.process(inputPorts, outputPorts, processData); + processed = true; + break; } - this.update.setId(recipe.getId().toString()); - this.update = recipe.process(inputPorts, outputPorts, this.update); - processed = true; - break; } } + if (!processed) { - this.update.setTicksTaken(0); + this.processData.setRecipe(null); + this.processData.setTicksTaken(0); } } + public void invalidateRecipe() { + if (processData.getStructureDefinition().getStructure() != null && processData.getRecipe() != null) { + processData.getRecipe().onInterrupted(processData.getStructureDefinition().getInputPorts(), processData.getStructureDefinition().getOutputPorts()); + } + } @Override public ITextComponent getDisplayName() { @@ -116,15 +148,15 @@ public class ControllerBlockEntity extends UpdatableTile implements ITickableTil @Override public CompoundNBT write(CompoundNBT nbt) { - nbt.putInt("ticks", update.getTicksTaken()); - nbt.putString("msg", update.getMsg()); + nbt.putInt("ticks", processData.getTicksTaken()); + nbt.putString("msg", processData.getMsg()); return super.write(nbt); } @Override public void read(BlockState p_230337_1_, CompoundNBT nbt) { super.read(p_230337_1_, nbt); - update.setTicksTaken(nbt.getInt("ticks")); - update.setMsg(nbt.getString("msg")); + processData.setTicksTaken(nbt.getInt("ticks")); + processData.setMsg(nbt.getString("msg")); } } diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/IMachinePortTile.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/IMachinePortTile.java index ca12fa4..5929e86 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/tile/IMachinePortTile.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/IMachinePortTile.java @@ -6,4 +6,8 @@ import net.minecraft.inventory.container.INamedContainerProvider; public interface IMachinePortTile extends INamedContainerProvider { PortStorage getStorage(); boolean isInput(); + + default T getTile() { + return (T) this; + } } diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/RotationGenMachinePortBlockEntity.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/RotationGenMachinePortBlockEntity.java index 203e1ee..be8b885 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/tile/RotationGenMachinePortBlockEntity.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/RotationGenMachinePortBlockEntity.java @@ -2,7 +2,6 @@ package com.ticticboooom.mods.mm.block.tile; import com.simibubi.create.content.contraptions.KineticNetwork; import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity; -import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.ticticboooom.mods.mm.block.container.PortBlockContainer; import com.ticticboooom.mods.mm.network.PacketHandler; import com.ticticboooom.mods.mm.network.packets.TileClientUpdatePacket; @@ -15,7 +14,6 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.ContainerType; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; @@ -23,12 +21,12 @@ import net.minecraftforge.fml.network.PacketDistributor; import javax.annotation.Nullable; -public class RotationGenMachinePortBlockEntity extends GeneratingKineticTileEntity implements IMachinePortTile, ITickableTileEntity { +public class RotationGenMachinePortBlockEntity extends GeneratingKineticTileEntity implements IMachinePortTile { private final ContainerType container; @Getter private final PortStorage storage; @Getter - private boolean input; + private final boolean input; public RotationGenMachinePortBlockEntity(TileEntityType typeIn, ContainerType container, PortStorage storage, boolean input) { super(typeIn); @@ -38,7 +36,6 @@ public class RotationGenMachinePortBlockEntity extends GeneratingKineticTileEnti if (input) { this.stress = ((RotationPortStorage) storage).getStress(); } - } @Override @@ -57,26 +54,6 @@ public class RotationGenMachinePortBlockEntity extends GeneratingKineticTileEnti this.reActivateSource = true; super.tick(); this.storage.tick(this); -// if (storage instanceof RotationPortStorage) { -// RotationPortStorage stor = (RotationPortStorage) this.storage; -// float prev = this.speed; -// float speed = stor.getSpeed(); -// if (speed != prev) { -// if (!hasSource()) { -// effects.queueRotationIndicators(); -// } -// applyNewSpeed(prev, speed); -// } -// if (hasNetwork() && speed != 0) { -// KineticNetwork network = getOrCreateNetwork(); -// notifyStressCapacityChange(calculateAddedStressCapacity()); -// getOrCreateNetwork().updateCapacityFor(this, calculateStressApplied()); -// network.updateStress(); -// } -// -// onSpeedChanged(prev); -// sendData(); -// } if (!world.isRemote()) { PacketHandler.INSTANCE.send(PacketDistributor.ALL.noArg(), new TileClientUpdatePacket.Data(pos, write(new CompoundNBT()))); @@ -86,6 +63,7 @@ public class RotationGenMachinePortBlockEntity extends GeneratingKineticTileEnti @Override protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { this.storage.load(compound.getCompound("inv")); + super.fromTag(state, compound, clientPacket); } @Override @@ -94,6 +72,17 @@ public class RotationGenMachinePortBlockEntity extends GeneratingKineticTileEnti super.write(compound, clientPacket); } + @Override + public float calculateAddedStressCapacity() { + float stress = 0; + if (!input && storage instanceof RotationPortStorage) { + RotationPortStorage stor = (RotationPortStorage) this.storage; + stress = stor.getStress(); + } + + lastCapacityProvided = stress; + return stress; + } @Override public float getGeneratedSpeed() { diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/RotationMachinePortBlockEntity.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/RotationMachinePortBlockEntity.java index 4b6dd1b..82b0448 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/tile/RotationMachinePortBlockEntity.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/RotationMachinePortBlockEntity.java @@ -1,7 +1,5 @@ package com.ticticboooom.mods.mm.block.tile; -import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.KineticNetwork; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.ticticboooom.mods.mm.block.container.PortBlockContainer; import com.ticticboooom.mods.mm.network.PacketHandler; @@ -38,7 +36,6 @@ public class RotationMachinePortBlockEntity extends KineticTileEntity implements if (input) { this.stress = ((RotationPortStorage) storage).getStress(); } - } @Override @@ -55,24 +52,39 @@ public class RotationMachinePortBlockEntity extends KineticTileEntity implements @Override public void tick() { super.tick(); + this.storage.tick(this); - if (this.world.isRemote) { + /*if (this.world.isRemote) { return; } + if (storage instanceof RotationPortStorage) { RotationPortStorage storage = (RotationPortStorage) this.storage; if (input) { storage.setSpeed(Math.abs(getSpeed())); } - } + }*/ if (!world.isRemote()) { PacketHandler.INSTANCE.send(PacketDistributor.ALL.noArg(), new TileClientUpdatePacket.Data(pos, write(new CompoundNBT()))); } } + @Override + public float calculateStressApplied() { + float stress = 0; + if (input && storage instanceof RotationPortStorage) { + RotationPortStorage stor = (RotationPortStorage) this.storage; + stress = stor.getStress(); + } + + this.lastStressApplied = stress; + return stress; + } + @Override protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { this.storage.load(compound.getCompound("inv")); + super.fromTag(state, compound, clientPacket); } @Override diff --git a/src/main/java/com/ticticboooom/mods/mm/client/screen/ControllerBlockContainerScreen.java b/src/main/java/com/ticticboooom/mods/mm/client/screen/ControllerBlockContainerScreen.java index ff4f81a..fcf9ce3 100644 --- a/src/main/java/com/ticticboooom/mods/mm/client/screen/ControllerBlockContainerScreen.java +++ b/src/main/java/com/ticticboooom/mods/mm/client/screen/ControllerBlockContainerScreen.java @@ -3,7 +3,6 @@ package com.ticticboooom.mods.mm.client.screen; import com.mojang.blaze3d.matrix.MatrixStack; import com.ticticboooom.mods.mm.MM; import com.ticticboooom.mods.mm.block.container.ControllerBlockContainer; -import net.minecraft.client.gui.AbstractGui; import net.minecraft.client.gui.screen.inventory.ContainerScreen; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.ResourceLocation; @@ -31,7 +30,7 @@ public class ControllerBlockContainerScreen extends ContainerScreen { - @Getter private final List inputs; @Getter private final List outputs; @Getter - private int ticks; + private final int ticks; @Getter - private String structureId; - private ResourceLocation rl; + private final String structureId; + private final ResourceLocation rl; - private List inputRolls = new ArrayList<>(); - private List outputRolls = new ArrayList<>(); - private Random rand = new Random(); + private final List inputRolls = new ArrayList<>(); + private final List outputRolls = new ArrayList<>(); + private final Random rand = new Random(); public MachineProcessRecipe(List inputs, List outputs, int ticks, String structureId, ResourceLocation rl) { this.inputs = inputs; @@ -101,17 +100,18 @@ public class MachineProcessRecipe implements IRecipe { } } - public ProcessUpdate process(List inputPorts, List outputPorts, ProcessUpdate update) { + public void process(List inputPorts, List outputPorts, ProcessUpdate update) { resetChances(); boolean canTake = canTake(inputPorts, update.getTakenIndices()); boolean canPut = canPut(outputPorts); if (!canTake || !canPut) { update.setMsg("Found Structure"); - return update; + return; } int takenIndex = 0; + // Update instantly consumed inputs when recipe starts if (update.getTicksTaken() <= 0) { for (PortState input : inputs) { if (input.isInstantConsume() && input.validateRequirement(inputPorts)) { @@ -123,9 +123,11 @@ public class MachineProcessRecipe implements IRecipe { } int index = 0; + // When the recipe has finished if (update.getTicksTaken() >= ticks) { update.getTakenIndices().clear(); for (PortState input : inputs) { + // Don't consume when recipe is finished if the input is consumePerTick or consumeInstant if (input.isConsumePerTick() || input.isInstantConsume()) { continue; } @@ -136,6 +138,7 @@ public class MachineProcessRecipe implements IRecipe { } index = 0; for (PortState output : outputs) { + // Don't produce output when recipe is finished if the output is consumePerTick if (output.isConsumePerTick()) { continue; } @@ -145,13 +148,12 @@ public class MachineProcessRecipe implements IRecipe { } update.setMsg(""); update.setTicksTaken(0); - update.setTakenIndices(new ArrayList<>()); - return update; + update.getTakenIndices().clear(); + return; } boolean canTick = true; - index = 0; for (PortState input : inputs) { if (input.isConsumePerTick()) { @@ -191,7 +193,7 @@ public class MachineProcessRecipe implements IRecipe { update.setTicksTaken(update.getTicksTaken() + 1); } update.setMsg((int) (((float) update.getTicksTaken() / (float) ticks) * 100) + "%"); - return update; + return; } @Override @@ -229,6 +231,16 @@ public class MachineProcessRecipe implements IRecipe { return RecipeTypes.MACHINE_PROCESS; } + public void onInterrupted(List inputPorts, List outputPorts) { + for (PortStorage port : inputPorts) { + port.onRecipeInterrupted(this); + } + + for (PortStorage port : outputPorts) { + port.onRecipeInterrupted(this); + } + } + public static final class Serializer implements IRecipeSerializer { @Override diff --git a/src/main/java/com/ticticboooom/mods/mm/model/ProcessUpdate.java b/src/main/java/com/ticticboooom/mods/mm/model/ProcessUpdate.java index 65a77b2..3b04379 100644 --- a/src/main/java/com/ticticboooom/mods/mm/model/ProcessUpdate.java +++ b/src/main/java/com/ticticboooom/mods/mm/model/ProcessUpdate.java @@ -1,19 +1,20 @@ package com.ticticboooom.mods.mm.model; +import com.ticticboooom.mods.mm.data.MachineProcessRecipe; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import net.minecraft.util.ResourceLocation; +import java.util.ArrayList; import java.util.List; @Getter @Setter -@AllArgsConstructor public class ProcessUpdate { private int ticksTaken; - private String msg; - private String id; - private String sid; - private List takenIndices; + private String msg = ""; + private MachineProcessRecipe recipe; + private WorldStructureDefinition structureDefinition = new WorldStructureDefinition(); + private List takenIndices = new ArrayList<>(); } diff --git a/src/main/java/com/ticticboooom/mods/mm/model/WorldStructureDefinition.java b/src/main/java/com/ticticboooom/mods/mm/model/WorldStructureDefinition.java new file mode 100644 index 0000000..a4ad73d --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/model/WorldStructureDefinition.java @@ -0,0 +1,16 @@ +package com.ticticboooom.mods.mm.model; + +import com.ticticboooom.mods.mm.data.MachineStructureRecipe; +import com.ticticboooom.mods.mm.ports.storage.PortStorage; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Setter +@Getter +public class WorldStructureDefinition { + private MachineStructureRecipe structure; + private List inputPorts; + private List outputPorts; +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/RotationPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/RotationPortState.java index dfb3516..0b808fc 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/state/RotationPortState.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/RotationPortState.java @@ -27,8 +27,8 @@ public class RotationPortState extends PortState { private float speed; - public RotationPortState(float pressure) { - this.speed = pressure; + public RotationPortState(float speed) { + this.speed = speed; } @Override @@ -41,7 +41,7 @@ public class RotationPortState extends PortState { for (PortStorage portStorage : storage) { if (portStorage instanceof RotationPortStorage){ RotationPortStorage rot = (RotationPortStorage) portStorage; - if (rot.getSpeed() >= speed) { + if (!rot.isOverStressed() && rot.getSpeed() >= speed) { return true; } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/PortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/PortStorage.java index 1c10258..81a2f46 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/PortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/PortStorage.java @@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.ticticboooom.mods.mm.block.container.PortBlockContainer; import com.ticticboooom.mods.mm.block.tile.IMachinePortTile; import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity; +import com.ticticboooom.mods.mm.data.MachineProcessRecipe; import net.minecraft.block.BlockState; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.inventory.ContainerScreen; @@ -50,4 +51,8 @@ public abstract class PortStorage { public boolean onPortActivated(BlockState state, World level, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult traceResult) { return false; } + + public void onRecipeInterrupted(MachineProcessRecipe recipe) { + + } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/RotationPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/RotationPortStorage.java index ee2a1e9..2a5178e 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/RotationPortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/RotationPortStorage.java @@ -1,38 +1,25 @@ package com.ticticboooom.mods.mm.ports.storage; -import com.google.common.collect.Lists; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.KineticNetwork; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.ticticboooom.mods.mm.MM; import com.ticticboooom.mods.mm.block.tile.IMachinePortTile; -import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity; +import com.ticticboooom.mods.mm.block.tile.RotationMachinePortBlockEntity; +import com.ticticboooom.mods.mm.data.MachineProcessRecipe; import lombok.Getter; import lombok.Setter; -import me.desht.pneumaticcraft.api.PNCCapabilities; -import me.desht.pneumaticcraft.api.tileentity.IAirHandlerMachine; -import me.desht.pneumaticcraft.common.capabilities.MachineAirHandler; -import me.desht.pneumaticcraft.common.util.DirectionUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.AbstractGui; import net.minecraft.client.gui.screen.Screen; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; -import java.text.NumberFormat; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; -import java.util.Map; public class RotationPortStorage extends PortStorage { public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( @@ -42,11 +29,13 @@ public class RotationPortStorage extends PortStorage { @Setter private float speed; + @Getter + private boolean isOverStressed; + @Getter private int stress; public RotationPortStorage(int stress) { - this.stress = stress; } @@ -84,6 +73,13 @@ public class RotationPortStorage extends PortStorage { @Override public void tick(IMachinePortTile tile) { + KineticTileEntity kinetic = tile.getTile(); + this.isOverStressed = kinetic.isOverStressed(); + this.speed = Math.abs(kinetic.getSpeed()); + } + + @Override + public void onRecipeInterrupted(MachineProcessRecipe recipe) { this.speed = 0; } } diff --git a/src/test/resources/data/mm/recipes/structures/test_rotation.json b/src/test/resources/data/mm/recipes/structures/test_rotation.json index 4dfd45a..65988b8 100644 --- a/src/test/resources/data/mm/recipes/structures/test_rotation.json +++ b/src/test/resources/data/mm/recipes/structures/test_rotation.json @@ -6,9 +6,6 @@ "layout": [ [ "1C2" - ], - [ - " T " ] ], "legend": { @@ -17,9 +14,6 @@ }, "2": { "block": "masterfulmachinery:basic_simple_port_create_rotation_output" - }, - "T": { - "block": "create:deployer" } } } \ No newline at end of file diff --git a/src/test/resources/data/mm/recipes/test_rotation.json b/src/test/resources/data/mm/recipes/test_rotation.json index 594be06..8892c72 100644 --- a/src/test/resources/data/mm/recipes/test_rotation.json +++ b/src/test/resources/data/mm/recipes/test_rotation.json @@ -2,7 +2,7 @@ "type": "masterfulmachinery:machine_process", "structureId": "test_rotation", "controllerId": "basic", - "ticks": 200, + "ticks": 60, "inputs": [ { "type": "masterfulmachinery:create_rotation", @@ -16,7 +16,8 @@ { "type": "masterfulmachinery:create_rotation", "data": { - "speed": 64 + "capacity": 256, + "speed": 24 }, "perTick": true } diff --git a/version.properties b/version.properties index 61ac51d..810cb60 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ -#Sun Nov 28 19:05:29 GMT 2021 -VERSION_CODE=866 +#Sun Dec 12 21:28:07 GMT 2021 +VERSION_CODE=883