diff --git a/build.gradle b/build.gradle index 62a6c2b..7c33ce2 100644 --- a/build.gradle +++ b/build.gradle @@ -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' diff --git a/src/main/java/com/ticticboooom/mods/mm/block/ProjectorBlock.java b/src/main/java/com/ticticboooom/mods/mm/block/ProjectorBlock.java new file mode 100644 index 0000000..9ac373b --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/ProjectorBlock.java @@ -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(); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/StructureGenBlock.java b/src/main/java/com/ticticboooom/mods/mm/block/StructureGenBlock.java new file mode 100644 index 0000000..1ce0ec3 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/StructureGenBlock.java @@ -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(); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/container/ProjectorBlockContainer.java b/src/main/java/com/ticticboooom/mods/mm/block/container/ProjectorBlockContainer.java new file mode 100644 index 0000000..e8a09b0 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/container/ProjectorBlockContainer.java @@ -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())); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/container/StructureGenBlockContainer.java b/src/main/java/com/ticticboooom/mods/mm/block/container/StructureGenBlockContainer.java new file mode 100644 index 0000000..9b2c607 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/container/StructureGenBlockContainer.java @@ -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())); + } +} 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 4b89021..c3db5d6 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 @@ -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 ports = structure.getPorts(worldPosition, level, index); - List inputPorts = new ArrayList<>(); - List outputPorts = new ArrayList<>(); + List inputPorts = new ArrayList<>(); + List 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 inputPorts, List outputPorts, MachineStructureRecipe structure) { + private void onPortsEstablished(List inputPorts, List outputPorts, MachineStructureRecipe structure) { List processRecipes = level.getRecipeManager().getAllRecipesFor(RecipeTypes.MACHINE_PROCESS); boolean processed = false; for (MachineProcessRecipe recipe : processRecipes) { diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/MachinePortBlockEntity.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/MachinePortBlockEntity.java index db94b66..6299410 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/tile/MachinePortBlockEntity.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/MachinePortBlockEntity.java @@ -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; diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/ProjectorBlockEntity.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/ProjectorBlockEntity.java new file mode 100644 index 0000000..1349941 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/ProjectorBlockEntity.java @@ -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()); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/StructureGenBlockEntity.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/StructureGenBlockEntity.java new file mode 100644 index 0000000..5e1c0ff --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/StructureGenBlockEntity.java @@ -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 list = NonNullList.of(device); + nbt = ItemStackHelper.saveAllItems(nbt, list); + return super.save(nbt); + } + + @Override + public void load(BlockState p_230337_1_, CompoundNBT nbt) { + NonNullList 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(); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/client/jei/category/MachineProcessRecipeCategory.java b/src/main/java/com/ticticboooom/mods/mm/client/jei/category/MachineProcessRecipeCategory.java index 591e389..8153472 100644 --- a/src/main/java/com/ticticboooom/mods/mm/client/jei/category/MachineProcessRecipeCategory.java +++ b/src/main/java/com/ticticboooom/mods/mm/client/jei/category/MachineProcessRecipeCategory.java @@ -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 { @@ -70,11 +69,35 @@ public class MachineProcessRecipeCategory implements IRecipeCategory> inputStacks = new HashMap<>(); + Map> outputStacks = new HashMap<>(); + + for (Map.Entry resource : MMPorts.PORTS.entrySet()) { + ResourceLocation registryName = resource.getKey(); + inputStacks.put(registryName, new ArrayList()); + outputStacks.put(registryName, new ArrayList()); } + + 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> entry : inputStacks.entrySet()) { + MasterfulPortType masterfulPortType = MMPorts.PORTS.get(entry.getKey()); + masterfulPortType.getParser().setIngredients(ingredients, entry.getValue(), true); + } + + for (Map.Entry> 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 { + 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_) { + + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/data/MachineProcessRecipe.java b/src/main/java/com/ticticboooom/mods/mm/data/MachineProcessRecipe.java index 7979240..57549ff 100644 --- a/src/main/java/com/ticticboooom/mods/mm/data/MachineProcessRecipe.java +++ b/src/main/java/com/ticticboooom/mods/mm/data/MachineProcessRecipe.java @@ -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 { this.rl = rl; } - public boolean matches(List inputPorts, String structureId) { + public boolean matches(List inputPorts, String structureId) { return structureId.equals(this.structureId) && canTake(inputPorts); } - private boolean canTake(List inputPorts) { + private boolean canTake(List inputPorts) { for (PortState input : inputs) { if (!input.validateRequirement(inputPorts)) { return false; @@ -60,7 +60,7 @@ public class MachineProcessRecipe implements IRecipe { return true; } - private boolean canPut(List outputPorts) { + private boolean canPut(List outputPorts) { for (PortState output : outputs) { if (!output.validateResult(outputPorts)) { return false; @@ -69,7 +69,7 @@ public class MachineProcessRecipe implements IRecipe { return true; } - public ProcessUpdate process(List inputPorts, List outputPorts, ProcessUpdate update) { + public ProcessUpdate process(List inputPorts, List outputPorts, ProcessUpdate update) { boolean canTake = canTake(inputPorts); boolean canPut = canPut(outputPorts); diff --git a/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMItemModelProvider.java b/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMItemModelProvider.java index 4dcaa4e..64c30e3 100644 --- a/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMItemModelProvider.java +++ b/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMItemModelProvider.java @@ -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"); } } \ No newline at end of file diff --git a/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMLangProvider.java b/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMLangProvider.java index 2ee713e..f42abfa 100644 --- a/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMLangProvider.java +++ b/src/main/java/com/ticticboooom/mods/mm/datagen/gen/MMLangProvider.java @@ -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"); } } diff --git a/src/main/java/com/ticticboooom/mods/mm/helper/NBTHelper.java b/src/main/java/com/ticticboooom/mods/mm/helper/NBTHelper.java new file mode 100644 index 0000000..e9f33ab --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/helper/NBTHelper.java @@ -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; + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/item/StructureGenSelectionDevice.java b/src/main/java/com/ticticboooom/mods/mm/item/StructureGenSelectionDevice.java new file mode 100644 index 0000000..7e922bc --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/item/StructureGenSelectionDevice.java @@ -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; + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/model/JEIIngredientWrapper.java b/src/main/java/com/ticticboooom/mods/mm/model/JEIIngredientWrapper.java new file mode 100644 index 0000000..c5f1e1d --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/model/JEIIngredientWrapper.java @@ -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 { + @Getter + List stacks = new ArrayList<>(); + + public void add(IIngredientType type, TStack stack) { + stacks.add(stack); + } + + public void add(IIngredientType type, List stack) { + stacks.addAll(stack); + } +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/MasterfulPortType.java b/src/main/java/com/ticticboooom/mods/mm/ports/MasterfulPortType.java index f4d9d50..35bee53 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/MasterfulPortType.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/MasterfulPortType.java @@ -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 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; } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/EnergyPortParser.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/EnergyPortParser.java index e08a360..1f4b999 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/parser/EnergyPortParser.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/parser/EnergyPortParser.java @@ -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 createStorage(JsonObject obj) { + public Supplier createStorage(JsonObject obj) { return () -> { DataResult> 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> apply = JsonOps.INSTANCE.withDecoder(EnergyPortState.CODEC).apply(obj); diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/FluidPortParser.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/FluidPortParser.java index 4d2bd86..490c84b 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/parser/FluidPortParser.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/parser/FluidPortParser.java @@ -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 createStorage(JsonObject obj) { + public Supplier createStorage(JsonObject obj) { return () -> { DataResult> 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)stacks); + } else { + ingredients.setOutputs(VanillaTypes.FLUID, (List)stacks); + } + } + @Override public PortState createState(JsonObject obj) { DataResult> apply = JsonOps.INSTANCE.withDecoder(FluidPortState.CODEC).apply(obj); diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/IPortFactory.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/IPortFactory.java new file mode 100644 index 0000000..09d409c --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/parser/IPortFactory.java @@ -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 createStorage(JsonObject obj); + void write(PacketBuffer buf, PortState state); + void setIngredients(IIngredients ingredients, List stacks, boolean input); +} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/IPortParser.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/IPortParser.java deleted file mode 100644 index c041b4f..0000000 --- a/src/main/java/com/ticticboooom/mods/mm/ports/parser/IPortParser.java +++ /dev/null @@ -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 createStorage(JsonObject obj); - void write(PacketBuffer buf, PortState state); -} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/ItemPortParser.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/ItemPortParser.java index 2abb320..a953a7d 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/parser/ItemPortParser.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/parser/ItemPortParser.java @@ -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 createStorage(JsonObject obj) { + public void setIngredients(IIngredients ingredients, List stacks, boolean input) { + if (input) { + ingredients.setInputs(VanillaTypes.ITEM, (List)stacks); + } else { + ingredients.setOutputs(VanillaTypes.ITEM, (List)stacks); + } + } + + @Override + public Supplier createStorage(JsonObject obj) { return () -> { DataResult> apply = JsonOps.INSTANCE.withDecoder(ItemPortStorage.CODEC).apply(obj); return apply.result().get().getFirst(); diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/MekGasPortParser.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/MekGasPortParser.java index 812569a..360e130 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/parser/MekGasPortParser.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/parser/MekGasPortParser.java @@ -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)stacks); + } else { + ingredients.setOutputs(MekanismJEI.TYPE_GAS, (List)stacks); + } + } + @Override public PortState createState(JsonObject obj) { DataResult> apply = JsonOps.INSTANCE.withDecoder(MekGasPortState.CODEC).apply(obj); @@ -28,7 +44,7 @@ public class MekGasPortParser implements IPortParser { } @Override - public Supplier createStorage(JsonObject obj) { + public Supplier createStorage(JsonObject obj) { return () -> { DataResult> apply = JsonOps.INSTANCE.withDecoder(MekGasPortStorage.CODEC).apply(obj); return apply.result().get().getFirst(); diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/parser/MekSlurryPortParser.java b/src/main/java/com/ticticboooom/mods/mm/ports/parser/MekSlurryPortParser.java index 88fd7f4..08af54b 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/parser/MekSlurryPortParser.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/parser/MekSlurryPortParser.java @@ -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)stacks); + } else { + ingredients.setOutputs(MekanismJEI.TYPE_SLURRY, (List)stacks); + } + } + @Override public PortState createState(JsonObject obj) { DataResult> apply = JsonOps.INSTANCE.withDecoder(MekSlurryPortState.CODEC).apply(obj); @@ -29,7 +44,7 @@ public class MekSlurryPortParser implements IPortParser { } @Override - public Supplier createStorage(JsonObject obj) { + public Supplier createStorage(JsonObject obj) { return () -> { DataResult> apply = JsonOps.INSTANCE.withDecoder(MekSlurryPortStorage.CODEC).apply(obj); return apply.result().get().getFirst(); diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/EnergyPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/EnergyPortState.java index 66c1bef..edd73fc 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/state/EnergyPortState.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/EnergyPortState.java @@ -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 CODEC =RecordCodecBuilder.create(x - } @Override - public void processRequirement(List storage) { + public void processRequirement(List 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 CODEC =RecordCodecBuilder.create(x - } @Override - public boolean validateRequirement(List storage) { + public boolean validateRequirement(List 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 CODEC =RecordCodecBuilder.create(x - } @Override - public void processResult(List storage) { + public void processResult(List 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 CODEC =RecordCodecBuilder.create(x - } @Override - public boolean validateResult(List storage) { + public boolean validateResult(List 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 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; + } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/FluidPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/FluidPortState.java index ae3761a..f21b04a 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/state/FluidPortState.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/FluidPortState.java @@ -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 storage) { + public void processRequirement(List 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 storage) { + public boolean validateRequirement(List 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 storage) { + public void processResult(List 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 storage) { + public boolean validateResult(List 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 List getIngredient(boolean input) { + return (List) ImmutableList.of(new FluidStack(ForgeRegistries.FLUIDS.getValue(RLUtils.toRL(fluid)), amount)); + } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/ItemPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/ItemPortState.java index 2570f8b..ab54189 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/state/ItemPortState.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/ItemPortState.java @@ -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 storage) { + public void processRequirement(List 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 storage) { + public boolean validateRequirement(List 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 storage) { + public void processResult(List 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 storage) { + public boolean validateResult(List 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 List 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) ImmutableList.of(new ItemStack(ForgeRegistries.ITEMS.getValue(RLUtils.toRL(item)), this.count)); } else if (!tag.equals("") && RLUtils.isRL(tag)) { ITag tag = ItemTags.getAllTags().getTag(RLUtils.toRL(this.tag)); assert tag != null; - Stream 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 stacks = new ArrayList<>(); + tag.getValues().forEach(z -> stacks.add(new ItemStack(z, this.count))); + return (List)stacks; } + return new ArrayList<>(); } @Override @@ -243,6 +235,11 @@ public class ItemPortState extends PortState { assert tag != null; Stream 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; } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/MekGasPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/MekGasPortState.java index a099dd5..32b6b66 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/state/MekGasPortState.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/MekGasPortState.java @@ -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 storage) { + public void processRequirement(List 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 storage) { + public boolean validateRequirement(List 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 storage) { + public void processResult(List 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 storage) { + public boolean validateResult(List 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 List getIngredient(boolean input) { + return (List) ImmutableList.of(new GasStack(MekanismAPI.gasRegistry().getValue(RLUtils.toRL(gas)), 1000)); + } + + @Override + public IIngredientType getJeiIngredientType() { + return MekanismJEI.TYPE_GAS; } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/MekSlurryPortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/MekSlurryPortState.java index 9850130..053fae0 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/state/MekSlurryPortState.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/MekSlurryPortState.java @@ -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 storage) { + public void processRequirement(List 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 storage) { + public boolean validateRequirement(List 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 storage) { + public void processResult(List 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 storage) { + public boolean validateResult(List 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 List getIngredient(boolean input) { + return (List) ImmutableList.of(new SlurryStack(MekanismAPI.slurryRegistry().getValue(RLUtils.toRL(slurry)), 1000)); + } + + @Override + public IIngredientType getJeiIngredientType() { + return MekanismJEI.TYPE_SLURRY; } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/state/PortState.java b/src/main/java/com/ticticboooom/mods/mm/ports/state/PortState.java index 1a316a4..22604e7 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/state/PortState.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/state/PortState.java @@ -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 storage); - public abstract boolean validateRequirement(List storage); - public abstract void processResult(List storage); - public abstract boolean validateResult(List storage); + public abstract void processRequirement(List storage); + public abstract boolean validateRequirement(List storage); + public abstract void processResult(List storage); + public abstract boolean validateResult(List 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 List getIngredient(boolean input) { + return new ArrayList<>(); } public void setupRecipe(IRecipeLayout layout, Integer typeIndex, int x, int y, boolean input) { diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/EnergyPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/EnergyPortStorage.java index 0fe37a4..7dbddf0 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/EnergyPortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/EnergyPortStorage.java @@ -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 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) { - - } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/FluidPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/FluidPortStorage.java index 22ac17c..6269435 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/FluidPortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/FluidPortStorage.java @@ -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 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) { - - } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/IPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/IPortStorage.java deleted file mode 100644 index f9c25e8..0000000 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/IPortStorage.java +++ /dev/null @@ -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 { - LazyOptional getLO(); - boolean validate(Capability 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); -} diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/ItemPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/ItemPortStorage.java index 5dbe512..a4e14f2 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/ItemPortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/ItemPortStorage.java @@ -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 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)); - } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/MekGasPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/MekGasPortStorage.java index 49d365b..141ed70 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/MekGasPortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/MekGasPortStorage.java @@ -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 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) { - - } } diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/MekSlurryPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/MekSlurryPortStorage.java index 55625a9..a3ce949 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/MekSlurryPortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/MekSlurryPortStorage.java @@ -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 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) { - - } } 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 new file mode 100644 index 0000000..7a93778 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/PortStorage.java @@ -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 LazyOptional getLO(); + public abstract boolean validate(Capability 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)); + } + }; +} diff --git a/src/main/java/com/ticticboooom/mods/mm/registration/MMLoader.java b/src/main/java/com/ticticboooom/mods/mm/registration/MMLoader.java index dedc8fe..464f3dc 100644 --- a/src/main/java/com/ticticboooom/mods/mm/registration/MMLoader.java +++ b/src/main/java/com/ticticboooom/mods/mm/registration/MMLoader.java @@ -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 data = value.getParser().createStorage(portObj.get("data").getAsJsonObject()); + Supplier data = value.getParser().createStorage(portObj.get("data").getAsJsonObject()); { Registerable>> tile = new Registerable<>(); diff --git a/src/main/java/com/ticticboooom/mods/mm/registration/MMSetup.java b/src/main/java/com/ticticboooom/mods/mm/registration/MMSetup.java index 9119af6..87beff7 100644 --- a/src/main/java/com/ticticboooom/mods/mm/registration/MMSetup.java +++ b/src/main/java/com/ticticboooom/mods/mm/registration/MMSetup.java @@ -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 BLUEPRINT = ITEMS_REG.register("blueprint", () -> new Item(new Item.Properties().tab(MMLoader.MASTERFUL_ITEM_GROUP))); + public static final RegistryObject> PROJECTOR_TILE = TILES_REG.register("projector", () -> TileEntityType.Builder.of(ProjectorBlockEntity::new).build(null)); + public static final RegistryObject PROJECTOR_BLOCK = BLOCKS_REG.register("projector", ProjectorBlock::new); + public static final RegistryObject> PROJECTOR_CONTAINER = CONTAINER_REG.register("projector", () -> IForgeContainerType.create(ProjectorBlockContainer::new)); + + public static final RegistryObject> STRUCTURE_TILE = TILES_REG.register("structure_generator", () -> TileEntityType.Builder.of(StructureGenBlockEntity::new).build(null)); + public static final RegistryObject STRUCTURE_BLOCK = BLOCKS_REG.register("structure_generator", StructureGenBlock::new); + public static final RegistryObject> STRUCTURE_CONTAINER = CONTAINER_REG.register("structure_generator", () -> IForgeContainerType.create(StructureGenBlockContainer::new)); + + public static final RegistryObject STRUCTURE_DEVICE = ITEMS_REG.register("structure_gen_device", StructureGenSelectionDevice::new); }