v1.0.14-mc1.12.2 release merge.

This commit is contained in:
stfwi 2019-10-25 18:41:38 +02:00
commit b0673e4176
165 changed files with 4131 additions and 424 deletions

1
.gitignore vendored
View file

@ -23,6 +23,7 @@
/dev
/dist
/tmp
tmp
bin
build
desktop.ini

View file

@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G
version_minecraft=1.12.2
version_forge=14.23.5.2768
version_jei=4.10.0.198
version_engineersdecor=1.0.13
version_engineersdecor=1.0.14

View file

@ -1,6 +1,8 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.14": "[R] Release based on v1.0.14-b1. Release-to-release changes: * Factory Hopper added. * Small Waste Incinerator improved. * Lang updates. * Recipe fixes.",
"1.0.14-b1": "[A] Factory Hopper added (configurable hopper and item collector).\n[M] Small Waste Incinerator Fifo shifting improved.\n[M] Lang file zh_cn updated (scikirbypoke, PR#53).\n[F] Fixed conditional recipe constant for redstone pipe valve (thx @albert_ac).",
"1.0.13": "[R] Release based on v1.0.13-b2. Release-to-release changes: * Small Tree Cutter device added. * Small Solar Panel added. * Steel Mesh Fence added. * Broad Window Sill added.",
"1.0.13-b2": "[A] Added Steel Mesh Fence.\n[A] Added Broad Window Sill.\n[A] Small Tree Cutter can chop Dynamic Trees, chops at tree trunk radius 7 or higher.",
"1.0.13-b1": "[A] Added Small Solar Panel.\n[A] Added Small Tree Cutter.",
@ -60,7 +62,7 @@
"1.0.0-b1": "[A] Initial structure.\n[A] Added clinker bricks and clinker brick stairs.\n[A] Added slag bricks and slag brick stairs.\n[A] Added metal rung ladder.\n[A] Added staggered metal steps ladder.\n[A] Added treated wood ladder.\n[A] Added treated wood pole.\n[A] Added treated wood table."
},
"promos": {
"1.12.2-recommended": "1.0.13",
"1.12.2-latest": "1.0.13"
"1.12.2-recommended": "1.0.14",
"1.12.2-latest": "1.0.14"
}
}

View file

@ -10,6 +10,19 @@ Mod sources for Minecraft version 1.12.2.
----
## Version history
-------------------------------------------------------------------
- v1.0.14 [R] Release based on v1.0.14-b1. Release-to-release changes:
* Factory Hopper added.
* Small Waste Incinerator improved.
* Lang updates.
* Recipe fixes.
-------------------------------------------------------------------
- v1.0.14-b1 [A] Factory Hopper added (configurable hopper and item collector).
[M] Small Waste Incinerator Fifo shifting improved.
[M] Lang file zh_cn updated (scikirbypoke, PR#53).
[F] Fixed conditional recipe constant for redstone pipe valve (thx @albert_ac).
-------------------------------------------------------------------
- v1.0.13 [R] Release based on v1.0.13-b2. Release-to-release changes:
* Small Tree Cutter device added.

View file

@ -12,27 +12,58 @@
*/
package wile.engineersdecor;
import wile.engineersdecor.detail.*;
import wile.engineersdecor.blocks.*;
import wile.engineersdecor.items.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nonnull;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import javax.annotation.Nonnull;
import wile.engineersdecor.blocks.BlockDecor;
import wile.engineersdecor.blocks.BlockDecorChair;
import wile.engineersdecor.blocks.BlockDecorCraftingTable;
import wile.engineersdecor.blocks.BlockDecorDirected;
import wile.engineersdecor.blocks.BlockDecorDropper;
import wile.engineersdecor.blocks.BlockDecorFence;
import wile.engineersdecor.blocks.BlockDecorFloorGrating;
import wile.engineersdecor.blocks.BlockDecorFull;
import wile.engineersdecor.blocks.BlockDecorFurnace;
import wile.engineersdecor.blocks.BlockDecorFurnaceElectrical;
import wile.engineersdecor.blocks.BlockDecorGlassBlock;
import wile.engineersdecor.blocks.BlockDecorHalfSlab;
import wile.engineersdecor.blocks.BlockDecorHopper;
import wile.engineersdecor.blocks.BlockDecorHorizontalSupport;
import wile.engineersdecor.blocks.BlockDecorLadder;
import wile.engineersdecor.blocks.BlockDecorMineralSmelter;
import wile.engineersdecor.blocks.BlockDecorPassiveFluidAccumulator;
import wile.engineersdecor.blocks.BlockDecorPipeValve;
import wile.engineersdecor.blocks.BlockDecorSlab;
import wile.engineersdecor.blocks.BlockDecorSolarPanel;
import wile.engineersdecor.blocks.BlockDecorStairs;
import wile.engineersdecor.blocks.BlockDecorStraightPole;
import wile.engineersdecor.blocks.BlockDecorTest;
import wile.engineersdecor.blocks.BlockDecorTreeCutter;
import wile.engineersdecor.blocks.BlockDecorWall;
import wile.engineersdecor.blocks.BlockDecorWasteIncinerator;
import wile.engineersdecor.blocks.BlockDecorWindow;
import wile.engineersdecor.blocks.BlockDecorWindowSill;
import wile.engineersdecor.detail.ModAuxiliaries;
import wile.engineersdecor.detail.ModConfig;
import wile.engineersdecor.detail.ModTesrs;
import wile.engineersdecor.items.ItemDecor;
@SuppressWarnings("unused")
public class ModContent
@ -106,6 +137,13 @@ public class ModContent
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,15)
);
public static final BlockDecorHopper FACTORY_HOPPER = new BlockDecorHopper(
"factory_hopper",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED,
Material.IRON, 1f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(2,2,2, 14,14,14)
);
public static final BlockDecorWasteIncinerator SMALL_WASTE_INCINERATOR = new BlockDecorWasteIncinerator(
"small_waste_incinerator",
BlockDecor.CFG_DEFAULT|BlockDecor.CFG_ELECTRICAL,
@ -272,11 +310,18 @@ public class ModContent
public static final BlockDecorDirected INSET_LIGHT_IRON = new BlockDecorDirected(
"iron_inset_light",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(14<<BlockDecor.CFG_LIGHT_VALUE_SHIFT),
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(15<<BlockDecor.CFG_LIGHT_VALUE_SHIFT),
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(5.2,5.2,15.7, 10.8,10.8,16.0)
);
public static final BlockDecorDirected FLOOR_EDGE_LIGHT_IRON = new BlockDecorDirected(
"iron_floor_edge_light",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_HORIZIONTAL|(15<<BlockDecor.CFG_LIGHT_VALUE_SHIFT),
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(5,0,0, 11,2,1)
);
public static final BlockDecor STEEL_TABLE = new BlockDecor(
"steel_table",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT,
@ -442,19 +487,18 @@ public class ModContent
private static final TileEntityRegistrationData FACTORY_DROPPER_TEI = new TileEntityRegistrationData(
BlockDecorDropper.BTileEntity.class, "te_factory_dropper"
);
private static final TileEntityRegistrationData FACTORY_HOPPER_TEI = new TileEntityRegistrationData(
BlockDecorHopper.BTileEntity.class, "te_factory_hopper"
);
private static final TileEntityRegistrationData SMALL_MINERAL_SMELTER_TEI = new TileEntityRegistrationData(
BlockDecorMineralSmelter.BTileEntity.class, "te_small_mineral_smelter"
);
private static final TileEntityRegistrationData SMALL_SOLAR_PANEL_TEI = new TileEntityRegistrationData(
BlockDecorSolarPanel.BTileEntity.class, "te_small_solar_panel"
);
private static final TileEntityRegistrationData SMALL_TREE_CUTTER_TEI = new TileEntityRegistrationData(
BlockDecorTreeCutter.BTileEntity.class, "te_small_tree_cutter"
);
private static final TileEntityRegistrationData TEST_BLOCK_TEI = new TileEntityRegistrationData(
BlockDecorTest.BTileEntity.class, "te_testblock"
);
@ -467,6 +511,7 @@ public class ModContent
TREATED_WOOD_CRAFTING_TABLE, TREATED_WOOD_CRAFTING_TABLE_TEI,
SMALL_LAB_FURNACE, SMALL_LAB_FURNACE_TEI,
SMALL_ELECTRICAL_FURNACE, SMALL_ELECTRICAL_FURNACE_TEI,
FACTORY_HOPPER,FACTORY_HOPPER_TEI,
FACTORY_DROPPER, FACTORY_DROPPER_TEI,
SMALL_WASTE_INCINERATOR, WASTE_INCINERATOR_TEI,
STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, STRAIGHT_PIPE_VALVE_TEI,
@ -526,7 +571,8 @@ public class ModContent
SIGN_MINDSTEP,
PANZERGLASS_SLAB, // @todo: check if another class is needed due to is_side_visible
TREATED_WOOD_FLOOR, // @todo: check if textures need improvement
TEST_BLOCK,TEST_BLOCK_TEI
TEST_BLOCK,TEST_BLOCK_TEI,
FLOOR_EDGE_LIGHT_IRON
};
//--------------------------------------------------------------------------------------------------------------------

View file

@ -158,6 +158,7 @@ public class ModEngineersDecor
public static final int GUIID_ELECTRICAL_LAB_FURNACE = 213103;
public static final int GUIID_SMALL_WASTE_INCINERATOR = 213104;
public static final int GUIID_FACTORY_DROPPER = 213105;
public static final int GUIID_FACTORY_HOPPER = 213106;
@Override
public Object getServerGuiElement(final int guiid, final EntityPlayer player, final World world, int x, int y, int z)
@ -170,6 +171,7 @@ public class ModEngineersDecor
case GUIID_ELECTRICAL_LAB_FURNACE: return BlockDecorFurnaceElectrical.getServerGuiElement(player, world, pos, te);
case GUIID_SMALL_WASTE_INCINERATOR: return BlockDecorWasteIncinerator.getServerGuiElement(player, world, pos, te);
case GUIID_FACTORY_DROPPER: return BlockDecorDropper.getServerGuiElement(player, world, pos, te);
case GUIID_FACTORY_HOPPER: return BlockDecorHopper.getServerGuiElement(player, world, pos, te);
}
return null;
}
@ -186,6 +188,7 @@ public class ModEngineersDecor
case GUIID_ELECTRICAL_LAB_FURNACE: return BlockDecorFurnaceElectrical.getClientGuiElement(player, world, pos, te);
case GUIID_SMALL_WASTE_INCINERATOR: return BlockDecorWasteIncinerator.getClientGuiElement(player, world, pos, te);
case GUIID_FACTORY_DROPPER: return BlockDecorDropper.getClientGuiElement(player, world, pos, te);
case GUIID_FACTORY_HOPPER: return BlockDecorHopper.getClientGuiElement(player, world, pos, te);
}
return null;
}

View file

@ -4,15 +4,15 @@
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Dropper factory automation suitable.
* Dropper, factory automation suitable.
*/
package wile.engineersdecor.blocks;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.Networking;
import net.minecraft.block.state.BlockFaceShape;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.Networking;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.Block;

View file

@ -0,0 +1,873 @@
/*
* @file BlockDecorHopper.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Hopper, factory automation suitable.
*/
package wile.engineersdecor.blocks;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.*;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.Networking;
import net.minecraft.block.state.BlockFaceShape;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.block.BlockHopper;
import net.minecraft.world.World;
import net.minecraft.world.Explosion;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityHopper;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.item.*;
import net.minecraft.inventory.*;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.*;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.List;
public class BlockDecorHopper extends BlockDecorDirected
{
public BlockDecorHopper(@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); }
@Override
public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face)
{ return BlockFaceShape.SOLID; }
@Override
@SuppressWarnings("deprecation")
public boolean hasComparatorInputOverride(IBlockState state)
{ return true; }
@Override
@SuppressWarnings("deprecation")
public int getComparatorInputOverride(IBlockState blockState, World world, BlockPos pos)
{ return Container.calcRedstone(world.getTileEntity(pos)); }
@Override
public boolean hasTileEntity(IBlockState state)
{ return true; }
@Override
@Nullable
public TileEntity createTileEntity(World world, IBlockState state)
{ return new BTileEntity(); }
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
{
if(world.isRemote) return;
if((!stack.hasTagCompound()) || (!stack.getTagCompound().hasKey("tedata"))) return;
NBTTagCompound te_nbt = stack.getTagCompound().getCompoundTag("tedata");
if(te_nbt.isEmpty()) return;
final TileEntity te = world.getTileEntity(pos);
if(!(te instanceof BTileEntity)) return;
((BTileEntity)te).readnbt(te_nbt, false);
((BTileEntity)te).reset_rtstate();
((BTileEntity)te).markDirty();
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest)
{
if(world.isRemote) return true;
TileEntity te = world.getTileEntity(pos);
if(!(te instanceof BTileEntity)) return super.removedByPlayer(state, world, pos, player, willHarvest);
ItemStack stack = new ItemStack(this, 1);
NBTTagCompound te_nbt = new NBTTagCompound();
((BTileEntity) te).writenbt(te_nbt, false);
if(!te_nbt.isEmpty()) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setTag("tedata", te_nbt);
stack.setTagCompound(nbt);
}
world.spawnEntity(new EntityItem(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack));
world.setBlockToAir(pos);
world.removeTileEntity(pos);
return false;
}
@Override
public void onBlockExploded(World world, BlockPos pos, Explosion explosion)
{
if(world.isRemote) return;
TileEntity te = world.getTileEntity(pos);
if(!(te instanceof BTileEntity)) return;
for(ItemStack stack: ((BTileEntity)te).stacks_) {
if(!stack.isEmpty()) world.spawnEntity(new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), stack));
}
((BTileEntity)te).reset_rtstate();
super.onBlockExploded(world, pos, explosion);
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
{
if(world.isRemote) return true;
player.openGui(ModEngineersDecor.instance, ModEngineersDecor.GuiHandler.GUIID_FACTORY_HOPPER, world, pos.getX(), pos.getY(), pos.getZ());
return true;
}
@Override
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos neighborPos)
{
if(!(world instanceof World) || (((World) world).isRemote)) return;
TileEntity te = world.getTileEntity(pos);
if(!(te instanceof BTileEntity)) return;
((BTileEntity)te).block_updated();
}
@Override
public void onFallenUpon(World world, BlockPos pos, Entity entity, float fallDistance)
{
super.onFallenUpon(world, pos, entity, fallDistance);
if(!(entity instanceof EntityItem)) return;
TileEntity te = world.getTileEntity(pos);
if(!(te instanceof BTileEntity)) return;
((BTileEntity)te).collection_timer_ = 0;
}
//--------------------------------------------------------------------------------------------------------------------
// ModEngineersDecor.GuiHandler connectors
//--------------------------------------------------------------------------------------------------------------------
public static Object getServerGuiElement(final EntityPlayer player, final World world, final BlockPos pos, final TileEntity te)
{ return (te instanceof BTileEntity) ? (new BContainer(player.inventory, world, pos, (BTileEntity)te)) : null; }
public static Object getClientGuiElement(final EntityPlayer player, final World world, final BlockPos pos, final TileEntity te)
{ return (te instanceof BTileEntity) ? (new BGui(player.inventory, world, pos, (BTileEntity)te)) : null; }
//--------------------------------------------------------------------------------------------------------------------
// GUI
//--------------------------------------------------------------------------------------------------------------------
@SideOnly(Side.CLIENT)
private static class BGui extends GuiContainer
{
private final BTileEntity te;
public BGui(InventoryPlayer playerInventory, World world, BlockPos pos, BTileEntity te)
{ super(new BContainer(playerInventory, world, pos, te)); this.te = te; }
@Override
public void initGui()
{ super.initGui(); }
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks)
{
drawDefaultBackground();
super.drawScreen(mouseX, mouseY, partialTicks);
renderHoveredToolTip(mouseX, mouseY);
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException
{
super.mouseClicked(mouseX, mouseY, mouseButton);
BContainer container = (BContainer)inventorySlots;
if(container.fields_.length != 7) return;
int mx = mouseX - getGuiLeft(), my = mouseY - getGuiTop();
if(!isPointInRegion(126, 1, 49, 60, mouseX, mouseY)) {
return;
} else if(isPointInRegion(128, 9, 44, 10, mouseX, mouseY)) {
int range = (mx-133);
if(range < -1) {
range = container.fields_[0] - 1; // -
} else if(range >= 34) {
range = container.fields_[0] + 1; // +
} else {
range = (int)(0.5 + ((((double)BTileEntity.MAX_COLLECTION_RANGE) * range)/34)); // slider
range = MathHelper.clamp(range, 0, BTileEntity.MAX_COLLECTION_RANGE);
}
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("range", range);
Networking.PacketTileNotify.sendToServer(te, nbt);
} else if(isPointInRegion(128, 21, 44, 10, mouseX, mouseY)) {
int period = (mx-133);
if(period < -1) {
period = container.fields_[3] - 3; // -
} else if(period >= 35) {
period = container.fields_[3] + 3; // +
} else {
period = (int)(0.5 + ((100.0 * period)/34));
}
period = MathHelper.clamp(period, 0, 100);
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("period", period);
Networking.PacketTileNotify.sendToServer(te, nbt);
} else if(isPointInRegion(128, 34, 44, 10, mouseX, mouseY)) {
int ndrop = (mx-134);
if(ndrop < -1) {
ndrop = container.fields_[1] - 1; // -
} else if(ndrop >= 34) {
ndrop = container.fields_[1] + 1; // +
} else {
ndrop = MathHelper.clamp(1+ndrop, 1, BTileEntity.MAX_TRANSFER_COUNT); // slider
}
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("xsize", ndrop);
Networking.PacketTileNotify.sendToServer(te, nbt);
} else if(isPointInRegion(133, 49, 9, 9, mouseX, mouseY)) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("manual_trigger", 1);
Networking.PacketTileNotify.sendToServer(te, nbt);
} else if(isPointInRegion(145, 49, 9, 9, mouseX, mouseY)) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("logic", container.fields_[2] ^ BTileEntity.LOGIC_INVERTED);
Networking.PacketTileNotify.sendToServer(te, nbt);
} else if(isPointInRegion(159, 49, 7, 9, mouseX, mouseY)) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("logic", container.fields_[2] ^ BTileEntity.LOGIC_CONTINUOUS);
Networking.PacketTileNotify.sendToServer(te, nbt);
}
}
@Override
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY)
{
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
mc.getTextureManager().bindTexture(new ResourceLocation(ModEngineersDecor.MODID, "textures/gui/factory_hopper_gui.png"));
final int x0=getGuiLeft(), y0=getGuiTop(), w=getXSize(), h=getYSize();
drawTexturedModalRect(x0, y0, 0, 0, w, h);
BContainer container = (BContainer)inventorySlots;
if(container.fields_.length != 7) return; // no init, no cake.
// active slot
{
int slot_index = container.fields_[6];
if((slot_index < 0) || (slot_index >= BTileEntity.NUM_OF_SLOTS)) slot_index = 0;
int x = (x0+10+((slot_index % 6) * 18));
int y = (y0+8+((slot_index / 6) * 17));
drawTexturedModalRect(x, y, 200, 8, 18, 18);
}
// collection range
{
int lut[] = { 133, 141, 149, 157, 166 };
int px = lut[MathHelper.clamp(container.fields_[0], 0, BTileEntity.MAX_COLLECTION_RANGE)];
int x = x0 + px - 2;
int y = y0 + 14;
drawTexturedModalRect(x, y, 179, 40, 5, 5);
}
// transfer period
{
int px = (int)Math.round(((33.5 * container.fields_[3]) / 100) + 1);
int x = x0 + 132 - 2 + MathHelper.clamp(px, 0, 34);
int y = y0 + 27;
drawTexturedModalRect(x, y, 179, 40, 5, 5);
}
// transfer count
{
int x = x0 + 133 - 2 + (container.fields_[1]);
int y = y0 + 40;
drawTexturedModalRect(x, y, 179, 40, 5, 5);
}
// redstone input
{
if(container.fields_[5] != 0) {
drawTexturedModalRect(x0+133, y0+49, 217, 49, 9, 9);
}
}
// trigger logic
{
int inverter_offset = ((container.fields_[2] & BTileEntity.LOGIC_INVERTED) != 0) ? 11 : 0;
drawTexturedModalRect(x0+145, y0+49, 177+inverter_offset, 49, 9, 9);
int pulse_mode_offset = ((container.fields_[2] & BTileEntity.LOGIC_CONTINUOUS ) != 0) ? 9 : 0;
drawTexturedModalRect(x0+159, y0+49, 199+pulse_mode_offset, 49, 9, 9);
}
// delay timer running indicator
{
if((container.fields_[4] > BTileEntity.PERIOD_OFFSET) && ((System.currentTimeMillis() % 1000) < 500)) {
drawTexturedModalRect(x0+148, y0+22, 187, 22, 3, 3);
}
}
}
}
//--------------------------------------------------------------------------------------------------------------------
// container
//--------------------------------------------------------------------------------------------------------------------
public static class BContainer extends Container
{
private static final int PLAYER_INV_START_SLOTNO = BTileEntity.NUM_OF_SLOTS;
private final World world;
private final BlockPos pos;
private final EntityPlayer player;
private final BTileEntity te;
private int fields_[] = new int[7];
public BContainer(InventoryPlayer playerInventory, World world, BlockPos pos, BTileEntity te)
{
this.player = playerInventory.player;
this.world = world;
this.pos = pos;
this.te = te;
int i=-1;
// device slots (stacks 0 to 17)
for(int y=0; y<3; ++y) {
for(int x=0; x<6; ++x) {
int xpos = 11+x*18, ypos = 9+y*17;
addSlotToContainer(new Slot(te, ++i, xpos, ypos));
}
}
// player slots
for(int x=0; x<9; ++x) {
addSlotToContainer(new Slot(playerInventory, x, 8+x*18, 129)); // player slots: 0..8
}
for(int y=0; y<3; ++y) {
for(int x=0; x<9; ++x) {
addSlotToContainer(new Slot(playerInventory, x+y*9+9, 8+x*18, 71+y*18)); // player slots: 9..35
}
}
}
public BlockPos getPos()
{ return pos; }
@Override
public void addListener(IContainerListener listener)
{ super.addListener(listener); listener.sendAllWindowProperties(this, te); }
@Override
public void detectAndSendChanges()
{
super.detectAndSendChanges();
for(int il=0; il<listeners.size(); ++il) {
IContainerListener lis = listeners.get(il);
for(int k=0; k<fields_.length; ++k) {
int f = te.getField(k);
if(fields_[k] != f) {
fields_[k] = f;
lis.sendWindowProperty(this, k, f);
}
}
}
}
@Override
@SideOnly(Side.CLIENT)
public void updateProgressBar(int id, int value)
{
if((id < 0) || (id >= fields_.length)) return;
fields_[id] = value;
te.setField(id, value);
}
@Override
public boolean canInteractWith(EntityPlayer player)
{ return (world.getBlockState(pos).getBlock() instanceof BlockDecorHopper) && (player.getDistanceSq(pos) <= 64); }
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index)
{
Slot slot = inventorySlots.get(index);
if((slot==null) || (!slot.getHasStack())) return ItemStack.EMPTY;
ItemStack slot_stack = slot.getStack();
ItemStack transferred = slot_stack.copy();
if((index>=0) && (index<PLAYER_INV_START_SLOTNO)) {
// Device slots
if(!mergeItemStack(slot_stack, PLAYER_INV_START_SLOTNO, PLAYER_INV_START_SLOTNO+36, false)) return ItemStack.EMPTY;
} else if((index >= PLAYER_INV_START_SLOTNO) && (index <= PLAYER_INV_START_SLOTNO+36)) {
// Player slot
if(!mergeItemStack(slot_stack, 0, BTileEntity.NUM_OF_SLOTS, false)) return ItemStack.EMPTY;
} else {
// invalid slot
return ItemStack.EMPTY;
}
if(slot_stack.isEmpty()) {
slot.putStack(ItemStack.EMPTY);
} else {
slot.onSlotChanged();
}
if(slot_stack.getCount() == transferred.getCount()) return ItemStack.EMPTY;
slot.onTake(player, slot_stack);
return transferred;
}
}
//--------------------------------------------------------------------------------------------------------------------
// Tile entity
//--------------------------------------------------------------------------------------------------------------------
public static class BTileEntity extends TileEntity implements ITickable, ISidedInventory, Networking.IPacketReceiver
{
public static final int TICK_INTERVAL = 10;
public static final int COLLECTION_INTERVAL = 25;
public static final int NUM_OF_SLOTS = 18;
public static final int MAX_TRANSFER_COUNT = 32;
public static final int MAX_COLLECTION_RANGE = 4;
public static final int PERIOD_OFFSET = 10;
///
public static final int LOGIC_INVERTED = 0x01;
public static final int LOGIC_CONTINUOUS = 0x02;
///
private boolean block_power_signal_ = false;
private boolean block_power_updated_ = false;
private int collection_timer_ = 0;
private int delay_timer_ = 0;
private int transfer_count_ = 1;
private int logic_ = LOGIC_INVERTED|LOGIC_CONTINUOUS;
private int transfer_period_ = 0;
private int collection_range_ = 0;
private int current_slot_index_ = 0;
private int tick_timer_ = 0;
protected NonNullList<ItemStack> stacks_;
public static void on_config(int cooldown_ticks)
{
// ModEngineersDecor.logger.info("Config factory hopper:");
}
public BTileEntity()
{
stacks_ = NonNullList.<ItemStack>withSize(NUM_OF_SLOTS, ItemStack.EMPTY);
reset_rtstate();
}
public void reset_rtstate()
{
block_power_signal_ = false;
block_power_updated_ = false;
}
public void readnbt(NBTTagCompound nbt, boolean update_packet)
{
stacks_ = NonNullList.<ItemStack>withSize(NUM_OF_SLOTS, ItemStack.EMPTY);
ItemStackHelper.loadAllItems(nbt, stacks_);
while(stacks_.size() < NUM_OF_SLOTS) stacks_.add(ItemStack.EMPTY);
block_power_signal_ = nbt.getBoolean("powered");
current_slot_index_ = nbt.getInteger("act_slot_index");
transfer_count_ = MathHelper.clamp(nbt.getInteger("xsize"), 1, MAX_TRANSFER_COUNT);
logic_ = nbt.getInteger("logic");
transfer_period_ = nbt.getInteger("period");
collection_range_ = nbt.getInteger("range");
}
protected void writenbt(NBTTagCompound nbt, boolean update_packet)
{
ItemStackHelper.saveAllItems(nbt, stacks_);
nbt.setBoolean("powered", block_power_signal_);
nbt.setInteger("act_slot_index", current_slot_index_);
nbt.setInteger("xsize", transfer_count_);
nbt.setInteger("logic", logic_);
nbt.setInteger("period", transfer_period_);
nbt.setInteger("range", collection_range_);
}
public void block_updated()
{
// RS power check, both edges
boolean powered = world.isBlockPowered(pos);
if(block_power_signal_ != powered) block_power_updated_ = true;
block_power_signal_ = powered;
tick_timer_ = 1;
}
public boolean is_input_slot(int index)
{ return (index >= 0) && (index < NUM_OF_SLOTS); }
// TileEntity ------------------------------------------------------------------------------
@Override
public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns)
{ return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorHopper)); }
@Override
public void readFromNBT(NBTTagCompound nbt)
{ super.readFromNBT(nbt); readnbt(nbt, false); }
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
{ super.writeToNBT(nbt); writenbt(nbt, false); return nbt; }
// IWorldNamable ---------------------------------------------------------------------------
@Override
public String getName()
{ final Block block=getBlockType(); return (block!=null) ? (block.getTranslationKey() + ".name") : (""); }
@Override
public boolean hasCustomName()
{ return false; }
@Override
public ITextComponent getDisplayName()
{ return new TextComponentTranslation(getName(), new Object[0]); }
// IInventory ------------------------------------------------------------------------------
@Override
public int getSizeInventory()
{ return stacks_.size(); }
@Override
public boolean isEmpty()
{ for(ItemStack stack: stacks_) { if(!stack.isEmpty()) return false; } return true; }
@Override
public ItemStack getStackInSlot(int index)
{ return (index < getSizeInventory()) ? stacks_.get(index) : ItemStack.EMPTY; }
@Override
public ItemStack decrStackSize(int index, int count)
{ return ItemStackHelper.getAndSplit(stacks_, index, count); }
@Override
public ItemStack removeStackFromSlot(int index)
{ return ItemStackHelper.getAndRemove(stacks_, index); }
@Override
public void setInventorySlotContents(int index, ItemStack stack)
{
stacks_.set(index, stack);
if(stack.getCount() > getInventoryStackLimit()) stack.setCount(getInventoryStackLimit());
if(tick_timer_ > 8) tick_timer_ = 8;
markDirty();
}
@Override
public int getInventoryStackLimit()
{ return 64; }
@Override
public void markDirty()
{ super.markDirty(); }
@Override
public boolean isUsableByPlayer(EntityPlayer player)
{ return ((world.getTileEntity(pos) == this) && (player.getDistanceSq(pos.getX()+0.5d, pos.getY()+0.5d, pos.getZ()+0.5d) <= 64.0d)); }
@Override
public void openInventory(EntityPlayer player)
{}
@Override
public void closeInventory(EntityPlayer player)
{ markDirty(); }
@Override
public boolean isItemValidForSlot(int index, ItemStack stack)
{ return true; }
@Override
public int getField(int id)
{
switch(id) {
case 0: return collection_range_;
case 1: return transfer_count_;
case 2: return logic_;
case 3: return transfer_period_;
case 4: return delay_timer_;
case 5: return block_power_signal_ ? 1 : 0;
case 6: return current_slot_index_;
default: return 0;
}
}
@Override
public void setField(int id, int value)
{
switch(id) {
case 0: collection_range_ = MathHelper.clamp(value,0, MAX_COLLECTION_RANGE); return;
case 1: transfer_count_ = MathHelper.clamp(value,1, MAX_TRANSFER_COUNT); return;
case 2: logic_ = value; return;
case 3: transfer_period_ = MathHelper.clamp(value,0, 100); return;
case 4: delay_timer_ = MathHelper.clamp(value,0, 400); return;
case 5: block_power_signal_ = (value != 0); return;
case 6: current_slot_index_ = MathHelper.clamp(value, 0, NUM_OF_SLOTS-1); return;
default: return;
}
}
@Override
public int getFieldCount()
{ return 7; }
@Override
public void clear()
{ stacks_.clear(); }
// ISidedInventory ----------------------------------------------------------------------------
private final IItemHandler item_handler_ = new SidedInvWrapper(this, EnumFacing.UP);
private static final int[] SIDED_INV_SLOTS;
static {
SIDED_INV_SLOTS = new int[NUM_OF_SLOTS];
for(int i=0; i<NUM_OF_SLOTS; ++i) SIDED_INV_SLOTS[i] = i;
}
@Override
public int[] getSlotsForFace(EnumFacing side)
{ return SIDED_INV_SLOTS; }
@Override
public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction)
{ return is_input_slot(index) && isItemValidForSlot(index, stack); }
@Override
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction)
{ return false; }
// Capability export ----------------------------------------------------------------------------
@Override
public boolean hasCapability(Capability<?> cap, EnumFacing facing)
{ return (cap==CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) || super.hasCapability(cap, facing); }
@Override
@SuppressWarnings("unchecked")
@Nullable
public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing)
{
if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return (T)item_handler_;
return super.getCapability(capability, facing);
}
// IPacketReceiver -------------------------------------------------------------------------------
@Override
public void onServerPacketReceived(NBTTagCompound nbt)
{}
@Override
public void onClientPacketReceived(EntityPlayer player, NBTTagCompound nbt)
{
if(nbt.hasKey("xsize")) transfer_count_ = MathHelper.clamp(nbt.getInteger("xsize"), 1, MAX_TRANSFER_COUNT);
if(nbt.hasKey("period")) transfer_period_ = MathHelper.clamp(nbt.getInteger("period"), 0, 100);
if(nbt.hasKey("range")) collection_range_ = MathHelper.clamp(nbt.getInteger("range"), 0, MAX_COLLECTION_RANGE);
if(nbt.hasKey("logic")) logic_ = nbt.getInteger("logic");
if(nbt.hasKey("manual_trigger") && (nbt.getInteger("manual_trigger")!=0)) { block_power_signal_=true; block_power_updated_=true; tick_timer_=1; }
markDirty();
}
// ITickable and aux methods ---------------------------------------------------------------------
private static int next_slot(int i)
{ return (i<NUM_OF_SLOTS-1) ? (i+1) : 0; }
private int try_insert_into_hopper(final ItemStack stack)
{
final int max_to_insert = stack.getCount();
int n_to_insert = max_to_insert;
int first_empty_slot = -1;
for(int i=0; i<stacks_.size(); ++i) {
final ItemStack slotstack = stacks_.get(i);
if((first_empty_slot < 0) && slotstack.isEmpty()) { first_empty_slot=i; continue; }
if(!stack.isItemEqual(slotstack)) continue;
int nspace = slotstack.getMaxStackSize() - slotstack.getCount();
if(nspace <= 0) {
continue;
} else if(nspace >= n_to_insert) {
slotstack.grow(n_to_insert);
n_to_insert = 0;
break;
} else {
slotstack.grow(nspace);
n_to_insert -= nspace;
}
}
if((n_to_insert > 0) && (first_empty_slot >= 0)) {
ItemStack new_stack = stack.copy();
new_stack.setCount(n_to_insert);
stacks_.set(first_empty_slot, new_stack);
n_to_insert = 0;
}
return max_to_insert - n_to_insert;
}
private boolean try_insert(EnumFacing facing)
{
ItemStack current_stack = ItemStack.EMPTY;
for(int i=0; i<NUM_OF_SLOTS; ++i) {
if(current_slot_index_ >= NUM_OF_SLOTS) current_slot_index_ = 0;
current_stack = stacks_.get(current_slot_index_);
if(!current_stack.isEmpty()) break;
current_slot_index_ = next_slot(current_slot_index_);
}
if(current_stack.isEmpty()) {
current_slot_index_ = 0;
return false;
}
final TileEntity te = world.getTileEntity(pos.offset(facing));
if((te == null) || (!te.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing.getOpposite()))) {
delay_timer_ = TICK_INTERVAL+2; // no reason to recalculate this all the time if there is nothere to insert.
return false;
} else if(te instanceof TileEntityHopper) {
EnumFacing f = world.getBlockState(pos.offset(facing)).getValue(BlockHopper.FACING);
if(f==facing.getOpposite()) return false; // no back transfer
} else if(te instanceof BTileEntity) {
EnumFacing f = world.getBlockState(pos.offset(facing)).getValue(FACING);
if(f==facing.getOpposite()) return false;
}
ItemStack insert_stack = current_stack.copy();
if(insert_stack.getCount() > transfer_count_) insert_stack.setCount(transfer_count_);
final int initial_insert_stack_size = insert_stack.getCount();
final IItemHandler ih = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing.getOpposite());
int first_empty_slot_index = -1;
if((ih == null) || ih.getSlots() <= 0) return false;
for(int i=0; i<ih.getSlots(); ++i) {
if(!ih.isItemValid(i, insert_stack)) continue;
final ItemStack target_stack = ih.getStackInSlot(i);
if((first_empty_slot_index < 0) && target_stack.isEmpty()) first_empty_slot_index = i;
if(!target_stack.isItemEqual(insert_stack)) continue;
insert_stack = ih.insertItem(i, insert_stack.copy(), false);
if(insert_stack.isEmpty()) break;
}
if((first_empty_slot_index >= 0) && (!insert_stack.isEmpty())) {
insert_stack = ih.insertItem(first_empty_slot_index, insert_stack.copy(), false);
}
final int num_inserted = initial_insert_stack_size-insert_stack.getCount();
if(num_inserted > 0) {
current_stack.shrink(num_inserted);
stacks_.set(current_slot_index_, current_stack);
}
if(!insert_stack.isEmpty()) current_slot_index_ = next_slot(current_slot_index_);
return (num_inserted > 0);
}
private boolean try_item_handler_extract(final IItemHandler ih)
{
final int end = ih.getSlots();
int n_to_extract = transfer_count_;
for(int i=0; i<end; ++i) {
if(ih.getStackInSlot(i).isEmpty()) continue;
ItemStack stack = ih.extractItem(i, n_to_extract, true);
if(stack.isEmpty()) continue;
int n_accepted = try_insert_into_hopper(stack);
if(n_accepted > 0) {
ItemStack test = ih.extractItem(i, n_accepted, false);
n_to_extract -= n_accepted;
if(n_to_extract <= 0) break;
}
}
return (n_to_extract < transfer_count_);
}
private boolean try_inventory_extract(final IInventory inv)
{
final int end = inv.getSizeInventory();
int n_to_extract = transfer_count_;
for(int i=0; i<end; ++i) {
ItemStack stack = inv.getStackInSlot(i).copy();
if(stack.isEmpty()) continue;
int n_accepted = try_insert_into_hopper(stack);
if(n_accepted > 0) {
stack.shrink(n_accepted);
n_to_extract -= n_accepted;
if(stack.isEmpty()) stack = ItemStack.EMPTY;
inv.setInventorySlotContents(i, stack);
if(n_to_extract <= 0) break;
}
}
if(n_to_extract < transfer_count_) {
inv.markDirty();
return true;
} else {
return false;
}
}
private boolean try_collect(EnumFacing facing)
{
AxisAlignedBB collection_volume;
BlockPos rpos;
if(facing==EnumFacing.UP) {
rpos = pos.add(0.5, 1.5,0.5);
collection_volume = (new AxisAlignedBB(pos.up())).grow(0.1+collection_range_, 0.6, 0.1+collection_range_);
} else {
rpos = pos.add(0.5, -1.5,0.5);
collection_volume = (new AxisAlignedBB(pos.down(2))).grow(0.1+collection_range_, 1, 0.1+collection_range_);
}
final List<EntityItem> items = world.getEntitiesWithinAABB(EntityItem.class, collection_volume);
if(items.size() <= 0) return false;
final int max_to_collect = 3;
int n_collected = 0;
for(EntityItem ie:items) {
boolean is_direct_collection_tange = ie.getDistanceSq(rpos)<0.7;
if(!is_direct_collection_tange && (ie.cannotPickup() || (!ie.onGround))) continue;
ItemStack stack = ie.getItem();
int n_accepted = try_insert_into_hopper(stack);
if(n_accepted <= 0) continue;
if(n_accepted == stack.getCount()) {
ie.setDead();
} else {
stack.shrink(n_accepted);
}
if((!is_direct_collection_tange) && (++n_collected >= max_to_collect)) break;
}
return (n_collected > 0);
}
@Override
public void update()
{
// Tick cycle pre-conditions
if(world.isRemote) return;
if((delay_timer_ > 0) && ((--delay_timer_) == 0)) markDirty();
if(--tick_timer_ > 0) return;
tick_timer_ = TICK_INTERVAL;
// Cycle init
boolean dirty = block_power_updated_;
boolean rssignal = ((logic_ & LOGIC_INVERTED)!=0)==(!block_power_signal_);
boolean trigger = (rssignal && ((block_power_updated_) || ((logic_ & LOGIC_CONTINUOUS)!=0)));
final IBlockState state = world.getBlockState(pos);
if(state == null) { block_power_signal_= false; return; }
final EnumFacing hopper_facing = state.getValue(FACING);
// Trigger edge detection for next cycle
{
boolean tr = world.isBlockPowered(pos);
block_power_updated_ = (block_power_signal_ != tr);
block_power_signal_ = tr;
if(block_power_updated_) dirty = true;
}
// Collection
if(rssignal) {
EnumFacing hopper_input_facing = (hopper_facing==EnumFacing.UP) ? EnumFacing.DOWN : EnumFacing.UP;
TileEntity te = world.getTileEntity(pos.offset(hopper_input_facing));
boolean has_item_handler = ((te!=null) && te.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, hopper_input_facing.getOpposite()));
if(has_item_handler || (te instanceof ISidedInventory)) {
// IItemHandler pulling
if(has_item_handler) {
final IItemHandler ih = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, hopper_facing.getOpposite());
if((ih != null) && try_item_handler_extract(ih)) dirty = true;
} else {
try_inventory_extract((IInventory)te);
}
} else if((collection_timer_ -= TICK_INTERVAL) <= 0) {
// Ranged collection
collection_timer_ = COLLECTION_INTERVAL;
if(try_collect(hopper_input_facing)) dirty = true;
}
}
// Insertion
if(trigger && (delay_timer_ <= 0)) {
delay_timer_ = PERIOD_OFFSET + transfer_period_ * 2;
if(try_insert(hopper_facing)) dirty = true;
}
if(dirty) markDirty();
if(trigger && (tick_timer_ > TICK_INTERVAL)) tick_timer_ = TICK_INTERVAL;
}
}
}

View file

@ -681,18 +681,12 @@ public class BlockDecorWasteIncinerator extends BlockDecor
int max_shift_slot_no = BURN_SLOT_NO-1;
for(int i=1; i<BURN_SLOT_NO-1; ++i) { if(stacks_.get(i).isEmpty()) { max_shift_slot_no=i; break; } }
if(max_shift_slot_no < (BURN_SLOT_NO-1)) {
shiftStacks(0, max_shift_slot_no);
// re-stack
boolean stacked = false;
for(int i=1; i<=max_shift_slot_no; ++i) {
if(transferItems(i-1, i, getInventoryStackLimit())) {
dirty = true;
stacked = true;
break;
}
}
if(!stacked) {
shiftStacks(0, max_shift_slot_no);
if(transferItems(i-1, i, getInventoryStackLimit())) break;
}
dirty = true;
} else if(!is_processing) {
shiftStacks(0, BURN_SLOT_NO);
dirty = true;

View file

@ -163,6 +163,11 @@ public class ModConfig
@Config.RequiresMcRestart
public boolean without_factory_dropper = false;
@Config.Comment({"Disable the factory hopper."})
@Config.Name("Without factory hopper")
@Config.RequiresMcRestart
public boolean without_factory_hopper = false;
@Config.Comment({"Disable horizontal half-block slab."})
@Config.Name("Without slabs")
@Config.RequiresMcRestart
@ -405,6 +410,7 @@ public class ModConfig
if(block instanceof BlockDecorPassiveFluidAccumulator) return optout.without_passive_fluid_accumulator;
if(block instanceof BlockDecorWasteIncinerator) return optout.without_waste_incinerator;
if(block instanceof BlockDecorDropper) return optout.without_factory_dropper;
if(block instanceof BlockDecorHopper) return optout.without_factory_hopper;
if(block instanceof BlockDecorHalfSlab) return optout.without_halfslabs;
if(block instanceof BlockDecorLadder) return optout.without_ladders;
if(block instanceof BlockDecorWindow) return optout.without_windows;

View file

@ -0,0 +1,18 @@
{
"forge_marker": 1,
"defaults": {
"model": "engineersdecor:device/factory_hopper_model"
},
"variants": {
"normal": [{}],
"inventory": [{}],
"facing": {
"north":{"y":0},
"south":{"y":180},
"west":{"y":270},
"east":{"y":90},
"up": { "model": "engineersdecor:device/factory_hopper_model_up" },
"down": { "model": "engineersdecor:device/factory_hopper_model_down" }
}
}
}

View file

@ -0,0 +1,9 @@
{
"forge_marker": 1,
"defaults": { "model": "engineersdecor:light/floor_edge_light_model" },
"variants": {
"normal": [{}],
"facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {}, "down": {} },
"inventory": [{}]
}
}

View file

@ -1,13 +1,6 @@
{
"forge_marker": 1,
"defaults": {
"model": "engineersdecor:light/inset_light_model",
"textures": {
"light": "engineersdecor:blocks/light/lamp_glass_warm_square_texture",
"side": "engineersdecor:blocks/iestyle/steel_texture",
"particle": "engineersdecor:blocks/iestyle/steel_texture"
}
},
"defaults": { "model": "engineersdecor:light/inset_light_model" },
"variants": {
"normal": [{}],
"facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} },

View file

@ -102,8 +102,10 @@ tile.engineersdecor.treated_wood_side_table.name=Treated Wood Side Table
tile.engineersdecor.treated_wood_side_table.help=§6Needed after the work's done.
tile.engineersdecor.iron_inset_light.name=Inset Light
tile.engineersdecor.iron_inset_light.help=§6Small glowstone light source, sunk into the floor, ceiling or wall.§r\n\
Useful to light up places where electrical light installations are problematic.\
Light level like a torch.
Useful to light up places where electrical light installations are problematic.
tile.engineersdecor.iron_floor_edge_light.name=Inset Floor Edge Light
tile.engineersdecor.iron_floor_edge_light.help=§6Small glowstone light source, placed at the edge of a floor block.§r\n\
Useful to light up places where electrical light installations are problematic.
tile.engineersdecor.treated_wood_window.name=Treated Wood Window
tile.engineersdecor.treated_wood_window.help=§6Wood framed triple glazed window. Well insulating.§r Does not connect to adjacent blocks like glass panes.
tile.engineersdecor.treated_wood_windowsill.name=Treated Wood Window Sill
@ -156,6 +158,8 @@ tile.engineersdecor.factory_dropper.help=§6Dropper suitable for advanced factor
AND'ed or OR'ed with the external redstone signal trigger. Trigger simulation buttons for testing. \
Pre-opens shutter door when internal trigger conditions are met. Drops all matching stacks \
simultaneously. Click on all elements in the GUI to see how it works.
tile.engineersdecor.factory_hopper.name=Factory Hopper
tile.engineersdecor.factory_hopper.help=§6Hopper suitable for advanced factory automation.§r
tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace
tile.engineersdecor.small_mineral_smelter.help=§6High temperature, high insulation electrical stone melting furnace.§r\n\
Heats up mineral blocks to magma blocks, and finally to lava. Due to the \
@ -184,7 +188,7 @@ tile.engineersdecor.sign_defense.help=§6Warning sign for turrets, Tesla Coils,
tile.engineersdecor.sign_factoryarea.name=Sign "Factory Area"
tile.engineersdecor.sign_factoryarea.help=§6Marker sign for buildings or areas where the really big machines are located.
tile.engineersdecor.sign_exit.name=Exit Sign
tile.engineersdecor.sign_factoryarea.help=§6There's the door, please ...
tile.engineersdecor.sign_exit.help=§6There's the door, please ...
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.halfslab_rebar_concrete.name=Rebar Concrete Slice
tile.engineersdecor.halfslab_rebar_concrete.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.

View file

@ -101,6 +101,9 @@ tile.engineersdecor.iron_inset_light.name=Встраиваемый освети
tile.engineersdecor.iron_inset_light.help=§6Маленький источник света, интегрируемый в стены, пол или потолок.§r\n\
Полезно для освещения мест, где проблематичны электрические осветительные установки.\
Уровень света - как факел.
tile.engineersdecor.iron_floor_edge_light.name=Inset Floor Edge Light
#tile.engineersdecor.iron_floor_edge_light.help=§6Small glowstone light source, placed at the edge of a floor block.§r\n\
Useful to light up places where electrical light installations are problematic.
tile.engineersdecor.treated_wood_window.name=Обработанное деревянное окно
tile.engineersdecor.treated_wood_window.help=§6Деревянный каркас окна с тройным остеклением. Ну и шумоизоляция.
tile.engineersdecor.treated_wood_windowsill.name=Обработанный деревянный подоконник
@ -151,6 +154,8 @@ tile.engineersdecor.factory_dropper.help=§6Выбрасыватель подх
Триггерные кнопки симуляции для тестирования. Предварительно открывает дверцу затвора, \
когда выполняются условия внутреннего запуска. Сбрасывает все соответствующие стеки одновременно. \
Нажмите на все элементы в GUI, чтобы увидеть, как это работает.
tile.engineersdecor.factory_hopper.name=Factory Hopper
#tile.engineersdecor.factory_hopper.help=§6Hopper suitable for advanced factory automation.§r
tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace
#tile.engineersdecor.small_mineral_smelter.help=§6High temperature, high insulation electrical stone melting furnace.§r\n\
Heats up mineral blocks to magma blocks, and finally to lava. Due to the \
@ -179,7 +184,7 @@ tile.engineersdecor.sign_defense.help=§6Предупреждающий знак
tile.engineersdecor.sign_factoryarea.name=Знак «Заводская зона»
tile.engineersdecor.sign_factoryarea.help=§6Там дверь, пожалуйста...
tile.engineersdecor.sign_exit.name=Знак «Выход»
#tile.engineersdecor.sign_factoryarea.help=§6There's the door, please ...
#tile.engineersdecor.sign_exit.help=§6There's the door, please ...
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.halfslab_rebar_concrete.name=Арматура для бетона
tile.engineersdecor.halfslab_rebar_concrete.help=§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.

View file

@ -5,247 +5,252 @@
#
#-----------------------------------------------------------------------------------------------------------
itemGroup.tabengineersdecor=工程师的装饰
engineersdecor.tooltip.hint.extended=§6[按§9SHIFT§r获取更多信息§6]§r
engineersdecor.tooltip.hint.help=§6[按§9CTRL-SHIFT§r获取帮助§6]§r
#engineersdecor.tooltip.slabpickup.help=§rFast pickup by left-clicking while looking up/down and holding this slab.
engineersdecor.tooltip.hint.extended=§6[§9SHIFT§r 查看更多信息§6]§r
engineersdecor.tooltip.hint.help=§6[§9CTRL-SHIFT§r 查看帮助§6]§r
engineersdecor.tooltip.slabpickup.help=§r手持同类台阶往上/下看时单击该台阶可无需破坏快速拾起。
#-----------------------------------------------------------------------------------------------------------
# Stone/"ceramic material" based blocks
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.clinker_brick_block.name=熟料砖
tile.engineersdecor.clinker_brick_block.help=§6具有位置相关纹理变化的砖块.§r\n看起来比原版砖块稍暗,颜色更浓.
tile.engineersdecor.clinker_brick_stained_block.name=Stained Clinker Brick Block
#tile.engineersdecor.clinker_brick_stained_block.help=§6A brick block with position dependent texture variations.§r\nLooks slightly darker and more color intensive than the vanilla brick block. Has more visible traces of grime or stain.
tile.engineersdecor.slag_brick_block.name=炉渣砖
tile.engineersdecor.slag_brick_block.help=§6灰褐色砖块,具有位置相关的纹理变化.
tile.engineersdecor.clinker_brick_block.name=过烧砖块
tile.engineersdecor.clinker_brick_block.help=§6一种放在不同位置贴图有不同变化的砖块。§r\n比原版砖看起来颜色更深色度也更高。
tile.engineersdecor.clinker_brick_stained_block.name=污渍过烧砖块
tile.engineersdecor.clinker_brick_stained_block.help=§6一种放在不同位置贴图有不同变化的砖块。§r\n比原版砖看起来颜色更深色度也更高。有更多可见的污垢或污迹。
tile.engineersdecor.slag_brick_block.name=炉渣砖
tile.engineersdecor.slag_brick_block.help=§6一种放在不同位置贴图有不同变化的灰棕色砖块。
tile.engineersdecor.rebar_concrete.name=钢筋混凝土
tile.engineersdecor.rebar_concrete.help=§6钢筋混凝土砌块.§r 昂贵,但像黑曜石一样防苦力怕.
tile.engineersdecor.panzerglass_block.name=Panzer Glass Block
#tile.engineersdecor.panzerglass_block.help=§6Reinforced glass block.§r Expensive, explosion-proof. Dark gray tint, faint structural lines visible, multi texture for seemless look.
tile.engineersdecor.rebar_concrete_tile.name=Rebar Concrete Tile
#tile.engineersdecor.rebar_concrete_tile.help=§6Steel reinforced concrete tile.§r Expensive but Creeper-proof like obsidian.
tile.engineersdecor.rebar_concrete.help=§6钢强化的混凝土。§r昂贵但像黑曜石一样防爬行者爆炸。
tile.engineersdecor.panzerglass_block.name=装甲玻璃块
tile.engineersdecor.panzerglass_block.help=§6强化的玻璃方块。§r昂贵防爆。深灰色调有隐约可见的结构线和多种纹理外观无光泽。
tile.engineersdecor.rebar_concrete_tile.name=钢筋混凝土砖
tile.engineersdecor.rebar_concrete_tile.help=§6钢强化的混凝土砖。§r昂贵但像黑曜石一样防爬行者爆炸。
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.clinker_brick_slab.name=Clinker Brick Slab
#tile.engineersdecor.clinker_brick_slab.help=§6Slab made from a Clinker Block.§r\nLooks slightly darker and more color intensive than the vanilla brick.
tile.engineersdecor.clinker_brick_stained_slab.name=Stained Clinker Brick Slab
#tile.engineersdecor.clinker_brick_stained_slab.help=§6Slab made from a Stained Clinker Block.
tile.engineersdecor.slag_brick_slab.name=Slag Brick Slab
#tile.engineersdecor.slag_brick_slab.help=§6A gray-brown brick slab.
tile.engineersdecor.rebar_concrete_slab.name=Rebar Concrete Slab
#tile.engineersdecor.rebar_concrete_slab.help=§6Steel reinforced concrete slab.§r Expensive but Creeper-proof like obsidian.
tile.engineersdecor.rebar_concrete_tile_slab.name=Rebar Concrete Tile Slab
#tile.engineersdecor.rebar_concrete_tile_slab.help=§6Steel reinforced concrete tile slab.§r Expensive but Creeper-proof like obsidian.
tile.engineersdecor.panzerglass_slab.name=Panzer Glass Slab
#tile.engineersdecor.panzerglass_slab.help=§6Reinforced glass slab.§r Expensive, explosion-proof. Dark gray tint, faint structural lines visible.
tile.engineersdecor.treated_wood_floor.name=Treated Wood Floor
#tile.engineersdecor.treated_wood_floor.help=§6Decorative floor tiles with texture variations.§r
tile.engineersdecor.clinker_brick_slab.name=过烧砖台阶
tile.engineersdecor.clinker_brick_slab.help=§6过烧砖块制造的台阶。§r\n比原版砖看起来颜色更深色度也更高。
tile.engineersdecor.clinker_brick_stained_slab.name=污渍过烧砖台阶
tile.engineersdecor.clinker_brick_stained_slab.help=§6污渍过烧砖块制造的台阶。
tile.engineersdecor.slag_brick_slab.name=炉渣砖台阶
tile.engineersdecor.slag_brick_slab.help=§6一种灰棕色砖块台阶。
tile.engineersdecor.rebar_concrete_slab.name=钢筋混凝土台阶
tile.engineersdecor.rebar_concrete_slab.help=§6钢强化的混凝土台阶。§r昂贵但像黑曜石一样防爬行者爆炸。
tile.engineersdecor.rebar_concrete_tile_slab.name=钢筋混凝土砖台阶
tile.engineersdecor.rebar_concrete_tile_slab.help=§6钢强化的混凝土砖台阶。§r昂贵但像黑曜石一样防爬行者爆炸。
tile.engineersdecor.panzerglass_slab.name=装甲玻璃台阶
tile.engineersdecor.panzerglass_slab.help=§6强化的玻璃台阶。§r昂贵防爆。深灰色调有隐约可见的结构线和多种纹理。
tile.engineersdecor.treated_wood_floor.name=防腐木地板
tile.engineersdecor.treated_wood_floor.help=§6装饰性地板砖有可变的贴图。§r
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.rebar_concrete_wall.name=钢筋混凝土墙
tile.engineersdecor.rebar_concrete_wall.help=§6钢筋混凝土墙.§r 昂贵,但像黑曜石一样防苦力怕.
tile.engineersdecor.concrete_wall.name=水泥
tile.engineersdecor.concrete_wall.help=§6墙由坚固的混凝土制成.
tile.engineersdecor.clinker_brick_wall.name=Clinker Brick Wall
#tile.engineersdecor.clinker_brick_wall.help=§6Simplistic Clinker Brick Wall.
tile.engineersdecor.slag_brick_wall.name=Slag Brick Wall
#tile.engineersdecor.slag_brick_wall.help=§6Simplistic Slag Brick Wall.
tile.engineersdecor.rebar_concrete_wall.help=§6钢强化的混凝土墙。§r 昂贵但像黑曜石一样防爬行者爆炸。
tile.engineersdecor.concrete_wall.name=混凝土
tile.engineersdecor.concrete_wall.help=§6用坚固混凝土制造的墙。
tile.engineersdecor.clinker_brick_wall.name=过烧砖墙
tile.engineersdecor.clinker_brick_wall.help=§6简单的过烧砖墙。
tile.engineersdecor.slag_brick_wall.name=炉渣砖墙
tile.engineersdecor.slag_brick_wall.help=§6简单的炉渣砖墙。
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.metal_rung_ladder.name=金属环梯
tile.engineersdecor.metal_rung_ladder.help=§6典型的工业墙梯,包括水平金属杆横档.
tile.engineersdecor.metal_rung_steps.name=交错金属台阶
tile.engineersdecor.metal_rung_steps.help=§6贴在墙上的交错的杆横档,允许爬上,爬下等等.
tile.engineersdecor.treated_wood_ladder.name=经过处理的木梯
tile.engineersdecor.treated_wood_ladder.help=§6防风雨的木梯.
tile.engineersdecor.metal_rung_ladder.name=金属蹬梯子
tile.engineersdecor.metal_rung_ladder.help=§6典型的工业墙梯由水平的金属杆蹬组成。§r往上/下看会爬得更快。
tile.engineersdecor.metal_rung_steps.name=交错金属台阶
tile.engineersdecor.metal_rung_steps.help=§6贴在墙上的交错金属杆蹬能够爬上或爬下。§r往上/下看会爬得更快。
tile.engineersdecor.treated_wood_ladder.name=防腐木梯
tile.engineersdecor.treated_wood_ladder.help=§6防风雨的木梯。§r往上/下看会爬得更快。
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.clinker_brick_stairs.name=熟料砖楼梯
tile.engineersdecor.clinker_brick_stairs.help=§6看起来比原版砖块稍暗,颜色更浓.
tile.engineersdecor.clinker_brick_stained_stairs.name=Stained Clinker Brick Stairs
#tile.engineersdecor.clinker_brick_stained_stairs.help=§6Looks slightly darker and more color intensive than the vanilla brick block. Has more visible traces of grime or stain.
tile.engineersdecor.clinker_brick_stairs.name=过烧砖楼梯
tile.engineersdecor.clinker_brick_stairs.help=§6比原版砖看起来颜色更深,色度也更高。
tile.engineersdecor.clinker_brick_stained_stairs.name=污渍过烧砖楼梯
tile.engineersdecor.clinker_brick_stained_stairs.help=§6比原版砖看起来颜色更深,色度也更高。有更多可见的污垢或污迹。
tile.engineersdecor.slag_brick_stairs.name=炉渣砖楼梯
tile.engineersdecor.slag_brick_stairs.help=§6灰褐色砖块楼梯.
tile.engineersdecor.slag_brick_stairs.help=§6一种灰棕色砖块楼梯。
tile.engineersdecor.rebar_concrete_stairs.name=钢筋混凝土楼梯
tile.engineersdecor.rebar_concrete_stairs.help=§6钢筋混凝土楼梯.§r 昂贵,但像黑曜石一样防苦力怕.
tile.engineersdecor.rebar_concrete_tile_stairs.name=Rebar Concrete Tile Stairs
#tile.engineersdecor.rebar_concrete_tile_stairs.help=§6Steel reinforced concrete tile stairs.§r Expensive but Creeper-proof like obsidian.
tile.engineersdecor.rebar_concrete_stairs.help=§6钢强化的混凝土楼梯。§r昂贵但像黑曜石一样防爬行者爆炸。
tile.engineersdecor.rebar_concrete_tile_stairs.name=钢筋混凝土砖楼梯
tile.engineersdecor.rebar_concrete_tile_stairs.help=§6钢强化的混凝土砖楼梯。§r昂贵但像黑曜石一样防爬行者爆炸。
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.treated_wood_pole.name=直立处理木杆
tile.engineersdecor.treated_wood_pole.help=§6具有导线继电器直径的直极片段.§r\n如果需要特殊的特殊长度,或作为结构的支撑,可以作为线柱的替代品.
tile.engineersdecor.treated_wood_pole_head.name=Straight Treated Wood Pole Head/Foot
#tile.engineersdecor.treated_wood_pole_head.help=§6Wooden part fitting as foot or head of straight poles.
tile.engineersdecor.treated_wood_pole_support.name=Straight Treated Wood Pole Support
#tile.engineersdecor.treated_wood_pole_support.help=§6Heavy duty wooden support part fitting as foot or head of straight poles.
tile.engineersdecor.thick_steel_pole.name=Straight Thick Steel Pole
#tile.engineersdecor.thick_steel_pole.help=§6Straight hollow pole fragment (6x6x16) for structural support purposes.
tile.engineersdecor.thin_steel_pole.name=Straight Thin Steel Pole
#tile.engineersdecor.thin_steel_pole.help=§6Straight hollow pole fragment (4x4x16) for structural support purposes.
tile.engineersdecor.thin_steel_pole_head.name=Straight Thin Steel Pole head/foot
#tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or head of the thin steel pole (4x4x16).
tile.engineersdecor.thick_steel_pole_head.name=Straight Thick Steel Pole Head/Foot
#tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16).
tile.engineersdecor.steel_double_t_support.name=Steel Double T Support
#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support beam fragment.
tile.engineersdecor.treated_wood_pole.name=直防腐木杆
tile.engineersdecor.treated_wood_pole.help=§6直杆的一段有着继电器的直径。§r\n\
在需要特殊长度电线杆的时候很有用,\
也可以作为结构的柱子。
tile.engineersdecor.treated_wood_pole_head.name=直防腐木杆头/尾
tile.engineersdecor.treated_wood_pole_head.help=§6木制部件适合作为直杆的头或尾。
tile.engineersdecor.treated_wood_pole_support.name=直防腐木杆支撑
tile.engineersdecor.treated_wood_pole_support.help=§6重型木制支撑部件适合作为直杆的头或尾。
tile.engineersdecor.thick_steel_pole.name=直粗钢杆
tile.engineersdecor.thick_steel_pole.help=§6一段直空心杆(6x6x16),适合用于结构支撑。
tile.engineersdecor.thin_steel_pole.name=直细钢杆
tile.engineersdecor.thin_steel_pole.help=§6一段直空心杆(4x4x16),适合用于结构支撑。
tile.engineersdecor.thin_steel_pole_head.name=直细钢杆头/尾
tile.engineersdecor.thin_steel_pole_head.help=§6钢制部件适合作为细钢杆(4x4x16)的头或尾。
tile.engineersdecor.thick_steel_pole_head.name=直粗钢杆头/尾
tile.engineersdecor.thick_steel_pole_head.help=§6钢制部件适合作为粗钢杆(6x6x16)的头或尾。
tile.engineersdecor.steel_double_t_support.name=钢制双T型支架
tile.engineersdecor.steel_double_t_support.help=§6一段水平吊顶支撑梁。
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.treated_wood_table.name=经过处理的木桌
tile.engineersdecor.treated_wood_table.help=§6坚固的四足木桌.
tile.engineersdecor.steel_table.name=Steel Table
#tile.engineersdecor.steel_table.help=§6Robust four-legged steel table.
tile.engineersdecor.steel_floor_grating.name=Steel Floor Grating
#tile.engineersdecor.steel_floor_grating.help=§6Decorative steel floor covering.§r Top aligned. Items fall through.
tile.engineersdecor.treated_wood_stool.name=Treated Wood Stool
#tile.engineersdecor.treated_wood_stool.help=§6Robust Wood Stool.§r Indoor and outdoor use.
tile.engineersdecor.treated_wood_crafting_table.name=Treated Wood Crafting Table
#tile.engineersdecor.treated_wood_crafting_table.help=§6Robust and weather-proof.§r Eight storage slots, keeps inventory, no vanilla recipe book.\n\
Click up/down arrow buttons for crafting history selection, output slot for item placement, X-button \
to clear crafting grid and history. Shift-click stack: player-to-storage stack transfer when crafting \
grid empty, otherwise player-to-grid stack transfer. Automatically distributes the clicked stack.
tile.engineersdecor.treated_wood_side_table.name=Treated Wood Side Table
#tile.engineersdecor.treated_wood_side_table.help=§6Needed after the work's done.
tile.engineersdecor.iron_inset_light.name=Inset Light
#tile.engineersdecor.iron_inset_light.help=§6Small glowstone light source, sunk into the floor, ceiling or wall.§r\n\
Useful to light up places where electrical light installations are problematic.\
Light level like a torch.
tile.engineersdecor.treated_wood_window.name=Treated Wood Window
#tile.engineersdecor.treated_wood_window.help=§6Wood framed triple glazed window. Well insulating.§r Does not connect to adjacent blocks like glass panes.
tile.engineersdecor.treated_wood_windowsill.name=Treated Wood Window Sill
#tile.engineersdecor.treated_wood_windowsill.help=§6Simple window decoration.
tile.engineersdecor.treated_wood_broad_windowsill.name=Broad Treated Wood Window Sill
#tile.engineersdecor.treated_wood_broad_windowsill.help=§6Simple window decoration.
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.treated_wood_table.name=防腐木桌
tile.engineersdecor.treated_wood_table.help=§6结实的四脚木桌。§r适用于室内和室外使用。
tile.engineersdecor.steel_table.name=钢桌
tile.engineersdecor.steel_table.help=§6结实的四脚钢桌。
tile.engineersdecor.steel_floor_grating.name=钢地板格栅
tile.engineersdecor.steel_floor_grating.help=§6装饰用钢制地板盖。§r顶端对齐。掉落物会穿过。
tile.engineersdecor.treated_wood_stool.name=防腐木凳
tile.engineersdecor.treated_wood_stool.help=§6坚固的木凳。§r适用于室内和室外使用。
tile.engineersdecor.treated_wood_crafting_table.name=防腐木合成台
tile.engineersdecor.treated_wood_crafting_table.help=§6坚固防风防雨。§r内含八个存储格破坏后保留内容物没有原版合成书。\n\
单击上/下箭头按钮可选择合成历史单击输出格自动放置物品单击X按钮\
清除合成栏和历史。Shift单击一叠物品合成格空时转移到存储格\
非空时到合成栏。会自动分配转移的物品。
tile.engineersdecor.treated_wood_side_table.name=防腐木茶几
tile.engineersdecor.treated_wood_side_table.help=§6干完活后需要喝杯茶。
tile.engineersdecor.iron_inset_light.name=嵌入灯
tile.engineersdecor.iron_inset_light.help=§6小型荧石光源能嵌入地板、天花板或墙里。§r\n\
用于照亮电力光源难以安装的地方。\
亮度与火把一样。
tile.engineersdecor.iron_floor_edge_light.name=Inset Floor Edge Light
#tile.engineersdecor.iron_floor_edge_light.help=§6Small glowstone light source, placed at the edge of a floor block.§r\n\
Useful to light up places where electrical light installations are problematic.
tile.engineersdecor.treated_wood_window.name=防腐木窗
tile.engineersdecor.treated_wood_window.help=§6木框三层玻璃窗。绝缘良好。§r不像玻璃板一样连接到相邻方块。
tile.engineersdecor.treated_wood_windowsill.name=防腐木窗台
tile.engineersdecor.treated_wood_windowsill.help=§6简单的窗户装饰。
tile.engineersdecor.treated_wood_broad_windowsill.name=宽防腐木窗台
tile.engineersdecor.treated_wood_broad_windowsill.help=§6简单的窗户装饰。
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.small_lab_furnace.name=Small Laboratory Furnace
#tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Solid fuel consuming, updraught. \
Slightly hotter and better isolated than a cobblestone furnace, therefore more efficient. \
Two auxiliary slots e.g. for storage. Two stack internal hopper fifos for input, output, \
and fuel. Place an external heater into a aux slot and connect power for electrical \
smelting speed boost.
tile.engineersdecor.small_electrical_furnace.name=Small Electrical Furnace
#tile.engineersdecor.small_electrical_furnace.help=§6Small metal cased pass-through furnace.§r \
Automatically draws items from the input side and puts items into the inventory at the output side. \
Items can be inserted or drawn from all sides using hoppers. Implicitly bypasses items that cannot be \
smelted or cooked to the output. Slightly more energy efficient and faster than a heated cobblestone \
furnace. Fifos and feeders transfer whole stacks. Feeders require a bit of power.
tile.engineersdecor.small_waste_incinerator.name=Small Waste Incinerator
#tile.engineersdecor.small_waste_incinerator.help=§6Trash with internal fifo slots.§r Items can be inserted on all sides, and are kept until \
there is no space left in the fifo. After that the oldest stack will be incinerated. Apply \
electrical RF/FE power to increase the processing speed. Keeps its inventory when being \
relocated.
tile.engineersdecor.small_lab_furnace.name=小型实验室炉
tile.engineersdecor.small_lab_furnace.help=§6小型金属壳实验室窑。§r消耗固体燃料向上排气。\
比圆石炉稍微热一点,隔热性也更好,因此效率更高。 \
有两个用于储存的辅助格。两个堆叠的内部漏斗对输入、输出和燃料进行队列管理。\
在辅助格放置一个外置加热器并通入电力可以加快熔炼速度。
tile.engineersdecor.small_electrical_furnace.name=小型电炉
tile.engineersdecor.small_electrical_furnace.help=§6小型金属封装穿过式熔炉。§r \
自动从输入端获取物品并在输出端物品栏放置物品。\
物品能从所有面使用漏斗插入或提取。无法熔炼或烹饪的物品会直接送到出口。\
比加热的圆石炉有稍微高的能效比和更快。\
先进先出和自动输出一次移动一组物品。自动输出需要一点能量。
tile.engineersdecor.small_waste_incinerator.name=小型垃圾焚烧炉
tile.engineersdecor.small_waste_incinerator.help=§6有内部先进先出队列的垃圾桶。§r物品可以从任何一面插入而且\
直到队列满都会保留。一旦超过队列上限,最老的物品会被焚毁。\
通入RF/FE会增加处理速度。破坏时保留内部未销毁的物品。
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.straight_pipe_valve.name=Fluid Pipe Check Valve
#tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \
Does not connect to the sides. Reduces flow rate. Sneak to place in reverse direction.
tile.engineersdecor.straight_pipe_valve_redstone.name=Redstone Controlled Fluid Valve
#tile.engineersdecor.straight_pipe_valve_redstone.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \
Does not connect to the sides. Sneak to place in reverse direction. \
Blocks if not redstone powered.
tile.engineersdecor.straight_pipe_valve_redstone_analog.name=Redstone Analog Fluid Valve
#tile.engineersdecor.straight_pipe_valve_redstone_analog.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \
Does not connect to the sides. Sneak to place in reverse direction. \
Blocks if not redstone powered, reduces the flow rate linear from power 1 to 14, \
opens to maximum possible valve flow rate for power 15.
tile.engineersdecor.passive_fluid_accumulator.name=Passive Fluid Accumulator
#tile.engineersdecor.passive_fluid_accumulator.help=§6Vacuum suction based fluid collector.§r Has one output, all other sides are input. \
Drains fluids from adjacent tanks when being drained from the output port by a pump.
tile.engineersdecor.straight_pipe_valve.name=输液管止回阀
tile.engineersdecor.straight_pipe_valve.help=§6一段直输液管。§r单向传递流体。\
侧面不会与管道连接。会减少流速。潜行能反方向放置。
tile.engineersdecor.straight_pipe_valve_redstone.name=红石控制流体阀
tile.engineersdecor.straight_pipe_valve_redstone.help=§6一段直输液管。§r单向传递流体。\
侧面不会与管道连接。会减少流速。潜行能反方向放置。\
没有红石信号时断流。
tile.engineersdecor.straight_pipe_valve_redstone_analog.name=红石模拟流体阀
tile.engineersdecor.straight_pipe_valve_redstone_analog.help=§6一段直输液管。§r单向传递流体。\
侧面不会与管道连接。会减少流速。潜行能反方向放置。\
没有红石信号时断流流速与红石信号强度从1到14线性增长\
15时流速上限达到最大。
tile.engineersdecor.passive_fluid_accumulator.name=被动流体累积器。
tile.engineersdecor.passive_fluid_accumulator.help=§6基于真空吸力的流体收集器。§r有一个输出面其他面都是输入。\
当从输出面被泵抽取时,从输入面邻接储罐抽取液体。
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.factory_dropper.name=Factory Dropper
#tile.engineersdecor.factory_dropper.help=§6Dropper suitable for advanced factory automation.§r Has twelve round-robin selected slots. \
Drop force, angle, stack size, and cool-down delay adjustable in the GUI. Three stack compare \
slots with logical AND or OR can be used as internal trigger source. Internal trigger can be \
AND'ed or OR'ed with the external redstone signal trigger. Trigger simulation buttons for testing. \
Pre-opens shutter door when internal trigger conditions are met. Drops all matching stacks \
simultaneously. Click on all elements in the GUI to see how it works.
tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace
#tile.engineersdecor.small_mineral_smelter.help=§6High temperature, high insulation electrical stone melting furnace.§r\n\
Heats up mineral blocks to magma blocks, and finally to lava. Due to the \
miniturized device size the process is rather inefficient - much time and \
energy is needed to liquefy a stone block.
tile.engineersdecor.small_solar_panel.name=Small Solar Panel
#tile.engineersdecor.small_solar_panel.help=§6Produces a small amount of power when exposed to sunlight.§r\n\
Useful for charging LF capacitors in remote systems with low consumption. The \
internal charge pump circuit accumulates and frequently transfers RF. Production \
depends on day time and the weather.
tile.engineersdecor.small_tree_cutter.name=Small Tree Cutter
#tile.engineersdecor.small_tree_cutter.help=§6Chops grown trees in front of it.§r\n\
Does not collect the lumbers. Deactivate with a redstone signal. \
Provide RF power to boost the cutting speed (takes a long time without power).
tile.engineersdecor.factory_dropper.name=工厂掉落器
tile.engineersdecor.factory_dropper.help=§6适用于高级工厂自动化的掉落器。§r有十二个轮询选择的储物格。\
掉落的力度、角度、一叠数量和冷却延时可在GUI调节。三个\
内部比较槽带有逻辑与或逻辑或功能,可用作内部触发源。内部触发\
还能和外部红石信号触发再进行逻辑与或逻辑或。触发模拟按钮仅作测试用途。\
当内部触发条件满足时,预先打开卷帘门。所有符合条件的物品\
会同时掉落。点击GUI的各处来了解如何运作。
tile.engineersdecor.factory_hopper.name=Factory Hopper
#tile.engineersdecor.factory_hopper.help=§6Hopper suitable for advanced factory automation.§r
tile.engineersdecor.small_mineral_smelter.name=小型矿物熔炼炉
tile.engineersdecor.small_mineral_smelter.help=§6高温、高绝缘电熔石炉。§r\n\
把矿物块加热成岩浆块,最后变成熔岩。由于\
小型化的设备大小,该过程效率不高,需要大量时间和能源\
来液化一块石头。
tile.engineersdecor.small_solar_panel.name=小型太阳能板
tile.engineersdecor.small_solar_panel.help=§6暴露在阳光下时产生少量能量。§r\n\
用于低消耗地在远程系统给低压电容器充电。\
内部电荷泵电路积累并频繁输出RF。产出取决于时间\
和天气。
tile.engineersdecor.small_tree_cutter.name=小型砍树机
tile.engineersdecor.small_tree_cutter.help=§6砍倒正前方的树。§r\n\
不收集木材。通入红石信号停用。\
提供RF来加快砍树速度。没有的话会很慢。
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.sign_decor.name=Sign Plate (Engineer's decor)
#tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots.
tile.engineersdecor.sign_hotwire.name=Sign "Caution Hot Wire"
#tile.engineersdecor.sign_hotwire.help=§6Electrical hazard warning. Don't forget to place around HV, or you will have a nonconformity in the next audit.
tile.engineersdecor.sign_mindstep.name=Sign "Mind The Step"
#tile.engineersdecor.sign_mindstep.help=§6Placable on walls (horizontally).
tile.engineersdecor.sign_danger.name=Sign "Caution Really Dangerous There"
#tile.engineersdecor.sign_danger.help=§6General danger warning.
tile.engineersdecor.sign_defense.name=Sign "Caution Defense System Ahead"
#tile.engineersdecor.sign_defense.help=§6Warning sign for turrets, Tesla Coils, and traps.
tile.engineersdecor.sign_factoryarea.name=Sign "Factory Area"
#tile.engineersdecor.sign_factoryarea.help=§6Marker sign for buildings or areas where the really big machines are located.
tile.engineersdecor.sign_exit.name=Exit Sign
#tile.engineersdecor.sign_factoryarea.help=§6There's the door, please ...
tile.engineersdecor.sign_decor.name=标志板(工程师的装饰)
tile.engineersdecor.sign_decor.help=§6这不应该可合成或在JEI看到。用于创造模式的物品栏标签和截屏。
tile.engineersdecor.sign_hotwire.name=指示牌 "小心电线"
tile.engineersdecor.sign_hotwire.help=§6电气危害警告。不要忘记在高压线周围放置否则下次审计时你会发现不合格。
tile.engineersdecor.sign_mindstep.name=指示牌 "小心脚滑"
tile.engineersdecor.sign_mindstep.help=§6能水平放在墙上。
tile.engineersdecor.sign_danger.name=指示牌 "小心危险"
tile.engineersdecor.sign_danger.help=§6通用危险警告。
tile.engineersdecor.sign_defense.name=指示牌 "小心防御系统"
tile.engineersdecor.sign_defense.help=§6用于警告炮塔、特斯拉线圈和陷阱。
tile.engineersdecor.sign_factoryarea.name=指示牌 "工厂区域"
tile.engineersdecor.sign_factoryarea.help=§6用于指示真的很大的机器所在的建筑和区域。
tile.engineersdecor.sign_exit.name=出口指示牌
#tile.engineersdecor.sign_exit.help=§6There's the door, please ...
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.halfslab_rebar_concrete.name=Rebar Concrete Slice
#tile.engineersdecor.halfslab_rebar_concrete.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_concrete.name=Concrete Slice
#tile.engineersdecor.halfslab_concrete.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_treated_wood.name=Treated Wood Slice
#tile.engineersdecor.halfslab_treated_wood.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_iron.name=Iron Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_iron.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_steel.name=Steel Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_steel.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_copper.name=Copper Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_copper.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_gold.name=Gold Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_gold.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.halfslab_sheetmetal_aluminum.name=Aluminum Sheet Metal Slice
#tile.engineersdecor.halfslab_sheetmetal_aluminum.help=§6Vertically stackable slice.§r Right/left click with the slice stack on the top or bottom surface to add/remove slices.
tile.engineersdecor.testblock.name=ED Test Block (do NOT use)
#tile.engineersdecor.testblock.help=§6Uncraftable mod testing block with changing experimental functionality. DO NOT USE, may even cause a crash in the worst case!!
tile.engineersdecor.halfslab_rebar_concrete.name=强化混凝土切片
tile.engineersdecor.halfslab_rebar_concrete.help=§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。
tile.engineersdecor.halfslab_concrete.name=混凝土切片
tile.engineersdecor.halfslab_concrete.help=§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。
tile.engineersdecor.halfslab_treated_wood.name=防腐木切片
tile.engineersdecor.halfslab_treated_wood.help=§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。
tile.engineersdecor.halfslab_sheetmetal_iron.name=铁板金属块切片
tile.engineersdecor.halfslab_sheetmetal_iron.help=§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。
tile.engineersdecor.halfslab_sheetmetal_steel.name=钢板金属块切片
tile.engineersdecor.halfslab_sheetmetal_steel.help=§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。
tile.engineersdecor.halfslab_sheetmetal_copper.name=铜板金属块切片
tile.engineersdecor.halfslab_sheetmetal_copper.help=§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。
tile.engineersdecor.halfslab_sheetmetal_gold.name=金板金属块切片
tile.engineersdecor.halfslab_sheetmetal_gold.help=§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。
tile.engineersdecor.halfslab_sheetmetal_aluminum.name=铝板金属块切片
tile.engineersdecor.halfslab_sheetmetal_aluminum.help=§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。
tile.engineersdecor.testblock.name=ED测试方块(不要使用)(do NOT use)
tile.engineersdecor.testblock.help=§6不可合成的测试方块有着经常变动的测试功能不要使用最坏可能会游戏崩溃
#-----------------------------------------------------------------------------------------------------------
engineersdecor.config.title=工程师的装饰配置
engineersdecor.config.pattern_excludes=Pattern excludes
engineersdecor.config.pattern_includes=Pattern includes
engineersdecor.config.without_clinker_bricks=Without clinker bricks
engineersdecor.config.without_slag_bricks=Without slag bricks
engineersdecor.config.without_rebar_concrete=Without rebar concrete
engineersdecor.config.without_walls=Without walls
engineersdecor.config.without_stairs=Without stairs
engineersdecor.config.without_ie_concrete_wall=Without concrete wall
engineersdecor.config.without_panzer_glass=Without panzer glass
engineersdecor.config.without_crafting_table=Without crafting table
engineersdecor.config.without_lab_furnace=Without lab furnace
engineersdecor.config.without_electrical_furnace=Without electrical furnace
engineersdecor.config.without_treated_wood_furniture=Without tr. wood furniture
engineersdecor.config.without_windows=Without windows
engineersdecor.config.without_light_sources=Without lights
engineersdecor.config.without_ladders=Without ladders
engineersdecor.config.without_chair_sitting=Without chair sitting
engineersdecor.config.without_mob_chair_sitting=Without chair mob sitting
engineersdecor.config.without_ladder_speed_boost=Without ladder speed boost
engineersdecor.config.without_crafting_table_history=Without crafting table history
engineersdecor.config.without_valves=Without valves
engineersdecor.config.without_passive_fluid_accumulator=Without fluid accumulator
engineersdecor.config.without_waste_incinerator=Without waste incinerator
engineersdecor.config.without_sign_plates=Without signs
engineersdecor.config.without_factory_dropper=Without factory dropper
engineersdecor.config.without_slabs=Without slabs
engineersdecor.config.without_halfslabs=Without slab slices
engineersdecor.config.without_direct_slab_pickup=Without slab pickup
engineersdecor.config.without_poles=Without poles
engineersdecor.config.without_hsupports=Without h. supports
engineersdecor.config.without_tooltips=Without tooltips
engineersdecor.config.without_recipes=Without recipes
engineersdecor.config.furnace_smelting_speed_percent=Furnace: Smelting speed %
engineersdecor.config.furnace_fuel_efficiency_percent=Furnace: Fuel efficiency %
engineersdecor.config.furnace_boost_energy_consumption=Furnace: Boost energy
engineersdecor.config.chair_mob_sitting_probability_percent=Chairs: Sitting chance %
engineersdecor.config.chair_mob_standup_probability_percent="Chairs: Stand up chance %"
engineersdecor.config.with_crafting_quickmove_buttons=Crafting table: Move buttons
engineersdecor.config.pipevalve_max_flowrate=Valves: Max flow rate
engineersdecor.config.pipevalve_redstone_gain=Valves: Redstone slope
engineersdecor.config.e_furnace_speed_percent=E-furnace: Smelting speed %
engineersdecor.config.e_furnace_power_consumption=E-furnace: Power consumption
engineersdecor.config.pattern_excludes=模式不包括
engineersdecor.config.pattern_includes=模式包括
engineersdecor.config.without_clinker_bricks=不要过烧砖
engineersdecor.config.without_slag_bricks=不要炉渣砖
engineersdecor.config.without_rebar_concrete=不要强化混凝土
engineersdecor.config.without_walls=不要墙
engineersdecor.config.without_stairs=不要楼梯
engineersdecor.config.without_ie_concrete_wall=不要混凝土墙
engineersdecor.config.without_panzer_glass=不要装甲玻璃
engineersdecor.config.without_crafting_table=不要合成台
engineersdecor.config.without_lab_furnace=不要实验室炉
engineersdecor.config.without_electrical_furnace=不要电炉
engineersdecor.config.without_treated_wood_furniture=不要防腐木家具
engineersdecor.config.without_windows=不要窗户
engineersdecor.config.without_light_sources=不要灯
engineersdecor.config.without_ladders=不要梯子
engineersdecor.config.without_chair_sitting=椅子不能坐
engineersdecor.config.without_mob_chair_sitting=椅子不能给其他生物坐
engineersdecor.config.without_ladder_speed_boost=不要爬梯加速
engineersdecor.config.without_crafting_table_history=不要合成台历史
engineersdecor.config.without_valves=不要阀门
engineersdecor.config.without_passive_fluid_accumulator=不要流体积累器
engineersdecor.config.without_waste_incinerator=不要焚烧炉
engineersdecor.config.without_sign_plates=不要标志牌
engineersdecor.config.without_factory_dropper=不要工厂掉落器
engineersdecor.config.without_slabs=不要台阶
engineersdecor.config.without_halfslabs=不要台阶切片
engineersdecor.config.without_direct_slab_pickup=不要快速捡起台阶
engineersdecor.config.without_poles=不要杆
engineersdecor.config.without_hsupports=不要支撑
engineersdecor.config.without_tooltips=不要工具提示
engineersdecor.config.without_recipes=不要配方
engineersdecor.config.furnace_smelting_speed_percent=熔炉:熔炼速度 %
engineersdecor.config.furnace_fuel_efficiency_percent=熔炉:燃料效率 %
engineersdecor.config.furnace_boost_energy_consumption=熔炉:能量加速
engineersdecor.config.chair_mob_sitting_probability_percent=椅子:坐下机率 %
engineersdecor.config.chair_mob_standup_probability_percent="椅子:站起机率 %"
engineersdecor.config.with_crafting_quickmove_buttons=合成台:移动按钮
engineersdecor.config.pipevalve_max_flowrate=阀门:最大流速
engineersdecor.config.pipevalve_redstone_gain=阀门:红石斜率
engineersdecor.config.e_furnace_speed_percent=电炉:熔炉速度 %
engineersdecor.config.e_furnace_power_consumption=电炉:能量消耗
#-----------------------------------------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------------------------------------

View file

@ -0,0 +1,255 @@
{
"parent": "block/cube",
"textures": {
"t": "engineersdecor:blocks/device/factory_hopper_top",
"b": "engineersdecor:blocks/device/factory_hopper_bottom",
"s": "engineersdecor:blocks/device/factory_hopper_side",
"particle": "engineersdecor:blocks/device/factory_hopper_side",
"f": "engineersdecor:blocks/device/factory_hopper_front"
},
"elements": [
{
"from": [2, 7, 2],
"to": [14, 11, 14],
"faces": {
"north": {"uv": [2, 5, 14, 9], "texture": "#f"},
"east": {"uv": [2, 5, 14, 9], "texture": "#s"},
"south": {"uv": [2, 5, 14, 9], "texture": "#s"},
"west": {"uv": [2, 5, 14, 9], "texture": "#s"},
"up": {"uv": [2, 2, 14, 14], "texture": "#t"},
"down": {"uv": [2, 2, 14, 14], "texture": "#b"}
}
},
{
"from": [4, 1, 4],
"to": [12, 7, 12],
"faces": {
"north": {"uv": [4, 9, 12, 15], "texture": "#f"},
"east": {"uv": [4, 9, 12, 15], "texture": "#s"},
"south": {"uv": [4, 9, 12, 15], "texture": "#s"},
"west": {"uv": [4, 9, 12, 15], "texture": "#s"},
"up": {"uv": [4, 4, 12, 12], "texture": "#s"},
"down": {"uv": [4, 4, 12, 12], "texture": "#b"}
}
},
{
"from": [0, 4, 5],
"to": [2, 10, 11],
"faces": {
"north": {"uv": [14, 6, 16, 12], "texture": "#f"},
"east": {"uv": [5, 6, 11, 12], "texture": "#s"},
"south": {"uv": [0, 6, 2, 12], "texture": "#s"},
"west": {"uv": [5, 6, 11, 12], "texture": "#s"},
"up": {"uv": [0, 5, 2, 11], "texture": "#s"},
"down": {"uv": [0, 5, 2, 11], "texture": "#b"}
}
},
{
"from": [14, 4, 5],
"to": [16, 10, 11],
"faces": {
"north": {"uv": [0, 6, 2, 12], "texture": "#f"},
"east": {"uv": [5, 6, 11, 12], "texture": "#s"},
"south": {"uv": [14, 6, 16, 12], "texture": "#s"},
"west": {"uv": [5, 6, 11, 12], "texture": "#s"},
"up": {"uv": [14, 5, 16, 11], "texture": "#s"},
"down": {"uv": [14, 5, 16, 11], "texture": "#b"}
}
},
{
"from": [2, 3, 5],
"to": [4, 5, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [12, 11, 14, 13], "texture": "#f"},
"east": {"uv": [5, 11, 11, 13], "texture": "#s"},
"south": {"uv": [2, 11, 4, 13], "texture": "#s"},
"west": {"uv": [5, 11, 11, 13], "texture": "#s"},
"up": {"uv": [2, 5, 4, 11], "texture": "#s"},
"down": {"uv": [2, 5, 4, 11], "texture": "#b"}
}
},
{
"from": [12, 3, 5],
"to": [14, 5, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 11, 4, 13], "texture": "#f"},
"east": {"uv": [5, 11, 11, 13], "texture": "#s"},
"south": {"uv": [12, 11, 14, 13], "texture": "#s"},
"west": {"uv": [5, 11, 11, 13], "texture": "#s"},
"up": {"uv": [12, 5, 14, 11], "texture": "#s"},
"down": {"uv": [12, 5, 14, 11], "texture": "#b"}
}
},
{
"from": [5, 4, 14],
"to": [11, 10, 16],
"faces": {
"north": {"uv": [5, 6, 11, 12], "texture": "#s"},
"east": {"uv": [0, 6, 2, 12], "texture": "#s"},
"south": {"uv": [5, 6, 11, 12], "texture": "#s"},
"west": {"uv": [14, 6, 16, 12], "texture": "#s"},
"up": {"uv": [5, 14, 11, 16], "texture": "#s"},
"down": {"uv": [5, 0, 11, 2], "texture": "#b"}
}
},
{
"from": [5, 3, 12],
"to": [11, 5, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 11, 11, 13], "texture": "#s"},
"east": {"uv": [2, 11, 4, 13], "texture": "#s"},
"south": {"uv": [5, 11, 11, 13], "texture": "#s"},
"west": {"uv": [12, 11, 14, 13], "texture": "#s"},
"up": {"uv": [5, 12, 11, 14], "texture": "#s"},
"down": {"uv": [5, 2, 11, 4], "texture": "#b"}
}
},
{
"from": [5, 0, 5],
"to": [11, 1, 11],
"faces": {
"north": {"uv": [5, 15, 11, 16], "texture": "#f"},
"east": {"uv": [5, 15, 11, 16], "texture": "#s"},
"south": {"uv": [5, 15, 11, 16], "texture": "#s"},
"west": {"uv": [5, 15, 11, 16], "texture": "#s"},
"up": {"uv": [5, 5, 11, 11], "texture": "#s"},
"down": {"uv": [5, 5, 11, 11], "texture": "#b"}
}
},
{
"from": [5, 1, 1],
"to": [11, 7, 4],
"faces": {
"north": {"uv": [5, 9, 11, 15], "texture": "#f"},
"east": {"uv": [12, 9, 15, 15], "texture": "#s"},
"south": {"uv": [5, 9, 11, 15], "texture": "#t"},
"west": {"uv": [1, 9, 4, 15], "texture": "#s"},
"up": {"uv": [5, 1, 11, 4], "texture": "#s"},
"down": {"uv": [5, 12, 11, 15], "texture": "#b"}
}
},
{
"from": [5, 1, 0],
"to": [11, 2, 1],
"faces": {
"north": {"uv": [5, 14, 11, 15], "texture": "#f"},
"east": {"uv": [15, 14, 16, 15], "texture": "#s"},
"south": {"uv": [5, 14, 11, 15], "texture": "#t"},
"west": {"uv": [0, 14, 1, 15], "texture": "#s"},
"up": {"uv": [5, 0, 11, 1], "texture": "#s"},
"down": {"uv": [5, 15, 11, 16], "texture": "#b"}
}
},
{
"from": [5, 6, 0],
"to": [11, 7, 1],
"faces": {
"north": {"uv": [5, 9, 11, 10], "texture": "#f"},
"east": {"uv": [15, 9, 16, 10], "texture": "#s"},
"south": {"uv": [5, 9, 11, 10], "texture": "#t"},
"west": {"uv": [0, 9, 1, 10], "texture": "#s"},
"up": {"uv": [5, 0, 11, 1], "texture": "#s"},
"down": {"uv": [5, 15, 11, 16], "texture": "#s"}
}
},
{
"from": [5, 2, 0],
"to": [6, 6, 1],
"faces": {
"north": {"uv": [10, 10, 11, 14], "texture": "#f"},
"east": {"uv": [15, 10, 16, 14], "texture": "#s"},
"south": {"uv": [5, 10, 6, 14], "texture": "#t"},
"west": {"uv": [0, 10, 1, 14], "texture": "#s"},
"up": {"uv": [5, 0, 6, 1], "texture": "#s"},
"down": {"uv": [5, 15, 6, 16], "texture": "#s"}
}
},
{
"from": [10, 2, 0],
"to": [11, 6, 1],
"faces": {
"north": {"uv": [5, 10, 6, 14], "texture": "#f"},
"east": {"uv": [15, 10, 16, 14], "texture": "#s"},
"south": {"uv": [10, 10, 11, 14], "texture": "#t"},
"west": {"uv": [0, 10, 1, 14], "texture": "#s"},
"up": {"uv": [10, 0, 11, 1], "texture": "#s"},
"down": {"uv": [10, 15, 11, 16], "texture": "#s"}
}
},
{
"from": [14, 10, 2],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 2, 6], "texture": "#b"},
"east": {"uv": [0, 0, 14, 6], "texture": "#s"},
"south": {"uv": [14, 0, 16, 6], "texture": "#s"},
"west": {"uv": [2, 2, 16, 8], "texture": "#t"},
"up": {"uv": [14, 2, 16, 16], "texture": "#t"},
"down": {"uv": [14, 0, 16, 14], "texture": "#b"}
}
},
{
"from": [0, 10, 0],
"to": [16, 16, 2],
"faces": {
"north": {"uv": [0, 0, 16, 6], "texture": "#f"},
"east": {"uv": [14, 0, 16, 6], "texture": "#s"},
"south": {"uv": [0, 2, 16, 8], "texture": "#t"},
"west": {"uv": [0, 0, 2, 6], "texture": "#s"},
"up": {"uv": [0, 0, 16, 2], "texture": "#t"},
"down": {"uv": [0, 14, 16, 16], "texture": "#b"}
}
},
{
"from": [0, 10, 14],
"to": [14, 16, 16],
"faces": {
"north": {"uv": [2, 2, 16, 8], "texture": "#t"},
"east": {"uv": [0, 0, 2, 6], "texture": "#s"},
"south": {"uv": [0, 0, 14, 6], "texture": "#s"},
"west": {"uv": [14, 0, 16, 6], "texture": "#s"},
"up": {"uv": [0, 14, 14, 16], "texture": "#t"},
"down": {"uv": [0, 0, 14, 2], "texture": "#b"}
}
},
{
"from": [0, 10, 2],
"to": [2, 16, 14],
"faces": {
"north": {"uv": [14, 0, 16, 6], "texture": "#b"},
"east": {"uv": [2, 2, 14, 8], "texture": "#t"},
"south": {"uv": [0, 0, 2, 6], "texture": "#t"},
"west": {"uv": [2, 0, 14, 6], "texture": "#s"},
"up": {"uv": [0, 2, 2, 14], "texture": "#t"},
"down": {"uv": [0, 2, 2, 14], "texture": "#b"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [85, 3, -10],
"translation": [1.75, -2.25, -2.25],
"scale": [0.35, 0.35, 0.35]
},
"firstperson_righthand": {
"rotation": [22, 65, -44],
"translation": [0.5, 0, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, -0.75, 0],
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"translation": [0, -0.25, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -0,0 +1,260 @@
{
"parent": "block/cube",
"textures": {
"t": "engineersdecor:blocks/device/factory_hopper_top",
"b": "engineersdecor:blocks/device/factory_hopper_bottom",
"s": "engineersdecor:blocks/device/factory_hopper_side",
"particle": "engineersdecor:blocks/device/factory_hopper_side"
},
"elements": [
{
"from": [2, 7, 2],
"to": [14, 11, 14],
"faces": {
"north": {"uv": [2, 5, 14, 9], "texture": "#s"},
"east": {"uv": [2, 5, 14, 9], "texture": "#s"},
"south": {"uv": [2, 5, 14, 9], "texture": "#s"},
"west": {"uv": [2, 5, 14, 9], "texture": "#s"},
"up": {"uv": [2, 2, 14, 14], "texture": "#t"},
"down": {"uv": [2, 2, 14, 14], "texture": "#b"}
}
},
{
"from": [4, 1, 4],
"to": [12, 7, 12],
"faces": {
"north": {"uv": [4, 9, 12, 15], "texture": "#s"},
"east": {"uv": [4, 9, 12, 15], "texture": "#s"},
"south": {"uv": [4, 9, 12, 15], "texture": "#s"},
"west": {"uv": [4, 9, 12, 15], "texture": "#s"},
"up": {"uv": [4, 4, 12, 12], "texture": "#s"},
"down": {"uv": [4, 4, 12, 12], "texture": "#b"}
}
},
{
"from": [0, 4, 5],
"to": [2, 10, 11],
"faces": {
"north": {"uv": [14, 6, 16, 12], "texture": "#s"},
"east": {"uv": [5, 6, 11, 12], "texture": "#s"},
"south": {"uv": [0, 6, 2, 12], "texture": "#s"},
"west": {"uv": [5, 6, 11, 12], "texture": "#s"},
"up": {"uv": [0, 5, 2, 11], "texture": "#s"},
"down": {"uv": [0, 5, 2, 11], "texture": "#b"}
}
},
{
"from": [14, 4, 5],
"to": [16, 10, 11],
"faces": {
"north": {"uv": [0, 6, 2, 12], "texture": "#s"},
"east": {"uv": [5, 6, 11, 12], "texture": "#s"},
"south": {"uv": [14, 6, 16, 12], "texture": "#s"},
"west": {"uv": [5, 6, 11, 12], "texture": "#s"},
"up": {"uv": [14, 5, 16, 11], "texture": "#s"},
"down": {"uv": [14, 5, 16, 11], "texture": "#b"}
}
},
{
"from": [2, 3, 5],
"to": [4, 5, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [12, 10, 14, 12], "texture": "#s"},
"east": {"uv": [5, 10, 11, 12], "texture": "#s"},
"south": {"uv": [2, 10, 4, 12], "texture": "#s"},
"west": {"uv": [5, 10, 11, 12], "texture": "#s"},
"up": {"uv": [2, 5, 4, 11], "texture": "#s"},
"down": {"uv": [2, 5, 4, 11], "texture": "#b"}
}
},
{
"from": [12, 3, 5],
"to": [14, 5, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 10, 4, 12], "texture": "#s"},
"east": {"uv": [5, 10, 11, 12], "texture": "#s"},
"south": {"uv": [12, 10, 14, 12], "texture": "#s"},
"west": {"uv": [5, 10, 11, 12], "texture": "#s"},
"up": {"uv": [12, 5, 14, 11], "texture": "#s"},
"down": {"uv": [12, 5, 14, 11], "texture": "#b"}
}
},
{
"from": [5, 4, 14],
"to": [11, 10, 16],
"faces": {
"north": {"uv": [5, 6, 11, 12], "texture": "#s"},
"east": {"uv": [0, 6, 2, 12], "texture": "#s"},
"south": {"uv": [5, 6, 11, 12], "texture": "#s"},
"west": {"uv": [14, 6, 16, 12], "texture": "#s"},
"up": {"uv": [5, 14, 11, 16], "texture": "#s"},
"down": {"uv": [5, 0, 11, 2], "texture": "#b"}
}
},
{
"from": [5, 4, 0],
"to": [11, 10, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -6]},
"faces": {
"north": {"uv": [5, 6, 11, 12], "texture": "#s"},
"east": {"uv": [14, 6, 16, 12], "texture": "#s"},
"south": {"uv": [5, 6, 11, 12], "texture": "#s"},
"west": {"uv": [0, 6, 2, 12], "texture": "#s"},
"up": {"uv": [5, 0, 11, 2], "texture": "#s"},
"down": {"uv": [5, 14, 11, 16], "texture": "#b"}
}
},
{
"from": [5, 3, 12],
"to": [11, 5, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 10, 11, 12], "texture": "#s"},
"east": {"uv": [2, 10, 4, 12], "texture": "#s"},
"south": {"uv": [5, 10, 11, 12], "texture": "#s"},
"west": {"uv": [12, 10, 14, 12], "texture": "#s"},
"up": {"uv": [5, 12, 11, 14], "texture": "#s"},
"down": {"uv": [5, 2, 11, 4], "texture": "#s"}
}
},
{
"from": [5, 3, 2],
"to": [11, 5, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, -2]},
"faces": {
"north": {"uv": [5, 10, 11, 12], "texture": "#s"},
"east": {"uv": [12, 10, 14, 12], "texture": "#s"},
"south": {"uv": [5, 10, 11, 12], "texture": "#s"},
"west": {"uv": [2, 10, 4, 12], "texture": "#s"},
"up": {"uv": [5, 2, 11, 4], "texture": "#s"},
"down": {"uv": [5, 12, 11, 14], "texture": "#b"}
}
},
{
"from": [5, 0, 10],
"to": [11, 1, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 18]},
"faces": {
"north": {"uv": [5, 15, 11, 16], "texture": "#b"},
"east": {"uv": [5, 15, 6, 16], "texture": "#s"},
"south": {"uv": [5, 15, 11, 16], "texture": "#s"},
"west": {"uv": [10, 15, 11, 16], "texture": "#s"},
"up": {"uv": [5, 10, 11, 11], "texture": "#s"},
"down": {"uv": [5, 5, 11, 6], "texture": "#b"}
}
},
{
"from": [5, 0, 5],
"to": [11, 1, 6],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 2, 13]},
"faces": {
"north": {"uv": [5, 15, 11, 16], "texture": "#s"},
"east": {"uv": [10, 15, 11, 16], "texture": "#s"},
"south": {"uv": [5, 15, 11, 16], "texture": "#t"},
"west": {"uv": [5, 15, 6, 16], "texture": "#s"},
"up": {"uv": [5, 5, 11, 6], "texture": "#s"},
"down": {"uv": [5, 10, 11, 11], "texture": "#b"}
}
},
{
"from": [5, 0, 6],
"to": [6, 1, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 14]},
"faces": {
"north": {"uv": [10, 15, 11, 16], "texture": "#b"},
"east": {"uv": [6, 15, 10, 16], "texture": "#s"},
"south": {"uv": [5, 15, 6, 16], "texture": "#t"},
"west": {"uv": [6, 15, 10, 16], "texture": "#s"},
"up": {"uv": [5, 6, 6, 10], "texture": "#s"},
"down": {"uv": [5, 6, 6, 10], "texture": "#b"}
}
},
{
"from": [10, 0, 6],
"to": [11, 1, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 14]},
"faces": {
"north": {"uv": [5, 15, 6, 16], "texture": "#b"},
"east": {"uv": [6, 15, 10, 16], "texture": "#s"},
"south": {"uv": [10, 15, 11, 16], "texture": "#t"},
"west": {"uv": [6, 15, 10, 16], "texture": "#s"},
"up": {"uv": [10, 6, 11, 10], "texture": "#s"},
"down": {"uv": [10, 6, 11, 10], "texture": "#b"}
}
},
{
"from": [14, 10, 2],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 2, 6], "texture": "#b"},
"east": {"uv": [0, 0, 14, 6], "texture": "#s"},
"south": {"uv": [14, 0, 16, 6], "texture": "#s"},
"west": {"uv": [2, 2, 16, 8], "texture": "#t"},
"up": {"uv": [14, 2, 16, 16], "texture": "#t"},
"down": {"uv": [14, 0, 16, 14], "texture": "#b"}
}
},
{
"from": [0, 10, 0],
"to": [16, 16, 2],
"faces": {
"north": {"uv": [0, 0, 16, 6], "texture": "#s"},
"east": {"uv": [14, 0, 16, 6], "texture": "#s"},
"south": {"uv": [0, 2, 16, 8], "texture": "#t"},
"west": {"uv": [0, 0, 2, 6], "texture": "#s"},
"up": {"uv": [0, 0, 16, 2], "texture": "#t"},
"down": {"uv": [0, 14, 16, 16], "texture": "#b"}
}
},
{
"from": [0, 10, 14],
"to": [14, 16, 16],
"faces": {
"north": {"uv": [2, 2, 16, 8], "texture": "#t"},
"east": {"uv": [0, 0, 2, 6], "texture": "#s"},
"south": {"uv": [0, 0, 14, 6], "texture": "#s"},
"west": {"uv": [14, 0, 16, 6], "texture": "#s"},
"up": {"uv": [0, 14, 14, 16], "texture": "#t"},
"down": {"uv": [0, 0, 14, 2], "texture": "#b"}
}
},
{
"from": [0, 10, 2],
"to": [2, 16, 14],
"faces": {
"north": {"uv": [14, 0, 16, 6], "texture": "#b"},
"east": {"uv": [2, 2, 14, 8], "texture": "#t"},
"south": {"uv": [0, 0, 2, 6], "texture": "#t"},
"west": {"uv": [2, 0, 14, 6], "texture": "#s"},
"up": {"uv": [0, 2, 2, 14], "texture": "#t"},
"down": {"uv": [0, 2, 2, 14], "texture": "#b"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [85, 3, -10],
"translation": [1.75, -2.25, -2.25],
"scale": [0.35, 0.35, 0.35]
},
"firstperson_righthand": {
"rotation": [22, 65, -44],
"translation": [0.5, 0, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, -0.75, 0],
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"translation": [0, -0.25, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -0,0 +1,255 @@
{
"parent": "block/cube",
"textures": {
"top": "engineersdecor:blocks/device/factory_hopper_top",
"bottom": "engineersdecor:blocks/device/factory_hopper_bottom",
"side": "engineersdecor:blocks/device/factory_hopper_side",
"particle": "engineersdecor:blocks/device/factory_hopper_side"
},
"elements": [
{
"from": [2, 5, 2],
"to": [14, 9, 14],
"faces": {
"north": {"uv": [2, 5, 14, 9], "rotation": 180, "texture": "#side"},
"east": {"uv": [2, 5, 14, 9], "rotation": 180, "texture": "#side"},
"south": {"uv": [2, 5, 14, 9], "rotation": 180, "texture": "#side"},
"west": {"uv": [2, 5, 14, 9], "rotation": 180, "texture": "#side"},
"up": {"uv": [2, 2, 14, 14], "texture": "#bottom"},
"down": {"uv": [2, 2, 14, 14], "texture": "#top"}
}
},
{
"from": [4, 9, 4],
"to": [12, 15, 12],
"faces": {
"north": {"uv": [4, 9, 12, 15], "rotation": 180, "texture": "#side"},
"east": {"uv": [4, 9, 12, 15], "rotation": 180, "texture": "#side"},
"south": {"uv": [4, 9, 12, 15], "rotation": 180, "texture": "#side"},
"west": {"uv": [4, 9, 12, 15], "rotation": 180, "texture": "#side"},
"up": {"uv": [4, 4, 12, 12], "texture": "#bottom"},
"down": {"uv": [4, 4, 12, 12], "texture": "#side"}
}
},
{
"from": [0, 6, 5],
"to": [2, 12, 11],
"faces": {
"north": {"uv": [0, 6, 2, 12], "rotation": 180, "texture": "#side"},
"east": {"uv": [5, 6, 11, 12], "rotation": 180, "texture": "#side"},
"south": {"uv": [14, 6, 16, 12], "rotation": 180, "texture": "#side"},
"west": {"uv": [5, 6, 11, 12], "rotation": 180, "texture": "#side"},
"up": {"uv": [0, 5, 2, 11], "texture": "#bottom"},
"down": {"uv": [0, 5, 2, 11], "texture": "#side"}
}
},
{
"from": [14, 6, 5],
"to": [16, 12, 11],
"faces": {
"north": {"uv": [14, 6, 16, 12], "rotation": 180, "texture": "#side"},
"east": {"uv": [5, 6, 11, 12], "rotation": 180, "texture": "#side"},
"south": {"uv": [0, 6, 2, 12], "rotation": 180, "texture": "#side"},
"west": {"uv": [5, 6, 11, 12], "rotation": 180, "texture": "#side"},
"up": {"uv": [14, 5, 16, 11], "texture": "#bottom"},
"down": {"uv": [14, 5, 16, 11], "texture": "#side"}
}
},
{
"from": [2, 11, 5],
"to": [4, 13, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]},
"faces": {
"north": {"uv": [2, 10, 4, 12], "rotation": 180, "texture": "#side"},
"east": {"uv": [5, 10, 11, 12], "rotation": 180, "texture": "#side"},
"south": {"uv": [12, 10, 14, 12], "rotation": 180, "texture": "#side"},
"west": {"uv": [5, 10, 11, 12], "rotation": 180, "texture": "#side"},
"up": {"uv": [2, 5, 4, 11], "texture": "#bottom"},
"down": {"uv": [2, 5, 4, 11], "texture": "#side"}
}
},
{
"from": [12, 11, 5],
"to": [14, 13, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]},
"faces": {
"north": {"uv": [12, 10, 14, 12], "rotation": 180, "texture": "#side"},
"east": {"uv": [5, 10, 11, 12], "rotation": 180, "texture": "#side"},
"south": {"uv": [2, 10, 4, 12], "rotation": 180, "texture": "#side"},
"west": {"uv": [5, 10, 11, 12], "rotation": 180, "texture": "#side"},
"up": {"uv": [12, 5, 14, 11], "texture": "#bottom"},
"down": {"uv": [12, 5, 14, 11], "texture": "#side"}
}
},
{
"from": [5, 6, 0],
"to": [11, 12, 2],
"faces": {
"north": {"uv": [5, 6, 11, 12], "rotation": 180, "texture": "#side"},
"east": {"uv": [0, 6, 2, 12], "rotation": 180, "texture": "#side"},
"south": {"uv": [5, 6, 11, 12], "rotation": 180, "texture": "#side"},
"west": {"uv": [14, 6, 16, 12], "rotation": 180, "texture": "#side"},
"up": {"uv": [5, 0, 11, 2], "texture": "#side"},
"down": {"uv": [5, 14, 11, 16], "texture": "#side"}
}
},
{
"from": [5, 6, 14],
"to": [11, 12, 16],
"faces": {
"north": {"uv": [5, 6, 11, 12], "rotation": 180, "texture": "#side"},
"east": {"uv": [14, 6, 16, 12], "rotation": 180, "texture": "#side"},
"south": {"uv": [5, 6, 11, 12], "rotation": 180, "texture": "#side"},
"west": {"uv": [0, 6, 2, 12], "rotation": 180, "texture": "#side"},
"up": {"uv": [5, 14, 11, 16], "texture": "#bottom"},
"down": {"uv": [5, 0, 11, 2], "texture": "#side"}
}
},
{
"from": [5, 11, 2],
"to": [11, 13, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]},
"faces": {
"north": {"uv": [5, 10, 11, 12], "rotation": 180, "texture": "#side"},
"east": {"uv": [2, 10, 4, 12], "rotation": 180, "texture": "#side"},
"south": {"uv": [5, 10, 11, 12], "rotation": 180, "texture": "#side"},
"west": {"uv": [12, 10, 14, 12], "rotation": 180, "texture": "#side"},
"up": {"uv": [5, 2, 11, 4], "texture": "#side"},
"down": {"uv": [5, 12, 11, 14], "texture": "#side"}
}
},
{
"from": [5, 11, 12],
"to": [11, 13, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]},
"faces": {
"north": {"uv": [5, 10, 11, 12], "rotation": 180, "texture": "#side"},
"east": {"uv": [12, 10, 14, 12], "rotation": 180, "texture": "#side"},
"south": {"uv": [5, 10, 11, 12], "rotation": 180, "texture": "#side"},
"west": {"uv": [2, 10, 4, 12], "rotation": 180, "texture": "#side"},
"up": {"uv": [5, 12, 11, 14], "texture": "#bottom"},
"down": {"uv": [5, 2, 11, 4], "texture": "#side"}
}
},
{
"from": [5, 15, 5],
"to": [11, 16, 6],
"faces": {
"north": {"uv": [5, 15, 11, 16], "rotation": 180, "texture": "#top"},
"east": {"uv": [5, 15, 6, 16], "rotation": 180, "texture": "#side"},
"south": {"uv": [5, 15, 11, 16], "rotation": 180, "texture": "#bottom"},
"west": {"uv": [10, 15, 11, 16], "rotation": 180, "texture": "#side"},
"up": {"uv": [5, 5, 11, 6], "texture": "#bottom"},
"down": {"uv": [5, 10, 11, 11], "texture": "#side"}
}
},
{
"from": [5, 15, 10],
"to": [11, 16, 11],
"faces": {
"north": {"uv": [5, 15, 11, 16], "rotation": 180, "texture": "#top"},
"east": {"uv": [10, 15, 11, 16], "rotation": 180, "texture": "#side"},
"south": {"uv": [5, 15, 11, 16], "rotation": 180, "texture": "#side"},
"west": {"uv": [5, 15, 6, 16], "rotation": 180, "texture": "#side"},
"up": {"uv": [5, 10, 11, 11], "texture": "#bottom"},
"down": {"uv": [5, 5, 11, 6], "texture": "#side"}
}
},
{
"from": [5, 15, 6],
"to": [6, 16, 10],
"faces": {
"north": {"uv": [5, 15, 6, 16], "rotation": 180, "texture": "#top"},
"east": {"uv": [6, 15, 10, 16], "rotation": 180, "texture": "#side"},
"south": {"uv": [10, 15, 11, 16], "rotation": 180, "texture": "#bottom"},
"west": {"uv": [6, 15, 10, 16], "rotation": 180, "texture": "#side"},
"up": {"uv": [5, 6, 6, 10], "texture": "#bottom"},
"down": {"uv": [5, 6, 6, 10], "texture": "#side"}
}
},
{
"from": [10, 15, 6],
"to": [11, 16, 10],
"faces": {
"north": {"uv": [10, 15, 11, 16], "rotation": 180, "texture": "#top"},
"east": {"uv": [6, 15, 10, 16], "rotation": 180, "texture": "#side"},
"south": {"uv": [5, 15, 6, 16], "rotation": 180, "texture": "#bottom"},
"west": {"uv": [6, 15, 10, 16], "rotation": 180, "texture": "#side"},
"up": {"uv": [10, 6, 11, 10], "texture": "#bottom"},
"down": {"uv": [10, 6, 11, 10], "texture": "#side"}
}
},
{
"from": [14, 0, 0],
"to": [16, 6, 14],
"faces": {
"north": {"uv": [14, 0, 16, 6], "rotation": 180, "texture": "#side"},
"east": {"uv": [0, 0, 14, 6], "rotation": 180, "texture": "#side"},
"south": {"uv": [0, 0, 2, 6], "rotation": 180, "texture": "#bottom"},
"west": {"uv": [2, 2, 16, 8], "rotation": 180, "texture": "#top"},
"up": {"uv": [14, 0, 16, 14], "texture": "#bottom"},
"down": {"uv": [14, 2, 16, 16], "texture": "#top"}
}
},
{
"from": [0, 0, 14],
"to": [16, 6, 16],
"faces": {
"north": {"uv": [0, 2, 16, 8], "rotation": 180, "texture": "#top"},
"east": {"uv": [14, 0, 16, 6], "rotation": 180, "texture": "#side"},
"south": {"uv": [0, 0, 16, 6], "rotation": 180, "texture": "#side"},
"west": {"uv": [0, 0, 2, 6], "rotation": 180, "texture": "#side"},
"up": {"uv": [0, 14, 16, 16], "texture": "#bottom"},
"down": {"uv": [0, 0, 16, 2], "texture": "#top"}
}
},
{
"from": [0, 0, 0],
"to": [14, 6, 2],
"faces": {
"north": {"uv": [0, 0, 14, 6], "rotation": 180, "texture": "#side"},
"east": {"uv": [0, 0, 2, 6], "rotation": 180, "texture": "#side"},
"south": {"uv": [2, 2, 16, 8], "rotation": 180, "texture": "#top"},
"west": {"uv": [14, 0, 16, 6], "rotation": 180, "texture": "#side"},
"up": {"uv": [0, 0, 14, 2], "texture": "#bottom"},
"down": {"uv": [0, 14, 14, 16], "texture": "#top"}
}
},
{
"from": [0, 0, 2],
"to": [2, 6, 14],
"faces": {
"north": {"uv": [0, 0, 2, 6], "rotation": 180, "texture": "#top"},
"east": {"uv": [2, 2, 14, 8], "rotation": 180, "texture": "#top"},
"south": {"uv": [14, 0, 16, 6], "rotation": 180, "texture": "#bottom"},
"west": {"uv": [2, 0, 14, 6], "rotation": 180, "texture": "#side"},
"up": {"uv": [0, 2, 2, 14], "texture": "#bottom"},
"down": {"uv": [0, 2, 2, 14], "texture": "#top"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [85, 3, -10],
"translation": [1.75, -2.25, -2.25],
"scale": [0.35, 0.35, 0.35]
},
"firstperson_righthand": {
"rotation": [22, 65, -44],
"translation": [0.5, 0, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, -0.75, 0],
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"translation": [0, -0.25, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -0,0 +1,92 @@
{
"parent": "block/cube",
"textures": {
"light": "engineersdecor:blocks/light/lamp_glass_warm_square_texture",
"side": "engineersdecor:blocks/iestyle/steel_texture",
"particle": "engineersdecor:blocks/iestyle/steel_texture"
},
"elements": [
{
"from": [6, 0.1875, 0.5],
"to": [10, 1.8125, 1],
"faces": {
"north": {"uv": [6, 14.1875, 10, 15.8125], "texture": "#light"},
"south": {"uv": [6, 14.1875, 10, 15.8125], "texture": "#light"},
"up": {"uv": [6, 0.5, 10, 1], "texture": "#light"}
}
},
{
"from": [10, 0.1875, 0.5],
"to": [11, 1.8125, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8.125]},
"faces": {
"north": {"uv": [5, 14.1875, 6, 15.8125], "texture": "#side"},
"east": {"uv": [15, 14.1875, 15.5, 15.8125], "texture": "#side"},
"south": {"uv": [10, 14.1875, 11, 15.8125], "texture": "#side"},
"west": {"uv": [0.5, 14.1875, 1, 15.8125], "texture": "#side"},
"up": {"uv": [10, 0.5, 11, 1], "texture": "#side"},
"down": {"uv": [10, 15, 11, 15.5], "texture": "#side"}
}
},
{
"from": [5, 0.1875, 0.5],
"to": [6, 1.8125, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8.125]},
"faces": {
"north": {"uv": [10, 14.1875, 11, 15.8125], "texture": "#side"},
"east": {"uv": [15, 14.1875, 15.5, 15.8125], "texture": "#side"},
"south": {"uv": [5, 14.1875, 6, 15.8125], "texture": "#side"},
"west": {"uv": [0.5, 14.1875, 1, 15.8125], "texture": "#side"},
"up": {"uv": [5, 0.5, 6, 1], "texture": "#side"},
"down": {"uv": [5, 15, 6, 15.5], "texture": "#side"}
}
},
{
"from": [5, 0, 0],
"to": [11, 2, 0.5],
"faces": {
"north": {"uv": [5, 14, 11, 16], "texture": "#side"},
"east": {"uv": [15.5, 14, 16, 16], "texture": "#side"},
"south": {"uv": [5, 14, 11, 16], "texture": "#side"},
"west": {"uv": [0, 14, 0.5, 16], "texture": "#side"},
"up": {"uv": [5, 0, 11, 0.5], "texture": "#side"},
"down": {"uv": [5, 15.5, 11, 16], "texture": "#side"}
}
},
{
"from": [5, 0, 0.5],
"to": [11, 0.1875, 1],
"faces": {
"north": {"uv": [5, 15.8125, 11, 16], "texture": "#side"},
"east": {"uv": [15, 15.8125, 15.5, 16], "texture": "#side"},
"south": {"uv": [5, 15.8125, 11, 16], "texture": "#side"},
"west": {"uv": [0.5, 15.8125, 1, 16], "texture": "#side"},
"up": {"uv": [5, 0.5, 11, 1], "texture": "#side"},
"down": {"uv": [5, 15, 11, 15.5], "texture": "#side"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [0, -6, 96],
"translation": [-5.5, 0.5, 4.75],
"scale": [0.7, 0.7, 0.7]
},
"firstperson_righthand": {
"translation": [-3, -0.75, 1.25]
},
"ground": {
"translation": [0, 2.5, 6],
"scale": [0.7, 0.7, 0.7]
},
"gui": {
"rotation": [30, 30, 0],
"translation": [7.5, 3, 0],
"scale": [2, 2, 2]
},
"fixed": {
"rotation": [0, 180, 0],
"translation": [0, 0, -7.8]
}
}
}

View file

@ -0,0 +1,33 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:factory_hopper",
"missing": ["immersiveengineering:material"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"WWW",
"WDW",
"WPW"
],
"key": {
"D": {
"item": "#anyHopper",
"data": 0
},
"P": {
"item": "#ingotIron",
"data": 0
},
"W": {
"item": "#plankWood",
"data": 0
}
},
"result": {
"item": "engineersdecor:factory_hopper",
"count": 1
}
}

View file

@ -0,0 +1,33 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:factory_hopper",
"required": ["immersiveengineering:material"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"WWW",
"WDW",
"WPW"
],
"key": {
"D": {
"item": "#anyHopper",
"data": 0
},
"P": {
"item": "#plateIron",
"data": 0
},
"W": {
"item": "#plankTreatedWood",
"data": 0
}
},
"result": {
"item": "engineersdecor:factory_hopper",
"count": 1
}
}

View file

@ -3,15 +3,15 @@
{
"type": "engineersdecor:grc",
"result": "engineersdecor:straight_pipe_valve_redstone",
"required": ["engineersdecor:straight_pipe_valve"]
"required": ["engineersdecor:straight_pipe_valve", "immersiveengineering:connector"]
}
],
"type": "minecraft:crafting_shapeless",
"ingredients": [
{ "item": "engineersdecor:straight_pipe_valve" },
{ "item": "engineersdecor:straight_pipe_valve", "data": 0 },
{ "item": "#anyDirectedRedstoneConnector" }
],
"result": {
"item": "engineersdecor:straight_pipe_valve_redstone"
"item": "engineersdecor:straight_pipe_valve_redstone", "data": 0
}
}

View file

@ -0,0 +1,16 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:iron_floor_edge_light",
"required": ["engineersdecor:iron_inset_light"]
}
],
"type": "minecraft:crafting_shapeless",
"ingredients": [
{ "item": "engineersdecor:iron_inset_light", "data": 0 }
],
"result": {
"item": "engineersdecor:iron_floor_edge_light"
}
}

View file

@ -0,0 +1,16 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:iron_inset_light",
"required": ["engineersdecor:iron_floor_edge_light"]
}
],
"type": "minecraft:crafting_shapeless",
"ingredients": [
{ "item": "engineersdecor:iron_floor_edge_light", "data": 0 }
],
"result": {
"item": "engineersdecor:iron_inset_light"
}
}

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