Signs added. Experimental waste incinerator added.

This commit is contained in:
stfwi 2019-05-12 17:54:04 +02:00
parent 86d71c6931
commit 0e538f1c3e
36 changed files with 1174 additions and 13 deletions

View file

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

View file

@ -1,6 +1,7 @@
{ {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": { "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.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": "[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.", "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." "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": { "promos": {
"1.12.2-recommended": "1.0.4", "1.12.2-recommended": "1.0.5",
"1.12.2-latest": "1.0.5-b1" "1.12.2-latest": "1.0.5"
} }
} }

View file

@ -10,6 +10,17 @@ Mod sources for Minecraft version 1.12.2.
---- ----
## Revision history ## 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. - v1.0.5-b1 [A] Added passive fluid accumulator.
[A] Added small electrical passthrough-furnace. [A] Added small electrical passthrough-furnace.
[F] Fixed version check URL. [F] Fixed version check URL.

View file

@ -154,6 +154,7 @@ public class ModEngineersDecor
public static final int GUIID_CRAFTING_TABLE = 213101; public static final int GUIID_CRAFTING_TABLE = 213101;
public static final int GUIID_SMALL_LAB_FURNACE = 213102; public static final int GUIID_SMALL_LAB_FURNACE = 213102;
public static final int GUIID_ELECTRICAL_LAB_FURNACE = 213103; public static final int GUIID_ELECTRICAL_LAB_FURNACE = 213103;
public static final int GUIID_SMALL_WASTE_INCINERATOR = 213104;
@Override @Override
public Object getServerGuiElement(final int guiid, final EntityPlayer player, final World world, int x, int y, int z) 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_CRAFTING_TABLE: return BlockDecorCraftingTable.getServerGuiElement(player, world, pos, te);
case GUIID_SMALL_LAB_FURNACE: return BlockDecorFurnace.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_ELECTRICAL_LAB_FURNACE: return BlockDecorFurnaceElectrical.getServerGuiElement(player, world, pos, te);
case GUIID_SMALL_WASTE_INCINERATOR: return BlockDecorWasteIncinerator.getServerGuiElement(player, world, pos, te);
} }
return null; return null;
} }
@ -178,6 +180,7 @@ public class ModEngineersDecor
case GUIID_CRAFTING_TABLE: return BlockDecorCraftingTable.getClientGuiElement(player, world, pos, te); 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_SMALL_LAB_FURNACE: return BlockDecorFurnace.getClientGuiElement(player, world, pos, te);
case GUIID_ELECTRICAL_LAB_FURNACE: return BlockDecorFurnaceElectrical.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; return null;
} }

View file

@ -243,7 +243,6 @@ public class BlockDecorPipeValve extends BlockDecorDirected
} }
int n_filled = forward_fluid_handler().fill(res, doFill); int n_filled = forward_fluid_handler().fill(res, doFill);
filling_ = false; filling_ = false;
//if(n_filled > 0) System.out.println("F:" + resource.amount + "->" + n_filled);
return n_filled; return n_filled;
} }

View file

@ -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();
}
}
}

View file

@ -220,6 +220,34 @@ public class ModBlocks
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) 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 //-- Tile entities
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
@ -246,6 +274,9 @@ public class ModBlocks
private static final TileEntityRegistrationData PASSIVE_FLUID_ACCUMULATOR_TEI = new TileEntityRegistrationData( private static final TileEntityRegistrationData PASSIVE_FLUID_ACCUMULATOR_TEI = new TileEntityRegistrationData(
BlockDecorPassiveFluidAccumulator.BTileEntity.class, "te_passive_fluid_accumulator" 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 //-- Registration list
@ -287,10 +318,13 @@ public class ModBlocks
STEEL_DOUBLE_T_SUPPORT, STEEL_DOUBLE_T_SUPPORT,
STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, STRAIGHT_PIPE_VALVE_TEI, STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, STRAIGHT_PIPE_VALVE_TEI,
PASSIVE_FLUID_ACCUMULATOR, PASSIVE_FLUID_ACCUMULATOR_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[] = { private static final Object dev_content[] = {
SIGN_MINDSTEP,
SMALL_WASTE_INCINERATOR, WASTE_INCINERATOR_TEI
}; };
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------

View file

@ -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} }
}
}

View file

@ -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} }
}
}

View file

@ -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} }
}
}

View file

@ -0,0 +1,11 @@
{
"forge_marker": 1,
"defaults": {
"model": "engineersdecor:furnace/small_waste_incinerator_model"
},
"variants": {
"normal": [{}],
"inventory": [{}],
"lit": { "false":{}, "true":{}}
}
}

View file

@ -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 \ 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 \ 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. 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.name=Fluid pipe check valve
tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \ 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.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_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 # EOF
#----------------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------------

View file

@ -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 \ 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 \ 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. 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.name=Straight fluid valve
#tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. \ #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.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_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 # EOF
#----------------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------------

View file

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

View file

@ -0,0 +1,4 @@
{
"parent": "engineersdecor:block/sign/sign_triangular_model",
"textures": { "f": "engineersdecor:blocks/sign/sign_danger_texture" }
}

View file

@ -0,0 +1,4 @@
{
"parent": "engineersdecor:block/sign/sign_triangular_model",
"textures": { "f": "engineersdecor:blocks/sign/sign_hotwire_texture" }
}

View file

@ -0,0 +1,4 @@
{
"parent": "engineersdecor:block/sign/sign_decor_model",
"textures": { "f": "engineersdecor:blocks/sign/sign_mindstep_texture" }
}

View file

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

View file

@ -1,5 +1,4 @@
{ {
"credit": "I made this with the Blockbench",
"textures": { "textures": {
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0", "particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",
"side" : "engineersdecor:blocks/clinker_brick/clinker_brick_texture0" "side" : "engineersdecor:blocks/clinker_brick/clinker_brick_texture0"

View file

@ -1,5 +1,4 @@
{ {
"credit": "I made this with the Blockbench",
"textures": { "textures": {
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0", "particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",
"side" : "engineersdecor:blocks/clinker_brick/clinker_brick_texture0" "side" : "engineersdecor:blocks/clinker_brick/clinker_brick_texture0"

View file

@ -1,5 +1,4 @@
{ {
"credit": "I made this with the Blockbench",
"parent": "block/block", "parent": "block/block",
"textures": { "textures": {
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0", "particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",

View file

@ -224,5 +224,13 @@
{ {
"ingredient": { "item": "minecraft:furnace", "data": 0 }, "ingredient": { "item": "minecraft:furnace", "data": 0 },
"name": "itemFurnace" "name": "itemFurnace"
},
{
"ingredient": { "item": "minecraft:paper", "data": 0 },
"name": "paperAny"
},
{
"ingredient": { "item": "minecraft:lava_bucket", "data": 0 },
"name": "anyLavaItem"
} }
] ]

View file

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

View file

@ -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
}
}

View file

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

View file

@ -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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

View file

@ -0,0 +1 @@
{ "animation":{ "frames": [0,1], "frametime":32, "interpolate":true }}

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -1,6 +1,7 @@
{ {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": { "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.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": "[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.", "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." "1.0.0-a1": "[A] Initial port to 1.13.2 with Forge beta."
}, },
"promos": { "promos": {
"1.12.2-recommended": "1.0.4", "1.12.2-recommended": "1.0.5",
"1.12.2-latest": "1.0.5-b1", "1.12.2-latest": "1.0.5",
"1.13.2-recommended": "", "1.13.2-recommended": "",
"1.13.2-latest": "1.0.4-b3" "1.13.2-latest": "1.0.4-b3"
} }

View file

@ -17,7 +17,8 @@ Main distribution channel for this mod is CurseForge:
---- ----
### Details ### 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 - *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 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 (storage tray). Keeps inventory when relocated. Crafted with one cobblestone
furnace, one hopper, and seven metal plates. 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 - 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, four concrete blocks and five steel rods. Texture design oriented at the IE concrete,
slightly darker, eight (position dependent) random texture variations with rust 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. wall, or floor. Light level like a torch. Thin, hence not blocking the way.
Allows illuminating places where electrical light installations are problematic. Allows illuminating places where electrical light installations are problematic.
- *Fluid pipe check valve*: IE fluid pipe styled straight valve that conducts fluids - *Fluid pipe check valve*: Check valve: IE fluid pipe styled straight valve that
only in one direction. Crafted from 3x3 from three fluid pipes. 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. More to come slowly but steadily.