Release merge v1.0.5-mc1.12.2.

This commit is contained in:
stfwi 2019-05-12 17:54:48 +02:00
commit 0b89110a33
50 changed files with 1263 additions and 56 deletions

View file

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

View file

@ -1,7 +1,9 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.4": "[R] Release based on v1.0.3-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 pressuzized transfer. * Tooltip documentation (CTRL-SHIFT) for stairs added. * Internal code cleanups. * Recipes tuned.\n[E] Added pass-through electrical furnace (experimental, see config).",
"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.",
"1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[E] Added passive fluid accumulator (experimental feature, see config).",
"1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.",
@ -33,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.4"
"1.12.2-recommended": "1.0.5",
"1.12.2-latest": "1.0.5"
}
}

View file

@ -11,7 +11,24 @@ Mod sources for Minecraft version 1.12.2.
## Revision history
-------------------------------------------------------------------
- v1.0.4 [R] Release based on v1.0.3-b9. Release-to-release changes:
- 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.
[M] Opt-out config options for valves, passive fluid accumulator,
and furni.
-------------------------------------------------------------------
- v1.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).
@ -19,8 +36,8 @@ Mod sources for Minecraft version 1.12.2.
* 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 pressuzized transfer.
* Tooltip documentation (CTRL-SHIFT) for stairs added.
analog redstone controlled valve. Support pressurized transfer.
* Tool tip documentation (CTRL-SHIFT) for stairs added.
* Internal code cleanups.
* Recipes tuned.
-------------------------------------------------------------------

View file

@ -48,7 +48,7 @@ import javax.annotation.Nonnull;
version = ModEngineersDecor.MODVERSION,
dependencies = "required-after:forge@[14.23.5.2768,);before:immersiveengineering",
useMetadata = true,
updateJSON = "https://raw.githubusercontent.com/stfwi/engineersdecor/develop/meta/update.json",
updateJSON = "https://raw.githubusercontent.com/stfwi/engineers-decor/develop/meta/update.json",
certificateFingerprint = ((ModEngineersDecor.MODFINGERPRINT==("@"+"MOD_SIGNSHA1"+"@")) ? "" : ModEngineersDecor.MODFINGERPRINT)
)
@SuppressWarnings({"unused", "ConstantConditions"})
@ -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;
}

View file

@ -11,7 +11,6 @@ package wile.engineersdecor.blocks;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.ExtItems;
import net.minecraft.stats.StatList;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.Block;
@ -41,6 +40,7 @@ import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.*;
import net.minecraft.stats.StatList;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
@ -109,9 +109,9 @@ public class BlockDecorFurnace extends BlockDecorDirected
NBTTagCompound inventory_nbt = stack.getTagCompound().getCompoundTag("inventory");
if(inventory_nbt.isEmpty()) return;
final TileEntity te = world.getTileEntity(pos);
if(!(te instanceof BTileEntity)) return;
((BTileEntity)te).readnbt(inventory_nbt);
((BTileEntity)te).markDirty();
if(!(te instanceof BlockDecorFurnace.BTileEntity)) return;
((BlockDecorFurnace.BTileEntity)te).readnbt(inventory_nbt);
((BlockDecorFurnace.BTileEntity)te).markDirty();
}
@Override

View file

@ -4,20 +4,20 @@
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* ED electrical furnace.
* ED small electrical pass-through furnace.
*/
package wile.engineersdecor.blocks;
import wile.engineersdecor.ModEngineersDecor;
import net.minecraft.stats.StatList;
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.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.init.Items;
@ -29,6 +29,7 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.*;
import net.minecraft.stats.StatList;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
@ -62,6 +63,20 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
return true;
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
{
world.setBlockState(pos, state.withProperty(LIT, false));
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 BlockDecorFurnaceElectrical.BTileEntity)) return;
((BlockDecorFurnaceElectrical.BTileEntity)te).readnbt(inventory_nbt);
((BlockDecorFurnaceElectrical.BTileEntity)te).markDirty();
}
@Override
@SideOnly(Side.CLIENT)
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rnd)
@ -382,7 +397,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
{ return 7; }
public boolean isBurning()
{ return burntime_left_ > 0; }
{ return (burntime_left_ > 0); }
private boolean transferItems(final int index_from, final int index_to, int count)
{
@ -622,6 +637,14 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
return true;
}
private void sync_blockstate()
{
final IBlockState state = world.getBlockState(pos);
if((state.getBlock() instanceof BlockDecorFurnaceElectrical) && (state.getValue(LIT) != isBurning())) {
world.setBlockState(pos, state.withProperty(LIT, isBurning()), 2);
}
}
@Override
public void update()
{
@ -631,7 +654,8 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
if(was_burning) burntime_left_ -= TICK_INTERVAL;
if(burntime_left_ < 0) burntime_left_ = 0;
if(world.isRemote) return;
boolean dirty = false;
boolean update_blockstate = (was_burning != isBurning());
boolean dirty = update_blockstate;
boolean shift_in = false;
boolean shift_out = false;
if(--fifo_timer_ <= 0) {
@ -649,7 +673,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
} else {
// smelt
if(!isBurning() && can_smelt) {
if(heat_up()) dirty = true;
if(heat_up()) { dirty = true; update_blockstate = true; }
}
if(isBurning() && can_smelt) {
if(heat_up()) dirty = true;
@ -667,14 +691,11 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace
}
} else if(proc_time_elapsed_ > 0) {
proc_time_elapsed_ -= ((stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty() ? 20 : 1);
if(proc_time_elapsed_ < 0) { proc_time_elapsed_ = 0; shift_out = true; }
if(proc_time_elapsed_ < 0) { proc_time_elapsed_ = 0; shift_out = true; update_blockstate = true; }
}
if(was_burning != isBurning()) {
if(update_blockstate) {
dirty = true;
final IBlockState state = world.getBlockState(pos);
if(state.getBlock() instanceof BlockDecorFurnace) {
world.setBlockState(pos, state.withProperty(LIT, isBurning()));
}
sync_blockstate();
}
if(adjacent_inventory_shift(shift_in, shift_out)) dirty = true;
if(dirty) markDirty();

View file

@ -15,8 +15,6 @@ package wile.engineersdecor.blocks;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumHand;
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.ModAuxiliaries;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
@ -41,7 +39,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implements ModAuxiliaries.IExperimentalFeature
public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected
{
public BlockDecorPassiveFluidAccumulator(@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); }
@ -59,7 +57,7 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem
if(world.isRemote) return true;
TileEntity te = world.getTileEntity(pos);
if(!(te instanceof BTileEntity)) return true;
((BTileEntity)te).debug_info_dump(player);
((BTileEntity)te).send_device_stats(player);
return true;
}
@ -70,7 +68,7 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem
// Tile entity
//--------------------------------------------------------------------------------------------------------------------
public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider, ITickable, ModAuxiliaries.IExperimentalFeature
public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider, ITickable
{
protected static int tick_idle_interval = 20; // ca 1000ms, simulates suction delay and saves CPU when not drained.
protected static int max_flowrate = 1000;
@ -83,15 +81,13 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected implem
private int tick_timer_ = 0;
private int round_robin_ = 0;
private boolean initialized_ = false;
private int total_volume_filled_ = 0;
private int total_volume_drained_ = 0;
@Deprecated
public void debug_info_dump(EntityPlayer player)
public void send_device_stats(EntityPlayer player)
{
int t_vol = (tank_==null) ? 0 : (tank_.amount);
ModAuxiliaries.playerChatMessage(player,"pfacc I:" + total_volume_filled_ + " O:" + total_volume_drained_ + " B:" + t_vol);
ModAuxiliaries.playerChatMessage(player,"" + t_vol + "mB");
}
public void block_changed()

View file

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

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)
);
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
@ -285,12 +316,15 @@ public class ModBlocks
THIN_STEEL_POLE_HEAD,
THICK_STEEL_POLE_HEAD,
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,
SMALL_ELECTRICAL_FURNACE, SMALL_ELECTRICAL_FURNACE_TEI,
SIGN_HOTWIRE, SIGN_DANGER
};
private static final Object dev_content[] = {
PASSIVE_FLUID_ACCUMULATOR, PASSIVE_FLUID_ACCUMULATOR_TEI,
SMALL_ELECTRICAL_FURNACE, SMALL_ELECTRICAL_FURNACE_TEI
SIGN_MINDSTEP,
SMALL_WASTE_INCINERATOR, WASTE_INCINERATOR_TEI
};
//--------------------------------------------------------------------------------------------------------------------

View file

@ -75,6 +75,11 @@ public class ModConfig
@Config.RequiresMcRestart
public boolean without_lab_furnace = false;
@Config.Comment({"Disable small electrical pass-through furnace."})
@Config.Name("Without electrical furnace")
@Config.RequiresMcRestart
public boolean without_electrical_furnace = false;
@Config.Comment({"Disable treated wood table, stool, windowsill, pole, etc."})
@Config.Name("Without tr. wood furniture")
@Config.RequiresMcRestart
@ -110,6 +115,14 @@ public class ModConfig
@Config.Comment({"Disable history refabrication feature of the treated wood crafting table."})
@Config.Name("Without crafting table history")
public boolean without_crafting_table_history = false;
@Config.Comment({"Disable check valve, and redstone controlled valves."})
@Config.Name("Without valves")
public boolean without_valves = false;
@Config.Comment({"Disable the passive fluid accumulator."})
@Config.Name("Without fluid accumulator")
public boolean without_passive_fluid_accumulator = false;
}
@Config.Comment({
@ -276,12 +289,15 @@ public class ModConfig
if(optout.without_ie_concrete_wall && rn.startsWith("concrete_wall")) return true;
if(optout.without_panzer_glass && rn.startsWith("panzerglass_")) return true;
if(optout.without_crafting_table && (block instanceof BlockDecorCraftingTable)) return true;
if(optout.without_lab_furnace && (block instanceof BlockDecorFurnace)) return true;
if(optout.without_lab_furnace && ((block instanceof BlockDecorFurnace)) && (!(block instanceof BlockDecorFurnaceElectrical))) return true;
if(optout.without_electrical_furnace && (block instanceof BlockDecorFurnaceElectrical)) return true;
if(optout.without_passive_fluid_accumulator && (block instanceof BlockDecorPassiveFluidAccumulator)) return true;
if(optout.without_windows && rn.endsWith("_window")) return true;
if(optout.without_light_sources && rn.endsWith("_light")) return true;
if(optout.without_ladders && (block instanceof BlockDecorLadder)) return true;
if(optout.without_walls && rn.endsWith("_wall")) return true;
if(optout.without_stairs && rn.endsWith("_stairs")) return true;
if(optout.without_valves && rn.contains("_pipe_valve")) return true;
if(optout.without_treated_wood_furniture) {
if(block instanceof BlockDecorChair) return true;
if(rn.equals("treated_wood_pole")) return true;

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

@ -7,6 +7,9 @@
"normal": [{}],
"inventory": [{}],
"facing": { "north": {"y":0}, "south": {"y":180}, "west": {"y":-90}, "east": {"y":90}, "up":{}, "down":{} },
"lit": { "false":{ "textures":{ "gloom": "engineersdecor:blocks/furnace/small_electrical_furnace_gloom_off" } }, "true":{}}
"lit": { "false":{}, "true":{ "textures": {
"front": "engineersdecor:blocks/furnace/small_electrical_furnace_front_lit",
"back": "engineersdecor:blocks/furnace/small_electrical_furnace_back_lit"
}}}
}
}

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 \
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
#-----------------------------------------------------------------------------------------------------------

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 \
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
#-----------------------------------------------------------------------------------------------------------

View file

@ -7,7 +7,8 @@
"left": "engineersdecor:blocks/furnace/small_electrical_furnace_left",
"right": "engineersdecor:blocks/furnace/small_electrical_furnace_right",
"front": "engineersdecor:blocks/furnace/small_electrical_furnace_front",
"back": "engineersdecor:blocks/furnace/small_electrical_furnace_back"
"back": "engineersdecor:blocks/furnace/small_electrical_furnace_back",
"radiator": "engineersdecor:blocks/furnace/small_electrical_furnace_radiator"
},
"elements": [
{
@ -15,9 +16,9 @@
"to": [13.75, 17, 15],
"rotation": {"angle": 45, "axis": "z", "origin": [15.5, 13.5, 8]},
"faces": {
"north": {"uv": [0, 0, 1, 5.5], "texture": "#front"},
"east": {"uv": [0, 1, 5, 15], "rotation": 90, "texture": "#top"},
"south": {"uv": [0, 0, 1, 5.5], "texture": "#back"}
"north": {"uv": [0, 0, 1, 5.5], "texture": "#radiator"},
"east": {"uv": [0, 1, 5, 15], "rotation": 90, "texture": "#radiator"},
"south": {"uv": [0, 0, 1, 5.5], "texture": "#radiator"}
}
},
{
@ -25,9 +26,9 @@
"to": [3.25, 17, 15],
"rotation": {"angle": -45, "axis": "z", "origin": [0.5, 13.5, 8]},
"faces": {
"north": {"uv": [0, 0, 1, 5.5], "texture": "#front"},
"south": {"uv": [0, 0, 1, 5.5], "texture": "#back"},
"west": {"uv": [0, 1, 5, 15], "rotation": 270, "texture": "#top"}
"north": {"uv": [0, 0, 1, 5.5], "texture": "#radiator"},
"south": {"uv": [0, 0, 1, 5.5], "texture": "#radiator"},
"west": {"uv": [11, 1, 16, 15], "rotation": 270, "texture": "#radiator"}
}
},
{

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": {
"particle": "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": {
"particle": "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",
"textures": {
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",

View file

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

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: 893 B

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

View file

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

View file

@ -1 +0,0 @@
{ "animation":{ "frames": [0,1,2,3,4,5,6,7], "frametime":8, "interpolate":true }}

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

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,7 +1,9 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.4": "[R] Release based on v1.0.3-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 pressuzized transfer. * Tooltip documentation (CTRL-SHIFT) for stairs added. * Internal code cleanups. * Recipes tuned.\n[E] Added pass-through electrical furnace (experimental, see config).",
"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.",
"1.0.4-b8": "[F] Fixed stairs rendering without smooth light (thanks rastot9).\n[E] Added passive fluid accumulator (experimental feature, see config).",
"1.0.4-b7": "[F] Fixed recipe loading issue if IE is not installed.\n[M] Valves support IE pressurized fluid transfer.",
@ -42,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.4",
"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"
}

View file

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