fixed jei process support and started on structure builder

This commit is contained in:
ticticboooom
2021-05-13 23:23:05 +01:00
parent ef6b831413
commit 3477ebdcc3
40 changed files with 575 additions and 231 deletions

View File

@@ -18,7 +18,7 @@ apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
version = '1.16.5-0.1.13-T' + System.currentTimeMillis()
version = '1.16.5-0.1.15-T' + System.currentTimeMillis()
group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'MasterfulMachinery'

View File

@@ -0,0 +1,27 @@
package com.ticticboooom.mods.mm.block;
import com.ticticboooom.mods.mm.registration.MMSetup;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockReader;
import javax.annotation.Nullable;
public class ProjectorBlock extends Block {
public ProjectorBlock() {
super(Properties.of(Material.METAL));
}
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
@Nullable
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return MMSetup.PROJECTOR_TILE.get().create();
}
}

View File

@@ -0,0 +1,27 @@
package com.ticticboooom.mods.mm.block;
import com.ticticboooom.mods.mm.registration.MMSetup;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockReader;
import javax.annotation.Nullable;
public class StructureGenBlock extends Block {
public StructureGenBlock() {
super(Properties.of(Material.METAL));
}
@Override
public boolean hasTileEntity(BlockState state) {
return true;
}
@Nullable
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return MMSetup.STRUCTURE_TILE.get().create();
}
}

View File

@@ -0,0 +1,26 @@
package com.ticticboooom.mods.mm.block.container;
import com.ticticboooom.mods.mm.block.tile.ProjectorBlockEntity;
import com.ticticboooom.mods.mm.registration.MMSetup;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.network.PacketBuffer;
public class ProjectorBlockContainer extends Container {
private ProjectorBlockEntity tile;
public ProjectorBlockContainer(int windowId, ProjectorBlockEntity tile) {
super(MMSetup.PROJECTOR_CONTAINER.get(), windowId);
this.tile = tile;
}
@Override
public boolean stillValid(PlayerEntity p_75145_1_) {
return true;
}
public ProjectorBlockContainer(int w, PlayerInventory inv, PacketBuffer buf) {
this(w, (ProjectorBlockEntity) inv.player.level.getBlockEntity(buf.readBlockPos()));
}
}

View File

@@ -0,0 +1,27 @@
package com.ticticboooom.mods.mm.block.container;
import com.ticticboooom.mods.mm.block.tile.ProjectorBlockEntity;
import com.ticticboooom.mods.mm.block.tile.StructureGenBlockEntity;
import com.ticticboooom.mods.mm.registration.MMSetup;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.network.PacketBuffer;
public class StructureGenBlockContainer extends Container {
private StructureGenBlockEntity tile;
public StructureGenBlockContainer(int windowId, StructureGenBlockEntity tile) {
super(MMSetup.STRUCTURE_CONTAINER.get(), windowId);
this.tile = tile;
}
@Override
public boolean stillValid(PlayerEntity p_75145_1_) {
return true;
}
public StructureGenBlockContainer(int w, PlayerInventory inv, PacketBuffer buf) {
this(w, (StructureGenBlockEntity) inv.player.level.getBlockEntity(buf.readBlockPos()));
}
}

View File

@@ -4,9 +4,7 @@ import com.ticticboooom.mods.mm.block.container.ControllerBlockContainer;
import com.ticticboooom.mods.mm.data.MachineProcessRecipe;
import com.ticticboooom.mods.mm.data.MachineStructureRecipe;
import com.ticticboooom.mods.mm.model.ProcessUpdate;
import com.ticticboooom.mods.mm.network.PacketHandler;
import com.ticticboooom.mods.mm.network.packets.TileClientUpdatePacket;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import com.ticticboooom.mods.mm.registration.RecipeTypes;
import lombok.Getter;
import net.minecraft.block.BlockState;
@@ -23,7 +21,6 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.network.PacketDistributor;
import javax.annotation.Nullable;
import java.util.ArrayList;
@@ -64,8 +61,8 @@ public class ControllerBlockEntity extends UpdatableTile implements ITickableTil
private void onStructureFound(MachineStructureRecipe structure, int index) {
ArrayList<BlockPos> ports = structure.getPorts(worldPosition, level, index);
List<IPortStorage> inputPorts = new ArrayList<>();
List<IPortStorage> outputPorts = new ArrayList<>();
List<PortStorage> inputPorts = new ArrayList<>();
List<PortStorage> outputPorts = new ArrayList<>();
for (BlockPos port : ports) {
TileEntity blockEntity = level.getBlockEntity(port);
if (blockEntity instanceof MachinePortBlockEntity) {
@@ -82,7 +79,7 @@ public class ControllerBlockEntity extends UpdatableTile implements ITickableTil
onPortsEstablished(inputPorts, outputPorts, structure);
}
private void onPortsEstablished(List<IPortStorage> inputPorts, List<IPortStorage> outputPorts, MachineStructureRecipe structure) {
private void onPortsEstablished(List<PortStorage> inputPorts, List<PortStorage> outputPorts, MachineStructureRecipe structure) {
List<MachineProcessRecipe> processRecipes = level.getRecipeManager().getAllRecipesFor(RecipeTypes.MACHINE_PROCESS);
boolean processed = false;
for (MachineProcessRecipe recipe : processRecipes) {

View File

@@ -1,9 +1,7 @@
package com.ticticboooom.mods.mm.block.tile;
import com.ticticboooom.mods.mm.block.container.PortBlockContainer;
import com.ticticboooom.mods.mm.network.PacketHandler;
import com.ticticboooom.mods.mm.network.packets.TileClientUpdatePacket;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import lombok.Getter;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
@@ -13,14 +11,12 @@ import net.minecraft.inventory.container.ContainerType;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fml.network.PacketDistributor;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -29,12 +25,12 @@ public class MachinePortBlockEntity extends UpdatableTile implements ITickableTi
private ContainerType<?> container;
@Getter
private IPortStorage storage;
private PortStorage storage;
@Getter
private boolean input;
public MachinePortBlockEntity(TileEntityType<?> p_i48289_1_, ContainerType<?> container, IPortStorage storage, boolean input) {
public MachinePortBlockEntity(TileEntityType<?> p_i48289_1_, ContainerType<?> container, PortStorage storage, boolean input) {
super(p_i48289_1_);
this.container = container;
this.storage = storage;

View File

@@ -0,0 +1,11 @@
package com.ticticboooom.mods.mm.block.tile;
import com.ticticboooom.mods.mm.registration.MMSetup;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
public class ProjectorBlockEntity extends TileEntity {
public ProjectorBlockEntity() {
super(MMSetup.PROJECTOR_TILE.get());
}
}

View File

@@ -0,0 +1,40 @@
package com.ticticboooom.mods.mm.block.tile;
import com.ticticboooom.mods.mm.model.ProcessUpdate;
import com.ticticboooom.mods.mm.registration.MMSetup;
import net.minecraft.block.BlockState;
import net.minecraft.inventory.ItemStackHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.NonNullList;
public class StructureGenBlockEntity extends UpdatableTile implements ITickableTileEntity {
public StructureGenBlockEntity() {
super(MMSetup.STRUCTURE_TILE.get());
}
private ItemStack device = ItemStack.EMPTY;
@Override
public CompoundNBT save(CompoundNBT nbt) {
NonNullList<ItemStack> list = NonNullList.of(device);
nbt = ItemStackHelper.saveAllItems(nbt, list);
return super.save(nbt);
}
@Override
public void load(BlockState p_230337_1_, CompoundNBT nbt) {
NonNullList<ItemStack> list = NonNullList.withSize(1, ItemStack.EMPTY);
ItemStackHelper.loadAllItems(nbt, list);
device = list.get(0);
super.load(p_230337_1_, nbt);
}
@Override
public void tick() {
update();
}
}

View File

@@ -4,10 +4,12 @@ import com.mojang.blaze3d.matrix.MatrixStack;
import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.data.MachineProcessRecipe;
import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.ports.MasterfulPortType;
import com.ticticboooom.mods.mm.ports.state.FluidPortState;
import com.ticticboooom.mods.mm.ports.state.ItemPortState;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.storage.MekGasPortStorage;
import com.ticticboooom.mods.mm.registration.MMPorts;
import com.ticticboooom.mods.mm.registration.RecipeTypes;
import mekanism.api.chemical.gas.GasStack;
import mekanism.api.recipes.inputs.chemical.ChemicalIngredientDeserializer;
@@ -26,10 +28,7 @@ import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.registries.ForgeRegistries;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
public class MachineProcessRecipeCategory implements IRecipeCategory<MachineProcessRecipe> {
@@ -70,11 +69,35 @@ public class MachineProcessRecipeCategory implements IRecipeCategory<MachineProc
@Override
public void setIngredients(MachineProcessRecipe recipe, IIngredients ingredients) {
for (PortState input : recipe.getInputs()) {
input.setIngredient(ingredients, true);
Map<ResourceLocation, List<?>> inputStacks = new HashMap<>();
Map<ResourceLocation, List<?>> outputStacks = new HashMap<>();
for (Map.Entry<ResourceLocation, MasterfulPortType> resource : MMPorts.PORTS.entrySet()) {
ResourceLocation registryName = resource.getKey();
inputStacks.put(registryName, new ArrayList<MasterfulPortType>());
outputStacks.put(registryName, new ArrayList<MasterfulPortType>());
}
for (PortState input : recipe.getInputs()) {
List<?> stacks = inputStacks.getOrDefault(input.getName(), new ArrayList<>());
stacks.addAll(input.getIngredient(true));
inputStacks.put(input.getName(), stacks);
}
for (PortState output : recipe.getOutputs()) {
output.setIngredient(ingredients, false);
List<?> stacks = inputStacks.getOrDefault(output.getName(), new ArrayList<>());
stacks.addAll(output.getIngredient(true));
outputStacks.put(output.getName(), stacks);
}
for (Map.Entry<ResourceLocation, List<?>> entry : inputStacks.entrySet()) {
MasterfulPortType masterfulPortType = MMPorts.PORTS.get(entry.getKey());
masterfulPortType.getParser().setIngredients(ingredients, entry.getValue(), true);
}
for (Map.Entry<ResourceLocation, List<?>> entry : outputStacks.entrySet()) {
MasterfulPortType masterfulPortType = MMPorts.PORTS.get(entry.getKey());
masterfulPortType.getParser().setIngredients(ingredients, entry.getValue(), false);
}
}
@@ -95,7 +118,6 @@ public class MachineProcessRecipeCategory implements IRecipeCategory<MachineProc
}
}
final int offsetX = 95;
currentX = offsetX;
currentY = 0;

View File

@@ -0,0 +1,18 @@
package com.ticticboooom.mods.mm.client.screen;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.ticticboooom.mods.mm.block.container.StructureGenBlockContainer;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.util.text.ITextComponent;
public class StructureGenBlockContainerScreen extends ContainerScreen<StructureGenBlockContainer> {
public StructureGenBlockContainerScreen(StructureGenBlockContainer p_i51105_1_, PlayerInventory p_i51105_2_, ITextComponent p_i51105_3_) {
super(p_i51105_1_, p_i51105_2_, p_i51105_3_);
}
@Override
protected void renderBg(MatrixStack p_230450_1_, float p_230450_2_, int p_230450_3_, int p_230450_4_) {
}
}

View File

@@ -8,7 +8,7 @@ import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.model.ProcessUpdate;
import com.ticticboooom.mods.mm.ports.MasterfulPortType;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import com.ticticboooom.mods.mm.registration.MMPorts;
import com.ticticboooom.mods.mm.registration.RecipeTypes;
import lombok.Getter;
@@ -47,11 +47,11 @@ public class MachineProcessRecipe implements IRecipe<IInventory> {
this.rl = rl;
}
public boolean matches(List<IPortStorage> inputPorts, String structureId) {
public boolean matches(List<PortStorage> inputPorts, String structureId) {
return structureId.equals(this.structureId) && canTake(inputPorts);
}
private boolean canTake(List<IPortStorage> inputPorts) {
private boolean canTake(List<PortStorage> inputPorts) {
for (PortState input : inputs) {
if (!input.validateRequirement(inputPorts)) {
return false;
@@ -60,7 +60,7 @@ public class MachineProcessRecipe implements IRecipe<IInventory> {
return true;
}
private boolean canPut(List<IPortStorage> outputPorts) {
private boolean canPut(List<PortStorage> outputPorts) {
for (PortState output : outputs) {
if (!output.validateResult(outputPorts)) {
return false;
@@ -69,7 +69,7 @@ public class MachineProcessRecipe implements IRecipe<IInventory> {
return true;
}
public ProcessUpdate process(List<IPortStorage> inputPorts, List<IPortStorage> outputPorts, ProcessUpdate update) {
public ProcessUpdate process(List<PortStorage> inputPorts, List<PortStorage> outputPorts, ProcessUpdate update) {
boolean canTake = canTake(inputPorts);
boolean canPut = canPut(outputPorts);

View File

@@ -32,5 +32,6 @@ public class MMItemModelProvider extends ItemModelProvider {
}
this.getBuilder(MMSetup.BLUEPRINT.getId().getPath()).parent(new ModelFile.UncheckedModelFile("item/generated")).texture("layer0", "items/blueprint");
this.getBuilder(MMSetup.STRUCTURE_DEVICE.getId().getPath()).parent(new ModelFile.UncheckedModelFile("item/generated")).texture("layer0", "items/scanning_tool");
}
}

View File

@@ -32,6 +32,7 @@ public class MMLangProvider extends LanguageProvider {
}
}
this.add(MMSetup.BLUEPRINT.get(), "Blueprint");
this.add(MMSetup.BLUEPRINT.get(), "Blueprint");
this.add(MMSetup.STRUCTURE_DEVICE.get(), "Structure Scanner");
}
}

View File

@@ -0,0 +1,15 @@
package com.ticticboooom.mods.mm.helper;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.math.BlockPos;
import org.lwjgl.system.CallbackI;
public class NBTHelper {
public static CompoundNBT toCompound(BlockPos pos) {
CompoundNBT result = new CompoundNBT();
result.putInt("x", pos.getX());
result.putInt("y", pos.getY());
result.putInt("z", pos.getZ());
return result;
}
}

View File

@@ -0,0 +1,42 @@
package com.ticticboooom.mods.mm.item;
import com.ticticboooom.mods.mm.helper.NBTHelper;
import com.ticticboooom.mods.mm.registration.MMLoader;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ActionResult;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class StructureGenSelectionDevice extends Item {
public StructureGenSelectionDevice() {
super(new Item.Properties().tab(MMLoader.MASTERFUL_ITEM_GROUP));
}
@Override
public ActionResultType useOn(ItemUseContext ctx) {
BlockPos clickedPos = ctx.getClickedPos();
ItemStack iih = ctx.getItemInHand();
CompoundNBT tag = iih.getTag();
if (tag == null) {
tag = new CompoundNBT();
}
if (!tag.contains("pos1") && !tag.contains("pos2")) {
tag.put("pos1", NBTHelper.toCompound(clickedPos));
} else if (tag.contains("pos1") && !tag.contains("pos2")) {
tag.put("pos2", NBTHelper.toCompound(clickedPos));
} else {
if (tag.contains("pos2")) {
tag.remove("pos2");
}
tag.put("pos1", NBTHelper.toCompound(clickedPos));
}
return ActionResultType.SUCCESS;
}
}

View File

@@ -0,0 +1,20 @@
package com.ticticboooom.mods.mm.model;
import lombok.Getter;
import mezz.jei.api.ingredients.IIngredientType;
import java.util.ArrayList;
import java.util.List;
public class JEIIngredientWrapper<TStack> {
@Getter
List<TStack> stacks = new ArrayList<>();
public void add(IIngredientType<TStack> type, TStack stack) {
stacks.add(stack);
}
public void add(IIngredientType<TStack> type, List<TStack> stack) {
stacks.addAll(stack);
}
}

View File

@@ -1,6 +1,6 @@
package com.ticticboooom.mods.mm.ports;
import com.ticticboooom.mods.mm.ports.parser.IPortParser;
import com.ticticboooom.mods.mm.ports.parser.IPortFactory;
import lombok.Getter;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.registries.IForgeRegistryEntry;
@@ -11,9 +11,9 @@ public class MasterfulPortType implements IForgeRegistryEntry<MasterfulPortType>
private ResourceLocation name;
@Getter
private IPortParser parser;
private IPortFactory parser;
public MasterfulPortType(ResourceLocation name, IPortParser parser) {
public MasterfulPortType(ResourceLocation name, IPortFactory parser) {
this.name = name;
this.parser = parser;
}

View File

@@ -8,16 +8,20 @@ import com.mojang.serialization.JsonOps;
import com.ticticboooom.mods.mm.ports.state.EnergyPortState;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.storage.EnergyPortStorage;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import lombok.SneakyThrows;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.network.PacketBuffer;
import java.util.List;
import java.util.function.Supplier;
public class EnergyPortParser implements IPortParser {
public class EnergyPortParser implements IPortFactory {
@Override
public Supplier<IPortStorage> createStorage(JsonObject obj) {
public Supplier<PortStorage> createStorage(JsonObject obj) {
return () -> {
DataResult<Pair<EnergyPortStorage, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(EnergyPortStorage.CODEC).apply(obj);
return apply.result().get().getFirst();
@@ -30,6 +34,10 @@ public class EnergyPortParser implements IPortParser {
buf.writeWithCodec(EnergyPortState.CODEC, ((EnergyPortState) state));
}
@Override
public void setIngredients(IIngredients ingredients, List<?> stacks, boolean input) {
}
@Override
public PortState createState(JsonObject obj) {
DataResult<Pair<EnergyPortState, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(EnergyPortState.CODEC).apply(obj);

View File

@@ -8,16 +8,20 @@ import com.mojang.serialization.JsonOps;
import com.ticticboooom.mods.mm.ports.state.FluidPortState;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.storage.FluidPortStorage;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import lombok.SneakyThrows;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fluids.FluidStack;
import java.util.List;
import java.util.function.Supplier;
public class FluidPortParser implements IPortParser {
public class FluidPortParser implements IPortFactory {
@Override
public Supplier<IPortStorage> createStorage(JsonObject obj) {
public Supplier<PortStorage> createStorage(JsonObject obj) {
return () -> {
DataResult<Pair<FluidPortStorage, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(FluidPortStorage.CODEC).apply(obj);
return apply.result().get().getFirst();
@@ -29,6 +33,15 @@ public class FluidPortParser implements IPortParser {
buf.writeWithCodec(FluidPortState.CODEC, ((FluidPortState) state));
}
@Override
public void setIngredients(IIngredients ingredients, List<?> stacks, boolean input) {
if (input) {
ingredients.setInputs(VanillaTypes.FLUID, (List<FluidStack>)stacks);
} else {
ingredients.setOutputs(VanillaTypes.FLUID, (List<FluidStack>)stacks);
}
}
@Override
public PortState createState(JsonObject obj) {
DataResult<Pair<FluidPortState, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(FluidPortState.CODEC).apply(obj);

View File

@@ -0,0 +1,20 @@
package com.ticticboooom.mods.mm.ports.parser;
import com.google.gson.JsonObject;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import mezz.jei.api.ingredients.IIngredientType;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.network.PacketBuffer;
import java.util.HashMap;
import java.util.List;
import java.util.function.Supplier;
public interface IPortFactory {
PortState createState(JsonObject obj);
PortState createState(PacketBuffer buf);
Supplier<PortStorage> createStorage(JsonObject obj);
void write(PacketBuffer buf, PortState state);
void setIngredients(IIngredients ingredients, List<?> stacks, boolean input);
}

View File

@@ -1,15 +0,0 @@
package com.ticticboooom.mods.mm.ports.parser;
import com.google.gson.JsonObject;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import net.minecraft.network.PacketBuffer;
import java.util.function.Supplier;
public interface IPortParser {
PortState createState(JsonObject obj);
PortState createState(PacketBuffer buf);
Supplier<IPortStorage> createStorage(JsonObject obj);
void write(PacketBuffer buf, PortState state);
}

View File

@@ -7,17 +7,32 @@ import com.mojang.serialization.DataResult;
import com.mojang.serialization.JsonOps;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.state.ItemPortState;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import com.ticticboooom.mods.mm.ports.storage.ItemPortStorage;
import lombok.SneakyThrows;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fluids.FluidStack;
import java.util.List;
import java.util.function.Supplier;
public class ItemPortParser implements IPortParser {
public class ItemPortParser implements IPortFactory {
@Override
public Supplier<IPortStorage> createStorage(JsonObject obj) {
public void setIngredients(IIngredients ingredients, List<?> stacks, boolean input) {
if (input) {
ingredients.setInputs(VanillaTypes.ITEM, (List<ItemStack>)stacks);
} else {
ingredients.setOutputs(VanillaTypes.ITEM, (List<ItemStack>)stacks);
}
}
@Override
public Supplier<PortStorage> createStorage(JsonObject obj) {
return () -> {
DataResult<Pair<ItemPortStorage, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(ItemPortStorage.CODEC).apply(obj);
return apply.result().get().getFirst();

View File

@@ -7,14 +7,30 @@ import com.mojang.serialization.DataResult;
import com.mojang.serialization.JsonOps;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.state.MekGasPortState;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import com.ticticboooom.mods.mm.ports.storage.MekGasPortStorage;
import lombok.SneakyThrows;
import mekanism.api.chemical.gas.GasStack;
import mekanism.client.jei.MekanismJEI;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import java.util.List;
import java.util.function.Supplier;
public class MekGasPortParser implements IPortParser {
public class MekGasPortParser implements IPortFactory {
@Override
public void setIngredients(IIngredients ingredients, List<?> stacks, boolean input) {
if (input) {
ingredients.setInputs(MekanismJEI.TYPE_GAS, (List<GasStack>)stacks);
} else {
ingredients.setOutputs(MekanismJEI.TYPE_GAS, (List<GasStack>)stacks);
}
}
@Override
public PortState createState(JsonObject obj) {
DataResult<Pair<MekGasPortState, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(MekGasPortState.CODEC).apply(obj);
@@ -28,7 +44,7 @@ public class MekGasPortParser implements IPortParser {
}
@Override
public Supplier<IPortStorage> createStorage(JsonObject obj) {
public Supplier<PortStorage> createStorage(JsonObject obj) {
return () -> {
DataResult<Pair<MekGasPortStorage, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(MekGasPortStorage.CODEC).apply(obj);
return apply.result().get().getFirst();

View File

@@ -6,16 +6,31 @@ import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.JsonOps;
import com.ticticboooom.mods.mm.ports.state.PortState;
import com.ticticboooom.mods.mm.ports.state.MekGasPortState;
import com.ticticboooom.mods.mm.ports.state.MekSlurryPortState;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import com.ticticboooom.mods.mm.ports.storage.MekSlurryPortStorage;
import lombok.SneakyThrows;
import mekanism.api.chemical.slurry.SlurryStack;
import mekanism.client.jei.MekanismJEI;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import java.util.List;
import java.util.function.Supplier;
public class MekSlurryPortParser implements IPortParser {
public class MekSlurryPortParser implements IPortFactory {
@Override
public void setIngredients(IIngredients ingredients, List<?> stacks, boolean input) {
if (input) {
ingredients.setInputs(MekanismJEI.TYPE_SLURRY, (List<SlurryStack>)stacks);
} else {
ingredients.setOutputs(MekanismJEI.TYPE_SLURRY, (List<SlurryStack>)stacks);
}
}
@Override
public PortState createState(JsonObject obj) {
DataResult<Pair<MekSlurryPortState, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(MekSlurryPortState.CODEC).apply(obj);
@@ -29,7 +44,7 @@ public class MekSlurryPortParser implements IPortParser {
}
@Override
public Supplier<IPortStorage> createStorage(JsonObject obj) {
public Supplier<PortStorage> createStorage(JsonObject obj) {
return () -> {
DataResult<Pair<MekSlurryPortStorage, JsonElement>> apply = JsonOps.INSTANCE.withDecoder(MekSlurryPortStorage.CODEC).apply(obj);
return apply.result().get().getFirst();

View File

@@ -5,10 +5,12 @@ import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.ports.storage.EnergyPortStorage;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import lombok.Getter;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.drawable.IDrawableStatic;
import mezz.jei.api.helpers.IJeiHelpers;
import mezz.jei.api.ingredients.IIngredientType;
import net.minecraft.util.ResourceLocation;
import java.util.List;
@@ -28,9 +30,9 @@ public static final Codec<EnergyPortState> CODEC =RecordCodecBuilder.create(x -
}
@Override
public void processRequirement(List<IPortStorage> storage) {
public void processRequirement(List<PortStorage> storage) {
int current = amount;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof EnergyPortStorage) {
EnergyPortStorage energyInv = (EnergyPortStorage) inv;
current -= energyInv.getInv().extractEnergy(current, false);
@@ -42,9 +44,9 @@ public static final Codec<EnergyPortState> CODEC =RecordCodecBuilder.create(x -
}
@Override
public boolean validateRequirement(List<IPortStorage> storage) {
public boolean validateRequirement(List<PortStorage> storage) {
int current = amount;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof EnergyPortStorage) {
EnergyPortStorage energyInv = (EnergyPortStorage) inv;
current -= energyInv.getInv().extractEnergy(current, true);
@@ -57,9 +59,9 @@ public static final Codec<EnergyPortState> CODEC =RecordCodecBuilder.create(x -
}
@Override
public void processResult(List<IPortStorage> storage) {
public void processResult(List<PortStorage> storage) {
int current = amount;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof EnergyPortStorage) {
EnergyPortStorage energyInv = (EnergyPortStorage) inv;
current -= energyInv.getInv().receiveEnergy(current, false);
@@ -71,9 +73,9 @@ public static final Codec<EnergyPortState> CODEC =RecordCodecBuilder.create(x -
}
@Override
public boolean validateResult(List<IPortStorage> storage) {
public boolean validateResult(List<PortStorage> storage) {
int current = amount;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof EnergyPortStorage) {
EnergyPortStorage energyInv = (EnergyPortStorage) inv;
current -= energyInv.getInv().receiveEnergy(current, true);
@@ -95,4 +97,9 @@ public static final Codec<EnergyPortState> CODEC =RecordCodecBuilder.create(x -
IDrawableStatic drawable = helpers.getGuiHelper().createDrawable(new ResourceLocation(MM.ID, "textures/gui/slot_parts.png"), 18, 61, 4, 18);
drawable.draw(ms, x, y);
}
@Override
public IIngredientType<?> getJeiIngredientType() {
return null;
}
}

View File

@@ -1,14 +1,14 @@
package com.ticticboooom.mods.mm.ports.state;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.client.util.FluidRenderer;
import com.ticticboooom.mods.mm.exception.InvalidProcessDefinitionException;
import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.ports.storage.FluidPortStorage;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import lombok.Getter;
import lombok.SneakyThrows;
import mezz.jei.api.constants.VanillaTypes;
@@ -17,14 +17,13 @@ import mezz.jei.api.gui.drawable.IDrawableStatic;
import mezz.jei.api.helpers.IJeiHelpers;
import mezz.jei.api.ingredients.IIngredientType;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.item.ItemStack;
import net.minecraft.fluid.Fluid;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.registries.ForgeRegistries;
import java.util.List;
import java.util.Objects;
public class FluidPortState extends PortState {
@@ -45,9 +44,9 @@ public class FluidPortState extends PortState {
}
@Override
public void processRequirement(List<IPortStorage> storage) {
public void processRequirement(List<PortStorage> storage) {
int current = amount;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof FluidPortStorage) {
FluidPortStorage fInv = (FluidPortStorage) inv;
FluidStack fluidInTank = fInv.getInv().getFluidInTank(0);
@@ -64,9 +63,9 @@ public class FluidPortState extends PortState {
}
@Override
public boolean validateRequirement(List<IPortStorage> storage) {
public boolean validateRequirement(List<PortStorage> storage) {
int current = amount;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof FluidPortStorage) {
FluidPortStorage fInv = (FluidPortStorage) inv;
FluidStack fluidInTank = fInv.getInv().getFluidInTank(0);
@@ -84,9 +83,9 @@ public class FluidPortState extends PortState {
}
@Override
public void processResult(List<IPortStorage> storage) {
public void processResult(List<PortStorage> storage) {
int current = amount;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof FluidPortStorage) {
FluidPortStorage fInv = (FluidPortStorage) inv;
FluidStack fluidInTank = fInv.getInv().getFluidInTank(0);
@@ -103,9 +102,9 @@ public class FluidPortState extends PortState {
}
@Override
public boolean validateResult(List<IPortStorage> storage) {
public boolean validateResult(List<PortStorage> storage) {
int current = amount;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof FluidPortStorage) {
FluidPortStorage fInv = (FluidPortStorage) inv;
FluidStack fluidInTank = fInv.getInv().getFluidInTank(0);
@@ -144,19 +143,20 @@ public class FluidPortState extends PortState {
slot.draw(ms, x, y);
}
@Override
public void setIngredient(IIngredients in, boolean input) {
FluidStack stack = new FluidStack(ForgeRegistries.FLUIDS.getValue(RLUtils.toRL(fluid)), amount);
if (input) {
in.setInput(VanillaTypes.FLUID, stack);
} else {
in.setOutput(VanillaTypes.FLUID, stack);
}
}
@Override
public void setupRecipe(IRecipeLayout layout, Integer typeIndex, int x, int y, boolean input) {
layout.getFluidStacks().init(typeIndex, input, x + 1, y + 1, 16, 16, 1, false, null);
layout.getFluidStacks().set(typeIndex, new FluidStack(ForgeRegistries.FLUIDS.getValue(RLUtils.toRL(fluid)), 1));
}
@Override
public IIngredientType<?> getJeiIngredientType() {
return VanillaTypes.FLUID;
}
@Override
public <T> List<T> getIngredient(boolean input) {
return (List<T>) ImmutableList.of(new FluidStack(ForgeRegistries.FLUIDS.getValue(RLUtils.toRL(fluid)), amount));
}
}

View File

@@ -1,34 +1,31 @@
package com.ticticboooom.mods.mm.ports.state;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.exception.InvalidProcessDefinitionException;
import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import com.ticticboooom.mods.mm.ports.storage.ItemPortStorage;
import lombok.Getter;
import lombok.SneakyThrows;
import mekanism.common.integration.projecte.IngredientHelper;
import mezz.jei.api.constants.VanillaTypes;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.drawable.IDrawable;
import mezz.jei.api.gui.drawable.IDrawableStatic;
import mezz.jei.api.gui.ingredient.IGuiIngredient;
import mezz.jei.api.helpers.IJeiHelpers;
import mezz.jei.api.ingredients.IIngredientType;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.data.ItemTagsProvider;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.tags.ITag;
import net.minecraft.tags.ItemTags;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.registries.ForgeRegistries;
import org.apache.http.annotation.Immutable;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -54,9 +51,9 @@ public class ItemPortState extends PortState {
}
@Override
public void processRequirement(List<IPortStorage> storage) {
public void processRequirement(List<PortStorage> storage) {
int current = count;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof ItemPortStorage) {
ItemPortStorage iinv = (ItemPortStorage) inv;
for (int i = 0; i < iinv.getInv().getSlots(); i++) {
@@ -88,9 +85,9 @@ public class ItemPortState extends PortState {
}
@Override
public boolean validateRequirement(List<IPortStorage> storage) {
public boolean validateRequirement(List<PortStorage> storage) {
int current = count;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof ItemPortStorage) {
ItemPortStorage iinv = (ItemPortStorage) inv;
for (int i = 0; i < iinv.getInv().getSlots(); i++) {
@@ -119,9 +116,9 @@ public class ItemPortState extends PortState {
}
@Override
public void processResult(List<IPortStorage> storage) {
public void processResult(List<PortStorage> storage) {
int current = 0;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof ItemPortStorage) {
ItemPortStorage iinv = (ItemPortStorage) inv;
for (int i = 0; i < iinv.getInv().getSlots(); i++) {
@@ -148,9 +145,9 @@ public class ItemPortState extends PortState {
}
@Override
public boolean validateResult(List<IPortStorage> storage) {
public boolean validateResult(List<PortStorage> storage) {
int current = 0;
for (IPortStorage inv : storage) {
for (PortStorage inv : storage) {
if (inv instanceof ItemPortStorage) {
ItemPortStorage iinv = (ItemPortStorage) inv;
for (int i = 0; i < iinv.getInv().getSlots(); i++) {
@@ -214,23 +211,18 @@ public class ItemPortState extends PortState {
}
@Override
public void setIngredient(IIngredients in, boolean input) {
public <T> List<T> getIngredient(boolean input) {
if (!item.equals("") && RLUtils.isRL(item)) {
if (input){
in.setInput(VanillaTypes.ITEM, new ItemStack(ForgeRegistries.ITEMS.getValue(RLUtils.toRL(item)), this.count));
} else {
in.setOutput(VanillaTypes.ITEM, new ItemStack(ForgeRegistries.ITEMS.getValue(RLUtils.toRL(item)), this.count));
}
return (List<T>) ImmutableList.of(new ItemStack(ForgeRegistries.ITEMS.getValue(RLUtils.toRL(item)), this.count));
} else if (!tag.equals("") && RLUtils.isRL(tag)) {
ITag<Item> tag = ItemTags.getAllTags().getTag(RLUtils.toRL(this.tag));
assert tag != null;
Stream<ItemStack> itemStackStream = tag.getValues().stream().map(x -> new ItemStack(x.getItem(), this.count));
if (input){
in.setInputs(VanillaTypes.ITEM, itemStackStream.collect(Collectors.toList()));
} else {
in.setOutputs(VanillaTypes.ITEM, itemStackStream.collect(Collectors.toList()));
}
List<ItemStack> stacks = new ArrayList<>();
tag.getValues().forEach(z -> stacks.add(new ItemStack(z, this.count)));
return (List<T>)stacks;
}
return new ArrayList<>();
}
@Override
@@ -243,6 +235,11 @@ public class ItemPortState extends PortState {
assert tag != null;
Stream<ItemStack> itemStackStream = tag.getValues().stream().map(z -> new ItemStack(z.getItem(), this.count));
layout.getItemStacks().set(typeIndex, itemStackStream.collect(Collectors.toList()));
}
}
@Override
public IIngredientType<?> getJeiIngredientType() {
return VanillaTypes.ITEM;
}
}

View File

@@ -1,18 +1,18 @@
package com.ticticboooom.mods.mm.ports.state;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.exception.InvalidProcessDefinitionException;
import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import com.ticticboooom.mods.mm.ports.storage.MekGasPortStorage;
import lombok.SneakyThrows;
import mekanism.api.Action;
import mekanism.api.MekanismAPI;
import mekanism.api.chemical.gas.GasStack;
import mekanism.api.inventory.AutomationType;
import mekanism.client.jei.MekanismJEI;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.drawable.IDrawableStatic;
@@ -42,9 +42,9 @@ public class MekGasPortState extends PortState {
}
@Override
public void processRequirement(List<IPortStorage> storage) {
public void processRequirement(List<PortStorage> storage) {
long current = amount;
for (IPortStorage st : storage) {
for (PortStorage st : storage) {
if (st instanceof MekGasPortStorage) {
MekGasPortStorage gasStorage = (MekGasPortStorage) st;
GasStack extract = gasStorage.getInv().extractChemical(0, current, Action.EXECUTE);
@@ -57,9 +57,9 @@ public class MekGasPortState extends PortState {
}
@Override
public boolean validateRequirement(List<IPortStorage> storage) {
public boolean validateRequirement(List<PortStorage> storage) {
long current = amount;
for (IPortStorage st : storage) {
for (PortStorage st : storage) {
if (st instanceof MekGasPortStorage) {
MekGasPortStorage gasStorage = (MekGasPortStorage) st;
if (gasStorage.getInv().getStack().getType().getRegistryName().toString().equals(gas)) {
@@ -75,9 +75,9 @@ public class MekGasPortState extends PortState {
}
@Override
public void processResult(List<IPortStorage> storage) {
public void processResult(List<PortStorage> storage) {
long current = amount;
for (IPortStorage st : storage) {
for (PortStorage st : storage) {
if (st instanceof MekGasPortStorage) {
MekGasPortStorage gasStorage = (MekGasPortStorage) st;
GasStack extract = gasStorage.getInv().insertChemical(new GasStack(Objects.requireNonNull(MekanismAPI.gasRegistry().getValue(RLUtils.toRL(gas))), current), Action.EXECUTE);
@@ -90,9 +90,9 @@ public class MekGasPortState extends PortState {
}
@Override
public boolean validateResult(List<IPortStorage> storage) {
public boolean validateResult(List<PortStorage> storage) {
long current = amount;
for (IPortStorage st : storage) {
for (PortStorage st : storage) {
if (st instanceof MekGasPortStorage) {
MekGasPortStorage gasStorage = (MekGasPortStorage) st;
GasStack extract = gasStorage.getInv().insertChemical(new GasStack(Objects.requireNonNull(MekanismAPI.gasRegistry().getValue(RLUtils.toRL(gas))), current), Action.SIMULATE);
@@ -136,11 +136,12 @@ public class MekGasPortState extends PortState {
}
@Override
public void setIngredient(IIngredients in, boolean input) {
if (input){
in.setInput(MekanismJEI.TYPE_GAS, new GasStack(MekanismAPI.gasRegistry().getValue(RLUtils.toRL(gas)), 1000));
} else {
in.setOutput(MekanismJEI.TYPE_GAS, new GasStack(MekanismAPI.gasRegistry().getValue(RLUtils.toRL(gas)), 1000));
}
public <T> List<T> getIngredient(boolean input) {
return (List<T>) ImmutableList.of(new GasStack(MekanismAPI.gasRegistry().getValue(RLUtils.toRL(gas)), 1000));
}
@Override
public IIngredientType<?> getJeiIngredientType() {
return MekanismJEI.TYPE_GAS;
}
}

View File

@@ -1,19 +1,18 @@
package com.ticticboooom.mods.mm.ports.state;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.exception.InvalidProcessDefinitionException;
import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import com.ticticboooom.mods.mm.ports.storage.MekSlurryPortStorage;
import lombok.SneakyThrows;
import mekanism.api.Action;
import mekanism.api.MekanismAPI;
import mekanism.api.chemical.gas.GasStack;
import mekanism.api.chemical.slurry.SlurryStack;
import mekanism.api.inventory.AutomationType;
import mekanism.client.jei.MekanismJEI;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.drawable.IDrawableStatic;
@@ -43,9 +42,9 @@ public class MekSlurryPortState extends PortState {
}
@Override
public void processRequirement(List<IPortStorage> storage) {
public void processRequirement(List<PortStorage> storage) {
long current = amount;
for (IPortStorage st : storage) {
for (PortStorage st : storage) {
if (st instanceof MekSlurryPortStorage) {
MekSlurryPortStorage gasStorage = (MekSlurryPortStorage) st;
if (gasStorage.getInv().getStack().getType().getRegistryName().toString().equals(slurry)) {
@@ -60,9 +59,9 @@ public class MekSlurryPortState extends PortState {
}
@Override
public boolean validateRequirement(List<IPortStorage> storage) {
public boolean validateRequirement(List<PortStorage> storage) {
long current = amount;
for (IPortStorage st : storage) {
for (PortStorage st : storage) {
if (st instanceof MekSlurryPortStorage) {
MekSlurryPortStorage gasStorage = (MekSlurryPortStorage) st;
if (gasStorage.getInv().getStack().getType().getRegistryName().toString().equals(slurry)) {
@@ -78,9 +77,9 @@ public class MekSlurryPortState extends PortState {
}
@Override
public void processResult(List<IPortStorage> storage) {
public void processResult(List<PortStorage> storage) {
long current = amount;
for (IPortStorage st : storage) {
for (PortStorage st : storage) {
if (st instanceof MekSlurryPortStorage) {
MekSlurryPortStorage gasStorage = (MekSlurryPortStorage) st;
SlurryStack extract = gasStorage.getInv().insertChemical(new SlurryStack(Objects.requireNonNull(MekanismAPI.slurryRegistry().getValue(RLUtils.toRL(slurry))), current), Action.EXECUTE);
@@ -93,9 +92,9 @@ public class MekSlurryPortState extends PortState {
}
@Override
public boolean validateResult(List<IPortStorage> storage) {
public boolean validateResult(List<PortStorage> storage) {
long current = amount;
for (IPortStorage st : storage) {
for (PortStorage st : storage) {
if (st instanceof MekSlurryPortStorage) {
MekSlurryPortStorage gasStorage = (MekSlurryPortStorage) st;
SlurryStack extract = gasStorage.getInv().insertChemical(new SlurryStack(Objects.requireNonNull(MekanismAPI.slurryRegistry().getValue(RLUtils.toRL(slurry))), current), Action.SIMULATE);
@@ -140,11 +139,12 @@ public class MekSlurryPortState extends PortState {
@Override
public void setIngredient(IIngredients in, boolean input) {
if (input) {
in.setInput(MekanismJEI.TYPE_SLURRY, new SlurryStack(MekanismAPI.slurryRegistry().getValue(RLUtils.toRL(slurry)), 1000));
} else {
in.setOutput(MekanismJEI.TYPE_SLURRY, new SlurryStack(MekanismAPI.slurryRegistry().getValue(RLUtils.toRL(slurry)), 1000));
}
public <T> List<T> getIngredient(boolean input) {
return (List<T>) ImmutableList.of(new SlurryStack(MekanismAPI.slurryRegistry().getValue(RLUtils.toRL(slurry)), 1000));
}
@Override
public IIngredientType<?> getJeiIngredientType() {
return MekanismJEI.TYPE_SLURRY;
}
}

View File

@@ -1,14 +1,16 @@
package com.ticticboooom.mods.mm.ports.state;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import lombok.Getter;
import lombok.Setter;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.helpers.IJeiHelpers;
import mezz.jei.api.ingredients.IIngredientType;
import mezz.jei.api.ingredients.IIngredients;
import net.minecraft.util.ResourceLocation;
import java.util.ArrayList;
import java.util.List;
public abstract class PortState {
@@ -16,15 +18,16 @@ public abstract class PortState {
@Setter
private boolean consumePerTick = false;
public abstract void processRequirement(List<IPortStorage> storage);
public abstract boolean validateRequirement(List<IPortStorage> storage);
public abstract void processResult(List<IPortStorage> storage);
public abstract boolean validateResult(List<IPortStorage> storage);
public abstract void processRequirement(List<PortStorage> storage);
public abstract boolean validateRequirement(List<PortStorage> storage);
public abstract void processResult(List<PortStorage> storage);
public abstract boolean validateResult(List<PortStorage> storage);
public abstract ResourceLocation getName();
public void validateDefinition() {}
public void render(MatrixStack ms, int x, int y, int mouseX, int mouseY, IJeiHelpers helpers) {}
public void setIngredient(IIngredients in, boolean input){
public abstract IIngredientType<?> getJeiIngredientType();
public <T> List<T> getIngredient(boolean input) {
return new ArrayList<>();
}
public void setupRecipe(IRecipeLayout layout, Integer typeIndex, int x, int y, boolean input) {

View File

@@ -12,13 +12,14 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AbstractGui;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Slot;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.CapabilityEnergy;
public class EnergyPortStorage implements IPortStorage {
public class EnergyPortStorage extends PortStorage {
public static final Codec<EnergyPortStorage> CODEC = RecordCodecBuilder.create(x -> x.group(
Codec.INT.fieldOf("capacity").forGetter(z -> z.inv.getMaxEnergyStored())
).apply(x, EnergyPortStorage::new));
@@ -70,9 +71,4 @@ public class EnergyPortStorage implements IPortStorage {
AbstractGui.drawString(stack, Minecraft.getInstance().font,Math.round((float)10000 * amount) / 100.f + "%", left + 30, top + 60, 0xfefefe);
AbstractGui.drawString(stack, Minecraft.getInstance().font,inv.getEnergyStored() + "FE", left + 30, top + 80, 0xfefefe);
}
@Override
public void setupContainer(PortBlockContainer container, PlayerInventory inv, MachinePortBlockEntity tile) {
}
}

View File

@@ -13,15 +13,15 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AbstractGui;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Slot;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
public class FluidPortStorage implements IPortStorage {
public class FluidPortStorage extends PortStorage {
public static final Codec<FluidPortStorage> CODEC = RecordCodecBuilder.create(x -> x.group(
Codec.INT.fieldOf("capacity").forGetter(z -> z.inv.getTankCapacity(0))
).apply(x, FluidPortStorage::new));
@@ -68,9 +68,4 @@ public class FluidPortStorage implements IPortStorage {
AbstractGui.drawCenteredString(stack, Minecraft.getInstance().font, inv.getFluidInTank(0).getAmount() + " " + inv.getFluidInTank(0).getDisplayName().getString(), left + x + 9 + 1, top + y + 30, 0xfefefe);
}
@Override
public void setupContainer(PortBlockContainer container, PlayerInventory inv, MachinePortBlockEntity tile) {
}
}

View File

@@ -1,21 +0,0 @@
package com.ticticboooom.mods.mm.ports.storage;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.ticticboooom.mods.mm.block.container.PortBlockContainer;
import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
public interface IPortStorage {
<T> LazyOptional<T> getLO();
<T> boolean validate(Capability<T> cap);
CompoundNBT save(CompoundNBT nbt);
void load(CompoundNBT nbt);
void render(MatrixStack stack, int mouseX, int mouseY, int left, int top, Screen screen);
void setupContainer(PortBlockContainer container, PlayerInventory inv, MachinePortBlockEntity tile);
}

View File

@@ -20,7 +20,7 @@ import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.ItemStackHandler;
public class ItemPortStorage implements IPortStorage {
public class ItemPortStorage extends PortStorage {
public static final Codec<ItemPortStorage> CODEC = RecordCodecBuilder.create(x -> x.group(
Codec.INT.fieldOf("rows").forGetter(z -> z.rows),
Codec.INT.fieldOf("columns").forGetter(z -> z.columns)
@@ -88,17 +88,6 @@ public class ItemPortStorage implements IPortStorage {
container.addSlot(new Slot(items, (y * columns) + x, x * 18 + offsetX, y * 18 + offsetY));
}
}
int playerOffsetX = 8;
int playerOffsetY = 141;
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 9; i++) {
container.addSlot(new Slot(inv, 9 + (j * 9 + i), i* 18 + playerOffsetX, j* 18 + playerOffsetY));
}
}
for (int i = 0; i < 9; i++) {
container.addSlot(new Slot(inv, i,8 + (i * 18), 199));
}
}

View File

@@ -6,7 +6,6 @@ import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.block.container.PortBlockContainer;
import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity;
import com.ticticboooom.mods.mm.client.util.FluidRenderer;
import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.inventory.mek.PortMekGasInventory;
import lombok.Getter;
@@ -17,6 +16,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AbstractGui;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Slot;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
@@ -24,7 +24,7 @@ import net.minecraftforge.common.util.LazyOptional;
import java.util.Objects;
public class MekGasPortStorage implements IPortStorage {
public class MekGasPortStorage extends PortStorage {
public static final Codec<MekGasPortStorage> CODEC = RecordCodecBuilder.create(x -> x.group(
Codec.LONG.fieldOf("capacity").forGetter(z -> z.capacity)
).apply(x, MekGasPortStorage::new));
@@ -80,9 +80,4 @@ public class MekGasPortStorage implements IPortStorage {
AbstractGui.drawString(stack, Minecraft.getInstance().font, inv.getStack().getAmount() + "mB", left + 30, top + 80, 0xfefefe);
}
@Override
public void setupContainer(PortBlockContainer container, PlayerInventory inv, MachinePortBlockEntity tile) {
}
}

View File

@@ -7,17 +7,16 @@ import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.block.container.PortBlockContainer;
import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity;
import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.inventory.mek.PortMekGasInventory;
import com.ticticboooom.mods.mm.inventory.mek.PortMekSlurryInventory;
import lombok.Getter;
import mekanism.api.MekanismAPI;
import mekanism.api.chemical.gas.GasStack;
import mekanism.api.chemical.slurry.SlurryStack;
import mekanism.common.capabilities.Capabilities;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.AbstractGui;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Slot;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
@@ -25,7 +24,7 @@ import net.minecraftforge.common.util.LazyOptional;
import java.util.Objects;
public class MekSlurryPortStorage implements IPortStorage {
public class MekSlurryPortStorage extends PortStorage {
public static final Codec<MekSlurryPortStorage> CODEC = RecordCodecBuilder.create(x -> x.group(
Codec.LONG.fieldOf("capacity").forGetter(z -> z.capacity)
).apply(x, MekSlurryPortStorage::new));
@@ -69,22 +68,17 @@ public class MekSlurryPortStorage implements IPortStorage {
@Override
public void render(MatrixStack stack, int mouseX, int mouseY, int left, int top, Screen screen) {
Minecraft.getInstance().textureManager.bind(new ResourceLocation(MM.ID, "textures/gui/port_gui.png"));
screen.blit(stack, left, top, 0, 0, 175, 256);
screen.blit(stack, left, top, 0, 0, 175, 256);
int barOffsetX = 175 - 30;
int barOffsetY = 20;
screen.blit(stack, left + barOffsetX, top + barOffsetY, 175, 18, 18, 108);
float amount = 0;
if (inv.getStack().getAmount() > 0) {
amount = (float)inv.getStack().getAmount() / inv.getTankCapacity(0);
amount = (float) inv.getStack().getAmount() / inv.getTankCapacity(0);
}
screen.blit(stack, left + barOffsetX, top + barOffsetY, 193, 18, 18, (int) (108 * amount));
AbstractGui.drawString(stack, Minecraft.getInstance().font,inv.getStack().getType().getTextComponent().getString(), left + 30, top + 60, 0xfefefe);
AbstractGui.drawString(stack, Minecraft.getInstance().font, inv.getStack().getType().getTextComponent().getString(), left + 30, top + 60, 0xfefefe);
AbstractGui.drawString(stack, Minecraft.getInstance().font, inv.getStack().getAmount() + "mB", left + 30, top + 80, 0xfefefe);
}
@Override
public void setupContainer(PortBlockContainer container, PlayerInventory inv, MachinePortBlockEntity tile) {
}
}

View File

@@ -0,0 +1,34 @@
package com.ticticboooom.mods.mm.ports.storage;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.ticticboooom.mods.mm.block.container.PortBlockContainer;
import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
public abstract class PortStorage {
public abstract <T> LazyOptional<T> getLO();
public abstract <T> boolean validate(Capability<T> cap);
public abstract CompoundNBT save(CompoundNBT nbt);
public abstract void load(CompoundNBT nbt);
public abstract void render(MatrixStack stack, int mouseX, int mouseY, int left, int top, Screen screen);
public void setupContainer(PortBlockContainer container, PlayerInventory inv, MachinePortBlockEntity tile){
int playerOffsetX = 8;
int playerOffsetY = 141;
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 9; i++) {
container.addSlot(new Slot(inv, 9 + (j * 9 + i), i* 18 + playerOffsetX, j* 18 + playerOffsetY));
}
}
for (int i = 0; i < 9; i++) {
container.addSlot(new Slot(inv, i,8 + (i * 18), 199));
}
};
}

View File

@@ -14,9 +14,7 @@ import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity;
import com.ticticboooom.mods.mm.helper.IOHelper;
import com.ticticboooom.mods.mm.helper.RLUtils;
import com.ticticboooom.mods.mm.ports.MasterfulPortType;
import com.ticticboooom.mods.mm.ports.storage.IPortStorage;
import net.minecraft.block.Block;
import net.minecraft.inventory.container.Container;
import com.ticticboooom.mods.mm.ports.storage.PortStorage;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.item.*;
import net.minecraft.tileentity.TileEntityType;
@@ -24,9 +22,6 @@ import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.fml.network.IContainerFactory;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import java.io.File;
import java.io.FileNotFoundException;
@@ -85,7 +80,7 @@ public class MMLoader {
ResourceLocation resourceLocation = RLUtils.toRL(type);
MasterfulPortType value = MMPorts.PORTS.get(resourceLocation);
Supplier<IPortStorage> data = value.getParser().createStorage(portObj.get("data").getAsJsonObject());
Supplier<PortStorage> data = value.getParser().createStorage(portObj.get("data").getAsJsonObject());
{
Registerable<RegistryObject<TileEntityType<?>>> tile = new Registerable<>();

View File

@@ -1,10 +1,18 @@
package com.ticticboooom.mods.mm.registration;
import com.ticticboooom.mods.mm.MM;
import com.ticticboooom.mods.mm.block.ProjectorBlock;
import com.ticticboooom.mods.mm.block.StructureGenBlock;
import com.ticticboooom.mods.mm.block.container.ProjectorBlockContainer;
import com.ticticboooom.mods.mm.block.container.StructureGenBlockContainer;
import com.ticticboooom.mods.mm.block.tile.ProjectorBlockEntity;
import com.ticticboooom.mods.mm.block.tile.StructureGenBlockEntity;
import com.ticticboooom.mods.mm.item.StructureGenSelectionDevice;
import net.minecraft.block.Block;
import net.minecraft.inventory.container.ContainerType;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
@@ -18,4 +26,13 @@ public class MMSetup {
public static final RegistryObject<Item> BLUEPRINT = ITEMS_REG.register("blueprint", () -> new Item(new Item.Properties().tab(MMLoader.MASTERFUL_ITEM_GROUP)));
public static final RegistryObject<TileEntityType<?>> PROJECTOR_TILE = TILES_REG.register("projector", () -> TileEntityType.Builder.of(ProjectorBlockEntity::new).build(null));
public static final RegistryObject<Block> PROJECTOR_BLOCK = BLOCKS_REG.register("projector", ProjectorBlock::new);
public static final RegistryObject<ContainerType<?>> PROJECTOR_CONTAINER = CONTAINER_REG.register("projector", () -> IForgeContainerType.create(ProjectorBlockContainer::new));
public static final RegistryObject<TileEntityType<?>> STRUCTURE_TILE = TILES_REG.register("structure_generator", () -> TileEntityType.Builder.of(StructureGenBlockEntity::new).build(null));
public static final RegistryObject<Block> STRUCTURE_BLOCK = BLOCKS_REG.register("structure_generator", StructureGenBlock::new);
public static final RegistryObject<ContainerType<?>> STRUCTURE_CONTAINER = CONTAINER_REG.register("structure_generator", () -> IForgeContainerType.create(StructureGenBlockContainer::new));
public static final RegistryObject<Item> STRUCTURE_DEVICE = ITEMS_REG.register("structure_gen_device", StructureGenSelectionDevice::new);
}