Signs added. Experimental waste incinerator added.
|
@ -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.5-b1
|
||||
version_engineersdecor=1.0.5
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
|
||||
"1.12.2": {
|
||||
"1.0.5": "[R] Release based on v1.0.5-b1. Release-to-release changes: * Small electrical passthrough-furnace added. * Passive fluid accumulator added. * Config options added. * Sign plates added. * Minor bug fixes.\n[A] Added sign \"Electrical hazzard\"/\"Caution hot wire\".\n[A] Added sign \"Caution dangerous there\" (skull/bones).",
|
||||
"1.0.5-b1": "[A] Added passive fluid accumulator.\n[A] Added small electrical passthrough-furnace.\n[F] Fixed version check URL.\n[M] Opt-out config options for valves, passive fluid accumulator, and furni.",
|
||||
"1.0.4": "[R] Release based on v1.0.4-b9. Release-to-release changes: * Crafting table: Quick crafting history re-fab, JEI integration. * Rendering improvements and issue fixes (stairs, ambient occlusion, optifine, etc). * Walls with texture variations. * Thin/thick steel poles with support feet/heads. * Horizontal steel double-T support beams added. * Fluid pipe valves added: Check valve, redstone controlled valve, analog redstone controlled valve. Support pressurized transfer. * Tool tip documentation (CTRL-SHIFT) for stairs added. * Internal code cleanups. * Recipes tuned.\n[E] Added pass-through electrical furnace (experimental, see config).",
|
||||
"1.0.4-b9": "[F] Inserting fluids with pressurized tag only into IE piping.\n[F] Valve redstone connector rendering does not check for \"can connect redstone\" but only for \"can provide power\".\n[M] Valves are adapted to be detected as pipe by IE.",
|
||||
|
@ -34,7 +35,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.4",
|
||||
"1.12.2-latest": "1.0.5-b1"
|
||||
"1.12.2-recommended": "1.0.5",
|
||||
"1.12.2-latest": "1.0.5"
|
||||
}
|
||||
}
|
|
@ -10,6 +10,17 @@ Mod sources for Minecraft version 1.12.2.
|
|||
----
|
||||
## Revision history
|
||||
|
||||
-------------------------------------------------------------------
|
||||
- v1.0.5 [R] Release based on v1.0.5-b1. Release-to-release changes:
|
||||
* Small electrical passthrough-furnace added.
|
||||
* Passive fluid accumulator added.
|
||||
* Config options added.
|
||||
* Sign plates added.
|
||||
* Minor bug fixes.
|
||||
-------------------------------------------------------------------
|
||||
[A] Added sign "Electrical hazzard"/"Caution hot wire".
|
||||
[A] Added sign "Caution dangerous there" (skull/bones).
|
||||
|
||||
- v1.0.5-b1 [A] Added passive fluid accumulator.
|
||||
[A] Added small electrical passthrough-furnace.
|
||||
[F] Fixed version check URL.
|
||||
|
|
|
@ -154,6 +154,7 @@ public class ModEngineersDecor
|
|||
public static final int GUIID_CRAFTING_TABLE = 213101;
|
||||
public static final int GUIID_SMALL_LAB_FURNACE = 213102;
|
||||
public static final int GUIID_ELECTRICAL_LAB_FURNACE = 213103;
|
||||
public static final int GUIID_SMALL_WASTE_INCINERATOR = 213104;
|
||||
|
||||
@Override
|
||||
public Object getServerGuiElement(final int guiid, final EntityPlayer player, final World world, int x, int y, int z)
|
||||
|
@ -164,6 +165,7 @@ public class ModEngineersDecor
|
|||
case GUIID_CRAFTING_TABLE: return BlockDecorCraftingTable.getServerGuiElement(player, world, pos, te);
|
||||
case GUIID_SMALL_LAB_FURNACE: return BlockDecorFurnace.getServerGuiElement(player, world, pos, te);
|
||||
case GUIID_ELECTRICAL_LAB_FURNACE: return BlockDecorFurnaceElectrical.getServerGuiElement(player, world, pos, te);
|
||||
case GUIID_SMALL_WASTE_INCINERATOR: return BlockDecorWasteIncinerator.getServerGuiElement(player, world, pos, te);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -178,6 +180,7 @@ public class ModEngineersDecor
|
|||
case GUIID_CRAFTING_TABLE: return BlockDecorCraftingTable.getClientGuiElement(player, world, pos, te);
|
||||
case GUIID_SMALL_LAB_FURNACE: return BlockDecorFurnace.getClientGuiElement(player, world, pos, te);
|
||||
case GUIID_ELECTRICAL_LAB_FURNACE: return BlockDecorFurnaceElectrical.getClientGuiElement(player, world, pos, te);
|
||||
case GUIID_SMALL_WASTE_INCINERATOR: return BlockDecorWasteIncinerator.getClientGuiElement(player, world, pos, te);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -243,7 +243,6 @@ public class BlockDecorPipeValve extends BlockDecorDirected
|
|||
}
|
||||
int n_filled = forward_fluid_handler().fill(res, doFill);
|
||||
filling_ = false;
|
||||
//if(n_filled > 0) System.out.println("F:" + resource.amount + "->" + n_filled);
|
||||
return n_filled;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,691 @@
|
|||
/*
|
||||
* @file BlockDecorWasteIncinerator.java
|
||||
* @author Stefan Wilhelm (wile)
|
||||
* @copyright (C) 2019 Stefan Wilhelm
|
||||
* @license MIT (see https://opensource.org/licenses/MIT)
|
||||
*
|
||||
* Trash/void/nullifier device with internal fifos.
|
||||
*/
|
||||
package wile.engineersdecor.blocks;
|
||||
|
||||
import wile.engineersdecor.ModEngineersDecor;
|
||||
import net.minecraft.block.properties.PropertyBool;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
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.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.nbt.NBTTagCompound;
|
||||
import net.minecraft.init.SoundEvents;
|
||||
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.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.*;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.energy.CapabilityEnergy;
|
||||
import net.minecraftforge.energy.IEnergyStorage;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockDecorWasteIncinerator extends BlockDecor
|
||||
{
|
||||
public static final PropertyBool LIT = BlockDecorFurnace.LIT;
|
||||
|
||||
public BlockDecorWasteIncinerator(@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);
|
||||
setLightOpacity(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockStateContainer createBlockState()
|
||||
{ return new BlockStateContainer(this, LIT); }
|
||||
|
||||
@Override
|
||||
public IBlockState getStateFromMeta(int meta)
|
||||
{ return getDefaultState().withProperty(LIT, (meta & 0x4)!=0); }
|
||||
|
||||
@Override
|
||||
public int getMetaFromState(IBlockState state)
|
||||
{ return (state.getValue(LIT) ? 4 : 0); }
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer)
|
||||
{ return getDefaultState().withProperty(LIT, false); }
|
||||
|
||||
@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; }
|
||||
|
||||
@Nullable
|
||||
public TileEntity createTileEntity(World world, IBlockState state)
|
||||
{ return new BlockDecorWasteIncinerator.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("inventory"))) return;
|
||||
NBTTagCompound inventory_nbt = stack.getTagCompound().getCompoundTag("inventory");
|
||||
if(inventory_nbt.isEmpty()) return;
|
||||
final TileEntity te = world.getTileEntity(pos);
|
||||
if(!(te instanceof BlockDecorWasteIncinerator.BTileEntity)) return;
|
||||
((BlockDecorWasteIncinerator.BTileEntity)te).readnbt(inventory_nbt);
|
||||
((BlockDecorWasteIncinerator.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 inventory_nbt = new NBTTagCompound();
|
||||
ItemStackHelper.saveAllItems(inventory_nbt, ((BTileEntity)te).stacks_, false);
|
||||
if(!inventory_nbt.isEmpty()) {
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
nbt.setTag("inventory", inventory_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();
|
||||
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_SMALL_WASTE_INCINERATOR, world, pos.getX(), pos.getY(), pos.getZ());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rnd)
|
||||
{
|
||||
if((state.getBlock()!=this) || (!state.getValue(LIT))) return;
|
||||
final double rv = rnd.nextDouble();
|
||||
if(rv > 0.5) return;
|
||||
final double x=0.5+pos.getX(), y=0.5+pos.getY(), z=0.5+pos.getZ();
|
||||
final double xr=rnd.nextDouble()*0.4-0.2, yr=rnd.nextDouble()*0.5, zr=rnd.nextDouble()*0.4-0.2;
|
||||
world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, x+xr, y+yr, z+zr, 0.0, 0.0, 0.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 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/small_waste_incinerator_gui.png"));
|
||||
final int x0=(width-xSize)/2, y0=(height-ySize)/2, w=xSize, h=ySize;
|
||||
drawTexturedModalRect(x0, y0, 0, 0, w, h);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------
|
||||
// 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 proc_time_needed_;
|
||||
|
||||
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;
|
||||
addSlotToContainer(new Slot(te, ++i, 13, 9));
|
||||
addSlotToContainer(new Slot(te, ++i, 37, 12));
|
||||
addSlotToContainer(new Slot(te, ++i, 54, 13));
|
||||
addSlotToContainer(new Slot(te, ++i, 71, 14));
|
||||
addSlotToContainer(new Slot(te, ++i, 88, 15));
|
||||
addSlotToContainer(new Slot(te, ++i, 105, 16));
|
||||
addSlotToContainer(new Slot(te, ++i, 122, 17));
|
||||
addSlotToContainer(new Slot(te, ++i, 139, 18));
|
||||
addSlotToContainer(new Slot(te, ++i, 144, 38));
|
||||
addSlotToContainer(new Slot(te, ++i, 127, 39));
|
||||
addSlotToContainer(new Slot(te, ++i, 110, 40));
|
||||
addSlotToContainer(new Slot(te, ++i, 93, 41));
|
||||
addSlotToContainer(new Slot(te, ++i, 76, 42));
|
||||
addSlotToContainer(new Slot(te, ++i, 59, 43));
|
||||
addSlotToContainer(new Slot(te, ++i, 42, 44));
|
||||
addSlotToContainer(new Slot(te, ++i, 17, 58));
|
||||
for(int x=0; x<9; ++x) {
|
||||
addSlotToContainer(new Slot(playerInventory, x, 8+x*18, 144)); // 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, 86+y*18)); // player slots: 9..35
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(IContainerListener listener)
|
||||
{ super.addListener(listener); listener.sendAllWindowProperties(this, te); }
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
super.detectAndSendChanges();
|
||||
for(int i=0; i<listeners.size(); ++i) {
|
||||
IContainerListener lis = listeners.get(i);
|
||||
if(proc_time_needed_ != te.getField(3)) lis.sendWindowProperty(this, 3, te.getField(3));
|
||||
}
|
||||
proc_time_needed_ = te.getField(3);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void updateProgressBar(int id, int data)
|
||||
{ te.setField(id, data); }
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer player)
|
||||
{ return (world.getBlockState(pos).getBlock() instanceof BlockDecorWasteIncinerator) && (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, true)) return ItemStack.EMPTY;
|
||||
} else if((index >= PLAYER_INV_START_SLOTNO) && (index <= PLAYER_INV_START_SLOTNO+36)) {
|
||||
// Player slot
|
||||
if(!mergeItemStack(slot_stack, 0, PLAYER_INV_START_SLOTNO-1, true)) 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, IEnergyStorage, IItemHandler
|
||||
{
|
||||
public static final int TICK_INTERVAL = 20;
|
||||
public static final int ENERGIZED_TICK_INTERVAL = 5;
|
||||
public static final int MAX_ENERGY_BUFFER = 16000;
|
||||
public static final int MAX_ENERGY_TRANSFER = 256;
|
||||
public static final int DEFAULT_ENERGY_CONSUMPTION = 16;
|
||||
public static final int NUM_OF_SLOTS = 16;
|
||||
public static final int INPUT_SLOT_NO = 0;
|
||||
public static final int BURN_SLOT_NO = NUM_OF_SLOTS-1;
|
||||
|
||||
private static int energy_consumption = DEFAULT_ENERGY_CONSUMPTION;
|
||||
|
||||
private int tick_timer_;
|
||||
private int check_timer_;
|
||||
private int energy_stored_;
|
||||
protected NonNullList<ItemStack> stacks_;
|
||||
|
||||
public static void on_config(int speed_percent, int fuel_efficiency_percent, int boost_energy_per_tick)
|
||||
{
|
||||
energy_consumption = MathHelper.clamp(boost_energy_per_tick, 16, 512);
|
||||
ModEngineersDecor.logger.info("Config waste incinerator boost energy consumption:" + energy_consumption);
|
||||
}
|
||||
|
||||
public BTileEntity()
|
||||
{ reset(); }
|
||||
|
||||
protected void reset()
|
||||
{
|
||||
stacks_ = NonNullList.<ItemStack>withSize(NUM_OF_SLOTS, ItemStack.EMPTY);
|
||||
check_timer_ = 0;
|
||||
tick_timer_ = 0;
|
||||
}
|
||||
|
||||
public void readnbt(NBTTagCompound compound)
|
||||
{
|
||||
reset();
|
||||
ItemStackHelper.loadAllItems(compound, stacks_);
|
||||
while(stacks_.size() < NUM_OF_SLOTS) stacks_.add(ItemStack.EMPTY);
|
||||
energy_stored_ = compound.getInteger("Energy");
|
||||
}
|
||||
|
||||
protected void writenbt(NBTTagCompound compound)
|
||||
{
|
||||
compound.setInteger("Energy", MathHelper.clamp(energy_stored_,0 , MAX_ENERGY_BUFFER));
|
||||
ItemStackHelper.saveAllItems(compound, stacks_);
|
||||
}
|
||||
|
||||
private ItemStack shiftStacks(final int index_from, final int index_to)
|
||||
{
|
||||
if(index_from >= index_to) return ItemStack.EMPTY;
|
||||
ItemStack out_stack = ItemStack.EMPTY;
|
||||
ItemStack stack = stacks_.get(index_from);
|
||||
for(int i=index_from+1; i<=index_to; ++i) {
|
||||
out_stack = stacks_.get(i);
|
||||
stacks_.set(i, stack);
|
||||
stack = out_stack;
|
||||
}
|
||||
stacks_.set(index_from, ItemStack.EMPTY);
|
||||
return out_stack;
|
||||
}
|
||||
|
||||
private boolean transferItems(final int index_from, final int index_to, int count)
|
||||
{
|
||||
ItemStack from = stacks_.get(index_from);
|
||||
if(from.isEmpty()) return false;
|
||||
ItemStack to = stacks_.get(index_to);
|
||||
if(from.getCount() < count) count = from.getCount();
|
||||
if(count <= 0) return false;
|
||||
boolean changed = true;
|
||||
if(to.isEmpty()) {
|
||||
stacks_.set(index_to, from.splitStack(count));
|
||||
} else if(to.getCount() >= to.getMaxStackSize()) {
|
||||
changed = false;
|
||||
} else if((!from.isItemEqual(to)) || (!ItemStack.areItemStackTagsEqual(from, to))) {
|
||||
changed = false;
|
||||
} else {
|
||||
if((to.getCount()+count) >= to.getMaxStackSize()) {
|
||||
from.shrink(to.getMaxStackSize()-to.getCount());
|
||||
to.setCount(to.getMaxStackSize());
|
||||
} else {
|
||||
from.shrink(count);
|
||||
to.grow(count);
|
||||
}
|
||||
}
|
||||
if(from.isEmpty() && from!=ItemStack.EMPTY) {
|
||||
stacks_.set(index_from, ItemStack.EMPTY);
|
||||
changed = true;
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
// TileEntity ------------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns)
|
||||
{ return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorWasteIncinerator)); }
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound compound)
|
||||
{ super.readFromNBT(compound); readnbt(compound); }
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound compound)
|
||||
{ super.writeToNBT(compound); writenbt(compound); return compound; }
|
||||
|
||||
// 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());
|
||||
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 index==0; }
|
||||
|
||||
@Override
|
||||
public int getField(int id)
|
||||
{ return 0; }
|
||||
|
||||
@Override
|
||||
public void setField(int id, int value)
|
||||
{}
|
||||
|
||||
@Override
|
||||
public int getFieldCount()
|
||||
{ return 4; }
|
||||
|
||||
@Override
|
||||
public void clear()
|
||||
{ stacks_.clear(); }
|
||||
|
||||
// ISidedInventory ----------------------------------------------------------------------------
|
||||
|
||||
private static final int[] SIDED_INV_SLOTS = new int[] { INPUT_SLOT_NO };
|
||||
|
||||
@Override
|
||||
public int[] getSlotsForFace(EnumFacing side)
|
||||
{ return SIDED_INV_SLOTS; }
|
||||
|
||||
@Override
|
||||
public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction)
|
||||
{ return isItemValidForSlot(index, itemStackIn); }
|
||||
|
||||
@Override
|
||||
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction)
|
||||
{ return false; }
|
||||
|
||||
// IEnergyStorage ----------------------------------------------------------------------------
|
||||
|
||||
public boolean canExtract()
|
||||
{ return false; }
|
||||
|
||||
public boolean canReceive()
|
||||
{ return true; }
|
||||
|
||||
public int getMaxEnergyStored()
|
||||
{ return MAX_ENERGY_BUFFER; }
|
||||
|
||||
public int getEnergyStored()
|
||||
{ return energy_stored_; }
|
||||
|
||||
public int extractEnergy(int maxExtract, boolean simulate)
|
||||
{ return 0; }
|
||||
|
||||
public int receiveEnergy(int maxReceive, boolean simulate)
|
||||
{
|
||||
if(energy_stored_ >= MAX_ENERGY_BUFFER) return 0;
|
||||
int n = Math.min(maxReceive, (MAX_ENERGY_BUFFER - energy_stored_));
|
||||
if(n > MAX_ENERGY_TRANSFER) n = MAX_ENERGY_TRANSFER;
|
||||
if(!simulate) {energy_stored_ += n; markDirty(); }
|
||||
return n;
|
||||
}
|
||||
|
||||
// IItemHandler --------------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public int getSlots()
|
||||
{ return 1; }
|
||||
|
||||
@Override
|
||||
public int getSlotLimit(int index)
|
||||
{ return getInventoryStackLimit(); }
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(int slot, @Nonnull ItemStack stack)
|
||||
{ return true; }
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public ItemStack insertItem(int index, @Nonnull ItemStack stack, boolean simulate)
|
||||
{
|
||||
if(stack.isEmpty()) return ItemStack.EMPTY;
|
||||
if(index != 0) return ItemStack.EMPTY;
|
||||
int slotno = 0;
|
||||
ItemStack slotstack = getStackInSlot(slotno);
|
||||
if(!slotstack.isEmpty())
|
||||
{
|
||||
if(slotstack.getCount() >= Math.min(slotstack.getMaxStackSize(), getSlotLimit(index))) return stack;
|
||||
if(!ItemHandlerHelper.canItemStacksStack(stack, slotstack)) return stack;
|
||||
if(!canInsertItem(slotno, stack, EnumFacing.UP) || (!isItemValidForSlot(slotno, stack))) return stack;
|
||||
int n = Math.min(stack.getMaxStackSize(), getSlotLimit(index)) - slotstack.getCount();
|
||||
if(stack.getCount() <= n) {
|
||||
if(!simulate) {
|
||||
ItemStack copy = stack.copy();
|
||||
copy.grow(slotstack.getCount());
|
||||
setInventorySlotContents(slotno, copy);
|
||||
}
|
||||
return ItemStack.EMPTY;
|
||||
} else {
|
||||
stack = stack.copy();
|
||||
if(!simulate) {
|
||||
ItemStack copy = stack.splitStack(n);
|
||||
copy.grow(slotstack.getCount());
|
||||
setInventorySlotContents(slotno, copy);
|
||||
return stack;
|
||||
} else {
|
||||
stack.shrink(n);
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(!canInsertItem(slotno, stack, EnumFacing.UP) || (!isItemValidForSlot(slotno, stack))) return stack;
|
||||
int n = Math.min(stack.getMaxStackSize(), getSlotLimit(index));
|
||||
if(n < stack.getCount()) {
|
||||
stack = stack.copy();
|
||||
if(!simulate) {
|
||||
setInventorySlotContents(slotno, stack.splitStack(n));
|
||||
return stack;
|
||||
} else {
|
||||
stack.shrink(n);
|
||||
return stack;
|
||||
}
|
||||
} else {
|
||||
if(!simulate) setInventorySlotContents(slotno, stack);
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public ItemStack extractItem(int index, int amount, boolean simulate)
|
||||
{ return ItemStack.EMPTY; }
|
||||
|
||||
// Capability export ----------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public boolean hasCapability(Capability<?> cap, EnumFacing facing)
|
||||
{ return ((cap==CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) || (cap==CapabilityEnergy.ENERGY)) || super.hasCapability(cap, facing); }
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@Nullable
|
||||
public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing)
|
||||
{
|
||||
if((facing != null) && (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)) {
|
||||
return (T)this;
|
||||
} else if(capability == CapabilityEnergy.ENERGY) {
|
||||
return (T)this;
|
||||
} else {
|
||||
return super.getCapability(capability, facing);
|
||||
}
|
||||
}
|
||||
|
||||
// ITickable ------------------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public void update()
|
||||
{
|
||||
if(--tick_timer_ > 0) return;
|
||||
tick_timer_ = TICK_INTERVAL;
|
||||
if(world.isRemote) return;
|
||||
boolean dirty = false;
|
||||
ItemStack processing_stack = stacks_.get(BURN_SLOT_NO);
|
||||
final boolean was_processing = !processing_stack.isEmpty();
|
||||
boolean is_processing = was_processing;
|
||||
boolean new_stack_processing = false;
|
||||
if((!stacks_.get(0).isEmpty()) && transferItems(0, 1, getInventoryStackLimit())) dirty = true;
|
||||
ItemStack first_stack = stacks_.get(0);
|
||||
boolean shift = !first_stack.isEmpty();
|
||||
if(is_processing) {
|
||||
processing_stack.shrink(1);
|
||||
if(processing_stack.getCount() <= 0) {
|
||||
processing_stack = ItemStack.EMPTY;
|
||||
is_processing = false;
|
||||
}
|
||||
stacks_.set(BURN_SLOT_NO, processing_stack);
|
||||
if(energy_stored_ >= (energy_consumption * TICK_INTERVAL)) {
|
||||
energy_stored_ -= (energy_consumption * TICK_INTERVAL);
|
||||
tick_timer_ = ENERGIZED_TICK_INTERVAL;
|
||||
}
|
||||
dirty = true;
|
||||
}
|
||||
if(shift) {
|
||||
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)) {
|
||||
// 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);
|
||||
}
|
||||
} else if(!is_processing) {
|
||||
shiftStacks(0, BURN_SLOT_NO);
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
if((was_processing != is_processing) || (new_stack_processing)) {
|
||||
if(new_stack_processing) world.playSound(null, pos, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, 0.05f, 2.4f);
|
||||
final IBlockState state = world.getBlockState(pos);
|
||||
if(state.getBlock() instanceof BlockDecorWasteIncinerator) {
|
||||
world.setBlockState(pos, state.withProperty(LIT, is_processing), 2|16);
|
||||
}
|
||||
}
|
||||
if(dirty) markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -220,6 +220,34 @@ public class ModBlocks
|
|||
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
|
||||
);
|
||||
|
||||
public static final BlockDecorDirected SIGN_HOTWIRE = new BlockDecorDirected(
|
||||
"sign_hotwire",
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(1<<BlockDecor.CFG_LIGHT_VALUE_SHIFT),
|
||||
Material.WOOD, 0.1f, 1f, SoundType.WOOD,
|
||||
ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16)
|
||||
);
|
||||
|
||||
public static final BlockDecorDirected SIGN_MINDSTEP = new BlockDecorDirected(
|
||||
"sign_mindstep",
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(1<<BlockDecor.CFG_LIGHT_VALUE_SHIFT),
|
||||
Material.WOOD, 0.1f, 1f, SoundType.WOOD,
|
||||
ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16)
|
||||
);
|
||||
|
||||
public static final BlockDecorDirected SIGN_DANGER = new BlockDecorDirected(
|
||||
"sign_danger",
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(1<<BlockDecor.CFG_LIGHT_VALUE_SHIFT),
|
||||
Material.WOOD, 0.1f, 1f, SoundType.WOOD,
|
||||
ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16)
|
||||
);
|
||||
|
||||
public static final BlockDecorWasteIncinerator SMALL_WASTE_INCINERATOR = new BlockDecorWasteIncinerator(
|
||||
"small_waste_incinerator",
|
||||
BlockDecor.CFG_DEFAULT,
|
||||
Material.IRON, 0.3f, 15f, SoundType.METAL,
|
||||
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
|
||||
);
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------
|
||||
//-- Tile entities
|
||||
//--------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -246,6 +274,9 @@ public class ModBlocks
|
|||
private static final TileEntityRegistrationData PASSIVE_FLUID_ACCUMULATOR_TEI = new TileEntityRegistrationData(
|
||||
BlockDecorPassiveFluidAccumulator.BTileEntity.class, "te_passive_fluid_accumulator"
|
||||
);
|
||||
private static final TileEntityRegistrationData WASTE_INCINERATOR_TEI = new TileEntityRegistrationData(
|
||||
BlockDecorWasteIncinerator.BTileEntity.class, "te_small_waste_incinerator"
|
||||
);
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------
|
||||
//-- Registration list
|
||||
|
@ -287,10 +318,13 @@ public class ModBlocks
|
|||
STEEL_DOUBLE_T_SUPPORT,
|
||||
STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, STRAIGHT_PIPE_VALVE_TEI,
|
||||
PASSIVE_FLUID_ACCUMULATOR, PASSIVE_FLUID_ACCUMULATOR_TEI,
|
||||
SMALL_ELECTRICAL_FURNACE, SMALL_ELECTRICAL_FURNACE_TEI
|
||||
SMALL_ELECTRICAL_FURNACE, SMALL_ELECTRICAL_FURNACE_TEI,
|
||||
SIGN_HOTWIRE, SIGN_DANGER
|
||||
};
|
||||
|
||||
private static final Object dev_content[] = {
|
||||
SIGN_MINDSTEP,
|
||||
SMALL_WASTE_INCINERATOR, WASTE_INCINERATOR_TEI
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": { "model": "engineersdecor:sign/sign_danger_model" },
|
||||
"variants": {
|
||||
"normal": [{}],
|
||||
"inventory": [{}],
|
||||
"facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":0}, "down": {"x":0} }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": { "model": "engineersdecor:sign/sign_hotwire_model" },
|
||||
"variants": {
|
||||
"normal": [{}],
|
||||
"inventory": [{}],
|
||||
"facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":0}, "down": {"x":0} }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": { "model": "engineersdecor:sign/sign_mindstep_model" },
|
||||
"variants": {
|
||||
"normal": [{}],
|
||||
"inventory": [{}],
|
||||
"facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":0}, "down": {"x":0} }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": {
|
||||
"model": "engineersdecor:furnace/small_waste_incinerator_model"
|
||||
},
|
||||
"variants": {
|
||||
"normal": [{}],
|
||||
"inventory": [{}],
|
||||
"lit": { "false":{}, "true":{}}
|
||||
}
|
||||
}
|
|
@ -99,6 +99,11 @@ tile.engineersdecor.small_electrical_furnace.help=§6Small metal cased pass-thro
|
|||
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.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. \
|
||||
|
@ -118,6 +123,13 @@ tile.engineersdecor.passive_fluid_accumulator.help=§6Vacuum suction based fluid
|
|||
#-----------------------------------------------------------------------------------------------------------
|
||||
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=§6Placable on walls (horizontally).
|
||||
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=§6Placable on walls (horizontally).
|
||||
|
||||
#-----------------------------------------------------------------------------------------------------------
|
||||
# EOF
|
||||
#-----------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -92,6 +92,11 @@ tile.engineersdecor.small_electrical_furnace.name=Small electrical furnace
|
|||
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.straight_pipe_valve.name=Straight fluid valve
|
||||
#tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \
|
||||
|
@ -111,6 +116,13 @@ tile.engineersdecor.passive_fluid_accumulator.name=Passive fluid accumulator
|
|||
#-----------------------------------------------------------------------------------------------------------
|
||||
tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo)
|
||||
#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=§6Placable on walls (horizontally).
|
||||
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=§6Placable on walls (horizontally).
|
||||
|
||||
#-----------------------------------------------------------------------------------------------------------
|
||||
# EOF
|
||||
#-----------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"parent": "block/cube",
|
||||
"textures": {
|
||||
"particle": "engineersdecor:blocks/furnace/small_waste_incinerator_side",
|
||||
"top": "engineersdecor:blocks/furnace/small_waste_incinerator_top",
|
||||
"bottom": "engineersdecor:blocks/furnace/small_waste_incinerator_bottom",
|
||||
"side": "engineersdecor:blocks/furnace/small_waste_incinerator_side"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0, 0, 0],
|
||||
"to": [16, 16, 16],
|
||||
"faces": {
|
||||
"north": {"texture": "#side"},
|
||||
"east": {"texture": "#side"},
|
||||
"south": {"texture": "#side"},
|
||||
"west": {"texture": "#side"},
|
||||
"up": {"texture": "#top"},
|
||||
"down": {"texture": "#bottom"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"ground": {
|
||||
"scale": [0.2, 0.2, 0.2]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 225, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
},
|
||||
"fixed": {
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"parent": "engineersdecor:block/sign/sign_triangular_model",
|
||||
"textures": { "f": "engineersdecor:blocks/sign/sign_danger_texture" }
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"parent": "engineersdecor:block/sign/sign_triangular_model",
|
||||
"textures": { "f": "engineersdecor:blocks/sign/sign_hotwire_texture" }
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"parent": "engineersdecor:block/sign/sign_decor_model",
|
||||
"textures": { "f": "engineersdecor:blocks/sign/sign_mindstep_texture" }
|
||||
}
|
|
@ -0,0 +1,191 @@
|
|||
{
|
||||
"parent": "block/cube",
|
||||
"textures": {
|
||||
"s": "engineersdecor:blocks/iestyle/treated_wood_rough_texture",
|
||||
"particle": "engineersdecor:blocks/iestyle/treated_wood_rough_texture",
|
||||
"f": "engineersdecor:blocks/sign/sign_hotwire_texture"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0.75, 1.25, 0],
|
||||
"to": [15.25, 2.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [0.75, 13.5, 15.25, 14.75], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 13.5, 16, 14.75], "texture": "#s"},
|
||||
"south": {"uv": [0.75, 13.5, 15.25, 14.75], "texture": "#f"},
|
||||
"west": {"uv": [0, 13.5, 0.5, 14.75], "texture": "#s"},
|
||||
"up": {"uv": [0.75, 0, 15.25, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [0.75, 15.5, 15.25, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.75, 3.5, 0],
|
||||
"to": [14.25, 4.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [1.75, 11.5, 14.25, 12.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 11.5, 16, 12.5], "texture": "#s"},
|
||||
"south": {"uv": [1.75, 11.5, 14.25, 12.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 11.5, 0.5, 12.5], "texture": "#s"},
|
||||
"up": {"uv": [1.75, 0, 14.25, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [1.75, 15.5, 14.25, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2.75, 5.5, 0],
|
||||
"to": [13.25, 6.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [2.75, 9.5, 13.25, 10.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 9.5, 16, 10.5], "texture": "#s"},
|
||||
"south": {"uv": [2.75, 9.5, 13.25, 10.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 9.5, 0.5, 10.5], "texture": "#s"},
|
||||
"up": {"uv": [2.75, 0, 13.25, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [2.75, 15.5, 13.25, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3.75, 7.5, 0],
|
||||
"to": [12.25, 8.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [3.75, 7.5, 12.25, 8.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 7.5, 16, 8.5], "texture": "#s"},
|
||||
"south": {"uv": [3.75, 7.5, 12.25, 8.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 7.5, 0.5, 8.5], "texture": "#s"},
|
||||
"up": {"uv": [3.75, 0, 12.25, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [3.75, 15.5, 12.25, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4.75, 9.5, 0],
|
||||
"to": [11.25, 10.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [4.75, 5.5, 11.25, 6.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 5.5, 16, 6.5], "texture": "#s"},
|
||||
"south": {"uv": [4.75, 5.5, 11.25, 6.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 5.5, 0.5, 6.5], "texture": "#s"},
|
||||
"up": {"uv": [4.75, 0, 11.25, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [4.75, 15.5, 11.25, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5.75, 11.5, 0],
|
||||
"to": [10.25, 12.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [5.75, 3.5, 10.25, 4.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 3.5, 16, 4.5], "texture": "#s"},
|
||||
"south": {"uv": [5.75, 3.5, 10.25, 4.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 3.5, 0.5, 4.5], "texture": "#s"},
|
||||
"up": {"uv": [5.75, 0, 10.25, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [5.75, 15.5, 10.25, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6.25, 12.5, 0],
|
||||
"to": [9.75, 13.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [6.25, 2.5, 9.75, 3.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 2.5, 16, 3.5], "texture": "#s"},
|
||||
"south": {"uv": [6.25, 2.5, 9.75, 3.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 2.5, 0.5, 3.5], "texture": "#s"},
|
||||
"up": {"uv": [6.25, 0, 9.75, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [6.25, 15.5, 9.75, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1.25, 2.5, 0],
|
||||
"to": [14.75, 3.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [1.25, 12.5, 14.75, 13.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 12.5, 16, 13.5], "texture": "#s"},
|
||||
"south": {"uv": [1.25, 12.5, 14.75, 13.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 12.5, 0.5, 13.5], "texture": "#s"},
|
||||
"up": {"uv": [1.25, 0, 14.75, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [1.25, 15.5, 14.75, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2.25, 4.5, 0],
|
||||
"to": [13.75, 5.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [2.25, 10.5, 13.75, 11.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 10.5, 16, 11.5], "texture": "#s"},
|
||||
"south": {"uv": [2.25, 10.5, 13.75, 11.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 10.5, 0.5, 11.5], "texture": "#s"},
|
||||
"up": {"uv": [2.25, 0, 13.75, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [2.25, 15.5, 13.75, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3.25, 6.5, 0],
|
||||
"to": [12.75, 7.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [3.25, 8.5, 12.75, 9.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 8.5, 16, 9.5], "texture": "#s"},
|
||||
"south": {"uv": [3.25, 8.5, 12.75, 9.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 8.5, 0.5, 9.5], "texture": "#s"},
|
||||
"up": {"uv": [3.25, 0, 12.75, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [3.25, 15.5, 12.75, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4.25, 8.5, 0],
|
||||
"to": [11.75, 9.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 6.5, 11.75, 7.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 6.5, 16, 7.5], "texture": "#s"},
|
||||
"south": {"uv": [4.25, 6.5, 11.75, 7.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 6.5, 0.5, 7.5], "texture": "#s"},
|
||||
"up": {"uv": [4.25, 0, 11.75, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [4.25, 15.5, 11.75, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5.25, 10.5, 0],
|
||||
"to": [10.75, 11.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [5.25, 4.5, 10.75, 5.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 4.5, 16, 5.5], "texture": "#s"},
|
||||
"south": {"uv": [5.25, 4.5, 10.75, 5.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 4.5, 0.5, 5.5], "texture": "#s"},
|
||||
"up": {"uv": [5.25, 0, 10.75, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [5.25, 15.5, 10.75, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6.75, 13.5, 0],
|
||||
"to": [9.25, 14.5, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [6.75, 1.5, 9.25, 2.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 1.5, 16, 2.5], "texture": "#s"},
|
||||
"south": {"uv": [6.75, 1.5, 9.25, 2.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 1.5, 0.5, 2.5], "texture": "#s"},
|
||||
"up": {"uv": [6.75, 0, 9.25, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [6.75, 15.5, 9.25, 16], "texture": "#s"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7.25, 14.5, 0],
|
||||
"to": [8.75, 15, 0.5],
|
||||
"faces": {
|
||||
"north": {"uv": [7.25, 1, 8.75, 1.5], "texture": "#s"},
|
||||
"east": {"uv": [15.5, 1, 16, 1.5], "texture": "#s"},
|
||||
"south": {"uv": [7.25, 1, 8.75, 1.5], "texture": "#f"},
|
||||
"west": {"uv": [0, 1, 0.5, 1.5], "texture": "#s"},
|
||||
"up": {"uv": [7.25, 0, 8.75, 0.5], "texture": "#s"},
|
||||
"down": {"uv": [7.25, 15.5, 8.75, 16], "texture": "#s"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"ground": {
|
||||
"translation": [0, 0, 7],
|
||||
"scale": [0.7, 0.7, 0.7]
|
||||
},
|
||||
"gui": {
|
||||
"translation": [0, 0.5, 0]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, 180, 0],
|
||||
"translation": [0, 0, -7.3]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"credit": "I made this with the Blockbench",
|
||||
"textures": {
|
||||
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",
|
||||
"side" : "engineersdecor:blocks/clinker_brick/clinker_brick_texture0"
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"credit": "I made this with the Blockbench",
|
||||
"textures": {
|
||||
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",
|
||||
"side" : "engineersdecor:blocks/clinker_brick/clinker_brick_texture0"
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
"credit": "I made this with the Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",
|
||||
|
|
|
@ -224,5 +224,13 @@
|
|||
{
|
||||
"ingredient": { "item": "minecraft:furnace", "data": 0 },
|
||||
"name": "itemFurnace"
|
||||
},
|
||||
{
|
||||
"ingredient": { "item": "minecraft:paper", "data": 0 },
|
||||
"name": "paperAny"
|
||||
},
|
||||
{
|
||||
"ingredient": { "item": "minecraft:lava_bucket", "data": 0 },
|
||||
"name": "anyLavaItem"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"result": "engineersdecor:sign_danger",
|
||||
"required": ["engineersdecor:sign_hotwire"]
|
||||
}
|
||||
],
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"ingredients": [
|
||||
{ "item": "engineersdecor:sign_hotwire" }
|
||||
],
|
||||
"result": {
|
||||
"item": "engineersdecor:sign_danger"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"result": "engineersdecor:sign_hotwire",
|
||||
"required": ["immersiveengineering:material"]
|
||||
}
|
||||
],
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"SSS",
|
||||
"SPS",
|
||||
"SSS"
|
||||
],
|
||||
"key": {
|
||||
"S": { "item": "#stickTreatedWood" },
|
||||
"P": { "item": "#paperAny" }
|
||||
},
|
||||
"result": {
|
||||
"item": "engineersdecor:sign_hotwire",
|
||||
"count": 1
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"result": "engineersdecor:sign_hotwire",
|
||||
"required": ["engineersdecor:sign_danger"]
|
||||
}
|
||||
],
|
||||
"type": "minecraft:crafting_shapeless",
|
||||
"ingredients": [
|
||||
{ "item": "engineersdecor:sign_danger" }
|
||||
],
|
||||
"result": {
|
||||
"item": "engineersdecor:sign_hotwire"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"conditions": [
|
||||
{
|
||||
"type": "engineersdecor:grc",
|
||||
"result": "engineersdecor:small_waste_incinerator",
|
||||
"required": ["immersiveengineering:material"]
|
||||
}
|
||||
],
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"HPP",
|
||||
"PHP",
|
||||
"PLP"
|
||||
],
|
||||
"key": {
|
||||
"L": {
|
||||
"item": "#anyLavaItem",
|
||||
"data": 0
|
||||
},
|
||||
"P": {
|
||||
"item": "#plateIron",
|
||||
"data": 0
|
||||
},
|
||||
"H": {
|
||||
"item": "#anyHopper",
|
||||
"data": 0
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "engineersdecor:small_waste_incinerator",
|
||||
"count": 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 587 B |
After Width: | Height: | Size: 845 B |
|
@ -0,0 +1 @@
|
|||
{ "animation":{ "frames": [0,1], "frametime":32, "interpolate":true }}
|
After Width: | Height: | Size: 581 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 23 KiB |
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
|
||||
"1.12.2": {
|
||||
"1.0.5": "[R] Release based on v1.0.5-b1. Release-to-release changes: * Small electrical passthrough-furnace added. * Passive fluid accumulator added. * Config options added. * Sign plates added. * Minor bug fixes.\n[A] Added sign \"Electrical hazzard\"/\"Caution hot wire\".\n[A] Added sign \"Caution dangerous there\" (skull/bones).",
|
||||
"1.0.5-b1": "[A] Added passive fluid accumulator.\n[A] Added small electrical passthrough-furnace.\n[F] Fixed version check URL.\n[M] Opt-out config options for valves, passive fluid accumulator, and furni.",
|
||||
"1.0.4": "[R] Release based on v1.0.4-b9. Release-to-release changes: * Crafting table: Quick crafting history re-fab, JEI integration. * Rendering improvements and issue fixes (stairs, ambient occlusion, optifine, etc). * Walls with texture variations. * Thin/thick steel poles with support feet/heads. * Horizontal steel double-T support beams added. * Fluid pipe valves added: Check valve, redstone controlled valve, analog redstone controlled valve. Support pressurized transfer. * Tool tip documentation (CTRL-SHIFT) for stairs added. * Internal code cleanups. * Recipes tuned.\n[E] Added pass-through electrical furnace (experimental, see config).",
|
||||
"1.0.4-b9": "[F] Inserting fluids with pressurized tag only into IE piping.\n[F] Valve redstone connector rendering does not check for \"can connect redstone\" but only for \"can provide power\".\n[M] Valves are adapted to be detected as pipe by IE.",
|
||||
|
@ -43,8 +44,8 @@
|
|||
"1.0.0-a1": "[A] Initial port to 1.13.2 with Forge beta."
|
||||
},
|
||||
"promos": {
|
||||
"1.12.2-recommended": "1.0.4",
|
||||
"1.12.2-latest": "1.0.5-b1",
|
||||
"1.12.2-recommended": "1.0.5",
|
||||
"1.12.2-latest": "1.0.5",
|
||||
"1.13.2-recommended": "",
|
||||
"1.13.2-latest": "1.0.4-b3"
|
||||
}
|
||||
|
|
33
readme.md
|
@ -17,7 +17,8 @@ Main distribution channel for this mod is CurseForge:
|
|||
----
|
||||
### Details
|
||||
|
||||
The mod has its focus decorative blocks. Current feature set:
|
||||
The mod has its focus decorative blocks and devices helping you to build nice
|
||||
looking manufacturing contraptions. Current feature set:
|
||||
|
||||
- *Treated wood crafting table*: 3x3 crafting table with IE style GUI and a model
|
||||
fitting better in the engineer's workshop. Keeps its inventory, has eight additional
|
||||
|
@ -30,6 +31,13 @@ The mod has its focus decorative blocks. Current feature set:
|
|||
(storage tray). Keeps inventory when relocated. Crafted with one cobblestone
|
||||
furnace, one hopper, and seven metal plates.
|
||||
|
||||
- *Small electrical furnace*: Pass-through electrical furnace. Can pull items out
|
||||
input side inventories, inserts items into inventories at the output side. Internal
|
||||
fifo slots. Automatically bypasses items that cannot be cooked or smelted. Electrical
|
||||
RF/FE power can be applied on all sides. Items can be inserted or drawn from all
|
||||
sides (e.g. with filtered hopper or whatever). Fits ideally into a conveyor belt
|
||||
line/lane. Consumption and efficiency tunable via config.
|
||||
|
||||
- Rebar (steel) reinforced concrete: Expensive but creeper-proof. Crafted 3x3 from
|
||||
four concrete blocks and five steel rods. Texture design oriented at the IE concrete,
|
||||
slightly darker, eight (position dependent) random texture variations with rust
|
||||
|
@ -93,8 +101,27 @@ The mod has its focus decorative blocks. Current feature set:
|
|||
wall, or floor. Light level like a torch. Thin, hence not blocking the way.
|
||||
Allows illuminating places where electrical light installations are problematic.
|
||||
|
||||
- *Fluid pipe check valve*: IE fluid pipe styled straight valve that conducts fluids
|
||||
only in one direction. Crafted from 3x3 from three fluid pipes.
|
||||
- *Fluid pipe check valve*: Check valve: IE fluid pipe styled straight valve that
|
||||
conducts fluids only in one direction. Crafted from 3x3 from three fluid pipes.
|
||||
Supports IE pressurized fluid transfer.
|
||||
|
||||
- *Redstone controlled valves*: Conduct only in one direction, on-off
|
||||
variant (open on redstone power) and analog variant (closed at power 0, linear
|
||||
flow slope, fully open at power 15). Support IE pressurized fluid transfer.
|
||||
|
||||
- *Passive fluid accumulator*: Block with one output and five input sides, that
|
||||
draws fluids out of adjacent tanks when a pump drains fluid from the output port.
|
||||
Implicit round-robin balanced drain from adjacent blocks. Random initial fluid
|
||||
drip-in to allow pumps to detect that fluids can be drained. The accumulator
|
||||
has a vacuum suction delay.
|
||||
|
||||
- *Industrial signs*: "Danger", "electrical hazard", etc.
|
||||
|
||||
- *Small waste incinerator*: Buffered and delayed item disposal device. 16 fifo
|
||||
slots are filled when new items are pushed in from any side. A GUI allows to
|
||||
take out accidentally trashed items or put in items to get rid of. When the fifo
|
||||
is full, the oldest stack will be disposed. The processing speed can be increased
|
||||
by connecting electrical RF/FE power.
|
||||
|
||||
More to come slowly but steadily.
|
||||
|
||||
|
|