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.
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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:
|
||||
|
|
|
@ -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(
|
||||
|
@ -85,7 +87,7 @@ public class ModBlocks
|
|||
public static final BlockDecorFurnace SMALL_LAB_FURNACE = new BlockDecorFurnace(
|
||||
"small_lab_furnace",
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|
|
||||
BlockDecor.CFG_ELECTRICAL,
|
||||
BlockDecor.CFG_ELECTRICAL,
|
||||
Material.IRON, 0.5f, 15f, SoundType.METAL,
|
||||
ModAuxiliaries.getPixeledAABB(1,0,1, 15,15,16)
|
||||
);
|
||||
|
@ -118,12 +120,26 @@ 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(
|
||||
"straight_pipe_valve",
|
||||
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
|
||||
BlockDecor.CFG_CUTOUT,
|
||||
BlockDecor.CFG_CUTOUT,
|
||||
Material.IRON, 0.7f, 15f, SoundType.METAL,
|
||||
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
|
||||
);
|
||||
|
@ -131,7 +147,7 @@ public class ModBlocks
|
|||
public static final BlockDecorPipeValve STRAIGHT_REDSTONE_VALVE = new BlockDecorPipeValve(
|
||||
"straight_pipe_valve_redstone",
|
||||
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED,
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED,
|
||||
Material.IRON, 0.7f, 15f, SoundType.METAL,
|
||||
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
|
||||
);
|
||||
|
@ -139,7 +155,7 @@ public class ModBlocks
|
|||
public static final BlockDecorPipeValve STRAIGHT_REDSTONE_ANALOG_VALVE = new BlockDecorPipeValve(
|
||||
"straight_pipe_valve_redstone_analog",
|
||||
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG,
|
||||
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_REDSTONE_CONTROLLED|BlockDecor.CFG_ANALOG,
|
||||
Material.IRON, 0.7f, 15f, SoundType.METAL,
|
||||
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
|
||||
);
|
||||
|
@ -147,7 +163,7 @@ public class ModBlocks
|
|||
public static final BlockDecorPassiveFluidAccumulator PASSIVE_FLUID_ACCUMULATOR = new BlockDecorPassiveFluidAccumulator(
|
||||
"passive_fluid_accumulator",
|
||||
BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|
|
||||
BlockDecor.CFG_CUTOUT,
|
||||
BlockDecor.CFG_CUTOUT,
|
||||
Material.IRON, 0.7f, 15f, SoundType.METAL,
|
||||
ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16)
|
||||
);
|
||||
|
@ -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()
|
|
@ -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); }
|
||||
});
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -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)
|
||||
{}
|
||||
|
||||
}
|
||||
|
|
|
@ -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_trigger = ((filter_nset >0) && (nmatched > 0));
|
||||
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;
|
||||
|
|
|
@ -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); }
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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_);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 + "'");
|
||||
|
|
168
1.12/src/main/java/wile/engineersdecor/detail/TreeCutting.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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" }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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":{}}
|
||||
}
|
||||
}
|
|
@ -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": [{}]
|
||||
}
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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. Используется для творческой вкладки и скриншотов.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube",
|
||||
"parent": "block/cube",
|
||||
"ambientocclusion": false,
|
||||
"textures": {
|
||||
"glass": "engineersdecor:blocks/glass/window_glass_texture"
|
||||
},
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 539 B |
After Width: | Height: | Size: 412 B |
After Width: | Height: | Size: 282 B |
After Width: | Height: | Size: 581 B |
After Width: | Height: | Size: 637 B |
|
@ -0,0 +1 @@
|
|||
{ "animation":{ "frames": [0,1], "frametime":2, "interpolate":false }}
|
After Width: | Height: | Size: 395 B |
After Width: | Height: | Size: 527 B |
After Width: | Height: | Size: 368 B |
After Width: | Height: | Size: 499 B |
After Width: | Height: | Size: 649 B |
After Width: | Height: | Size: 658 B |
After Width: | Height: | Size: 654 B |
After Width: | Height: | Size: 658 B |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |