Models adapted (3rd/1st person display). Experimental Slab Slices: recipes. Experimental mineal melter concept implementation.

This commit is contained in:
stfwi 2019-06-29 23:39:42 +02:00
parent c611de59e2
commit 0748d9fec4
69 changed files with 1686 additions and 298 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.9-b2
version_engineersdecor=1.0.9-b3

View file

@ -10,7 +10,13 @@ Mod sources for Minecraft version 1.12.2.
----
## Version history
~ v1.0.9-b2 [A] Added slabs for Clinker Brick, Slag Brick, Rebar Concrete,
~ v1.0.9-b3 [A] Added missing recipes for slabs.
[A] Added slab slices for IE sheet metals, treated wood,
and concretes (stackable "quater-slabs").
[M] Updated 1st/3rd person item model rotations/translations.
[M] Hardness of valves and furni slightly increased.
- v1.0.9-b2 [A] Added slabs for Clinker Brick, Slag Brick, Rebar Concrete,
and Stained Clinker. Texture variations like the base blocks.
Allow fast pick-up (see tooltip help or config).
[F] Fixed lab/electrical furnace initialisation issue (first item

View file

@ -0,0 +1,83 @@
/*
* @file BlockDecorDirectedHorizontal.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Smaller directed block with direction set narrowed
* to horizontal directions.
*/
package wile.engineersdecor.blocks;
import net.minecraft.block.BlockHorizontal;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.state.IBlockState;
import net.minecraft.block.SoundType;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.EnumHand;
import net.minecraft.util.Mirror;
import net.minecraft.util.Rotation;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class BlockDecorDirectedHorizontal extends BlockDecorDirected
{
public static final PropertyDirection FACING = BlockHorizontal.FACING;
public BlockDecorDirectedHorizontal(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB)
{ super(registryName, config|CFG_HORIZIONTAL, material, hardness, resistance, sound, unrotatedAABB); }
@Override
public IBlockState getStateFromMeta(int meta)
{ return this.getDefaultState().withProperty(FACING, EnumFacing.byHorizontalIndex(meta & 0x3)); }
@Override
public int getMetaFromState(IBlockState state)
{ return state.getValue(FACING).getHorizontalIndex(); }
@Override
protected BlockStateContainer createBlockState()
{ return new BlockStateContainer(this, FACING); }
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
{ return AABBs.get(state.getValue(FACING).getIndex() & 0x7); }
@Override
@Nullable
public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos)
{ return getBoundingBox(state, world, pos); }
@Override
public IBlockState withRotation(IBlockState state, Rotation rot)
{ return state; }
@Override
public IBlockState withMirror(IBlockState state, Mirror mirrorIn)
{ return state; }
@Override
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand)
{
if((config & CFG_LOOK_PLACEMENT) != 0) {
// horizontal placement in direction the player is looking
facing = placer.getHorizontalFacing();
} else {
// horizontal placement on a face
facing = ((facing==EnumFacing.UP)||(facing==EnumFacing.DOWN)) ? (placer.getHorizontalFacing()) : facing;
}
if((config & CFG_OPPOSITE_PLACEMENT)!=0) facing = facing.getOpposite();
if(((config & CFG_FLIP_PLACEMENT_SHIFTCLICK) != 0) && (placer.isSneaking())) facing = facing.getOpposite();
return getDefaultState().withProperty(FACING, facing);
}
}

View file

@ -0,0 +1,698 @@
/*
* @file BlockDecorMineralSmelter.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Small highly insulated stone liquification furnace
* (magmatic phase).
*/
package wile.engineersdecor.blocks;
import net.minecraft.block.state.BlockFaceShape;
import net.minecraft.world.IBlockAccess;
import wile.engineersdecor.ModEngineersDecor;
import net.minecraft.block.properties.PropertyInteger;
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.tileentity.TileEntity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.*;
import net.minecraft.inventory.*;
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.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.IFluidTankProperties;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class BlockDecorMineralSmelter extends BlockDecorDirectedHorizontal
{
public static final int PHASE_MAX = 3;
public static final PropertyInteger PHASE = PropertyInteger.create("phase", 0, PHASE_MAX);
public BlockDecorMineralSmelter(@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, FACING, PHASE); }
@Override
public IBlockState getStateFromMeta(int meta)
{ return super.getStateFromMeta(meta).withProperty(PHASE, (meta>>2) & 0x3); }
@Override
public int getMetaFromState(IBlockState state)
{ return super.getMetaFromState(state) | (state.getValue(PHASE)<<2); }
@Override
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand)
{ return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand).withProperty(PHASE, 0); }
@Override
public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face)
{ return BlockFaceShape.SOLID; }
@Override
@SuppressWarnings("deprecation")
public boolean hasComparatorInputOverride(IBlockState state)
{ return true; }
@Override
@SuppressWarnings("deprecation")
public int getComparatorInputOverride(IBlockState state, World world, BlockPos pos)
{ return MathHelper.clamp((state.getValue(PHASE)*5), 0, 15); }
@Override
public boolean hasTileEntity(IBlockState state)
{ return true; }
@Nullable
public TileEntity createTileEntity(World world, IBlockState state)
{ return new BlockDecorMineralSmelter.BTileEntity(); }
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
{}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest)
{
if(world.isRemote) return true;
BTileEntity te = getTe(world, pos);
if(te==null) return super.removedByPlayer(state, world, pos, player, willHarvest);
ItemStack st = ItemStack.EMPTY;
if(!te.getStackInSlot(1).isEmpty()) {
st = te.getStackInSlot(1).copy();
} else if(!te.getStackInSlot(0).isEmpty()) {
st = te.getStackInSlot(0).copy();
}
te.reset_process();
ItemStack stack = new ItemStack(this, 1);
world.spawnEntity(new EntityItem(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack));
world.setBlockToAir(pos);
world.removeTileEntity(pos);
if(!st.isEmpty()) {
st.setCount(1);
world.spawnEntity(new EntityItem(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, st));
}
return false;
}
@Override
public void onBlockExploded(World world, BlockPos pos, Explosion explosion)
{
if(world.isRemote) return;
BTileEntity te = getTe(world, pos);
if(te==null) return;
te.reset_process();
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;
if(player.isSneaking()) return false;
BTileEntity te = getTe(world, pos);
if(te==null) return true;
final ItemStack stack = player.getHeldItem(hand);
boolean dirty = false;
if(te.accepts_lava_container(stack)) {
if(stack.isItemEqualIgnoreDurability(BTileEntity.BUCKET_STACK)) { // check how this works with item capabilities or so
if(te.fluid_level() >= BTileEntity.MAX_BUCKET_EXTRACT_FLUID_LEVEL) {
te.reset_process();
player.setHeldItem(hand, BTileEntity.LAVA_BUCKET_STACK.copy());
world.playSound(null, pos, SoundEvents.ITEM_BUCKET_FILL_LAVA, SoundCategory.BLOCKS, 1f, 1f);
dirty = true;
}
}
} else if(stack.getItem() == Items.AIR) {
final ItemStack istack = te.getStackInSlot(1).copy();
if(te.phase() > BTileEntity.PHASE_WARMUP) player.setFire(1);
if(!istack.isEmpty()) {
istack.setCount(1);
player.setHeldItem(hand, istack);
te.reset_process();
dirty = true;
}
} else if(te.insert(stack.copy(),false)) {
stack.shrink(1);
dirty = true;
}
if(dirty) player.inventory.markDirty();
return true;
}
@Override
@SideOnly(Side.CLIENT)
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rnd)
{
if(state.getBlock()!=this) return;
EnumParticleTypes particle = EnumParticleTypes.SMOKE_NORMAL;
switch(state.getValue(PHASE)) {
case BTileEntity.PHASE_WARMUP:
return;
case BTileEntity.PHASE_HOT:
if(rnd.nextInt(10) > 4) return;
break;
case BTileEntity.PHASE_MAGMABLOCK:
if(rnd.nextInt(10) > 7) return;
particle = EnumParticleTypes.SMOKE_LARGE;
break;
case BTileEntity.PHASE_LAVA:
if(rnd.nextInt(10) > 2) return;
particle = EnumParticleTypes.LAVA;
break;
default:
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(particle, x+xr, y+yr, z+zr, 0.0, 0.0, 0.0);
}
@Nullable
private BTileEntity getTe(World world, BlockPos pos)
{ final TileEntity te=world.getTileEntity(pos); return (!(te instanceof BTileEntity)) ? (null) : ((BTileEntity)te); }
//--------------------------------------------------------------------------------------------------------------------
// Tile entity
//--------------------------------------------------------------------------------------------------------------------
public static class BTileEntity extends TileEntity implements ITickable, ISidedInventory, IEnergyStorage
{
public static final int TICK_INTERVAL = 20;
public static final int MAX_FLUID_LEVEL = 1000;
public static final int MAX_BUCKET_EXTRACT_FLUID_LEVEL = 900;
public static final int MAX_ENERGY_BUFFER = 32000;
public static final int MAX_ENERGY_TRANSFER = 8192;
public static final int DEFAULT_ENERGY_CONSUMPTION = 92;
public static final int DEFAULT_HEATUP_RATE = 2; // -> 50s for one smelting process
public static final int PHASE_WARMUP = 0;
public static final int PHASE_HOT = 1;
public static final int PHASE_MAGMABLOCK = 2;
public static final int PHASE_LAVA = 3;
private static final ItemStack MAGMA_STACK = new ItemStack(Blocks.MAGMA);
private static final ItemStack BUCKET_STACK = new ItemStack(Items.BUCKET);
private static final ItemStack LAVA_BUCKET_STACK = new ItemStack(Items.LAVA_BUCKET);
private static int energy_consumption = DEFAULT_ENERGY_CONSUMPTION;
private static int heatup_rate = DEFAULT_HEATUP_RATE;
private static int cooldown_rate = 1;
private static Set<Item> accepted_minerals = new HashSet<Item>();
private static Set<Item> accepted_lava_contrainers = new HashSet<Item>();
private int tick_timer_;
private int energy_stored_;
private int progress_;
private int fluid_level_;
private boolean force_block_update_;
private NonNullList<ItemStack> stacks_ = NonNullList.<ItemStack>withSize(2, ItemStack.EMPTY);
static {
// Mineals: No Nether brick (made of Netherrack),
// no glazed terracotta, no obsidian, no stairs, slabs etc.
accepted_minerals.add(Item.getItemFromBlock(Blocks.COBBLESTONE));
accepted_minerals.add(Item.getItemFromBlock(Blocks.STONE));
accepted_minerals.add(Item.getItemFromBlock(Blocks.SANDSTONE));
accepted_minerals.add(Item.getItemFromBlock(Blocks.PRISMARINE));
accepted_minerals.add(Item.getItemFromBlock(Blocks.END_STONE));
accepted_minerals.add(Item.getItemFromBlock(Blocks.MOSSY_COBBLESTONE));
accepted_minerals.add(Item.getItemFromBlock(Blocks.RED_SANDSTONE));
accepted_minerals.add(Item.getItemFromBlock(Blocks.QUARTZ_BLOCK));
accepted_minerals.add(Item.getItemFromBlock(Blocks.BRICK_BLOCK));
accepted_minerals.add(Item.getItemFromBlock(Blocks.END_BRICKS));
accepted_minerals.add(Item.getItemFromBlock(Blocks.HARDENED_CLAY));
accepted_minerals.add(Item.getItemFromBlock(Blocks.STAINED_HARDENED_CLAY));
accepted_minerals.add(Item.getItemFromBlock(Blocks.STONEBRICK));
// Lava containers
accepted_lava_contrainers.add(Items.BUCKET);
}
public static void on_config(int energy_consumption, int heatup_per_second)
{
energy_consumption = MathHelper.clamp(energy_consumption, 32, 4096);
heatup_rate = MathHelper.clamp(heatup_per_second, 1, 5);
cooldown_rate = MathHelper.clamp(heatup_per_second/2, 1, 5);
ModEngineersDecor.logger.info("Config mineal smelter energy consumption:" + energy_consumption + "rf/t, heat-up rate: " + heatup_rate + "%/s.");
}
public BTileEntity()
{ reset_process(); }
public int progress()
{ return progress_; }
public int phase()
{
if(progress_ >= 100) return PHASE_LAVA;
if(progress_ >= 90) return PHASE_MAGMABLOCK;
if(progress_ >= 5) return PHASE_HOT;
return PHASE_WARMUP;
}
public int fluid_level()
{ return fluid_level_; }
public int fluid_level_drain(int amount)
{ amount = MathHelper.clamp(amount, 0, fluid_level_); fluid_level_ -= amount; return amount; }
public int comparator_signal()
{ return phase() * 5; } // -> 0..15
private boolean accepts_lava_container(ItemStack stack)
{ return accepted_lava_contrainers.contains(stack.getItem()); }
private boolean accepts_input(ItemStack stack)
{
if(!stacks_.get(0).isEmpty()) return false;
if(fluid_level() > MAX_BUCKET_EXTRACT_FLUID_LEVEL) {
return accepts_lava_container(stack);
} else {
return accepted_minerals.contains(stack.getItem());
}
}
public boolean insert(final ItemStack stack, boolean simulate)
{
if(stack.isEmpty() || (!accepts_input(stack))) return false;
if(!simulate) {
ItemStack st = stack.copy();
st.setCount(st.getMaxStackSize());
stacks_.set(0, st);
if(!accepts_lava_container(stack)) progress_ = 0;
force_block_update_ = true;
}
return true;
}
public ItemStack extract(boolean simulate)
{
ItemStack stack = stacks_.get(1).copy();
if(stack.isEmpty()) return ItemStack.EMPTY;
if(!simulate) reset_process();
return stack;
}
protected void reset_process()
{
stacks_ = NonNullList.<ItemStack>withSize(2, ItemStack.EMPTY);
force_block_update_ = true;
fluid_level_ = 0;
tick_timer_ = 0;
progress_ = 0;
}
public void readnbt(NBTTagCompound nbt)
{
energy_stored_ = nbt.getInteger("energy");
progress_ = nbt.getInteger("progress");
fluid_level_ = nbt.getInteger("fluidlevel");
ItemStackHelper.loadAllItems(nbt, stacks_);
if(stacks_.size() != 1) reset_process();
}
protected void writenbt(NBTTagCompound nbt)
{
nbt.setInteger("energy", MathHelper.clamp(energy_stored_,0 , MAX_ENERGY_BUFFER));
nbt.setInteger("progress", MathHelper.clamp(progress_,0 , 100));
nbt.setInteger("fluidlevel", MathHelper.clamp(fluid_level_,0 , MAX_FLUID_LEVEL));
ItemStackHelper.saveAllItems(nbt, stacks_);
}
// TileEntity ------------------------------------------------------------------------------
@Override
public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns)
{ return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorMineralSmelter)); }
@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 >= 0) && (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)
{ if(stack.getCount()>getInventoryStackLimit()){stack.setCount(getInventoryStackLimit());} stacks_.set(index, stack); markDirty(); }
@Override
public int getInventoryStackLimit()
{ return 1; }
@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) && accepts_input(stack)) || (index==1); }
@Override
public int getField(int id)
{ return 0; }
@Override
public void setField(int id, int value)
{}
@Override
public int getFieldCount()
{ return 0; }
@Override
public void clear()
{ reset_process(); }
// ISidedInventory ----------------------------------------------------------------------------
private static final int[] SIDED_INV_SLOTS = new int[] {0,1};
@Override
public int[] getSlotsForFace(EnumFacing side)
{ return SIDED_INV_SLOTS; }
@Override
public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction)
{ return (index==0) && isItemValidForSlot(index, stack); }
@Override
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction)
{ return (index==1) && (!stacks_.get(1).isEmpty()); }
// IEnergyStorage ----------------------------------------------------------------------------
@Override
public boolean canExtract()
{ return false; }
@Override
public boolean canReceive()
{ return true; }
@Override
public int getMaxEnergyStored()
{ return MAX_ENERGY_BUFFER; }
@Override
public int getEnergyStored()
{ return energy_stored_; }
@Override
public int extractEnergy(int maxExtract, boolean simulate)
{ return 0; }
@Override
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 --------------------------------------------------------------------------------
protected static class BItemHandler implements IItemHandler
{
private BTileEntity te;
BItemHandler(BTileEntity te)
{ this.te = te; }
@Override
public int getSlots()
{ return 2; }
@Override
public int getSlotLimit(int index)
{ return te.getInventoryStackLimit(); }
@Override
public boolean isItemValid(int slot, @Nonnull ItemStack stack)
{ return te.isItemValidForSlot(slot, stack); }
@Override
@Nonnull
public ItemStack insertItem(int index, @Nonnull ItemStack stack, boolean simulate)
{
ItemStack rstack = stack.copy();
if((index!=0) || (!te.insert(stack.copy(), simulate))) return rstack;
rstack.shrink(1);
return rstack;
}
@Override
@Nonnull
public ItemStack extractItem(int index, int amount, boolean simulate)
{ return (index!=1) ? ItemStack.EMPTY : te.extract(simulate); }
@Override
@Nonnull
public ItemStack getStackInSlot(int index)
{ return te.getStackInSlot(index); }
}
private BItemHandler item_handler_ = new BItemHandler(this);
// IFluidHandler --------------------------------------------------------------------------------
private static class BFluidHandler implements IFluidHandler, IFluidTankProperties
{
private final FluidStack lava;
private final BTileEntity te;
private final IFluidTankProperties[] props_ = {this};
BFluidHandler(BTileEntity te) { this.te=te; lava = new FluidStack(FluidRegistry.LAVA, 1); }
@Override @Nullable public FluidStack getContents() { return new FluidStack(lava, te.fluid_level()); }
@Override public IFluidTankProperties[] getTankProperties() { return props_; }
@Override public int fill(FluidStack resource, boolean doFill) { return 0; }
@Override public int getCapacity() { return 1000; }
@Override public boolean canFill() { return false; }
@Override public boolean canDrain() { return true; }
@Override public boolean canFillFluidType(FluidStack fluidStack) { return false; }
@Override public boolean canDrainFluidType(FluidStack fluidStack) { return fluidStack.isFluidEqual(lava); }
@Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain)
{
if((te.fluid_level() <= 0) || (!resource.isFluidEqual(lava))) return null;
FluidStack fs = getContents();
if(doDrain) te.fluid_level_drain(fs.amount);
return fs;
}
@Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain)
{
if(te.fluid_level() <= 0) return null;
maxDrain = (doDrain) ? (te.fluid_level_drain(maxDrain)) : (Math.min(maxDrain, te.fluid_level()));
return new FluidStack(FluidRegistry.LAVA, maxDrain);
}
}
private final BFluidHandler fluid_handler_ = new BFluidHandler(this);
// Capability export ----------------------------------------------------------------------------
@Override
public boolean hasCapability(Capability<?> cap, EnumFacing facing)
{ return ((cap==CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
|| (cap==CapabilityEnergy.ENERGY)
|| (cap==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
|| (super.hasCapability(cap, facing))
);
}
@Override
@SuppressWarnings("unchecked")
@Nullable
public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing)
{
if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return (T)item_handler_;
} else if(capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return (T)fluid_handler_;
} else if(capability == CapabilityEnergy.ENERGY) {
return (T)this;
} else {
return super.getCapability(capability, facing);
}
}
// ITickable ------------------------------------------------------------------------------------
@Override
public void update()
{
if(world.isRemote) return;
if(--tick_timer_ > 0) return;
tick_timer_ = TICK_INTERVAL;
boolean dirty = false;
final int last_phase = phase();
final ItemStack istack = stacks_.get(0);
if(istack.isEmpty() && (fluid_level()==0)) {
progress_ = 0;
} else if((energy_stored_ <= 0) || (world.isBlockPowered(pos))) {
progress_ = MathHelper.clamp(progress_-cooldown_rate, 0,100);
} else if(progress_ >= 100) {
progress_ = 100;
energy_stored_ = MathHelper.clamp(energy_stored_-((energy_consumption*TICK_INTERVAL)/20), 0, MAX_ENERGY_BUFFER);
} else {
energy_stored_ = MathHelper.clamp(energy_stored_-(energy_consumption*TICK_INTERVAL), 0, MAX_ENERGY_BUFFER);
progress_ = MathHelper.clamp(progress_+heatup_rate, 0, 100);
}
int new_phase = phase();
boolean is_lava_container = accepts_lava_container(istack);
if(is_lava_container || (new_phase != last_phase)) {
if(is_lava_container) {
// That stays in the slot until its extracted or somone takes it out.
if(istack.isItemEqual(BUCKET_STACK)) {
if(!stacks_.get(1).isItemEqual(LAVA_BUCKET_STACK)) {
if(fluid_level() >= MAX_BUCKET_EXTRACT_FLUID_LEVEL) {
stacks_.set(1, LAVA_BUCKET_STACK);
world.playSound(null, pos, SoundEvents.ITEM_BUCKET_FILL_LAVA, SoundCategory.BLOCKS, 0.2f, 1.3f);
} else {
stacks_.set(1, istack.copy());
}
dirty = true;
}
} else {
stacks_.set(1, istack.copy());
// Out stack -> Somehow the filled container or container with fluid+fluid_level().
}
} else if(new_phase > last_phase) {
switch(new_phase) {
case PHASE_LAVA:
fluid_level_ = MAX_FLUID_LEVEL;
stacks_.set(1, ItemStack.EMPTY);
stacks_.set(0, ItemStack.EMPTY);
world.playSound(null, pos, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, 0.2f, 1.0f);
dirty = true;
break;
case PHASE_MAGMABLOCK:
stacks_.set(1, MAGMA_STACK.copy());
world.playSound(null, pos, SoundEvents.BLOCK_FIRE_AMBIENT, SoundCategory.BLOCKS, 0.2f, 0.8f);
dirty = true;
break;
case PHASE_HOT:
world.playSound(null, pos, SoundEvents.BLOCK_FIRE_AMBIENT, SoundCategory.BLOCKS, 0.2f, 0.8f);
break;
}
} else {
switch(new_phase) {
case PHASE_MAGMABLOCK:
stacks_.set(0, (fluid_level_ >= MAX_BUCKET_EXTRACT_FLUID_LEVEL) ? (MAGMA_STACK.copy()) : (ItemStack.EMPTY));
stacks_.set(1, stacks_.get(0).copy());
fluid_level_ = 0;
world.playSound(null, pos, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.BLOCKS, 0.5f, 1.1f);
dirty = true;
break;
case PHASE_HOT:
if(istack.isItemEqual(MAGMA_STACK)) {
stacks_.set(1, new ItemStack(Blocks.OBSIDIAN));
} else {
stacks_.set(1, new ItemStack(Blocks.COBBLESTONE));
}
world.playSound(null, pos, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.BLOCKS, 0.3f, 0.9f);
dirty = true;
break;
case PHASE_WARMUP:
world.playSound(null, pos, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.BLOCKS, 0.3f, 0.7f);
break;
}
}
}
IBlockState state = world.getBlockState(pos);
if((state.getBlock() instanceof BlockDecorMineralSmelter) && (force_block_update_ || (state.getValue(PHASE) != new_phase))) {
state = state.withProperty(PHASE, new_phase);
world.setBlockState(pos, state,3|16);
world.notifyNeighborsOfStateChange(pos, state.getBlock(),false);
force_block_update_ = false;
}
if(dirty) markDirty();
}
}
}

View file

@ -205,7 +205,7 @@ public class ModBlocks
"straight_pipe_valve",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
BlockDecor.CFG_CUTOUT,
Material.IRON, 0.5f, 15f, SoundType.METAL,
Material.IRON, 0.7f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
);
@ -213,7 +213,7 @@ public class ModBlocks
"straight_pipe_valve_redstone",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED,
Material.IRON, 0.5f, 15f, SoundType.METAL,
Material.IRON, 0.7f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
);
@ -221,7 +221,7 @@ public class ModBlocks
"straight_pipe_valve_redstone_analog",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG,
Material.IRON, 0.5f, 15f, SoundType.METAL,
Material.IRON, 0.7f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
);
@ -229,10 +229,31 @@ public class ModBlocks
"passive_fluid_accumulator",
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
BlockDecor.CFG_CUTOUT,
Material.IRON, 0.5f, 15f, SoundType.METAL,
Material.IRON, 0.7f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
);
public static final BlockDecorWasteIncinerator SMALL_WASTE_INCINERATOR = new BlockDecorWasteIncinerator(
"small_waste_incinerator",
BlockDecor.CFG_DEFAULT|BlockDecor.CFG_ELECTRICAL,
Material.IRON, 1f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
);
public static final BlockDecorDropper FACTORY_DROPPER = new BlockDecorDropper(
"factory_dropper",
BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED,
Material.IRON, 1f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,15)
);
public static final BlockDecorMineralSmelter SMALL_MINERAL_SMELTER = new BlockDecorMineralSmelter(
"small_mineral_smelter",
BlockDecor.CFG_LOOK_PLACEMENT,
Material.IRON, 1f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(1.1,0,1.1, 14.9,16,14.9)
);
public static final BlockDecorDirected SIGN_HOTWIRE = new BlockDecorDirected(
"sign_hotwire",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT|(1<<BlockDecor.CFG_LIGHT_VALUE_SHIFT),
@ -261,20 +282,6 @@ public class ModBlocks
ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16)
);
public static final BlockDecorWasteIncinerator SMALL_WASTE_INCINERATOR = new BlockDecorWasteIncinerator(
"small_waste_incinerator",
BlockDecor.CFG_DEFAULT|BlockDecor.CFG_ELECTRICAL,
Material.IRON, 0.3f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
);
public static final BlockDecorDropper FACTORY_DROPPER = new BlockDecorDropper(
"factory_dropper",
BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_REDSTONE_CONTROLLED,
Material.IRON, 0.5f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,15)
);
public static final BlockDecorDirected SIGN_FACTORY_AREA = new BlockDecorDirected(
"sign_factoryarea",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT,
@ -356,6 +363,10 @@ public class ModBlocks
BlockDecorDropper.BTileEntity.class, "te_factory_dropper"
);
private static final TileEntityRegistrationData SMALL_MINERAL_SMELTER_TEI = new TileEntityRegistrationData(
BlockDecorMineralSmelter.BTileEntity.class, "te_small_mineral_smelter"
);
//--------------------------------------------------------------------------------------------------------------------
//-- Registration list
//--------------------------------------------------------------------------------------------------------------------
@ -406,17 +417,17 @@ public class ModBlocks
THICK_STEEL_POLE_HEAD,
STEEL_DOUBLE_T_SUPPORT,
SIGN_HOTWIRE, SIGN_DANGER, SIGN_DEFENSE, SIGN_FACTORY_AREA, SIGN_MODLOGO,
};
private static final Object dev_content[] = {
SIGN_MINDSTEP,
PANZERGLASS_SLAB, // check if another class is needed due to is_side_visible
// handling not sure yet ...
HALFSLAB_REBARCONCRETE, HALFSLAB_CONCRETE, HALFSLAB_TREATEDWOOD,
HALFSLAB_SHEETMETALIRON, HALFSLAB_SHEETMETALSTEEL, HALFSLAB_SHEETMETALCOPPER,
HALFSLAB_SHEETMETALGOLD, HALFSLAB_SHEETMETALALUMINIUM,
};
private static final Object dev_content[] = {
SMALL_MINERAL_SMELTER, SMALL_MINERAL_SMELTER_TEI,
PANZERGLASS_SLAB, // check if another class is needed due to is_side_visible
SIGN_MINDSTEP,
};
//--------------------------------------------------------------------------------------------------------------------
//-- Init
//--------------------------------------------------------------------------------------------------------------------

View file

@ -0,0 +1,17 @@
{
"forge_marker": 1,
"defaults": {
"model": "engineersdecor:furnace/small_mineral_smelter_model"
},
"variants": {
"normal": [{}],
"inventory": [{}],
"facing": { "north": {"y":0}, "south": {"y":180}, "west": {"y":-90}, "east": {"y":90} },
"phase": {
"0":{ "textures":{ "front":"engineersdecor:blocks/furnace/small_mineral_smelter_front_s0" } },
"1":{ "textures":{ "front":"engineersdecor:blocks/furnace/small_mineral_smelter_front_s1" } },
"2":{ "textures":{ "front":"engineersdecor:blocks/furnace/small_mineral_smelter_front_s2" } },
"3":{ "textures":{ "front":"engineersdecor:blocks/furnace/small_mineral_smelter_front_s3" } }
}
}
}

View file

@ -145,6 +145,11 @@ tile.engineersdecor.factory_dropper.help=§6Dropper suitable for advanced factor
AND'ed or OR'ed with the external redstone signal trigger. Trigger simulation buttons for testing. \
Pre-opens shutter door when internal trigger conditions are met. Drops all matching stacks \
simultaneously. Click on all elements in the GUI to see how it works.
tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace
tile.engineersdecor.small_mineral_smelter.help=§6High temperature, high insulation electrical stone melting furnace.§r\n\
Heats up mineral blocks to magma blocks, and finally to lava. Due to the \
miniturized device size the process is rather inefficient - much time and \
energy is needed to liquefy a stone block.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.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.

View file

@ -140,6 +140,11 @@ tile.engineersdecor.factory_dropper.help=§6Выбрасыватель подх
Триггерные кнопки симуляции для тестирования. Предварительно открывает дверцу затвора, \
когда выполняются условия внутреннего запуска. Сбрасывает все соответствующие стеки одновременно. \
Нажмите на все элементы в GUI, чтобы увидеть, как это работает.
tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace
#tile.engineersdecor.small_mineral_smelter.help=§6High temperature, high insulation electrical stone melting furnace.§r\n\
Heats up mineral blocks to magma blocks, and finally to lava. Due to the \
miniturized device size the process is rather inefficient - much time and \
energy is needed to liquefy a stone block.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.sign_decor.name=Табличка с надписью (Логотип Engineer's decor)
tile.engineersdecor.sign_decor.help=§Это не должно быть крафтовым или видимым в JEI. Используется для творческой вкладки и скриншотов.

View file

@ -143,6 +143,11 @@ tile.engineersdecor.factory_dropper.name=Factory Dropper
AND'ed or OR'ed with the external redstone signal trigger. Trigger simulation buttons for testing. \
Pre-opens shutter door when internal trigger conditions are met. Drops all matching stacks \
simultaneously. Click on all elements in the GUI to see how it works.
tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace
#tile.engineersdecor.small_mineral_smelter.help=§6High temperature, high insulation electrical stone melting furnace.§r\n\
Heats up mineral blocks to magma blocks, and finally to lava. Due to the \
miniturized device size the process is rather inefficient - much time and \
energy is needed to liquefy a stone block.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.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.

View file

@ -102,6 +102,11 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [15, 21, 0],
"translation": [2.25, -1.25, -2.5],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -94,7 +94,13 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [85, 3, -10],
"translation": [1.75, -0.75, -2.25],
"scale": [0.35, 0.35, 0.35]
},
"ground": {
"translation": [0, -0.75, 0],
"scale": [0.2, 0.2, 0.2]
},
"gui": {

View file

@ -0,0 +1,106 @@
{
"parent": "block/cube",
"textures": {
"front": "engineersdecor:blocks/furnace/small_mineral_smelter_front_s0",
"top": "engineersdecor:blocks/furnace/small_mineral_smelter_top",
"side": "engineersdecor:blocks/furnace/small_mineral_smelter_side",
"particle": "engineersdecor:blocks/furnace/small_mineral_smelter_side",
"bottom": "engineersdecor:blocks/furnace/small_mineral_smelter_bottom"
},
"elements": [
{
"from": [1, 1, 1],
"to": [15, 15, 15],
"faces": {
"north": {"texture": "#side"},
"east": {"texture": "#side"},
"south": {"texture": "#front"},
"west": {"texture": "#side"},
"up": {"texture": "#front"},
"down": {"texture": "#top"}
}
},
{
"from": [0, 15, 0],
"to": [16, 16, 16],
"faces": {
"north": {"texture": "#side"},
"east": {"texture": "#side"},
"south": {"texture": "#front"},
"west": {"texture": "#side"},
"up": {"texture": "#top"},
"down": {"texture": "#top"}
}
},
{
"from": [0, 1, 2],
"to": [1, 15, 14],
"faces": {
"north": {"texture": "#side"},
"south": {"texture": "#front"},
"west": {"texture": "#side"},
"up": {"texture": "#front"},
"down": {"texture": "#top"}
}
},
{
"from": [15, 1, 2],
"to": [16, 15, 14],
"faces": {
"north": {"texture": "#side"},
"east": {"texture": "#side"},
"south": {"texture": "#front"},
"up": {"texture": "#front"},
"down": {"texture": "#top"}
}
},
{
"from": [2, 1, 0],
"to": [14, 15, 1],
"faces": {
"north": {"texture": "#side"},
"east": {"texture": "#side"},
"south": {"texture": "#side"},
"west": {"texture": "#side"},
"up": {"texture": "#side"},
"down": {"texture": "#side"}
}
},
{
"from": [2, 1, 15],
"to": [14, 15, 16],
"faces": {
"north": {"texture": "#front"},
"east": {"texture": "#side"},
"south": {"texture": "#front"},
"west": {"texture": "#side"},
"up": {"texture": "#front"},
"down": {"texture": "#front"}
}
},
{
"from": [0, 0, 0],
"to": [16, 1, 16],
"faces": {
"north": {"texture": "#side"},
"east": {"texture": "#side"},
"south": {"texture": "#front"},
"west": {"texture": "#side"},
"up": {"texture": "#bottom"},
"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

@ -13,5 +13,27 @@
"south": {"texture": "#glass"}
}
}
]
],
"display": {
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.9, 0.9, 0.9],
"translation": [ 3, -8, -3]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_righthand": {
"rotation": [3, 69, 23],
"translation": [1, 1, -2.25],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [0, -61, 0],
"scale": [0.4, 0.4, 0.4]
}
}
}

View file

@ -61,6 +61,15 @@
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_righthand": {
"rotation": [3, 69, 23],
"translation": [1, 1, -2.25],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [0, -61, 0],
"scale": [0.4, 0.4, 0.4]
}
}
}

View file

@ -129,6 +129,14 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [24, -27, 10],
"translation": [-0.75, 2.25, 0.5],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [-3, 18, 0]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -9,45 +9,67 @@
"from": [1, 0, 6.5],
"to": [15, 1, 9.5],
"faces": {
"north": {"texture": "#frame"},
"south": {"texture": "#frame"},
"up": {"texture": "#frame"},
"down": {"texture": "#frame"}
"north": {"uv": [1, 15, 15, 16], "texture": "#frame"},
"south": {"uv": [1, 15, 15, 16], "texture": "#frame"},
"up": {"uv": [1, 6.5, 15, 9.5], "texture": "#frame"},
"down": {"uv": [1, 6.5, 15, 9.5], "texture": "#frame"}
}
},
{
"from": [0, 0, 6.5],
"to": [1, 16, 9.5],
"faces": {
"north": {"texture": "#frame"},
"east": {"texture": "#frame"},
"south": {"texture": "#frame"},
"west": {"texture": "#frame"},
"up": {"texture": "#frame"},
"down": {"texture": "#frame"}
"north": {"uv": [15, 0, 16, 16], "texture": "#frame"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#frame"},
"south": {"uv": [0, 0, 1, 16], "texture": "#frame"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#frame"},
"up": {"uv": [0, 6.5, 1, 9.5], "texture": "#frame"},
"down": {"uv": [0, 6.5, 1, 9.5], "texture": "#frame"}
}
},
{
"from": [1, 15, 6.5],
"to": [15, 16, 9.5],
"faces": {
"north": {"texture": "#frame"},
"south": {"texture": "#frame"},
"up": {"texture": "#frame"},
"down": {"texture": "#frame"}
"north": {"uv": [1, 0, 15, 1], "texture": "#frame"},
"south": {"uv": [1, 0, 15, 1], "texture": "#frame"},
"up": {"uv": [1, 6.5, 15, 9.5], "texture": "#frame"},
"down": {"uv": [1, 6.5, 15, 9.5], "texture": "#frame"}
}
},
{
"from": [15, 0, 6.5],
"to": [16, 16, 9.5],
"faces": {
"north": {"texture": "#frame"},
"east": {"texture": "#frame"},
"south": {"texture": "#frame"},
"west": {"texture": "#frame"},
"up": {"texture": "#frame"},
"down": {"texture": "#frame"}
"north": {"uv": [0, 0, 1, 16], "texture": "#frame"},
"east": {"uv": [6.5, 0, 9.5, 16], "texture": "#frame"},
"south": {"uv": [15, 0, 16, 16], "texture": "#frame"},
"west": {"uv": [6.5, 0, 9.5, 16], "texture": "#frame"},
"up": {"uv": [15, 6.5, 16, 9.5], "texture": "#frame"},
"down": {"uv": [15, 6.5, 16, 9.5], "texture": "#frame"}
}
}
],
"display": {
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.9, 0.9, 0.9],
"translation": [ 3, -8, -3]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_righthand": {
"rotation": [3, 69, 23],
"translation": [1, 1, -2.25],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [0, -61, 0],
"scale": [0.4, 0.4, 0.4]
}
}
]
}

View file

@ -63,13 +63,23 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [-8, 154, 97],
"translation": [-4, 1.25, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [-2, -59, -46],
"translation": [-1.25, -0.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.9, 0.9, 0.9],
"translation": [ 3, -8, -3]
"translation": [3, -8, -3],
"scale": [0.9, 0.9, 0.9]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]

View file

@ -53,25 +53,29 @@
}
],
"display": {
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"thirdperson_righthand": {
"rotation": [95, 4, 33],
"translation": [2, -1.5, -3.25],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"scale": [0.5, 0.5, 0.5],
"rotation": [120, 30, 0],
"translation": [2, 3, 0]
"translation": [2, 3, 0],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_righthand": {
"scale": [0.5, 0.5, 0.5],
"rotation": [120, 15, 0],
"translation": [-1, -1, -2]
"ground": {
"translation": [0, -4.25, 0],
"scale": [0.3, 0.3, 0.3]
},
"gui": {
"rotation": [26, 39, 0],
"translation": [0, -3, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"rotation": [0, 90, 0],
"translation": [0, -4, 0],
"scale": [0.7, 0.7, 0.7]
}
}
}

View file

@ -1,13 +1,8 @@
{
"parent": "block/cube",
"textures": {
"particle": "engineersdecor:blocks/iestyle/steel_texture",
"o": "engineersdecor:blocks/iestyle/steel_texture"
},
"display": {
"gui": { "rotation": [ 30, 225, 0 ], "scale": [0.625, 0.625, 0.625] },
"fixed": { "scale": [0.5, 0.5, 0.5] },
"ground": { "scale": [0.2, 0.2, 0.2] }
"o": "engineersdecor:blocks/iestyle/steel_texture",
"particle": "engineersdecor:blocks/iestyle/steel_texture"
},
"elements": [
{
@ -154,5 +149,22 @@
"down": {"uv": [0, 0, 1.25, 1], "texture": "#o"}
}
}
]
],
"display": {
"thirdperson_righthand": {
"rotation": [16, -118, 0],
"translation": [2.75, -0.75, 0.75],
"scale": [0.36, 0.36, 0.36]
},
"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

@ -151,6 +151,11 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [8, -68, 0],
"translation": [2.5, -2.75, -2.5],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -1,5 +1,4 @@
{
"credit": "I made this with the Blockbench",
"parent": "block/cube",
"textures": {
"o": "engineersdecor:blocks/iestyle/treated_wood_rough_texture",
@ -80,6 +79,11 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [1, 67, 0],
"translation": [-1.75, -2.25, -2.5],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -112,18 +112,26 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [-3, -60, 0],
"translation": [-5, 0, 2.25],
"scale": [0.7, 0.7, 0.7]
},
"firstperson_righthand": {
"rotation": [5, -52, 0],
"translation": [-3, -0.75, 1.25]
},
"ground": {
"translation": [0, 0, 6],
"scale": [0.7, 0.7, 0.7]
},
"gui": {
"rotation": [0, 180, 0],
"translation": [0, 0.5, 0]
"rotation": [16, 30, 0],
"translation": [3.75, -1.5, 0]
},
"fixed": {
"rotation": [0, 180, 0],
"translation": [0, 0, -7.3]
},
"ground": {
"rotation": [0, 0, 0],
"translation": [0, 0, 7],
"scale": [0.7, 0.7, 0.7]
"translation": [0, 0, -8.05]
}
}
}

View file

@ -32,14 +32,14 @@
],
"display": {
"thirdperson_righthand": {
"rotation": [120, 15, 0],
"translation": [-1, -1, -2],
"rotation": [108, 6, -23],
"translation": [1.75, -0.5, -2.5],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [120, 30, 0],
"translation": [2, 3, 0],
"scale": [0.4, 0.4, 0.4]
"translation": [1.75, 1.25, -0.25],
"scale": [0.35, 0.35, 0.35]
},
"ground": {
"scale": [0.2, 0.2, 0.2]

View file

@ -64,13 +64,13 @@
],
"display": {
"thirdperson_righthand": {
"rotation": [120, 15, 0],
"translation": [-1, -1, -2],
"rotation": [106, 2, -17],
"translation": [1, -1.5, -1],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [120, 30, 0],
"translation": [2, 3, 0],
"translation": [2, 2, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
@ -81,6 +81,7 @@
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"rotation": [0, 90, 0],
"scale": [0.5, 0.5, 0.5]
}
}

View file

@ -101,6 +101,11 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [-2, 0, 0],
"translation": [0, -1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -42,6 +42,11 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [1, -1, 14],
"translation": [0, -1.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -125,6 +125,10 @@
}
],
"display": {
"thirdperson_righthand": {
"translation": [0, -0.75, -1.5],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -100,6 +100,10 @@
}
],
"display": {
"thirdperson_righthand": {
"translation": [0, -2.25, -1.25],
"scale": [0.45, 0.45, 0.45]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -52,6 +52,15 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [6, 17, 10],
"translation": [0, 0, -1],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [17, 10, 0],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -108,6 +108,11 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [18, 0, 3],
"translation": [0, -0.5, -0.75],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -52,6 +52,11 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [0, 13, 0],
"translation": [0, -0.25, -0.75],
"scale": [0.5, 0.5, 0.5]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},

View file

@ -20,17 +20,26 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [-1, -78, -10],
"translation": [-2.75, -1.25, -1.5],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [2, -68, 8],
"translation": [0.5, 0, -0.25],
"scale": [0.35, 0.35, 0.35]
},
"ground": {
"translation": [0, 0, 7],
"scale": [0.7, 0.7, 0.7]
"translation": [0, 0, 2.5],
"scale": [0.3, 0.3, 0.3]
},
"gui": {
"rotation": [0, 0, 0],
"translation": [0, 0.5, 0]
},
"fixed": {
"rotation": [0, 180, 0],
"translation": [0, 0, -7.3]
"translation": [0, 0, -7.8]
}
}
}

View file

@ -10,16 +10,26 @@
"from": [1, 1, 0],
"to": [15, 15, 0.5],
"faces": {
"north": {"uv": [1, 1, 15, 15], "texture": "#s"},
"east": {"uv": [15.5, 1, 16, 15], "texture": "#s"},
"south": {"uv": [1, 1, 15, 15], "texture": "#f"},
"west": {"uv": [0, 1, 0.5, 15], "texture": "#s"},
"up": {"uv": [1, 0, 15, 0.5], "texture": "#s"},
"down": {"uv": [1, 15.5, 15, 16], "texture": "#s"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"texture": "#s"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [27, -68, 7],
"translation": [-3, -1, -0.75],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [1, -58, 7],
"translation": [0.5, 0, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 0, 7],
"scale": [0.7, 0.7, 0.7]
@ -29,7 +39,7 @@
},
"fixed": {
"rotation": [0, 180, 0],
"translation": [0, 0, -7.3]
"translation": [0, 0, -7.8]
}
}
}

View file

@ -10,182 +10,192 @@
"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"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"}
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#f"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"texture": "#s"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [41, -73, 0],
"translation": [-3, -0.75, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [3, -84, 14],
"translation": [0.75, 0, -1],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 0, 7],
"scale": [0.7, 0.7, 0.7]
"translation": [0, 0, 2.75],
"scale": [0.35, 0.35, 0.35]
},
"gui": {
"translation": [0, 0.5, 0]
},
"fixed": {
"rotation": [0, 180, 0],
"translation": [0, 0, -7.3]
"translation": [0, 0, -8.05]
}
}
}

View file

@ -20,6 +20,25 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [27, -16, -85],
"translation": [2.75, 0, 0],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [-12, -17, 80],
"translation": [-1.75, 0.75, -1.5],
"scale": [0.37, 0.37, 0.37]
},
"firstperson_righthand": {
"rotation": [26, 19, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [15, 15, 0],
"translation": [0, 0.25, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},
@ -28,22 +47,9 @@
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"rotation": [90, 0, 0],
"translation": [0, 0, 3],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_righthand": {
"rotation": [ 75, 45, 0 ],
"translation": [ 0, 0, 2.2],
"scale": [ 0.375, 0.375, 0.375 ]
},
"firstperson_righthand": {
"rotation": [ 0, 45, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
},
"firstperson_lefthand": {
"rotation": [ 0, 225, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
}
}
}

View file

@ -18,5 +18,38 @@
"down": {"texture": "#all"}
}
}
]
],
"display": {
"thirdperson_righthand": {
"rotation": [-18, -13, -92],
"translation": [1.75, -0.75, -1.5],
"scale": [0.375, 0.375, 0.375]
},
"thirdperson_lefthand": {
"rotation": [-30, -30, 80],
"translation": [0, -1, -3],
"scale": [0.37, 0.37, 0.37]
},
"firstperson_righthand": {
"rotation": [26, 19, 0],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_lefthand": {
"rotation": [15, 15, 0],
"translation": [0, 0.25, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"rotation": [90, 0, 0],
"translation": [0, 0, 3],
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -8,36 +8,36 @@
"from": [0, 0, 0],
"to": [16, 8, 16],
"faces": {
"north": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "north"},
"east": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east"},
"south": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "south"},
"west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"},
"up": {"uv": [0, 0, 16, 16], "texture": "#side"},
"down": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "down"}
"north": {"texture": "#side", "cullface": "north"},
"east": {"texture": "#side", "cullface": "east"},
"south": {"texture": "#side", "cullface": "south"},
"west": {"texture": "#side", "cullface": "west"},
"up": {"texture": "#side"},
"down": {"texture": "#side", "cullface": "down"}
}
},
{
"from": [8, 8, 0],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"},
"east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"},
"south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"},
"west": {"uv": [0, 0, 16, 8], "texture": "#side"},
"up": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "up"},
"down": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "down"}
"north": {"texture": "#side", "cullface": "north"},
"east": {"texture": "#side", "cullface": "east"},
"south": {"texture": "#side", "cullface": "south"},
"west": {"texture": "#side"},
"up": {"texture": "#side", "cullface": "up"},
"down": {"texture": "#side", "cullface": "down"}
}
},
{
"from": [0, 8, 8],
"to": [8, 16, 16],
"faces": {
"north": {"uv": [8, 0, 16, 8], "texture": "#side"},
"east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"},
"south": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "south"},
"west": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "west"},
"up": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "up"},
"down": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "down"}
"north": {"texture": "#side"},
"east": {"texture": "#side", "cullface": "east"},
"south": {"texture": "#side", "cullface": "south"},
"west": {"texture": "#side", "cullface": "west"},
"up": {"texture": "#side", "cullface": "up"},
"down": {"texture": "#side", "cullface": "down"}
}
}
]

View file

@ -8,24 +8,24 @@
"from": [0, 0, 0],
"to": [16, 8, 16],
"faces": {
"north": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "north"},
"east": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east"},
"south": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "south"},
"west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"},
"up": {"uv": [0, 0, 16, 16], "texture": "#side"},
"down": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "down"}
"north": {"texture": "#side", "cullface": "north"},
"east": {"texture": "#side", "cullface": "east"},
"south": {"texture": "#side", "cullface": "south"},
"west": {"texture": "#side", "cullface": "west"},
"up": {"texture": "#side"},
"down": {"texture": "#side", "cullface": "down"}
}
},
{
"from": [8, 8, 8],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 8, 8], "texture": "#side"},
"east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"},
"south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"},
"west": {"uv": [8, 0, 16, 8], "texture": "#side"},
"up": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "up"},
"down": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "down"}
"north": {"texture": "#side"},
"east": {"texture": "#side", "cullface": "east"},
"south": {"texture": "#side", "cullface": "south"},
"west": {"texture": "#side"},
"up": {"texture": "#side", "cullface": "up"},
"down": {"texture": "#side", "cullface": "down"}
}
}
]

View file

@ -1,36 +1,41 @@
{
"parent": "block/block",
"textures": {
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",
"side" : "engineersdecor:blocks/clinker_brick/clinker_brick_texture0"
"side": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0",
"particle": "engineersdecor:blocks/clinker_brick/clinker_brick_texture0"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 8, 16],
"faces": {
"north": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "north"},
"east": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "east"},
"south": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "south"},
"west": {"uv": [0, 8, 16, 16], "texture": "#side", "cullface": "west"},
"up": {"uv": [0, 0, 16, 16], "texture": "#side"},
"down": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "down"}
"north": {"texture": "#side", "cullface": "north"},
"east": {"texture": "#side", "cullface": "east"},
"south": {"texture": "#side", "cullface": "south"},
"west": {"texture": "#side", "cullface": "west"},
"up": {"texture": "#side"},
"down": {"texture": "#side", "cullface": "down"}
}
},
{
"from": [8, 8, 0],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "north"},
"east": {"uv": [0, 0, 16, 8], "texture": "#side", "cullface": "east"},
"south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"},
"west": {"uv": [0, 0, 16, 8], "texture": "#side"},
"up": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "up"},
"down": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "down"}
"north": {"texture": "#side", "cullface": "north"},
"east": {"texture": "#side", "cullface": "east"},
"south": {"texture": "#side", "cullface": "south"},
"west": {"texture": "#side"},
"up": {"texture": "#side", "cullface": "up"},
"down": {"texture": "#side", "cullface": "down"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [5, -71, -5],
"translation": [1, -0.5, -1.75],
"scale": [0.35, 0.35, 0.35]
},
"thirdperson_lefthand": {
"rotation": [75, -135, 0],
"translation": [0, 2.5, 0],

View file

@ -35,6 +35,16 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [14, 8, 1],
"translation": [0, -0.75, -2],
"scale": [0.35, 0.35, 0.35]
},
"firstperson_righthand": {
"rotation": [4, 9, 2],
"translation": [0, 0, 1],
"scale": [0.35, 0.35, 0.35]
},
"gui": {
"rotation": [30, 135, 0],
"scale": [0.625, 0.625, 0.625]

View file

@ -151,6 +151,16 @@
}
],
"display": {
"thirdperson_righthand": {
"rotation": [20, -9, 1],
"translation": [0.5, -1, -1.75],
"scale": [0.35, 0.35, 0.35]
},
"firstperson_righthand": {
"rotation": [14, 3, -5],
"translation": [1.25, 0, 0],
"scale": [0.35, 0.35, 0.35]
},
"gui": {
"rotation": [30, 135, 0],
"scale": [0.625, 0.625, 0.625]

View file

@ -27,6 +27,10 @@
"ingredient": { "type": "forge:ore_dict", "ore": "blockIron" },
"name": "blockIron"
},
{
"ingredient": { "type": "forge:ore_dict", "ore": "blockSteel" },
"name": "blockSteel"
},
{
"ingredient": { "type": "forge:ore_dict", "ore": "plateIron" },
"name": "plateIron"
@ -107,6 +111,10 @@
"ingredient": { "type": "forge:ore_dict", "ore": "ingotBrickNether" },
"name": "ingotBrickNether"
},
{
"ingredient": { "item": "minecraft:obsidian", "data": 0 },
"name": "blockObsidian"
},
{
"ingredient": [
{ "type": "forge:ore_dict", "ore": "plateIron" },
@ -249,6 +257,20 @@
"ingredient": { "item": "immersiveengineering:metal_device1", "data": 6 },
"name": "itemFluidPipe"
},
{
"conditions": [
{ "type": "minecraft:item_exists", "item": "immersiveengineering:metal_device1" }
],
"ingredient": { "item": "immersiveengineering:metal_device1", "data": 1 },
"name": "itemExternalHeater"
},
{
"conditions": [
{ "type": "minecraft:item_exists", "item": "immersiveengineering:metal_device0" }
],
"ingredient": { "item": "immersiveengineering:metal_device0", "data": 4 },
"name": "itemSteelBarrel"
},
{
"conditions": [
{ "type": "engineersdecor:grc", "missing": ["immersiveengineering:stone_decoration"] }

View file

@ -0,0 +1,41 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:small_mineral_smelter",
"required": ["immersiveengineering:metal_device1", "engineersdecor:panzerglass_block"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"SOS",
"GBO",
"HOH"
],
"key": {
"H": {
"item": "#itemExternalHeater",
"data": 0
},
"G": {
"item": "engineersdecor:panzerglass_block",
"data": 0
},
"S": {
"item": "#blockSteel",
"data": 0
},
"B": {
"item": "#itemSteelBarrel",
"data": 0
},
"O": {
"item": "#blockObsidian",
"data": 0
}
},
"result": {
"item": "engineersdecor:small_mineral_smelter",
"count": 1
}
}

View file

@ -0,0 +1,21 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:clinker_brick_slab",
"required": ["engineersdecor:clinker_brick_block"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
" ",
"BBB"
],
"key": {
"B": { "item": "engineersdecor:clinker_brick_block" }
},
"result": {
"item": "engineersdecor:clinker_brick_slab",
"count": 6
}
}

View file

@ -0,0 +1,21 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:clinker_brick_stained_slab",
"required": ["engineersdecor:clinker_brick_stained_block"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
" ",
"BBB"
],
"key": {
"B": { "item": "engineersdecor:clinker_brick_stained_block" }
},
"result": {
"item": "engineersdecor:clinker_brick_stained_slab",
"count": 6
}
}

View file

@ -3,16 +3,16 @@
{
"type": "engineersdecor:grc",
"result": "engineersdecor:halfslab_rebar_concrete",
"required": ["engineersdecor:rebar_concrete"]
"required": ["engineersdecor:rebar_concrete_slab"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"S",
"S"
"SS",
"SS"
],
"key": {
"S": { "item": "engineersdecor:rebar_concrete" }
"S": { "item": "engineersdecor:rebar_concrete_slab" }
},
"result": {
"item": "engineersdecor:halfslab_rebar_concrete",

View file

@ -0,0 +1,21 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:panzerglass_slab",
"required": ["engineersdecor:panzerglass_block"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
" ",
"BBB"
],
"key": {
"B": { "item": "engineersdecor:panzerglass_block" }
},
"result": {
"item": "engineersdecor:panzerglass_slab",
"count": 6
}
}

View file

@ -0,0 +1,21 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:rebar_concrete_slab",
"required": ["engineersdecor:rebar_concrete"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
" ",
"BBB"
],
"key": {
"B": { "item": "engineersdecor:rebar_concrete" }
},
"result": {
"item": "engineersdecor:rebar_concrete_slab",
"count": 6
}
}

View file

@ -0,0 +1,21 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:rebar_concrete_tile_slab",
"required": ["engineersdecor:rebar_concrete_tile"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
" ",
"BBB"
],
"key": {
"B": { "item": "engineersdecor:rebar_concrete_tile" }
},
"result": {
"item": "engineersdecor:rebar_concrete_tile_slab",
"count": 6
}
}

View file

@ -0,0 +1,21 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:slag_brick_slab",
"required": ["engineersdecor:slag_brick_block"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
" ",
"BBB"
],
"key": {
"B": { "item": "engineersdecor:slag_brick_block" }
},
"result": {
"item": "engineersdecor:slag_brick_slab",
"count": 6
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 B

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 957 B

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

View file

@ -2,8 +2,8 @@
org.gradle.daemon=false
org.gradle.jvmargs=-Xmx8G
version_minecraft=1.13.2
version_forge_minecraft=1.13.2-25.0.214
version_engineersdecor=1.0.7-b5
version_forge_minecraft=1.13.2-25.0.219
version_engineersdecor=1.0.7-b6
#
# jar signing data loaded from signing.properties in the project root.
#

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.13.2": {
"1.0.7-b5": "[A] Added translation zh_cn (PR#33, XuyuEre)\n[M] Updated textures.\n[M] Updated 1st/3rd person item model rotations/translations.",
"1.0.7-b4": "[A] Added stained clinker brick block/stairs.",
"1.0.7-b3": "[V] Version assignment: All features of v1.0.7-b3-1.12.2 that can be ported to 1.13.2 implemented/prepared, therefore version re-assigned.\n[A] Added \"Factory Area\" sign.\n[M] Sign background colors adapted.\n[M] EN lang file updated (PR#28, Voxelo).",
"1.0.4-b6": "[A] Added Small Electrical Furnace.\n[A] Added Small Waste Incinerator.\n[A] Experimental: Added fluid check valve.\n[A] Experimental: Added fluid redstone controlled valve.\n[A] Experimental: Added fluid redstone analog valve.\n[A] Experimental: Added passive fluid accumulator.",
@ -16,6 +17,6 @@
},
"promos": {
"1.13.2-recommended": "",
"1.13.2-latest": "1.0.7-b4"
"1.13.2-latest": "1.0.7-b5"
}
}

View file

@ -10,8 +10,11 @@ Mod sources for Minecraft version 1.13.2.
----
## Version history
~ v1.0.7-b5 [A] Added translation zh_cn (PR#33, XuyuEre)
~ v1.0.7-b6 [A]
- v1.0.7-b5 [A] Added translation zh_cn (PR#33, XuyuEre)
[M] Updated textures.
[M] Updated 1st/3rd person item model rotations/translations.
- v1.0.7-b4 [A] Added stained clinker brick block/stairs.

View file

@ -2,9 +2,9 @@
org.gradle.daemon=false
org.gradle.jvmargs=-Xmx8G
version_minecraft=1.14.2
version_forge_minecraft=1.14.2-26.0.55
version_forge_minecraft=1.14.2-26.0.63
version_fml_mappings=20190621-1.14.2
version_engineersdecor=1.0.8-b2
version_engineersdecor=1.0.8-b3
#
# jar signing data loaded from signing.properties in the project root.
#

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.14.2": {
"1.0.8-b2": "[U] Updated to Forge BETA 1.14.2-26.0.63/20190621-1.14.2, code adapted to new mappings.\n[M] Updated 1st/3rd person item model rotations/translations.",
"1.0.8-b1": "[V] Feature set of 1.12 ported.\n[A] CTRL-SHIFT tooltips ported.\n[A] Ported stained clinker block/stairs.\n[M] Updated textures.\n[I] Issue: Scoped recipe constants still not working.",
"1.0.7-b5": "[U] Updated to Forge BETA 1.14.2-26.0.35/20190608-1.14.2.\n[A] Factory dropper functionality ported.\n[A] Small lab furnace functionality ported.\n[A] Small electrical lab furnace functionality ported.\n[A] Small waste incinerator functionality ported.\n[A] Fluid valves, Passive Fluid Accumulator ported.\n[I] Issue: Scoped recipe constants still not working.",
"1.0.7-b4": "[U] Updated to Forge BETA 1.14.2-26.0.32/20190608-1.14.2.\n[A] Sitting on the stool ported.\n[A] Ladder climbing speed boost ported.\n[A] Crafting table functionality ported.\n[I] Issue: Scoped recipe constants not working yet with the current Forge version (or somehow changed).",
@ -8,6 +9,6 @@
},
"promos": {
"1.14.2-recommended": "",
"1.14.2-latest": "1.0.8-b1"
"1.14.2-latest": "1.0.8-b2"
}
}

View file

@ -10,8 +10,11 @@ Mod sources for Minecraft version 1.14.2.
----
## Version history
~ v1.0.8-b2 [U] Updated to Forge BETA 1.14.2-26.0.55/20190621-1.14.2,
~ v1.0.8-b3 [U]
- v1.0.8-b2 [U] Updated to Forge BETA 1.14.2-26.0.63/20190621-1.14.2,
code adapted to new mappings.
[M] Updated 1st/3rd person item model rotations/translations.
- v1.0.8-b1 [V] Feature set of 1.12 ported.
[A] CTRL-SHIFT tooltips ported.

View file

@ -33,7 +33,6 @@ update-json:
sanatize:
@cd 1.12; make -s sanatize
@cd 1.12; make -s port-languages
@cd 1.13; make -s sanatize
@cd 1.14; make -s sanatize
@make -s update-json
@ -43,6 +42,7 @@ compare:
@djs tasks.js compare-textures -v
migrate-from-112:
@cd 1.12; make -s port-languages
@djs tasks.js migrate-textures -v
# For reviewers: I am using a local repository for experimental changes,

View file

@ -45,6 +45,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.13.2": {
"1.0.7-b5": "[A] Added translation zh_cn (PR#33, XuyuEre)\n[M] Updated textures.\n[M] Updated 1st/3rd person item model rotations/translations.",
"1.0.7-b4": "[A] Added stained clinker brick block/stairs.",
"1.0.7-b3": "[V] Version assignment: All features of v1.0.7-b3-1.12.2 that can be ported to 1.13.2 implemented/prepared, therefore version re-assigned.\n[A] Added \"Factory Area\" sign.\n[M] Sign background colors adapted.\n[M] EN lang file updated (PR#28, Voxelo).",
"1.0.4-b6": "[A] Added Small Electrical Furnace.\n[A] Added Small Waste Incinerator.\n[A] Experimental: Added fluid check valve.\n[A] Experimental: Added fluid redstone controlled valve.\n[A] Experimental: Added fluid redstone analog valve.\n[A] Experimental: Added passive fluid accumulator.",
@ -59,6 +60,7 @@
"1.0.0-a1": "[A] Initial port to 1.13.2 with Forge beta."
},
"1.14.2": {
"1.0.8-b2": "[U] Updated to Forge BETA 1.14.2-26.0.63/20190621-1.14.2, code adapted to new mappings.\n[M] Updated 1st/3rd person item model rotations/translations.",
"1.0.8-b1": "[V] Feature set of 1.12 ported.\n[A] CTRL-SHIFT tooltips ported.\n[A] Ported stained clinker block/stairs.\n[M] Updated textures.\n[I] Issue: Scoped recipe constants still not working.",
"1.0.7-b5": "[U] Updated to Forge BETA 1.14.2-26.0.35/20190608-1.14.2.\n[A] Factory dropper functionality ported.\n[A] Small lab furnace functionality ported.\n[A] Small electrical lab furnace functionality ported.\n[A] Small waste incinerator functionality ported.\n[A] Fluid valves, Passive Fluid Accumulator ported.\n[I] Issue: Scoped recipe constants still not working.",
"1.0.7-b4": "[U] Updated to Forge BETA 1.14.2-26.0.32/20190608-1.14.2.\n[A] Sitting on the stool ported.\n[A] Ladder climbing speed boost ported.\n[A] Crafting table functionality ported.\n[I] Issue: Scoped recipe constants not working yet with the current Forge version (or somehow changed).",
@ -68,8 +70,8 @@
"1.12.2-recommended": "1.0.8",
"1.12.2-latest": "1.0.9-b2",
"1.13.2-recommended": "",
"1.13.2-latest": "1.0.7-b4",
"1.13.2-latest": "1.0.7-b5",
"1.14.2-recommended": "",
"1.14.2-latest": "1.0.8-b1"
"1.14.2-latest": "1.0.8-b2"
}
}

View file

@ -38,15 +38,21 @@ looking manufacturing contraptions. Current feature set:
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
traces. Also creaftable in form of *stairs* and *walls*. Like the IE contrete *tiles*,
you can craft rebar concrete tiles with corresponding stairs. Reverse recipes
available for all blocks crafted from rebar concrete.
- *Factory dropper*: Dropper with GUI configurable drop force, direction, stack size,
trigger cool-down delay, and trigger logic. Three trigger slots ("filter slots") can
be used as internal trigger. They emit an internal signal if their item is found in
in the dropper inventory (also at least the stack size of a trigger slot). Internal
triggers can be easily combined with the external redstone signal trigger using
logical *AND* or *OR* gates. If internal triggers match, the dropper will spit out
exactly the stacks in these slots. That allows to drop e.g. always nine lapis,
redstone, nuggets, etc on a conveyor to feed a compression metal press - instantly
and automatically after nine of these items have been inserted into the dropper.
- Concrete wall: Solid concrete wall (not the vanilla wall design), crafted 3x3
from six IE concrete blocks (normal wall recipe).
- *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.
- *Clinker bricks*: Slightly darker and more colorful version of the vanilla brick
block. Eight position dependent texture variations are implemented to make the
@ -61,6 +67,16 @@ looking manufacturing contraptions. Current feature set:
explosion resistance than bricks. Also available as stairs and wall, also with
reverse recipes.
- 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
traces. Also creaftable in form of *stairs* and *walls*. Like the IE contrete *tiles*,
you can craft rebar concrete tiles with corresponding stairs. Reverse recipes
available for all blocks crafted from rebar concrete.
- Concrete wall: Solid concrete wall (not the vanilla wall design), crafted 3x3
from six IE concrete blocks (normal wall recipe).
- *Treated wood ladder*: Crafted 3x3 with the known ladder pattern, items are
treated wood sticks. Climbing is faster if looking up/down and not sneaking.
@ -117,22 +133,10 @@ looking manufacturing contraptions. Current feature set:
- *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.
- *Factory dropper*: Dropper with GUI configurable drop force, direction, stack size,
trigger cool-down delay, and trigger logic. Three trigger slots ("filter slots") can
be used as internal trigger. They emit an internal signal if their item is found in
in the dropper inventory (also at least the stack size of a trigger slot). Internal
triggers can be easily combined with the external redstone signal trigger using
logical *AND* or *OR* gates. If internal triggers match, the dropper will spit out
exactly the stacks in these slots. That allows to drop e.g. always nine lapis,
redstone, nuggets, etc on a conveyor to feed a compression metal press - instantly
and automatically after nine of these items have been inserted into the dropper.
- *Slab slices*: Decorative stackable thin slabs made of of IE metal sheets,
concretes, treated wood. Useful e.g. for roofs or ramps. Left-clicking with
the same slab type in your hand while looking up/down removes slices again.
Crafted 3x3 from four slabs.
More to come slowly but steadily.