1.15/1.14/1.12: E-Furnace auto-feed added. Labeled Crate slot inventory wrapping to prevent sorting mods from altering the label slot. 1.12: Manual back-ported (issue #93). Steel-Mesh-Fence back-ported.

This commit is contained in:
stfwi 2020-04-18 12:18:00 +02:00
parent 45925ef81f
commit 76384d1126
245 changed files with 3665 additions and 710 deletions

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.20-b5": "[A] Back-ported Patchouli based Manual (you need to install Vazkii_'s Patchouli, too).\n[A] Back-ported Steel Mesh Fence Gate.\n[M] Minor back-porting compatibility refractoring.",
"1.0.20-b4": "[F] Fixed TE registration bug for Crate registry-optout (issue #91, thx tyon2006).",
"1.0.20-b3": "[/] Version skipped for 1.12.2.",
"1.0.20-b2": "[A] Backported Electrical Furnace GUI speed selection switch.\n[A] Backported Labeled Crate (storage crate with built-in item frame).",
@ -86,6 +87,6 @@
},
"promos": {
"1.12.2-recommended": "1.0.19",
"1.12.2-latest": "1.0.20-b4"
"1.12.2-latest": "1.0.20-b5"
}
}

View file

@ -10,7 +10,9 @@ Mod sources for Minecraft version 1.12.2.
----
## Version history
~ v1.0.20-b5 [M]
- v1.0.20-b5 [A] Back-ported Patchouli based Manual (you need to install Vazkii_'s Patchouli, too).
[A] Back-ported Steel Mesh Fence Gate.
[M] Minor back-porting compatibility refractoring.
- v1.0.20-b4 [F] Fixed TE registration bug for Crate registry-optout (issue #91, thx tyon2006).

View file

@ -12,6 +12,7 @@
*/
package wile.engineersdecor;
import net.minecraft.block.BlockDragonEgg;
import wile.engineersdecor.blocks.*;
import wile.engineersdecor.detail.ModAuxiliaries;
import wile.engineersdecor.detail.ModConfig;
@ -281,7 +282,14 @@ public class ModContent
public static final BlockDecorFence STEEL_MESH_FENCE = new BlockDecorFence(
"steel_mesh_fence",
BlockDecor.CFG_DEFAULT, Material.IRON, 2f, 15f, SoundType.METAL
BlockDecor.CFG_CUTOUT, Material.IRON, 2f, 15f, SoundType.METAL
);
public static final BlockDecorDoubleGate STEEL_MESH_FENCE_GATE = new BlockDecorDoubleGate(
"steel_mesh_fence_gate",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_LOOK_PLACEMENT,
Material.IRON, 2f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,6.5, 16,16,9.5)
);
//--------------------------------------------------------------------------------------------------------------------
@ -606,6 +614,7 @@ public class ModContent
STEEL_DOUBLE_T_SUPPORT,
STEEL_FLOOR_GRATING,
STEEL_MESH_FENCE,
STEEL_MESH_FENCE_GATE,
SIGN_HOTWIRE, SIGN_DANGER, SIGN_DEFENSE, SIGN_FACTORY_AREA, SIGN_EXIT, SIGN_MODLOGO,
TREATED_WOOD_SIDE_TABLE,
HALFSLAB_REBARCONCRETE, HALFSLAB_CONCRETE, HALFSLAB_GAS_CONCRETE, HALFSLAB_TREATEDWOOD,

View file

@ -0,0 +1,188 @@
/*
* @file BlockDecorDoubleGate.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Gate blocks that can be one or two segments high.
*/
package wile.engineersdecor.blocks;
import net.minecraft.entity.Entity;
import wile.engineersdecor.detail.ModAuxiliaries;
import net.minecraft.block.*;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import net.minecraft.world.IBlockAccess;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.pathfinding.PathNodeType;
import net.minecraft.block.BlockFenceGate;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BlockDecorDoubleGate extends BlockDecorDirectedHorizontal
{
private static final AxisAlignedBB AABB_EMPTY = new AxisAlignedBB(0,0,0, 0,0,0.1);
public static final PropertyInteger SEGMENT = PropertyInteger.create("segment", 0, 1);
public static final PropertyBool OPEN = BlockFenceGate.OPEN;
public static final int SEGMENT_LOWER = 0;
public static final int SEGMENT_UPPER = 1;
private final ArrayList<AxisAlignedBB> collision_shapes_;
private final ArrayList<AxisAlignedBB> shapes_;
public BlockDecorDoubleGate(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB)
{
super(registryName, config, material, hardness, resistance, sound, unrotatedAABB);
AxisAlignedBB caabb = unrotatedAABB.expand(0, 0.5, 0);
collision_shapes_ = new ArrayList<AxisAlignedBB>(Arrays.asList(
NULL_AABB,
NULL_AABB,
ModAuxiliaries.getRotatedAABB(caabb, EnumFacing.NORTH, true),
ModAuxiliaries.getRotatedAABB(caabb, EnumFacing.SOUTH, true),
ModAuxiliaries.getRotatedAABB(caabb, EnumFacing.WEST, true),
ModAuxiliaries.getRotatedAABB(caabb, EnumFacing.EAST, true),
NULL_AABB,
NULL_AABB
));
shapes_ = new ArrayList<AxisAlignedBB>(Arrays.asList(
AABB_EMPTY,
AABB_EMPTY,
ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.NORTH, true),
ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.SOUTH, true),
ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.WEST, true),
ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.EAST, true),
AABB_EMPTY,
AABB_EMPTY
));
}
@Override
@SuppressWarnings("deprecation")
public IBlockState getStateFromMeta(int meta)
{ return super.getStateFromMeta(meta).withProperty(OPEN, (meta&0x4)!=0).withProperty(SEGMENT, ((meta&0x8)!=0) ? SEGMENT_UPPER:SEGMENT_LOWER); }
@Override
public int getMetaFromState(IBlockState state)
{ return super.getMetaFromState(state) | (state.getValue(OPEN)?0x4:0x0) | (state.getValue(SEGMENT)==SEGMENT_UPPER ? 0x8:0x0); }
@Override
protected BlockStateContainer createBlockState()
{ return new BlockStateContainer(this, FACING, OPEN, SEGMENT); }
@Override
@SuppressWarnings("deprecation")
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
{ return shapes_.get(state.getValue(FACING).getIndex() & 0x7); }
@Override
public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos)
{ return state.getValue(OPEN) ? NULL_AABB : collision_shapes_.get(state.getValue(FACING).getIndex() & 0x7); }
@Override
@SuppressWarnings("deprecation")
public void addCollisionBoxToList(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState)
{ if(!state.getValue(OPEN)) addCollisionBoxToList(pos, entityBox, collidingBoxes, collision_shapes_.get(state.getValue(FACING).getIndex() & 0x7)); }
@Override
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand)
{ return getInitialState(super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand), world, pos); }
@Override
public boolean isPassable(IBlockAccess world, BlockPos pos)
{ return world.getBlockState(pos).getValue(OPEN); }
@Override
public net.minecraft.pathfinding.PathNodeType getAiPathNodeType(IBlockState state, IBlockAccess world, BlockPos pos)
{ return state.getValue(OPEN) ? PathNodeType.OPEN : PathNodeType.FENCE; }
@Override
@SuppressWarnings("deprecation")
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing face, float hitX, float hitY, float hitZ)
{
if((face==EnumFacing.UP) || (face==EnumFacing.DOWN) && (player.getHeldItem(hand).getItem()==Item.getItemFromBlock(this))) return false;
if(world.isRemote) return true;
final boolean open = !state.getValue(OPEN);
world.setBlockState(pos, state.withProperty(OPEN, open),2|8|16);
if(state.getValue(SEGMENT) == SEGMENT_UPPER) {
final IBlockState adjacent = world.getBlockState(pos.down());
if(adjacent.getBlock()==this) world.setBlockState(pos.down(), adjacent.withProperty(OPEN, open), 2|8|16);
} else {
final IBlockState adjacent = world.getBlockState(pos.up());
if(adjacent.getBlock()==this) world.setBlockState(pos.up(), adjacent.withProperty(OPEN, open), 2|8|16);
}
world.playSound(null, pos, open ? SoundEvents.BLOCK_IRON_DOOR_OPEN:SoundEvents.BLOCK_IRON_DOOR_CLOSE, SoundCategory.BLOCKS, 0.7f, 1.4f);
return true;
}
@Override
@SuppressWarnings("deprecation")
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos)
{
if(world.isRemote) return;
boolean powered = false;
IBlockState adjacent;
BlockPos adjacent_pos;
if(state.getValue(SEGMENT) == SEGMENT_UPPER) {
adjacent_pos = pos.down();
adjacent = world.getBlockState(adjacent_pos);
if(adjacent.getBlock()!=this) adjacent = null;
if(world.getRedstonePower(pos.up(), EnumFacing.UP) > 0) {
powered = true;
} else if((adjacent!=null) && (world.isBlockPowered(pos.down(2)))) {
powered = true;
}
} else {
adjacent_pos = pos.up();
adjacent = world.getBlockState(adjacent_pos);
if(adjacent.getBlock()!=this) adjacent = null;
if(world.isBlockPowered(pos)) {
powered = true;
} else if((adjacent!=null) && (world.getRedstonePower(pos.up(2), EnumFacing.UP) > 0)) {
powered = true;
}
}
boolean sound = false;
if(powered != state.getValue(OPEN)) {
world.setBlockState(pos, state.withProperty(OPEN, powered), 2|8|16);
sound = true;
}
if((adjacent != null) && (powered != adjacent.getValue(OPEN))) {
world.setBlockState(adjacent_pos, adjacent.withProperty(OPEN, powered), 2|8|16);
sound = true;
}
if(sound) {
world.playSound(null, pos, powered?SoundEvents.BLOCK_IRON_DOOR_OPEN:SoundEvents.BLOCK_IRON_DOOR_CLOSE, SoundCategory.BLOCKS, 0.7f, 1.4f);
}
}
// -------------------------------------------------------------------------------------------------------------------
private IBlockState getInitialState(IBlockState state, IBlockAccess world, BlockPos pos)
{
final IBlockState down = world.getBlockState(pos.down());
if(down.getBlock() == this) return state.withProperty(SEGMENT, SEGMENT_UPPER).withProperty(OPEN, down.getValue(OPEN)).withProperty(FACING, down.getValue(FACING));
final IBlockState up = world.getBlockState(pos.up());
if(up.getBlock() == this) return state.withProperty(SEGMENT, SEGMENT_LOWER).withProperty(OPEN, up.getValue(OPEN)).withProperty(FACING, up.getValue(FACING));
return state.withProperty(SEGMENT, SEGMENT_LOWER).withProperty(OPEN, false);
}
}

View file

@ -178,7 +178,7 @@ public class BlockDecorWall extends BlockDecor
{
final IBlockState state = world.getBlockState(other);
final Block block = state.getBlock();
if((block instanceof BlockDecorWall) || (block instanceof BlockFenceGate) || (block instanceof BlockDecorFence)) return true;
if((block instanceof BlockDecorWall) || (block instanceof BlockFenceGate) || (block instanceof BlockDecorFence) || (block instanceof BlockDecorDoubleGate)) return true;
if(world.getBlockState(pos.offset(facing)).getBlock()!=this) return false;
if(block instanceof BlockFence) return true;
final BlockFaceShape shp = state.getBlockFaceShape(world, other, facing);

View file

@ -0,0 +1,347 @@
/*
* @file Inventories.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* General inventory item handling functionality.
*/
package wile.engineersdecor.libmc.detail;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.world.World;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.wrapper.InvWrapper;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Inventories
{
public static boolean areItemStacksIdentical(ItemStack a, ItemStack b)
{ return (a.getItem()==b.getItem()) && ItemStack.areItemStackTagsEqual(a, b); }
public static boolean areItemStacksDifferent(ItemStack a, ItemStack b)
{ return (a.getItem()!=b.getItem()) || (!ItemStack.areItemStackTagsEqual(a, b)); }
public static IItemHandler itemhandler(World world, BlockPos pos, @Nullable EnumFacing side)
{
TileEntity te = world.getTileEntity(pos);
if(te==null) return null;
IItemHandler ih = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side);
if(ih!=null) return ih;
if((side!=null) && (te instanceof ISidedInventory)) return new SidedInvWrapper((ISidedInventory)te, side);
if(te instanceof IInventory) return new InvWrapper((IInventory)te);
return null;
}
public static ItemStack insert(IItemHandler inventory, ItemStack stack , boolean simulate)
{ return ItemHandlerHelper.insertItemStacked(inventory, stack, simulate); }
public static ItemStack insert(TileEntity te, @Nullable EnumFacing side, ItemStack stack, boolean simulate)
{
if(te==null) return stack;
IItemHandler hnd = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side);
if(hnd != null) {
hnd = (IItemHandler)te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side);
} else if((side!=null) && (te instanceof ISidedInventory)) {
hnd = new SidedInvWrapper((ISidedInventory)te, side);
} else if(te instanceof IInventory) {
hnd = new InvWrapper((IInventory)te);
}
return (hnd==null) ? stack : ItemHandlerHelper.insertItemStacked(hnd, stack, simulate);
}
public static ItemStack extract(IItemHandler inventory, @Nullable ItemStack match, int amount, boolean simulate)
{
if((inventory==null) || (amount<=0)) return ItemStack.EMPTY;
final int max = inventory.getSlots();
ItemStack out_stack = ItemStack.EMPTY;
for(int i=0; i<max; ++i) {
final ItemStack stack = inventory.getStackInSlot(i);
if(stack.isEmpty()) continue;
if(out_stack.isEmpty()) {
if((match!=null) && areItemStacksDifferent(stack, match)) continue;
out_stack = inventory.extractItem(i, amount, simulate);
} else if(areItemStacksIdentical(stack, out_stack)) {
ItemStack es = inventory.extractItem(i, (amount-out_stack.getCount()), simulate);
out_stack.grow(es.getCount());
}
if(out_stack.getCount() >= amount) break;
}
return out_stack;
}
private static ItemStack checked(ItemStack stack)
{ return stack.isEmpty() ? ItemStack.EMPTY : stack; } // explicit EMPTY return
public static class SlotRange
{
public final IInventory inventory;
public final int start_slot, end_slot;
public SlotRange(IInventory inv, int start, int end)
{ inventory=inv; start_slot=start; end_slot=end; }
/**
* Returns the number of stacks that match the given stack with NBT.
*/
public int stackMatchCount(final ItemStack ref_stack)
{
int n = 0; // ... std::accumulate() the old school way.
for(int i = start_slot; i < end_slot; ++i) {
if(areItemStacksIdentical(ref_stack, inventory.getStackInSlot(i))) ++n;
}
return n;
}
public int totalMatchingItemCount(final ItemStack ref_stack)
{
int n = 0;
for(int i = start_slot; i < end_slot; ++i) {
ItemStack stack = inventory.getStackInSlot(i);
if(areItemStacksIdentical(ref_stack, stack)) n += stack.getCount();
}
return n;
}
/**
* Moves as much items from the stack to the slots in range [start_slot, end_slot] of the inventory,
* filling up existing stacks first, then (player inventory only) checks appropriate empty slots next
* to stacks that have that item already, and last uses any empty slot that can be found.
* Returns the stack that is still remaining in the referenced `stack`.
*/
public ItemStack insert(final ItemStack stack_to_move, boolean only_fillup, int limit)
{ return insert(stack_to_move, only_fillup, limit, false, false); }
public ItemStack insert(final ItemStack stack_to_move, boolean only_fillup, int limit, boolean reverse, boolean force_group_stacks)
{
final ItemStack mvstack = stack_to_move.copy();
if((mvstack.isEmpty()) || (start_slot < 0) || (end_slot > inventory.getSizeInventory())) return checked(mvstack);
int limit_left = (limit>0) ? (Math.min(limit, mvstack.getMaxStackSize())) : (mvstack.getMaxStackSize());
boolean matches[] = new boolean[end_slot];
boolean empties[] = new boolean[end_slot];
int num_matches = 0;
for(int i = start_slot; i < end_slot; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i);
final ItemStack stack = inventory.getStackInSlot(sno);
if(stack.isEmpty() || (!inventory.isItemValidForSlot(sno, mvstack))) {
empties[sno] = true;
} else if(areItemStacksIdentical(stack, mvstack)) {
matches[sno] = true;
++num_matches;
}
}
// first iteration: fillup existing stacks
for(int i = start_slot; i < end_slot; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i);
if(empties[sno] || !matches[sno]) continue;
final ItemStack stack = inventory.getStackInSlot(sno);
int nmax = Math.min(limit_left, stack.getMaxStackSize() - stack.getCount());
if(mvstack.getCount() <= nmax) {
stack.setCount(stack.getCount()+mvstack.getCount());
inventory.setInventorySlotContents(sno, stack);
return ItemStack.EMPTY;
} else {
stack.grow(nmax);
mvstack.shrink(nmax);
inventory.setInventorySlotContents(sno, stack);
limit_left -= nmax;
}
}
if(only_fillup) return checked(mvstack);
if((num_matches>0) && ((force_group_stacks) || (inventory instanceof InventoryPlayer))) {
// second iteration: use appropriate empty slots,
// a) between
{
int insert_start = -1;
int insert_end = -1;
int i = start_slot+1;
for(;i < end_slot-1; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i);
if(insert_start < 0) {
if(matches[sno]) insert_start = sno;
} else if(matches[sno]) {
insert_end = sno;
}
}
for(i=insert_start;i < insert_end; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i);
if(!empties[sno]) continue;
int nmax = Math.min(limit_left, mvstack.getCount());
ItemStack moved = mvstack.copy();
moved.setCount(nmax);
mvstack.shrink(nmax);
inventory.setInventorySlotContents(sno, moved);
return checked(mvstack);
}
}
// b) before/after
{
for(int i = start_slot+1; i < end_slot-1; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i);
if(!matches[sno]) continue;
int ii = (empties[sno-1]) ? (sno-1) : (empties[sno+1] ? (sno+1) : -1);
if(ii >= 0) {
int nmax = Math.min(limit_left, mvstack.getCount());
ItemStack moved = mvstack.copy();
moved.setCount(nmax);
mvstack.shrink(nmax);
inventory.setInventorySlotContents(ii, moved);
return checked(mvstack);
}
}
}
}
// third iteration: use any empty slots
for(int i = start_slot; i < end_slot; ++i) {
final int sno = reverse ? (end_slot-1-i) : (i);
if(!empties[sno]) continue;
int nmax = Math.min(limit_left, mvstack.getCount());
ItemStack placed = mvstack.copy();
placed.setCount(nmax);
mvstack.shrink(nmax);
inventory.setInventorySlotContents(sno, placed);
return checked(mvstack);
}
return checked(mvstack);
}
/**
* Moves as much items from the slots in range [start_slot, end_slot] of the inventory into a new stack.
* Implicitly shrinks the inventory stacks and the `request_stack`.
*/
public ItemStack extract(final ItemStack request_stack)
{
if(request_stack.isEmpty()) return ItemStack.EMPTY;
final IInventory inventory = this.inventory;
List<ItemStack> matches = new ArrayList<>();
for(int i = start_slot; i < end_slot; ++i) {
final ItemStack stack = inventory.getStackInSlot(i);
if((!stack.isEmpty()) && (areItemStacksIdentical(stack, request_stack))) {
if(stack.hasTagCompound()) {
final NBTTagCompound nbt = stack.getTagCompound();
int n = nbt.getSize();
if((n > 0) && (nbt.hasKey("Damage"))) --n;
if(n > 0) continue;
}
matches.add(stack);
}
}
matches.sort(Comparator.comparingInt(ItemStack::getCount));
if(matches.isEmpty()) return ItemStack.EMPTY;
int n_left = request_stack.getCount();
ItemStack fetched_stack = matches.get(0).splitStack(n_left);
n_left -= fetched_stack.getCount();
for(int i=1; (i<matches.size()) && (n_left>0); ++i) {
ItemStack stack = matches.get(i).splitStack(n_left);
n_left -= stack.getCount();
fetched_stack.grow(stack.getCount());
}
return checked(fetched_stack);
}
}
public static class InventoryRange implements IInventory
{
public final IInventory inventory;
public final int offset, size;
public InventoryRange(IInventory inventory, int offset, int size)
{ this.inventory = inventory; this.offset = offset; this.size = size; }
@Override
public void clear()
{ inventory.clear(); }
@Override
public int getSizeInventory()
{ return size; }
@Override
public boolean isEmpty()
{ for(int i=0; i<size; ++i) if(!inventory.getStackInSlot(offset+i).isEmpty()){return false;} return true; }
@Override
public ItemStack getStackInSlot(int index)
{ return inventory.getStackInSlot(offset+index); }
@Override
public ItemStack decrStackSize(int index, int count)
{ return inventory.decrStackSize(offset+index, count); }
@Override
public ItemStack removeStackFromSlot(int index)
{ return inventory.removeStackFromSlot(offset+index); }
@Override
public void setInventorySlotContents(int index, ItemStack stack)
{ inventory.setInventorySlotContents(offset+index, stack); }
@Override
public int getInventoryStackLimit()
{ return inventory.getInventoryStackLimit(); }
@Override
public void markDirty()
{ inventory.markDirty(); }
@Override
public boolean isUsableByPlayer(EntityPlayer player)
{ return inventory.isUsableByPlayer(player); }
@Override
public void openInventory(EntityPlayer player)
{ inventory.openInventory(player); }
@Override
public void closeInventory(EntityPlayer player)
{ inventory.closeInventory(player); }
@Override
public boolean isItemValidForSlot(int index, ItemStack stack)
{ return inventory.isItemValidForSlot(offset+index, stack); }
@Override
public int getField(int index)
{ return 0; }
@Override
public void setField(int index, int value)
{}
@Override
public int getFieldCount()
{ return 0; }
@Override
public String getName()
{ return inventory.getName(); }
@Override
public boolean hasCustomName()
{ return inventory.hasCustomName(); }
@Override
public ITextComponent getDisplayName()
{ return inventory.getDisplayName(); }
}
}

View file

@ -0,0 +1,21 @@
{
"variants": {
"facing=north,open=false,segment=0": { "model": "engineersdecor:fence/steel_mesh_fence_gate_bottom_model" },
"facing=north,open=true,segment=0": { "model": "engineersdecor:fence/steel_mesh_fence_gate_bottom_model_open" },
"facing=south,open=false,segment=0": { "model": "engineersdecor:fence/steel_mesh_fence_gate_bottom_model" , "y":180 },
"facing=south,open=true,segment=0": { "model": "engineersdecor:fence/steel_mesh_fence_gate_bottom_model_open", "y":180 },
"facing=west,open=false,segment=0": { "model": "engineersdecor:fence/steel_mesh_fence_gate_bottom_model" , "y":270 },
"facing=west,open=true,segment=0": { "model": "engineersdecor:fence/steel_mesh_fence_gate_bottom_model_open", "y":270 },
"facing=east,open=false,segment=0": { "model": "engineersdecor:fence/steel_mesh_fence_gate_bottom_model" , "y":90 },
"facing=east,open=true,segment=0": { "model": "engineersdecor:fence/steel_mesh_fence_gate_bottom_model_open", "y":90 },
"facing=north,open=false,segment=1": { "model": "engineersdecor:fence/steel_mesh_fence_gate_top_model" },
"facing=north,open=true,segment=1": { "model": "engineersdecor:fence/steel_mesh_fence_gate_top_model_open" },
"facing=south,open=false,segment=1": { "model": "engineersdecor:fence/steel_mesh_fence_gate_top_model" , "y":180 },
"facing=south,open=true,segment=1": { "model": "engineersdecor:fence/steel_mesh_fence_gate_top_model_open", "y":180 },
"facing=west,open=false,segment=1": { "model": "engineersdecor:fence/steel_mesh_fence_gate_top_model" , "y":270 },
"facing=west,open=true,segment=1": { "model": "engineersdecor:fence/steel_mesh_fence_gate_top_model_open", "y":270 },
"facing=east,open=false,segment=1": { "model": "engineersdecor:fence/steel_mesh_fence_gate_top_model" , "y":90 },
"facing=east,open=true,segment=1": { "model": "engineersdecor:fence/steel_mesh_fence_gate_top_model_open", "y":90 }
}
}

View file

@ -128,6 +128,9 @@ tile.engineersdecor.steel_framed_window.name=Steel Framed Window
tile.engineersdecor.steel_framed_window.help=§6Steel framed triple glazed window. Well insulating. §r Does not connect to adjacent blocks like glass panes.
tile.engineersdecor.steel_mesh_fence.name=Steel Mesh Fence
tile.engineersdecor.steel_mesh_fence.help=§6Industrial style fence.§r\nDoes not connect do regular fences.
tile.engineersdecor.steel_mesh_fence_gate.name=Steel Mesh Fence Gate
tile.engineersdecor.steel_mesh_fence_gate.help=§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.small_lab_furnace.name=Small Laboratory Furnace
tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Solid fuel consuming, updraught. \

View file

@ -128,6 +128,9 @@ tile.engineersdecor.steel_framed_window.name=Окно со стальной ра
tile.engineersdecor.steel_framed_window.help=§6Стальной каркас окна с тройным остеклением. Хорошо изолирует. §r Не подключается к смежным блокам, таким как стеклянные панели.
tile.engineersdecor.steel_mesh_fence.name=Забор из стальной сетки
tile.engineersdecor.steel_mesh_fence.help=§6Забор в индустриальном стиле.§r\nНе стыкуется с обычными заборами.
tile.engineersdecor.steel_mesh_fence_gate.name=Steel Mesh Fence Gate
tile.engineersdecor.steel_mesh_fence_gate.help=§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.small_lab_furnace.name=Компактная лабораторная печь
tile.engineersdecor.small_lab_furnace.help=§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива сверху. \

View file

@ -128,6 +128,9 @@ tile.engineersdecor.steel_framed_window.name=钢框窗
tile.engineersdecor.steel_framed_window.help=§6钢框三层玻璃窗。绝缘良好。§r不像玻璃板一样连接到相邻方块。
tile.engineersdecor.steel_mesh_fence.name=钢丝栅栏
tile.engineersdecor.steel_mesh_fence.help=§6工业式栅栏。§r\n不与普通栅栏连接。
tile.engineersdecor.steel_mesh_fence_gate.name=Steel Mesh Fence Gate
tile.engineersdecor.steel_mesh_fence_gate.help=§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.small_lab_furnace.name=小型实验室炉
tile.engineersdecor.small_lab_furnace.help=§6小型金属壳实验室窑。§r消耗固体燃料向上排气。\

View file

@ -0,0 +1,267 @@
{
"textures": {
"p": "engineersdecor:blocks/fence/steel_mesh_pole_side",
"t": "engineersdecor:blocks/fence/steel_mesh_top",
"particle": "engineersdecor:blocks/fence/steel_mesh_fence",
"s": "engineersdecor:blocks/fence/steel_mesh_fence"
},
"elements": [
{
"from": [3.125, 13.625, 9.4375],
"to": [12.8125, 13.98, 9.625],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"},
"south": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 9.625, 9.4375],
"to": [12.8125, 9.98, 9.625],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"},
"south": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 5.625, 9.4375],
"to": [12.8125, 5.98, 9.625],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"},
"south": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 1.625, 9.4375],
"to": [12.8125, 1.98, 9.625],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"},
"east": {"uv": [8, 14.02, 8.1875, 14.375], "texture": "#s"},
"south": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"},
"west": {"uv": [7.8125, 14.02, 8, 14.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 11.625, 9.625],
"to": [12.8125, 11.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"},
"south": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 12.625, 9.875],
"to": [5.3125, 13.23, 10.1875],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 9.5, 10]},
"faces": {
"north": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"},
"east": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"},
"south": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"},
"west": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"},
"up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 90, "texture": "#s"},
"down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 12.625, 9],
"to": [5.3125, 13.23, 9.3125],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 9.5, 9.125]},
"faces": {
"north": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"},
"east": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"},
"south": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"},
"west": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"},
"up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 90, "texture": "#s"},
"down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.5, 7.625, 9.625],
"to": [12.9375, 7.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"},
"south": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.5, 3.625, 9.625],
"to": [12.9375, 3.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"},
"south": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [12.25, 1, 9.25],
"to": [13, 16, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"},
"south": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"},
"west": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.75, 15, 9.25],
"to": [12.25, 16, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"south": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.75, 1, 9.25],
"to": [12.25, 2, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, -5.5, 9.625]},
"faces": {
"north": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"east": {"uv": [7.625, 0, 8.375, 1], "texture": "#s"},
"south": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"west": {"uv": [7.625, 0, 8.375, 1], "texture": "#s"},
"up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3, 1, 9.25],
"to": [3.75, 16, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"},
"east": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"south": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"},
"up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 270, "texture": "#s"}
}
},
{
"from": [13, 0, 6.5],
"to": [16, 16, 9.5],
"faces": {
"north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"},
"down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"}
}
},
{
"from": [0, 0, 6.5],
"to": [3, 16, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]},
"faces": {
"north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"},
"down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"}
}
},
{
"from": [0.5, 0, 9.5],
"to": [3, 16, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]},
"faces": {
"east": {"uv": [6, 0, 7, 16], "texture": "#p"},
"south": {"uv": [0, 0, 3, 16], "texture": "#p"},
"west": {"uv": [10, 0, 11, 16], "texture": "#p"},
"up": {"uv": [6, 12, 9, 13], "texture": "#t"},
"down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"}
}
},
{
"from": [13, 0, 9.5],
"to": [15.5, 16, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]},
"faces": {
"east": {"uv": [6, 0, 7, 16], "texture": "#p"},
"south": {"uv": [0, 0, 3, 16], "texture": "#p"},
"west": {"uv": [10, 0, 11, 16], "texture": "#p"},
"up": {"uv": [6, 12, 9, 13], "texture": "#t"},
"down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"}
}
},
{
"from": [11.75, 1.375, 9.5],
"to": [12.125, 15.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [7.75, 1.375, 9.5],
"to": [8.125, 15.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [3.75, 1.375, 9.5],
"to": [4.125, 15.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [9.75, 1.375, 9.5],
"to": [10.125, 15.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [5.75, 1.375, 9.5],
"to": [6.125, 15.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]},
"faces": {
"north": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
}
]
}

View file

@ -0,0 +1,267 @@
{
"textures": {
"p": "engineersdecor:blocks/fence/steel_mesh_pole_side",
"t": "engineersdecor:blocks/fence/steel_mesh_top",
"particle": "engineersdecor:blocks/fence/steel_mesh_fence",
"s": "engineersdecor:blocks/fence/steel_mesh_fence"
},
"elements": [
{
"from": [12.625, 13.625, 0.125],
"to": [12.8125, 13.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"},
"west": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.625, 9.625, 0.125],
"to": [12.8125, 9.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"},
"west": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.625, 5.625, 0.125],
"to": [12.8125, 5.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"},
"west": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.625, 1.625, 0.125],
"to": [12.8125, 1.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.8125, 14.02, 8, 14.375], "texture": "#s"},
"east": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"},
"south": {"uv": [8, 14.02, 8.1875, 14.375], "texture": "#s"},
"west": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.4375, 11.625, 0.125],
"to": [12.625, 11.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"},
"west": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.0625, 12.625, 0.125],
"to": [12.375, 13.23, 2.3125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"},
"east": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"},
"south": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"},
"west": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"},
"up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 180, "texture": "#s"},
"down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.9375, 12.625, 0.125],
"to": [13.25, 13.23, 2.3125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"},
"east": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"},
"south": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"},
"west": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"},
"up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 180, "texture": "#s"},
"down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.4375, 7.625, 0.5],
"to": [12.625, 7.98, 9.9375],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"},
"west": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.4375, 3.625, 0.5],
"to": [12.625, 3.98, 9.9375],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"},
"west": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.25, 1, 9.25],
"to": [13, 16, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"east": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"},
"south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"west": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"},
"up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.25, 15, 0.75],
"to": [13, 16, 9.25],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.25, 1, 0.75],
"to": [13, 2, 9.25],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.25, 1, 0],
"to": [13, 16, 0.75],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"east": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"},
"south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"west": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"},
"up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"}
}
},
{
"from": [13, 0, 6.5],
"to": [16, 16, 9.5],
"faces": {
"north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"},
"down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"}
}
},
{
"from": [0, 0, 6.5],
"to": [3, 16, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]},
"faces": {
"north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"},
"down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"}
}
},
{
"from": [0.5, 0, 9.5],
"to": [3, 16, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]},
"faces": {
"east": {"uv": [6, 0, 7, 16], "texture": "#p"},
"south": {"uv": [0, 0, 3, 16], "texture": "#p"},
"west": {"uv": [10, 0, 11, 16], "texture": "#p"},
"up": {"uv": [6, 12, 9, 13], "texture": "#t"},
"down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"}
}
},
{
"from": [13, 0, 9.5],
"to": [15.5, 16, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]},
"faces": {
"east": {"uv": [6, 0, 7, 16], "texture": "#p"},
"south": {"uv": [0, 0, 3, 16], "texture": "#p"},
"west": {"uv": [10, 0, 11, 16], "texture": "#p"},
"up": {"uv": [6, 12, 9, 13], "texture": "#t"},
"down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"}
}
},
{
"from": [12.5, 1.375, 8.75],
"to": [12.75, 15.855, 9.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"}
}
},
{
"from": [12.5, 1.375, 4.75],
"to": [12.75, 15.855, 5.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [12.5, 1.375, 0.75],
"to": [12.75, 15.855, 1.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"}
}
},
{
"from": [12.5, 1.375, 6.75],
"to": [12.75, 15.855, 7.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"}
}
},
{
"from": [12.5, 1.375, 2.75],
"to": [12.75, 15.855, 3.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"}
}
}
]
}

View file

@ -0,0 +1,319 @@
{
"parent": "block/block",
"ambientocclusion": false,
"textures": {
"particle": "engineersdecor:blocks/fence/steel_mesh_fence",
"s": "engineersdecor:blocks/fence/steel_mesh_fence",
"t": "engineersdecor:blocks/fence/steel_mesh_top"
},
"elements": [
{
"from": [7.5, 0, 3],
"to": [8.5, 16, 4],
"faces": {
"north": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"},
"east": {"uv": [12, 0, 13, 16], "texture": "#s"},
"south": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"},
"west": {"uv": [3, 0, 4, 16], "texture": "#s"},
"up": {"uv": [7.5, 3, 8.5, 4], "texture": "#t"},
"down": {"uv": [7.5, 12, 8.5, 13], "texture": "#s"}
}
},
{
"from": [7.5, 0, 12],
"to": [8.5, 16, 13],
"faces": {
"north": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"},
"east": {"uv": [3, 0, 4, 16], "texture": "#s"},
"south": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"},
"west": {"uv": [12, 0, 13, 16], "texture": "#s"},
"up": {"uv": [7.5, 12, 8.5, 13], "texture": "#t"},
"down": {"uv": [7.5, 3, 8.5, 4], "texture": "#s"}
}
},
{
"from": [7.5, 15, 4],
"to": [8.5, 16, 12],
"faces": {
"east": {"uv": [4, 0, 12, 1], "texture": "#s"},
"west": {"uv": [4, 0, 12, 1], "texture": "#s"},
"up": {"uv": [7.5, 4, 8.5, 12], "texture": "#t"},
"down": {"uv": [7.5, 4, 8.5, 12], "texture": "#s"}
}
},
{
"from": [7.5, 7, 4],
"to": [8.5, 9, 5],
"faces": {
"east": {"uv": [11, 7, 12, 9], "texture": "#s"},
"south": {"uv": [7.5, 7, 8.5, 9], "texture": "#s"},
"west": {"uv": [4, 7, 5, 9], "texture": "#s"},
"up": {"uv": [7.5, 4, 8.5, 5], "texture": "#t"},
"down": {"uv": [7.5, 11, 8.5, 12], "texture": "#s"}
}
},
{
"from": [7.5, 0, 4],
"to": [8.5, 0.5, 12],
"faces": {
"east": {"uv": [4, 15.5, 12, 16], "texture": "#s"},
"west": {"uv": [4, 15.5, 12, 16], "texture": "#s"},
"up": {"uv": [7.5, 4, 8.5, 12], "texture": "#t"},
"down": {"uv": [7.5, 4, 8.5, 12], "texture": "#s"}
}
},
{
"from": [8, 4.125, 3.5],
"to": [8.125, 4.5, 12.5],
"faces": {
"east": {"uv": [3.5, 11.5, 12.5, 11.875], "texture": "#s"},
"west": {"uv": [3.5, 11.5, 12.5, 11.875], "texture": "#s"},
"up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"},
"down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 5.8125],
"to": [8.05, 15.375, 6.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [9.8125, 0.625, 10.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [5.8125, 0.625, 6.1875, 16], "texture": "#s"}
}
},
{
"from": [8, 8.125, 3.5],
"to": [8.125, 8.5, 12.5],
"faces": {
"east": {"uv": [3.5, 7.5, 12.5, 7.875], "texture": "#s"},
"west": {"uv": [3.5, 7.5, 12.5, 7.875], "texture": "#s"},
"up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"},
"down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 9.8125],
"to": [8.05, 15.375, 10.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [5.8125, 0.625, 6.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [9.8125, 0.625, 10.1875, 16], "texture": "#s"}
}
},
{
"from": [8, 12.125, 3.5],
"to": [8.125, 12.5, 12.5],
"faces": {
"east": {"uv": [3.5, 3.5, 12.5, 3.875], "texture": "#s"},
"west": {"uv": [3.5, 3.5, 12.5, 3.875], "texture": "#s"},
"up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"},
"down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"}
}
},
{
"from": [8, 2.125, 3.5],
"to": [8.125, 2.5, 12.5],
"faces": {
"east": {"uv": [3.5, 13.5, 12.5, 13.875], "texture": "#s"},
"west": {"uv": [3.5, 13.5, 12.5, 13.875], "texture": "#s"},
"up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"},
"down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 3.8125],
"to": [8.05, 15.375, 4.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [11.8125, 0.625, 12.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [3.8125, 0.625, 4.1875, 16], "texture": "#s"}
}
},
{
"from": [8, 6.125, 3.5],
"to": [8.125, 6.5, 12.5],
"faces": {
"east": {"uv": [3.5, 9.5, 12.5, 9.875], "texture": "#s"},
"west": {"uv": [3.5, 9.5, 12.5, 9.875], "texture": "#s"},
"up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"},
"down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 7.8125],
"to": [8.05, 15.375, 8.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [7.8125, 0.625, 8.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [7.8125, 0.625, 8.1875, 16], "texture": "#s"}
}
},
{
"from": [8, 10.125, 3.5],
"to": [8.125, 10.5, 12.5],
"faces": {
"east": {"uv": [3.5, 5.5, 12.5, 5.875], "texture": "#s"},
"west": {"uv": [3.5, 5.5, 12.5, 5.875], "texture": "#s"},
"up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"},
"down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 11.8125],
"to": [8.05, 15.375, 12.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [3.8125, 0.625, 4.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [11.8125, 0.625, 12.1875, 16], "texture": "#s"}
}
},
{
"from": [8, 14.125, 3.5],
"to": [8.125, 14.5, 12.5],
"faces": {
"east": {"uv": [3.5, 1.5, 12.5, 1.875], "texture": "#s"},
"west": {"uv": [3.5, 1.5, 12.5, 1.875], "texture": "#s"},
"up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"},
"down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"}
}
},
{
"from": [7.875, 1.125, 3.5],
"to": [8, 1.5, 12.5],
"faces": {
"east": {"uv": [3.5, 14.5, 12.5, 14.875], "texture": "#s"},
"west": {"uv": [3.5, 14.5, 12.5, 14.875], "texture": "#s"},
"up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"},
"down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"}
}
},
{
"from": [7.875, 5.125, 3.5],
"to": [8, 5.5, 12.5],
"faces": {
"east": {"uv": [3.5, 10.5, 12.5, 10.875], "texture": "#s"},
"west": {"uv": [3.5, 10.5, 12.5, 10.875], "texture": "#s"},
"up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"},
"down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 6.8125],
"to": [8.05, 15.375, 7.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [8.8125, 0.625, 9.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [6.8125, 0.625, 7.1875, 16], "texture": "#s"}
}
},
{
"from": [7.875, 9.125, 3.5],
"to": [8, 9.5, 12.5],
"faces": {
"east": {"uv": [3.5, 6.5, 12.5, 6.875], "texture": "#s"},
"west": {"uv": [3.5, 6.5, 12.5, 6.875], "texture": "#s"},
"up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"},
"down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 10.8125],
"to": [8.05, 15.375, 11.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [4.8125, 0.625, 5.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [10.8125, 0.625, 11.1875, 16], "texture": "#s"}
}
},
{
"from": [7.875, 13.125, 3.5],
"to": [8, 13.5, 12.5],
"faces": {
"east": {"uv": [3.5, 2.5, 12.5, 2.875], "texture": "#s"},
"west": {"uv": [3.5, 2.5, 12.5, 2.875], "texture": "#s"},
"up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"},
"down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"}
}
},
{
"from": [7.875, 3.125, 3.5],
"to": [8, 3.5, 12.5],
"faces": {
"east": {"uv": [3.5, 12.5, 12.5, 12.875], "texture": "#s"},
"west": {"uv": [3.5, 12.5, 12.5, 12.875], "texture": "#s"},
"up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"},
"down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 4.8125],
"to": [8.05, 15.375, 5.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [10.8125, 0.625, 11.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [4.8125, 0.625, 5.1875, 16], "texture": "#s"}
}
},
{
"from": [7.875, 7.125, 3.5],
"to": [8, 7.5, 12.5],
"faces": {
"east": {"uv": [3.5, 8.5, 12.5, 8.875], "texture": "#s"},
"west": {"uv": [3.5, 8.5, 12.5, 8.875], "texture": "#s"},
"up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"},
"down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"}
}
},
{
"from": [7.925, 0, 8.8125],
"to": [8.05, 15.375, 9.1875],
"faces": {
"north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"},
"east": {"uv": [6.8125, 0.625, 7.1875, 16], "texture": "#s"},
"south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"},
"west": {"uv": [8.8125, 0.625, 9.1875, 16], "texture": "#s"}
}
},
{
"from": [7.875, 11.125, 3.5],
"to": [8, 11.5, 12.5],
"faces": {
"east": {"uv": [3.5, 4.5, 12.5, 4.875], "texture": "#s"},
"west": {"uv": [3.5, 4.5, 12.5, 4.875], "texture": "#s"},
"up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"},
"down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [9, 35, 0],
"translation": [0, 0, -1],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 1.5, 0],
"scale": [0.3, 0.3, 0.3]
},
"gui": {
"rotation": [30, 135, 0],
"translation": [-0.25, 0.5, 0],
"scale": [0.7, 0.7, 0.7]
},
"fixed": {
"rotation": [0, 90, 0],
"translation": [0, 0, -0.25]
}
}
}

View file

@ -0,0 +1,220 @@
{
"textures": {
"p": "engineersdecor:blocks/fence/steel_mesh_pole_side",
"t": "engineersdecor:blocks/fence/steel_mesh_top",
"particle": "engineersdecor:blocks/fence/steel_mesh_fence",
"s": "engineersdecor:blocks/fence/steel_mesh_fence"
},
"elements": [
{
"from": [3.125, 12.625, 9.4375],
"to": [12.8125, 12.98, 9.625],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"},
"south": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 8.625, 9.4375],
"to": [12.8125, 8.98, 9.625],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"},
"south": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 4.625, 9.4375],
"to": [12.8125, 4.98, 9.625],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"},
"south": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 0.625, 9.4375],
"to": [12.8125, 0.98, 9.625],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"},
"south": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.125, 10.625, 9.625],
"to": [12.8125, 10.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"},
"south": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.5, 6.625, 9.625],
"to": [12.9375, 6.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"},
"south": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3.5, 2.625, 9.625],
"to": [12.9375, 2.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"},
"south": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"}
}
},
{
"from": [12.25, 0, 9.25],
"to": [13, 15, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"},
"south": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"},
"west": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 90, "texture": "#s"}
}
},
{
"from": [3.75, 14, 9.25],
"to": [12.25, 15, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [2.25, 0, 13.75, 1], "texture": "#s"},
"south": {"uv": [2.25, 0, 13.75, 1], "texture": "#s"},
"up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"},
"down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"}
}
},
{
"from": [3, 0, 9.25],
"to": [3.75, 15, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"},
"east": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"south": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"},
"up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 90, "texture": "#s"}
}
},
{
"from": [13, 0, 6.5],
"to": [16, 16, 9.5],
"faces": {
"north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}
}
},
{
"from": [0, 0, 6.5],
"to": [3, 16, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]},
"faces": {
"north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}
}
},
{
"from": [0.5, 0, 9.5],
"to": [3, 16, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]},
"faces": {
"east": {"uv": [6, 0, 7, 16], "texture": "#p"},
"south": {"uv": [0, 0, 3, 16], "texture": "#p"},
"west": {"uv": [10, 0, 11, 16], "texture": "#p"},
"up": {"uv": [6, 12, 9, 13], "texture": "#t"}
}
},
{
"from": [13, 0, 9.5],
"to": [15.5, 16, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]},
"faces": {
"east": {"uv": [6, 0, 7, 16], "texture": "#p"},
"south": {"uv": [0, 0, 3, 16], "texture": "#p"},
"west": {"uv": [10, 0, 11, 16], "texture": "#p"},
"up": {"uv": [6, 12, 9, 13], "texture": "#t"}
}
},
{
"from": [11.75, 0, 9.5],
"to": [12.125, 14.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [7.75, 0, 9.5],
"to": [8.125, 14.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [3.75, 0, 9.5],
"to": [4.125, 14.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [9.75, 0, 9.5],
"to": [10.125, 14.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [5.75, 0, 9.5],
"to": [6.125, 14.855, 9.75],
"rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]},
"faces": {
"north": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"south": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"},
"west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}
}
}
]
}

View file

@ -0,0 +1,222 @@
{
"textures": {
"p": "engineersdecor:blocks/fence/steel_mesh_pole_side",
"t": "engineersdecor:blocks/fence/steel_mesh_top",
"particle": "engineersdecor:blocks/fence/steel_mesh_fence",
"s": "engineersdecor:blocks/fence/steel_mesh_fence"
},
"elements": [
{
"from": [12.625, 12.625, 0.125],
"to": [12.8125, 12.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"},
"west": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.625, 8.625, 0.125],
"to": [12.8125, 8.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"},
"west": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.625, 4.625, 0.125],
"to": [12.8125, 4.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"},
"west": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.625, 0.625, 0.125],
"to": [12.8125, 0.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"},
"west": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"},
"up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.4375, 10.625, 0.125],
"to": [12.625, 10.98, 9.8125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"},
"west": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.4375, 6.625, 0.5],
"to": [12.625, 6.98, 9.9375],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"},
"west": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.4375, 2.625, 0.5],
"to": [12.625, 2.98, 9.9375],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"east": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"},
"west": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"},
"up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"},
"down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.25, 0, 9.25],
"to": [13, 15, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"east": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"},
"south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"west": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"},
"up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.25, 14, 0.75],
"to": [13, 15, 9.25],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"},
"up": {"uv": [7.625, 2.25, 8.375, 10.75], "rotation": 180, "texture": "#s"},
"down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"}
}
},
{
"from": [12.25, 0, 0],
"to": [13, 15, 0.75],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"east": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"},
"south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"},
"west": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"},
"up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"}
}
},
{
"from": [13, 0, 6.5],
"to": [16, 16, 9.5],
"faces": {
"north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}
}
},
{
"from": [0, 0, 6.5],
"to": [3, 16, 9.5],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]},
"faces": {
"north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"},
"up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}
}
},
{
"from": [0.5, 0, 9.5],
"to": [3, 16, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]},
"faces": {
"east": {"uv": [6, 0, 7, 16], "texture": "#p"},
"south": {"uv": [0, 0, 3, 16], "texture": "#p"},
"west": {"uv": [10, 0, 11, 16], "texture": "#p"},
"up": {"uv": [6, 12, 9, 13], "texture": "#t"}
}
},
{
"from": [13, 0, 9.5],
"to": [15.5, 16, 10.5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]},
"faces": {
"east": {"uv": [6, 0, 7, 16], "texture": "#p"},
"south": {"uv": [0, 0, 3, 16], "texture": "#p"},
"west": {"uv": [10, 0, 11, 16], "texture": "#p"},
"up": {"uv": [6, 12, 9, 13], "texture": "#t"}
}
},
{
"from": [12.5, 0, 8.75],
"to": [12.75, 14.855, 9.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"}
}
},
{
"from": [12.5, 0, 4.75],
"to": [12.75, 14.855, 5.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"}
}
},
{
"from": [12.5, 0, 0.75],
"to": [12.75, 14.855, 1.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"}
}
},
{
"from": [12.5, 0, 6.75],
"to": [12.75, 14.855, 7.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"}
}
},
{
"from": [12.5, 0, 2.75],
"to": [12.75, 14.855, 3.125],
"rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]},
"faces": {
"north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"east": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"},
"south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"},
"west": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"}
}
}
]
}

View file

@ -0,0 +1,34 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "engineersdecor:item/manual"
},
"display": {
"thirdperson_righthand": {
"rotation": [9, -23, -105],
"translation": [-2.5, 0.75, 0],
"scale": [0.4, 0.4, 0.4]
},
"thirdperson_lefthand": {
"rotation": [78, 90, 35],
"translation": [0, 0.5, -1.75],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [-21, -90, 15],
"translation": [0.88, 2.45, 1.13],
"scale": [0.68, 0.68, 0.68]
},
"firstperson_lefthand": {
"rotation": [4, 90, -15],
"translation": [1.13, 3.2, 1.13],
"scale": [0.68, 0.68, 0.68]
},
"ground": {
"scale": [0.4, 0.4, 0.4]
},
"gui": {
"translation": [0, 0.5, 0]
}
}
}

View file

@ -0,0 +1 @@
{ "parent": "engineersdecor:block/fence/steel_mesh_fence_gate_inventory" }

View file

@ -0,0 +1,9 @@
{
"name": "Engineer's Decor",
"creative_tab": "tabengineersdecor",
"subtitle": "Reference manual",
"version": 0,
"model": "engineersdecor:manual",
"show_progress": false,
"landing_text": "Tip in advance: To get a short tooltip help text for a block or device, press the CONTRTOL and SHIFT keys at the same time while hovering. That way you do not need to carry this heavy manual with you all the time. The more detailed descriptions in this book are helpful if the features are new for you, or if you like to read up about background aspects."
}

View file

@ -0,0 +1,6 @@
{
"name": "Automation",
"description": "Devices for nice looking contraptions and factory automation support.",
"icon": "engineersdecor:small_block_breaker",
"sortnum": 6000
}

View file

@ -0,0 +1,6 @@
{
"name": "Building",
"description": "Blocks for the exterior and basic interior architecture of your factory or home.",
"icon": "engineersdecor:clinker_brick_block",
"sortnum": 1000
}

View file

@ -0,0 +1,6 @@
{
"name": "Cosmetic",
"description": "Cosmetic blocks to fill empty and plain halls with life and accentuation.",
"icon": "engineersdecor:sign_hotwire",
"sortnum": 3000
}

View file

@ -0,0 +1,6 @@
{
"name": "Crafting and Smelting",
"description": "Getting things build, cooked, smelted or liquified. ",
"icon": "engineersdecor:treated_wood_crafting_table",
"sortnum": 5000
}

View file

@ -0,0 +1,6 @@
{
"name": "Fluidics",
"description": "Devices helping to deal with fluids.",
"icon": "engineersdecor:straight_pipe_valve_redstone",
"sortnum": 7000
}

View file

@ -0,0 +1,6 @@
{
"name": "Illumination",
"description": "Let's shed some light on the situation.",
"icon": "engineersdecor:iron_inset_light",
"sortnum": 4000
}

View file

@ -0,0 +1,6 @@
{
"name": "Power",
"description": "Devices related to RF power.",
"icon": "engineersdecor:small_solar_panel",
"sortnum": 8000
}

View file

@ -0,0 +1,6 @@
{
"name": "Structural",
"description": "The following chapters contain information about blocks for large and small scale structural integrity.",
"icon": "engineersdecor:thick_steel_pole_head",
"sortnum": 2000
}

View file

@ -0,0 +1,58 @@
{
"name": "Factory Dropper",
"icon": "engineersdecor:factory_dropper",
"category": "automation",
"sortnum": 6020,
"pages": [
{
"type": "spotlight",
"title": "Factory Dropper",
"item": "engineersdecor:factory_dropper",
"text": "A device to accurately drop items, suitable for automation contraptions.$(br)Metal shutters in front of the ejector protect the interior, and open only when $(t:... that is a visual indicator for you, read on ...)ready to drop$() or dropping from one of the twelve internal storage slots. After ejecting, the stack selection advances to the next suitable slot (so called $(o)round$()"
},
{
"type": "text",
"text": "$(o)robin$() operation - in the GUI the current slot is marked with a red frame). Three filter slots (stack comparators) facilitate advanced automation.$(br)The dropper can be placed in all directions, where sneak-clicking flips the placement orientation.$(br)By default the device works like a cobblestone Dropper, spitting out one item when seeing $(t: that is off->on, or better said zero to nonzero)a rising edge of the external Redstone signal$(). This behavior can be tuned, amongst other features, in the GUI.$(br)"
},
{
"type": "text",
"text": "$(l)Positioning$()$(br)You can adjust angle and drop force with $(t: ... technical term, means that the result will stay the same quite accurately, even if the value may not be precisely what it should be - that would be called accuracy then. In other words, the dropper will keep dropping where it dropped the first time.)high repeatability$(). Looking at the front face of the dropper, you see a x-y coordinate system (a red and a green line). The same is drawn in the top right area of the GUI. Clicking there will move the crosshair away from the centre, changing the spit angle from -45° to +45° left/right and up/down. At the left of the coordinate system, a spring is shown as vertical slider, which adjusts the prestress and thus the drop force."
},
{
"type": "text",
"text": "$(l)Stack Count$()$(br)The horizontal slider under the position controls (marked with 1 to 5 dots above) is used to set the number of items that are dropped simultaneously. Range is from 1 to 32.$(br)If a stack does not have that many items, it will be skipped. This is useful if you need an exact amount of items, e.g. for compressing in a $(o)IE Metal Press$(), or for in-world crafting contraptions."
},
{
"type": "text",
"text": "$(l)Drop Delay / Interval$()$(br)The horizontal slider below the stack adjustment allows to set a cool-down in 0.1s steps (delay after ejecting; the icons shall represent a dog and a snail for fast -> slow).$(br2)This can be useful if the contraption or device, which you feed with the dropped items, needs some processing time - means preventing item spam or despawning."
},
{
"type": "text",
"text": "$(l)Filter Slots$()$(br)These slots compare the stacks that you place in them with all stacks in the storage. If the item is the same, and the stack in the storage is at least as big as the one in the filter, then the filter output will be ON, and the slot LED is lit green. If no stack or a too small stack is found in the storage, then the filter slot signal is OFF, and the slot LED red. If you leave a filter slot empty, then the LED is unlit, and the output is ignored."
},
{
"type": "text",
"text": "$(l)Redstone Controls$()$(br)In the lower right area of the GUI, there is a red LED (with down-arrow) and three circuit elements wired up. The LED is lit when the device sees an external Redstone signal, and can also be used as test-trigger button. Below are two logic gates, and one trigger control logic (right).$(br)Let us start at the end of the circuit: If you click at the trigger control, the $(t: The symbols are technical representations, showing what happens if you attach a lever and switch it on. The one curve goes up with the lever signal and stays there - called STEP. The other one also rises with the lever signal, but after a short time falls again by itself, although the lever is still on - that's a PULSE.)symbol changes between $(o)pulse mode$() and $(o)continuous mode$()."
},
{
"type": "text",
"text": "The trigger control is fed by the output of a logic gate (in the middle). Click it to switch between $(t:These icons are actually the official [IEC] symbols in schematics. AND means all of the inputs have to be ON. OR means only one of them has to be ON, no matter which one, or more than one. That's why the symbol is '>=1'.)$(o)AND ('&') and OR ('>=1') logic$()$(). One of the inputs comes from the external Redstone, the other one from the filters. Lastly, you can do the same for the three wires coming from the filter slots. $(o)&$(): All of them must be on, $(o)>=1$(): At least one of them must be on.$(br2)What does this mean now? Well, you can drop items triggered or continuously. You can also"
},
{
"type": "text",
"text": "define if an external Redstone signal is absolutely needed, or if the device shall also spit automatically when filter slots match. And you can define if stacks in the filter slots shall be only dropped all together, or independently.$(br2)$(l)Shutter Indication$()$(br)The front shutter can help you to see internal conditions without opening the GUI. If you have items in the filter slots and all filters match (LEDs green), so that the dropper is"
},
{
"type": "text",
"text": "only waiting for an external Redstone signal, then the shutter will be open.$(br2)$(l)Further Details$()$(br)$(li)A blinking yellow LED above the delay slider indicates that the dropper is waiting for the delay to expire.$(li)When saying 'Redstone' OR 'filter slot output' for the second logic gate, and if the filter conditions are not met, then the dropper will instead spit an item that is not in the filter (good for cleaning)."
},
{
"type": "text",
"text": "$(li)In contrast to the previous, saying 'Redstone' AND 'filter slot output' for the 2nd logic gate, then only items from the filter will be ejected, other stacks will remain in the storage slots until they are extracted somehow."
},
{
"type": "text",
"text": ""
}
]
}

View file

@ -0,0 +1,42 @@
{
"name": "Factory Hopper",
"icon": "engineersdecor:factory_hopper",
"category": "automation",
"sortnum": 6010,
"pages": [
{
"type": "spotlight",
"title": "Factory Hopper",
"item": "engineersdecor:factory_hopper",
"text": "A Hopper device facilitating item collection and advanced automation.$(br)With additional $(t:... that is also for the sake of style: When you attach a lever or Redstone Probe Connector, these will not hang in thin air)support plates$() on the sides and an increased outlet diameter, it can insert and store more items. Sliders and Redstone controls in the GUI allow to tune the device functional behaviour."
},
{
"type": "text",
"text": "The hopper can be placed in all directions including up, in the latter case the device collects or draws items from below.$(br)When you break and relocate the hopper, stored items will stay in place, and settings will be preserved.$(br2)$(l)Collection$()$(br)The Hopper collects items from inventories or in-world into its eighteen internal storage slots, preferring to fill up existing stacks first."
},
{
"type": "text",
"text": "Vertical collection range is up to about 2.5 blocks above, or when placed upwards about 3 blocks below. The horizontal area is by default 1 (only directly above/below), and can be increased up to 4 in each direction. You can do this with the topmost slider in the GUI (the symbols shall represent a cross-section of the collection area).$(br)Unless items fall directly into the funnel, the hopper will wait until they $(t:... so called 'pickup delay'. The hopper actually waits a little bit longer)can be picked$() up, giving you precedence."
},
{
"type": "text",
"text": "$(l)Insertion$()$(br)From its internal storage the hopper frequently transfers item stacks to inventories or devices it is directed to, by default one item at a time. It tries to replenish existing stacks before filling empty slots. In case the item in the currently selected slot (marked in the GUI with a red frame) cannot be inserted, the next possible slot will be selected (round robin).$(br)The slider in the middle of the GUI (icons shall represent a"
},
{
"type": "text",
"text": "dog and a snail) can be used enforce a delay between 0.5s and 10s after inserting. When the delay has not expired yet, a yellow LED above the slider is blinking.$(br)Clicking at the bottom slider (labeled with one to five dots), the insertion stack size can be set between 1 to 32 items at a time. Only the currently selected stack is inserted, even if it contains less items than the configured count."
},
{
"type": "text",
"text": "$(l)Redstone Controls$()$(br)In the lower right area of the GUI, there is a red LED (with arrow) and two circuit elements wired up. The LED is lit when the device sees an external Redstone signal, and can also be used as test-trigger button. Connected to that input are an analog inverter, followed by a trigger control logic.$(br)By default the curve shown for the inversion control is going down, meaning that this control $(t:Input 0..15 -> output 15..0)inverts the signal$(). Click it to change this to 'not inverted'."
},
{
"type": "text",
"text": "Now the hopper will operate only $(o)when$() a Redstone signal is applied.$(br)The trigger control specifies weather the hopper operates $(o)continuously$() or $(o)(edge detection triggered) pulse$() mode. Continuous means 'Operate as long as the input is active', pulse means 'Insert only one time when the Redstone signal changes from OFF to ON'."
},
{
"type": "text",
"text": "$(l)Details$()$(br)$(li)The insertion stack size slider also defines how many items are drawn from the inventory above.$(li)The Factory Hopper does $(t:Unneeded server CPU waste)not insert$() into opposed Hoppers."
}
]
}

View file

@ -0,0 +1,34 @@
{
"name": "Factory Block Placer",
"icon": "engineersdecor:factory_placer",
"category": "automation",
"sortnum": 6030,
"pages": [
{
"type": "spotlight",
"title": "Factory Block Placer",
"item": "engineersdecor:factory_placer",
"text": "A simple automation device that places blocks or plants in front of it.$(br)18 internal storage slots hold the items to be placed, where the currently selected slot is marked with a red frame in the GUI. If the current item cannot be placed, or if that slot is empty, then the next slot is selected - e.g. when the soil"
},
{
"type": "text",
"text": "underneath is not suitable for a plant. $(t:... like Pufferfish, food, or tools. It also spits items out that are causing errors when being placed.)Items, which cannot be placed at all$(), are simply spat out to keep the storage slots clean.$(br)You can place the device in all directions, where sneak-clicking flips the placement direction.$(br2)By default, the device places items directly when it can, as long as it is not disabled with a Redstone signal. This can be tuned using the Redstone controls in the bottom right of"
},
{
"type": "text",
"text": "the GUI: There is an indicator LED for external signals, an inverter, and finally a trigger control. The indicator is lit when an external signal is currently applied, which is helpful for trouble-shooting. This signal is fed into the inversion control. By default the curve shown there is going down, meaning that this control $(t:Input 0..15 -> output 15..0)inverts the signal$(). Click it to change this to 'not inverted'. Now the placer will operate only $(o)when$() a Redstone signal is applied."
},
{
"type": "text",
"text": "Finally, the trigger control decides if the device shall work continuously, or only when the Redstone signal changes (edge detection trigger). By default this is set to $(o)continuous$(). Clicking changes this to $(o)triggered$(), means 'try to place only the moment when the signal goes off->on (not inverted) or on->off (inverted)'.$(br2)$(l)Spike Planting$()$(br)Normally blocks are placed in front of the placer. Plants can also be planted through the"
},
{
"type": "text",
"text": "soil, e.g. from underneath. This can be useful for automation (if there is no space at the surface), or also for cosmetic reasons.$(br2)A typical tree farm automation setup is to spike plant saplings through the ground, chop the grown trees with the $(o)Small Tree Cutter$(), and collect the dropped items using $(o)Factory Hoppers$(), also located below ground level. The saplings can be fed back into the placer, other drops stored"
},
{
"type": "text",
"text": "or disposed in a $(o)Small Waste Incinerator$(). Item sorting either conventionally or with an $(o)IE Item Router$()."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Small Block Breaker",
"icon": "engineersdecor:small_block_breaker",
"category": "automation",
"sortnum": 6040,
"pages": [
{
"type": "spotlight",
"title": "Small Block Breaker",
"item": "engineersdecor:small_block_breaker",
"text": "Destroys blocks in front of it using two counter-rotating, $(t:... description see Engineer's Tools mod ...)REDIA covered$() core drills.$(br2)It does not collect or store the dropped blocks, and needs more or less time depending on the hardness of the block to break. Providing RF power considerably accelerates that process."
},
{
"type": "text",
"text": "The dropped items are the same as if the block would be harvested with a pickaxe, axe, or shovel (without silk touch effect, fortune 0, etc).$(br)Applying a Redstone signal stops the breaker.$(br)You can place the device in horizontal directions, where sneak-clicking flips the placement direction. $(br2)$(o)[notice: The pack configuration may enforce that the device needs power. You can see that it is working when the drills rotate]$()"
}
]
}

View file

@ -0,0 +1,26 @@
{
"name": "Small Milking Machine",
"icon": "engineersdecor:small_milking_machine",
"category": "automation",
"sortnum": 6070,
"pages": [
{
"type": "spotlight",
"title": "Milking Machine",
"item": "engineersdecor:small_milking_machine",
"text": "A device dedicated to gather milk from cows in an animal welfare manner.$(br)As a modern milking robot, the decision when to milk is left to the individual cows, which occasionally pass by for 'unloading'. They only do this however when there is enough space in the cattle pen, and when it is not too crowded."
},
{
"type": "text",
"text": "The area in which cows go to the machine is 7x7 blocks in front of the milker (font is where the arm is located). Each milking process, the device fetches one bucket and stores the liquid in its internal tank. From there it can be retrieved with buckets or fluid transfer (the latter only if milk exists as fluid). Also automated item transfer is possible using $(o)Buckets$() (or compatible bottles):$(br)Place a $(o)Crate$() or $(o)Chest$() with empty buckets behind or below the machine."
},
{
"type": "text",
"text": "It will then draw these empty buckets in, and place filled buckets back into the crate, preferring to take from the back and inserting to the bottom.$(br)"
},
{
"type": "text",
"text": "Important notice: Mod packers can configure that this machine needs power, so you may have to provide that, too. $(o)(I don't have implemented a visual indication yet, greetings, the lazy mod author)$()"
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Small Tree Cutter",
"icon": "engineersdecor:small_tree_cutter",
"category": "automation",
"sortnum": 6050,
"pages": [
{
"type": "spotlight",
"title": "Small Tree Cutter",
"item": "engineersdecor:small_tree_cutter",
"text": "A minimalistic circular saw with protection frame and wood sensor, which automatically cuts trees including leaves.$(br2)It does not collect or store the dropped wood or fruits, and requires about one minute when running from the internal passive environmental Redstone generator. By providing RF"
},
{
"type": "text",
"text": "$(t:... for the sake of style please from underneath the cutter using a capacitor ...)power externally$(), this process is accelerated to about 10 seconds.$(br)You can disable the cutter by applying a Redstone signal.$(br2) $(br2) $(br2) $(br2)$(o)[notice: The pack configuration may enforce that the device needs power. You can see that it is working when the saw rotates]$()"
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Small Waste Incinerator",
"icon": "engineersdecor:small_waste_incinerator",
"category": "automation",
"sortnum": 6060,
"pages": [
{
"type": "spotlight",
"title": "Small Waste Incinerator",
"item": "engineersdecor:small_waste_incinerator",
"text": "This small device allows to dispose of superfluous items in a safe manner. Inserted materials slide down a ramp of 14 slots before being pushed into a lava chamber, where they are slowly disintegrated.$(br)The stacks will remain in the same slots as long as the topmost input slot is empty, otherwise they get pushed"
},
{
"type": "text",
"text": "forward by one slot. You can speed up the incineration process by applying RF power to any side of the device. When you break the block for relocation, the items will remain in place.$(br)To recover accidentally inserted items, open the device GUI and manually take the stack out."
}
]
}

View file

@ -0,0 +1,28 @@
{
"name": "Bricks",
"icon": "engineersdecor:clinker_brick_block",
"category": "buildingblocks",
"sortnum": 1010,
"pages": [
{
"type": "spotlight",
"title": "Clinker Bricks",
"item": "engineersdecor:clinker_brick_block",
"text": "Clinkers are very hot baked, slightly vitrified bricks, look darker than normal bricks, and have been a preferred building material for early industrial factories.$(br) ... and you may need a lot of them for building a factory. Therefore these blocks can be partially crafted from Nether Bricks, preventing to soon run out of clay."
},
{
"type": "text",
"text": "For a more seamless look, the block has varying textures depending on the positions where you place it. Clinkers are also available as Stairs, Walls, and Slabs.$(br2)If you need more texture variation, especially for rough areas of your factory, there are also craftable $(o)Stained Clinker Bricks$() to mix in."
},
{
"type": "spotlight",
"title": "Slag Bricks",
"item": "engineersdecor:slag_brick_block",
"text": "As one of the primary waste products in steel industries, slag debris was disposed on scree piles. One of the more unpopular byproducts were $(o)Slag Bricks$(), grayish and slightly porous bricks - but cheap.$(br)Similar to $(o)Clinker Bricks$(), these blocks have varying textures depending on the"
},
{
"type": "text",
"text": "position (and also have a bit more color than real slag bricks).$(br)You can also craft Stairs, Walls, and Slabs from $(o)Slag Bricks$()."
}
]
}

View file

@ -0,0 +1,28 @@
{
"name": "Concretes",
"icon": "engineersdecor:rebar_concrete",
"category": "buildingblocks",
"sortnum": 1020,
"pages": [
{
"type": "spotlight",
"title": "Rebar Concrete",
"item": "engineersdecor:rebar_concrete",
"text": "Rebar (\"REinforcing BAR\" concrete) is often used where structural integrity matters, i.e. bridges, basements, vaults, as well as ugly precast slab buildings. It consists of a thick steel wire mesh filled up with concrete. More rebar and higher quality steel the makes the composition stronger, but also more expensive. "
},
{
"type": "text",
"text": "The rebar concrete you see here is quite expensive. It $(t:...except maybe when a Draconic Core blows up)withstands explosions$() and is comparatively hard to break.$(br2)It comes with varying textures for seamless look (placement position dependent), and can also be transformed to Stairs, Walls, Slabs, and Slab Slices. The Wall shape differs from vanilla walls."
},
{
"type": "spotlight",
"title": "Gas Concrete",
"item": "engineersdecor:gas_concrete",
"text": "In contrast to $(o)Rebar Concrete$(), Gas Concrete is a lightweight and cheap building material. It is produced by aerating liquid concrete to make it foamy before casting. The mineral composition is more based on sand rather than coarse gravel."
},
{
"type": "text",
"text": "The Gas Concrete blocks have a smooth looking surface with texture variations, are fast to break, cheap to make, and have not much resistance against explosions.$(br)They are good material if you need to fill vast volumes like basement walls, tunnel walls, or floors.$(br)Walls, Stairs, Slabs, as well as Slab Slices can be crafted from Gas Concrete, too."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Gates and Doors",
"icon": "engineersdecor:steel_mesh_fence_gate",
"category": "buildingblocks",
"sortnum": 1060,
"pages": [
{
"type": "spotlight",
"title": "Steel Mesh Fence Gate",
"item": "engineersdecor:steel_mesh_fence_gate",
"text": "A fence gate fitting the style of the $(o)Steel Mesh Fence$(). It can be placed one block high for normal fencing, or doubled for higher cage fences, and will form a fence door accordingly.$(br)Redstone open/close signals are accepted for the bottom segment from all sides, for the top segment only from above."
},
{
"type": "text",
"text": ""
}
]
}

View file

@ -0,0 +1,30 @@
{
"name": "Fences and Walls",
"icon": "engineersdecor:steel_mesh_fence",
"category": "buildingblocks",
"sortnum": 1050,
"pages": [
{
"type": "spotlight",
"title": "Steel Mesh Fence",
"item": "engineersdecor:steel_mesh_fence",
"text": "An industrial fence type, known from protection barriers of transformer stations, or robot enclosures.$(br2)They connect to compatible fences or walls (means the walls shown on these pages), and intentionally not to vanilla walls and fences."
},
{
"type": "text",
"text": "They also do not connect to other blocks, except if that block continues a straight line of Mesh Fences. That way you can connect the fences to building walls, but do not have to bother that fence parts may connect unexpectedly to chests or other blocks placed next to the your fence."
},
{
"type": "spotlight",
"title": "Concrete Walls",
"item": "engineersdecor:rebar_concrete_wall",
"text": "This wall type has a different look than vanilla walls, and comes also with varying textures. It connects in the same way as the $(o)Steel Mesh Fence$().$(br)$(o)Rebar Concrete$() walls are also Creeper proof."
},
{
"type": "spotlight",
"title": "Brick Walls",
"item": "engineersdecor:clinker_brick_wall",
"text": "Similar to the Concrete Walls, Brick Walls have an individual look, and connect only to compatible fences and walls."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Glass",
"icon": "engineersdecor:panzerglass_block",
"category": "buildingblocks",
"sortnum": 1030,
"pages": [
{
"type": "spotlight",
"title": "Panzer Glass",
"item": "engineersdecor:panzerglass_block",
"text": "Panzer Glass is a reinforced safety glass type, consisting of changing layers of tempered or chemically treated glass, metal meshes, organic layers, and other stuff. It is used where safety matters, e.g. in the field of personal security, or in explosion hazardous industrial areas."
},
{
"type": "text",
"text": "Similar to $(o)Rebar Concrete$(), this glass is quite expensive, comparatively hard to break, and explosion-proof.$(br)The application range reaches from enclosing critical areas like storage rooms to mob farming grounds."
}
]
}

View file

@ -0,0 +1,20 @@
{
"name": "Ladders",
"icon": "engineersdecor:treated_wood_ladder",
"category": "buildingblocks",
"sortnum": 1080,
"pages": [
{
"type": "spotlight",
"title": "Wooden Ladders",
"item": "engineersdecor:treated_wood_ladder",
"text": "Solid, weather-proof ladders, placed and used like vanilla ladders.$(br2)You move faster when looking straight up or down while climbing."
},
{
"type": "spotlight",
"title": "Metal Ladders",
"item": "engineersdecor:metal_rung_ladder",
"text": "Solid metal ladders, sometimes a bit rusty.$(br2)Used and placed the same way as the wooden ladders."
}
]
}

View file

@ -0,0 +1,19 @@
{
"name": "Slab Slices",
"icon": "engineersdecor:halfslab_rebar_concrete",
"category": "buildingblocks",
"sortnum": 1040,
"pages": [
{
"type": "spotlight",
"title": "Slab Slices",
"item": "engineersdecor:halfslab_rebar_concrete",
"text": "For various blocks in this mod there are very thin horizontal slabs available.$(br2)While a normal slab fills half a block, you need eight of these thin slices for a full cube. They can be interesting for detailing roofs, floors, or making ramps."
},
{
"title": "Placement & Pickup",
"type": "text",
"text": "You place the slices by clicking on the top or bottom faces of the blocks where you want to place them. Slice blocks will grow accordingly.$(br2)When you break a block of slices, the singulated parts will be dropped. Alternatively you can left-click a slice block while holding a slice in your hand to peel one layer off. This only works while looking almost straight down or up."
}
]
}

View file

@ -0,0 +1,20 @@
{
"name": "Windows",
"icon": "engineersdecor:treated_wood_window",
"category": "buildingblocks",
"sortnum": 1070,
"pages": [
{
"type": "spotlight",
"title": "Window Types",
"item": "engineersdecor:treated_wood_window",
"text": "These 3D framed windows have slightly stained panes, and can be placed horizontally or vertically.$(br)Other than vanilla glass panes, windows have no corner pieces, and the window glass will remain intact when you break the block (no $(o)Silk Touch$() needed)."
},
{
"type": "spotlight",
"title": "Placement",
"item": "engineersdecor:steel_framed_window",
"text": "To place a window in the ceiling or the floor, you have to look almost straight up or down. This makes it easier to place windows in walls without the need of scaffolding (or accidentally placing them horizontally). When you place a window next to another one, the same orientation will be used for similar reasons."
}
]
}

View file

@ -0,0 +1,32 @@
{
"name": "Furniture",
"icon": "engineersdecor:treated_wood_table",
"category": "cosmetic",
"sortnum": 3010,
"pages": [
{
"type": "spotlight",
"title": "Steel table",
"item": "engineersdecor:steel_table",
"text": "A metal table as used in some manual assembly lines or clean rooms. The grated top face allows dust or air streams to pass through.$(br)Depending on your factory setup they can also be used as decorative supports for conveyor belts."
},
{
"type": "spotlight",
"title": "Wood tables",
"item": "engineersdecor:treated_wood_table",
"text": "More for the Engineer's home rather than a factory, you can craft a normal four-leg table and a side table to place decorative stuff on. Not much more to say - except that they are of corse weather-proof because it's treated wood."
},
{
"type": "spotlight",
"title": "Wood Stool",
"item": "engineersdecor:treated_wood_stool",
"text": "Let's face it: Comfy armchairs are lame. Members of the working population sit on plain stools without cushion, where they can jump up any time and race to their next task.$(br)For whatever reason however, this stool seems to be comfy enough that mobs sometimes sit down (so can you, too). Villagers don't, probably they are Über-Workers."
},
{
"type": "spotlight",
"title": "Wood Window Sills",
"item": "engineersdecor:treated_wood_windowsill",
"text": "Sills make nice accents on plain walls. You can craft two types of windowsill, a small one and a board sill. Latter can cary a flower pot if you like."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Signs",
"icon": "engineersdecor:sign_hotwire",
"category": "cosmetic",
"sortnum": 3020,
"pages": [
{
"type": "spotlight",
"title": "Signs",
"item": "engineersdecor:sign_hotwire",
"text": "You can craft some sign plates that can be attached to walls, and shall help people not loosing their orientation in larger factories. Similarly, there are signs which are simply placed for the sake of health and safety. E.g. do not forget to place a Hot Wire warning sign close to HV wire cables. If someone gets hurt you'll be responible otherwise."
},
{
"type": "text",
"text": "Also Exit Signs over the doors are helpful for the next fire drill."
}
]
}

View file

@ -0,0 +1,36 @@
{
"name": "Treated Wood Crafting Table",
"icon": "engineersdecor:treated_wood_crafting_table",
"category": "crafting",
"sortnum": 5010,
"pages": [
{
"type": "spotlight",
"title": "Crafting Table",
"item": "engineersdecor:treated_wood_crafting_table",
"text": "This engineering themed workbench allows manual 3x3 crafting. It comes with some convenience tweaks, which are not visible at the first look. These features will be explained on the next pages."
},
{
"title": "Storage",
"type": "text",
"text": "There are eight storage slots for frequently used materials at the left side of the crafting grid.$(br)All items remain in the table when you break it, and their positions are restored when you place it again. However, the items are dropped when the table is destroyed in a explosion.$(br)Items that are placed in the crafting grid are also visible on the top face of the block (outside the GUI, in-world)."
},
{
"title": "Crafting History",
"type": "text",
"text": "The $(o)up/down$() arrow buttons at the right side of the crafting grid allow you to quickly select recipes that you have recently used. The $(o)cross$() button clears the selection and moves already placed ingredients back into your inventory.$(br)Placement and crafting result will be displayed dark shaded. When you have found the right recipe click the result slot once, so that the items are automatically placed in the"
},
{
"type": "text",
"text": "crafting grid (exactly where you placed them before).$(br)If you do not have the exact ingredients in your inventory, replacements will be searched and placed instead (e.g. Spruce Planks instead of Oak Planks for a recipe that just needs any planks).$(br)Only one item of each ingredient is placed when clicking the result slot, no matter if you have crafted more the last time. You can easily increase the stack sizes (read section $(o)Item Transfer Tweaks$())."
},
{
"type": "text",
"text": "$(l)Mouse Wheel:$() You can use the mouse wheel while hovering the result slot to quickly increase or decrease the crafting grid stacks. Normal increment is 1, while holding $(o)SHIFT$() 2, $(o)CTRL$() 4, and $(o)SHIFT-CTRL$() 8. Stacks in your own inventory will be used up first (from the smallest to the largest stack to keep the inventory clean). Then the storage slots will be accessed. Items will always be placed back in your inventory, filling up existing stacks first."
},
{
"type": "text",
"text": "$(br2)$(l)Storage Quick Move:$() When the crafting grid is empty, you can quickly move stacks from or to the storage slots by $(o)SHIFT-clicking$().$(br2)$(l)Quick Move Buttons:$() You can enable small arrow buttons in the Mod (client) config. They are disabled by default to keep the GUI simple and clean."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Labeled Crate",
"icon": "engineersdecor:labeled_crate",
"category": "crafting",
"sortnum": 5020,
"pages": [
{
"type": "spotlight",
"title": "Labeled Crate",
"item": "engineersdecor:labeled_crate",
"text": "A high capacity storage crate with space for a custom label at the front.$(br2)In addition to the 54 inventory slots, one slot at the bottom right can be used to define the object shown in the built-in Item Frame."
},
{
"type": "text",
"text": "$(o)$(l)Quick Move All$()$(br)When using Quick-Move-All (aka shift-ctrl-left-click) on a slot for moving all identical items between the crate storage and the player inventory, the GUI will fill up existing stacks, then stacks are moved into the player inventory, and as last option into the hotbar."
}
]
}

View file

@ -0,0 +1,34 @@
{
"name": "Small Electrical Furnace",
"icon": "engineersdecor:small_electrical_furnace",
"category": "crafting",
"sortnum": 5040,
"pages": [
{
"type": "spotlight",
"title": "Electrical Furnace",
"item": "engineersdecor:small_electrical_furnace",
"text": "An RF electrically operated pass-through kiln, suitable for automated manufacturing lines. Like the $(o)Small Lab Furnace$(), it has three input FiFo slots (internal hoppers) for smelting or cooking ingredients, three output Fifo slots, as well as one auxiliary slot for storage. There are no fuel slots.$(br)The internal FiFo pipeline"
},
{
"type": "text",
"text": "transports materials as whole stacks into the processing chamber. Smelted stacks are automatically inserted into the inventory at the output side (side marked orange; chests, conveyors, etc).$(br)Power can be provided at all sides of the device.$(br)If an item is inserted that the furnace cannot process, it will be by-passed from the input to the output FiFo, instead of blocking the furnace."
},
{
"type": "text",
"text": "To get information weather the furnace is currently working and fed, attach a $(o)Redstone Probe Connector$() (or $(o)Redstone Comparator$()). If all slots in the input FiFo are empty or the furnace is unpowered, then the output is zero. For each non-empty input slot the power increases by 5 (if powered that is).$(br)If you need to relocate the device, you can break it with a pick. Items will remain in place."
},
{
"type": "text",
"text": "$(l)Speed override switch$()$(br)A four-position switch in the bottom right area of the GUI allows to alter the processing speed of the furnace. Default is position 1 (normal). At high power expenses, you can alter this: $(br)$(li)Position 0: OFF$(li)Position 1: x1.0 -> RF x1$(li)Position 2: x1.5 -> RF x2$(li)Position 3: x2.0 -> RF x4$(br2)(Positions 0..4 are down, left, top, right)."
},
{
"type": "text",
"text": "$(l)Automatic feeding support$()$(br)Placing a Hopper or Factory Hopper into the auxiliary slot at the bottom left of the GUI allows to automatically draw items from inventories at the input side (marked blue). The feeding mechanism will operate only when the first input FiFo slot is empty.$(br)$(o)Side note: The furnace passes stacks that it cannot process directly to the output, so it does not get stuck when some unsmeltable items are pulled in.$()"
},
{
"type": "text",
"text": ""
}
]
}

View file

@ -0,0 +1,26 @@
{
"name": "Small Laboratory Furnace",
"icon": "engineersdecor:small_lab_furnace",
"category": "crafting",
"sortnum": 5030,
"pages": [
{
"type": "spotlight",
"title": "Laboratory Furnace",
"item": "engineersdecor:small_lab_furnace",
"text": "Various manual kilns are used in industries for prototyping, preparing materials or alloys for further processing or analysis, and also to $(t:[believe me, I saw that with me own eyes])make pizza$().$(br)This Laboratory Furnace can be crafted early as a fuel efficient and fast alternative to the cobblestone furnace."
},
{
"type": "text",
"text": "As shown in the GUI, it has additional hopper slots (FiFo slots) for the fuel input, the smelting/cooking input, and the output. Items are transported one-by-one from the left to the right. Hence, three stacks can be processed before you need to refill and extract (you get the smelting XP when doing this by hand).$(br)The two auxiliary slots at the bottom-right can be used as general purpose storage (e.g. for coal reserves), but also to enable additional features (read on)."
},
{
"type": "text",
"text": "When you break the furnace to relocate it or for putting it in your inventory, all items inside stay in place.$(br)Item transfer input for fuel is at the sides, smelting input at the top, and the output and bucket extraction at the bottom (same as cobblestone furnace).$(br2)The comparator output reflects number of $(o)smelting input slots$() that are not empty (0,5,10,15). Also if there is no $(o)fuel$() left, the comparator output will be also zero."
},
{
"type": "text",
"text": "$(l)RF power speed-up:$() When putting an $(o)$(t:Immersive Engineering)IE$() $(o)External Heater$() into one ot the two auxiliary slots and provide RF power to the Lab Furnace, it processes $(t:Configurable, best to try it out for the pack you are playing)much faster$()."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Mineral Melting Furnace",
"icon": "engineersdecor:small_mineral_smelter",
"category": "crafting",
"sortnum": 5050,
"pages": [
{
"type": "spotlight",
"title": "Mineral Melting Furnace",
"item": "engineersdecor:small_mineral_smelter",
"text": "A small, highly insulated, high temperature furnace, which can be used to liquify stone-like materials (preferably Diorite). The process takes a moderate amount of RF energy and time. When inserting a block, either manually or automatically, it will be heated up for a while, then decompose to $(o)Magma Stone$(), and finally liquefy to $(o)Lava$()."
},
{
"type": "text",
"text": "If you cut off the RF power to the device, or disable it with a Redstone signal, $(o)Lava$() will cool down and re-crystallise to $(o)Magma Stone$(), and then to $(o)Obsidian$().$(br)To retrieve blocks from the melter, $(t:... careful, don't burn your hands)right click it$() or use extraction devices (like e.g. Hoppers). Lava extraction can be done using a bucket or automated fluid transfer.$(br)Use a $(o)Redstone Comparator$() to get an $(t:FSO=Full Scale Output, means values are scaled from 0 to 15)FSO$() indication of the current process phase $(t:0, 5, 10, and 15)(cold, hot, magma, lava)$()."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Passive Fluid Accumulator",
"icon": "engineersdecor:passive_fluid_accumulator",
"category": "fluidics",
"sortnum": 7040,
"pages": [
{
"type": "spotlight",
"title": "Fluid Accumulator",
"item": "engineersdecor:passive_fluid_accumulator",
"text": "This passive collector is useful to drain multiple tanks with one pump. It is basically an empty liquid container with one outlet connector for a suction pump, as well as five inlets for adjacent tanks.$(br)When the pump drains the Fluid Accumulator, the connected tanks will be drained in turn."
},
{
"type": "text",
"text": "The Fluid Accumulator supports pressurised (\"high speed\") fluid transfer of $(o)Immersive Engineering$() pumps, and can drain tanks very quickly. Note that the initial flow rate is low, because the container volume needs to be filled up first by the pump vacuum.$(br2)To place the device, click on the input side of the pump (the outlet is on the face you click). Shift-click placement flips the placement direction."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Fluid Collection Funnel",
"icon": "engineersdecor:small_fluid_funnel",
"category": "fluidics",
"sortnum": 7050,
"pages": [
{
"type": "spotlight",
"title": "Fluid Collection Funnel",
"item": "engineersdecor:small_fluid_funnel",
"text": "This device consists of a grating at the top, a funnel, and a small tank. Placed in the floor of a factory, it provides additional safety by collecting spilled liquids like Diesel, Petrol/Gazoline, Creosote, and other hazardous fluids. Small gauges on the sides indicate the tank fill level. The tank material can withstand hot liquids like lava."
},
{
"type": "text",
"text": "Outlets are at the bottom and the sides, where there is a slow gravity fluid transfer at the bottom outlet. Using a comparator you can determine the fill level (0 empty, 15 full).$(br)When collecting flowing fluids, $(t:To prevent wasting server performance, the device has a tendency -with random reset- to collect source blocks around the last collected location.)the liquid is traced back to its next topmost source block$(), which will be removed.$(br)Digging down next to a Nether lava lake and placing a funnel, a 'crater' of flowing lava will be slowly formed. Also long 'lavafalls' can be removed by placing a funnel underneath."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Fluid Pipe Check Valve",
"icon": "engineersdecor:straight_pipe_valve",
"category": "fluidics",
"sortnum": 7010,
"pages": [
{
"type": "spotlight",
"title": "Fluid Check Valve",
"item": "engineersdecor:straight_pipe_valve",
"text": "This check valve contains a prestressed spring plate that can be pushed from the back, but not from the front face. Therefore it allows liquids to pass through only in one direction.$(br)Its main purpose is to prevent backflows in fluid pipe systems."
},
{
"type": "text",
"text": "The valve can be inserted between $(o)Fluid Pipes$(), as well as directly to fluid inputs or outputs of devices. The yellow arrow marks the flow direction.$(br2)To place the valve, click on the face it shall be directed to. Sneak-click if you need the opposite flow direction (e.g. when clicking at a fluid output face). Maximum flow rate is $(o)$(t:The value is configurable and may vary)1000mB per tick$()."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Redstone Fluid Valve",
"icon": "engineersdecor:straight_pipe_valve_redstone",
"category": "fluidics",
"sortnum": 7020,
"pages": [
{
"type": "spotlight",
"title": "Redstone Fluid Valve",
"item": "engineersdecor:straight_pipe_valve_redstone",
"text": "Similar to $(o)Fluid Pipe Check Valves$(), $(o)Redstone Fluid Valves$() allow liquids to pass through only in the forward direction. An additional redstone-mechanical mechanism also inhibits forward flows by locking the prestressed spring plate, unless a Redstone signal is applied."
},
{
"type": "text",
"text": "This valve type is useful if you need to enable or disable fluid replenishments of devices, or e.g. if you like to switch between process fluids in an automated system."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Redstone Analog Fluid Valve",
"icon": "engineersdecor:straight_pipe_valve_redstone_analog",
"category": "fluidics",
"sortnum": 7030,
"pages": [
{
"type": "spotlight",
"title": "Analog Fluid Valve",
"item": "engineersdecor:straight_pipe_valve_redstone_analog",
"text": "$(o)Redstone Analog Fluid Valves$() are, like $(o)Redstone Fluid Valve$(), used to control allocation and distribution in pipe systems.$(br2)Analog valves can, in addition to switching valves, limited the flow rate depending on the Redstone signal strength."
},
{
"type": "text",
"text": "Possible uses cases are tuning the processing speed of a machine crafting with fluids, prioritising fluid paths, or defining the concentration of a mixture.$(br)Redstone signal strength 0 blocks all flows, 15 opens the valve completely $(t:Configurable, may vary)(max flow rate 1000mB/t)$(). Values from 1 to 14 open the valve in $(t:Configurable, may vary)20mB/t steps (20 to 280)$().$(br)Placement rules are like the $(o)Fluid Pipe Check Valve$()."
}
]
}

View file

@ -0,0 +1,20 @@
{
"name": "Inset Lights",
"icon": "engineersdecor:iron_inset_light",
"category": "illumination",
"sortnum": 4010,
"pages": [
{
"type": "spotlight",
"title": "Inset Spotlight",
"item": "engineersdecor:iron_inset_light",
"text": "This passive light source can be placed on ceilings or walls, and comes in handy where proper electrical illumination is not an option. For instance, stairways, narrow corridors, small inspection chambers, as well as air shafts are such problematic locations.$(br)Light level is 15, you will need Glowstone for crafting."
},
{
"type": "spotlight",
"title": "Floor Edge Light",
"item": "engineersdecor:iron_floor_edge_light",
"text": "Edge lights are useful for orientation, as well as for lighting up spaces between larger machines.$(br)Big machines may block the light cones of flood lights, causing dangerously dark spots (see the 'Health and Safety' handbook, chapter 'Explosion Hazzard')."
}
]
}

View file

@ -0,0 +1,26 @@
{
"name": "Small Solar Panel",
"icon": "engineersdecor:small_solar_panel",
"category": "power",
"sortnum": 8010,
"pages": [
{
"type": "spotlight",
"title": "Small Solar Panel",
"item": "engineersdecor:small_solar_panel",
"text": "Like the name suggests, this device transforms sunlight to RF power.$(br)The monocrystalline Redstone layer of the panel has an effeciency of 22%, so the output power is small.$(br)Its main application range lies in generating auxiliary power for remote places, where cabeling is too expensive or problematic."
},
{
"type": "text",
"text": "The panel has an internal capacitor with charge pump. When exposed to the sun, this capacitor will start to charge up. The power output is enabled after it is at least 20% charged, and will remain active until the capacitor is empty again. Hence, the output of the panel pulsed.$(br)To use the panel efficiently, place a capacitor or battery underneath it. To increase the total power production you need to place a whole solar field with power transfer infrastructure."
},
{
"type": "text",
"text": "Peak production is at noon. From dawn to dusk the power curve is nonlinearly rising and falling. Further efficiency factors are weather and local light conditions.$(br2)The output power over 24h is comparable to a Thermo-Electric Generator.$(br2)In summary, it is free power that also can be bumped up a bit, but you have to invest in the infrastructure, and you"
},
{
"type": "text",
"text": "need to be careful to have reserves for bad weather. For heavy machinery more reliable power sources like $(o)Diesel Generators$() are recommended."
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "Floor Gratings",
"icon": "engineersdecor:steel_floor_grating",
"category": "structural",
"sortnum": 2030,
"pages": [
{
"type": "spotlight",
"title": "Steel Floor Grating",
"item": "engineersdecor:steel_floor_grating",
"text": "Metal gratings are popular in industries, not only due the good ratio between material consumption vs carrying capacity, but also for their peculiarity to prevent dust and other particles from piling up.$(br)Hence, items fall through the $(o)Steel Floor Grating$() shown above, while you can safely"
},
{
"type": "text",
"text": "stand on it.$(br)In case this helps your contraption: The items always fall through the centre of the grating, and are slowed down if they are too fast."
}
]
}

View file

@ -0,0 +1,20 @@
{
"name": "Steel Supports",
"icon": "engineersdecor:thick_steel_pole_head",
"category": "structural",
"sortnum": 2020,
"pages": [
{
"type": "spotlight",
"title": "Steel Poles",
"item": "engineersdecor:thick_steel_pole",
"text": "Hollow steel poles (like the one shown above) have an 'O' cross section to save weight and material whilst providing a good structural integrity.$(br)There is a thick and a thin variant, depending on your needs. Unlike fence posts, they do not connect to blocks at the side, and can be placed vertically or horizontally."
},
{
"type": "spotlight",
"title": "Double-T Support",
"item": "engineersdecor:steel_double_t_support",
"text": "Named by the look of its cross section (two 'T's), this is a commonly used tradeoff between material/weight and maximum load.$(br)Double-T supports are placed only horizontally (top aligned), connect to adjacent Double-T supports, and also to $(o)Steel Poles$() below."
}
]
}

View file

@ -0,0 +1,20 @@
{
"name": "Wooden Supports",
"icon": "engineersdecor:treated_wood_pole_support",
"category": "structural",
"sortnum": 2010,
"pages": [
{
"type": "spotlight",
"title": "Treated Wood Pole",
"item": "engineersdecor:treated_wood_pole",
"text": "Wooden poles are straight decorative supports that can be placed in all directions. They are slightly thicker than fence posts and do not connect to blocks at the sides. The orientation is defined by the face that you click when placing the block."
},
{
"type": "spotlight",
"title": "Pole Head",
"item": "engineersdecor:treated_wood_pole_head",
"text": "Pole heads form nice looking end pieces for poles. There are two variants: A small one and a big one, where ladder suggests heavy loads, and does not fit everywhere (simply try out if it does). Pole heads will be automatically directed towards placed poles, except you sneak-click, which flips the placement direction."
}
]
}

View file

@ -281,7 +281,7 @@
},
{
"conditions": [
{ "type": "engineersdecor:grc", "missing": ["immersiveengineering:stone_decoration"] }
{ "type": "engineersdecor:optional", "missing": ["immersiveengineering:stone_decoration"] }
],
"ingredient": [
{ "item": "minecraft:concrete", "data": 32767 },

View file

@ -1,5 +1,5 @@
{
"conditions": {
"grc": "wile.engineersdecor.detail.RecipeCondModSpecific"
"optional": "wile.engineersdecor.detail.RecipeCondModSpecific"
}
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:factory_dropper",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:factory_hopper",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:factory_placer",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:gas_concrete",
"missing": ["immersiveengineering:stone_decoration"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:iron_inset_light",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:labeled_crate",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:metal_rung_ladder",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:metal_rung_steps",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:panzerglass_block",
"missing": ["immersiveengineering:stone_decoration"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:passive_fluid_accumulator",
"required": ["engineersdecor:straight_pipe_valve"],
"missing": ["immersiveengineering:material"]

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:rebar_concrete",
"missing": ["immersiveengineering:stone_decoration"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:sign_hotwire",
"missing": ["immersiveengineering:stone_decoration"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:clinker_brick_block",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_block_breaker",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_electrical_furnace",
"required": ["engineersdecor:small_lab_furnace"],
"missing": ["immersiveengineering:material"]

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_fluid_funnel",
"missing": ["immersiveengineering:metal_device1"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_lab_furnace",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_milking_machine",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_mineral_smelter",
"required": ["engineersdecor:panzerglass_block"],
"missing": ["immersiveengineering:metal_device1"]

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_solar_panel",
"missing": ["immersiveengineering:metal_device1"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_tree_cutter",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:small_waste_incinerator",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:steel_framed_window",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:straight_pipe_valve",
"required": ["engineersdecor:thick_steel_pole"],
"missing": ["immersiveengineering:material"]

View file

@ -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"]

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:thin_steel_pole",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:treated_wood_crafting_table",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:treated_wood_ladder",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:treated_wood_pole",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:treated_wood_side_table",
"missing": ["immersiveengineering:material"],
"required": ["engineersdecor:treated_wood_pole"]

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:treated_wood_stool",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:treated_wood_table",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:treated_wood_window",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:treated_wood_windowsill",
"missing": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:concrete_wall",
"required": ["immersiveengineering:stone_decoration"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:factory_dropper",
"required": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:factory_hopper",
"required": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:factory_placer",
"required": ["immersiveengineering:material"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:gas_concrete",
"required": ["immersiveengineering:stone_decoration"]
}

View file

@ -1,7 +1,7 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"type": "engineersdecor:optional",
"result": "engineersdecor:halfslab_concrete",
"required": ["immersiveengineering:stone_decoration"]
}

Some files were not shown because too many files have changed in this diff Show more