v1.0.14-mc1.12.2 release merge.
This commit is contained in:
commit
b0673e4176
165 changed files with 4131 additions and 424 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -23,6 +23,7 @@
|
|||
/dev
|
||||
/dist
|
||||
/tmp
|
||||
tmp
|
||||
bin
|
||||
build
|
||||
desktop.ini
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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" }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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": [{}]
|
||||
}
|
||||
}
|
|
@ -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} },
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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Правый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.
|
||||
|
|
|
@ -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
|
||||
#-----------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue