1.14: Updated to Forge 1.14.4-28.0.81/20190719-1.14.3, updated recipe condition processing accordingly (issue #49).
This commit is contained in:
parent
0147d9faa1
commit
64186ec813
84 changed files with 274 additions and 245 deletions
|
@ -2,15 +2,7 @@
|
|||
org.gradle.daemon=false
|
||||
org.gradle.jvmargs=-Xmx8G
|
||||
version_minecraft=1.14.4
|
||||
version_forge_minecraft=1.14.4-28.0.40
|
||||
version_forge_minecraft=1.14.4-28.0.81
|
||||
version_fml_mappings=20190719-1.14.3
|
||||
version_jei=1.14.4:6.0.0.10
|
||||
version_engineersdecor=1.0.11-b2
|
||||
#
|
||||
# jar signing data loaded from signing.properties in the project root.
|
||||
#
|
||||
#signing.keystore_file=
|
||||
#signing.keystore_alias=
|
||||
#signing.keystore_pass=
|
||||
#signing.keystore_keypass=
|
||||
#fingerprint_sha1.fp_sha1=
|
||||
version_engineersdecor=1.0.11-b3
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
|
||||
"1.14.4": {
|
||||
"1.0.11-b3": "[U] Updated to Forge 1.14.4-28.0.81/20190719-1.14.3.\n[F] Adapted recipe condition to Forge version (issue #49).",
|
||||
"1.0.11-b2": "[U] JEI dependency update 1.14.4:6.0.0.10.\n[F] Fixed creative ghost block issue (issue #48).\n[M] Updated ru_ru lang file (Shellyoung, PR#47).",
|
||||
"1.0.11-b1": "[A] Added Steel Table\n[A] Added Treated Wood Side Table\n[A] Added Exit Sign\n[A] Added Steel Floor Grating\n[M] Sign orientation fixed, only blocked vertical placement.",
|
||||
"1.0.9-b9": "[U] Update to Forge 1.14.4-28.0.40/20190719-1.14.3 for Forge testing.",
|
||||
|
@ -21,6 +22,6 @@
|
|||
},
|
||||
"promos": {
|
||||
"1.14.4-recommended": "",
|
||||
"1.14.4-latest": "1.0.11-b2"
|
||||
"1.14.4-latest": "1.0.11-b3"
|
||||
}
|
||||
}
|
|
@ -10,6 +10,9 @@ Mod sources for Minecraft version 1.14.3.
|
|||
----
|
||||
## Version history
|
||||
|
||||
- v1.0.11-b3 [U] Updated to Forge 1.14.4-28.0.81/20190719-1.14.3.
|
||||
[F] Adapted recipe condition to Forge version (issue #49).
|
||||
|
||||
- v1.0.11-b2 [U] JEI dependency update 1.14.4:6.0.0.10.
|
||||
[F] Fixed creative ghost block issue (issue #48).
|
||||
[M] Updated ru_ru lang file (Shellyoung, PR#47).
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package wile.engineersdecor;
|
||||
|
||||
import wile.engineersdecor.detail.ModConfig;
|
||||
import wile.engineersdecor.detail.RecipeCondModSpecific;
|
||||
import wile.engineersdecor.detail.OptionalRecipeCondition;
|
||||
import wile.engineersdecor.detail.Networking;
|
||||
import wile.engineersdecor.blocks.*;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -33,6 +33,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
|||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import wile.engineersdecor.detail.OptionalRecipeCondition.Serializer;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -64,7 +65,7 @@ public class ModEngineersDecor
|
|||
private void onSetup(final FMLCommonSetupEvent event)
|
||||
{
|
||||
LOGGER.info("Registering recipe condition processor ...");
|
||||
CraftingHelper.register(new ResourceLocation(MODID, "grc"), new RecipeCondModSpecific());
|
||||
CraftingHelper.register(Serializer.INSTANCE);
|
||||
Networking.init();
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
package wile.engineersdecor.blocks;
|
||||
|
||||
import wile.engineersdecor.detail.ModAuxiliaries;
|
||||
import wile.engineersdecor.detail.ModConfig;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.client.util.ITooltipFlag;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
|
|
|
@ -11,7 +11,7 @@ package wile.engineersdecor.blocks;
|
|||
|
||||
import wile.engineersdecor.ModContent;
|
||||
import wile.engineersdecor.ModEngineersDecor;
|
||||
import wile.engineersdecor.detail.ModConfig;
|
||||
//import wile.engineersdecor.detail.ModConfig;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.inventory.ItemStackHelper;
|
||||
|
@ -40,15 +40,14 @@ import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
|||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.energy.CapabilityEnergy;
|
||||
import net.minecraftforge.energy.IEnergyStorage;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.IFluidTankProperties;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
//import net.minecraftforge.fluids.FluidStack;
|
||||
//import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
//import net.minecraftforge.fluids.capability.IFluidTankProperties;
|
||||
//import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.*;
|
||||
|
@ -466,46 +465,46 @@ public class BlockDecorMineralSmelter extends BlockDecorDirectedHorizontal
|
|||
|
||||
// IFluidHandler --------------------------------------------------------------------------------
|
||||
|
||||
private LazyOptional<IFluidHandler> fluid_handler_ = LazyOptional.of(() -> (IFluidHandler)new BFluidHandler(this));
|
||||
|
||||
// @todo: REPLACE lava=null with whatever will work
|
||||
private static class BFluidHandler implements IFluidHandler, IFluidTankProperties
|
||||
{
|
||||
private final FluidStack lava;
|
||||
private final BTileEntity te;
|
||||
private final IFluidTankProperties[] props_ = {this};
|
||||
BFluidHandler(BTileEntity te) {
|
||||
this.te = te;
|
||||
//lava = new FluidStack(ForgeRegistries.FLUIDS.getValue(new ResourceLocation("minecraft:lava")), 1);
|
||||
// lava = new FluidStack(Blocks.LAVA.getFluidState(Blocks.LAVA.getDefaultState()).getFluid(), 1);
|
||||
// lava = new FluidStack(Fluids.EMPTY, 1);
|
||||
//new net.minecraftforge.fluids.FluidStack(net.minecraft.fluid.Fluids.LAVA, 1);
|
||||
lava=null;
|
||||
}
|
||||
@Override @Nullable public FluidStack getContents() { return new FluidStack(lava, te.fluid_level()); }
|
||||
@Override public IFluidTankProperties[] getTankProperties() { return props_; }
|
||||
@Override public int fill(FluidStack resource, boolean doFill) { return 0; }
|
||||
@Override public int getCapacity() { return 1000; }
|
||||
@Override public boolean canFill() { return false; }
|
||||
@Override public boolean canDrain() { return true; }
|
||||
@Override public boolean canFillFluidType(FluidStack fluidStack) { return false; }
|
||||
@Override public boolean canDrainFluidType(FluidStack fluidStack) { return fluidStack.isFluidEqual(lava); }
|
||||
|
||||
@Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain)
|
||||
{
|
||||
if((te.fluid_level() <= 0) || (!resource.isFluidEqual(lava))) return null;
|
||||
FluidStack fs = getContents();
|
||||
if(doDrain) te.fluid_level_drain(fs.amount);
|
||||
return fs;
|
||||
}
|
||||
|
||||
@Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain)
|
||||
{
|
||||
if(te.fluid_level() <= 0) return null;
|
||||
maxDrain = (doDrain) ? (te.fluid_level_drain(maxDrain)) : (Math.min(maxDrain, te.fluid_level()));
|
||||
return new FluidStack(lava, maxDrain);
|
||||
}
|
||||
}
|
||||
// private LazyOptional<IFluidHandler> fluid_handler_ = LazyOptional.of(() -> (IFluidHandler)new BFluidHandler(this));
|
||||
//
|
||||
// // @todo: REPLACE lava=null with whatever will work
|
||||
// private static class BFluidHandler implements IFluidHandler, IFluidTankProperties
|
||||
// {
|
||||
// private final FluidStack lava;
|
||||
// private final BTileEntity te;
|
||||
// private final IFluidTankProperties[] props_ = {this};
|
||||
// BFluidHandler(BTileEntity te) {
|
||||
// this.te = te;
|
||||
// //lava = new FluidStack(ForgeRegistries.FLUIDS.getValue(new ResourceLocation("minecraft:lava")), 1);
|
||||
// // lava = new FluidStack(Blocks.LAVA.getFluidState(Blocks.LAVA.getDefaultState()).getFluid(), 1);
|
||||
// // lava = new FluidStack(Fluids.EMPTY, 1);
|
||||
// //new net.minecraftforge.fluids.FluidStack(net.minecraft.fluid.Fluids.LAVA, 1);
|
||||
//lava=null;
|
||||
// }
|
||||
// @Override @Nullable public FluidStack getContents() { return new FluidStack(lava, te.fluid_level()); }
|
||||
// @Override public IFluidTankProperties[] getTankProperties() { return props_; }
|
||||
// @Override public int fill(FluidStack resource, boolean doFill) { return 0; }
|
||||
// @Override public int getCapacity() { return 1000; }
|
||||
// @Override public boolean canFill() { return false; }
|
||||
// @Override public boolean canDrain() { return true; }
|
||||
// @Override public boolean canFillFluidType(FluidStack fluidStack) { return false; }
|
||||
// @Override public boolean canDrainFluidType(FluidStack fluidStack) { return fluidStack.isFluidEqual(lava); }
|
||||
//
|
||||
// @Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain)
|
||||
// {
|
||||
// if((te.fluid_level() <= 0) || (!resource.isFluidEqual(lava))) return null;
|
||||
// FluidStack fs = getContents();
|
||||
// if(doDrain) te.fluid_level_drain(fs.amount);
|
||||
// return fs;
|
||||
// }
|
||||
//
|
||||
// @Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain)
|
||||
// {
|
||||
// if(te.fluid_level() <= 0) return null;
|
||||
// maxDrain = (doDrain) ? (te.fluid_level_drain(maxDrain)) : (Math.min(maxDrain, te.fluid_level()));
|
||||
// return new FluidStack(lava, maxDrain);
|
||||
// }
|
||||
// }
|
||||
|
||||
// IEnergyStorage ----------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@ package wile.engineersdecor.blocks;
|
|||
|
||||
import wile.engineersdecor.ModContent;
|
||||
import wile.engineersdecor.detail.ModAuxiliaries;
|
||||
import net.minecraft.tileentity.ITickableTileEntity;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
|
@ -23,23 +22,20 @@ import net.minecraft.util.Hand;
|
|||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.IFluidTankProperties;
|
||||
//import net.minecraftforge.common.util.LazyOptional;
|
||||
//import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
||||
//import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
//import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
//import net.minecraftforge.fluids.capability.IFluidTankProperties;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected
|
||||
|
@ -97,7 +93,7 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected
|
|||
|
||||
public void send_device_stats(PlayerEntity player)
|
||||
{
|
||||
int t_vol = (tank_==null) ? 0 : (tank_.amount);
|
||||
int t_vol = (tank_==null) ? 0 : (tank_.getAmount());
|
||||
ModAuxiliaries.playerChatMessage(player,"" + t_vol + "mB");
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ package wile.engineersdecor.blocks;
|
|||
|
||||
import wile.engineersdecor.ModContent;
|
||||
import wile.engineersdecor.ModEngineersDecor;
|
||||
import blusunrize.immersiveengineering.api.fluid.IFluidPipe;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
|
@ -22,19 +21,18 @@ import net.minecraft.block.Block;
|
|||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.IFluidTankProperties;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
//import net.minecraftforge.common.util.LazyOptional;
|
||||
//import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
||||
//import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
//import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
//import net.minecraftforge.fluids.capability.IFluidTankProperties;
|
||||
//import net.minecraftforge.fluids.FluidStack;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@ package wile.engineersdecor.blocks;
|
|||
|
||||
import net.minecraft.util.math.*;
|
||||
import wile.engineersdecor.detail.ModAuxiliaries;
|
||||
import wile.engineersdecor.detail.ModConfig;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.client.util.ITooltipFlag;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
/*
|
||||
* @file OptionalRecipeCondition.java
|
||||
* @author Stefan Wilhelm (wile)
|
||||
* @copyright (C) 2018 Stefan Wilhelm
|
||||
* @license MIT (see https://opensource.org/licenses/MIT)
|
||||
*
|
||||
* Recipe condition to enable opt'ing out JSON based recipes.
|
||||
*/
|
||||
package wile.engineersdecor.detail;
|
||||
|
||||
import wile.engineersdecor.ModEngineersDecor;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.JSONUtils;
|
||||
import net.minecraftforge.common.crafting.conditions.ICondition;
|
||||
import net.minecraftforge.common.crafting.conditions.IConditionSerializer;
|
||||
import net.minecraftforge.registries.IForgeRegistry;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class OptionalRecipeCondition implements ICondition
|
||||
{
|
||||
private static final ResourceLocation NAME = new ResourceLocation(ModEngineersDecor.MODID, "optional");
|
||||
|
||||
private final List<ResourceLocation> all_required;
|
||||
private final List<ResourceLocation> any_missing;
|
||||
private final @Nullable ResourceLocation result;
|
||||
|
||||
public OptionalRecipeCondition(ResourceLocation result, List<ResourceLocation> required, List<ResourceLocation> missing)
|
||||
{ all_required = required; any_missing = missing; this.result = result; }
|
||||
|
||||
@Override
|
||||
public ResourceLocation getID()
|
||||
{ return NAME; }
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Optional recipe, all-required: [");
|
||||
for(ResourceLocation e:all_required) sb.append(e.toString()).append(",");
|
||||
sb.delete(sb.length()-1, sb.length()).append("], any-missing: [");
|
||||
for(ResourceLocation e:any_missing) sb.append(e.toString()).append(",");
|
||||
sb.delete(sb.length()-1, sb.length()).append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean test()
|
||||
{
|
||||
final IForgeRegistry<Block> block_registry = ForgeRegistries.BLOCKS;
|
||||
final IForgeRegistry<Item> item_registry = ForgeRegistries.ITEMS;
|
||||
if(result != null) {
|
||||
if((!block_registry.containsKey(result)) && (!item_registry.containsKey(result))) return false; // required result not registered
|
||||
}
|
||||
if(!all_required.isEmpty()) {
|
||||
for(ResourceLocation rl:all_required) {
|
||||
if((!block_registry.containsKey(rl)) && (!item_registry.containsKey(rl))) return false;
|
||||
}
|
||||
}
|
||||
if(!any_missing.isEmpty()) {
|
||||
for(ResourceLocation rl:any_missing) {
|
||||
// At least one item missing, enable this recipe as alternative recipe for another one that check the missing item as required item.
|
||||
// --> e.g. if IE not installed there is no slag. One recipe requires slag, and another one (for the same result) is used if there
|
||||
// is no slag.
|
||||
if((!block_registry.containsKey(rl)) && (!item_registry.containsKey(rl))) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static class Serializer implements IConditionSerializer<OptionalRecipeCondition>
|
||||
{
|
||||
public static final Serializer INSTANCE = new Serializer();
|
||||
|
||||
@Override
|
||||
public ResourceLocation getID()
|
||||
{ return OptionalRecipeCondition.NAME; }
|
||||
|
||||
@Override
|
||||
public void write(JsonObject json, OptionalRecipeCondition condition)
|
||||
{
|
||||
JsonArray required = new JsonArray();
|
||||
JsonArray missing = new JsonArray();
|
||||
for(ResourceLocation e:condition.all_required) required.add(e.toString());
|
||||
for(ResourceLocation e:condition.any_missing) missing.add(e.toString());
|
||||
json.add("required", required);
|
||||
json.add("missing", missing);
|
||||
if(condition.result != null) json.addProperty("result", condition.result.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public OptionalRecipeCondition read(JsonObject json)
|
||||
{
|
||||
List<ResourceLocation> required = new ArrayList<>();
|
||||
List<ResourceLocation> missing = new ArrayList<>();
|
||||
ResourceLocation result = null;
|
||||
if(json.has("result")) result = new ResourceLocation(json.get("result").getAsString());
|
||||
if(json.has("required")) {
|
||||
for(JsonElement e:JSONUtils.getJsonArray(json, "required")) required.add(new ResourceLocation(e.getAsString()));
|
||||
}
|
||||
if(json.has("missing")) {
|
||||
for(JsonElement e:JSONUtils.getJsonArray(json, "missing")) missing.add(new ResourceLocation(e.getAsString()));
|
||||
}
|
||||
return new OptionalRecipeCondition(result, required, missing);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,70 +0,0 @@
|
|||
/*
|
||||
* @file RecipeCondRegistered.java
|
||||
* @author Stefan Wilhelm (wile)
|
||||
* @copyright (C) 2018 Stefan Wilhelm
|
||||
* @license MIT (see https://opensource.org/licenses/MIT)
|
||||
*
|
||||
* Recipe condition to enable opt'ing out JSON based recipes, referenced
|
||||
* in assets/engineersdecor/recipes/_factories.json with full path (therefore
|
||||
* I had to make a separate file for that instead of a few lines in
|
||||
* ModAuxiliaries).
|
||||
*/
|
||||
package wile.engineersdecor.detail;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.common.crafting.IConditionSerializer;
|
||||
import net.minecraftforge.registries.IForgeRegistry;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
import com.google.gson.*;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.function.BooleanSupplier;
|
||||
|
||||
|
||||
public class RecipeCondModSpecific implements IConditionSerializer
|
||||
{
|
||||
public static final BooleanSupplier RECIPE_INCLUDE = ()->true;
|
||||
public static final BooleanSupplier RECIPE_EXCLUDE = ()->false;
|
||||
|
||||
@Override
|
||||
public @Nonnull BooleanSupplier parse(@Nullable JsonObject json) {
|
||||
try {
|
||||
if(json==null) return RECIPE_EXCLUDE;
|
||||
final IForgeRegistry<Block> block_registry = ForgeRegistries.BLOCKS;
|
||||
final IForgeRegistry<Item> item_registry = ForgeRegistries.ITEMS;
|
||||
final JsonArray items = json.getAsJsonArray("required");
|
||||
if(items!=null) {
|
||||
for(JsonElement e: items) {
|
||||
if(!e.isJsonPrimitive()) continue;
|
||||
final ResourceLocation rl = new ResourceLocation(((JsonPrimitive)e).getAsString());
|
||||
if((!block_registry.containsKey(rl)) && (!item_registry.containsKey(rl))) return RECIPE_EXCLUDE; // required item not registered
|
||||
}
|
||||
}
|
||||
final JsonPrimitive result = json.getAsJsonPrimitive("result");
|
||||
if(result != null) {
|
||||
final ResourceLocation rl = new ResourceLocation(result.getAsString());
|
||||
if((!block_registry.containsKey(rl)) && (!item_registry.containsKey(rl))) return RECIPE_EXCLUDE; // required result not registered
|
||||
}
|
||||
final JsonArray missing = json.getAsJsonArray("missing");
|
||||
if((missing!=null) && (missing.size() > 0)) {
|
||||
for(JsonElement e: missing) {
|
||||
if(!e.isJsonPrimitive()) continue;
|
||||
final ResourceLocation rl = new ResourceLocation(((JsonPrimitive)e).getAsString());
|
||||
// At least one item missing, enable this recipe as alternative recipe for another one that check the missing item as required item.
|
||||
// --> e.g. if IE not installed there is no slag. One recipe requires slag, and another one (for the same result) is used if there
|
||||
// is no slag.
|
||||
if((!block_registry.containsKey(rl)) && (!item_registry.containsKey(rl))) return RECIPE_INCLUDE;
|
||||
}
|
||||
return RECIPE_EXCLUDE; // all required there, but there is no item missing, so another recipe
|
||||
} else {
|
||||
return RECIPE_INCLUDE; // no missing given, means include if result and required are all there.
|
||||
}
|
||||
} catch(Throwable ex) {
|
||||
ModAuxiliaries.logError("rsgauges::ResultRegisteredCondition failed: " + ex.toString());
|
||||
}
|
||||
return RECIPE_EXCLUDE; // skip on exception.
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:factory_dropper",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:iron_inset_light",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:metal_rung_ladder",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:metal_rung_steps",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:panzerglass_block",
|
||||
"missing": ["immersiveengineering:stone_decoration"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:passive_fluid_accumulator",
|
||||
"required": ["engineersdecor:straight_pipe_valve"],
|
||||
"missing": ["immersiveengineering:fluid_pipe", "immersiveengineering:mechanical_component"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete",
|
||||
"missing": ["immersiveengineering:concrete"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:sign_hotwire",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:slag_brick_block",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:small_electrical_furnace",
|
||||
"missing": ["immersiveengineering:material"],
|
||||
"required": ["engineersdecor:small_lab_furnace"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:small_lab_furnace",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:small_mineral_smelter",
|
||||
"missing": ["immersiveengineering:metal_device1"],
|
||||
"required": ["engineersdecor:panzerglass_block"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:small_waste_incinerator",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:steel_framed_window",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:straight_pipe_valve",
|
||||
"required": ["engineersdecor:thick_steel_pole"],
|
||||
"missing": ["immersiveengineering:fluid_pipe", "immersiveengineering:mechanical_component"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:straight_pipe_valve",
|
||||
"required": ["engineersdecor:straight_pipe_valve"],
|
||||
"missing": ["immersiveengineering:redstone_connector"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:thin_steel_pole",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_crafting_table",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_ladder",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_pole",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_stool",
|
||||
"missing": ["immersiveengineering:material"],
|
||||
"required": ["engineersdecor:treated_wood_pole"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_table",
|
||||
"missing": ["immersiveengineering:material"],
|
||||
"required": ["engineersdecor:treated_wood_pole"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_window",
|
||||
"missing": ["immersiveengineering:material"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_windowsill",
|
||||
"missing": ["immersiveengineering:material"],
|
||||
"required": ["engineersdecor:treated_wood_pole"]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:concrete_halfslab",
|
||||
"required": ["immersiveengineering:concrete_slab"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:halfslab_clinker_brick",
|
||||
"required": ["engineersdecor:clinker_brick_slab"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_block"
|
||||
}
|
||||
],
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_slab",
|
||||
"required": ["engineersdecor:clinker_brick_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_stained_block",
|
||||
"required": ["engineersdecor:clinker_brick_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_stained_slab",
|
||||
"required": ["engineersdecor:clinker_brick_stained_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_stained_stairs",
|
||||
"required": ["engineersdecor:clinker_brick_stained_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_stairs",
|
||||
"required": ["engineersdecor:clinker_brick_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_block",
|
||||
"required": ["engineersdecor:clinker_brick_stairs"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_wall",
|
||||
"required": ["engineersdecor:clinker_brick_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:clinker_brick_block",
|
||||
"required": ["engineersdecor:clinker_brick_wall"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:panzerglass_block",
|
||||
"required": ["engineersdecor:rebar_concrete_tile"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:halfslab_rebar_concrete",
|
||||
"required": ["engineersdecor:rebar_concrete_slab"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete_slab",
|
||||
"required": ["engineersdecor:rebar_concrete"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete_stairs",
|
||||
"required": ["engineersdecor:rebar_concrete"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete",
|
||||
"required": ["engineersdecor:rebar_concrete_stairs"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete_tile",
|
||||
"required": ["engineersdecor:rebar_concrete"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete",
|
||||
"required": ["engineersdecor:rebar_concrete_tile"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete_tile_slab",
|
||||
"required": ["engineersdecor:rebar_concrete_tile"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete_tile_stairs",
|
||||
"required": ["engineersdecor:rebar_concrete_tile"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete_tile",
|
||||
"required": ["engineersdecor:rebar_concrete_tile_stairs"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete_wall",
|
||||
"required": ["engineersdecor:rebar_concrete"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:rebar_concrete",
|
||||
"required": ["engineersdecor:rebar_concrete_wall"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:sign_danger",
|
||||
"required": ["engineersdecor:sign_hotwire"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:sign_defense",
|
||||
"required": ["engineersdecor:sign_danger"]
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:sign_exit",
|
||||
"required": ["engineersdecor:sign_factoryarea"]
|
||||
}
|
||||
],
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"ingredients": [
|
||||
{ "item": "engineersdecor:sign_factoryarea" }
|
||||
],
|
||||
"result": {
|
||||
"item": "engineersdecor:sign_exit"
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:sign_factoryarea",
|
||||
"required": ["engineersdecor:sign_defense"]
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:sign_hotwire",
|
||||
"required": ["engineersdecor:sign_factoryarea"]
|
||||
"required": ["engineersdecor:sign_exit"]
|
||||
}
|
||||
],
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"ingredients": [
|
||||
{ "item": "engineersdecor:sign_factoryarea" }
|
||||
{ "item": "engineersdecor:sign_exit" }
|
||||
],
|
||||
"result": {
|
||||
"item": "engineersdecor:sign_hotwire"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:slag_brick_slab",
|
||||
"required": ["engineersdecor:slag_brick_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:slag_brick_stairs",
|
||||
"required": ["engineersdecor:slag_brick_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:slag_brick_block",
|
||||
"required": ["engineersdecor:slag_brick_stairs"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:slag_brick_wall",
|
||||
"required": ["engineersdecor:slag_brick_block"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:slag_brick_block",
|
||||
"required": ["engineersdecor:slag_brick_wall"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:steel_double_t_support",
|
||||
"required": ["engineersdecor:thin_steel_pole"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:straight_pipe_valve_redstone_analog",
|
||||
"required": ["engineersdecor:straight_pipe_valve_redstone"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:straight_pipe_valve_redstone",
|
||||
"required": ["engineersdecor:straight_pipe_valve_redstone_analog"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:thick_steel_pole_head",
|
||||
"required": ["engineersdecor:thick_steel_pole"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:thick_steel_pole",
|
||||
"required": ["engineersdecor:thin_steel_pole"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:thick_steel_pole",
|
||||
"required": ["engineersdecor:thick_steel_pole_head"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:thin_steel_pole_head",
|
||||
"required": ["engineersdecor:thin_steel_pole"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:thin_steel_pole",
|
||||
"required": ["engineersdecor:thin_steel_pole_head"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_pole_head",
|
||||
"required": ["engineersdecor:treated_wood_pole"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_pole_support",
|
||||
"required": ["engineersdecor:treated_wood_pole_head"]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"type": "engineersdecor:optional",
|
||||
"result": "engineersdecor:treated_wood_pole",
|
||||
"required": ["engineersdecor:treated_wood_pole_support"]
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue