Small Block Breaker added, 1.14: Fluid handlers implemented.

This commit is contained in:
stfwi 2019-10-31 22:04:31 +01:00
parent 5d04509eca
commit a667281619
52 changed files with 2849 additions and 421 deletions

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.15-b2": "[A] Added Small Block Breaker\n[M] Crafting Table: Allowing NBT \"Damage\" mismatch only items that are declared damagable (issue #56).\n[M] Tree Cutter: Loosened the strict mod namespace requirement for Dynamic Trees log detection (issue #52) to enable checking DT compat mod log blocks.",
"1.0.15-b1": "[A] Added Floor Edge Light.\n[A] Added Factory Block Placer and Planter.",
"1.0.14": "[R] Release based on v1.0.14-b1. Release-to-release changes: * Factory Hopper added. * Small Waste Incinerator improved. * Lang updates. * Recipe fixes.",
"1.0.14-b1": "[A] Factory Hopper added (configurable hopper and item collector).\n[M] Small Waste Incinerator Fifo shifting improved.\n[M] Lang file zh_cn updated (scikirbypoke, PR#53).\n[F] Fixed conditional recipe constant for redstone pipe valve (thx @albert_ac).",
@ -64,6 +65,6 @@
},
"promos": {
"1.12.2-recommended": "1.0.14",
"1.12.2-latest": "1.0.15-b1"
"1.12.2-latest": "1.0.15-b2"
}
}

View file

@ -10,7 +10,12 @@ Mod sources for Minecraft version 1.12.2.
----
## Version history
~ v1.0.15-b2 [A]
- v1.0.15-b2 [A] Added Small Block Breaker
[M] Crafting Table: Allowing NBT "Damage" mismatch only
items that are declared damagable (issue #56).
[M] Tree Cutter: Loosened the strict mod namespace
requirement for Dynamic Trees log detection (issue #52)
to enable checking DT compat mod log blocks.
- v1.0.15-b1 [A] Added Floor Edge Light.
[A] Added Factory Block Placer and Planter.

View file

@ -152,6 +152,13 @@ public class ModContent
ModAuxiliaries.getPixeledAABB(0,0,0, 16,8,16)
);
public static final BlockDecorBreaker SMALL_BLOCK_BREAKER = new BlockDecorBreaker(
"small_block_breaker",
BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK,
Material.IRON, 1f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,12,16)
);
//--------------------------------------------------------------------------------------------------------------------
public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = new BlockDecorPipeValve(
@ -482,6 +489,9 @@ public class ModContent
private static final TileEntityRegistrationData SMALL_TREE_CUTTER_TEI = new TileEntityRegistrationData(
BlockDecorTreeCutter.BTileEntity.class, "te_small_tree_cutter"
);
private static final TileEntityRegistrationData SMALL_BLOCK_BREAKER_TEI = new TileEntityRegistrationData(
BlockDecorBreaker.BTileEntity.class, "te_small_block_breaker"
);
private static final TileEntityRegistrationData TEST_BLOCK_TEI = new TileEntityRegistrationData(
BlockDecorTest.BTileEntity.class, "te_testblock"
);
@ -497,12 +507,13 @@ public class ModContent
FACTORY_HOPPER,FACTORY_HOPPER_TEI,
FACTORY_DROPPER, FACTORY_DROPPER_TEI,
FACTORY_PLACER, FACTORY_PLACER_TEI,
SMALL_BLOCK_BREAKER,SMALL_BLOCK_BREAKER_TEI,
SMALL_TREE_CUTTER,SMALL_TREE_CUTTER_TEI,
SMALL_WASTE_INCINERATOR, WASTE_INCINERATOR_TEI,
SMALL_SOLAR_PANEL,SMALL_SOLAR_PANEL_TEI,
SMALL_MINERAL_SMELTER, SMALL_MINERAL_SMELTER_TEI,
STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, STRAIGHT_PIPE_VALVE_TEI,
PASSIVE_FLUID_ACCUMULATOR, PASSIVE_FLUID_ACCUMULATOR_TEI,
SMALL_MINERAL_SMELTER, SMALL_MINERAL_SMELTER_TEI,
SMALL_SOLAR_PANEL,SMALL_SOLAR_PANEL_TEI,
SMALL_TREE_CUTTER,SMALL_TREE_CUTTER_TEI,
CLINKER_BRICK_BLOCK,
CLINKER_BRICK_SLAB,
CLINKER_BRICK_STAIRS,

View file

@ -0,0 +1,275 @@
/*
* @file BlockDecorBreaker.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Small Block Breaker
*/
package wile.engineersdecor.blocks;
import wile.engineersdecor.ModEngineersDecor;
import net.minecraft.world.World;
import net.minecraft.block.Block;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.init.Blocks;
import net.minecraft.init.SoundEvents;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
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.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;
public class BlockDecorBreaker extends BlockDecorDirected
{
public static final PropertyBool ACTIVE = PropertyBool.create("active");
public BlockDecorBreaker(@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, ACTIVE); }
@Override
public IBlockState getStateFromMeta(int meta)
{ return getDefaultState().withProperty(FACING, EnumFacing.byHorizontalIndex(meta & 0x7)).withProperty(ACTIVE, (meta & 0x8)!=0); }
@Override
public int getMetaFromState(IBlockState state)
{ return (state.getValue(FACING).getHorizontalIndex() & 0x7) | (state.getValue(ACTIVE) ? 8 : 0); }
@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(ACTIVE, false); }
@Override
public boolean hasTileEntity(IBlockState state)
{ return true; }
@Override
@Nullable
public TileEntity createTileEntity(World world, IBlockState state)
{ return new BTileEntity(); }
@Override
@SideOnly(Side.CLIENT)
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rnd)
{
if((state.getBlock()!=this) || (!state.getValue(ACTIVE))) return;
final double rv = rnd.nextDouble();
if(rv > 0.8) return;
final double x=0.5+pos.getX(), y=0.5+pos.getY(), z=0.5+pos.getZ();
final double xc=0.52, xr=rnd.nextDouble()*0.4-0.2, yr=(y-0.3+rnd.nextDouble()*0.2);
switch(state.getValue(FACING)) {
case WEST: world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, x-xc, yr, z+xr, 0.0, 0.0, 0.0); break;
case EAST: world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, x+xc, yr, z+xr, 0.0, 0.0, 0.0); break;
case NORTH: world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, x+xr, yr, z-xc, 0.0, 0.0, 0.0); break;
default: world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, x+xr, yr, z+xc, 0.0, 0.0, 0.0); break;
}
}
@Override
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos neighborPos)
{
if(!(world instanceof World) || (((World) world).isRemote)) return;
TileEntity te = world.getTileEntity(pos);
if(!(te instanceof BTileEntity)) return;
((BTileEntity)te).block_updated();
}
//--------------------------------------------------------------------------------------------------------------------
// Tile entity
//--------------------------------------------------------------------------------------------------------------------
public static class BTileEntity extends TileEntity implements ITickable, IEnergyStorage
{
public static final int IDLE_TICK_INTERVAL = 40;
public static final int TICK_INTERVAL = 5;
public static final int BOOST_FACTOR = 8;
public static final int DEFAULT_BOOST_ENERGY = 64;
public static final int DEFAULT_BREAKING_RELUCTANCE = 17;
public static final int DEFAULT_MIN_BREAKING_TIME = 15;
public static final int MAX_BREAKING_TIME = 800;
private static int boost_energy_consumption = DEFAULT_BOOST_ENERGY;
private static int breaking_reluctance = DEFAULT_BREAKING_RELUCTANCE;
private static int min_breaking_time = DEFAULT_MIN_BREAKING_TIME;
private int tick_timer_;
private int proc_time_elapsed_;
private int boost_energy_;
public static void on_config(int boost_energy_per_tick, int breaking_time_per_hardness, int min_breaking_time_ticks)
{
boost_energy_consumption = TICK_INTERVAL * MathHelper.clamp(boost_energy_per_tick, 16, 512);
breaking_reluctance = MathHelper.clamp(breaking_time_per_hardness, 5, 50);
min_breaking_time = MathHelper.clamp(min_breaking_time_ticks, 10, 100);
ModEngineersDecor.logger.info("Config block breaker: Boost energy consumption:" + boost_energy_consumption + "rf/t, reluctance=" + breaking_reluctance + "/hrdn, break time offset=" + min_breaking_time );
}
public BTileEntity()
{}
public void block_updated()
{ if(tick_timer_ > 2) tick_timer_ = 2; }
// TileEntity ------------------------------------------------------------------------------
@Override
public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns)
{ return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorBreaker)); }
// IEnergyStorage ----------------------------------------------------------------------------
@Override
public boolean canExtract()
{ return false; }
@Override
public boolean canReceive()
{ return true; }
@Override
public int getMaxEnergyStored()
{ return boost_energy_consumption; }
@Override
public int getEnergyStored()
{ return boost_energy_; }
@Override
public int extractEnergy(int maxExtract, boolean simulate)
{ return 0; }
@Override
public int receiveEnergy(int maxReceive, boolean simulate)
{
if((boost_energy_ >= boost_energy_consumption) || (maxReceive < boost_energy_consumption)) return 0;
if(!simulate) boost_energy_ = boost_energy_consumption;
return boost_energy_consumption;
}
// Capability export ----------------------------------------------------------------------------
@Override
public boolean hasCapability(Capability<?> cap, EnumFacing facing)
{ return ((cap==CapabilityEnergy.ENERGY)) || super.hasCapability(cap, facing); }
@Override
@SuppressWarnings("unchecked")
@Nullable
public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing)
{
if(capability == CapabilityEnergy.ENERGY) {
return (T)this;
} else {
return super.getCapability(capability, facing);
}
}
// ITickable ------------------------------------------------------------------------------------
private static HashSet<Block> blacklist = new HashSet<>();
static {
blacklist.add(Blocks.AIR);
blacklist.add(Blocks.BEDROCK);
blacklist.add(Blocks.FIRE);
blacklist.add(Blocks.END_PORTAL);
blacklist.add(Blocks.END_GATEWAY);
blacklist.add(Blocks.END_PORTAL_FRAME);
}
private static boolean isBreakable(IBlockState state, BlockPos pos, World world)
{
final Block block = state.getBlock();
if(blacklist.contains(block)) return false;
if(state.getMaterial().isLiquid()) return false;
if(block.isAir(state, world, pos)) return false;
float bh = state.getBlockHardness(world, pos);
if((bh<0) || (bh>55)) return false;
return true;
}
private boolean breakBlock(IBlockState state, BlockPos pos, World world)
{
if(world.isRemote || world.restoringBlockSnapshots) return false; // retry next cycle
NonNullList<ItemStack> drops = NonNullList.create();
state.getBlock().getDrops(drops, world, pos, state, 0);
world.setBlockToAir(pos);
for(ItemStack drop:drops) spawnAsEntity(world, pos, drop);
SoundType stype = state.getBlock().getSoundType(state, world, pos, null);
if(stype != null) world.playSound(null, pos, stype.getPlaceSound(), SoundCategory.BLOCKS, stype.getVolume()*0.6f, stype.getPitch());
return true;
}
@Override
@SuppressWarnings("deprecation")
public void update()
{
if(--tick_timer_ > 0) return;
if(world.isRemote) {
IBlockState state = world.getBlockState(pos);
if(!state.getValue(ACTIVE)) {
tick_timer_ = TICK_INTERVAL;
} else {
tick_timer_ = 1;
// not sure if is so cool to do this each tick ... may be simplified/removed again.
SoundEvent sound = SoundEvents.BLOCK_WOOD_HIT;
SoundType stype = world.getBlockState(pos.offset(state.getValue(FACING))).getBlock().getSoundType();
if((stype == SoundType.CLOTH) || (stype == SoundType.PLANT) || (stype == SoundType.SNOW)) {
sound = SoundEvents.BLOCK_CLOTH_HIT;
} else if((stype == SoundType.GROUND) || (stype == SoundType.SAND)) {
sound = SoundEvents.BLOCK_GRAVEL_HIT;
}
world.playSound(pos.getX(), pos.getY(), pos.getZ(), sound, SoundCategory.BLOCKS, 0.1f, 1.2f, false);
}
} else {
tick_timer_ = TICK_INTERVAL;
final IBlockState device_state = world.getBlockState(pos);
final BlockPos target_pos = pos.offset(device_state.getValue(FACING));
final IBlockState target_state = world.getBlockState(target_pos);
if((world.isBlockPowered(pos)) || (!isBreakable(target_state, target_pos, world))) {
if(device_state.getValue(ACTIVE)) world.setBlockState(pos, device_state.withProperty(ACTIVE, false), 1|2);
proc_time_elapsed_ = 0;
tick_timer_ = IDLE_TICK_INTERVAL;
return;
}
proc_time_elapsed_ += TICK_INTERVAL;
boolean active = true;
int time_needed = (int)(target_state.getBlockHardness(world, pos) * breaking_reluctance) + min_breaking_time;
if(boost_energy_ >= boost_energy_consumption) {
boost_energy_ = 0;
proc_time_elapsed_ += TICK_INTERVAL * BOOST_FACTOR;
time_needed += min_breaking_time * (3*BOOST_FACTOR/5);
}
time_needed = MathHelper.clamp(time_needed, min_breaking_time, MAX_BREAKING_TIME);
if(proc_time_elapsed_ >= time_needed) {
proc_time_elapsed_ = 0;
breakBlock(target_state, target_pos, world);
active = false;
}
if(device_state.getValue(ACTIVE) != active) {
world.setBlockState(pos, device_state.withProperty(ACTIVE, active), 1|2);
}
}
}
}
}

View file

@ -900,7 +900,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected
// first iteration: fillup existing stacks
for(int i = slot_begin; i < slot_end; ++i) {
final ItemStack stack = inventory.getStackInSlot(i);
if((stack.isEmpty()) || (!stack.isItemEqual(mvstack))) continue;
if((stack.isEmpty()) || (!isItemExactlyEqual(stack,mvstack))) continue;
int nmax = stack.getMaxStackSize() - stack.getCount();
if(mvstack.getCount() <= nmax) {
stack.setCount(stack.getCount()+mvstack.getCount());
@ -936,6 +936,24 @@ public class BlockDecorCraftingTable extends BlockDecorDirected
return mvstack;
}
private boolean isItemExactlyEqual(ItemStack stack1, ItemStack stack2)
{
if(!stack1.isItemEqual(stack2)) return false;
if(stack1.hasTagCompound()) {
final NBTTagCompound nbt = stack1.getTagCompound();
int n = stack1.getTagCompound().getSize();
if((n > 0) && stack1.getItem().isDamageable() && (stack1.getTagCompound().hasKey("Damage"))) --n;
if(n > 0) return false;
}
if(stack2.hasTagCompound()) {
final NBTTagCompound nbt = stack2.getTagCompound();
int n = stack2.getTagCompound().getSize();
if((n > 0) && stack2.getItem().isDamageable() && (stack2.getTagCompound().hasKey("Damage"))) --n;
if(n > 0) return false;
}
return true;
}
/**
* Moves as much items from the slots in range [first_slot, last_slot] of the inventory into a new stack.
* Implicitly shrinks the inventory stacks and the `request_stack`.
@ -950,16 +968,10 @@ public class BlockDecorCraftingTable extends BlockDecorDirected
int smallest_stack_index = -1;
for(int i = slot_begin; i < slot_end; ++i) {
final ItemStack stack = inventory.getStackInSlot(i);
if((!stack.isEmpty()) && (stack.isItemEqual(request_stack))) {
if((!stack.isEmpty()) && (isItemExactlyEqual(stack, request_stack))) {
// Never automatically place stuff with nbt (except a few allowed like "Damage"),
// as this could be a full crate, a valuable tool item, etc. For these recipes
// the user has to place this item manually.
if(stack.hasTagCompound()) {
final NBTTagCompound nbt = stack.getTagCompound();
int n = stack.getTagCompound().getSize();
if((n > 0) && (stack.getTagCompound().hasKey("Damage"))) --n;
if(n > 0) continue;
}
fetched_stack = stack.copy(); // copy exact stack with nbt and tool damage, otherwise we have an automagical repair of items.
fetched_stack.setCount(0);
int n = stack.getCount();
@ -1067,12 +1079,12 @@ public class BlockDecorCraftingTable extends BlockDecorDirected
for(int i=0; i<9; ++i) {
final ItemStack grid_stack = getStackInSlot(i + CRAFTING_SLOTS_BEGIN);
final ItemStack refab_stack = to_refab.isEmpty() ? ItemStack.EMPTY : to_refab.get(i).copy();
if((!grid_stack.isEmpty()) && (grid_stack.isItemEqual(to_distribute))) {
if((!grid_stack.isEmpty()) && (isItemExactlyEqual(grid_stack, to_distribute))) {
matching_grid_stack_sizes[i] = grid_stack.getCount();
total_num_missing_stacks += grid_stack.getMaxStackSize()-grid_stack.getCount();
if(max_matching_stack_size < matching_grid_stack_sizes[i]) max_matching_stack_size = matching_grid_stack_sizes[i];
if(min_matching_stack_size > matching_grid_stack_sizes[i]) min_matching_stack_size = matching_grid_stack_sizes[i];
} else if((!refab_stack.isEmpty()) && (refab_stack.isItemEqual(to_distribute))) {
} else if((!refab_stack.isEmpty()) && (isItemExactlyEqual(refab_stack,to_distribute))) {
matching_grid_stack_sizes[i] = 0;
total_num_missing_stacks += grid_stack.getMaxStackSize();
if(max_matching_stack_size < matching_grid_stack_sizes[i]) max_matching_stack_size = matching_grid_stack_sizes[i];

View file

@ -39,7 +39,7 @@ public class TreeCutting
choppable_states.clear();
if(ModAuxiliaries.isModLoaded("dynamictrees")) {
ForgeRegistries.BLOCKS.getKeys().forEach((regname)->{
if("dynamictrees".equals(regname.getNamespace())) {
//if("dynamictrees".equals(regname.getNamespace())) { ... let's see if that also work with dyntrees compat mods
if(!regname.getPath().contains("branch")) return;
try {
Block block = ForgeRegistries.BLOCKS.getValue(regname);
@ -56,7 +56,7 @@ public class TreeCutting
LOGGER.warn("Failed to register chopping for " + regname.toString());
return;
}
}
//}
});
}
LOGGER.info("Dynamic Trees chopping compat: " + choppable_states.size() + " choppable states found.");

View file

@ -0,0 +1,12 @@
{
"forge_marker": 1,
"defaults": {
"model": "engineersdecor:device/small_block_breaker_model"
},
"variants": {
"normal": [{}],
"inventory": [{}],
"facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} },
"active": { "true":{ "model": "engineersdecor:device/small_block_breaker_model_active" }, "false":{}}
}
}

View file

@ -153,11 +153,11 @@ tile.engineersdecor.passive_fluid_accumulator.help=§6Vacuum suction based fluid
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.factory_dropper.name=Factory Dropper
tile.engineersdecor.factory_dropper.help=§6Dropper suitable for advanced factory automation.§r Has twelve round-robin selected slots. \
Drop force, angle, stack size, and cool-down delay adjustable in the GUI. Three stack compare \
slots with logical AND or OR can be used as internal trigger source. Internal trigger can be \
AND'ed or OR'ed with the external redstone signal trigger. Trigger simulation buttons for testing. \
Pre-opens shutter door when internal trigger conditions are met. Drops all matching stacks \
simultaneously. Click on all elements in the GUI to see how it works.
Drop force, angle, stack size, and cool-down delay adjustable using sliders in the GUI. Three stack compare \
slots (below the inventory slots) with logical AND or OR can be used as internal trigger source. The \
internal trigger can be AND'ed or OR'ed with the external redstone signal trigger. Trigger simulation \
buttons for testing. Pre-opens shutter door when internal trigger conditions are met. Drops all matching \
stacks simultaneously. Simply click on all elements in the GUI to see how it works.
tile.engineersdecor.factory_hopper.name=Factory Hopper
tile.engineersdecor.factory_hopper.help=§6Hopper suitable for advanced factory automation.§r Can transfer half-stacks, max collection range 9x9.\n\
GUI Slider controls: Collection range (0 to 4), insertion delay (0.5s to 10s), insertion stack size (1 to 32).\n\
@ -166,11 +166,19 @@ tile.engineersdecor.factory_placer.name=Factory Block Placer
tile.engineersdecor.factory_placer.help=§6Allows placing blocks and planting crops or trees.§r\n\
GUI Redstone controls: Not inverted / inverted (default), pulse mode / continuous mode (default).\n\
Also supports spike planing from underneath the soil. Spits out items that it cannot place or plant.
tile.engineersdecor.small_block_breaker.name=Small Block Breaker
tile.engineersdecor.small_block_breaker.help=§6Breaks blocks in front of it.§r\n\
Can be disabled by applying a redstone signal. \
The time needed to destroy a block depends on the hardness of that block. \
Provide RF/FE power to speed up the breaking process (massively).
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.
Heats up mineral blocks to magma blocks, and finally to lava. Click with a \
mineral block (stone, cobble, etc) or use item insertion to place a block in \
the melter. Use bucket or fluid extraction to retrieve the lava. When cooling \
down lava, obsidian is generated. Remove the RF power or apply a redstone \
signal to disable the furnace. For automation, use a redstone comparator to \
see in which melting phase the mineral is a moment.
tile.engineersdecor.small_solar_panel.name=Small Solar Panel
tile.engineersdecor.small_solar_panel.help=§6Produces a small amount of power when exposed to sunlight.§r\n\
Useful for charging LF capacitors in remote systems with low consumption. The \

View file

@ -162,11 +162,19 @@ tile.engineersdecor.factory_placer.name=Factory Block Placer
#tile.engineersdecor.factory_placer.help=§6Allows placing blocks and planting crops or trees.§r\n\
GUI Redstone controls: Not inverted / inverted (default), pulse mode / continuous mode (default).\n\
Also supports spike planing from underneath the soil. Spits out items that it cannot place or plant.
tile.engineersdecor.small_block_breaker.name=Factory Block Breaker
#tile.engineersdecor.small_block_breaker.help=§6Breaks blocks in front of it.§r\n\
Can be disabled by applying a redstone signal. \
The time needed to destroy a block depends on the hardness of that block. \
Provide RF/FE power to speed up the breaking process (massively).
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.
Heats up mineral blocks to magma blocks, and finally to lava. Click with a \
mineral block (stone, cobble, etc) or use item insertion to place a block in \
the melter. Use bucket or fluid extraction to retrieve the lava. When cooling \
down lava, obsidian is generated. Remove the RF power or apply a redstone \
signal to disable the furnace. For automation, use a redstone comparator to \
see in which melting phase the mineral is a moment.
tile.engineersdecor.small_solar_panel.name=Small Solar Panel
#tile.engineersdecor.small_solar_panel.help=§6Produces a small amount of power when exposed to sunlight.§r\n\
Useful for charging LF capacitors in remote systems with low consumption. The \

View file

@ -165,6 +165,11 @@ tile.engineersdecor.factory_placer.name=Factory Block Placer
#tile.engineersdecor.factory_placer.help=§6Allows placing blocks and planting crops or trees.§r\n\
GUI Redstone controls: Not inverted / inverted (default), pulse mode / continuous mode (default).\n\
Also supports spike planing from underneath the soil. Spits out items that it cannot place or plant.
tile.engineersdecor.small_block_breaker.name=Factory Block Breaker
#tile.engineersdecor.small_block_breaker.help=§6Breaks blocks in front of it.§r\n\
Can be disabled by applying a redstone signal. \
The time needed to destroy a block depends on the hardness of that block. \
Provide RF/FE power to speed up the breaking process (massively).
tile.engineersdecor.small_mineral_smelter.name=小型矿物熔炼炉
tile.engineersdecor.small_mineral_smelter.help=§6高温、高绝缘电熔石炉。§r\n\
把矿物块加热成岩浆块,最后变成熔岩。由于\

View file

@ -0,0 +1,383 @@
{
"parent": "block/cube",
"textures": {
"t": "engineersdecor:blocks/device/small_block_breaker_top",
"b": "engineersdecor:blocks/device/small_block_breaker_bottom",
"l": "engineersdecor:blocks/device/small_block_breaker_left",
"particle": "engineersdecor:blocks/device/small_block_breaker_left",
"k": "engineersdecor:blocks/device/small_block_breaker_back",
"r": "engineersdecor:blocks/device/small_block_breaker_right",
"f": "engineersdecor:blocks/device/small_block_breaker_front",
"sh": "engineersdecor:blocks/device/small_block_breaker_shaft"
},
"elements": [
{
"from": [0, 0, 4],
"to": [1, 12, 16],
"faces": {
"north": {"uv": [15, 4, 16, 16], "texture": "#f"},
"east": {"uv": [4, 0, 16, 12], "rotation": 180, "texture": "#f"},
"south": {"uv": [0, 4, 1, 16], "texture": "#k"},
"west": {"uv": [4, 4, 16, 16], "texture": "#l"},
"up": {"uv": [0, 4, 1, 16], "texture": "#t"},
"down": {"uv": [0, 0, 1, 12], "texture": "#b"}
}
},
{
"from": [15, 0, 4],
"to": [16, 12, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [23, 8, 8]},
"faces": {
"north": {"uv": [0, 4, 1, 16], "texture": "#f"},
"east": {"uv": [0, 4, 12, 16], "texture": "#r"},
"south": {"uv": [15, 4, 16, 16], "texture": "#k"},
"west": {"uv": [0, 0, 12, 12], "texture": "#l"},
"up": {"uv": [15, 4, 16, 16], "texture": "#t"},
"down": {"uv": [15, 0, 16, 12], "texture": "#b"}
}
},
{
"from": [7.5, 4, 6],
"to": [8.5, 12, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [15.5, 12, -5]},
"faces": {
"north": {"uv": [7, 4, 8, 12], "texture": "#f"},
"east": {"uv": [9, 4, 11, 12], "rotation": 180, "texture": "#f"},
"south": {"uv": [7.5, 4, 8.5, 12], "texture": "#t"},
"west": {"uv": [5, 4, 7, 12], "texture": "#f"},
"up": {"uv": [12, 7, 13, 9], "texture": "#t"},
"down": {"uv": [7.5, 9, 8.5, 11], "rotation": 270, "texture": "#l"}
}
},
{
"from": [8.5, 4, 6],
"to": [9, 12, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [16.5, 12, -5]},
"faces": {
"north": {"uv": [7, 4, 7.5, 12], "texture": "#f"},
"east": {"uv": [9, 4, 10, 12], "rotation": 180, "texture": "#f"},
"south": {"uv": [8.5, 4, 9, 12], "texture": "#t"},
"west": {"uv": [6, 4, 7, 12], "texture": "#l"},
"up": {"uv": [8.5, 7, 9, 8], "texture": "#t"},
"down": {"uv": [8.5, 9, 9, 10], "rotation": 270, "texture": "#l"}
}
},
{
"from": [7, 4, 6],
"to": [7.5, 12, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [15, 12, -5]},
"faces": {
"north": {"uv": [8.5, 4, 9, 12], "texture": "#f"},
"east": {"uv": [9, 4, 10, 12], "rotation": 180, "texture": "#l"},
"south": {"uv": [7, 4, 7.5, 12], "texture": "#t"},
"west": {"uv": [6, 4, 7, 12], "texture": "#f"},
"up": {"uv": [7.5, 7, 8.5, 8], "texture": "#t"},
"down": {"uv": [7, 9, 7.5, 10], "rotation": 270, "texture": "#l"}
}
},
{
"from": [15, 0, 0],
"to": [16, 5, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [23, -2, 8]},
"faces": {
"north": {"uv": [0, 11, 1, 16], "texture": "#f"},
"east": {"uv": [12, 11, 16, 16], "texture": "#r"},
"south": {"uv": [15, 11, 16, 16], "texture": "#t"},
"west": {"uv": [0, 11, 4, 16], "texture": "#l"},
"up": {"uv": [15, 0, 16, 4], "texture": "#t"},
"down": {"uv": [15, 12, 16, 16], "texture": "#b"}
}
},
{
"from": [0, 0, 0],
"to": [1, 5, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -2, 8]},
"faces": {
"north": {"uv": [15, 11, 16, 16], "texture": "#f"},
"east": {"uv": [12, 11, 16, 16], "texture": "#l"},
"south": {"uv": [0, 11, 1, 16], "texture": "#t"},
"west": {"uv": [0, 11, 4, 16], "texture": "#l"},
"up": {"uv": [0, 0, 1, 4], "texture": "#t"},
"down": {"uv": [0, 12, 1, 16], "texture": "#b"}
}
},
{
"from": [1, 0, 0],
"to": [15, 4, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]},
"faces": {
"north": {"uv": [1, 12, 15, 16], "texture": "#f"},
"east": {"uv": [0, 12, 16, 16], "texture": "#l"},
"south": {"uv": [1, 12, 15, 16], "texture": "#k"},
"west": {"uv": [0, 12, 16, 16], "texture": "#l"},
"up": {"uv": [1, 0, 15, 16], "texture": "#t"},
"down": {"uv": [1, 0, 15, 16], "texture": "#b"}
}
},
{
"from": [1, 4, 7],
"to": [15, 12, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 24]},
"faces": {
"north": {"uv": [1, 4, 15, 12], "texture": "#f"},
"east": {"uv": [0, 4, 9, 12], "texture": "#l"},
"south": {"uv": [1, 4, 15, 12], "texture": "#k"},
"west": {"uv": [7, 4, 16, 12], "texture": "#l"},
"up": {"uv": [1, 7, 15, 16], "texture": "#t"},
"down": {"uv": [1, 0, 15, 9], "rotation": 270, "texture": "#l"}
}
},
{
"from": [4, 9.5, 5],
"to": [5, 10.5, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 2.5, 12.5]},
"faces": {
"north": {"uv": [11, 5.5, 12, 6.5], "texture": "#sh"},
"east": {"uv": [9.5, 5.5, 11, 6.5], "texture": "#sh"},
"south": {"uv": [4, 5.5, 5, 6.5], "texture": "#sh"},
"west": {"uv": [5, 5.5, 6.5, 6.5], "texture": "#sh"},
"up": {"uv": [4, 5, 5, 6.5], "texture": "#sh"},
"down": {"uv": [4, 9.5, 5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [2.5, 6, 6.5],
"to": [6.5, 10, 7.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12.5, 1, 13.5]},
"faces": {
"north": {"uv": [12, 12, 16, 16], "texture": "#sh"},
"east": {"uv": [15.5, 6, 16, 10], "texture": "#sh"},
"south": {"uv": [2.5, 6, 6.5, 10], "texture": "#sh"},
"west": {"uv": [0, 6, 0.5, 10], "texture": "#sh"},
"up": {"uv": [2, 6, 6, 7], "texture": "#sh"},
"down": {"uv": [2.5, 15.5, 6.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [2.5, 9, 5],
"to": [3.5, 10, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10.5, 2, 12.5]},
"faces": {
"north": {"uv": [12, 6, 13, 7], "texture": "#sh"},
"east": {"uv": [9.5, 6, 11, 7], "texture": "#sh"},
"south": {"uv": [2.5, 6, 3.5, 7], "texture": "#sh"},
"west": {"uv": [5, 6, 6.5, 7], "texture": "#sh"},
"up": {"uv": [2, 5, 3, 6.5], "texture": "#sh"},
"down": {"uv": [2.5, 9.5, 3.5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [2, 7.5, 5],
"to": [3, 8.5, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 0.5, 12.5]},
"faces": {
"north": {"uv": [13, 7.5, 14, 8.5], "texture": "#sh"},
"east": {"uv": [9.5, 7.5, 11, 8.5], "texture": "#sh"},
"south": {"uv": [2, 7.5, 3, 8.5], "texture": "#sh"},
"west": {"uv": [5, 7.5, 6.5, 8.5], "texture": "#sh"},
"up": {"uv": [2, 5, 3, 6.5], "texture": "#sh"},
"down": {"uv": [2, 9.5, 3, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [2.5, 6, 5],
"to": [3.5, 7, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10.5, -1, 12.5]},
"faces": {
"north": {"uv": [12, 9, 13, 10], "texture": "#sh"},
"east": {"uv": [9.5, 9, 11, 10], "texture": "#sh"},
"south": {"uv": [2.5, 9, 3.5, 10], "texture": "#sh"},
"west": {"uv": [5, 9, 6.5, 10], "texture": "#sh"},
"up": {"uv": [2.5, 5, 3.5, 6.5], "texture": "#sh"},
"down": {"uv": [2.5, 9.5, 3.5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [4, 5.5, 5],
"to": [5, 6.5, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, -1.5, 12.5]},
"faces": {
"north": {"uv": [11, 9.5, 12, 10.5], "texture": "#sh"},
"east": {"uv": [9.5, 9.5, 11, 10.5], "texture": "#sh"},
"south": {"uv": [4, 9.5, 5, 10.5], "texture": "#sh"},
"west": {"uv": [5, 9.5, 6.5, 10.5], "texture": "#sh"},
"up": {"uv": [4, 5, 5, 6.5], "texture": "#sh"},
"down": {"uv": [4, 9.5, 5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [5.5, 6, 5],
"to": [6.5, 7, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [13.5, -1, 12.5]},
"faces": {
"north": {"uv": [9, 9, 10, 10], "texture": "#sh"},
"east": {"uv": [9.5, 9, 11, 10], "texture": "#sh"},
"south": {"uv": [5.5, 9, 6.5, 10], "texture": "#sh"},
"west": {"uv": [5, 9, 6.5, 10], "texture": "#sh"},
"up": {"uv": [5, 5, 6, 6.5], "texture": "#sh"},
"down": {"uv": [5.5, 9.5, 6.5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [5.5, 9, 5],
"to": [6.5, 10, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [13.5, 2, 12.5]},
"faces": {
"north": {"uv": [9, 6, 10, 7], "texture": "#sh"},
"east": {"uv": [9.5, 6, 11, 7], "texture": "#sh"},
"south": {"uv": [5.5, 6, 6.5, 7], "texture": "#sh"},
"west": {"uv": [5, 6, 6.5, 7], "texture": "#sh"},
"up": {"uv": [5, 5, 6, 6.5], "texture": "#sh"},
"down": {"uv": [5.5, 9.5, 6.5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [6, 7.5, 5],
"to": [7, 8.5, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 0.5, 12.5]},
"faces": {
"north": {"uv": [9, 7.5, 10, 8.5], "texture": "#sh"},
"east": {"uv": [9.5, 7.5, 11, 8.5], "texture": "#sh"},
"south": {"uv": [6, 7.5, 7, 8.5], "texture": "#sh"},
"west": {"uv": [5, 7.5, 6.5, 8.5], "texture": "#sh"},
"up": {"uv": [6, 5, 7, 6.5], "texture": "#sh"},
"down": {"uv": [6, 9.5, 7, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [9.5, 6, 6.5],
"to": [13.5, 10, 7.5],
"rotation": {"angle": 0, "axis": "y", "origin": [19.5, 1, 13.5]},
"faces": {
"north": {"uv": [10, 12, 14, 16], "texture": "#sh"},
"east": {"uv": [15.5, 6, 16, 10], "texture": "#sh"},
"south": {"uv": [9.5, 6, 13.5, 10], "texture": "#sh"},
"west": {"uv": [0, 6, 0.5, 10], "texture": "#sh"},
"up": {"uv": [10, 7, 14, 8], "texture": "#sh"},
"down": {"uv": [9.5, 15.5, 13.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [12.5, 9, 5],
"to": [13.5, 10, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [20.5, 2, 12.5]},
"faces": {
"north": {"uv": [2, 6, 3, 7], "texture": "#sh"},
"east": {"uv": [9.5, 6, 11, 7], "texture": "#sh"},
"south": {"uv": [12.5, 6, 13.5, 7], "texture": "#sh"},
"west": {"uv": [5, 6, 6.5, 7], "texture": "#sh"},
"up": {"uv": [12, 5, 13, 6.5], "texture": "#sh"},
"down": {"uv": [12.5, 9.5, 13.5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [11, 9.5, 5],
"to": [12, 10.5, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [19, 2.5, 12.5]},
"faces": {
"north": {"uv": [4, 5.5, 5, 6.5], "texture": "#sh"},
"east": {"uv": [9.5, 5.5, 11, 6.5], "texture": "#sh"},
"south": {"uv": [11, 5.5, 12, 6.5], "texture": "#sh"},
"west": {"uv": [5, 5.5, 6.5, 6.5], "texture": "#sh"},
"up": {"uv": [11, 5, 12, 6.5], "texture": "#sh"},
"down": {"uv": [11, 9.5, 12, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [9.5, 9, 5],
"to": [10.5, 10, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [17.5, 2, 12.5]},
"faces": {
"north": {"uv": [5, 6, 6, 7], "texture": "#sh"},
"east": {"uv": [9.5, 6, 11, 7], "texture": "#sh"},
"south": {"uv": [9.5, 6, 10.5, 7], "texture": "#sh"},
"west": {"uv": [5, 6, 6.5, 7], "texture": "#sh"},
"up": {"uv": [9, 5, 10, 6.5], "texture": "#sh"},
"down": {"uv": [9.5, 9.5, 10.5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [9, 7.5, 5],
"to": [10, 8.5, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [17, 0.5, 12.5]},
"faces": {
"north": {"uv": [6, 7.5, 7, 8.5], "texture": "#sh"},
"east": {"uv": [9.5, 7.5, 11, 8.5], "texture": "#sh"},
"south": {"uv": [9, 7.5, 10, 8.5], "texture": "#sh"},
"west": {"uv": [5, 7.5, 6.5, 8.5], "texture": "#sh"},
"up": {"uv": [9, 5, 10, 6.5], "texture": "#sh"},
"down": {"uv": [9, 9.5, 10, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [9.5, 6, 5],
"to": [10.5, 7, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [17.5, -1, 12.5]},
"faces": {
"north": {"uv": [5, 9, 6, 10], "texture": "#sh"},
"east": {"uv": [9.5, 9, 11, 10], "texture": "#sh"},
"south": {"uv": [9.5, 9, 10.5, 10], "texture": "#sh"},
"west": {"uv": [5, 9, 6.5, 10], "texture": "#sh"},
"up": {"uv": [9, 5, 10, 6.5], "texture": "#sh"},
"down": {"uv": [9.5, 9.5, 10.5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [11, 5.5, 5],
"to": [12, 6.5, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [19, -1.5, 12.5]},
"faces": {
"north": {"uv": [4, 9.5, 5, 10.5], "texture": "#sh"},
"east": {"uv": [9.5, 9.5, 11, 10.5], "texture": "#sh"},
"south": {"uv": [11, 9.5, 12, 10.5], "texture": "#sh"},
"west": {"uv": [5, 9.5, 6.5, 10.5], "texture": "#sh"},
"up": {"uv": [11, 5, 12, 6.5], "texture": "#sh"},
"down": {"uv": [11, 9.5, 12, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [12.5, 6, 5],
"to": [13.5, 7, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [20.5, -1, 12.5]},
"faces": {
"north": {"uv": [2, 9, 3, 10], "texture": "#sh"},
"east": {"uv": [9.5, 9, 11, 10], "texture": "#sh"},
"south": {"uv": [12.5, 9, 13.5, 10], "texture": "#sh"},
"west": {"uv": [5, 9, 6.5, 10], "texture": "#sh"},
"up": {"uv": [12, 5, 13, 6.5], "texture": "#sh"},
"down": {"uv": [12.5, 9.5, 13.5, 11], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [13, 7.5, 5],
"to": [14, 8.5, 6.5],
"rotation": {"angle": 0, "axis": "y", "origin": [21, 0.5, 12.5]},
"faces": {
"north": {"uv": [2, 7.5, 3, 8.5], "texture": "#sh"},
"east": {"uv": [9.5, 7.5, 11, 8.5], "texture": "#sh"},
"south": {"uv": [13, 7.5, 14, 8.5], "texture": "#sh"},
"west": {"uv": [5, 7.5, 6.5, 8.5], "texture": "#sh"},
"up": {"uv": [13, 5, 14, 6.5], "texture": "#sh"},
"down": {"uv": [13, 9.5, 14, 11], "rotation": 270, "texture": "#sh"}
}
}
],
"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": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -0,0 +1,461 @@
{
"parent": "block/cube",
"textures": {
"t": "engineersdecor:blocks/device/small_block_breaker_top",
"b": "engineersdecor:blocks/device/small_block_breaker_bottom",
"l": "engineersdecor:blocks/device/small_block_breaker_left",
"particle": "engineersdecor:blocks/device/small_block_breaker_left",
"k": "engineersdecor:blocks/device/small_block_breaker_back",
"r": "engineersdecor:blocks/device/small_block_breaker_right",
"f": "engineersdecor:blocks/device/small_block_breaker_front",
"sh": "engineersdecor:blocks/device/small_block_breaker_shaft_active"
},
"elements": [
{
"from": [0, 0, 4],
"to": [1, 12, 16],
"faces": {
"north": {"uv": [15, 4, 16, 16], "texture": "#f"},
"east": {"uv": [4, 0, 16, 12], "rotation": 180, "texture": "#f"},
"south": {"uv": [0, 4, 1, 16], "texture": "#k"},
"west": {"uv": [4, 4, 16, 16], "texture": "#l"},
"up": {"uv": [0, 4, 1, 16], "texture": "#t"},
"down": {"uv": [0, 0, 1, 12], "texture": "#b"}
}
},
{
"from": [15, 0, 4],
"to": [16, 12, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [23, 8, 8]},
"faces": {
"north": {"uv": [0, 4, 1, 16], "texture": "#f"},
"east": {"uv": [0, 4, 12, 16], "texture": "#r"},
"south": {"uv": [15, 4, 16, 16], "texture": "#k"},
"west": {"uv": [0, 0, 12, 12], "texture": "#l"},
"up": {"uv": [15, 4, 16, 16], "texture": "#t"},
"down": {"uv": [15, 0, 16, 12], "texture": "#b"}
}
},
{
"from": [7.5, 4, 6],
"to": [8.5, 12, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [15.5, 12, -5]},
"faces": {
"north": {"uv": [7.5, 4, 8.5, 12], "texture": "#f"},
"east": {"uv": [9, 4, 11, 12], "rotation": 180, "texture": "#f"},
"south": {"uv": [7.5, 4, 8.5, 12], "texture": "#t"},
"west": {"uv": [5, 4, 7, 12], "texture": "#f"},
"up": {"uv": [12, 7, 13, 9], "texture": "#t"},
"down": {"uv": [7.5, 9, 8.5, 11], "rotation": 270, "texture": "#l"}
}
},
{
"from": [8.5, 4, 6],
"to": [9, 12, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [16.5, 12, -5]},
"faces": {
"north": {"uv": [7, 4, 7.5, 12], "texture": "#f"},
"east": {"uv": [9, 4, 10, 12], "rotation": 180, "texture": "#f"},
"south": {"uv": [8.5, 4, 9, 12], "texture": "#t"},
"west": {"uv": [6, 4, 7, 12], "texture": "#l"},
"up": {"uv": [8, 7, 9.5, 8], "texture": "#t"},
"down": {"uv": [8.5, 9, 9, 10], "rotation": 270, "texture": "#l"}
}
},
{
"from": [7, 4, 6],
"to": [7.5, 12, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [15, 12, -5]},
"faces": {
"north": {"uv": [8.5, 4, 9, 12], "texture": "#f"},
"east": {"uv": [9, 4, 10, 12], "rotation": 180, "texture": "#l"},
"south": {"uv": [7, 4, 7.5, 12], "texture": "#t"},
"west": {"uv": [6, 4, 7, 12], "texture": "#f"},
"up": {"uv": [7, 7, 7.5, 8], "texture": "#t"},
"down": {"uv": [7, 9, 7.5, 10], "rotation": 270, "texture": "#l"}
}
},
{
"from": [15, 0, 0],
"to": [16, 5, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [23, -2, 8]},
"faces": {
"north": {"uv": [0, 11, 1, 16], "texture": "#f"},
"east": {"uv": [12, 11, 16, 16], "texture": "#r"},
"south": {"uv": [15, 11, 16, 16], "texture": "#t"},
"west": {"uv": [0, 11, 4, 16], "texture": "#l"},
"up": {"uv": [15, 0, 16, 4], "texture": "#t"},
"down": {"uv": [15, 12, 16, 16], "texture": "#b"}
}
},
{
"from": [0, 0, 0],
"to": [1, 5, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [8, -2, 8]},
"faces": {
"north": {"uv": [15, 11, 16, 16], "texture": "#f"},
"east": {"uv": [12, 11, 16, 16], "texture": "#l"},
"south": {"uv": [0, 11, 1, 16], "texture": "#t"},
"west": {"uv": [0, 11, 4, 16], "texture": "#l"},
"up": {"uv": [0, 0, 1, 4], "texture": "#t"},
"down": {"uv": [0, 12, 1, 16], "texture": "#b"}
}
},
{
"from": [1, 0, 0],
"to": [15, 4, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 24]},
"faces": {
"north": {"uv": [1, 12, 15, 16], "texture": "#f"},
"east": {"uv": [0, 12, 16, 16], "texture": "#l"},
"south": {"uv": [1, 12, 15, 16], "texture": "#k"},
"west": {"uv": [0, 12, 16, 16], "texture": "#l"},
"up": {"uv": [1, 0, 15, 16], "texture": "#t"},
"down": {"uv": [1, 0, 15, 16], "texture": "#b"}
}
},
{
"from": [1, 4, 7],
"to": [15, 12, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 24]},
"faces": {
"north": {"uv": [1, 4, 15, 12], "texture": "#f"},
"east": {"uv": [0, 4, 9, 12], "texture": "#l"},
"south": {"uv": [1, 4, 15, 12], "texture": "#k"},
"west": {"uv": [7, 4, 16, 12], "texture": "#l"},
"up": {"uv": [1, 7, 15, 16], "texture": "#t"},
"down": {"uv": [1, 0, 15, 9], "rotation": 270, "texture": "#l"}
}
},
{
"from": [4, 9.5, -2],
"to": [5, 10.5, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 2.5, 5.5]},
"faces": {
"north": {"uv": [11, 5.5, 12, 6.5], "texture": "#sh"},
"east": {"uv": [16, 5.5, 16, 6.5], "texture": "#sh"},
"south": {"uv": [4, 5.5, 5, 6.5], "texture": "#sh"},
"west": {"uv": [0, 5.5, 0, 6.5], "texture": "#sh"},
"up": {"uv": [4, 0, 5, 0], "texture": "#sh"},
"down": {"uv": [4, 16, 5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [3, 7, 0.5],
"to": [3.5, 9, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [2.5, 1, 5]},
"faces": {
"north": {"uv": [12.5, 7, 13, 9], "texture": "#sh"},
"east": {"uv": [9, 7, 15.5, 9], "texture": "#sh"},
"south": {"uv": [3, 7, 3.5, 9], "texture": "#sh"},
"west": {"uv": [1, 0, 7.5, 2], "texture": "#sh"},
"up": {"uv": [3, 0.5, 9.5, 2], "rotation": 90, "texture": "#sh"},
"down": {"uv": [3, 9, 3.5, 15.5], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [2.5, 6, -0.5],
"to": [6.5, 10, 0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12.5, 1, 6.5]},
"faces": {
"north": {"uv": [11, 11, 15, 15], "texture": "#sh"},
"east": {"uv": [15.5, 6, 16, 10], "texture": "#sh"},
"south": {"uv": [2.5, 6, 6.5, 10], "texture": "#sh"},
"west": {"uv": [0, 6, 0.5, 10], "texture": "#sh"},
"up": {"uv": [3, 2, 7, 2.5], "texture": "#sh"},
"down": {"uv": [2.5, 15.5, 6.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [2.5, 9, -2],
"to": [3.5, 10, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10.5, 2, 5.5]},
"faces": {
"north": {"uv": [12.5, 6, 13.5, 7], "texture": "#sh"},
"east": {"uv": [16, 6, 16, 7], "texture": "#sh"},
"south": {"uv": [2.5, 6, 3.5, 7], "texture": "#sh"},
"west": {"uv": [0, 6, 0, 7], "texture": "#sh"},
"up": {"uv": [3, 2, 4, 3], "texture": "#sh"},
"down": {"uv": [2.5, 16, 3.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [2, 7.5, -2],
"to": [3, 8.5, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 0.5, 5.5]},
"faces": {
"north": {"uv": [13, 7.5, 14, 8.5], "texture": "#sh"},
"east": {"uv": [16, 7.5, 16, 8.5], "texture": "#sh"},
"south": {"uv": [2, 7.5, 3, 8.5], "texture": "#sh"},
"west": {"uv": [0, 7.5, 0, 8.5], "texture": "#sh"},
"up": {"uv": [2, 0, 3, 0], "texture": "#sh"},
"down": {"uv": [2, 16, 3, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [2.5, 6, -2],
"to": [3.5, 7, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [10.5, -1, 5.5]},
"faces": {
"north": {"uv": [12.5, 9, 13.5, 10], "texture": "#sh"},
"east": {"uv": [16, 9, 16, 10], "texture": "#sh"},
"south": {"uv": [2.5, 9, 3.5, 10], "texture": "#sh"},
"west": {"uv": [0, 9, 0, 10], "texture": "#sh"},
"up": {"uv": [2.5, 0, 3.5, 0], "texture": "#sh"},
"down": {"uv": [2.5, 16, 3.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [4, 5.5, -2],
"to": [5, 6.5, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, -1.5, 5.5]},
"faces": {
"north": {"uv": [11, 9.5, 12, 10.5], "texture": "#sh"},
"east": {"uv": [16, 9.5, 16, 10.5], "texture": "#sh"},
"south": {"uv": [4, 9.5, 5, 10.5], "texture": "#sh"},
"west": {"uv": [0, 9.5, 0, 10.5], "texture": "#sh"},
"up": {"uv": [4, 0, 5, 0], "texture": "#sh"},
"down": {"uv": [4, 16, 5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [5.5, 6, -2],
"to": [6.5, 7, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [13.5, -1, 5.5]},
"faces": {
"north": {"uv": [9.5, 9, 10.5, 10], "texture": "#sh"},
"east": {"uv": [16, 9, 16, 10], "texture": "#sh"},
"south": {"uv": [5.5, 9, 6.5, 10], "texture": "#sh"},
"west": {"uv": [0, 9, 0, 10], "texture": "#sh"},
"up": {"uv": [5.5, 0, 6.5, 0], "texture": "#sh"},
"down": {"uv": [5.5, 16, 6.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [5.5, 9, -2],
"to": [6.5, 10, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [13.5, 2, 5.5]},
"faces": {
"north": {"uv": [9.5, 6, 10.5, 7], "texture": "#sh"},
"east": {"uv": [16, 6, 16, 7], "texture": "#sh"},
"south": {"uv": [5.5, 6, 6.5, 7], "texture": "#sh"},
"west": {"uv": [0, 6, 0, 7], "texture": "#sh"},
"up": {"uv": [5.5, 0, 6.5, 0], "texture": "#sh"},
"down": {"uv": [5.5, 16, 6.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [6, 7.5, -2],
"to": [7, 8.5, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [14, 0.5, 5.5]},
"faces": {
"north": {"uv": [9, 7.5, 10, 8.5], "texture": "#sh"},
"east": {"uv": [16, 7.5, 16, 8.5], "texture": "#sh"},
"south": {"uv": [6, 7.5, 7, 8.5], "texture": "#sh"},
"west": {"uv": [0, 7.5, 0, 8.5], "texture": "#sh"},
"up": {"uv": [6, 0, 7, 0], "texture": "#sh"},
"down": {"uv": [6, 16, 7, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [5.5, 7, 0.5],
"to": [6, 9, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [5.5, 1, 5]},
"faces": {
"north": {"uv": [10, 7, 10.5, 9], "texture": "#sh"},
"east": {"uv": [8, 7, 14.5, 9], "texture": "#sh"},
"south": {"uv": [5.5, 7, 6, 9], "texture": "#sh"},
"west": {"uv": [0.5, 7, 7, 9], "texture": "#sh"},
"up": {"uv": [5, 2, 11.5, 2.5], "texture": "#sh"},
"down": {"uv": [5.5, 9, 6, 15.5], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [3.5, 6.5, 0.5],
"to": [5.5, 9.5, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [4.5, 1, 5]},
"faces": {
"north": {"uv": [10.5, 6.5, 12.5, 9.5], "texture": "#sh"},
"east": {"uv": [9, 6.5, 15.5, 9.5], "texture": "#sh"},
"south": {"uv": [3.5, 6.5, 5.5, 9.5], "texture": "#sh"},
"west": {"uv": [0.5, 6.5, 7, 9.5], "texture": "#sh"},
"up": {"uv": [4, 1, 11, 3.5], "rotation": 90, "texture": "#sh"},
"down": {"uv": [3.5, 9, 5.5, 15.5], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [12.5, 7, 0.5],
"to": [13, 9, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [12.5, 1, 5]},
"faces": {
"north": {"uv": [3, 7, 3.5, 9], "texture": "#sh"},
"east": {"uv": [9, 7, 15.5, 9], "texture": "#sh"},
"south": {"uv": [12.5, 7, 13, 9], "texture": "#sh"},
"west": {"uv": [0.5, 7, 7, 9], "texture": "#sh"},
"up": {"uv": [3, 0, 11.5, 0.5], "rotation": 90, "texture": "#sh"},
"down": {"uv": [12.5, 9, 13, 15.5], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [10.5, 6.5, 0.5],
"to": [12.5, 9.5, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [11.5, 1, 5]},
"faces": {
"north": {"uv": [3.5, 6.5, 5.5, 9.5], "texture": "#sh"},
"east": {"uv": [9, 6.5, 15.5, 9.5], "texture": "#sh"},
"south": {"uv": [10.5, 6.5, 12.5, 9.5], "texture": "#sh"},
"west": {"uv": [0.5, 6.5, 7, 9.5], "texture": "#sh"},
"up": {"uv": [6, 0, 12, 2.5], "rotation": 90, "texture": "#sh"},
"down": {"uv": [10.5, 9, 12.5, 15.5], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [10, 7, 0.5],
"to": [10.5, 9, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [9.5, 1, 5]},
"faces": {
"north": {"uv": [5.5, 7, 6, 9], "texture": "#sh"},
"east": {"uv": [9, 7, 15.5, 9], "texture": "#sh"},
"south": {"uv": [10, 7, 10.5, 9], "texture": "#sh"},
"west": {"uv": [0.5, 7, 7, 9], "texture": "#sh"},
"up": {"uv": [10, 0.5, 15.5, 1], "rotation": 90, "texture": "#sh"},
"down": {"uv": [10, 9, 10.5, 15.5], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [9.5, 6, -0.5],
"to": [13.5, 10, 0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [19.5, 1, 6.5]},
"faces": {
"north": {"uv": [10, 12, 14, 16], "texture": "#sh"},
"east": {"uv": [15.5, 6, 16, 10], "texture": "#sh"},
"south": {"uv": [9.5, 6, 13.5, 10], "texture": "#sh"},
"west": {"uv": [0, 6, 0.5, 10], "texture": "#sh"},
"up": {"uv": [9.5, 0, 13.5, 0.5], "texture": "#sh"},
"down": {"uv": [9.5, 15.5, 13.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [12.5, 9, -2],
"to": [13.5, 10, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [20.5, 2, 5.5]},
"faces": {
"north": {"uv": [2.5, 6, 3.5, 7], "texture": "#sh"},
"east": {"uv": [16, 6, 16, 7], "texture": "#sh"},
"south": {"uv": [12.5, 6, 13.5, 7], "texture": "#sh"},
"west": {"uv": [0, 6, 0, 7], "texture": "#sh"},
"up": {"uv": [12.5, 0, 13.5, 0], "texture": "#sh"},
"down": {"uv": [12.5, 16, 13.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [11, 9.5, -2],
"to": [12, 10.5, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [19, 2.5, 5.5]},
"faces": {
"north": {"uv": [4, 5.5, 5, 6.5], "texture": "#sh"},
"east": {"uv": [16, 5.5, 16, 6.5], "texture": "#sh"},
"south": {"uv": [11, 5.5, 12, 6.5], "texture": "#sh"},
"west": {"uv": [0, 5.5, 0, 6.5], "texture": "#sh"},
"up": {"uv": [11, 0, 12, 0], "texture": "#sh"},
"down": {"uv": [11, 16, 12, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [9.5, 9, -2],
"to": [10.5, 10, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [17.5, 2, 5.5]},
"faces": {
"north": {"uv": [5.5, 6, 6.5, 7], "texture": "#sh"},
"east": {"uv": [16, 6, 16, 7], "texture": "#sh"},
"south": {"uv": [9.5, 6, 10.5, 7], "texture": "#sh"},
"west": {"uv": [0, 6, 0, 7], "texture": "#sh"},
"up": {"uv": [9.5, 0, 10.5, 0], "texture": "#sh"},
"down": {"uv": [9.5, 16, 10.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [9, 7.5, -2],
"to": [10, 8.5, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [17, 0.5, 5.5]},
"faces": {
"north": {"uv": [6, 7.5, 7, 8.5], "texture": "#sh"},
"east": {"uv": [16, 7.5, 16, 8.5], "texture": "#sh"},
"south": {"uv": [9, 7.5, 10, 8.5], "texture": "#sh"},
"west": {"uv": [0, 7.5, 0, 8.5], "texture": "#sh"},
"up": {"uv": [9, 0, 10, 0], "texture": "#sh"},
"down": {"uv": [9, 16, 10, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [9.5, 6, -2],
"to": [10.5, 7, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [17.5, -1, 5.5]},
"faces": {
"north": {"uv": [5.5, 9, 6.5, 10], "texture": "#sh"},
"east": {"uv": [16, 9, 16, 10], "texture": "#sh"},
"south": {"uv": [9.5, 9, 10.5, 10], "texture": "#sh"},
"west": {"uv": [0, 9, 0, 10], "texture": "#sh"},
"up": {"uv": [9.5, 0, 10.5, 0], "texture": "#sh"},
"down": {"uv": [9.5, 16, 10.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [11, 5.5, -2],
"to": [12, 6.5, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [19, -1.5, 5.5]},
"faces": {
"north": {"uv": [4, 9.5, 5, 10.5], "texture": "#sh"},
"east": {"uv": [16, 9.5, 16, 10.5], "texture": "#sh"},
"south": {"uv": [11, 9.5, 12, 10.5], "texture": "#sh"},
"west": {"uv": [0, 9.5, 0, 10.5], "texture": "#sh"},
"up": {"uv": [11, 0, 12, 0], "texture": "#sh"},
"down": {"uv": [11, 16, 12, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [12.5, 6, -2],
"to": [13.5, 7, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [20.5, -1, 5.5]},
"faces": {
"north": {"uv": [2.5, 9, 3.5, 10], "texture": "#sh"},
"east": {"uv": [16, 9, 16, 10], "texture": "#sh"},
"south": {"uv": [12.5, 9, 13.5, 10], "texture": "#sh"},
"west": {"uv": [0, 9, 0, 10], "texture": "#sh"},
"up": {"uv": [12.5, 0, 13.5, 0], "texture": "#sh"},
"down": {"uv": [12.5, 16, 13.5, 16], "rotation": 270, "texture": "#sh"}
}
},
{
"from": [13, 7.5, -2],
"to": [14, 8.5, -0.5],
"rotation": {"angle": 0, "axis": "y", "origin": [21, 0.5, 5.5]},
"faces": {
"north": {"uv": [2, 7.5, 3, 8.5], "texture": "#sh"},
"east": {"uv": [16, 7.5, 16, 8.5], "texture": "#sh"},
"south": {"uv": [13, 7.5, 14, 8.5], "texture": "#sh"},
"west": {"uv": [0, 7.5, 0, 8.5], "texture": "#sh"},
"up": {"uv": [13, 0, 14, 0], "texture": "#sh"},
"down": {"uv": [13, 16, 14, 16], "rotation": 270, "texture": "#sh"}
}
}
],
"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": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -0,0 +1,37 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:small_block_breaker",
"missing": ["immersiveengineering:material"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"PPP",
"PAO",
"PRP"
],
"key": {
"O": {
"item": "minecraft:observer",
"data": 0
},
"P": {
"item": "#ingotIron",
"data": 0
},
"A": {
"item": "minecraft:iron_pickaxe",
"data": 0
},
"R": {
"item": "minecraft:redstone_block",
"data": 0
}
},
"result": {
"item": "engineersdecor:small_block_breaker",
"count": 1
}
}

View file

@ -0,0 +1,41 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:small_block_breaker",
"required": ["immersiveengineering:material"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"PPP",
"PAO",
"CRC"
],
"key": {
"O": {
"item": "minecraft:observer",
"data": 0
},
"P": {
"item": "#plateAnyFerroMetal",
"data": 0
},
"A": {
"item": "minecraft:iron_pickaxe",
"data": 0
},
"R": {
"item": "minecraft:redstone_block",
"data": 0
},
"C": {
"item": "#anyMechanicalComponent",
"data": 0
}
},
"result": {
"item": "engineersdecor:small_block_breaker",
"count": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 B

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B