1.12: ModBlocks class renamed to ModContent. Mineal Smelter released. Window sub models stripped (issue #19). Block opacity of full blocks fixed (issue #50). Factory Dropper continuous mode added (issue #51). Experimental features added.

This commit is contained in:
stfwi 2019-09-10 18:14:42 +02:00
parent 64186ec813
commit 462e14166c
104 changed files with 3812 additions and 158 deletions

View file

@ -1,10 +1,11 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.12-b1": "[A] Mineal Smelter non-experimental now.\n[M] Window submodels stripped (reopened issue #19, thx overchoice).\n[M] Opaque full block light opacity fixed (issue #50, thx Illomiurge).\n[M] Factory Dropper: Added pulse/continuous mode in GUI (issue #51, thx Aristine for the CR).",
"1.0.11": "[R] Release based on v1.0.11-b3. Release-to-release changes: * Steel floor grating improvments. * Minor model box fixes. * Standalone recipes added. * Language updates.",
"1.0.11-b3": "[M] Added missing standalone recipes for pipe valves, passive fluid accumulator, and waste incinerator.",
"1.0.11-b2": "[F] Fixed Floor Grating issue, which could have caused a crash.\n[M] Lang update ru-ru (Shellyoung, PR #47).",
"1.0.11-b1": "[M] Lang update ru-ru (Shellyoung, PR #45).\n[F] Fixed bounding box of the Steel Table.\n[M] Steel Floor Frating: Items fall through.",
"1.0.11-b1": "[M] Lang update ru-ru (Shellyoung, PR #45).\n[F] Fixed bounding box of the Steel Table.\n[M] Steel Floor Grating: Items fall through.",
"1.0.10": "[R] Release based on v1.0.10-b2. Release-to-release changes: * Steel table added. * Steel floor grating added. * Treated wood side table added. * Exit Sign added. * Recipe fixes.",
"1.0.10-b2": "[A] Steel table added.\n[A] Steel floor grating added.",
"1.0.10-b1": "[A] Treated wood side table added.\n[F] Fixed recipe collision of Metal Rung Ladder (issue #37, thx ProsperCraft for reporting).\n[A] Added Exit Sign (texture design by J. Carver).",
@ -55,6 +56,6 @@
},
"promos": {
"1.12.2-recommended": "1.0.11",
"1.12.2-latest": "1.0.11"
"1.12.2-latest": "1.0.12-b1"
}
}

View file

@ -10,7 +10,11 @@ Mod sources for Minecraft version 1.12.2.
----
## Version history
~ v1.0.12-b1 [M] Window submodels stripped (issue #19).
- v1.0.12-b1 [A] Mineal Smelter non-experimental now.
[M] Window submodels stripped (reopened issue #19, thx overchoice).
[M] Opaque full block light opacity fixed (issue #50, thx Illomiurge).
[M] Factory Dropper: Added pulse/continuous mode in GUI (issue #51,
thx Aristine for the CR).
-------------------------------------------------------------------
- v1.0.11 [R] Release based on v1.0.11-b3. Release-to-release changes:
@ -28,7 +32,7 @@ Mod sources for Minecraft version 1.12.2.
- v1.0.11-b1 [M] Lang update ru-ru (Shellyoung, PR #45).
[F] Fixed bounding box of the Steel Table.
[M] Steel Floor Frating: Items fall through.
[M] Steel Floor Grating: Items fall through.
-------------------------------------------------------------------
- v1.0.10 [R] Release based on v1.0.10-b2. Release-to-release changes:

View file

@ -10,11 +10,11 @@
* Note: Straight forward definition of different blocks/entities
* to make recipes, models and texture definitions easier.
*/
package wile.engineersdecor.blocks;
package wile.engineersdecor;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.ModAuxiliaries;
import wile.engineersdecor.detail.ModConfig;
import wile.engineersdecor.detail.*;
import wile.engineersdecor.blocks.*;
import wile.engineersdecor.items.*;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
@ -35,7 +35,7 @@ import java.util.Collections;
import javax.annotation.Nonnull;
@SuppressWarnings("unused")
public class ModBlocks
public class ModContent
{
//--------------------------------------------------------------------------------------------------------------------
//-- Blocks
@ -73,6 +73,8 @@ public class ModBlocks
public static final BlockDecorGlassBlock PANZERGLASS_BLOCK = new BlockDecorGlassBlock("panzerglass_block", 0, Material.GLASS, 1f, 2000f, SoundType.GLASS);
public static final BlockDecorSlab PANZERGLASS_SLAB = new BlockDecorSlab("panzerglass_slab", BlockDecor.CFG_TRANSLUCENT, Material.GLASS, 1f, 2000f, SoundType.GLASS);
public static final BlockDecorFull TREATED_WOOD_FLOOR = new BlockDecorFull("treated_wood_floor", 0, Material.WOOD, 0.5f, 10f, SoundType.WOOD);
//--------------------------------------------------------------------------------------------------------------------
public static final BlockDecorCraftingTable TREATED_WOOD_CRAFTING_TABLE = new BlockDecorCraftingTable(
@ -118,6 +120,20 @@ public class ModBlocks
ModAuxiliaries.getPixeledAABB(1.1,0,1.1, 14.9,16,14.9)
);
public static final BlockDecorSolarPanel SMALL_SOLAR_PANEL = new BlockDecorSolarPanel(
"small_solar_panel",
BlockDecor.CFG_LOOK_PLACEMENT,
Material.IRON, 1f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,11.5,16)
);
public static final BlockDecorTreeCutter SMALL_TREE_CUTTER = new BlockDecorTreeCutter(
"small_tree_cutter",
BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK,
Material.IRON, 1f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(0,0,0, 16,8,16)
);
//--------------------------------------------------------------------------------------------------------------------
public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = new BlockDecorPipeValve(
@ -408,8 +424,16 @@ public class ModBlocks
BlockDecorMineralSmelter.BTileEntity.class, "te_small_mineral_smelter"
);
private static final TileEntityRegistrationData SMALL_SOLAR_PANEL_TEI = new TileEntityRegistrationData(
BlockDecorSolarPanel.BTileEntity.class, "te_small_solar_panel"
);
private static final TileEntityRegistrationData SMALL_TREE_CUTTER_TEI = new TileEntityRegistrationData(
BlockDecorTreeCutter.BTileEntity.class, "te_small_tree_cutter"
);
//--------------------------------------------------------------------------------------------------------------------
//-- Registration list
//-- Block registration list
//--------------------------------------------------------------------------------------------------------------------
private static final Object content[] = {
@ -420,6 +444,7 @@ public class ModBlocks
SMALL_WASTE_INCINERATOR, WASTE_INCINERATOR_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,
CLINKER_BRICK_BLOCK,
CLINKER_BRICK_SLAB,
CLINKER_BRICK_STAIRS,
@ -467,11 +492,47 @@ public class ModBlocks
};
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,
PANZERGLASS_SLAB, // @todo: check if another class is needed due to is_side_visible
SMALL_SOLAR_PANEL,SMALL_SOLAR_PANEL_TEI, // @todo: check power tuning <= Peltier generator
TREATED_WOOD_FLOOR, // @todo: check if textures need improvement
SMALL_TREE_CUTTER,SMALL_TREE_CUTTER_TEI, // @todo: test
};
//--------------------------------------------------------------------------------------------------------------------
//-- Items
//--------------------------------------------------------------------------------------------------------------------
private static final Item[] modItems = {
};
private static final ArrayList<Item> registeredItems = new ArrayList<>();
@Nonnull
public static List<Item> getRegisteredItems()
{ return Collections.unmodifiableList(registeredItems); }
public static final void registerItems(RegistryEvent.Register<Item> event)
{
// Config based registry selection
int num_registrations_skipped = 0;
ArrayList<Item> allItems = new ArrayList<>();
Collections.addAll(allItems, modItems);
final boolean woor = ModConfig.isWithoutOptOutRegistration();
for(Item e:allItems) {
if((!woor) || (!ModConfig.isOptedOut(e))) {
registeredItems.add(e);
} else {
++num_registrations_skipped;
}
}
for(Item e:registeredItems) event.getRegistry().register(e);
ModEngineersDecor.logger.info("Registered " + Integer.toString(registeredItems.size()) + " items.");
if(num_registrations_skipped > 0) {
ModEngineersDecor.logger.info("Skipped registration of " + num_registrations_skipped + " items.");
}
}
//--------------------------------------------------------------------------------------------------------------------
//-- Init
//--------------------------------------------------------------------------------------------------------------------
@ -531,6 +592,9 @@ public class ModBlocks
for(Block e:registeredBlocks) {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(e), 0, new ModelResourceLocation(e.getRegistryName(), "inventory"));
}
for(Item e:registeredItems) {
if(e instanceof ItemDecor) ((ItemDecor)e).initModel();
}
}
// Invoked from CommonProxy.registerItems()

View file

@ -10,7 +10,6 @@ package wile.engineersdecor;
import wile.engineersdecor.detail.*;
import wile.engineersdecor.blocks.*;
import wile.engineersdecor.items.*;
import net.minecraft.world.World;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.client.multiplayer.WorldClient;
@ -124,11 +123,11 @@ public class ModEngineersDecor
{
@SubscribeEvent
public static void registerBlocks(final RegistryEvent.Register<Block> event)
{ ModBlocks.registerBlocks(event); }
{ ModContent.registerBlocks(event); }
@SubscribeEvent
public static void registerItems(final RegistryEvent.Register<Item> event)
{ ModBlocks.registerItemBlocks(event); ModItems.registerItems(event); }
{ ModContent.registerItemBlocks(event); ModContent.registerItems(event); }
@SubscribeEvent
public static void registerRecipes(RegistryEvent.Register<IRecipe> event)
@ -137,14 +136,14 @@ public class ModEngineersDecor
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void registerModels(final ModelRegistryEvent event)
{ ModBlocks.initModels(); ModItems.initModels(); }
{ ModContent.initModels(); }
}
public static final CreativeTabs CREATIVE_TAB_ENGINEERSDECOR = (new CreativeTabs("tabengineersdecor") {
@Override
@SideOnly(Side.CLIENT)
public @Nonnull ItemStack createIcon()
{ return new ItemStack(ModBlocks.SIGN_MODLOGO); }
{ return new ItemStack(ModContent.SIGN_MODLOGO); }
});
//--------------------------------------------------------------------------------------------------------------------

View file

@ -37,6 +37,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
public class BlockDecor extends Block
{
@ -77,9 +78,8 @@ public class BlockDecor extends Block
setHardness((hardness > 0) ? hardness : 5.0f);
setResistance((resistance > 0) ? resistance : 10.0f);
setSoundType((sound==null) ? SoundType.STONE : sound);
setLightOpacity(0);
// @todo double check that instance variable
// not sure here ... if((config & CFG_TRANSLUCENT) != 0) this.translucent = true;
if(((config & (CFG_CUTOUT|CFG_TRANSLUCENT))!=0)) setLightOpacity(0);
if((config & CFG_TRANSLUCENT) != 0) this.translucent = true;
this.config = config;
this.aabb = boundingboxes;
}
@ -192,5 +192,4 @@ public class BlockDecor extends Block
@SuppressWarnings("deprecation")
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos)
{}
}

View file

@ -248,7 +248,7 @@ public class BlockDecorDropper extends BlockDecorDirected
Networking.PacketTileNotify.sendToServer(te, nbt);
} else if(isPointInRegion(162, 66, 7, 9, mouseX, mouseY)) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("manual_trigger", 1);
nbt.setInteger("drop_logic", container.fields_[5] ^ BTileEntity.DROPLOGIC_CONTINUOUS);
Networking.PacketTileNotify.sendToServer(te, nbt);
} else if(isPointInRegion(132, 66, 9, 9, mouseX, mouseY)) {
NBTTagCompound nbt = new NBTTagCompound();
@ -322,8 +322,10 @@ public class BlockDecorDropper extends BlockDecorDirected
{
int filter_gate_offset = ((container.fields_[5] & BTileEntity.DROPLOGIC_FILTER_ANDGATE) != 0) ? 11 : 0;
int extern_gate_offset = ((container.fields_[5] & BTileEntity.DROPLOGIC_EXTERN_ANDGATE) != 0) ? 11 : 0;
int pulse_mode_offset = ((container.fields_[5] & BTileEntity.DROPLOGIC_CONTINUOUS ) != 0) ? 10 : 0;
drawTexturedModalRect(x0+132, y0+66, 179+filter_gate_offset, 66, 9, 9);
drawTexturedModalRect(x0+148, y0+66, 179+extern_gate_offset, 66, 9, 9);
drawTexturedModalRect(x0+162, y0+66, 200+pulse_mode_offset, 66, 9, 9);
}
// drop timer running indicator
{
@ -456,10 +458,11 @@ public class BlockDecorDropper extends BlockDecorDirected
public static final int MAX_DROP_COUNT = 32;
public static final int DROP_PERIOD_OFFSET = 10;
///
public static final int DROPLOGIC_FILTER_ANDGATE = 0x1;
public static final int DROPLOGIC_EXTERN_ANDGATE = 0x2;
public static final int DROPLOGIC_SILENT_DROP = 0x4;
public static final int DROPLOGIC_SILENT_OPEN = 0x8;
public static final int DROPLOGIC_FILTER_ANDGATE = 0x01;
public static final int DROPLOGIC_EXTERN_ANDGATE = 0x02;
public static final int DROPLOGIC_SILENT_DROP = 0x04;
public static final int DROPLOGIC_SILENT_OPEN = 0x08;
public static final int DROPLOGIC_CONTINUOUS = 0x10;
///
private int filter_matches_[] = new int[CTRL_SLOTS_SIZE];
private int open_timer_ = 0;
@ -799,8 +802,10 @@ public class BlockDecorDropper extends BlockDecorDirected
if(--tick_timer_ > 0) return;
tick_timer_ = TICK_INTERVAL;
boolean dirty = block_power_updated_;
boolean redstone_trigger = (block_power_signal_ && block_power_updated_);
final boolean continuous_mode = (drop_logic_ & DROPLOGIC_CONTINUOUS)!=0;
boolean redstone_trigger = (block_power_signal_ && ((block_power_updated_) || (continuous_mode)));
boolean filter_trigger;
boolean filter_defined = false;
boolean trigger;
// Trigger logic
{
@ -808,9 +813,9 @@ public class BlockDecorDropper extends BlockDecorDirected
for(int i=INPUT_SLOTS_FIRST; i<(INPUT_SLOTS_FIRST+INPUT_SLOTS_SIZE); ++i) {
if(stacks_.get(i).getCount() >= drop_count_) { droppable_slot_found = true; break; }
}
int filter_nset = 0;
// From filters / inventory checks
{
int filter_nset = 0;
int last_filter_matches_[] = filter_matches_.clone();
boolean slot_assigned = false;
for(int ci=0; ci<CTRL_SLOTS_SIZE; ++ci) {
@ -836,12 +841,13 @@ public class BlockDecorDropper extends BlockDecorDirected
if(filter_matches_[i] > 1) ++nmatched;
if(filter_matches_[i] != last_filter_matches_[i]) dirty = true;
}
filter_defined = (filter_nset > 0);
filter_trigger = ((filter_nset > 0) && (nmatched > 0));
if(((drop_logic_ & DROPLOGIC_FILTER_ANDGATE) != 0) && (nmatched != filter_nset)) filter_trigger = false;
}
// gates
{
if(filter_nset > 0) {
if(filter_defined) {
trigger = ((drop_logic_ & DROPLOGIC_EXTERN_ANDGATE) != 0) ? (filter_trigger && redstone_trigger) : (filter_trigger || redstone_trigger);
} else {
trigger = redstone_trigger;

View file

@ -54,4 +54,8 @@ public class BlockDecorFull extends BlockDecor
public boolean isNormalCube(IBlockState state)
{ return true; }
@Override
public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos)
{ return (int)((config & CFG_LIGHT_VALUE_MASK) >> CFG_LIGHT_VALUE_SHIFT); }
}

View file

@ -15,6 +15,7 @@ import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.util.EnumHand;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import wile.engineersdecor.ModContent;
import wile.engineersdecor.detail.ModAuxiliaries;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.material.Material;
@ -108,9 +109,9 @@ public class BlockDecorHorizontalSupport extends BlockDecor
final EnumFacing dfacing = dstate.getValue(BlockDecorStraightPole.FACING);
final BlockDecorStraightPole pole = (BlockDecorStraightPole)dstate.getBlock();
if((dfacing.getAxis() == EnumFacing.Axis.Y)) {
if((pole==ModBlocks.THICK_STEEL_POLE) || ((pole==ModBlocks.THICK_STEEL_POLE_HEAD) && (dfacing==EnumFacing.UP))) {
if((pole==ModContent.THICK_STEEL_POLE) || ((pole==ModContent.THICK_STEEL_POLE_HEAD) && (dfacing==EnumFacing.UP))) {
down_connector = 2;
} else if((pole==ModBlocks.THIN_STEEL_POLE) || ((pole==ModBlocks.THIN_STEEL_POLE_HEAD) && (dfacing==EnumFacing.UP))) {
} else if((pole==ModContent.THIN_STEEL_POLE) || ((pole==ModContent.THIN_STEEL_POLE_HEAD) && (dfacing==EnumFacing.UP))) {
down_connector = 1;
}
}

View file

@ -0,0 +1,177 @@
/*
* @file BlockDecorDirected.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Smaller (cutout) block with a defined facing.
*/
package wile.engineersdecor.blocks;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
import wile.engineersdecor.ModEngineersDecor;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.BlockFaceShape;
import net.minecraft.block.state.IBlockState;
import net.minecraft.block.SoundType;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ITickable;
import net.minecraft.world.World;
import net.minecraft.world.IBlockAccess;
import net.minecraft.util.EnumHand;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class BlockDecorSolarPanel extends BlockDecor
{
public static final PropertyInteger EXPOSITION = PropertyInteger.create("exposition", 0, 4);
public BlockDecorSolarPanel(@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); }
@Override
public boolean isOpaqueCube(IBlockState state)
{ return false; }
@Override
public boolean isFullCube(IBlockState state)
{ return false; }
@Override
public boolean isNormalCube(IBlockState state)
{ return false; }
@Override
public boolean canCreatureSpawn(IBlockState state, IBlockAccess world, BlockPos pos, net.minecraft.entity.EntityLiving.SpawnPlacementType type)
{ return false; }
@Override
public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos)
{ return 0; }
@Override
public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face)
{ return BlockFaceShape.UNDEFINED; }
@Override
public IBlockState getStateFromMeta(int meta)
{ return this.getDefaultState().withProperty(EXPOSITION, (meta & 0x7)); }
@Override
public int getMetaFromState(IBlockState state)
{ return state.getValue(EXPOSITION); }
@Override
protected BlockStateContainer createBlockState()
{ return new BlockStateContainer(this, EXPOSITION); }
@Override
public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side)
{ return super.canPlaceBlockOnSide(world, pos, side); }
@Override
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand)
{ return getDefaultState().withProperty(EXPOSITION, 0); }
@Override
public boolean hasTileEntity(IBlockState state)
{ return true; }
@Override
@Nullable
public TileEntity createTileEntity(World world, IBlockState state)
{ return new BlockDecorSolarPanel.BTileEntity(); }
//--------------------------------------------------------------------------------------------------------------------
// Tile entity
//--------------------------------------------------------------------------------------------------------------------
public static class BTileEntity extends TileEntity implements ITickable
{
public static final int DEFAULT_PEAK_POWER = 45;
public static final int TICK_INTERVAL = 8;
public static final int ACCUMULATION_INTERVAL = 4;
private static final EnumFacing transfer_directions_[] = {EnumFacing.DOWN, EnumFacing.EAST, EnumFacing.SOUTH, EnumFacing.WEST, EnumFacing.NORTH };
private static int peak_power_per_tick_ = DEFAULT_PEAK_POWER;
private static int max_power_storage_ = 10000;
private int tick_timer_ = 0;
private int recalc_timer_ = 0;
private int accumulated_power_ = 0;
public static void on_config(int peak_power_per_tick)
{
peak_power_per_tick_ = peak_power_per_tick;
ModEngineersDecor.logger.info("Config small solar panel: Peak production:" + peak_power_per_tick_ + "/tick");
}
//------------------------------------------------------------------------------------------------------------------
public BTileEntity()
{}
public void readnbt(NBTTagCompound nbt, boolean update_packet)
{ accumulated_power_ = nbt.getInteger("energy"); }
protected void writenbt(NBTTagCompound nbt, boolean update_packet)
{ nbt.setInteger("energy", accumulated_power_); }
// TileEntity ------------------------------------------------------------------------------
@Override
public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns)
{ return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorSolarPanel)); }
@Override
public void readFromNBT(NBTTagCompound nbt)
{ super.readFromNBT(nbt); readnbt(nbt, false); }
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbt)
{ super.writeToNBT(nbt); writenbt(nbt, false); return nbt; }
@Override
public void update()
{
if((world.isRemote) || (--tick_timer_ > 0)) return;
tick_timer_ = TICK_INTERVAL;
if(!world.canSeeSky(pos)) { tick_timer_ = TICK_INTERVAL * 5; return; }
if(accumulated_power_ > 0) {
for(int i=0; (i<transfer_directions_.length) && (accumulated_power_>0); ++i) {
final EnumFacing f = transfer_directions_[i];
TileEntity te = world.getTileEntity(pos.offset(f));
if((te==null) || (!(te.hasCapability(CapabilityEnergy.ENERGY, f.getOpposite())))) continue;
IEnergyStorage es = te.getCapability(CapabilityEnergy.ENERGY, f.getOpposite());
if(!es.canReceive()) continue;
accumulated_power_ = MathHelper.clamp(accumulated_power_-es.receiveEnergy(accumulated_power_, false),0, accumulated_power_);
}
}
if(--recalc_timer_ > 0) return;
recalc_timer_ = ACCUMULATION_INTERVAL + ((int)(Math.random()+.5));
IBlockState state = world.getBlockState(pos);
int theta = ((((int)(world.getCelestialAngleRadians(1f) * (180.0/Math.PI)))+90) % 360);
int e = 2;
if(theta > 340) e = 2;
else if(theta < 45) e = 0;
else if(theta < 80) e = 1;
else if(theta < 100) e = 2;
else if(theta < 135) e = 3;
else if(theta < 190) e = 4;
IBlockState nstate = state.withProperty(EXPOSITION, e);
if(nstate != state) world.setBlockState(pos, nstate, 1|2);
double rf = Math.abs(1.0-(((double)Math.abs(MathHelper.clamp(theta, 0, 180)-90))/90));
rf = Math.sqrt(rf) * world.getSunBrightnessFactor(1f) * ((TICK_INTERVAL*ACCUMULATION_INTERVAL)+2) * peak_power_per_tick_;
accumulated_power_ = Math.min(accumulated_power_+(int)rf, max_power_storage_);
}
}
}

View file

@ -0,0 +1,209 @@
/*
* @file BlockFurnace.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* ED Lab furnace.
*/
package wile.engineersdecor.blocks;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.TreeCutting;
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.world.World;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.tileentity.TileEntity;
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.Random;
public class BlockDecorTreeCutter extends BlockDecorDirectedHorizontal
{
public static final PropertyBool ACTIVE = PropertyBool.create("active");
public BlockDecorTreeCutter(@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 & 0x3)).withProperty(ACTIVE, (meta & 0x4)!=0); }
@Override
public int getMetaFromState(IBlockState state)
{ return (state.getValue(FACING).getHorizontalIndex() & 0x3) | (state.getValue(ACTIVE) ? 4 : 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 BlockDecorTreeCutter.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;
}
}
//--------------------------------------------------------------------------------------------------------------------
// 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 = 6;
public static final int DEFAULT_BOOST_ENERGY = 64;
public static final int DEFAULT_CUTTING_TIME_NEEDED = 20 * 60; // 60 secs, so that people don't come to the bright idea to carry one with them.
private static int boost_energy_consumption = DEFAULT_BOOST_ENERGY;
private static int cutting_time_needed = DEFAULT_CUTTING_TIME_NEEDED;
private int tick_timer_;
private int proc_time_elapsed_; // small, not saved in nbt.
private int boost_energy_; // small, not saved in nbt.
public static void on_config(int boost_energy_per_tick)
{
boost_energy_consumption = TICK_INTERVAL * MathHelper.clamp(boost_energy_per_tick, 16, 512);
ModEngineersDecor.logger.info("Config tree cutter: Boost energy consumption:" + boost_energy_consumption + "rf/t");
}
public BTileEntity()
{}
// TileEntity ------------------------------------------------------------------------------
@Override
public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns)
{ return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorTreeCutter)); }
// 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)
{ // only speedup support, no buffering, not in nbt -> no markdirty
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 ------------------------------------------------------------------------------------
@Override
public void update()
{
if(--tick_timer_ > 0) return;
if(world.isRemote) {
if(!world.getBlockState(pos).getValue(ACTIVE)) {
tick_timer_ = TICK_INTERVAL;
} else {
tick_timer_ = 1;
world.playSound(pos.getX(), pos.getY(), pos.getZ(), SoundEvents.BLOCK_WOOD_HIT, SoundCategory.BLOCKS, 0.1f, 1.0f, false);
}
} else {
tick_timer_ = TICK_INTERVAL;
final IBlockState device_state = world.getBlockState(pos);
final BlockPos tree_pos = pos.offset(device_state.getValue(FACING));
final IBlockState tree_state = world.getBlockState(tree_pos);
if(!TreeCutting.canChop(tree_state) || (world.isBlockPowered(pos))) {
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;
if(boost_energy_ >= boost_energy_consumption) { boost_energy_ = 0; proc_time_elapsed_ += TICK_INTERVAL*BOOST_FACTOR; }
boolean active = true;
if(proc_time_elapsed_ >= cutting_time_needed) {
proc_time_elapsed_ = 0;
TreeCutting.chopTree(world, tree_state, tree_pos, 512, false);
world.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.BLOCK_WOOD_BREAK, SoundCategory.BLOCKS, 1.0f, 1.0f);
active = false;
}
if(device_state.getValue(ACTIVE) != active) {
world.setBlockState(pos, device_state.withProperty(ACTIVE, active), 1|2);
}
}
}
}
}

View file

@ -0,0 +1,101 @@
/*
* @file BlockCategories.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Oredict based block category cache.
*/
package wile.engineersdecor.detail;
import wile.engineersdecor.ModEngineersDecor;
import net.minecraft.block.*;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class BlockCategories
{
private static Set<Block> logs_ = new HashSet<Block>();
private static Set<Block> leaves_ = new HashSet<Block>();
public static final Set<Block> logs()
{ return logs_; } // wrap in case immutable needed one time.
public static final Set<Block> leaves()
{ return leaves_; }
public static boolean isLog(IBlockState state)
{
final Block block = state.getBlock();
return (block instanceof BlockLog) || (block instanceof BlockNewLog) || (logs().contains(block));
}
public static boolean isLeaves(IBlockState state)
{
if(state.getMaterial()==Material.LEAVES) return true;
final Block block = state.getBlock();
return (block instanceof BlockLeaves) || (leaves().contains(block));
}
public static final boolean isSameLeaves(IBlockState a, IBlockState b)
{ return (a.getBlock() == b.getBlock()); }
public static final boolean isSameLog(IBlockState a, IBlockState b)
{
// very strange ...
if(a.getBlock()!=b.getBlock()) {
return false;
} else if(a.getBlock() instanceof BlockNewLog) {
return a.getValue(BlockNewLog.VARIANT) == b.getValue(BlockNewLog.VARIANT);
} else if(a.getBlock() instanceof BlockOldLog) {
return a.getValue(BlockOldLog.VARIANT) == b.getValue(BlockOldLog.VARIANT);
} else {
// Uagh, that hurts the heart of performance ...
final IProperty<?> prop = a.getPropertyKeys().stream().filter( (IProperty<?> p) -> (p.getName().contains("variant") || p.getName().contains("type"))).findFirst().orElse(null);
if(prop==null) return false;
return a.getValue(prop).equals(b.getValue(prop));
}
}
public static final void reload()
{
{
HashSet<Block> logs = new HashSet<Block>();
for(final String ore_name : OreDictionary.getOreNames()) {
if(!ore_name.startsWith("logWood")) continue;
final List<ItemStack> stacks = OreDictionary.getOres(ore_name, false);
for(ItemStack stack : stacks) {
final Item item = stack.getItem();
if(!(item instanceof ItemBlock)) continue;
logs.add(((ItemBlock)item).getBlock());
}
}
logs_ = logs;
ModEngineersDecor.logger.info("Found "+logs.size()+" types of 'choppable' log.");
}
{
HashSet<Block> leaves = new HashSet<Block>();
for(final String ore_name : OreDictionary.getOreNames()) {
if(!ore_name.startsWith("treeLeaves")) continue;
final List<ItemStack> stacks = OreDictionary.getOres(ore_name, false);
for(ItemStack stack : stacks) {
final Item item = stack.getItem();
if(!(item instanceof ItemBlock)) continue;
leaves.add(((ItemBlock)item).getBlock());
}
}
leaves_ = leaves;
ModEngineersDecor.logger.info("Found "+leaves.size()+" types of leaves.");
}
}
}

View file

@ -9,6 +9,7 @@
*/
package wile.engineersdecor.detail;
import wile.engineersdecor.ModContent;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.blocks.*;
import net.minecraftforge.common.config.Config;
@ -320,6 +321,17 @@ public class ModConfig
@Config.Name("E-furnace: Power consumption")
@Config.RangeInt(min=10, max=256)
public int e_furnace_power_consumption = BlockDecorFurnaceElectrical.BTileEntity.DEFAULT_ENERGY_CONSUMPTION;
@Config.Comment({
"Defines the peak power production (at noon) of the Small Solar Panel. " +
"Note that the agerage power is much less, as no power is produced at all during the night, " +
"and the power curve is nonlinear rising/falling during the day. Bad weather conditions also " +
"decrease the production. " +
"The config value can be changed on-the-fly for tuning."
})
@Config.Name("Solar panel: Peak power")
@Config.RangeInt(min=5, max=128)
public int solar_panel_peak_power = BlockDecorSolarPanel.BTileEntity.DEFAULT_PEAK_POWER;
}
@SuppressWarnings("unused")
@ -340,7 +352,7 @@ public class ModConfig
@SuppressWarnings("unused")
public static final void onPostInit(FMLPostInitializationEvent event)
{ for(Block e:ModBlocks.getRegisteredBlocks()) ModConfig.isOptedOut(e, true); }
{ for(Block e: ModContent.getRegisteredBlocks()) ModConfig.isOptedOut(e, true); }
private static final ArrayList<String> includes_ = new ArrayList<String>();
private static final ArrayList<String> excludes_ = new ArrayList<String>();
@ -360,7 +372,7 @@ public class ModConfig
public static final boolean isOptedOut(final @Nullable Block block, boolean with_log_details)
{
if((block == null) || (optout==null)) return true;
if(block == ModBlocks.SIGN_MODLOGO) return true;
if(block == ModContent.SIGN_MODLOGO) return true;
if((!zmisc.with_experimental) && (block instanceof ModAuxiliaries.IExperimentalFeature)) return true;
final String rn = block.getRegistryName().getPath();
// Force-include/exclude pattern matching
@ -432,6 +444,7 @@ public class ModConfig
BlockDecorCraftingTable.on_config(optout.without_crafting_table_history, false, tweaks.with_crafting_quickmove_buttons);
BlockDecorPipeValve.on_config(tweaks.pipevalve_max_flowrate, tweaks.pipevalve_redstone_slope);
BlockDecorFurnaceElectrical.BTileEntity.on_config(tweaks.e_furnace_speed_percent, tweaks.e_furnace_power_consumption);
BlockDecorSolarPanel.BTileEntity.on_config(tweaks.solar_panel_peak_power);
{
optout.includes = optout.includes.toLowerCase().replaceAll(ModEngineersDecor.MODID+":", "").replaceAll("[^*_,a-z0-9]", "");
if(!optout.includes.isEmpty()) ModEngineersDecor.logger.info("Pattern includes: '" + optout.includes + "'");

View file

@ -0,0 +1,168 @@
/*
* @file TreeCutting.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Simple tree cutting algorithm.
*/
package wile.engineersdecor.detail;
import com.google.common.collect.ImmutableList;
import net.minecraft.block.Block;
import net.minecraft.block.BlockVine;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3i;
import net.minecraft.world.World;
import java.util.*;
public class TreeCutting
{
private static final List<Vec3i> hoffsets = ImmutableList.of(
new Vec3i( 1,0, 0), new Vec3i( 1,0, 1), new Vec3i( 0,0, 1),
new Vec3i(-1,0, 1), new Vec3i(-1,0, 0), new Vec3i(-1,0,-1),
new Vec3i( 0,0,-1), new Vec3i( 1,0,-1)
);
private static List<BlockPos> findBlocksAround(final World world, final BlockPos centerPos, final IBlockState leaf_type_state, final Set<BlockPos> checked, int recursion_left)
{
ArrayList<BlockPos> to_decay = new ArrayList<BlockPos>();
for(int y=-1; y<=1; ++y) {
final BlockPos layer = centerPos.add(0,y,0);
for(Vec3i v:hoffsets) {
BlockPos pos = layer.add(v);
if((!checked.contains(pos)) && BlockCategories.isSameLeaves(leaf_type_state, world.getBlockState(pos))) {
checked.add(pos);
to_decay.add(pos);
if(recursion_left > 0) {
to_decay.addAll(findBlocksAround(world, pos, leaf_type_state, checked, recursion_left-1));
}
}
}
}
return to_decay;
}
public static boolean canChop(IBlockState state)
{ return BlockCategories.isLog(state); }
/**
* Chops a tree, returns the damage that the cutting tool shall take
*/
public static int chopTree(World world, IBlockState broken_state, BlockPos startPos, int max_blocks_to_break, boolean without_target_block)
{
if(!BlockCategories.isLog(broken_state)) return 0;
final long ymin = startPos.getY();
final long max_leaf_distance = 6;
Set<BlockPos> checked = new HashSet<BlockPos>();
ArrayList<BlockPos> to_break = new ArrayList<BlockPos>();
ArrayList<BlockPos> to_decay = new ArrayList<BlockPos>();
checked.add(startPos);
// Initial simple layer-up search of same logs. This forms the base corpus, and only leaves and
// leaf-enclosed logs attached to this corpus may be broken/decayed.
{
LinkedList<BlockPos> queue = new LinkedList<BlockPos>();
LinkedList<BlockPos> upqueue = new LinkedList<BlockPos>();
queue.add(startPos);
int cutlevel = 0;
int steps_left = 64;
while(!queue.isEmpty() && (--steps_left >= 0)) {
final BlockPos pos = queue.removeFirst();
// Vertical search
final BlockPos uppos = pos.up();
final IBlockState upstate = world.getBlockState(uppos);
if(!checked.contains(uppos)) {
checked.add(uppos);
if(BlockCategories.isSameLog(upstate, broken_state)) {
// Up is log
upqueue.add(uppos);
to_break.add(uppos);
steps_left = 64;
} else {
boolean isleaf = BlockCategories.isLeaves(upstate);
if(isleaf || world.isAirBlock(uppos) || (upstate.getBlock() instanceof BlockVine)) {
if(isleaf) to_decay.add(uppos);
// Up is air, check adjacent for diagonal up (e.g. Accacia)
for(Vec3i v:hoffsets) {
final BlockPos p = uppos.add(v);
if(checked.contains(p)) continue;
checked.add(p);
final IBlockState st = world.getBlockState(p);
final Block bl = st.getBlock();
if(BlockCategories.isSameLog(st, broken_state)) {
queue.add(p);
to_break.add(p);
} else if(BlockCategories.isLeaves(st)) {
to_decay.add(p);
}
}
}
}
}
// Lateral search
for(Vec3i v:hoffsets) {
final BlockPos p = pos.add(v);
if(checked.contains(p)) continue;
checked.add(p);
if(p.distanceSq(new BlockPos(startPos.getX(), p.getY(), startPos.getZ())) > (3+cutlevel*cutlevel)) continue;
final IBlockState st = world.getBlockState(p);
final Block bl = st.getBlock();
if(BlockCategories.isSameLog(st, broken_state)) {
queue.add(p);
to_break.add(p);
} else if(BlockCategories.isLeaves(st)) {
to_decay.add(p);
}
}
if(queue.isEmpty() && (!upqueue.isEmpty())) {
queue = upqueue;
upqueue = new LinkedList<BlockPos>();
++cutlevel;
}
}
}
{
// Determine lose logs between the leafs
for(BlockPos pos:to_decay) {
int dist = 1;
to_break.addAll(findBlocksAround(world, pos, broken_state, checked, dist));
}
}
if(!to_decay.isEmpty()) {
final IBlockState leaf_type_state = world.getBlockState(to_decay.get(0));
final ArrayList<BlockPos> leafs = to_decay;
to_decay = new ArrayList<BlockPos>();
for(BlockPos pos:leafs) {
int dist = 2;
to_decay.add(pos);
to_decay.addAll(findBlocksAround(world, pos, leaf_type_state, checked, dist));
}
}
if(without_target_block) {
checked.remove(startPos);
} else {
to_break.add(startPos);
}
int num_broken = 0;
Collections.reverse(to_break);
for(BlockPos pos:to_break) {
if(++num_broken > max_blocks_to_break) break;
IBlockState state = world.getBlockState(pos);
world.setBlockToAir(pos);
state.getBlock().dropBlockAsItem(world, pos, state, 0);
}
for(BlockPos pos:to_decay) {
if(++num_broken > max_blocks_to_break) break;
IBlockState state = world.getBlockState(pos);
world.setBlockToAir(pos);
state.getBlock().dropBlockAsItem(world, pos, state, 0);
}
{
// And now the bill.
return MathHelper.clamp(((to_break.size()*6/5)+(to_decay.size()/10)-1), 1, 65535);
}
}
}

View file

@ -9,8 +9,8 @@
package wile.engineersdecor.eapi.jei;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.blocks.BlockDecorCraftingTable;
import wile.engineersdecor.blocks.ModBlocks;
import wile.engineersdecor.ModContent;
import wile.engineersdecor.blocks.*;
import wile.engineersdecor.detail.ModConfig;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
@ -25,7 +25,7 @@ public class JEIPlugin implements mezz.jei.api.IModPlugin
{
// Block/item hiding
try {
for(Block e:ModBlocks.getRegisteredBlocks()) {
for(Block e:ModContent.getRegisteredBlocks()) {
if(ModConfig.isOptedOut(e)) {
ItemStack stack = new ItemStack(Item.getItemFromBlock(e));
if(stack != null) {

View file

@ -1,63 +0,0 @@
/*
* @file ModItems.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2018 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Definition and initialisation of items of this module.
*/
package wile.engineersdecor.items;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.ModConfig;
import net.minecraft.item.Item;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import javax.annotation.Nonnull;
@SuppressWarnings("unused")
public class ModItems
{
private static final Item[] modItems = {
};
private static final ArrayList<Item> registeredItems = new ArrayList<>();
@Nonnull
public static List<Item> getRegisteredItems()
{ return Collections.unmodifiableList(registeredItems); }
public static final void registerItems(RegistryEvent.Register<Item> event)
{
// Config based registry selection
int num_registrations_skipped = 0;
ArrayList<Item> allItems = new ArrayList<>();
Collections.addAll(allItems, modItems);
final boolean woor = ModConfig.isWithoutOptOutRegistration();
for(Item e:allItems) {
if((!woor) || (!ModConfig.isOptedOut(e))) {
registeredItems.add(e);
} else {
++num_registrations_skipped;
}
}
for(Item e:registeredItems) event.getRegistry().register(e);
ModEngineersDecor.logger.info("Registered " + Integer.toString(registeredItems.size()) + " items.");
if(num_registrations_skipped > 0) {
ModEngineersDecor.logger.info("Skipped registration of " + num_registrations_skipped + " items.");
}
}
@SideOnly(Side.CLIENT)
public static final void initModels()
{
for(Item e:registeredItems) {
if(e instanceof ItemDecor) ((ItemDecor)e).initModel();
}
}
}

View file

@ -0,0 +1,17 @@
{
"forge_marker": 1,
"defaults": {
"model": "engineersdecor:device/small_solar_panel_model_exp1"
},
"variants": {
"normal": [{}],
"inventory": [{}],
"exposition": {
"0" : { "model": "engineersdecor:device/small_solar_panel_model_exp0" },
"1" : {},
"2" : { "model": "engineersdecor:device/small_solar_panel_model_exp2" },
"3" : { "model": "engineersdecor:device/small_solar_panel_model_exp3" },
"4" : { "model": "engineersdecor:device/small_solar_panel_model_exp4" }
}
}
}

View file

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

View file

@ -0,0 +1,16 @@
{
"forge_marker": 1,
"defaults": {
"model": "engineersdecor:std/decor_full_block_model",
"textures": { "all": "engineersdecor:blocks/furniture/treated_wood_floor_texture_1" }
},
"variants": {
"normal": [
{ "textures":{ "all": "engineersdecor:blocks/furniture/treated_wood_floor_texture_1" }},
{ "textures":{ "all": "engineersdecor:blocks/furniture/treated_wood_floor_texture_2" }},
{ "textures":{ "all": "engineersdecor:blocks/furniture/treated_wood_floor_texture_3" }},
{ "textures":{ "all": "engineersdecor:blocks/furniture/treated_wood_floor_texture_4" }}
],
"inventory": [{}]
}
}

View file

@ -36,6 +36,8 @@ tile.engineersdecor.rebar_concrete_tile_slab.name=Rebar Concrete Tile Slab
tile.engineersdecor.rebar_concrete_tile_slab.help=§6Steel reinforced concrete tile slab.§r Expensive but Creeper-proof like obsidian.
tile.engineersdecor.panzerglass_slab.name=Panzer Glass Slab
tile.engineersdecor.panzerglass_slab.help=§6Reinforced glass slab.§r Expensive, explosion-proof. Dark gray tint, faint structural lines visible.
tile.engineersdecor.treated_wood_floor.name=Treated Wood Floor
tile.engineersdecor.treated_wood_floor.help=§6Decorative floor tiles with texture variations.§r
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.rebar_concrete_wall.name=Rebar Concrete Wall
tile.engineersdecor.rebar_concrete_wall.help=§6Steel reinforced concrete wall.§r Expensive but Creeper-proof like obsidian.
@ -155,6 +157,15 @@ tile.engineersdecor.small_mineral_smelter.help=§6High temperature, high insulat
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.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 \
internal charge pump circuit accumulates and frequently transfers RF. Production \
depends on day time and the weather.
tile.engineersdecor.small_tree_cutter.name=Small Tree Cutter
tile.engineersdecor.small_tree_cutter.help=§6Chops grown trees in front of it.§r\n\
Does not collect the lumbers. Deactivate with a redstone signal. \
Provide RF power to boost the cutting speed.
#-----------------------------------------------------------------------------------------------------------
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

@ -36,6 +36,8 @@ tile.engineersdecor.rebar_concrete_tile_slab.name=Железобетонная
tile.engineersdecor.rebar_concrete_tile_slab.help=§6Бетонная плитка, усиленная сталью.§r Дорогая, но взрывоустойчивая, как обсидиан.
tile.engineersdecor.panzerglass_slab.name=Плита из бронированного стекла
tile.engineersdecor.panzerglass_slab.help=§6Усиленная стеклянная плита.§r Дорогая, взрывоустойчивая. Имеет тёмно-серый оттенок, слегка видны структурные линии.
tile.engineersdecor.treated_wood_floor.name=Treated Wood Floor
#tile.engineersdecor.treated_wood_floor.help=§6Decorative floor tiles with texture variations.§r
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.rebar_concrete_wall.name=Железобетонная стена
tile.engineersdecor.rebar_concrete_wall.help=§6Стальная железобетонная стена.§r Дорогая, но взрывоустойчивая, как обсидиан.
@ -150,6 +152,15 @@ tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace
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.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 \
internal charge pump circuit accumulates and frequently transfers RF. Production \
depends on day time and the weather.
tile.engineersdecor.small_tree_cutter.name=Small Tree Cutter
#tile.engineersdecor.small_tree_cutter.help=§6Chops grown trees in front of it.§r\n\
Does not collect the lumbers. Deactivate with a redstone signal. \
Provide RF power to boost the cutting speed.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.sign_decor.name=Табличка с надписью (Логотип Engineer's decor)
tile.engineersdecor.sign_decor.help=§Это не должно быть крафтовым или видимым в JEI. Используется для творческой вкладки и скриншотов.

View file

@ -36,6 +36,8 @@ tile.engineersdecor.rebar_concrete_tile_slab.name=Rebar Concrete Tile Slab
#tile.engineersdecor.rebar_concrete_tile_slab.help=§6Steel reinforced concrete tile slab.§r Expensive but Creeper-proof like obsidian.
tile.engineersdecor.panzerglass_slab.name=Panzer Glass Slab
#tile.engineersdecor.panzerglass_slab.help=§6Reinforced glass slab.§r Expensive, explosion-proof. Dark gray tint, faint structural lines visible.
tile.engineersdecor.treated_wood_floor.name=Treated Wood Floor
#tile.engineersdecor.treated_wood_floor.help=§6Decorative floor tiles with texture variations.§r
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.rebar_concrete_wall.name=钢筋混凝土墙
tile.engineersdecor.rebar_concrete_wall.help=§6钢筋混凝土墙.§r 昂贵,但像黑曜石一样防苦力怕.
@ -153,6 +155,15 @@ tile.engineersdecor.small_mineral_smelter.name=Small Mineral Melting Furnace
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.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 \
internal charge pump circuit accumulates and frequently transfers RF. Production \
depends on day time and the weather.
tile.engineersdecor.small_tree_cutter.name=Small Tree Cutter
#tile.engineersdecor.small_tree_cutter.help=§6Chops grown trees in front of it.§r\n\
Does not collect the lumbers. Deactivate with a redstone signal. \
Provide RF power to boost the cutting speed.
#-----------------------------------------------------------------------------------------------------------
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

@ -0,0 +1,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:blocks/device/small_solar_panel_side",
"m": "engineersdecor:blocks/device/small_solar_panel_parts",
"particle": "engineersdecor:blocks/device/small_solar_panel_parts",
"tb": "engineersdecor:blocks/device/small_solar_panel_topbottom",
"p": "engineersdecor:blocks/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:blocks/device/small_solar_panel_side",
"m": "engineersdecor:blocks/device/small_solar_panel_parts",
"particle": "engineersdecor:blocks/device/small_solar_panel_parts",
"tb": "engineersdecor:blocks/device/small_solar_panel_topbottom",
"p": "engineersdecor:blocks/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:blocks/device/small_solar_panel_side",
"m": "engineersdecor:blocks/device/small_solar_panel_parts",
"particle": "engineersdecor:blocks/device/small_solar_panel_parts",
"tb": "engineersdecor:blocks/device/small_solar_panel_topbottom",
"p": "engineersdecor:blocks/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:blocks/device/small_solar_panel_side",
"m": "engineersdecor:blocks/device/small_solar_panel_parts",
"particle": "engineersdecor:blocks/device/small_solar_panel_parts",
"tb": "engineersdecor:blocks/device/small_solar_panel_topbottom",
"p": "engineersdecor:blocks/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:blocks/device/small_solar_panel_side",
"m": "engineersdecor:blocks/device/small_solar_panel_parts",
"particle": "engineersdecor:blocks/device/small_solar_panel_parts",
"tb": "engineersdecor:blocks/device/small_solar_panel_topbottom",
"p": "engineersdecor:blocks/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,217 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:blocks/device/tree_cutter_side",
"3": "engineersdecor:blocks/device/tree_cutter_top",
"particle": "engineersdecor:blocks/device/tree_cutter_side",
"b": "engineersdecor:blocks/device/tree_cutter_blade_off",
"top": "engineersdecor:blocks/device/tree_cutter_bottom"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 3, 16],
"faces": {
"north": {"uv": [0, 13, 16, 16], "texture": "#2"},
"east": {"uv": [0, 13, 16, 16], "texture": "#2"},
"south": {"uv": [0, 13, 16, 16], "texture": "#2"},
"west": {"uv": [0, 13, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "texture": "#3"},
"down": {"uv": [0, 0, 16, 16], "texture": "#top"}
}
},
{
"from": [0, 3, 0],
"to": [3, 8, 16],
"faces": {
"north": {"uv": [13, 0, 16, 5], "texture": "#2"},
"east": {"uv": [0, 3, 16, 8], "texture": "#2"},
"south": {"uv": [0, 8, 3, 13], "texture": "#2"},
"west": {"uv": [0, 8, 16, 13], "texture": "#2"},
"up": {"uv": [0, 0, 3, 16], "texture": "#3"},
"down": {"uv": [0, 0, 3, 16], "texture": "#top"}
}
},
{
"from": [3, 3, 13],
"to": [16, 8, 16],
"faces": {
"north": {"uv": [0, 3, 13, 8], "texture": "#2"},
"east": {"uv": [0, 8, 3, 13], "texture": "#2"},
"south": {"uv": [3, 8, 16, 13], "texture": "#2"},
"west": {"uv": [13, 8, 16, 13], "texture": "#b"},
"up": {"uv": [3, 13, 16, 16], "texture": "#3"},
"down": {"uv": [3, 0, 16, 3], "texture": "#top"}
}
},
{
"from": [15, 3, 0],
"to": [16, 6, 13],
"faces": {
"north": {"uv": [0, 10, 1, 13], "texture": "#2"},
"east": {"uv": [3, 10, 16, 13], "texture": "#2"},
"south": {"uv": [15, 10, 16, 13], "texture": "#b"},
"west": {"uv": [0, 0, 13, 3], "texture": "#2"},
"up": {"uv": [15, 0, 16, 13], "texture": "#3"},
"down": {"uv": [15, 3, 16, 16], "texture": "#top"}
}
},
{
"from": [3, 7, 0],
"to": [5, 8, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 13, 5]},
"faces": {
"north": {"uv": [11, 8, 13, 9], "texture": "#2"},
"east": {"uv": [3, 8, 16, 9], "texture": "#2"},
"south": {"uv": [3, 8, 5, 9], "texture": "#b"},
"west": {"uv": [0, 8, 13, 9], "texture": "#b"},
"up": {"uv": [3, 0, 5, 13], "texture": "#3"},
"down": {"uv": [3, 3, 5, 16], "texture": "#b"}
}
},
{
"from": [5, 6, 12],
"to": [16, 8, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [11, 13, 5]},
"faces": {
"north": {"uv": [0, 0, 11, 2], "texture": "#2"},
"east": {"uv": [3, 8, 4, 10], "texture": "#2"},
"south": {"uv": [5, 8, 16, 10], "texture": "#b"},
"west": {"uv": [12, 8, 13, 10], "texture": "#b"},
"up": {"uv": [5, 12, 16, 13], "texture": "#3"},
"down": {"uv": [5, 3, 16, 4], "texture": "#top"}
}
},
{
"from": [5, 4.5, 4],
"to": [13, 5, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [3, 11, 11, 11.5], "texture": "#b"},
"east": {"uv": [4, 11, 12, 11.5], "texture": "#b"},
"south": {"uv": [5, 11, 13, 11.5], "texture": "#b"},
"west": {"uv": [4, 11, 12, 11.5], "texture": "#b"},
"up": {"uv": [5, 4, 13, 12], "texture": "#b"},
"down": {"uv": [5, 4, 13, 12], "texture": "#b"}
}
},
{
"from": [8, 5, 7],
"to": [10, 5.5, 9],
"faces": {
"north": {"uv": [6, 10.5, 8, 11], "texture": "#2"},
"east": {"uv": [7, 10.5, 9, 11], "texture": "#b"},
"south": {"uv": [8, 10.5, 10, 11], "texture": "#b"},
"west": {"uv": [7, 10.5, 9, 11], "texture": "#b"},
"up": {"uv": [8, 7, 10, 9], "texture": "#b"},
"down": {"uv": [8, 7, 10, 9], "texture": "#b"}
}
},
{
"from": [8, 4, 7],
"to": [10, 4.5, 9],
"faces": {
"north": {"uv": [6, 11.5, 8, 12], "texture": "#b"},
"east": {"uv": [7, 11.5, 9, 12], "texture": "#b"},
"south": {"uv": [8, 11.5, 10, 12], "texture": "#b"},
"west": {"uv": [7, 11.5, 9, 12], "texture": "#b"},
"up": {"uv": [8, 7, 10, 9], "texture": "#b"},
"down": {"uv": [8, 7, 10, 9], "texture": "#b"}
}
},
{
"from": [3, 3.5, 7],
"to": [10, 4, 9],
"faces": {
"north": {"uv": [8, 6, 15, 6.5], "texture": "#2"},
"east": {"uv": [7, 12, 9, 12.5], "texture": "#2"},
"south": {"uv": [3, 12, 10, 12.5], "texture": "#2"},
"west": {"uv": [7, 12, 9, 12.5], "texture": "#2"},
"up": {"uv": [3, 7, 10, 9], "texture": "#2"},
"down": {"uv": [3, 7, 10, 9], "texture": "#2"}
}
},
{
"from": [3, 5.5, 7],
"to": [10, 6, 9],
"faces": {
"north": {"uv": [6, 10, 13, 10.5], "texture": "#2"},
"east": {"uv": [7, 10, 9, 10.5], "texture": "#2"},
"south": {"uv": [3, 10, 10, 10.5], "texture": "#2"},
"west": {"uv": [7, 10, 9, 10.5], "texture": "#2"},
"up": {"uv": [9, 0, 16, 2], "texture": "#2"},
"down": {"uv": [3, 7, 10, 9], "texture": "#2"}
}
},
{
"from": [6, 4.5, 3],
"to": [12, 5, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [4, 11, 10, 11.5], "texture": "#b"},
"east": {"uv": [12, 11, 13, 11.5], "texture": "#b"},
"south": {"uv": [6, 11, 12, 11.5], "texture": "#b"},
"west": {"uv": [3, 11, 4, 11.5], "texture": "#b"},
"up": {"uv": [6, 3, 12, 4], "texture": "#b"},
"down": {"uv": [6, 12, 12, 13], "texture": "#b"}
}
},
{
"from": [4, 4.5, 5],
"to": [5, 5, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [11, 11, 12, 11.5], "texture": "#b"},
"east": {"uv": [5, 11, 11, 11.5], "texture": "#b"},
"south": {"uv": [4, 11, 5, 11.5], "texture": "#b"},
"west": {"uv": [5, 11, 11, 11.5], "texture": "#b"},
"up": {"uv": [4, 5, 5, 11], "texture": "#b"},
"down": {"uv": [4, 5, 5, 11], "texture": "#b"}
}
},
{
"from": [13, 4.5, 5],
"to": [14, 5, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [2, 11, 3, 11.5], "texture": "#b"},
"east": {"uv": [5, 11, 11, 11.5], "texture": "#b"},
"south": {"uv": [13, 11, 14, 11.5], "texture": "#b"},
"west": {"uv": [5, 11, 11, 11.5], "texture": "#b"},
"up": {"uv": [13, 5, 14, 11], "texture": "#b"},
"down": {"uv": [13, 5, 14, 11], "texture": "#b"}
}
},
{
"from": [6, 4.5, 12],
"to": [12, 5, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 8]},
"faces": {
"north": {"uv": [4, 11, 10, 11.5], "texture": "#b"},
"east": {"uv": [3, 11, 4, 11.5], "texture": "#b"},
"south": {"uv": [6, 11, 12, 11.5], "texture": "#b"},
"west": {"uv": [12, 11, 13, 11.5], "texture": "#b"},
"up": {"uv": [6, 12, 12, 13], "texture": "#b"},
"down": {"uv": [6, 3, 12, 4], "texture": "#b"}
}
}
],
"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,221 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:blocks/device/tree_cutter_side",
"3": "engineersdecor:blocks/device/tree_cutter_top",
"particle": "engineersdecor:blocks/device/tree_cutter_side",
"b": "engineersdecor:blocks/device/tree_cutter_blade",
"top": "engineersdecor:blocks/device/tree_cutter_bottom"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 3, 16],
"faces": {
"north": {"uv": [0, 13, 16, 16], "texture": "#2"},
"east": {"uv": [0, 13, 16, 16], "texture": "#2"},
"south": {"uv": [0, 13, 16, 16], "texture": "#2"},
"west": {"uv": [0, 13, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "texture": "#3"},
"down": {"uv": [0, 0, 16, 16], "texture": "#top"}
}
},
{
"from": [0, 3, 0],
"to": [3, 8, 16],
"faces": {
"north": {"uv": [13, 0, 16, 5], "texture": "#2"},
"east": {"uv": [0, 3, 16, 8], "texture": "#2"},
"south": {"uv": [0, 8, 3, 13], "texture": "#2"},
"west": {"uv": [0, 8, 16, 13], "texture": "#2"},
"up": {"uv": [0, 0, 3, 16], "texture": "#3"},
"down": {"uv": [0, 0, 3, 16], "texture": "#top"}
}
},
{
"from": [3, 3, 13],
"to": [16, 8, 16],
"faces": {
"north": {"uv": [0, 3, 13, 8], "texture": "#2"},
"east": {"uv": [0, 8, 3, 13], "texture": "#2"},
"south": {"uv": [3, 8, 16, 13], "texture": "#2"},
"west": {"uv": [13, 8, 16, 13], "texture": "#b"},
"up": {"uv": [3, 13, 16, 16], "texture": "#3"},
"down": {"uv": [3, 0, 16, 3], "texture": "#top"}
}
},
{
"from": [15, 3, 0],
"to": [16, 6, 13],
"faces": {
"north": {"uv": [0, 10, 1, 13], "texture": "#2"},
"east": {"uv": [3, 10, 16, 13], "texture": "#2"},
"south": {"uv": [15, 10, 16, 13], "texture": "#b"},
"west": {"uv": [0, 0, 13, 3], "texture": "#2"},
"up": {"uv": [15, 0, 16, 13], "texture": "#3"},
"down": {"uv": [15, 3, 16, 16], "texture": "#top"}
}
},
{
"from": [3, 7, 0],
"to": [5, 8, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [10, 13, 5]},
"faces": {
"north": {"uv": [11, 8, 13, 9], "texture": "#2"},
"east": {"uv": [3, 8, 16, 9], "texture": "#2"},
"south": {"uv": [3, 8, 5, 9], "texture": "#b"},
"west": {"uv": [0, 8, 13, 9], "texture": "#b"},
"up": {"uv": [3, 0, 5, 13], "texture": "#3"},
"down": {"uv": [3, 3, 5, 16], "texture": "#b"}
}
},
{
"from": [5, 6, 12],
"to": [16, 8, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [11, 13, 5]},
"faces": {
"north": {"uv": [0, 0, 11, 2], "texture": "#2"},
"east": {"uv": [3, 8, 4, 10], "texture": "#2"},
"south": {"uv": [5, 8, 16, 10], "texture": "#b"},
"west": {"uv": [12, 8, 13, 10], "texture": "#b"},
"up": {"uv": [5, 12, 16, 13], "texture": "#3"},
"down": {"uv": [5, 3, 16, 4], "texture": "#top"}
}
},
{
"from": [5, 4.5, -3],
"to": [13, 5, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 1]},
"faces": {
"north": {"uv": [5, 13, 13, 13.5], "texture": "#b"},
"east": {"uv": [11, 11, 16, 11.5], "texture": "#b"},
"south": {"uv": [5, 11, 13, 11.5], "texture": "#b"},
"west": {"uv": [0, 11, 5, 11.5], "texture": "#b"},
"up": {"uv": [5, 4, 13, 12], "texture": "#b"},
"down": {"uv": [5, 4, 13, 12], "texture": "#b"}
}
},
{
"from": [8, 5, 0],
"to": [10, 5.5, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1]},
"faces": {
"north": {"uv": [6, 10.5, 8, 11], "texture": "#2"},
"east": {"uv": [14, 10.5, 16, 11], "texture": "#b"},
"south": {"uv": [8, 10.5, 10, 11], "texture": "#b"},
"west": {"uv": [0, 10.5, 2, 11], "texture": "#b"},
"up": {"uv": [8, 0, 10, 2], "texture": "#b"},
"down": {"uv": [8, 14, 10, 16], "texture": "#b"}
}
},
{
"from": [8, 4, 0],
"to": [10, 4.5, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1]},
"faces": {
"north": {"uv": [6, 11.5, 8, 12], "texture": "#b"},
"east": {"uv": [14, 11.5, 16, 12], "texture": "#b"},
"south": {"uv": [8, 11.5, 10, 12], "texture": "#b"},
"west": {"uv": [0, 11.5, 2, 12], "texture": "#b"},
"up": {"uv": [8, 0, 10, 2], "texture": "#b"},
"down": {"uv": [8, 14, 10, 16], "texture": "#b"}
}
},
{
"from": [3, 3.5, 0],
"to": [10, 4, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1]},
"faces": {
"north": {"uv": [8, 6, 15, 6.5], "texture": "#2"},
"east": {"uv": [7, 12, 9, 12.5], "texture": "#2"},
"south": {"uv": [3, 12, 10, 12.5], "texture": "#2"},
"west": {"uv": [7, 12, 9, 12.5], "texture": "#2"},
"up": {"uv": [3, 7, 10, 9], "texture": "#2"},
"down": {"uv": [3, 7, 10, 9], "texture": "#2"}
}
},
{
"from": [3, 5.5, 0],
"to": [10, 6, 2],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 1]},
"faces": {
"north": {"uv": [6, 10, 13, 10.5], "texture": "#2"},
"east": {"uv": [7, 10, 9, 10.5], "texture": "#2"},
"south": {"uv": [3, 10, 10, 10.5], "texture": "#2"},
"west": {"uv": [7, 10, 9, 10.5], "texture": "#2"},
"up": {"uv": [9, 0, 16, 2], "texture": "#2"},
"down": {"uv": [3, 7, 10, 9], "texture": "#2"}
}
},
{
"from": [6, 4.5, -4],
"to": [12, 5, -3],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 1]},
"faces": {
"north": {"uv": [7, 12, 13, 12.5], "texture": "#b"},
"east": {"uv": [16, 11, 16, 11.5], "texture": "#b"},
"south": {"uv": [6, 11, 12, 11.5], "texture": "#b"},
"west": {"uv": [0, 11, 0, 11.5], "texture": "#b"},
"up": {"uv": [6, 12, 12, 13], "texture": "#b"},
"down": {"uv": [6, 3, 12, 4], "texture": "#b"}
}
},
{
"from": [4, 4.5, -2],
"to": [5, 5, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 1]},
"faces": {
"north": {"uv": [11, 12, 12, 12.5], "texture": "#b"},
"east": {"uv": [12, 11, 16, 11.5], "texture": "#b"},
"south": {"uv": [4, 11, 5, 11.5], "texture": "#b"},
"west": {"uv": [0, 11, 4, 11.5], "texture": "#b"},
"up": {"uv": [4, 4, 5, 12], "texture": "#b"},
"down": {"uv": [4, 5, 5, 11], "texture": "#b"}
}
},
{
"from": [13, 4.5, -2],
"to": [14, 5, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 1]},
"faces": {
"north": {"uv": [2, 11, 3, 11.5], "texture": "#b"},
"east": {"uv": [6, 12, 10, 12.5], "texture": "#b"},
"south": {"uv": [13, 11, 14, 11.5], "texture": "#b"},
"west": {"uv": [0, 11, 4, 11.5], "texture": "#b"},
"up": {"uv": [13, 5, 14, 11], "texture": "#b"},
"down": {"uv": [13, 5, 14, 11], "texture": "#b"}
}
},
{
"from": [6, 4.5, 5],
"to": [12, 5, 6],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.5, 1]},
"faces": {
"north": {"uv": [4, 11, 10, 11.5], "texture": "#b"},
"east": {"uv": [10, 11, 11, 11.5], "texture": "#b"},
"south": {"uv": [6, 11, 12, 11.5], "texture": "#b"},
"west": {"uv": [5, 11, 6, 11.5], "texture": "#b"},
"up": {"uv": [6, 12, 12, 13], "texture": "#b"},
"down": {"uv": [6, 10, 12, 11], "texture": "#b"}
}
}
],
"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

@ -1,5 +1,6 @@
{
"parent": "block/cube",
"ambientocclusion": false,
"textures": {
"glass": "engineersdecor:blocks/glass/window_glass_texture"
},

View file

@ -31,6 +31,10 @@
"ingredient": { "type": "forge:ore_dict", "ore": "blockSteel" },
"name": "blockSteel"
},
{
"ingredient": { "type": "forge:ore_dict", "ore": "blockLead" },
"name": "blockLead"
},
{
"ingredient": { "type": "forge:ore_dict", "ore": "plateIron" },
"name": "plateIron"
@ -39,6 +43,10 @@
"ingredient": { "type": "forge:ore_dict", "ore": "ingotSteel" },
"name": "ingotSteel"
},
{
"ingredient": { "type": "forge:ore_dict", "ore": "ingotLead" },
"name": "ingotLead"
},
{
"ingredient": { "type": "forge:ore_dict", "ore": "plateSteel" },
"name": "plateSteel"

View file

@ -0,0 +1,37 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:small_solar_panel",
"required": ["immersiveengineering:metal_device1"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"QQQ",
" S ",
"LRL"
],
"key": {
"Q": {
"item": "minecraft:quartz",
"data": 0
},
"S": {
"item": "#ingotSteel",
"data": 0
},
"R": {
"item": "minecraft:redstone_block",
"data": 0
},
"L": {
"item": "#blockLead",
"data": 0
}
},
"result": {
"item": "engineersdecor:small_solar_panel",
"count": 1
}
}

View file

@ -0,0 +1,41 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:small_tree_cutter",
"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_axe",
"data": 0
},
"R": {
"item": "minecraft:redstone_block",
"data": 0
},
"C": {
"item": "#anyMechanicalComponent",
"data": 0
}
},
"result": {
"item": "engineersdecor:small_tree_cutter",
"count": 1
}
}

View file

@ -0,0 +1,24 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:treated_wood_floor",
"required": ["immersiveengineering:material"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"SSS",
"SSS"
],
"key": {
"S": {
"item": "#slabTreatedWood",
"data": 0
}
},
"result": {
"item": "engineersdecor:treated_wood_floor",
"count": 1
}
}

View file

@ -0,0 +1,38 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:small_mineral_smelter",
"required": ["engineersdecor:panzerglass_block"],
"missing": ["immersiveengineering:metal_device1"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"SOS",
"GBO",
"SOS"
],
"key": {
"G": {
"item": "engineersdecor:panzerglass_block",
"data": 0
},
"S": {
"item": "#ingotIron",
"data": 0
},
"B": {
"item": "#anyLavaItem",
"data": 0
},
"O": {
"item": "#blockObsidian",
"data": 0
}
},
"result": {
"item": "engineersdecor:small_mineral_smelter",
"count": 1
}
}

View file

@ -0,0 +1,33 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:small_solar_panel",
"missing": ["immersiveengineering:metal_device1"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"QQQ",
" S ",
"SRS"
],
"key": {
"Q": {
"item": "minecraft:quartz",
"data": 0
},
"S": {
"item": "minecraft:iron_ingot",
"data": 0
},
"R": {
"item": "minecraft:redstone_block",
"data": 0
}
},
"result": {
"item": "engineersdecor:small_solar_panel",
"count": 1
}
}

View file

@ -0,0 +1,37 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:small_tree_cutter",
"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_axe",
"data": 0
},
"R": {
"item": "minecraft:redstone_block",
"data": 0
}
},
"result": {
"item": "engineersdecor:small_tree_cutter",
"count": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

View file

@ -2,7 +2,7 @@
org.gradle.daemon=false
org.gradle.jvmargs=-Xmx8G
version_minecraft=1.14.4
version_forge_minecraft=1.14.4-28.0.81
version_forge_minecraft=1.14.4-28.0.100
version_fml_mappings=20190719-1.14.3
version_jei=1.14.4:6.0.0.10
version_engineersdecor=1.0.11-b3
version_engineersdecor=1.0.12-b2

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.14.4": {
"1.0.12-b1": "[U] Updated to Forge 1.14.4-28.0.93/20190719-1.14.3.\n[M] Logo location fixed.",
"1.0.11-b3": "[U] Updated to Forge 1.14.4-28.0.81/20190719-1.14.3.\n[F] Adapted recipe condition to Forge version (issue #49).",
"1.0.11-b2": "[U] JEI dependency update 1.14.4:6.0.0.10.\n[F] Fixed creative ghost block issue (issue #48).\n[M] Updated ru_ru lang file (Shellyoung, PR#47).",
"1.0.11-b1": "[A] Added Steel Table\n[A] Added Treated Wood Side Table\n[A] Added Exit Sign\n[A] Added Steel Floor Grating\n[M] Sign orientation fixed, only blocked vertical placement.",
@ -22,6 +23,6 @@
},
"promos": {
"1.14.4-recommended": "",
"1.14.4-latest": "1.0.11-b3"
"1.14.4-latest": "1.0.12-b1"
}
}

View file

@ -8,8 +8,18 @@ Mod sources for Minecraft version 1.14.3.
- Compiled mod distribution channel is curseforge: https://www.curseforge.com/minecraft/mc-mods/engineers-decor/files.
----
## Version history
~ v1.0.12-b2 [U] Updated to Forge 1.14.4-28.0.100/20190719-1.14.3.
[A] Small Solar Panel added.
[M] Items fall through the Steel Floor Grating like in 1.12.2 version.
[M] Factory Dropper: Added pulse/continuous mode in GUI (issue #51,
thx Aristine for the CR).
- v1.0.12-b1 [U] Updated to Forge 1.14.4-28.0.93/20190719-1.14.3.
[M] Logo location fixed.
- v1.0.11-b3 [U] Updated to Forge 1.14.4-28.0.81/20190719-1.14.3.
[F] Adapted recipe condition to Forge version (issue #49).

View file

@ -367,6 +367,12 @@ public class ModContent
ModAuxiliaries.getPixeledAABB(1.1,0,1.1, 14.9,16,14.9)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "small_mineral_smelter"));
public static final BlockDecorSolarPanel SMALL_SOLAR_PANEL = (BlockDecorSolarPanel)(new BlockDecorSolarPanel(
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_ELECTRICAL,
Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL),
ModAuxiliaries.getPixeledAABB(0,0,0, 16,11.5,16)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "small_solar_panel"));
public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = (BlockDecorPipeValve)(new BlockDecorPipeValve(
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|BlockDecor.CFG_CUTOUT,
Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL),
@ -442,6 +448,7 @@ public class ModContent
SMALL_ELECTRICAL_FURNACE,
SMALL_WASTE_INCINERATOR,
SMALL_MINERAL_SMELTER,
SMALL_SOLAR_PANEL,
CLINKER_BRICK_BLOCK,
CLINKER_BRICK_SLAB,
CLINKER_BRICK_STAIRS,
@ -550,6 +557,11 @@ public class ModContent
.build(null)
.setRegistryName(ModEngineersDecor.MODID, "te_small_mineral_smelter");
public static final TileEntityType<?> TET_SMALL_SOLAR_PANEL = TileEntityType.Builder
.create(BlockDecorSolarPanel.BTileEntity::new, SMALL_SOLAR_PANEL)
.build(null)
.setRegistryName(ModEngineersDecor.MODID, "te_small_solar_panel");
private static final TileEntityType<?> tile_entity_types[] = {
TET_TREATED_WOOD_CRAFTING_TABLE,
@ -559,7 +571,8 @@ public class ModContent
TET_WASTE_INCINERATOR,
TET_STRAIGHT_PIPE_VALVE,
TET_PASSIVE_FLUID_ACCUMULATOR,
TET_MINERAL_SMELTER
TET_MINERAL_SMELTER,
TET_SMALL_SOLAR_PANEL
};
//--------------------------------------------------------------------------------------------------------------------

View file

@ -170,10 +170,11 @@ public class BlockDecorDropper extends BlockDecorDirected
public static final int MAX_DROP_COUNT = 32;
public static final int DROP_PERIOD_OFFSET = 10;
///
public static final int DROPLOGIC_FILTER_ANDGATE = 0x1;
public static final int DROPLOGIC_EXTERN_ANDGATE = 0x2;
public static final int DROPLOGIC_SILENT_DROP = 0x4;
public static final int DROPLOGIC_SILENT_OPEN = 0x8;
public static final int DROPLOGIC_FILTER_ANDGATE = 0x01;
public static final int DROPLOGIC_EXTERN_ANDGATE = 0x02;
public static final int DROPLOGIC_SILENT_DROP = 0x04;
public static final int DROPLOGIC_SILENT_OPEN = 0x08;
public static final int DROPLOGIC_CONTINUOUS = 0x10;
///
private int filter_matches_[] = new int[CTRL_SLOTS_SIZE];
private int open_timer_ = 0;
@ -508,9 +509,11 @@ public class BlockDecorDropper extends BlockDecorDirected
if((drop_timer_ > 0) && ((--drop_timer_) == 0)) markDirty();
if(--tick_timer_ > 0) return;
tick_timer_ = TICK_INTERVAL;
final boolean continuous_mode = (drop_logic_ & DROPLOGIC_CONTINUOUS)!=0;
boolean dirty = block_power_updated_;
boolean redstone_trigger = (block_power_signal_ && block_power_updated_);
boolean redstone_trigger = (block_power_signal_ && ((block_power_updated_) || (continuous_mode)));
boolean filter_trigger;
boolean filter_defined = false;
boolean trigger;
// Trigger logic
{
@ -518,9 +521,9 @@ public class BlockDecorDropper extends BlockDecorDirected
for(int i=INPUT_SLOTS_FIRST; i<(INPUT_SLOTS_FIRST+INPUT_SLOTS_SIZE); ++i) {
if(stacks_.get(i).getCount() >= drop_count_) { droppable_slot_found = true; break; }
}
int filter_nset = 0;
// From filters / inventory checks
{
int filter_nset = 0;
int last_filter_matches_[] = filter_matches_.clone();
boolean slot_assigned = false;
for(int ci=0; ci<CTRL_SLOTS_SIZE; ++ci) {
@ -546,12 +549,13 @@ public class BlockDecorDropper extends BlockDecorDirected
if(filter_matches_[i] > 1) ++nmatched;
if(filter_matches_[i] != last_filter_matches_[i]) dirty = true;
}
filter_defined = (filter_nset > 0);
filter_trigger = ((filter_nset > 0) && (nmatched > 0));
if(((drop_logic_ & DROPLOGIC_FILTER_ANDGATE) != 0) && (nmatched != filter_nset)) filter_trigger = false;
}
// gates
{
if(filter_nset > 0) {
if(filter_defined) {
trigger = ((drop_logic_ & DROPLOGIC_EXTERN_ANDGATE) != 0) ? (filter_trigger && redstone_trigger) : (filter_trigger || redstone_trigger);
} else {
trigger = redstone_trigger;
@ -818,7 +822,7 @@ public class BlockDecorDropper extends BlockDecorDirected
} else if(isPointInRegion(114, 51, 9, 9, mouseX, mouseY)) {
container.onGuiAction("manual_rstrigger", 1);
} else if(isPointInRegion(162, 66, 7, 9, mouseX, mouseY)) {
container.onGuiAction("manual_trigger", 1);
container.onGuiAction("drop_logic", container.field(5) ^ BTileEntity.DROPLOGIC_CONTINUOUS);
} else if(isPointInRegion(132, 66, 9, 9, mouseX, mouseY)) {
container.onGuiAction("drop_logic", container.field(5) ^ BTileEntity.DROPLOGIC_FILTER_ANDGATE);
} else if(isPointInRegion(148, 66, 9, 9, mouseX, mouseY)) {
@ -887,8 +891,10 @@ public class BlockDecorDropper extends BlockDecorDirected
{
int filter_gate_offset = ((container.field(5) & BTileEntity.DROPLOGIC_FILTER_ANDGATE) != 0) ? 11 : 0;
int extern_gate_offset = ((container.field(5) & BTileEntity.DROPLOGIC_EXTERN_ANDGATE) != 0) ? 11 : 0;
int pulse_mode_offset = ((container.fields_[5] & BTileEntity.DROPLOGIC_CONTINUOUS ) != 0) ? 10 : 0;
blit(x0+132, y0+66, 179+filter_gate_offset, 66, 9, 9);
blit(x0+148, y0+66, 179+extern_gate_offset, 66, 9, 9);
blit(x0+162, y0+66, 200+pulse_mode_offset, 66, 9, 9);
}
// drop timer running indicator
{

View file

@ -8,16 +8,22 @@
*/
package wile.engineersdecor.blocks;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
public class BlockDecorFloorGrating extends BlockDecor
{
public BlockDecorFloorGrating(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB)
{ super(config, builder); }
@ -25,31 +31,40 @@ public class BlockDecorFloorGrating extends BlockDecor
public boolean propagatesSkylightDown(BlockState state, IBlockReader reader, BlockPos pos)
{ return true; }
// @Override
// public void addCollisionBoxToList(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entity, boolean isActualState)
// { if(!(entity instanceof EntityItem)) super.addCollisionBoxToList(state, world, pos, entityBox, collidingBoxes, entity, isActualState); }
//
// @Override
// public void onFallenUpon(World world, BlockPos pos, Entity entity, float fallDistance)
// {
// if(!(entity instanceof EntityItem)) {
// entity.fall(fallDistance, 1.0F);
// } else {
// entity.setVelocity(0,-0.2,0);
// }
// }
//
// @Override
// public void onEntityCollision(World world, BlockPos pos, IBlockState state, Entity entity)
// {
// if(!(entity instanceof EntityItem)) return;
// if((entity.posY-pos.getY()) > 0.7) {
// if(entity.motionY > -0.2) entity.motionY = -0.2;
// entity.setVelocity(0,-0.1,0);
// entity.setPositionAndUpdate(entity.posX, entity.posY-0.3, entity.posZ);
// } else {
// entity.setVelocity(0,entity.motionY,0);
// }
// }
@Override
public void onLanded(IBlockReader world, Entity entity)
{
if(!(entity instanceof ItemEntity)) {
super.onLanded(world, entity);
} else {
entity.setMotion(0, -0.1,0);
entity.setPositionAndUpdate(entity.posX, entity.posY-0.3, entity.posZ);
}
}
@Override
public void onFallenUpon(World world, BlockPos pos, Entity entity, float fallDistance)
{
if(!(entity instanceof ItemEntity)) {
super.onFallenUpon(world, pos, entity, fallDistance);
} else {
entity.setMotion(0, -0.1,0);
entity.setPositionAndUpdate(entity.posX, entity.posY-0.3, entity.posZ);
}
}
@Override
@SuppressWarnings("deprecation")
public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity)
{
if(!(entity instanceof ItemEntity)) return;
if((entity.posY-pos.getY()) < 0.7) return;
double vy = MathHelper.clamp(entity.getMotion().y, -1.2, -0.2);
entity.setMotion(0, vy, 0);
entity.setPositionAndUpdate(pos.getX()+0.5, entity.posY-0.3, pos.getZ()+0.5);
}
@Override
public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context)
{ return (context.getEntity() instanceof ItemEntity) ? VoxelShapes.empty() : super.getCollisionShape(state, world, pos, context); }
}

View file

@ -0,0 +1,141 @@
/*
* @file BlockDecorDirected.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Smaller (cutout) block with a defined facing.
*/
package wile.engineersdecor.blocks;
import wile.engineersdecor.ModContent;
import wile.engineersdecor.ModEngineersDecor;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.state.IntegerProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.IBlockReader;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
import javax.annotation.Nullable;
public class BlockDecorSolarPanel extends BlockDecor
{
public static final IntegerProperty EXPOSITION = IntegerProperty.create("exposition", 0, 4);
public BlockDecorSolarPanel(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB)
{
super(config, builder, unrotatedAABB);
setDefaultState(stateContainer.getBaseState().with(EXPOSITION, 1));
}
@Override
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder)
{ super.fillStateContainer(builder); builder.add(EXPOSITION); }
@Override
@Nullable
public BlockState getStateForPlacement(BlockItemUseContext context)
{ return getDefaultState(); }
@Override
public boolean hasTileEntity(BlockState state)
{ return true; }
@Override
@Nullable
public TileEntity createTileEntity(BlockState state, IBlockReader world)
{ return new BlockDecorSolarPanel.BTileEntity(); }
//--------------------------------------------------------------------------------------------------------------------
// Tile entity
//--------------------------------------------------------------------------------------------------------------------
public static class BTileEntity extends TileEntity implements ITickableTileEntity
{
public static final int DEFAULT_PEAK_POWER = 45;
public static final int TICK_INTERVAL = 8;
public static final int ACCUMULATION_INTERVAL = 4;
private static final Direction transfer_directions_[] = {Direction.DOWN, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.NORTH };
private static int peak_power_per_tick_ = DEFAULT_PEAK_POWER;
private static int max_power_storage_ = 10000;
private int tick_timer_ = 0;
private int recalc_timer_ = 0;
private int accumulated_power_ = 0;
public static void on_config(int peak_power_per_tick)
{
peak_power_per_tick_ = peak_power_per_tick;
ModEngineersDecor.logger().info("Config small solar panel: Peak production:" + peak_power_per_tick_ + "/tick");
}
//------------------------------------------------------------------------------------------------------------------
public BTileEntity()
{ this(ModContent.TET_SMALL_SOLAR_PANEL); }
public BTileEntity(TileEntityType<?> te_type)
{ super(te_type); }
public void readnbt(CompoundNBT nbt, boolean update_packet)
{ accumulated_power_ = nbt.getInt("energy"); }
protected void writenbt(CompoundNBT nbt, boolean update_packet)
{ nbt.putInt("energy", accumulated_power_); }
// TileEntity ------------------------------------------------------------------------------
@Override
public void read(CompoundNBT nbt)
{ super.read(nbt); readnbt(nbt, false); }
@Override
public CompoundNBT write(CompoundNBT nbt)
{ super.write(nbt); writenbt(nbt, false); return nbt; }
@Override
public void tick()
{
if((world.isRemote) || (--tick_timer_ > 0)) return;
tick_timer_ = TICK_INTERVAL;
if(!world.canBlockSeeSky(pos)) { tick_timer_ = TICK_INTERVAL * 5; return; }
if(accumulated_power_ > 0) {
for(int i=0; (i<transfer_directions_.length) && (accumulated_power_>0); ++i) {
final Direction f = transfer_directions_[i];
TileEntity te = world.getTileEntity(pos.offset(f));
if(te==null) continue;
IEnergyStorage es = te.getCapability(CapabilityEnergy.ENERGY, f.getOpposite()).orElse(null);
if((es==null) || (!es.canReceive())) continue;
accumulated_power_ = MathHelper.clamp(accumulated_power_-es.receiveEnergy(accumulated_power_, false),0, accumulated_power_);
}
}
if(--recalc_timer_ > 0) return;
recalc_timer_ = ACCUMULATION_INTERVAL + ((int)(Math.random()+.5));
BlockState state = world.getBlockState(pos);
int theta = ((((int)(world.getCelestialAngleRadians(1f) * (180.0/Math.PI)))+90) % 360);
int e = 2;
if(theta > 340) e = 2;
else if(theta < 45) e = 0;
else if(theta < 80) e = 1;
else if(theta < 100) e = 2;
else if(theta < 135) e = 3;
else if(theta < 190) e = 4;
BlockState nstate = state.with(EXPOSITION, e);
if(nstate != state) world.setBlockState(pos, nstate, 1|2);
final double sb = world.getSunBrightness(1f);
double rf = Math.abs(1.0-(((double)Math.abs(MathHelper.clamp(theta, 0, 180)-90))/90));
rf = Math.sqrt(rf) * sb * ((TICK_INTERVAL*ACCUMULATION_INTERVAL)+2) * peak_power_per_tick_;
accumulated_power_ = Math.min(accumulated_power_+(int)rf, max_power_storage_);
}
}
}

View file

@ -17,6 +17,7 @@ import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import org.apache.commons.lang3.tuple.Pair;
import wile.engineersdecor.blocks.*;
import wile.engineersdecor.blocks.BlockDecorSolarPanel.BTileEntity;
import javax.annotation.Nullable;
import java.util.ArrayList;
@ -131,6 +132,7 @@ public class ModConfig
public final ForgeConfigSpec.IntValue furnace_boost_energy_consumption;
public final ForgeConfigSpec.IntValue e_furnace_speed_percent;
public final ForgeConfigSpec.IntValue e_furnace_power_consumption;
public final ForgeConfigSpec.IntValue small_solar_panel_peak_production;
public final ForgeConfigSpec.BooleanValue e_furnace_automatic_pulling;
public final ForgeConfigSpec.DoubleValue chair_mob_sitting_probability_percent;
public final ForgeConfigSpec.DoubleValue chair_mob_standup_probability_percent;
@ -364,6 +366,14 @@ public class ModConfig
.comment("Defines if the electrical furnace automatically pulls items from an inventory at the input side." +
"The config value can be changed on-the-fly for tuning.")
.define("e_furnace_automatic_pulling", false);
small_solar_panel_peak_production = builder
.translation(ModEngineersDecor.MODID + ".config.small_solar_panel_peak_production")
.comment("Defines the peak power production (at noon) of the Small Solar Panel. " +
"Note that the agerage power is much less, as no power is produced at all during the night, " +
"and the power curve is nonlinear rising/falling during the day. Bad weather conditions also " +
"decrease the production. The config value can be changed on-the-fly for tuning.")
.defineInRange("small_solar_panel_peak_production", BTileEntity.DEFAULT_PEAK_POWER, 10, 256);
builder.pop();
}
}
@ -471,6 +481,7 @@ public class ModConfig
BlockDecorCraftingTable.on_config(COMMON.without_crafting_table_history.get(), false, COMMON.with_crafting_quickmove_buttons.get());
BlockDecorPipeValve.on_config(COMMON.pipevalve_max_flowrate.get(), COMMON.pipevalve_redstone_gain.get());
BlockDecorFurnaceElectrical.BTileEntity.on_config(COMMON.e_furnace_speed_percent.get(), COMMON.e_furnace_power_consumption.get(), COMMON.e_furnace_automatic_pulling.get());
BlockDecorSolarPanel.BTileEntity.on_config(COMMON.small_solar_panel_peak_production.get());
without_crafting_table = isOptedOut(ModContent.TREATED_WOOD_CRAFTING_TABLE);
immersiveengineering_installed = ModAuxiliaries.isModLoaded("immersiveengineering");
{

View file

@ -5,7 +5,6 @@ loaderVersion="[25,)"
issueTrackerURL="https://github.com/stfwi/engineers-decor/issues/"
[[mods]]
modId="engineersdecor"
version="${file.jarVersion}"
displayName="Engineer's Decor"
@ -14,12 +13,12 @@ authors="wilechaote"
credits="BluSunrize, malte0811, et al., the Forge Smiths, the Modders of the World."
updateJSONURL="https://raw.githubusercontent.com/stfwi/engineers-decor/develop/meta/update.json"
displayURL="https://github.com/stfwi/engineers-decor/"
logoFile="engineersdecor.png" # Double check: A file name (in the root of the mod JAR) containing a logo for display
logoFile="logo.png"
[[dependencies.engineersdecor]]
modId="forge"
mandatory=true
versionRange="[25,)" #mandatory
versionRange="[28.0.81,)"
ordering="NONE"
side="BOTH"

View file

@ -0,0 +1,9 @@
{
"variants": {
"exposition=0": { "model": "engineersdecor:block/device/small_solar_panel_model_exp0" },
"exposition=1": { "model": "engineersdecor:block/device/small_solar_panel_model_exp1" },
"exposition=2": { "model": "engineersdecor:block/device/small_solar_panel_model_exp2" },
"exposition=3": { "model": "engineersdecor:block/device/small_solar_panel_model_exp3" },
"exposition=4": { "model": "engineersdecor:block/device/small_solar_panel_model_exp4" }
}
}

View file

@ -151,6 +151,8 @@
"block.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.",
"block.engineersdecor.small_mineral_smelter": "Small Mineral Melting Furnace",
"block.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.",
"block.engineersdecor.small_solar_panel": "Small Solar Panel",
"block.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 internal charge pump circuit accumulates and frequently transfers RF. Production depends on day time and the weather.",
"block.engineersdecor.sign_decor": "Sign Plate (Engineer's decor)",
"block.engineersdecor.sign_decor.help": "§6This should not be craftable or visible in JEI. Used for creative tab and screenshots.",
"block.engineersdecor.sign_hotwire": "Sign \"Caution Hot Wire\"",

View file

@ -150,6 +150,7 @@
"block.engineersdecor.factory_dropper": "Фабричный выбрасыватель",
"block.engineersdecor.factory_dropper.help": "§6Выбрасыватель подходит для продвинутой автоматизации производства.§r Имеет 12 выборочных слотов. Сила броска, угол, размер стопки и задержка настраиваются в GUI. 3 слота сравнения стека с логическим И или ИЛИ могут использоваться в качестве внутреннего источника запуска. Внутренний триггер может быть И или ИЛИ с внешним триггерным сигналом красного камня. Триггерные кнопки симуляции для тестирования. Предварительно открывает дверцу затвора, когда выполняются условия внутреннего запуска. Сбрасывает все соответствующие стеки одновременно. Нажмите на все элементы в GUI, чтобы увидеть, как это работает.",
"block.engineersdecor.small_mineral_smelter": "Small Mineral Melting Furnace",
"block.engineersdecor.small_solar_panel": "Small Solar Panel",
"block.engineersdecor.sign_decor": "Табличка с надписью (Логотип Engineer's decor)",
"block.engineersdecor.sign_decor.help": "§Это не должно быть крафтовым или видимым в JEI. Используется для творческой вкладки и скриншотов.",
"block.engineersdecor.sign_hotwire": "Знак «Осторожно, под напряжением»",

View file

@ -112,6 +112,7 @@
"block.engineersdecor.passive_fluid_accumulator": "Passive Fluid Accumulator",
"block.engineersdecor.factory_dropper": "Factory Dropper",
"block.engineersdecor.small_mineral_smelter": "Small Mineral Melting Furnace",
"block.engineersdecor.small_solar_panel": "Small Solar Panel",
"block.engineersdecor.sign_decor": "Sign Plate (Engineer's decor)",
"block.engineersdecor.sign_hotwire": "Sign \"Caution Hot Wire\"",
"block.engineersdecor.sign_mindstep": "Sign \"Mind The Step\"",

View file

@ -0,0 +1,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:block/device/small_solar_panel_side",
"m": "engineersdecor:block/device/small_solar_panel_parts",
"particle": "engineersdecor:block/device/small_solar_panel_parts",
"tb": "engineersdecor:block/device/small_solar_panel_topbottom",
"p": "engineersdecor:block/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:block/device/small_solar_panel_side",
"m": "engineersdecor:block/device/small_solar_panel_parts",
"particle": "engineersdecor:block/device/small_solar_panel_parts",
"tb": "engineersdecor:block/device/small_solar_panel_topbottom",
"p": "engineersdecor:block/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": -22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:block/device/small_solar_panel_side",
"m": "engineersdecor:block/device/small_solar_panel_parts",
"particle": "engineersdecor:block/device/small_solar_panel_parts",
"tb": "engineersdecor:block/device/small_solar_panel_topbottom",
"p": "engineersdecor:block/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": 0, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:block/device/small_solar_panel_side",
"m": "engineersdecor:block/device/small_solar_panel_parts",
"particle": "engineersdecor:block/device/small_solar_panel_parts",
"tb": "engineersdecor:block/device/small_solar_panel_topbottom",
"p": "engineersdecor:block/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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,196 @@
{
"parent": "block/cube",
"textures": {
"2": "engineersdecor:block/device/small_solar_panel_side",
"m": "engineersdecor:block/device/small_solar_panel_parts",
"particle": "engineersdecor:block/device/small_solar_panel_parts",
"tb": "engineersdecor:block/device/small_solar_panel_topbottom",
"p": "engineersdecor:block/device/small_solar_panel_panel"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 14, 16, 16], "texture": "#2"},
"east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#2"},
"south": {"uv": [0, 14, 16, 16], "texture": "#2"},
"west": {"uv": [0, 14, 16, 16], "texture": "#2"},
"up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#tb"},
"down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#tb"}
}
},
{
"from": [1, 9.5, 0],
"to": [15, 11.5, 16],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [1, 4.5, 15, 6.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"south": {"uv": [1, 4.5, 15, 6.5], "texture": "#m"},
"west": {"uv": [0, 4.5, 16, 6.5], "texture": "#m"},
"up": {"uv": [1, 0, 15, 16], "texture": "#p"},
"down": {"uv": [1, 0, 15, 16], "texture": "#m"}
}
},
{
"from": [6, 2, 11],
"to": [10, 8, 13],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 8, 5, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [11, 8, 13, 14], "texture": "#m"},
"up": {"uv": [6, 11, 10, 13], "texture": "#m"},
"down": {"uv": [6, 3, 10, 5], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 9],
"to": [9.5, 9.5, 11],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"},
"down": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"}
}
},
{
"from": [5, 9, 7],
"to": [11, 9.5, 9],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [5, 6.5, 11, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"south": {"uv": [5, 6.5, 11, 7], "texture": "#m"},
"west": {"uv": [7, 6.5, 9, 7], "texture": "#m"},
"up": {"uv": [5, 7, 11, 9], "texture": "#m"},
"down": {"uv": [5, 7, 11, 9], "texture": "#m"}
}
},
{
"from": [2, 9, 3],
"to": [5, 9.5, 13],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [11, 6.5, 14, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [2, 6.5, 5, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [2, 3, 5, 13], "texture": "#m"},
"down": {"uv": [2, 3, 5, 13], "texture": "#m"}
}
},
{
"from": [11, 9, 3],
"to": [14, 9.5, 13],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [2, 6.5, 5, 7], "rotation": 180, "texture": "#m"},
"east": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"south": {"uv": [11, 6.5, 14, 7], "texture": "#m"},
"west": {"uv": [3, 6.5, 13, 7], "texture": "#m"},
"up": {"uv": [11, 3, 14, 13], "texture": "#m"},
"down": {"uv": [11, 3, 14, 13], "texture": "#m"}
}
},
{
"from": [6.5, 5.5, 5],
"to": [9.5, 9.5, 7],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 7, 8]},
"faces": {
"north": {"uv": [6.5, 6.5, 9.5, 10.5], "rotation": 180, "texture": "#m"},
"east": {"uv": [9, 6.5, 11, 10.5], "texture": "#m"},
"south": {"uv": [6.5, 6.5, 9.5, 10.5], "texture": "#m"},
"west": {"uv": [5, 6.5, 7, 10.5], "texture": "#m"},
"up": {"uv": [6.5, 5, 9.5, 7], "texture": "#m"},
"down": {"uv": [6.5, 9, 9.5, 11], "texture": "#m"}
}
},
{
"from": [6, 2, 3],
"to": [10, 8, 5],
"faces": {
"north": {"uv": [6, 8, 10, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 8, 13, 14], "texture": "#m"},
"south": {"uv": [6, 8, 10, 14], "texture": "#2"},
"west": {"uv": [3, 8, 5, 14], "texture": "#m"},
"up": {"uv": [6, 3, 10, 5], "texture": "#m"},
"down": {"uv": [6, 11, 10, 13], "texture": "#m"}
}
},
{
"from": [2, 2, 3],
"to": [6, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 8]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [2, 3, 6, 5], "texture": "#m"},
"down": {"uv": [2, 11, 6, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 3],
"to": [14, 3, 5],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 8]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [11, 13, 13, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [3, 13, 5, 14], "texture": "#m"},
"up": {"uv": [10, 3, 14, 5], "texture": "#m"},
"down": {"uv": [10, 11, 14, 13], "texture": "#m"}
}
},
{
"from": [10, 2, 11],
"to": [14, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12, 8, 16]},
"faces": {
"north": {"uv": [2, 13, 6, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [10, 13, 14, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [10, 11, 14, 13], "texture": "#m"},
"down": {"uv": [10, 3, 14, 5], "texture": "#m"}
}
},
{
"from": [2, 2, 11],
"to": [6, 3, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 8, 16]},
"faces": {
"north": {"uv": [10, 13, 14, 14], "rotation": 180, "texture": "#2"},
"east": {"uv": [3, 13, 5, 14], "texture": "#m"},
"south": {"uv": [2, 13, 6, 14], "texture": "#2"},
"west": {"uv": [11, 13, 13, 14], "texture": "#m"},
"up": {"uv": [2, 11, 6, 13], "texture": "#m"},
"down": {"uv": [2, 3, 6, 5], "texture": "#m"}
}
}
],
"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 @@
{ "parent": "engineersdecor:block/device/small_solar_panel_model_exp0" }

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

View file

@ -0,0 +1,23 @@
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:small_solar_panel",
"missing": ["immersiveengineering:metal_device1"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"QQQ",
" S ",
"SRS"
],
"key": {
"Q": { "item": "minecraft:quartz" },
"S": { "item": "minecraft:iron_ingot" },
"R": { "item": "minecraft:redstone_block" }
},
"result": {
"item": "engineersdecor:small_solar_panel"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 KiB

After

Width:  |  Height:  |  Size: 206 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 208 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 157 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

After

Width:  |  Height:  |  Size: 224 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

After

Width:  |  Height:  |  Size: 206 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 KiB

After

Width:  |  Height:  |  Size: 198 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

25
documentation/readme.md Normal file
View file

@ -0,0 +1,25 @@
## Engineer's Decor screenshots
![](engineers-decor-v103-summary.png)
![](engineers-decor-v104a-craftinggui.png)
![](engineers-decor-v103-labfurnacegui.png)
![](engineers-decor-v103-labfurnace-electrical-speedup.png)
![](engineers-decor-v100a-concrete-stuff.png)
![](engineers-decor-v102-panzerglass.png)
![](engineers-decor-v105a-e-furnace.png)
![](engineers-decor-v105a-e-furnace-gui.png)
![](engineers-decor-v103-windows.png)
![](engineers-decor-v103-treatedwood-pole.png)
![](engineers-decor-v104a-steelpoles.png)
![](engineers-decor-v104a-double_t_supports.png)
![](engineers-decor-v103-stool-sitting.png)
![](engineers-decor-v106a-wasteincinerator.png)
![](engineers-decor-v106a-wasteincinerator-gui.png)
![](engineers-decor-v104a-redstone-valves.png)
![](engineers-decor-v106a-factorydropper.png)
![](factory-dropper-gui.png)
![](factory-dropper-metal-press-compression.png)
![](small-mineral-smelter-vanilla-automated.png)
![](small-solar-panel.png)
![](small-tree-cutter.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Some files were not shown because too many files have changed in this diff Show more