mirror of
https://github.com/TicTicBoooom-Mods/MasterfulMachinery.git
synced 2026-03-18 21:40:34 +01:00
Added ability to define ports as structure parts rather than individual blocks.
This commit is contained in:
@@ -8,8 +8,8 @@
|
|||||||
"name": "Item",
|
"name": "Item",
|
||||||
"id": "simple",
|
"id": "simple",
|
||||||
"data": {
|
"data": {
|
||||||
"rows": 3,
|
"rows": 1,
|
||||||
"columns": 3
|
"columns": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
"name": "Energy",
|
"name": "Energy",
|
||||||
"id": "simple",
|
"id": "simple",
|
||||||
"data": {
|
"data": {
|
||||||
"capacity": 1000000000
|
"capacity": 1000000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"name": "Fluid",
|
"name": "Fluid",
|
||||||
"id": "simple",
|
"id": "simple",
|
||||||
"data": {
|
"data": {
|
||||||
"capacity": 10000
|
"capacity": 5000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
"data": {
|
"data": {
|
||||||
"criticalPressure": 7,
|
"criticalPressure": 7,
|
||||||
"dangerPressure": 5,
|
"dangerPressure": 5,
|
||||||
"volume": 10000
|
"volume": 7000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
"name": "Mana",
|
"name": "Mana",
|
||||||
"id": "simple",
|
"id": "simple",
|
||||||
"data": {
|
"data": {
|
||||||
"capacity": 100000
|
"capacity": 50000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
"name": "Starlight",
|
"name": "Starlight",
|
||||||
"id": "simple",
|
"id": "simple",
|
||||||
"data": {
|
"data": {
|
||||||
"capacity": 1000
|
"capacity": 500
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
"name": "Gas",
|
"name": "Gas",
|
||||||
"id": "simple",
|
"id": "simple",
|
||||||
"data": {
|
"data": {
|
||||||
"capacity": 100000000
|
"capacity": 100000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"name": "Slurry",
|
"name": "Slurry",
|
||||||
"id": "simple",
|
"id": "simple",
|
||||||
"data": {
|
"data": {
|
||||||
"capacity": 100000000
|
"capacity": 100000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
"name": "Infuse",
|
"name": "Infuse",
|
||||||
"id": "simple",
|
"id": "simple",
|
||||||
"data": {
|
"data": {
|
||||||
"capacity": 100000000
|
"capacity": 100000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
106
demo_config/config/masterful_machinery/controllers/mid.json
Normal file
106
demo_config/config/masterful_machinery/controllers/mid.json
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
{
|
||||||
|
"controllerId": "mid",
|
||||||
|
"name": "Mid",
|
||||||
|
"ports": [
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:items",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Item",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"rows": 3,
|
||||||
|
"columns": 3
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:energy",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Energy",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"capacity": 1000000000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:fluids",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Fluid",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"capacity": 10000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:pncr_pressure",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Pressure",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"criticalPressure": 7,
|
||||||
|
"dangerPressure": 5,
|
||||||
|
"volume": 10000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:botania_mana",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Mana",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"capacity": 100000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:astral_starlight",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Starlight",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"capacity": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:create_rotation",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Rotation",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"stress": 3
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:mekanism_gas",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Gas",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"capacity": 100000000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:mekanism_slurry",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Slurry",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"capacity": 100000000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:mekanism_infuse",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Infuse",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {
|
||||||
|
"capacity": 100000000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:weather",
|
||||||
|
"textureOverride": "minecraft:block/red_terracotta",
|
||||||
|
"name": "Weather",
|
||||||
|
"id": "intermediate",
|
||||||
|
"data": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -3,9 +3,13 @@ package com.ticticboooom.mods.mm.client.jei.category;
|
|||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.ticticboooom.mods.mm.MM;
|
import com.ticticboooom.mods.mm.MM;
|
||||||
import com.ticticboooom.mods.mm.block.ControllerBlock;
|
import com.ticticboooom.mods.mm.block.ControllerBlock;
|
||||||
|
import com.ticticboooom.mods.mm.block.MachinePortBlock;
|
||||||
import com.ticticboooom.mods.mm.client.util.GuiBlockRenderBuilder;
|
import com.ticticboooom.mods.mm.client.util.GuiBlockRenderBuilder;
|
||||||
import com.ticticboooom.mods.mm.data.MachineStructureRecipe;
|
import com.ticticboooom.mods.mm.data.MachineStructureRecipe;
|
||||||
|
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureBlockPos;
|
||||||
|
import com.ticticboooom.mods.mm.data.model.structure.MachineStructurePort;
|
||||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureRecipeKeyModel;
|
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureRecipeKeyModel;
|
||||||
|
import com.ticticboooom.mods.mm.helper.RLUtils;
|
||||||
import com.ticticboooom.mods.mm.registration.MMLoader;
|
import com.ticticboooom.mods.mm.registration.MMLoader;
|
||||||
import com.ticticboooom.mods.mm.registration.MMSetup;
|
import com.ticticboooom.mods.mm.registration.MMSetup;
|
||||||
import mezz.jei.api.gui.IRecipeLayout;
|
import mezz.jei.api.gui.IRecipeLayout;
|
||||||
@@ -50,10 +54,11 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
|||||||
|
|
||||||
private int sliceY = 0;
|
private int sliceY = 0;
|
||||||
private boolean slicingActive = false;
|
private boolean slicingActive = false;
|
||||||
private Map<Integer, Integer> tagIndexes = new HashMap<>();
|
|
||||||
private Map<Integer, Integer> tagIndexCounter = new HashMap<>();
|
|
||||||
private float scaleFactor = 1F;
|
private float scaleFactor = 1F;
|
||||||
|
|
||||||
|
private int tickTimer = 0;
|
||||||
|
private Map<MachineStructureBlockPos, Integer> variantIndices = new HashMap<>();
|
||||||
|
|
||||||
public MachineStructureRecipeCategory(IJeiHelpers helpers, ControllerBlock controller) {
|
public MachineStructureRecipeCategory(IJeiHelpers helpers, ControllerBlock controller) {
|
||||||
this.helpers = helpers;
|
this.helpers = helpers;
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
@@ -76,6 +81,7 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IDrawable getBackground() {
|
public IDrawable getBackground() {
|
||||||
|
|
||||||
return helpers.getGuiHelper().createDrawable(overlayRl, 0, 0, 162, 150);
|
return helpers.getGuiHelper().createDrawable(overlayRl, 0, 0, 162, 150);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,25 +104,22 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRecipe(IRecipeLayout iRecipeLayout, MachineStructureRecipe machineStructureRecipe, IIngredients iIngredients) {
|
public void setRecipe(IRecipeLayout iRecipeLayout, MachineStructureRecipe recipe, IIngredients iIngredients) {
|
||||||
|
|
||||||
this.xRotation = 0;
|
this.xRotation = 0;
|
||||||
this.yRotation = 0;
|
this.yRotation = 0;
|
||||||
this.yLastMousePosition = 0;
|
this.yLastMousePosition = 0;
|
||||||
this.xLastMousePosition = 0;
|
this.xLastMousePosition = 0;
|
||||||
this.scaleFactor = 1.2f;
|
this.scaleFactor = 1.2f;
|
||||||
|
this.recipe = recipe;
|
||||||
|
this.sliceY = 0;
|
||||||
|
this.slicingActive = false;
|
||||||
|
|
||||||
|
this.variantIndices.clear();
|
||||||
|
this.tickTimer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(MachineStructureRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
|
public void draw(MachineStructureRecipe recipe, MatrixStack matrixStack, double mouseX, double mouseY) {
|
||||||
if (this.recipe != recipe) {
|
|
||||||
this.recipe = null;
|
|
||||||
xRotation = 0;
|
|
||||||
yRotation = 0;
|
|
||||||
sliceY = 0;
|
|
||||||
slicingActive = false;
|
|
||||||
}
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
if (xLastMousePosition == 0) {
|
if (xLastMousePosition == 0) {
|
||||||
xLastMousePosition = mouseX;
|
xLastMousePosition = mouseX;
|
||||||
@@ -125,20 +128,21 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
|||||||
yLastMousePosition = mouseY;
|
yLastMousePosition = mouseY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Do mouse rotations
|
||||||
if (GLFW.glfwGetMouseButton(mc.getMainWindow().getHandle(), GLFW.GLFW_MOUSE_BUTTON_1) != 0) {
|
if (GLFW.glfwGetMouseButton(mc.getMainWindow().getHandle(), GLFW.GLFW_MOUSE_BUTTON_1) != 0) {
|
||||||
double relMoveX = mouseX - xLastMousePosition;
|
double relMoveX = mouseX - xLastMousePosition;
|
||||||
double relMoveY = mouseY - yLastMousePosition;
|
double relMoveY = mouseY - yLastMousePosition;
|
||||||
xRotation += relMoveX;
|
xRotation += relMoveX;
|
||||||
yRotation += relMoveY;
|
yRotation += relMoveY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate distances
|
||||||
int furthestX = Integer.MAX_VALUE;
|
int furthestX = Integer.MAX_VALUE;
|
||||||
int nearestX = Integer.MIN_VALUE;
|
int nearestX = Integer.MIN_VALUE;
|
||||||
int furthestZ = Integer.MAX_VALUE;
|
int furthestZ = Integer.MAX_VALUE;
|
||||||
int nearestZ = Integer.MIN_VALUE;
|
int nearestZ = Integer.MIN_VALUE;
|
||||||
|
|
||||||
int topY = Integer.MIN_VALUE;
|
int topY = Integer.MIN_VALUE;
|
||||||
int bottomY = Integer.MAX_VALUE;
|
int bottomY = Integer.MAX_VALUE;
|
||||||
|
|
||||||
for (MachineStructureRecipeKeyModel part : recipe.getModels().get(0)) {
|
for (MachineStructureRecipeKeyModel part : recipe.getModels().get(0)) {
|
||||||
furthestX = Math.min(part.getPos().getX(), furthestX);
|
furthestX = Math.min(part.getPos().getX(), furthestX);
|
||||||
nearestX = Math.max(part.getPos().getX(), nearestX);
|
nearestX = Math.max(part.getPos().getX(), nearestX);
|
||||||
@@ -147,6 +151,8 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
|||||||
topY = Math.max(part.getPos().getY(), topY);
|
topY = Math.max(part.getPos().getY(), topY);
|
||||||
bottomY = Math.min(part.getPos().getY(), bottomY);
|
bottomY = Math.min(part.getPos().getY(), bottomY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Do mouse scroll zoom
|
||||||
if (GLFW.glfwGetMouseButton(mc.getMainWindow().getHandle(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != 0) {
|
if (GLFW.glfwGetMouseButton(mc.getMainWindow().getHandle(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != 0) {
|
||||||
if (scrollLastPos == 0) {
|
if (scrollLastPos == 0) {
|
||||||
scrollLastPos = (int) mouseY;
|
scrollLastPos = (int) mouseY;
|
||||||
@@ -157,22 +163,25 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
|||||||
nearestX++;
|
nearestX++;
|
||||||
nearestZ++;
|
nearestZ++;
|
||||||
float centreX = ((float) nearestX - furthestX) / 2f;
|
float centreX = ((float) nearestX - furthestX) / 2f;
|
||||||
|
float centerY = ((float) topY - bottomY) / 2f;
|
||||||
float centreZ = ((float) nearestZ - furthestZ) / 2f;
|
float centreZ = ((float) nearestZ - furthestZ) / 2f;
|
||||||
|
mc.fontRenderer.drawString(matrixStack, recipe.getName(), 2, 2, 0xFFFFFFFF);
|
||||||
|
|
||||||
|
// Get the block parts for the layer
|
||||||
List<MachineStructureRecipeKeyModel> parts = recipe.getModels().get(0);
|
List<MachineStructureRecipeKeyModel> parts = recipe.getModels().get(0);
|
||||||
if (slicingActive) {
|
if (slicingActive) {
|
||||||
parts = parts.stream().filter(x -> x.getPos().getY() == sliceY).collect(Collectors.toList());
|
parts = parts.stream().filter(x -> x.getPos().getY() == sliceY).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
//float sizeX = 162, sizeY = 121;
|
//float tx = 6.5f, ty = -5, tz = 10;
|
||||||
//float scaledSizeX = sizeX / scaleFactor, scaledSizeY = sizeY / scaleFactor;
|
float tx = 0, ty = 0, tz = 10;
|
||||||
float tx = 6.5f, ty = -5, tz = 10;
|
Vector3f prePos = new Vector3f(tx, ty, tz);
|
||||||
|
Vector3f offset = new Vector3f(centreX / 2, centerY / 2, centreZ / 2);
|
||||||
|
|
||||||
int i = 0;
|
// Render the block parts
|
||||||
for (MachineStructureRecipeKeyModel part : parts) {
|
for (MachineStructureRecipeKeyModel part : parts) {
|
||||||
tagIndexes.putIfAbsent(i, 0);
|
variantIndices.putIfAbsent(part.getPos(), 0);
|
||||||
tagIndexCounter.putIfAbsent(i, 0);
|
if (part.getBlock().isEmpty() && part.getTag().isEmpty() && part.getPort() == null) {
|
||||||
if (part.getBlock().isEmpty() && part.getTag().isEmpty()) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,65 +193,75 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
|||||||
if (block != null) {
|
if (block != null) {
|
||||||
BlockState defaultState = block.getDefaultState();
|
BlockState defaultState = block.getDefaultState();
|
||||||
defaultState = with(defaultState, part.getProperties());
|
defaultState = with(defaultState, part.getProperties());
|
||||||
new GuiBlockRenderBuilder(defaultState).at(bp)
|
renderBlock(defaultState, bp, prePos, offset, matrixStack);
|
||||||
.withPrePosition(new Vector3f(tx, ty, tz))
|
|
||||||
.withRotation(new Quaternion(new Vector3f(1, 0, 0), 15 + yRotation, true))
|
|
||||||
.withRotation(new Quaternion(new Vector3f(0, -1, 0), 225 - xRotation, true))
|
|
||||||
.withScale(new Vector3f(scaleFactor, -scaleFactor, scaleFactor))
|
|
||||||
.withOffset(new Vector3f(-0.5f, -0.5f, -0.5f))
|
|
||||||
.finalize(matrixStack);
|
|
||||||
}
|
}
|
||||||
} else if (!part.getTag().equals("")) {
|
} else if (!part.getTag().equals("")) {
|
||||||
ResourceLocation resourceLocation = new ResourceLocation(part.getTag());
|
ResourceLocation resourceLocation = new ResourceLocation(part.getTag());
|
||||||
ITag<Block> tag = BlockTags.getCollection().getTagByID(resourceLocation);
|
ITag<Block> tag = BlockTags.getCollection().getTagByID(resourceLocation);
|
||||||
if (tag != null) {
|
Integer index = this.variantIndices.get(part.getPos());
|
||||||
Integer index = tagIndexes.get(i);
|
|
||||||
|
|
||||||
Block block = tag.getAllElements().get((int) Math.floor(index / 50.0));
|
Block block = tag.getAllElements().get(index);
|
||||||
index++;
|
if (this.tickTimer == 0) {
|
||||||
if (index >= (tag.getAllElements().size()) * 50) {
|
this.variantIndices.put(part.getPos(), (index+1) % tag.getAllElements().size());
|
||||||
index = 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
tagIndexes.put(i, index);
|
if (block != null) {
|
||||||
if (block != null) {
|
BlockState defaultState = block.getDefaultState();
|
||||||
BlockState defaultState = block.getDefaultState();
|
defaultState = with(defaultState, part.getProperties());
|
||||||
defaultState = with(defaultState, part.getProperties());
|
renderBlock(defaultState, bp, prePos, offset, matrixStack);
|
||||||
new GuiBlockRenderBuilder(defaultState).at(bp)
|
}
|
||||||
.withPrePosition(new Vector3f(tx, ty, tz))
|
} else if (part.getPort() != null) {
|
||||||
.withRotation(new Quaternion(new Vector3f(1, 0, 0), 15 + yRotation, true))
|
MachineStructurePort port = part.getPort();
|
||||||
.withRotation(new Quaternion(new Vector3f(0, -1, 0), 225 - xRotation, true))
|
ArrayList<RegistryObject<MachinePortBlock>> ports = port.isInput() ? MMLoader.IPORT_BLOCKS : MMLoader.OPORT_BLOCKS;
|
||||||
.withScale(new Vector3f(scaleFactor, -scaleFactor, scaleFactor))
|
Integer index = this.variantIndices.get(part.getPos());
|
||||||
.withOffset(new Vector3f(-0.5f, -0.5f, -0.5f))
|
String controllerId = port.getControllerId().get(index);
|
||||||
.finalize(matrixStack);
|
if (this.tickTimer == 0) {
|
||||||
|
this.variantIndices.put(part.getPos(), (index+1) % port.getControllerId().size());
|
||||||
|
}
|
||||||
|
String type = port.getType();
|
||||||
|
MachinePortBlock block = null;
|
||||||
|
for (RegistryObject<MachinePortBlock> regPortBlock : ports) {
|
||||||
|
MachinePortBlock portBlock = regPortBlock.get();
|
||||||
|
if (portBlock.getPortTypeId().equals(RLUtils.toRL(type)) && portBlock.getControllerId().equals(controllerId)) {
|
||||||
|
block = portBlock;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (block != null) {
|
||||||
|
BlockState defaultState = block.getDefaultState();
|
||||||
|
defaultState = with(defaultState, part.getProperties());
|
||||||
|
renderBlock(defaultState, bp, prePos, offset, matrixStack);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Render the controller block
|
||||||
if (sliceY == 0) {
|
if (sliceY == 0) {
|
||||||
ControllerBlock block = null;
|
ControllerBlock block = null;
|
||||||
|
MachineStructureBlockPos controllerPos = new MachineStructureBlockPos(0, 0, 0);
|
||||||
|
this.variantIndices.putIfAbsent(controllerPos, 0);
|
||||||
|
Integer index = this.variantIndices.get(controllerPos);
|
||||||
|
String controller = recipe.getControllerId().get(index);
|
||||||
|
if (this.tickTimer == 0) {
|
||||||
|
this.variantIndices.put(controllerPos, (index+1) % recipe.getControllerId().size());
|
||||||
|
}
|
||||||
for (RegistryObject<ControllerBlock> reg : MMLoader.BLOCKS) {
|
for (RegistryObject<ControllerBlock> reg : MMLoader.BLOCKS) {
|
||||||
if (recipe.getControllerId().contains(reg.get().getControllerId())) {
|
if (reg.get().getControllerId().equals(controller)) {
|
||||||
block = reg.get();
|
block = reg.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (block != null) {
|
if (block != null) {
|
||||||
BlockState defaultState = block.getDefaultState().with(DirectionalBlock.FACING, Direction.NORTH);
|
BlockState defaultState = block.getDefaultState().with(DirectionalBlock.FACING, Direction.NORTH);
|
||||||
new GuiBlockRenderBuilder(defaultState).at(new BlockPos(0, 0, 0))
|
renderBlock(defaultState, new BlockPos(0, 0, 0), prePos, offset, matrixStack);
|
||||||
.withPrePosition(new Vector3f(tx, ty, tz))
|
|
||||||
.withRotation(new Quaternion(new Vector3f(1, 0, 0), 15 + yRotation, true))
|
|
||||||
.withRotation(new Quaternion(new Vector3f(0, -1, 0), 225 - xRotation, true))
|
|
||||||
.withScale(new Vector3f(scaleFactor, -scaleFactor, scaleFactor))
|
|
||||||
.withOffset(new Vector3f(-0.5f, -0.5f, -0.5f))
|
|
||||||
.finalize(matrixStack);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.recipe = recipe;
|
// End tick
|
||||||
xLastMousePosition = mouseX;
|
xLastMousePosition = mouseX;
|
||||||
yLastMousePosition = mouseY;
|
yLastMousePosition = mouseY;
|
||||||
getButton().draw(matrixStack, 144, 125);
|
getButton().draw(matrixStack, 144, 125);
|
||||||
|
if (++this.tickTimer % 40 == 0) {
|
||||||
|
this.tickTimer = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -296,4 +315,14 @@ public class MachineStructureRecipeCategory implements IRecipeCategory<MachineSt
|
|||||||
return defaultState;
|
return defaultState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void renderBlock(BlockState defaultState, BlockPos bp, Vector3f prePos, Vector3f offset, MatrixStack ms) {
|
||||||
|
new GuiBlockRenderBuilder(defaultState).at(bp)
|
||||||
|
.withPrePosition(prePos)
|
||||||
|
.withRotation(new Quaternion(new Vector3f(1, 0, 0), 15 + yRotation, true))
|
||||||
|
.withRotation(new Quaternion(new Vector3f(0, -1, 0), 225 - xRotation, true))
|
||||||
|
.withScale(new Vector3f(scaleFactor, -scaleFactor, scaleFactor))
|
||||||
|
.withOffset(offset)
|
||||||
|
.finalize(ms);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import net.minecraft.util.ResourceLocation;
|
|||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
|
||||||
public class PortBlockContainerScreen extends ContainerScreen<PortBlockContainer> {
|
public class PortBlockContainerScreen extends ContainerScreen<PortBlockContainer> {
|
||||||
|
private static final ResourceLocation GUI = new ResourceLocation(MM.ID, "textures/gui/port_gui.png");
|
||||||
|
|
||||||
private final PortBlockContainer container;
|
private final PortBlockContainer container;
|
||||||
|
|
||||||
public PortBlockContainerScreen(PortBlockContainer container, PlayerInventory p_i51105_2_, ITextComponent p_i51105_3_) {
|
public PortBlockContainerScreen(PortBlockContainer container, PlayerInventory p_i51105_2_, ITextComponent p_i51105_3_) {
|
||||||
@@ -17,18 +19,16 @@ public class PortBlockContainerScreen extends ContainerScreen<PortBlockContainer
|
|||||||
this.container = container;
|
this.container = container;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final ResourceLocation GUI = new ResourceLocation(MM.ID, "textures/gui/port_gui.png");
|
|
||||||
@Override
|
@Override
|
||||||
public void render(MatrixStack p_230430_1_, int p_230430_2_, int p_230430_3_, float p_230430_4_) {
|
public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) {
|
||||||
super.render(p_230430_1_, p_230430_2_, p_230430_3_, p_230430_4_);
|
super.render(ms, mouseX, mouseY, partialTicks);
|
||||||
this.renderHoveredTooltip(p_230430_1_, p_230430_2_, p_230430_3_);
|
this.renderHoveredTooltip(ms, mouseX, mouseY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void drawGuiContainerBackgroundLayer(MatrixStack stack, float partialTicks, int x, int y) {
|
protected void drawGuiContainerBackgroundLayer(MatrixStack stack, float partialTicks, int x, int y) {
|
||||||
this.renderBackground(stack);
|
this.renderBackground(stack);
|
||||||
container.getTile().getStorage().render(stack, x, y, this.guiLeft, this.guiTop, this);
|
container.getTile().getStorage().render(stack, x, y, this.guiLeft, this.guiTop, this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.ticticboooom.mods.mm.data;
|
|||||||
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import com.mojang.serialization.DataResult;
|
import com.mojang.serialization.DataResult;
|
||||||
@@ -10,15 +9,12 @@ import com.mojang.serialization.JsonOps;
|
|||||||
import com.ticticboooom.mods.mm.MM;
|
import com.ticticboooom.mods.mm.MM;
|
||||||
import com.ticticboooom.mods.mm.block.ControllerBlock;
|
import com.ticticboooom.mods.mm.block.ControllerBlock;
|
||||||
import com.ticticboooom.mods.mm.block.MachinePortBlock;
|
import com.ticticboooom.mods.mm.block.MachinePortBlock;
|
||||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureBlockPos;
|
import com.ticticboooom.mods.mm.block.tile.IMachinePortTile;
|
||||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureObject;
|
import com.ticticboooom.mods.mm.data.model.structure.*;
|
||||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureRecipeKeyModel;
|
|
||||||
import com.ticticboooom.mods.mm.data.model.structure.MachineStructureRecipeLegendModel;
|
|
||||||
import com.ticticboooom.mods.mm.exception.InvalidStructureDefinitionException;
|
import com.ticticboooom.mods.mm.exception.InvalidStructureDefinitionException;
|
||||||
import com.ticticboooom.mods.mm.helper.RLUtils;
|
import com.ticticboooom.mods.mm.helper.RLUtils;
|
||||||
import com.ticticboooom.mods.mm.nbt.NBTActionParser;
|
|
||||||
import com.ticticboooom.mods.mm.nbt.NBTValidator;
|
|
||||||
import com.ticticboooom.mods.mm.registration.MMLoader;
|
import com.ticticboooom.mods.mm.registration.MMLoader;
|
||||||
|
import com.ticticboooom.mods.mm.registration.MMPorts;
|
||||||
import com.ticticboooom.mods.mm.registration.RecipeTypes;
|
import com.ticticboooom.mods.mm.registration.RecipeTypes;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
@@ -29,8 +25,6 @@ import net.minecraft.item.ItemStack;
|
|||||||
import net.minecraft.item.crafting.IRecipe;
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
import net.minecraft.item.crafting.IRecipeSerializer;
|
import net.minecraft.item.crafting.IRecipeSerializer;
|
||||||
import net.minecraft.item.crafting.IRecipeType;
|
import net.minecraft.item.crafting.IRecipeType;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
|
||||||
import net.minecraft.nbt.JsonToNBT;
|
|
||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
import net.minecraft.state.Property;
|
import net.minecraft.state.Property;
|
||||||
import net.minecraft.tags.BlockTags;
|
import net.minecraft.tags.BlockTags;
|
||||||
@@ -45,7 +39,6 @@ import net.minecraftforge.fml.RegistryObject;
|
|||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class MachineStructureRecipe implements IRecipe<IInventory> {
|
public class MachineStructureRecipe implements IRecipe<IInventory> {
|
||||||
@@ -70,9 +63,9 @@ public class MachineStructureRecipe implements IRecipe<IInventory> {
|
|||||||
BlockPos rotatedPos1 = new BlockPos(model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()).rotate(Rotation.CLOCKWISE_180);
|
BlockPos rotatedPos1 = new BlockPos(model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()).rotate(Rotation.CLOCKWISE_180);
|
||||||
BlockPos rotatedPos2 = new BlockPos(model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()).rotate(Rotation.COUNTERCLOCKWISE_90);
|
BlockPos rotatedPos2 = new BlockPos(model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()).rotate(Rotation.COUNTERCLOCKWISE_90);
|
||||||
|
|
||||||
rotated.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos.getX(), rotatedPos.getY(), rotatedPos.getZ()), model.getTag(), model.getBlock(), model.getProperties()));
|
rotated.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos.getX(), rotatedPos.getY(), rotatedPos.getZ()), model.getTag(), model.getBlock(), model.getProperties(), model.getPort()));
|
||||||
rotated1.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos1.getX(), rotatedPos1.getY(), rotatedPos1.getZ()), model.getTag(), model.getBlock(), model.getProperties()));
|
rotated1.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos1.getX(), rotatedPos1.getY(), rotatedPos1.getZ()), model.getTag(), model.getBlock(), model.getProperties(), model.getPort()));
|
||||||
rotated2.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos2.getX(), rotatedPos2.getY(), rotatedPos2.getZ()), model.getTag(), model.getBlock(), model.getProperties()));
|
rotated2.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos2.getX(), rotatedPos2.getY(), rotatedPos2.getZ()), model.getTag(), model.getBlock(), model.getProperties(), model.getPort()));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.models = new ArrayList<>();
|
this.models = new ArrayList<>();
|
||||||
@@ -142,6 +135,18 @@ public class MachineStructureRecipe implements IRecipe<IInventory> {
|
|||||||
valid = tag.contains(blockState.getBlock());
|
valid = tag.contains(blockState.getBlock());
|
||||||
} else if (!model.getBlock().equals("")) {
|
} else if (!model.getBlock().equals("")) {
|
||||||
valid = blockState.getBlock().getRegistryName().toString().equals(model.getBlock());
|
valid = blockState.getBlock().getRegistryName().toString().equals(model.getBlock());
|
||||||
|
} else if (model.getPort() != null) {
|
||||||
|
MachineStructurePort structurePort = model.getPort();
|
||||||
|
TileEntity portBlockEntity = world.getTileEntity(pos);
|
||||||
|
if (portBlockEntity instanceof IMachinePortTile && blockState.getBlock() instanceof MachinePortBlock) {
|
||||||
|
IMachinePortTile portTile = (IMachinePortTile) portBlockEntity;
|
||||||
|
MachinePortBlock portBlock = ((MachinePortBlock) blockState.getBlock());
|
||||||
|
if (portTile.isInput() == structurePort.isInput() &&
|
||||||
|
portBlock.getPortTypeId().equals(RLUtils.toRL(structurePort.getType()))) {
|
||||||
|
List<String> controllerIds = structurePort.getControllerId() != null ? structurePort.getControllerId() : this.controllerId;
|
||||||
|
valid = controllerIds.contains(portBlock.getControllerId());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
@@ -228,7 +233,6 @@ public class MachineStructureRecipe implements IRecipe<IInventory> {
|
|||||||
|
|
||||||
List<MachineStructureRecipeKeyModel> result = getResult(obj.getAsJsonObject("legend"), layout);
|
List<MachineStructureRecipeKeyModel> result = getResult(obj.getAsJsonObject("legend"), layout);
|
||||||
|
|
||||||
|
|
||||||
validateStructure(result, ids, id, rl);
|
validateStructure(result, ids, id, rl);
|
||||||
MM.LOG.debug("Added structure '{}' with id '{}'", rl, id);
|
MM.LOG.debug("Added structure '{}' with id '{}'", rl, id);
|
||||||
return new MachineStructureRecipe(result, ids, id, rl, name);
|
return new MachineStructureRecipe(result, ids, id, rl, name);
|
||||||
@@ -262,7 +266,7 @@ public class MachineStructureRecipe implements IRecipe<IInventory> {
|
|||||||
}
|
}
|
||||||
MachineStructureRecipeLegendModel machineStructureRecipeLegendModel = model.get(c);
|
MachineStructureRecipeLegendModel machineStructureRecipeLegendModel = model.get(c);
|
||||||
BlockPos pos = new BlockPos(x, y, z).subtract(new BlockPos(controllerPos));
|
BlockPos pos = new BlockPos(x, y, z).subtract(new BlockPos(controllerPos));
|
||||||
result.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(pos.getX(), pos.getY(), pos.getZ()), machineStructureRecipeLegendModel.getTag(), machineStructureRecipeLegendModel.getBlock(), machineStructureRecipeLegendModel.getProperties()));
|
result.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(pos.getX(), pos.getY(), pos.getZ()), machineStructureRecipeLegendModel.getTag(), machineStructureRecipeLegendModel.getBlock(), machineStructureRecipeLegendModel.getProperties(), machineStructureRecipeLegendModel.getPort()));
|
||||||
}
|
}
|
||||||
z++;
|
z++;
|
||||||
}
|
}
|
||||||
@@ -355,8 +359,14 @@ public class MachineStructureRecipe implements IRecipe<IInventory> {
|
|||||||
if (!RLUtils.isRL(model.getTag())) {
|
if (!RLUtils.isRL(model.getTag())) {
|
||||||
throw new InvalidStructureDefinitionException("Block Tag: " + model.getBlock() + " is defined but not a valid block tag id (ResourceLocation)");
|
throw new InvalidStructureDefinitionException("Block Tag: " + model.getBlock() + " is defined but not a valid block tag id (ResourceLocation)");
|
||||||
}
|
}
|
||||||
|
} else if (model.getPort() != null) {
|
||||||
|
if (!MMPorts.PORTS.containsKey(RLUtils.toRL(model.getPort().getType()))) {
|
||||||
|
throw new InvalidStructureDefinitionException("Port: " + model.getPort() + " is defined but not a valid port type id (ResourceLocation)");
|
||||||
|
} else if (!controllerId.containsAll(model.getPort().getControllerId())) {
|
||||||
|
throw new InvalidStructureDefinitionException("Port: " + model.getPort() + " is defined but not a valid port controller id specified (ResourceLocation)");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new InvalidStructureDefinitionException("YUo must define at least 1 'block' or 'tag' per port within the 'data' object");
|
throw new InvalidStructureDefinitionException("You must define at least 1 'block' or 'tag' per port within the 'data' object");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,12 @@ package com.ticticboooom.mods.mm.data.model.structure;
|
|||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import net.minecraft.util.math.vector.Vector3i;
|
import net.minecraft.util.math.vector.Vector3i;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class MachineStructureBlockPos implements Comparable<MachineStructureBlockPos> {
|
public class MachineStructureBlockPos implements Comparable<MachineStructureBlockPos> {
|
||||||
@@ -22,7 +25,22 @@ public class MachineStructureBlockPos implements Comparable<MachineStructureBloc
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(MachineStructureBlockPos other) {
|
public int compareTo(MachineStructureBlockPos other) {
|
||||||
return new Vector3i(this.x, this.y, this.z).compareTo(new Vector3i(other.x, other.y, other.z));
|
return toVector().compareTo(other.toVector());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o)
|
||||||
|
return true;
|
||||||
|
if (o == null || getClass() != o.getClass())
|
||||||
|
return false;
|
||||||
|
MachineStructureBlockPos that = (MachineStructureBlockPos) o;
|
||||||
|
return toVector().equals(that.toVector());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return toVector().hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector3i toVector(){
|
public Vector3i toVector(){
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.ticticboooom.mods.mm.data.model.structure;
|
||||||
|
|
||||||
|
import com.mojang.datafixers.util.Either;
|
||||||
|
import com.mojang.serialization.Codec;
|
||||||
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
@ToString
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class MachineStructurePort {
|
||||||
|
public static final Codec<MachineStructurePort> CODEC = RecordCodecBuilder.create(x -> x.group(
|
||||||
|
Codec.STRING.fieldOf("type").forGetter(z -> z.type),
|
||||||
|
Codec.BOOL.fieldOf("input").forGetter(z -> z.input),
|
||||||
|
Codec.either(Codec.STRING, Codec.list(Codec.STRING)).xmap(
|
||||||
|
either -> either.map(Collections::singletonList, Function.identity()),
|
||||||
|
ids -> ids.size() == 1 ? Either.left(ids.get(0)) : Either.right(ids)
|
||||||
|
).optionalFieldOf("controllerId").forGetter(z -> Optional.ofNullable(z.controllerId))
|
||||||
|
).apply(x, (w, y, z) -> new MachineStructurePort(w, y, z.orElse(null))));
|
||||||
|
|
||||||
|
private final String type;
|
||||||
|
private final boolean input;
|
||||||
|
private final List<String> controllerId;
|
||||||
|
}
|
||||||
@@ -1,13 +1,10 @@
|
|||||||
package com.ticticboooom.mods.mm.data.model.structure;
|
package com.ticticboooom.mods.mm.data.model.structure;
|
||||||
|
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import com.mojang.serialization.Keyable;
|
|
||||||
import com.mojang.serialization.MapCodec;
|
|
||||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -15,14 +12,16 @@ import java.util.Optional;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class MachineStructureRecipeKeyModel {
|
public class MachineStructureRecipeKeyModel {
|
||||||
public static final Codec<MachineStructureRecipeKeyModel> CODEC = RecordCodecBuilder.create(x -> x.group(
|
public static final Codec<MachineStructureRecipeKeyModel> CODEC = RecordCodecBuilder.create(x -> x.group(
|
||||||
MachineStructureBlockPos.CODEC.fieldOf("pos").forGetter(z -> z.pos),
|
MachineStructureBlockPos.CODEC.fieldOf("pos").forGetter(z -> z.pos),
|
||||||
Codec.STRING.optionalFieldOf("tag").forGetter(z -> Optional.of(z.tag)),
|
Codec.STRING.optionalFieldOf("tag").forGetter(z -> Optional.of(z.tag)),
|
||||||
Codec.STRING.optionalFieldOf("block").forGetter(z -> Optional.of(z.block)),
|
Codec.STRING.optionalFieldOf("block").forGetter(z -> Optional.of(z.block)),
|
||||||
Codec.unboundedMap(Codec.STRING, Codec.STRING).optionalFieldOf("nbt").forGetter(z -> Optional.ofNullable(z.properties))
|
Codec.unboundedMap(Codec.STRING, Codec.STRING).optionalFieldOf("nbt").forGetter(z -> Optional.ofNullable(z.properties)),
|
||||||
).apply(x, (w0, w, y, z) -> new MachineStructureRecipeKeyModel(w0, w.orElse(""), y.orElse(""), z.orElse(null))));
|
MachineStructurePort.CODEC.optionalFieldOf("port").forGetter(z -> Optional.ofNullable(z.port))
|
||||||
private MachineStructureBlockPos pos;
|
).apply(x, (w0, w, y, z, z0) -> new MachineStructureRecipeKeyModel(w0, w.orElse(""), y.orElse(""), z.orElse(null), z0.orElse(null))));
|
||||||
|
private MachineStructureBlockPos pos;
|
||||||
private final String tag;
|
private final String tag;
|
||||||
private final String block;
|
private final String block;
|
||||||
private final Map<String, String> properties;
|
private final Map<String, String> properties;
|
||||||
|
private final MachineStructurePort port;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,10 @@ package com.ticticboooom.mods.mm.data.model.structure;
|
|||||||
|
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
import com.ticticboooom.mods.mm.nbt.model.NBTModel;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -16,13 +13,14 @@ import java.util.Optional;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class MachineStructureRecipeLegendModel {
|
public class MachineStructureRecipeLegendModel {
|
||||||
public static final Codec<MachineStructureRecipeLegendModel> CODEC = RecordCodecBuilder.create(x -> x.group(
|
public static final Codec<MachineStructureRecipeLegendModel> CODEC = RecordCodecBuilder.create(x -> x.group(
|
||||||
Codec.STRING.optionalFieldOf("tag").forGetter(z -> Optional.of(z.tag)),
|
Codec.STRING.optionalFieldOf("tag").forGetter(z -> Optional.of(z.tag)),
|
||||||
Codec.STRING.optionalFieldOf("block").forGetter(z -> Optional.of(z.block)),
|
Codec.STRING.optionalFieldOf("block").forGetter(z -> Optional.of(z.block)),
|
||||||
Codec.unboundedMap(Codec.STRING, Codec.STRING).optionalFieldOf("props").forGetter(z -> Optional.ofNullable(z.properties))
|
Codec.unboundedMap(Codec.STRING, Codec.STRING).optionalFieldOf("props").forGetter(z -> Optional.ofNullable(z.properties)),
|
||||||
).apply(x, (w, y, z) -> new MachineStructureRecipeLegendModel(w.orElse(""), y.orElse(""), z.orElse(null))));
|
MachineStructurePort.CODEC.optionalFieldOf("port").forGetter(z -> Optional.ofNullable(z.port))
|
||||||
|
).apply(x, (w, y, z, z0) -> new MachineStructureRecipeLegendModel(w.orElse(""), y.orElse(""), z.orElse(null), z0.orElse(null))));
|
||||||
private final String tag;
|
private final String tag;
|
||||||
private final String block;
|
private final String block;
|
||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
private Map<String, String> properties;
|
private Map<String, String> properties;
|
||||||
|
private final MachineStructurePort port;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"type": "masterfulmachinery:machine_structure",
|
||||||
|
"id": "test_tiered_fluids",
|
||||||
|
"controllerId": [
|
||||||
|
"basic",
|
||||||
|
"mid"
|
||||||
|
],
|
||||||
|
"name": "Test Tiered Fluids",
|
||||||
|
"layout": [
|
||||||
|
[
|
||||||
|
"1C2"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"legend": {
|
||||||
|
"1": {
|
||||||
|
"port": {
|
||||||
|
"type": "masterfulmachinery:fluids",
|
||||||
|
"input": true,
|
||||||
|
"controllerId": [
|
||||||
|
"basic",
|
||||||
|
"mid"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"port": {
|
||||||
|
"type": "masterfulmachinery:fluids",
|
||||||
|
"input": false,
|
||||||
|
"controllerId": "mid"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"type": "masterfulmachinery:machine_structure",
|
||||||
|
"id": "variable_io",
|
||||||
|
"controllerId": "basic",
|
||||||
|
"name": "Variable IO",
|
||||||
|
"layout": [
|
||||||
|
[
|
||||||
|
")C)",
|
||||||
|
"*+*",
|
||||||
|
")*)"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"),)",
|
||||||
|
"-./",
|
||||||
|
")0)"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
")))",
|
||||||
|
")1)",
|
||||||
|
")))"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"legend": {
|
||||||
|
"0": {
|
||||||
|
"block": "masterfulmachinery:basic_simple_port_fluids_output"
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"block": "masterfulmachinery:basic_simple_port_mekanism_gas_output"
|
||||||
|
},
|
||||||
|
")": {
|
||||||
|
"block": "minecraft:polished_blackstone"
|
||||||
|
},
|
||||||
|
"*": {
|
||||||
|
"block": "masterfulmachinery:basic_simple_port_energy_output"
|
||||||
|
},
|
||||||
|
"+": {
|
||||||
|
"block": "masterfulmachinery:basic_simple_port_items_output"
|
||||||
|
},
|
||||||
|
",": {
|
||||||
|
"block": "minecraft:glass"
|
||||||
|
},
|
||||||
|
"-": {
|
||||||
|
"block": "masterfulmachinery:basic_simple_port_items_input"
|
||||||
|
},
|
||||||
|
".": {
|
||||||
|
"block": "minecraft:water"
|
||||||
|
},
|
||||||
|
"/": {
|
||||||
|
"block": "masterfulmachinery:basic_simple_port_fluids_input"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
src/test/resources/data/mm/recipes/test_tiered_fluid.json
Normal file
24
src/test/resources/data/mm/recipes/test_tiered_fluid.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"type": "masterfulmachinery:machine_process",
|
||||||
|
"structureId": "test_tiered_fluid",
|
||||||
|
"controllerId": ["basic", "mid"],
|
||||||
|
"ticks": 20,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:fluids",
|
||||||
|
"data": {
|
||||||
|
"fluid": "minecraft:water",
|
||||||
|
"amount": 50
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"type": "masterfulmachinery:fluids",
|
||||||
|
"data": {
|
||||||
|
"fluid": "minecraft:water",
|
||||||
|
"amount": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
#Fri Sep 03 00:36:37 BST 2021
|
#Tue Sep 28 18:52:49 BST 2021
|
||||||
VERSION_CODE=766
|
VERSION_CODE=785
|
||||||
|
|||||||
Reference in New Issue
Block a user