From 27a957ba8d10a0ecd500add13c95613754c8fbbd Mon Sep 17 00:00:00 2001 From: stfwi Date: Fri, 13 Mar 2020 18:14:40 +0100 Subject: [PATCH] 1.14/1.15: Added E-Furnace GUI process speed switch. Added Steel Mesh Fence Gate. --- 1.12/meta/update.json | 2 +- 1.12/readme.md | 2 +- 1.14/build.gradle | 6 +- 1.14/gradle.properties | 4 +- 1.14/meta/update.json | 3 +- 1.14/readme.md | 5 + .../api/fluid/IFluidPipe.java.disabled | 18 - .../java/wile/engineersdecor/ModContent.java | 9 +- .../blocks/BlockDecorDoubleGate.java | 158 +++++++++ .../blocks/BlockDecorFence.java | 8 + .../blocks/BlockDecorFurnaceElectrical.java | 84 ++++- .../blocks/BlockDecorHopper.java | 6 + .../blocks/BlockDecorSolarPanel.java | 2 +- .../blocks/BlockDecorWasteIncinerator.java | 25 +- .../libmc/blocks/StandardFenceBlock.java | 2 +- .../libmc/datagen/LootTableGen.java | 3 + .../blockstates/steel_mesh_fence_gate.json | 21 ++ .../assets/engineersdecor/lang/en_us.json | 2 + .../assets/engineersdecor/lang/ru_ru.json | 2 + .../assets/engineersdecor/lang/zh_cn.json | 2 + .../steel_mesh_fence_gate_bottom_model.json | 267 +++++++++++++++ ...eel_mesh_fence_gate_bottom_model_open.json | 267 +++++++++++++++ .../steel_mesh_fence_gate_inventory.json | 319 ++++++++++++++++++ .../steel_mesh_fence_gate_top_model.json | 220 ++++++++++++ .../steel_mesh_fence_gate_top_model_open.json | 222 ++++++++++++ .../models/item/steel_mesh_fence_gate.json | 1 + .../gui/small_electrical_furnace_gui.png | Bin 22957 -> 25902 bytes .../blocks/steel_mesh_fence_gate.json | 21 ++ .../en_us/entries/buildingblocks/doors.json | 18 + .../en_us/entries/buildingblocks/ladders.json | 2 +- .../en_us/entries/buildingblocks/windows.json | 2 +- .../crafting/small_electrical_furnace.json | 2 +- .../steel_mesh_fence_gate_recipe.json | 25 ++ 1.15/gradle.properties | 6 +- 1.15/meta/update.json | 3 +- 1.15/readme.md | 7 + .../api/fluid/IFluidPipe.java.disabled | 18 - .../java/wile/engineersdecor/ModContent.java | 131 +++---- .../blocks/BlockDecorBreaker.java | 4 +- .../blocks/BlockDecorChair.java | 22 +- .../blocks/BlockDecorCraftingTable.java | 11 +- .../blocks/BlockDecorDoubleGate.java | 155 +++++++++ .../blocks/BlockDecorDropper.java | 11 +- .../blocks/BlockDecorFence.java | 7 + .../blocks/BlockDecorFluidFunnel.java | 10 +- .../blocks/BlockDecorFurnace.java | 11 +- .../blocks/BlockDecorFurnaceElectrical.java | 95 ++++-- .../blocks/BlockDecorHopper.java | 17 +- .../blocks/BlockDecorLadder.java | 2 +- .../blocks/BlockDecorMilker.java | 13 +- .../blocks/BlockDecorMineralSmelter.java | 11 +- .../BlockDecorPassiveFluidAccumulator.java | 11 +- .../blocks/BlockDecorPlacer.java | 11 +- .../blocks/BlockDecorSolarPanel.java | 8 +- .../engineersdecor/blocks/BlockDecorTest.java | 7 +- .../blocks/BlockDecorTreeCutter.java | 5 +- .../blocks/BlockDecorWasteIncinerator.java | 36 +- .../engineersdecor/detail/ModRenderers.java | 22 +- .../libmc/blocks/SlabSliceBlock.java | 13 +- .../libmc/blocks/StandardBlocks.java | 30 +- .../libmc/blocks/StandardFenceBlock.java | 2 +- .../libmc/datagen/LootTableGen.java | 2 +- .../libmc/detail/Auxiliaries.java | 8 +- .../engineersdecor/libmc/detail/Overlay.java | 2 +- .../blockstates/steel_mesh_fence_gate.json | 21 ++ .../assets/engineersdecor/lang/en_us.json | 2 + .../assets/engineersdecor/lang/ru_ru.json | 2 + .../assets/engineersdecor/lang/zh_cn.json | 2 + .../steel_mesh_fence_gate_bottom_model.json | 267 +++++++++++++++ ...eel_mesh_fence_gate_bottom_model_open.json | 267 +++++++++++++++ .../steel_mesh_fence_gate_inventory.json | 319 ++++++++++++++++++ .../steel_mesh_fence_gate_top_model.json | 220 ++++++++++++ .../steel_mesh_fence_gate_top_model_open.json | 222 ++++++++++++ .../models/item/steel_mesh_fence_gate.json | 1 + .../gui/small_electrical_furnace_gui.png | Bin 22957 -> 25902 bytes .../blocks/steel_mesh_fence_gate.json | 21 ++ .../en_us/entries/buildingblocks/doors.json | 18 + .../en_us/entries/buildingblocks/ladders.json | 2 +- .../en_us/entries/buildingblocks/windows.json | 2 +- .../crafting/small_electrical_furnace.json | 2 +- .../steel_mesh_fence_gate_recipe.json | 25 ++ Makefile | 4 - meta/update.json | 8 +- 83 files changed, 3490 insertions(+), 336 deletions(-) delete mode 100644 1.14/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java.disabled create mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDoubleGate.java create mode 100644 1.14/src/main/resources/assets/engineersdecor/blockstates/steel_mesh_fence_gate.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model_open.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_inventory.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model_open.json create mode 100644 1.14/src/main/resources/assets/engineersdecor/models/item/steel_mesh_fence_gate.json create mode 100644 1.14/src/main/resources/data/engineersdecor/loot_tables/blocks/steel_mesh_fence_gate.json create mode 100644 1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/doors.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/independent/steel_mesh_fence_gate_recipe.json delete mode 100644 1.15/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java.disabled create mode 100644 1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorDoubleGate.java create mode 100644 1.15/src/main/resources/assets/engineersdecor/blockstates/steel_mesh_fence_gate.json create mode 100644 1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model.json create mode 100644 1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model_open.json create mode 100644 1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_inventory.json create mode 100644 1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model.json create mode 100644 1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model_open.json create mode 100644 1.15/src/main/resources/assets/engineersdecor/models/item/steel_mesh_fence_gate.json create mode 100644 1.15/src/main/resources/data/engineersdecor/loot_tables/blocks/steel_mesh_fence_gate.json create mode 100644 1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/doors.json create mode 100644 1.15/src/main/resources/data/engineersdecor/recipes/independent/steel_mesh_fence_gate_recipe.json diff --git a/1.12/meta/update.json b/1.12/meta/update.json index e45dcff..b4597d6 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,7 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { - "1.0.19": "[R] Release based on v1.0.19-b4. Release-to-release changes: * Transfer fixes for Tree Cutter / Block Braker, and Factory hopper. * Cleanups, feature backports * Visual fixes and improvements\n[A] Backport of status display for Tree Cutter, Block Breaker and Solar Panel.", + "1.0.19": "[R] Release based on v1.0.19-b4. Release-to-release changes: * Transfer fixes for Tree Cutter / Block Breaker, and Factory hopper. * Cleanups, feature backports * Visual fixes and improvements\n[A] Backport of status display for Tree Cutter, Block Breaker and Solar Panel.", "1.0.19-b4": "[A] Creative tab opt-out visibility handling added (issue #90, thx pimalel233).", "1.0.19-b3": "[A] Factory Hopper: Added bottom item handler (CR#227).", "1.0.19-b2": "[F] Fixed Floor Grating item pass-through jitters (thx Cid).\n[M] Removed obsolete recipe collision testing recipes.", diff --git a/1.12/readme.md b/1.12/readme.md index 88d7855..768a266 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -14,7 +14,7 @@ Mod sources for Minecraft version 1.12.2. ------------------------------------------------------------------- - v1.0.19 [R] Release based on v1.0.19-b4. Release-to-release changes: - * Transfer fixes for Tree Cutter / Block Braker, and Factory hopper. + * Transfer fixes for Tree Cutter / Block Breaker, and Factory hopper. * Cleanups, feature backports * Visual fixes and improvements ------------------------------------------------------------------- diff --git a/1.14/build.gradle b/1.14/build.gradle index e6bc918..84516e9 100644 --- a/1.14/build.gradle +++ b/1.14/build.gradle @@ -30,7 +30,7 @@ minecraft { runs { client { workingDirectory project.file('run') - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + property 'forge.logging.markers', '' property 'forge.logging.console.level', 'debug' mods { engineersdecor { @@ -40,7 +40,7 @@ minecraft { } server { workingDirectory project.file('run') - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + property 'forge.logging.markers', '' property 'forge.logging.console.level', 'debug' mods { engineersdecor { @@ -50,7 +50,7 @@ minecraft { } data { workingDirectory project.file('run') - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + property 'forge.logging.markers', '' property 'forge.logging.console.level', 'debug' args '--mod', 'engineersdecor', '--all', '--output', file('src/generated/resources/') mods { diff --git a/1.14/gradle.properties b/1.14/gradle.properties index 5b8ec40..65ce632 100644 --- a/1.14/gradle.properties +++ b/1.14/gradle.properties @@ -2,7 +2,7 @@ org.gradle.daemon=false org.gradle.jvmargs=-Xmx8G version_minecraft=1.14.4 -version_forge_minecraft=1.14.4-28.2.2 +version_forge_minecraft=1.14.4-28.2.3 version_fml_mappings=20190719-1.14.3 version_jei=1.14.4:6.0.0.10 -version_engineersdecor=1.0.19-b5 +version_engineersdecor=1.0.20-b1 diff --git a/1.14/meta/update.json b/1.14/meta/update.json index 6cf3cab..4ada76c 100644 --- a/1.14/meta/update.json +++ b/1.14/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.14.4": { + "1.0.20-b1": "[A] Electrical Furnace: Added four-position speed switch (off, 100%, 150%, 200%), power consumption increases at higher rate (off, 100%, 200%, 400%).\n[A] Added Steel Mesh Fence Gate (single or double height gate fitting to the Steel Mesh Fence).\n[M] Waste Incinerator processing speed tweaked.", "1.0.19-b5": "[A] Added right-click display of power and progress information for Block Breaker, Solar Panel, and Tree Cutter.\n[A] Solar Panel power curve tuned.\n[A] Mod manual 1st edition release recipe added.\n[A] Factory Hopper: Resetting NBT when breaking with empty inventory (for stacking), enabled item cap for all sides.\n[M] Electrical Furnace model polished.", "1.0.19-b4": "[A] Ported primary Immersive Engineering dependent recipes (alternative recipes will still work if IE is not installed).\n[M] Furni comparator output overrides reflect input slots and empty fuel state/power-cutoff.\n[M] Solar Panel config: Default value for internal battery capacity increased.\n[F] Block Placer: Shifted GUI player slots 1px to the right.\n[A] Added mod block tags for slabs, stairs, and walls (PR#89, thanks CrudeAustin for the data).\n[A] Added experimental Patchouli manual (creative only).\n[!] Skipped blacklisting Treated Wood Crafting Table slots for the inventorysorter mod due to potential startup crashes for single player games (issue #88 fix deferred).", "1.0.19-b3": "[M] Config tweaks: Value limit ranges increased to facilitate modpacking.\n[A] Factory Hopper: Added bottom item handler (CR#227).\n[M] Block shapes refined.\n[F] Fixed duping bug (issue #87, thx Nachtflame)", @@ -49,6 +50,6 @@ }, "promos": { "1.14.4-recommended": "", - "1.14.4-latest": "1.0.19-b5" + "1.14.4-latest": "1.0.20-b1" } } \ No newline at end of file diff --git a/1.14/readme.md b/1.14/readme.md index 78ca600..3366fbf 100644 --- a/1.14/readme.md +++ b/1.14/readme.md @@ -11,6 +11,11 @@ Mod sources for Minecraft version 1.14.4. ## Version history + - v1.0.20-b1 [A] Electrical Furnace: Added four-position speed switch (off, 100%, 150%, 200%), power consumption + increases at higher rate (off, 100%, 200%, 400%). + [A] Added Steel Mesh Fence Gate (single or double height gate fitting to the Steel Mesh Fence). + [M] Waste Incinerator processing speed tweaked. + - v1.0.19-b5 [A] Added right-click display of power and progress information for Block Breaker, Solar Panel, and Tree Cutter. [A] Solar Panel power curve tuned. [A] Mod manual 1st edition release recipe added. diff --git a/1.14/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java.disabled b/1.14/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java.disabled deleted file mode 100644 index 83ff933..0000000 --- a/1.14/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java.disabled +++ /dev/null @@ -1,18 +0,0 @@ -/* - * BluSunrize - * Copyright (c) 2017 - * - * This code is licensed under "Blu's License of Common Sense" - * Details can be found in the license file in the root folder of this project - */ - -package blusunrize.immersiveengineering.api.fluid; - -import net.minecraft.util.Direction; - -public interface IFluidPipe -{ - boolean canOutputPressurized(boolean consumePower); - - boolean hasOutputConnection(Direction side); -} diff --git a/1.14/src/main/java/wile/engineersdecor/ModContent.java b/1.14/src/main/java/wile/engineersdecor/ModContent.java index d8cefdd..3b648d5 100644 --- a/1.14/src/main/java/wile/engineersdecor/ModContent.java +++ b/1.14/src/main/java/wile/engineersdecor/ModContent.java @@ -267,7 +267,7 @@ public class ModContent public static final BlockDecor.WaterLoggable STEEL_TABLE = (BlockDecor.WaterLoggable)(new BlockDecor.WaterLoggable( BlockDecor.CFG_CUTOUT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), Auxiliaries.getPixeledAABB(0,0,0, 16,16,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_table")); @@ -637,6 +637,12 @@ public class ModContent 1.5, 16, 0.25, 0, 16 )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_mesh_fence")); + public static final BlockDecorDoubleGate STEEL_MESH_FENCE_GATE = (BlockDecorDoubleGate)(new BlockDecorDoubleGate( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + Auxiliaries.getPixeledAABB(0,0,6.5, 16,16,9.5) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_mesh_fence_gate")); + // ------------------------------------------------------------------------------------------------------------------- public static final BlockDecorTest TEST_BLOCK = (BlockDecorTest)(new BlockDecorTest( @@ -714,6 +720,7 @@ public class ModContent FLOOR_EDGE_LIGHT_IRON, STEEL_FLOOR_GRATING, STEEL_MESH_FENCE, + STEEL_MESH_FENCE_GATE, TREATED_WOOD_POLE, TREATED_WOOD_POLE_HEAD, TREATED_WOOD_POLE_SUPPORT, diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDoubleGate.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDoubleGate.java new file mode 100644 index 0000000..989fb7a --- /dev/null +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDoubleGate.java @@ -0,0 +1,158 @@ +/* + * @file BlockDecorDoubleGate.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Gate blocks that can be one or two segments high. + */ +package wile.engineersdecor.blocks; + +import wile.engineersdecor.libmc.detail.Auxiliaries; +import net.minecraft.block.*; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.IntegerProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraft.pathfinding.PathType; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Arrays; + +public class BlockDecorDoubleGate extends BlockDecor.HorizontalWaterLoggable implements IDecorBlock +{ + public static final IntegerProperty SEGMENT = IntegerProperty.create("segment", 0, 1); + public static final BooleanProperty OPEN = FenceGateBlock.OPEN; + public static final int SEGMENT_LOWER = 0; + public static final int SEGMENT_UPPER = 1; + protected final ArrayList collision_shapes_; + + public BlockDecorDoubleGate(long config, Block.Properties properties, AxisAlignedBB aabb) + { this(config, properties, new AxisAlignedBB[]{aabb}); } + + public BlockDecorDoubleGate(long config, Block.Properties properties, AxisAlignedBB[] aabbs) + { + super(config, properties, aabbs); + AxisAlignedBB[] caabbs = new AxisAlignedBB[aabbs.length]; + for(int i=0; i(Arrays.asList( + VoxelShapes.fullCube(), + VoxelShapes.fullCube(), + Auxiliaries.getUnionShape(Auxiliaries.getRotatedAABB(caabbs, Direction.NORTH, true)), + Auxiliaries.getUnionShape(Auxiliaries.getRotatedAABB(caabbs, Direction.SOUTH, true)), + Auxiliaries.getUnionShape(Auxiliaries.getRotatedAABB(caabbs, Direction.WEST, true)), + Auxiliaries.getUnionShape(Auxiliaries.getRotatedAABB(caabbs, Direction.EAST, true)), + VoxelShapes.fullCube(), + VoxelShapes.fullCube() + )); + } + + @Override + public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext selectionContext) + { return state.get(OPEN) ? VoxelShapes.empty() : collision_shapes_.get(state.get(HORIZONTAL_FACING).getIndex() & 0x7); } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { super.fillStateContainer(builder); builder.add(SEGMENT).add(OPEN); } + + @Override + @Nullable + public BlockState getStateForPlacement(BlockItemUseContext context) + { return getInitialState(super.getStateForPlacement(context), context.getWorld(), context.getPos()); } + + @Override + @SuppressWarnings("deprecation") + public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld world, BlockPos pos, BlockPos facingPos) + { return getInitialState(super.updatePostPlacement(state, facing, facingState, world, pos, facingPos), world, pos); } + + @Override + @SuppressWarnings("deprecation") + public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + { + if((rayTraceResult.getFace()==Direction.UP) || (rayTraceResult.getFace()==Direction.DOWN) && (player.getHeldItem(hand).getItem()==this.asItem())) return false; + if(world.isRemote) return true; + final boolean open = !state.get(OPEN); + world.setBlockState(pos, state.with(OPEN, open),2|8|16); + if(state.get(SEGMENT) == SEGMENT_UPPER) { + final BlockState adjacent = world.getBlockState(pos.down()); + if(adjacent.getBlock()==this) world.setBlockState(pos.down(), adjacent.with(OPEN, open), 2|8|16); + } else { + final BlockState adjacent = world.getBlockState(pos.up()); + if(adjacent.getBlock()==this) world.setBlockState(pos.up(), adjacent.with(OPEN, open), 2|8|16); + } + world.playSound(null, pos, open?SoundEvents.BLOCK_IRON_DOOR_OPEN:SoundEvents.BLOCK_IRON_DOOR_CLOSE, SoundCategory.BLOCKS, 0.7f, 1.4f); + return true; + } + + @Override + @SuppressWarnings("deprecation") + public boolean allowsMovement(BlockState state, IBlockReader world, BlockPos pos, PathType type) + { return state.get(OPEN); } + + @Override + @SuppressWarnings("deprecation") + public void neighborChanged(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) + { + if(world.isRemote) return; + boolean powered = false; + BlockState adjacent; + BlockPos adjacent_pos; + if(state.get(SEGMENT) == SEGMENT_UPPER) { + adjacent_pos = pos.down(); + adjacent = world.getBlockState(adjacent_pos); + if(adjacent.getBlock()!=this) adjacent = null; + if(world.getRedstonePower(pos.up(), Direction.UP) > 0) { + powered = true; + } else if((adjacent!=null) && (world.isBlockPowered(pos.down(2)))) { + powered = true; + } + } else { + adjacent_pos = pos.up(); + adjacent = world.getBlockState(adjacent_pos); + if(adjacent.getBlock()!=this) adjacent = null; + if(world.isBlockPowered(pos)) { + powered = true; + } else if((adjacent!=null) && (world.getRedstonePower(pos.up(2), Direction.UP) > 0)) { + powered = true; + } + } + boolean sound = false; + if(powered != state.get(OPEN)) { + world.setBlockState(pos, state.with(OPEN, powered), 2|8|16); + sound = true; + } + if((adjacent != null) && (powered != adjacent.get(OPEN))) { + world.setBlockState(adjacent_pos, adjacent.with(OPEN, powered), 2|8|16); + sound = true; + } + if(sound) { + world.playSound(null, pos, powered?SoundEvents.BLOCK_IRON_DOOR_OPEN:SoundEvents.BLOCK_IRON_DOOR_CLOSE, SoundCategory.BLOCKS, 0.7f, 1.4f); + } + } + + // ------------------------------------------------------------------------------------------------------------------- + + private BlockState getInitialState(BlockState state, IWorld world, BlockPos pos) + { + final BlockState down = world.getBlockState(pos.down()); + if(down.getBlock() == this) return state.with(SEGMENT, SEGMENT_UPPER).with(OPEN, down.get(OPEN)).with(HORIZONTAL_FACING, down.get(HORIZONTAL_FACING)); + final BlockState up = world.getBlockState(pos.up()); + if(up.getBlock() == this) return state.with(SEGMENT, SEGMENT_LOWER).with(OPEN, up.get(OPEN)).with(HORIZONTAL_FACING, up.get(HORIZONTAL_FACING)); + return state.with(SEGMENT, SEGMENT_LOWER).with(OPEN, false); + } + +} diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFence.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFence.java index 1c0d8ed..d6dd43f 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFence.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFence.java @@ -8,6 +8,9 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorldReader; import wile.engineersdecor.libmc.blocks.StandardFenceBlock; import net.minecraft.block.*; @@ -18,4 +21,9 @@ public class BlockDecorFence extends StandardFenceBlock implements IDecorBlock public BlockDecorFence(long config, Block.Properties properties, double pole_width, double pole_height, double side_width, double side_max_y, double side_min_y) { super(config, properties, pole_width, pole_height, side_width, side_max_y, side_min_y); } + + @Override + protected boolean attachesTo(BlockState facingState, IWorldReader world, BlockPos facingPos, Direction side) + { return ((facingState.getBlock()) instanceof BlockDecorDoubleGate) || super.attachesTo(facingState, world, facingPos, side); } + } diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java index a9a3c24..5b19c34 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java @@ -113,7 +113,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID public static final int FIFO_INTERVAL = 20; public static final int HEAT_CAPACITY = 200; public static final int HEAT_INCREMENT = 20; - public static final int MAX_ENERGY_TRANSFER = 256; + public static final int MAX_ENERGY_TRANSFER = 1024; public static final int MAX_ENERGY_BUFFER = 32000; public static final int MAX_SPEED_SETTING = 2; public static final int NUM_OF_SLOTS = 7; @@ -134,6 +134,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID private static int energy_consumption_ = DEFAULT_SCALED_ENERGY_CONSUMPTION; private static int transfer_energy_consumption_ = DEFAULT_SCALED_ENERGY_CONSUMPTION / 8; private static int proc_speed_percent_ = DEFAULT_SPEED_PERCENT; + private static double speed_setting_factor_[] = {0.0, 1.0, 1.5, 2.0}; public static void on_config(int speed_percent, int standard_energy_per_tick, boolean with_automatic_inventory_pulling) { @@ -146,15 +147,16 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID // BTileEntity ----------------------------------------------------------------------------- - private int burntime_left_; - private int proc_time_elapsed_; - private int proc_time_needed_; - private int energy_stored_; - private int field_max_energy_stored_; - private int field_isburning_; - private int speed_; - private int tick_timer_; - private int fifo_timer_; + private int burntime_left_ = 0; + private int proc_time_elapsed_ = 0; + private int proc_time_needed_ = 0; + private int energy_stored_ = 0; + private int field_max_energy_stored_ = 0; + private int field_isburning_ = 0; + private int speed_ = 1; + private int tick_timer_ = 0; + private int fifo_timer_ = 0; + private boolean enabled_ = false; public BTileEntity() { this(ModContent.TET_SMALL_ELECTRICAL_FURNACE); } @@ -186,6 +188,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID proc_time_needed_ = nbt.getInt("CookTimeTotal"); energy_stored_ = nbt.getInt("Energy"); speed_ = nbt.getInt("SpeedSetting"); + speed_ = (speed_ < 0) ? (1) : ((speed_>3) ? 3 : speed_); } protected void writenbt(CompoundNBT nbt) @@ -469,7 +472,12 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID if(transferItems(FIFO_INPUT_0_SLOT_NO, SMELTING_INPUT_SLOT_NO, 64)) dirty = true; if(transferItems(FIFO_INPUT_1_SLOT_NO, FIFO_INPUT_0_SLOT_NO, 64)) { dirty = true; } else { shift_in = true; } } - if((!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty()) && (energy_stored_ >= energy_consumption_)) { + if(energy_stored_ < energy_consumption()) { + enabled_ = false; + } else if(energy_stored_ >= (MAX_ENERGY_BUFFER/2)) { + enabled_ = true; + } + if((!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty()) && (enabled_) && (speed_>0) && (speed_<4)) { IRecipe last_recipe = currentRecipe(); updateCurrentRecipe(); if(currentRecipe() != last_recipe) { @@ -487,7 +495,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID } if(burning() && can_smelt) { if(heat_up()) dirty = true; - proc_time_elapsed_ += (TICK_INTERVAL * proc_speed_percent_/100); + proc_time_elapsed_ += (int)(TICK_INTERVAL * proc_speed_percent_ * speed_setting_factor_[speed_] / 100); if(proc_time_elapsed_ >= proc_time_needed_) { proc_time_elapsed_ = 0; proc_time_needed_ = getSmeltingTimeNeeded(world, stacks_.get(SMELTING_INPUT_SLOT_NO)); @@ -511,7 +519,6 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID if(dirty) markDirty(); field_max_energy_stored_ = getMaxEnergyStored(); field_isburning_ = burning() ? 1 : 0; - //if(this.energy_stored_ < this.getMaxEnergyStored() / 5) this.energy_stored_ = this.getMaxEnergyStored(); } // Furnace -------------------------------------------------------------------------------------- @@ -597,15 +604,25 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID return dirty; } - // returns TE dirty + int energy_consumption() + { + switch(speed_) { + case 1: return energy_consumption_; + case 2: return energy_consumption_ * 2; + case 3: return energy_consumption_ * 4; + default: return 0; + } + } + private boolean heat_up() { - if(energy_stored_ < (energy_consumption_)) return false; + int p = energy_consumption(); + if((p<=0) || (energy_stored_ < p)) return false; if(burntime_left_ >= (HEAT_CAPACITY-HEAT_INCREMENT)) return false; - energy_stored_ -= energy_consumption_; + energy_stored_ -= p; burntime_left_ += HEAT_INCREMENT; this.markDirty(); - return true; + return true; // returns TE dirty } private void sync_blockstate() @@ -731,7 +748,12 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID @Override public void onClientPacketReceived(int windowId, PlayerEntity player, CompoundNBT nbt) - {} + { + if(!(inventory_ instanceof BTileEntity)) return; + BTileEntity te = (BTileEntity)inventory_; + if(nbt.contains("speed")) te.speed_ = MathHelper.clamp(nbt.getInt("speed"), 0, 3); + te.markDirty(); + } } //-------------------------------------------------------------------------------------------------------------------- @@ -773,6 +795,32 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID blit(x0+79, y0+30, 176, 15, 1+progress_px(17), 15); int we = energy_px(32, 8); if(we>0) blit(x0+88, y0+53, 185, 30, we, 13); + switch(getContainer().field(4)) { + case 0: blit(x0+144, y0+57, 180, 57, 6, 9); break; + case 1: blit(x0+142, y0+58, 190, 58, 9, 6); break; + case 2: blit(x0+144, y0+56, 200, 57, 6, 9); break; + case 3: blit(x0+143, y0+58, 210, 58, 9, 6); break; + default: break; + } + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) + { + BContainer container = (BContainer)getContainer(); + int mx = (int)(mouseX - getGuiLeft() + .5), my = (int)(mouseY - getGuiTop() + .5); + if((!isPointInRegion(136, 48, 28, 28, mouseX, mouseY))) { + return super.mouseClicked(mouseX, mouseY, mouseButton); + } else if(isPointInRegion(144, 64, 6, 10, mouseX, mouseY)) { + container.onGuiAction("speed", 0); + } else if(isPointInRegion(134, 58, 10, 6, mouseX, mouseY)) { + container.onGuiAction("speed", 1); + } else if(isPointInRegion(144, 48, 6, 10, mouseX, mouseY)) { + container.onGuiAction("speed", 2); + } else if(isPointInRegion(150, 58, 10, 6, mouseX, mouseY)) { + container.onGuiAction("speed", 3); + } + return true; } private int progress_px(int pixels) diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHopper.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHopper.java index 99241fa..ab26c07 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHopper.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHopper.java @@ -8,6 +8,8 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShapes; import wile.engineersdecor.ModContent; import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.libmc.blocks.StandardBlocks; @@ -64,6 +66,10 @@ public class BlockDecorHopper extends StandardBlocks.Directed implements IDecorB public boolean hasComparatorInputOverride(BlockState state) { return true; } + @Override + public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context) + { return VoxelShapes.fullCube(); } + @Override @SuppressWarnings("deprecation") public int getComparatorInputOverride(BlockState blockState, World world, BlockPos pos) diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java index 571b611..506a9a6 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java @@ -1,5 +1,5 @@ /* - * @file BlockDecorDirected.java + * @file BlockDecorSolarPanel.java * @author Stefan Wilhelm (wile) * @copyright (C) 2019 Stefan Wilhelm * @license MIT (see https://opensource.org/licenses/MIT) diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java index d7b0f31..ef33f97 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java @@ -168,6 +168,7 @@ public class BlockDecorWasteIncinerator extends StandardBlocks.BaseBlock impleme public static final int NUM_OF_FIELDS = 1; public static final int TICK_INTERVAL = 20; public static final int ENERGIZED_TICK_INTERVAL = 5; + public static final int INCINERATION_STACK_DECREMENT = 4; public static final int MAX_ENERGY_BUFFER = 16000; public static final int MAX_ENERGY_TRANSFER = 256; public static final int DEFAULT_ENERGY_CONSUMPTION = 16; @@ -192,7 +193,6 @@ public class BlockDecorWasteIncinerator extends StandardBlocks.BaseBlock impleme private int energy_stored_; protected NonNullList stacks_ = NonNullList.withSize(NUM_OF_SLOTS, ItemStack.EMPTY); - public BTileEntity() { this(ModContent.TET_WASTE_INCINERATOR); } @@ -505,7 +505,7 @@ public class BlockDecorWasteIncinerator extends StandardBlocks.BaseBlock impleme ItemStack first_stack = stacks_.get(0); boolean shift = !first_stack.isEmpty(); if(is_processing) { - processing_stack.shrink(1); + processing_stack.shrink(INCINERATION_STACK_DECREMENT); if(processing_stack.getCount() <= 0) { processing_stack = ItemStack.EMPTY; is_processing = false; @@ -518,22 +518,11 @@ public class BlockDecorWasteIncinerator extends StandardBlocks.BaseBlock impleme dirty = true; } if(shift) { - int max_shift_slot_no = BURN_SLOT_NO-1; - for(int i=1; i0; --i) { + transferred |= transferItems(i-1, i, getInventoryStackLimit()); + } + if((!is_processing) && (!transferred)) { shiftStacks(0, BURN_SLOT_NO); dirty = true; } diff --git a/1.14/src/main/java/wile/engineersdecor/libmc/blocks/StandardFenceBlock.java b/1.14/src/main/java/wile/engineersdecor/libmc/blocks/StandardFenceBlock.java index 3795ea0..b85af60 100644 --- a/1.14/src/main/java/wile/engineersdecor/libmc/blocks/StandardFenceBlock.java +++ b/1.14/src/main/java/wile/engineersdecor/libmc/blocks/StandardFenceBlock.java @@ -94,7 +94,7 @@ public class StandardFenceBlock extends WallBlock implements StandardBlocks.ISta protected void fillStateContainer(StateContainer.Builder builder) { super.fillStateContainer(builder); } - private boolean attachesTo(BlockState facingState, IWorldReader world, BlockPos facingPos, Direction side) + protected boolean attachesTo(BlockState facingState, IWorldReader world, BlockPos facingPos, Direction side) { final Block block = facingState.getBlock(); if((block instanceof FenceGateBlock) || (block instanceof StandardFenceBlock) || (block instanceof VariantWallBlock)) return true; diff --git a/1.14/src/main/java/wile/engineersdecor/libmc/datagen/LootTableGen.java b/1.14/src/main/java/wile/engineersdecor/libmc/datagen/LootTableGen.java index d25e21e..a1f5812 100644 --- a/1.14/src/main/java/wile/engineersdecor/libmc/datagen/LootTableGen.java +++ b/1.14/src/main/java/wile/engineersdecor/libmc/datagen/LootTableGen.java @@ -58,10 +58,13 @@ public class LootTableGen extends LootTableProvider final List blocks = block_listing.get(); blocks.forEach((block)->{ if((!(block instanceof StandardBlocks.IStandardBlock)) || (!(((StandardBlocks.IStandardBlock)block).hasDynamicDropList()))) { + System.out.println("Generating loot table for " + block.getRegistryName()); tables.put( block.getLootTable(), defaultBlockDrops(block.getRegistryName().getPath() + "_dlt", block) .setParameterSet(LootParameterSets.BLOCK).build()); + } else { + System.out.println("Dynamic drop list, skipping loot table for " + block.getRegistryName()); } }); return tables; diff --git a/1.14/src/main/resources/assets/engineersdecor/blockstates/steel_mesh_fence_gate.json b/1.14/src/main/resources/assets/engineersdecor/blockstates/steel_mesh_fence_gate.json new file mode 100644 index 0000000..65d6a4f --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/blockstates/steel_mesh_fence_gate.json @@ -0,0 +1,21 @@ +{ + "variants": { + "facing=north,open=false,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model" }, + "facing=north,open=true,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model_open" }, + "facing=south,open=false,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model" , "y":180 }, + "facing=south,open=true,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model_open", "y":180 }, + "facing=west,open=false,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model" , "y":270 }, + "facing=west,open=true,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model_open", "y":270 }, + "facing=east,open=false,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model" , "y":90 }, + "facing=east,open=true,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model_open", "y":90 }, + + "facing=north,open=false,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model" }, + "facing=north,open=true,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model_open" }, + "facing=south,open=false,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model" , "y":180 }, + "facing=south,open=true,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model_open", "y":180 }, + "facing=west,open=false,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model" , "y":270 }, + "facing=west,open=true,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model_open", "y":270 }, + "facing=east,open=false,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model" , "y":90 }, + "facing=east,open=true,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model_open", "y":90 } + } +} diff --git a/1.14/src/main/resources/assets/engineersdecor/lang/en_us.json b/1.14/src/main/resources/assets/engineersdecor/lang/en_us.json index 4f0424a..13ef2b5 100644 --- a/1.14/src/main/resources/assets/engineersdecor/lang/en_us.json +++ b/1.14/src/main/resources/assets/engineersdecor/lang/en_us.json @@ -151,6 +151,8 @@ "block.engineersdecor.steel_framed_window.help": "§6Steel framed triple glazed window. Well insulating. §r Does not connect to adjacent blocks like glass panes.", "block.engineersdecor.steel_mesh_fence": "Steel Mesh Fence", "block.engineersdecor.steel_mesh_fence.help": "§6Industrial style fence.§r\nDoes not connect do regular fences.", + "block.engineersdecor.steel_mesh_fence_gate": "Steel Mesh Fence Gate", + "block.engineersdecor.steel_mesh_fence_gate.help": "§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.", "block.engineersdecor.small_lab_furnace": "Small Laboratory Furnace", "block.engineersdecor.small_lab_furnace.help": "§6Small metal cased lab kiln.§r Solid fuel consuming, updraught. Slightly hotter and better isolated than a cobblestone furnace, therefore more efficient. Two auxiliary slots e.g. for storage. Two stack internal hopper fifos for input, output, and fuel. Place an external heater into a aux slot and connect power for electrical smelting speed boost.", "block.engineersdecor.small_electrical_furnace": "Small Electrical Furnace", diff --git a/1.14/src/main/resources/assets/engineersdecor/lang/ru_ru.json b/1.14/src/main/resources/assets/engineersdecor/lang/ru_ru.json index 9311f87..980e8b3 100644 --- a/1.14/src/main/resources/assets/engineersdecor/lang/ru_ru.json +++ b/1.14/src/main/resources/assets/engineersdecor/lang/ru_ru.json @@ -151,6 +151,8 @@ "block.engineersdecor.steel_framed_window.help": "§6Стальной каркас окна с тройным остеклением. Хорошо изолирует. §r Не подключается к смежным блокам, таким как стеклянные панели.", "block.engineersdecor.steel_mesh_fence": "Забор из стальной сетки", "block.engineersdecor.steel_mesh_fence.help": "§6Забор в индустриальном стиле.§r\nНе стыкуется с обычными заборами.", + "block.engineersdecor.steel_mesh_fence_gate": "Steel Mesh Fence Gate", + "block.engineersdecor.steel_mesh_fence_gate.help": "§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.", "block.engineersdecor.small_lab_furnace": "Компактная лабораторная печь", "block.engineersdecor.small_lab_furnace.help": "§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива сверху. Немного горячее и изолированней каменной, поэтому быстрее. Два вспомогательных слота, например для хранения. Два слота-воронки для ввода, вывода, и топлива. Поместите внешний нагреватель в слот AUX и подключите питание для электрического повышения скорости обработки.", "block.engineersdecor.small_electrical_furnace": "Компактная конвейерная электрическая печь", diff --git a/1.14/src/main/resources/assets/engineersdecor/lang/zh_cn.json b/1.14/src/main/resources/assets/engineersdecor/lang/zh_cn.json index ca27c1e..4a99805 100644 --- a/1.14/src/main/resources/assets/engineersdecor/lang/zh_cn.json +++ b/1.14/src/main/resources/assets/engineersdecor/lang/zh_cn.json @@ -151,6 +151,8 @@ "block.engineersdecor.steel_framed_window.help": "§6钢框三层玻璃窗。绝缘良好。§r不像玻璃板一样连接到相邻方块。", "block.engineersdecor.steel_mesh_fence": "钢丝栅栏", "block.engineersdecor.steel_mesh_fence.help": "§6工业式栅栏。§r\n不与普通栅栏连接。", + "block.engineersdecor.steel_mesh_fence_gate": "Steel Mesh Fence Gate", + "block.engineersdecor.steel_mesh_fence_gate.help": "§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.", "block.engineersdecor.small_lab_furnace": "小型实验室炉", "block.engineersdecor.small_lab_furnace.help": "§6小型金属壳实验室窑。§r消耗固体燃料,向上排气。 比圆石炉稍微热一点,隔热性也更好,因此效率更高。 有两个用于储存的辅助格。两个堆叠的内部漏斗对输入、输出和燃料进行队列管理。 在辅助格放置一个外置加热器并通入电力可以加快熔炼速度。", "block.engineersdecor.small_electrical_furnace": "小型电炉", diff --git a/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model.json b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model.json new file mode 100644 index 0000000..eb1db96 --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model.json @@ -0,0 +1,267 @@ +{ + "textures": { + "p": "engineersdecor:block/fence/steel_mesh_pole_side", + "t": "engineersdecor:block/fence/steel_mesh_top", + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence" + }, + "elements": [ + { + "from": [3.125, 13.625, 9.4375], + "to": [12.8125, 13.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"}, + "south": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 9.625, 9.4375], + "to": [12.8125, 9.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"}, + "south": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 5.625, 9.4375], + "to": [12.8125, 5.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"}, + "south": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 1.625, 9.4375], + "to": [12.8125, 1.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"}, + "east": {"uv": [8, 14.02, 8.1875, 14.375], "texture": "#s"}, + "south": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"}, + "west": {"uv": [7.8125, 14.02, 8, 14.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 11.625, 9.625], + "to": [12.8125, 11.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"}, + "south": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 12.625, 9.875], + "to": [5.3125, 13.23, 10.1875], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 9.5, 10]}, + "faces": { + "north": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"}, + "east": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"}, + "south": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"}, + "west": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"}, + "up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 90, "texture": "#s"}, + "down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 12.625, 9], + "to": [5.3125, 13.23, 9.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 9.5, 9.125]}, + "faces": { + "north": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"}, + "east": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"}, + "south": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"}, + "west": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"}, + "up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 90, "texture": "#s"}, + "down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.5, 7.625, 9.625], + "to": [12.9375, 7.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"}, + "south": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.5, 3.625, 9.625], + "to": [12.9375, 3.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"}, + "south": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [12.25, 1, 9.25], + "to": [13, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "south": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "west": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.75, 15, 9.25], + "to": [12.25, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "south": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.75, 1, 9.25], + "to": [12.25, 2, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, -5.5, 9.625]}, + "faces": { + "north": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "east": {"uv": [7.625, 0, 8.375, 1], "texture": "#s"}, + "south": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "west": {"uv": [7.625, 0, 8.375, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3, 1, 9.25], + "to": [3.75, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "east": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "south": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [13, 0, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"} + } + }, + { + "from": [0, 0, 6.5], + "to": [3, 16, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"} + } + }, + { + "from": [0.5, 0, 9.5], + "to": [3, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"}, + "down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"} + } + }, + { + "from": [13, 0, 9.5], + "to": [15.5, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"}, + "down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"} + } + }, + { + "from": [11.75, 1.375, 9.5], + "to": [12.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [7.75, 1.375, 9.5], + "to": [8.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [3.75, 1.375, 9.5], + "to": [4.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [9.75, 1.375, 9.5], + "to": [10.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [5.75, 1.375, 9.5], + "to": [6.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + } + ] +} \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model_open.json b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model_open.json new file mode 100644 index 0000000..43688c4 --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model_open.json @@ -0,0 +1,267 @@ +{ + "textures": { + "p": "engineersdecor:block/fence/steel_mesh_pole_side", + "t": "engineersdecor:block/fence/steel_mesh_top", + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence" + }, + "elements": [ + { + "from": [12.625, 13.625, 0.125], + "to": [12.8125, 13.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"}, + "west": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 9.625, 0.125], + "to": [12.8125, 9.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"}, + "west": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 5.625, 0.125], + "to": [12.8125, 5.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"}, + "west": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 1.625, 0.125], + "to": [12.8125, 1.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.8125, 14.02, 8, 14.375], "texture": "#s"}, + "east": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"}, + "south": {"uv": [8, 14.02, 8.1875, 14.375], "texture": "#s"}, + "west": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 11.625, 0.125], + "to": [12.625, 11.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"}, + "west": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.0625, 12.625, 0.125], + "to": [12.375, 13.23, 2.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"}, + "east": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"}, + "south": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"}, + "west": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"}, + "up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 180, "texture": "#s"}, + "down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.9375, 12.625, 0.125], + "to": [13.25, 13.23, 2.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"}, + "east": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"}, + "south": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"}, + "west": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"}, + "up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 180, "texture": "#s"}, + "down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 7.625, 0.5], + "to": [12.625, 7.98, 9.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"}, + "west": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 3.625, 0.5], + "to": [12.625, 3.98, 9.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"}, + "west": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 1, 9.25], + "to": [13, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "east": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "west": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 15, 0.75], + "to": [13, 16, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 1, 0.75], + "to": [13, 2, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 1, 0], + "to": [13, 16, 0.75], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "east": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "west": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [13, 0, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"} + } + }, + { + "from": [0, 0, 6.5], + "to": [3, 16, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"} + } + }, + { + "from": [0.5, 0, 9.5], + "to": [3, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"}, + "down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"} + } + }, + { + "from": [13, 0, 9.5], + "to": [15.5, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"}, + "down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"} + } + }, + { + "from": [12.5, 1.375, 8.75], + "to": [12.75, 15.855, 9.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 1.375, 4.75], + "to": [12.75, 15.855, 5.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 1.375, 0.75], + "to": [12.75, 15.855, 1.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 1.375, 6.75], + "to": [12.75, 15.855, 7.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 1.375, 2.75], + "to": [12.75, 15.855, 3.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"} + } + } + ] +} \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_inventory.json b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_inventory.json new file mode 100644 index 0000000..6f09fa8 --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_inventory.json @@ -0,0 +1,319 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence", + "t": "engineersdecor:block/fence/steel_mesh_top" + }, + "elements": [ + { + "from": [7.5, 0, 3], + "to": [8.5, 16, 4], + "faces": { + "north": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"}, + "east": {"uv": [12, 0, 13, 16], "texture": "#s"}, + "south": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"}, + "west": {"uv": [3, 0, 4, 16], "texture": "#s"}, + "up": {"uv": [7.5, 3, 8.5, 4], "texture": "#t"}, + "down": {"uv": [7.5, 12, 8.5, 13], "texture": "#s"} + } + }, + { + "from": [7.5, 0, 12], + "to": [8.5, 16, 13], + "faces": { + "north": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"}, + "east": {"uv": [3, 0, 4, 16], "texture": "#s"}, + "south": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"}, + "west": {"uv": [12, 0, 13, 16], "texture": "#s"}, + "up": {"uv": [7.5, 12, 8.5, 13], "texture": "#t"}, + "down": {"uv": [7.5, 3, 8.5, 4], "texture": "#s"} + } + }, + { + "from": [7.5, 15, 4], + "to": [8.5, 16, 12], + "faces": { + "east": {"uv": [4, 0, 12, 1], "texture": "#s"}, + "west": {"uv": [4, 0, 12, 1], "texture": "#s"}, + "up": {"uv": [7.5, 4, 8.5, 12], "texture": "#t"}, + "down": {"uv": [7.5, 4, 8.5, 12], "texture": "#s"} + } + }, + { + "from": [7.5, 7, 4], + "to": [8.5, 9, 5], + "faces": { + "east": {"uv": [11, 7, 12, 9], "texture": "#s"}, + "south": {"uv": [7.5, 7, 8.5, 9], "texture": "#s"}, + "west": {"uv": [4, 7, 5, 9], "texture": "#s"}, + "up": {"uv": [7.5, 4, 8.5, 5], "texture": "#t"}, + "down": {"uv": [7.5, 11, 8.5, 12], "texture": "#s"} + } + }, + { + "from": [7.5, 0, 4], + "to": [8.5, 0.5, 12], + "faces": { + "east": {"uv": [4, 15.5, 12, 16], "texture": "#s"}, + "west": {"uv": [4, 15.5, 12, 16], "texture": "#s"}, + "up": {"uv": [7.5, 4, 8.5, 12], "texture": "#t"}, + "down": {"uv": [7.5, 4, 8.5, 12], "texture": "#s"} + } + }, + { + "from": [8, 4.125, 3.5], + "to": [8.125, 4.5, 12.5], + "faces": { + "east": {"uv": [3.5, 11.5, 12.5, 11.875], "texture": "#s"}, + "west": {"uv": [3.5, 11.5, 12.5, 11.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 5.8125], + "to": [8.05, 15.375, 6.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [9.8125, 0.625, 10.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [5.8125, 0.625, 6.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 8.125, 3.5], + "to": [8.125, 8.5, 12.5], + "faces": { + "east": {"uv": [3.5, 7.5, 12.5, 7.875], "texture": "#s"}, + "west": {"uv": [3.5, 7.5, 12.5, 7.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 9.8125], + "to": [8.05, 15.375, 10.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [5.8125, 0.625, 6.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [9.8125, 0.625, 10.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 12.125, 3.5], + "to": [8.125, 12.5, 12.5], + "faces": { + "east": {"uv": [3.5, 3.5, 12.5, 3.875], "texture": "#s"}, + "west": {"uv": [3.5, 3.5, 12.5, 3.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [8, 2.125, 3.5], + "to": [8.125, 2.5, 12.5], + "faces": { + "east": {"uv": [3.5, 13.5, 12.5, 13.875], "texture": "#s"}, + "west": {"uv": [3.5, 13.5, 12.5, 13.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 3.8125], + "to": [8.05, 15.375, 4.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [11.8125, 0.625, 12.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [3.8125, 0.625, 4.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 6.125, 3.5], + "to": [8.125, 6.5, 12.5], + "faces": { + "east": {"uv": [3.5, 9.5, 12.5, 9.875], "texture": "#s"}, + "west": {"uv": [3.5, 9.5, 12.5, 9.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 7.8125], + "to": [8.05, 15.375, 8.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [7.8125, 0.625, 8.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [7.8125, 0.625, 8.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 10.125, 3.5], + "to": [8.125, 10.5, 12.5], + "faces": { + "east": {"uv": [3.5, 5.5, 12.5, 5.875], "texture": "#s"}, + "west": {"uv": [3.5, 5.5, 12.5, 5.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 11.8125], + "to": [8.05, 15.375, 12.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [3.8125, 0.625, 4.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [11.8125, 0.625, 12.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 14.125, 3.5], + "to": [8.125, 14.5, 12.5], + "faces": { + "east": {"uv": [3.5, 1.5, 12.5, 1.875], "texture": "#s"}, + "west": {"uv": [3.5, 1.5, 12.5, 1.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.875, 1.125, 3.5], + "to": [8, 1.5, 12.5], + "faces": { + "east": {"uv": [3.5, 14.5, 12.5, 14.875], "texture": "#s"}, + "west": {"uv": [3.5, 14.5, 12.5, 14.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.875, 5.125, 3.5], + "to": [8, 5.5, 12.5], + "faces": { + "east": {"uv": [3.5, 10.5, 12.5, 10.875], "texture": "#s"}, + "west": {"uv": [3.5, 10.5, 12.5, 10.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 6.8125], + "to": [8.05, 15.375, 7.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [8.8125, 0.625, 9.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [6.8125, 0.625, 7.1875, 16], "texture": "#s"} + } + }, + { + "from": [7.875, 9.125, 3.5], + "to": [8, 9.5, 12.5], + "faces": { + "east": {"uv": [3.5, 6.5, 12.5, 6.875], "texture": "#s"}, + "west": {"uv": [3.5, 6.5, 12.5, 6.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 10.8125], + "to": [8.05, 15.375, 11.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [4.8125, 0.625, 5.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [10.8125, 0.625, 11.1875, 16], "texture": "#s"} + } + }, + { + "from": [7.875, 13.125, 3.5], + "to": [8, 13.5, 12.5], + "faces": { + "east": {"uv": [3.5, 2.5, 12.5, 2.875], "texture": "#s"}, + "west": {"uv": [3.5, 2.5, 12.5, 2.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.875, 3.125, 3.5], + "to": [8, 3.5, 12.5], + "faces": { + "east": {"uv": [3.5, 12.5, 12.5, 12.875], "texture": "#s"}, + "west": {"uv": [3.5, 12.5, 12.5, 12.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 4.8125], + "to": [8.05, 15.375, 5.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [10.8125, 0.625, 11.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [4.8125, 0.625, 5.1875, 16], "texture": "#s"} + } + }, + { + "from": [7.875, 7.125, 3.5], + "to": [8, 7.5, 12.5], + "faces": { + "east": {"uv": [3.5, 8.5, 12.5, 8.875], "texture": "#s"}, + "west": {"uv": [3.5, 8.5, 12.5, 8.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 8.8125], + "to": [8.05, 15.375, 9.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [6.8125, 0.625, 7.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [8.8125, 0.625, 9.1875, 16], "texture": "#s"} + } + }, + { + "from": [7.875, 11.125, 3.5], + "to": [8, 11.5, 12.5], + "faces": { + "east": {"uv": [3.5, 4.5, 12.5, 4.875], "texture": "#s"}, + "west": {"uv": [3.5, 4.5, 12.5, 4.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [9, 35, 0], + "translation": [0, 0, -1], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_righthand": { + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 1.5, 0], + "scale": [0.3, 0.3, 0.3] + }, + "gui": { + "rotation": [30, 135, 0], + "translation": [-0.25, 0.5, 0], + "scale": [0.7, 0.7, 0.7] + }, + "fixed": { + "rotation": [0, 90, 0], + "translation": [0, 0, -0.25] + } + } +} \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model.json b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model.json new file mode 100644 index 0000000..6d0e71a --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model.json @@ -0,0 +1,220 @@ +{ + "textures": { + "p": "engineersdecor:block/fence/steel_mesh_pole_side", + "t": "engineersdecor:block/fence/steel_mesh_top", + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence" + }, + "elements": [ + { + "from": [3.125, 12.625, 9.4375], + "to": [12.8125, 12.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"}, + "south": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 8.625, 9.4375], + "to": [12.8125, 8.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"}, + "south": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 4.625, 9.4375], + "to": [12.8125, 4.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"}, + "south": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 0.625, 9.4375], + "to": [12.8125, 0.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"}, + "south": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 10.625, 9.625], + "to": [12.8125, 10.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"}, + "south": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.5, 6.625, 9.625], + "to": [12.9375, 6.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"}, + "south": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.5, 2.625, 9.625], + "to": [12.9375, 2.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"}, + "south": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [12.25, 0, 9.25], + "to": [13, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "south": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "west": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 90, "texture": "#s"} + } + }, + { + "from": [3.75, 14, 9.25], + "to": [12.25, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [2.25, 0, 13.75, 1], "texture": "#s"}, + "south": {"uv": [2.25, 0, 13.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3, 0, 9.25], + "to": [3.75, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "east": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "south": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 90, "texture": "#s"} + } + }, + { + "from": [13, 0, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"} + } + }, + { + "from": [0, 0, 6.5], + "to": [3, 16, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"} + } + }, + { + "from": [0.5, 0, 9.5], + "to": [3, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"} + } + }, + { + "from": [13, 0, 9.5], + "to": [15.5, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"} + } + }, + { + "from": [11.75, 0, 9.5], + "to": [12.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [7.75, 0, 9.5], + "to": [8.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [3.75, 0, 9.5], + "to": [4.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [9.75, 0, 9.5], + "to": [10.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [5.75, 0, 9.5], + "to": [6.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + } + ] +} \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model_open.json b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model_open.json new file mode 100644 index 0000000..fa0b52f --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model_open.json @@ -0,0 +1,222 @@ +{ + "textures": { + "p": "engineersdecor:block/fence/steel_mesh_pole_side", + "t": "engineersdecor:block/fence/steel_mesh_top", + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence" + }, + "elements": [ + { + "from": [12.625, 12.625, 0.125], + "to": [12.8125, 12.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"}, + "west": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 8.625, 0.125], + "to": [12.8125, 8.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"}, + "west": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 4.625, 0.125], + "to": [12.8125, 4.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"}, + "west": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 0.625, 0.125], + "to": [12.8125, 0.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"}, + "west": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 10.625, 0.125], + "to": [12.625, 10.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"}, + "west": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 6.625, 0.5], + "to": [12.625, 6.98, 9.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"}, + "west": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 2.625, 0.5], + "to": [12.625, 2.98, 9.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"}, + "west": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 0, 9.25], + "to": [13, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "east": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "west": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 14, 0.75], + "to": [13, 15, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 10.75], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 0, 0], + "to": [13, 15, 0.75], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "east": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "west": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [13, 0, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"} + } + }, + { + "from": [0, 0, 6.5], + "to": [3, 16, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"} + } + }, + { + "from": [0.5, 0, 9.5], + "to": [3, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"} + } + }, + { + "from": [13, 0, 9.5], + "to": [15.5, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"} + } + }, + { + "from": [12.5, 0, 8.75], + "to": [12.75, 14.855, 9.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 0, 4.75], + "to": [12.75, 14.855, 5.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 0, 0.75], + "to": [12.75, 14.855, 1.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 0, 6.75], + "to": [12.75, 14.855, 7.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 0, 2.75], + "to": [12.75, 14.855, 3.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"} + } + } + ] +} \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/item/steel_mesh_fence_gate.json b/1.14/src/main/resources/assets/engineersdecor/models/item/steel_mesh_fence_gate.json new file mode 100644 index 0000000..4490a9b --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/item/steel_mesh_fence_gate.json @@ -0,0 +1 @@ +{ "parent": "engineersdecor:block/fence/steel_mesh_fence_gate_inventory" } \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/textures/gui/small_electrical_furnace_gui.png b/1.14/src/main/resources/assets/engineersdecor/textures/gui/small_electrical_furnace_gui.png index 0177a2159c756879307a148d8659e098370cc037..0fdd087725253b78c0bb7f58d18f73bbbfc03449 100644 GIT binary patch literal 25902 zcmV*xKt8{TP)lfsgte|ay zA=)Ml5(r6T$Uj8Oa@YolAmxW-f&#!GX%pZsunS;;-JR~9#q4Xk``%NP{!y7(S*Pzj zw(kM=VsTGkF*E(BTj!jrtjsUJ{E{C3r@sq1X9NOcb8W7#gDV4+Q$nDK-~R32!iRoh z_7ev$;VXanS5N*I0QkEvyNq=>v^99M}KOvdNRH zzkBk_H^0ii{NfSg{eO0P`-2~y|Jr8T*NYy1{Bi!~Z~kU177M)a!VBoS2>=E&z?{KE z$bFC4bzo)?03rf_@^2zA10e=*&dAK55Kt_1KnMXT^Y$**x`P5QqS9ae6ZA&*{A} zG6RG%CvbTl6bR}k<(vSbG8X{EjGQyNuEW;$Ho%O@WMT%AnPnaUT^HS4%B|VIWlltd z5CRs91z5&9Ihg|loQP2_^VP>v#%BOA#^&FU&&Zj}eG?&20E59fmv7A?RX?p7w ze*b^=59UAr!5^OW+f%}q4*C6m^?yG3`OVgM2H??0AH}oJJ_qKqfFYYD^}W0hS?HYY zMbrgN07$-`k#Yvf1`9EQ%T7X02}A@6!4@4eqw6}^%(;w3Ww{cHk$`Lj-T%7L%O=cn z7gQFOES{8-ETCcp&@8OFpqUAoQ}g{0LNQ{x;JI#gUA(%vbVHFd1jT?cz-1mlH3WK( z#RxJOjGR*00J4!%zW|6Z>AGrMh{|Tk8EOfGY?_?%DdQMp1mt&eN}v$Lh>{sSwK_y( zKcio6HX~8_3;;pm#1I1d#iEQ$WWSShMvT$!Kg9apaw_kf0?GOyIRt<%M!Uyia3S+g zb}*;~2_YcmgeYJ8*vCF*_VWY((yV{Sn*#pH)A=v_7ys+Y-}~7gnDuYE9P$5rzJJdL zKR*9Ezw~3<{TB`sZr{NNKKSwZ2R7Ru2>vA31*Z#v-08{U6}Xk-exAXc?ImS36gfAG zj#(E1%4x5QPS$4TESsc!49W4P3o@m8lIR%4D3s61%;G(;oTMz9#?CM>XW6*LNRfIF zZs9{Vx85re6+@<9(FudiSn5XT`(k`RWy9z*WP1iI&$2%0%xpt;vhkfu(0BzzWJZWU zh%q3>h!6upjAo#-7z=%d6bOOpyE22T^UAGJ*G4*`4EuM1E}$Xri&eK{nqAef8wM?FEZSo07*WT0{*& zLRnz!V@V3KEMcJrBzCkh^u%>>DQsS4K?WkQy6`Bcm7a=_xSz#cN;xBjh@6we$SnVJ zu{#kG2sfX54%^$?w%`x;_i^>wZZT2>WI3U8O6CnTn~xct%%u~2Lk?d1JT=TD&%%de zYA`@R&c!3q&>>K8&j`+wsT(rLJ5Y}$sJFr}qf9^zA9Ulp6CKWo%0q2F4}wjAim}iy zA3Xm&wzs$K(D>@DTex~{*RX+@l7Y{E`TMr|z=Yp^I=%C+{rd6mzwe)!^$%YRIDDD^ z$_Ib*s=k@{3tuLIxw36^uVG1SncoXhX1E3BJRK98skB_OAT8lIGrO$~AyLCisB zmbr;x5I0|qkj443IdwA>kgI@~gzBd1Y1yY_pePaH=;#QG`5g24TwH6aI71UYko`^p z�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 literal 22957 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 W3(FSP0H!UoS()2ksyFj~^#1_OyMS5% diff --git a/1.14/src/main/resources/data/engineersdecor/loot_tables/blocks/steel_mesh_fence_gate.json b/1.14/src/main/resources/data/engineersdecor/loot_tables/blocks/steel_mesh_fence_gate.json new file mode 100644 index 0000000..8006fc0 --- /dev/null +++ b/1.14/src/main/resources/data/engineersdecor/loot_tables/blocks/steel_mesh_fence_gate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "steel_mesh_fence_gate_dlt", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "engineersdecor:steel_mesh_fence_gate" + } + ] + } + ] +} \ No newline at end of file diff --git a/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/doors.json b/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/doors.json new file mode 100644 index 0000000..f2e5fa0 --- /dev/null +++ b/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/doors.json @@ -0,0 +1,18 @@ +{ + "name": "Gates and Doors", + "icon": "engineersdecor:steel_mesh_fence_gate", + "category": "buildingblocks", + "sortnum": 1060, + "pages": [ + { + "type": "spotlight", + "title": "Steel Mesh Fence Gate", + "item": "engineersdecor:steel_mesh_fence_gate", + "text": "A fence gate fitting the style of the $(o)Steel Mesh Fence$(). It can be placed one block high for normal fencing, or doubled for higher cage fences, and will form a fence door accordingly.$(br)Redstone open/close signals are accepted for the bottom segment from all sides, for the top segment only from above." + }, + { + "type": "text", + "text": "" + } + ] +} diff --git a/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/ladders.json b/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/ladders.json index df512ab..342a8ea 100644 --- a/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/ladders.json +++ b/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/ladders.json @@ -2,7 +2,7 @@ "name": "Ladders", "icon": "engineersdecor:treated_wood_ladder", "category": "buildingblocks", - "sortnum": 1070, + "sortnum": 1080, "pages": [ { "type": "spotlight", diff --git a/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/windows.json b/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/windows.json index a1dacee..316a6a6 100644 --- a/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/windows.json +++ b/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/windows.json @@ -2,7 +2,7 @@ "name": "Windows", "icon": "engineersdecor:treated_wood_window", "category": "buildingblocks", - "sortnum": 1060, + "sortnum": 1070, "pages": [ { "type": "spotlight", diff --git a/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/crafting/small_electrical_furnace.json b/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/crafting/small_electrical_furnace.json index ac8fc4e..6cfd386 100644 --- a/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/crafting/small_electrical_furnace.json +++ b/1.14/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/crafting/small_electrical_furnace.json @@ -20,7 +20,7 @@ }, { "type": "text", - "text": "" + "text": "§nSpeed override switch$()$(br)A four-position switch in the bottom right area of the GUI allows to alter the processing speed of the furnace. Default is position 1 (normal). At high power expenses, you can alter this: $(br)$(li)Position 0: OFF$(li)Position 1: x1.0 -> RF x1$(li)Position 2: x1.5 -> RF x2$(li)Position 3: x2.0 -> RF x4$(br2)(Positions 0..4 are down, left, top, right)." } ] } diff --git a/1.14/src/main/resources/data/engineersdecor/recipes/independent/steel_mesh_fence_gate_recipe.json b/1.14/src/main/resources/data/engineersdecor/recipes/independent/steel_mesh_fence_gate_recipe.json new file mode 100644 index 0000000..26a4fc8 --- /dev/null +++ b/1.14/src/main/resources/data/engineersdecor/recipes/independent/steel_mesh_fence_gate_recipe.json @@ -0,0 +1,25 @@ +{ + "conditions": [ + { + "type": "engineersdecor:optional", + "result": "engineersdecor:steel_mesh_fence_gate", + "required": ["engineersdecor:thin_steel_pole", "engineersdecor:steel_mesh_fence"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "PFP" + ], + "key": { + "P": { + "item": "engineersdecor:thin_steel_pole" + }, + "F": { + "item": "engineersdecor:steel_mesh_fence" + } + }, + "result": { + "item": "engineersdecor:steel_mesh_fence_gate", + "count": 2 + } +} diff --git a/1.15/gradle.properties b/1.15/gradle.properties index 8b16b9f..8bb0711 100644 --- a/1.15/gradle.properties +++ b/1.15/gradle.properties @@ -2,7 +2,7 @@ org.gradle.daemon=false org.gradle.jvmargs=-Xmx8G version_minecraft=1.15.2 -version_forge_minecraft=1.15.2-31.1.18 -version_fml_mappings=20191105-1.14.3 +version_forge_minecraft=1.15.2-31.1.19 +version_fml_mappings=20200225-1.15.1 version_jei=1.15.2:6.0.0.2 -version_engineersdecor=1.0.19-b5 +version_engineersdecor=1.0.20-b1 diff --git a/1.15/meta/update.json b/1.15/meta/update.json index 0d11883..53aa50c 100644 --- a/1.15/meta/update.json +++ b/1.15/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.15.2": { + "1.0.20-b1": "[A] Electrical Furnace: Added four-position speed switch (off, 100%, 150%, 200%), power consumption increases at higher rate (off, 100%, 200%, 400%).\n[A] Added Steel Mesh Fence Gate (single or double height gate fitting to the Steel Mesh Fence).\n[M] Waste Incinerator processing speed tweaked.\n[F] Fixed steel table visual glitch (thx Urbanxx001).\n[M] MCP/Forge mappings updated.", "1.0.19-b5": "[A] Added right-click display of power and progress information for Block Breaker, Solar Panel, and Tree Cutter.\n[A] Solar Panel power curve tuned.\n[A] Mod manual 1st edition release recipe added.\n[A] Factory Hopper: Resetting NBT when breaking with empty inventory (for stacking), enabled item cap for all sides.\n[M] Electrical Furnace model polished.", "1.0.19-b4": "[A] Ported primary Immersive Engineering dependent recipes (alternative recipes will still work if IE is not installed).\n[F] Blacklisted Treated Wood Crafting Table in inventorysorter mod (issue #88, thx Nachtflame).\n[M] Furni comparator output overrides reflect input slots and empty fuel state/power-cutoff.\n[M] Solar Panel config: Default value for internal battery capacity increased.\n[F] Block Placer: Shifted GUI player slots 1px to the right.\n[A] Added mod block tags for slabs, stairs, and walls (PR#89, thanks CrudeAustin for the data).\n[A] Added experimental Patchouli manual (creative only).", "1.0.19-b3": "[M] Config tweaks: Value limit ranges increased to facilitate modpacking.\n[A] Factory Hopper: Added bottom item handler (CR#227).\n[M] Block shapes refined.\n[F] Fixed duping bug (issue #87, thx Nachtflame)", @@ -14,6 +15,6 @@ }, "promos": { "1.15.2-recommended": "", - "1.15.2-latest": "1.0.19-b5" + "1.15.2-latest": "1.0.20-b1" } } \ No newline at end of file diff --git a/1.15/readme.md b/1.15/readme.md index 1e76d2d..2412adb 100644 --- a/1.15/readme.md +++ b/1.15/readme.md @@ -11,6 +11,13 @@ Mod sources for Minecraft version 1.15.1. ## Version history + - v1.0.20-b1 [A] Electrical Furnace: Added four-position speed switch (off, 100%, 150%, 200%), power consumption + increases at higher rate (off, 100%, 200%, 400%). + [A] Added Steel Mesh Fence Gate (single or double height gate fitting to the Steel Mesh Fence). + [M] Waste Incinerator processing speed tweaked. + [F] Fixed steel table visual glitch (thx Urbanxx001). + [M] MCP/Forge mappings updated. + - v1.0.19-b5 [A] Added right-click display of power and progress information for Block Breaker, Solar Panel, and Tree Cutter. [A] Solar Panel power curve tuned. [A] Mod manual 1st edition release recipe added. diff --git a/1.15/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java.disabled b/1.15/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java.disabled deleted file mode 100644 index 83ff933..0000000 --- a/1.15/src/main/java/blusunrize/immersiveengineering/api/fluid/IFluidPipe.java.disabled +++ /dev/null @@ -1,18 +0,0 @@ -/* - * BluSunrize - * Copyright (c) 2017 - * - * This code is licensed under "Blu's License of Common Sense" - * Details can be found in the license file in the root folder of this project - */ - -package blusunrize.immersiveengineering.api.fluid; - -import net.minecraft.util.Direction; - -public interface IFluidPipe -{ - boolean canOutputPressurized(boolean consumePower); - - boolean hasOutputConnection(Direction side); -} diff --git a/1.15/src/main/java/wile/engineersdecor/ModContent.java b/1.15/src/main/java/wile/engineersdecor/ModContent.java index da59ce2..2300720 100644 --- a/1.15/src/main/java/wile/engineersdecor/ModContent.java +++ b/1.15/src/main/java/wile/engineersdecor/ModContent.java @@ -195,42 +195,42 @@ public class ModContent public static final BlockDecorGlassBlock PANZERGLASS_BLOCK = (BlockDecorGlassBlock)(new BlockDecorGlassBlock( BlockDecor.CFG_TRANSLUCENT, - Block.Properties.create(Material.GLASS, MaterialColor.AIR).hardnessAndResistance(5f, 2000f).sound(SoundType.METAL).func_226896_b_() + Block.Properties.create(Material.GLASS, MaterialColor.AIR).hardnessAndResistance(5f, 2000f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "panzerglass_block")); public static final BlockDecorSlab PANZERGLASS_SLAB = (BlockDecorSlab)(new BlockDecorSlab( BlockDecor.CFG_TRANSLUCENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(5f, 2000f).sound(SoundType.METAL).func_226896_b_() + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(5f, 2000f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "panzerglass_slab")); // ------------------------------------------------------------------------------------------------------------------- public static final BlockDecorLadder METAL_RUNG_LADDER = (BlockDecorLadder)(new BlockDecorLadder( BlockDecor.CFG_DEFAULT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1.0f, 25f).sound(SoundType.METAL).func_226896_b_() + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1.0f, 25f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "metal_rung_ladder")); public static final BlockDecorLadder METAL_RUNG_STEPS = (BlockDecorLadder)(new BlockDecorLadder( BlockDecor.CFG_DEFAULT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1.0f, 25f).sound(SoundType.METAL).func_226896_b_() + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1.0f, 25f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "metal_rung_steps")); public static final BlockDecorLadder TREATED_WOOD_LADDER = (BlockDecorLadder)(new BlockDecorLadder( BlockDecor.CFG_DEFAULT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1.0f, 25f).sound(SoundType.WOOD).func_226896_b_() + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1.0f, 25f).sound(SoundType.WOOD).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_ladder")); // ------------------------------------------------------------------------------------------------------------------- public static final BlockDecor.WaterLoggable TREATED_WOOD_TABLE = (BlockDecor.WaterLoggable)(new BlockDecor.WaterLoggable( BlockDecor.CFG_CUTOUT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(1,0,1, 15,15.9,15) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_table")); public static final BlockDecorChair TREATED_WOOD_STOOL = (BlockDecorChair)(new BlockDecorChair( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(4,7,4, 12,8.8,12), Auxiliaries.getPixeledAABB(7,0,7, 9,7,9), @@ -241,43 +241,43 @@ public class ModContent public static final BlockDecor.WaterLoggable TREATED_WOOD_SIDE_TABLE = (BlockDecor.WaterLoggable)(new BlockDecor.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(2,0,2, 14,15.9,14) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_side_table")); public static final BlockDecor.DirectedWaterLoggable TREATED_WOOD_WINDOWSILL = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_FACING_PLACEMENT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(0.5,15,10.5, 15.5,16,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_windowsill")); public static final BlockDecor.DirectedWaterLoggable TREATED_WOOD_BROAD_WINDOWSILL = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_FACING_PLACEMENT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(0,14.5,4, 16,16,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_broad_windowsill")); public static final BlockDecor.DirectedWaterLoggable INSET_LIGHT_IRON = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).lightValue(15), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).lightValue(15).notSolid(), Auxiliaries.getPixeledAABB(5.2,5.2,0, 10.8,10.8,0.3) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_inset_light")); public static final BlockDecor.DirectedWaterLoggable FLOOR_EDGE_LIGHT_IRON = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).lightValue(15), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).lightValue(15).notSolid(), Auxiliaries.getPixeledAABB(5,0,0, 11,2,0.5) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_floor_edge_light")); public static final BlockDecor.WaterLoggable STEEL_TABLE = (BlockDecor.WaterLoggable)(new BlockDecor.WaterLoggable( BlockDecor.CFG_CUTOUT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(0,0,0, 16,16,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_table")); public static final BlockDecorFloorGrating STEEL_FLOOR_GRATING = (BlockDecorFloorGrating)(new BlockDecorFloorGrating( BlockDecor.CFG_CUTOUT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(0,14,0, 16,15.5,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_floor_grating")); @@ -285,13 +285,13 @@ public class ModContent public static final BlockDecorWindow TREATED_WOOD_WINDOW = (BlockDecorWindow)(new BlockDecorWindow( BlockDecor.CFG_LOOK_PLACEMENT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.GLASS), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.GLASS).notSolid(), Auxiliaries.getPixeledAABB(0,0,7, 16,16,9) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_window")); public static final BlockDecorWindow STEEL_FRAMED_WINDOW = (BlockDecorWindow)(new BlockDecorWindow( BlockDecor.CFG_LOOK_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.GLASS), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.GLASS).notSolid(), Auxiliaries.getPixeledAABB(0,0,7.5, 16,16,8.5) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_framed_window")); @@ -299,49 +299,49 @@ public class ModContent public static final BlockDecorStraightPole TREATED_WOOD_POLE = (BlockDecorStraightPole)(new BlockDecorStraightPole( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_pole")); public static final BlockDecorStraightPole TREATED_WOOD_POLE_HEAD = (BlockDecorStraightPole)(new BlockDecorStraightPole( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_pole_head")); public static final BlockDecorStraightPole TREATED_WOOD_POLE_SUPPORT = (BlockDecorStraightPole)(new BlockDecorStraightPole( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(5.8,5.8,0, 10.2,10.2,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_pole_support")); public static final BlockDecorStraightPole THIN_STEEL_POLE = (BlockDecorStraightPole)(new BlockDecorStraightPole( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(6,6,0, 10,10,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "thin_steel_pole")); public static final BlockDecorStraightPole THIN_STEEL_POLE_HEAD = (BlockDecorStraightPole)(new BlockDecorStraightPole( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(6,6,0, 10,10,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "thin_steel_pole_head")); public static final BlockDecorStraightPole THICK_STEEL_POLE = (BlockDecorStraightPole)(new BlockDecorStraightPole( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(5,5,0, 11,11,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "thick_steel_pole")); public static final BlockDecorStraightPole THICK_STEEL_POLE_HEAD = (BlockDecorStraightPole)(new BlockDecorStraightPole( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_IF_SAME, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(5,5,0, 11,11,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "thick_steel_pole_head")); public static final BlockDecorHorizontalSupport STEEL_DOUBLE_T_SUPPORT = (BlockDecorHorizontalSupport)(new BlockDecorHorizontalSupport( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(5,11,0, 11,16,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_double_t_support")); @@ -349,37 +349,37 @@ public class ModContent public static final BlockDecor.DirectedWaterLoggable SIGN_MODLOGO = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1000f).sound(SoundType.WOOD).lightValue(1), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1000f).sound(SoundType.WOOD).lightValue(1).notSolid(), Auxiliaries.getPixeledAABB(0,0,15.6, 16,16,16.0) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_decor")); public static final BlockDecor.DirectedWaterLoggable SIGN_HOTWIRE = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_hotwire")); public static final BlockDecor.DirectedWaterLoggable SIGN_DANGER = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_danger")); public static final BlockDecor.DirectedWaterLoggable SIGN_DEFENSE = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_defense")); public static final BlockDecor.DirectedWaterLoggable SIGN_FACTORY_AREA = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_factoryarea")); public static final BlockDecor.DirectedWaterLoggable SIGN_EXIT = (BlockDecor.DirectedWaterLoggable)(new BlockDecor.DirectedWaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Auxiliaries.getPixeledAABB(3,7,15.6, 13,13,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_exit")); @@ -387,7 +387,7 @@ public class ModContent public static final BlockDecorCraftingTable.CraftingTableBlock TREATED_WOOD_CRAFTING_TABLE = (BlockDecorCraftingTable.CraftingTableBlock)(new BlockDecorCraftingTable.CraftingTableBlock( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 15f).sound(SoundType.WOOD), + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 15f).sound(SoundType.WOOD).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(0,13,0, 16,16,16), Auxiliaries.getPixeledAABB(1, 0,1, 15,13,15) @@ -396,7 +396,7 @@ public class ModContent public static final BlockDecorFurnace SMALL_LAB_FURNACE = (BlockDecorFurnace)(new BlockDecorFurnace( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(1,0,1, 15, 1,15), Auxiliaries.getPixeledAABB(0,1,1, 16,16,16), @@ -405,7 +405,7 @@ public class ModContent public static final BlockDecorFurnaceElectrical SMALL_ELECTRICAL_FURNACE = (BlockDecorFurnaceElectrical)(new BlockDecorFurnaceElectrical( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(0, 0,0, 16,11,16), Auxiliaries.getPixeledAABB(1,11,0, 15,12,16), @@ -416,14 +416,14 @@ public class ModContent )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "small_electrical_furnace")); public static final BlockDecorDropper FACTORY_DROPPER = (BlockDecorDropper)(new BlockDecorDropper( - BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(0,0,1, 16,16,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "factory_dropper")); public static final BlockDecorPlacer FACTORY_PLACER = (BlockDecorPlacer)(new BlockDecorPlacer( - BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|BlockDecor.CFG_OPPOSITE_PLACEMENT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(0,0,2, 16,16,16), Auxiliaries.getPixeledAABB( 0,0,0, 1,16, 2), @@ -432,8 +432,8 @@ public class ModContent )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "factory_placer")); public static final BlockDecorBreaker SMALL_BLOCK_BREAKER = (BlockDecorBreaker)(new BlockDecorBreaker( - BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(1,0,0, 15, 4, 7), Auxiliaries.getPixeledAABB(1,0,7, 15,12,16), @@ -446,7 +446,7 @@ public class ModContent public static final BlockDecorHopper FACTORY_HOPPER = (BlockDecorHopper)(new BlockDecorHopper( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(),()->{ + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(),()->{ final AxisAlignedBB[] down_aabbs = new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB( 5, 0, 5, 11, 1,11), Auxiliaries.getPixeledAABB( 4, 1, 4, 12, 7,12), @@ -498,13 +498,13 @@ public class ModContent public static final BlockDecorMineralSmelter SMALL_MINERAL_SMELTER = (BlockDecorMineralSmelter)(new BlockDecorMineralSmelter( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(1.1,0,1.1, 14.9,16,14.9) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "small_mineral_smelter")); public static final BlockDecorSolarPanel SMALL_SOLAR_PANEL = (BlockDecorSolarPanel)(new BlockDecorSolarPanel( BlockDecor.CFG_CUTOUT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(0,0,0, 16,2,16), Auxiliaries.getPixeledAABB(6,1.5,3, 10,10.5,13), @@ -513,7 +513,7 @@ public class ModContent public static final BlockDecorMilker SMALL_MILKING_MACHINE = (BlockDecorMilker)(new BlockDecorMilker( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB( 1, 1,0, 15,14,10), Auxiliaries.getPixeledAABB( 0,14,0, 16,16,13), @@ -525,7 +525,7 @@ public class ModContent public static final BlockDecorTreeCutter SMALL_TREE_CUTTER = (BlockDecorTreeCutter)(new BlockDecorTreeCutter( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB( 0,0, 0, 16,3,16), Auxiliaries.getPixeledAABB( 0,3, 0, 3,8,16), @@ -539,7 +539,7 @@ public class ModContent public static final BlockDecorPipeValve STRAIGHT_CHECK_VALVE = (BlockDecorPipeValve)(new BlockDecorPipeValve( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK, BlockDecorPipeValve.CFG_CHECK_VALVE, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(2,2, 0, 14,14, 2), Auxiliaries.getPixeledAABB(2,2,14, 14,14,16), @@ -551,7 +551,7 @@ public class ModContent public static final BlockDecorPipeValve STRAIGHT_REDSTONE_VALVE = (BlockDecorPipeValve)(new BlockDecorPipeValve( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK, BlockDecorPipeValve.CFG_REDSTONE_CONTROLLED_VALVE, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(2,2, 0, 14,14, 2), Auxiliaries.getPixeledAABB(2,2,14, 14,14,16), @@ -563,7 +563,7 @@ public class ModContent public static final BlockDecorPipeValve STRAIGHT_REDSTONE_ANALOG_VALVE = (BlockDecorPipeValve)(new BlockDecorPipeValve( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK, BlockDecorPipeValve.CFG_REDSTONE_CONTROLLED_VALVE|BlockDecorPipeValve.CFG_ANALOG_VALVE, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(2,2, 0, 14,14, 2), Auxiliaries.getPixeledAABB(2,2,14, 14,14,16), @@ -574,7 +574,7 @@ public class ModContent public static final BlockDecorPassiveFluidAccumulator PASSIVE_FLUID_ACCUMULATOR = (BlockDecorPassiveFluidAccumulator)(new BlockDecorPassiveFluidAccumulator( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_OPPOSITE_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(3,3,0, 13,13, 1), Auxiliaries.getPixeledAABB(0,0,1, 16,16,16) @@ -583,7 +583,7 @@ public class ModContent public static final BlockDecorFluidFunnel SMALL_FLUID_FUNNEL = (BlockDecorFluidFunnel)(new BlockDecorFluidFunnel( BlockDecor.CFG_CUTOUT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_226896_b_(), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), new AxisAlignedBB[]{ Auxiliaries.getPixeledAABB(0, 0,0, 16,14,16), Auxiliaries.getPixeledAABB(1,14,1, 15,15,15), @@ -595,57 +595,63 @@ public class ModContent public static final BlockDecorWall CONCRETE_WALL = (BlockDecorWall)(new BlockDecorWall( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, - Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(2f, 50f).sound(SoundType.STONE) + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(2f, 50f).sound(SoundType.STONE).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "concrete_wall")); public static final BlockDecorHalfSlab HALFSLAB_CONCRETE = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, - Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(1f, 10f).sound(SoundType.STONE) + Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(1f, 10f).sound(SoundType.STONE).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_concrete")); public static final BlockDecorHalfSlab HALFSLAB_TREATEDWOOD = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, - Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 4f).sound(SoundType.WOOD) + Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 4f).sound(SoundType.WOOD).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_treated_wood")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALIRON = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_iron")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALSTEEL = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_steel")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALCOPPER = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_copper")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALGOLD = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_gold")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALALUMINIUM = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL).notSolid() )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_aluminum")); // ------------------------------------------------------------------------------------------------------------------- public static final BlockDecorFence STEEL_MESH_FENCE = (BlockDecorFence)(new BlockDecorFence( BlockDecor.CFG_CUTOUT, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), 1.5, 16, 0.25, 0, 16 )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_mesh_fence")); + public static final BlockDecorDoubleGate STEEL_MESH_FENCE_GATE = (BlockDecorDoubleGate)(new BlockDecorDoubleGate( + BlockDecor.CFG_CUTOUT, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).notSolid(), + Auxiliaries.getPixeledAABB(0,0,6.5, 16,16,9.5) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "steel_mesh_fence_gate")); + // ------------------------------------------------------------------------------------------------------------------- public static final BlockDecorTest TEST_BLOCK = (BlockDecorTest)(new BlockDecorTest( BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK, - Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(0f, 32000f).sound(SoundType.METAL), + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(0f, 32000f).sound(SoundType.METAL).notSolid(), Auxiliaries.getPixeledAABB(0,0,0, 16,16,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "test_block")); @@ -718,6 +724,7 @@ public class ModContent FLOOR_EDGE_LIGHT_IRON, STEEL_FLOOR_GRATING, STEEL_MESH_FENCE, + STEEL_MESH_FENCE_GATE, TREATED_WOOD_POLE, TREATED_WOOD_POLE_HEAD, TREATED_WOOD_POLE_SUPPORT, @@ -1001,13 +1008,13 @@ public class ModContent if(block instanceof IStandardBlock) { switch(((IStandardBlock)block).getRenderTypeHint()) { case CUTOUT: - RenderTypeLookup.setRenderLayer(block, RenderType.func_228643_e_()/*cutout*/); + RenderTypeLookup.setRenderLayer(block, RenderType.getCutout()); break; case CUTOUT_MIPPED: - RenderTypeLookup.setRenderLayer(block, RenderType.func_228641_d_()/*cutout_mipped*/); + RenderTypeLookup.setRenderLayer(block, RenderType.getCutoutMipped()); break; case TRANSLUCENT: - RenderTypeLookup.setRenderLayer(block, RenderType.func_228645_f_()/*transparent*/); + RenderTypeLookup.setRenderLayer(block, RenderType.getTranslucent()); break; case SOLID: break; diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorBreaker.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorBreaker.java index 23534b8..8f594c0 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorBreaker.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorBreaker.java @@ -113,11 +113,11 @@ public class BlockDecorBreaker extends BlockDecor.HorizontalWaterLoggable implem @Override @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { TileEntity te = world.getTileEntity(pos); if(te instanceof BTileEntity) ((BTileEntity)te).state_message(player); - return true; + return ActionResultType.SUCCESS; } //-------------------------------------------------------------------------------------------------------------------- diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java index 02aaeec..70ab02c 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java @@ -10,17 +10,18 @@ package wile.engineersdecor.blocks; import wile.engineersdecor.ModContent; import wile.engineersdecor.ModEngineersDecor; +import net.minecraft.world.server.ServerWorld; +import net.minecraft.world.IWorldReader; +import net.minecraft.world.World; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.*; import net.minecraft.entity.monster.*; import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.IPacket; import net.minecraft.util.math.*; -import net.minecraft.world.IWorldReader; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.*; -import net.minecraft.world.World; import net.minecraftforge.fml.network.FMLPlayMessages; import net.minecraftforge.fml.network.NetworkHooks; import java.util.List; @@ -45,11 +46,11 @@ public class BlockDecorChair extends BlockDecor.HorizontalWaterLoggable implemen { super(config, builder.tickRandomly(), unrotatedAABBs); } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(sitting_enabled && (!world.isRemote)) { EntityChair.sit(world, player, pos); } - return true; + if(!sitting_enabled) return ActionResultType.PASS; + if(!world.isRemote) EntityChair.sit(world, player, pos); + return ActionResultType.SUCCESS; } @Override @@ -64,8 +65,7 @@ public class BlockDecorChair extends BlockDecor.HorizontalWaterLoggable implemen { return 10; } @Override - @SuppressWarnings("deprecation") - public void tick(BlockState state, World world, BlockPos pos, Random rnd) + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random rnd) { if((!sitting_enabled) || (sitting_probability < 1e-6)) return; final List entities = world.getEntitiesWithinAABB(MobEntity.class, new AxisAlignedBB(pos).grow(2,1,2).expand(0,1,0), e->true); diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java index 661f803..e4bf4d8 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java @@ -93,15 +93,14 @@ public class BlockDecorCraftingTable { return new BlockDecorCraftingTable.CraftingTableTileEntity(); } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; final TileEntity te = world.getTileEntity(pos); - if(!(te instanceof CraftingTableTileEntity)) return true; - if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return true; + if(!(te instanceof CraftingTableTileEntity)) return ActionResultType.FAIL; + if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return ActionResultType.FAIL; NetworkHooks.openGui((ServerPlayerEntity)player,(INamedContainerProvider)te); - return true; + return ActionResultType.SUCCESS; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorDoubleGate.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorDoubleGate.java new file mode 100644 index 0000000..927fd2e --- /dev/null +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorDoubleGate.java @@ -0,0 +1,155 @@ +/* + * @file BlockDecorDoubleGate.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Gate blocks that can be one or two segments high. + */ +package wile.engineersdecor.blocks; + +import wile.engineersdecor.libmc.detail.Auxiliaries; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.IntegerProperty; +import net.minecraft.state.StateContainer; +import net.minecraft.block.*; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.pathfinding.PathType; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Arrays; + +public class BlockDecorDoubleGate extends BlockDecor.HorizontalWaterLoggable implements IDecorBlock +{ + public static final IntegerProperty SEGMENT = IntegerProperty.create("segment", 0, 1); + public static final BooleanProperty OPEN = FenceGateBlock.OPEN; + public static final int SEGMENT_LOWER = 0; + public static final int SEGMENT_UPPER = 1; + protected final ArrayList collision_shapes_; + + public BlockDecorDoubleGate(long config, Block.Properties properties, AxisAlignedBB aabb) + { this(config, properties, new AxisAlignedBB[]{aabb}); } + + public BlockDecorDoubleGate(long config, Block.Properties properties, AxisAlignedBB[] aabbs) + { + super(config, properties, aabbs); + AxisAlignedBB[] caabbs = new AxisAlignedBB[aabbs.length]; + for(int i=0; i(Arrays.asList( + VoxelShapes.fullCube(), + VoxelShapes.fullCube(), + Auxiliaries.getUnionShape(Auxiliaries.getRotatedAABB(caabbs, Direction.NORTH, true)), + Auxiliaries.getUnionShape(Auxiliaries.getRotatedAABB(caabbs, Direction.SOUTH, true)), + Auxiliaries.getUnionShape(Auxiliaries.getRotatedAABB(caabbs, Direction.WEST, true)), + Auxiliaries.getUnionShape(Auxiliaries.getRotatedAABB(caabbs, Direction.EAST, true)), + VoxelShapes.fullCube(), + VoxelShapes.fullCube() + )); + } + + @Override + public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext selectionContext) + { return state.get(OPEN) ? VoxelShapes.empty() : collision_shapes_.get(state.get(HORIZONTAL_FACING).getIndex() & 0x7); } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { super.fillStateContainer(builder); builder.add(SEGMENT).add(OPEN); } + + @Override + @Nullable + public BlockState getStateForPlacement(BlockItemUseContext context) + { return getInitialState(super.getStateForPlacement(context), context.getWorld(), context.getPos()); } + + @Override + @SuppressWarnings("deprecation") + public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld world, BlockPos pos, BlockPos facingPos) + { return getInitialState(super.updatePostPlacement(state, facing, facingState, world, pos, facingPos), world, pos); } + + @Override + @SuppressWarnings("deprecation") + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + { + if((rayTraceResult.getFace()==Direction.UP) || (rayTraceResult.getFace()==Direction.DOWN) && (player.getHeldItem(hand).getItem()==this.asItem())) return ActionResultType.PASS; + if(world.isRemote) return ActionResultType.SUCCESS; + final boolean open = !state.get(OPEN); + world.setBlockState(pos, state.with(OPEN, open),2|8|16); + if(state.get(SEGMENT) == SEGMENT_UPPER) { + final BlockState adjacent = world.getBlockState(pos.down()); + if(adjacent.getBlock()==this) world.setBlockState(pos.down(), adjacent.with(OPEN, open), 2|8|16); + } else { + final BlockState adjacent = world.getBlockState(pos.up()); + if(adjacent.getBlock()==this) world.setBlockState(pos.up(), adjacent.with(OPEN, open), 2|8|16); + } + world.playSound(null, pos, open?SoundEvents.BLOCK_IRON_DOOR_OPEN:SoundEvents.BLOCK_IRON_DOOR_CLOSE, SoundCategory.BLOCKS, 0.7f, 1.4f); + return ActionResultType.SUCCESS; + } + + @Override + @SuppressWarnings("deprecation") + public boolean allowsMovement(BlockState state, IBlockReader world, BlockPos pos, PathType type) + { return state.get(OPEN); } + + @Override + @SuppressWarnings("deprecation") + public void neighborChanged(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) + { + if(world.isRemote) return; + boolean powered = false; + BlockState adjacent; + BlockPos adjacent_pos; + if(state.get(SEGMENT) == SEGMENT_UPPER) { + adjacent_pos = pos.down(); + adjacent = world.getBlockState(adjacent_pos); + if(adjacent.getBlock()!=this) adjacent = null; + if(world.getRedstonePower(pos.up(), Direction.UP) > 0) { + powered = true; + } else if((adjacent!=null) && (world.isBlockPowered(pos.down(2)))) { + powered = true; + } + } else { + adjacent_pos = pos.up(); + adjacent = world.getBlockState(adjacent_pos); + if(adjacent.getBlock()!=this) adjacent = null; + if(world.isBlockPowered(pos)) { + powered = true; + } else if((adjacent!=null) && (world.getRedstonePower(pos.up(2), Direction.UP) > 0)) { + powered = true; + } + } + boolean sound = false; + if(powered != state.get(OPEN)) { + world.setBlockState(pos, state.with(OPEN, powered), 2|8|16); + sound = true; + } + if((adjacent != null) && (powered != adjacent.get(OPEN))) { + world.setBlockState(adjacent_pos, adjacent.with(OPEN, powered), 2|8|16); + sound = true; + } + if(sound) { + world.playSound(null, pos, powered?SoundEvents.BLOCK_IRON_DOOR_OPEN:SoundEvents.BLOCK_IRON_DOOR_CLOSE, SoundCategory.BLOCKS, 0.7f, 1.4f); + } + } + + // ------------------------------------------------------------------------------------------------------------------- + + private BlockState getInitialState(BlockState state, IWorld world, BlockPos pos) + { + final BlockState down = world.getBlockState(pos.down()); + if(down.getBlock() == this) return state.with(SEGMENT, SEGMENT_UPPER).with(OPEN, down.get(OPEN)).with(HORIZONTAL_FACING, down.get(HORIZONTAL_FACING)); + final BlockState up = world.getBlockState(pos.up()); + if(up.getBlock() == this) return state.with(SEGMENT, SEGMENT_LOWER).with(OPEN, up.get(OPEN)).with(HORIZONTAL_FACING, up.get(HORIZONTAL_FACING)); + return state.with(SEGMENT, SEGMENT_LOWER).with(OPEN, false); + } + +} diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java index f387f17..66023fd 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java @@ -143,15 +143,14 @@ public class BlockDecorDropper extends BlockDecor.Directed implements IDecorBloc } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; final TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BlockDecorDropper.BTileEntity)) return true; - if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return true; + if(!(te instanceof BlockDecorDropper.BTileEntity)) return ActionResultType.FAIL; + if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return ActionResultType.FAIL; NetworkHooks.openGui((ServerPlayerEntity)player,(INamedContainerProvider)te); - return true; + return ActionResultType.SUCCESS; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFence.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFence.java index 19071a9..4bec9c8 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFence.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFence.java @@ -9,6 +9,9 @@ package wile.engineersdecor.blocks; import wile.engineersdecor.libmc.blocks.StandardFenceBlock; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorldReader; import net.minecraft.block.*; @@ -19,4 +22,8 @@ public class BlockDecorFence extends StandardFenceBlock implements IDecorBlock public BlockDecorFence(long config, Block.Properties properties, double pole_width, double pole_height, double side_width, double side_max_y, double side_min_y) { super(config, properties, pole_width, pole_height, side_width, side_max_y, side_min_y); } + + @Override + protected boolean attachesTo(BlockState facingState, IWorldReader world, BlockPos facingPos, Direction side) + { return ((facingState.getBlock()) instanceof BlockDecorDoubleGate) || super.attachesTo(facingState, world, facingPos, side); } } diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFluidFunnel.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFluidFunnel.java index 11f1cc5..0b51936 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFluidFunnel.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFluidFunnel.java @@ -25,6 +25,7 @@ import net.minecraft.fluid.IFluidState; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.*; @@ -123,13 +124,12 @@ public class BlockDecorFluidFunnel extends BlockDecor implements IDecorBlock } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BTileEntity)) return false; - return FluidUtil.interactWithFluidHandler(player, hand, world, pos, rayTraceResult.getFace()); + if(!(te instanceof BTileEntity)) return ActionResultType.FAIL; + return FluidUtil.interactWithFluidHandler(player, hand, world, pos, rayTraceResult.getFace()) ? ActionResultType.SUCCESS : ActionResultType.FAIL; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java index 7dbdb0c..465d076 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java @@ -149,16 +149,15 @@ public class BlockDecorFurnace extends BlockDecor.Horizontal implements IDecorBl } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; final TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BlockDecorFurnace.BTileEntity)) return true; - if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return true; + if(!(te instanceof BlockDecorFurnace.BTileEntity)) return ActionResultType.FAIL; + if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return ActionResultType.FAIL; NetworkHooks.openGui((ServerPlayerEntity)player,(INamedContainerProvider)te); player.addStat(Stats.INTERACT_WITH_FURNACE); - return true; + return ActionResultType.SUCCESS; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java index 1e24142..885848b 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnaceElectrical.java @@ -68,15 +68,15 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID { return new BlockDecorFurnaceElectrical.BTileEntity(); } @Override - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; final TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BlockDecorFurnaceElectrical.BTileEntity)) return true; - if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return true; + if(!(te instanceof BlockDecorFurnaceElectrical.BTileEntity)) return ActionResultType.FAIL; + if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return ActionResultType.FAIL; NetworkHooks.openGui((ServerPlayerEntity)player,(INamedContainerProvider)te); player.addStat(Stats.INTERACT_WITH_FURNACE); - return true; + return ActionResultType.SUCCESS; } @Override @@ -112,7 +112,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID public static final int FIFO_INTERVAL = 20; public static final int HEAT_CAPACITY = 200; public static final int HEAT_INCREMENT = 20; - public static final int MAX_ENERGY_TRANSFER = 256; + public static final int MAX_ENERGY_TRANSFER = 1024; public static final int MAX_ENERGY_BUFFER = 32000; public static final int MAX_SPEED_SETTING = 2; public static final int NUM_OF_SLOTS = 7; @@ -133,6 +133,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID private static int energy_consumption_ = DEFAULT_SCALED_ENERGY_CONSUMPTION; private static int transfer_energy_consumption_ = DEFAULT_SCALED_ENERGY_CONSUMPTION / 8; private static int proc_speed_percent_ = DEFAULT_SPEED_PERCENT; + private static double speed_setting_factor_[] = {0.0, 1.0, 1.5, 2.0}; public static void on_config(int speed_percent, int standard_energy_per_tick, boolean with_automatic_inventory_pulling) { @@ -145,15 +146,16 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID // BTileEntity ----------------------------------------------------------------------------- - private int burntime_left_; - private int proc_time_elapsed_; - private int proc_time_needed_; - private int energy_stored_; - private int field_max_energy_stored_; - private int field_isburning_; - private int speed_; - private int tick_timer_; - private int fifo_timer_; + private int burntime_left_ = 0; + private int proc_time_elapsed_ = 0; + private int proc_time_needed_ = 0; + private int energy_stored_ = 0; + private int field_max_energy_stored_ = 0; + private int field_isburning_ = 0; + private int speed_ = 1; + private int tick_timer_ = 0; + private int fifo_timer_ = 0; + private boolean enabled_ = false; public BTileEntity() { this(ModContent.TET_SMALL_ELECTRICAL_FURNACE); } @@ -185,6 +187,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID proc_time_needed_ = nbt.getInt("CookTimeTotal"); energy_stored_ = nbt.getInt("Energy"); speed_ = nbt.getInt("SpeedSetting"); + speed_ = (speed_ < 0) ? (1) : ((speed_>3) ? 3 : speed_); } protected void writenbt(CompoundNBT nbt) @@ -468,7 +471,12 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID if(transferItems(FIFO_INPUT_0_SLOT_NO, SMELTING_INPUT_SLOT_NO, 64)) dirty = true; if(transferItems(FIFO_INPUT_1_SLOT_NO, FIFO_INPUT_0_SLOT_NO, 64)) { dirty = true; } else { shift_in = true; } } - if((!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty()) && (energy_stored_ >= energy_consumption_)) { + if(energy_stored_ < energy_consumption()) { + enabled_ = false; + } else if(energy_stored_ >= (MAX_ENERGY_BUFFER/2)) { + enabled_ = true; + } + if((!(stacks_.get(SMELTING_INPUT_SLOT_NO)).isEmpty()) && (enabled_) && (speed_>0) && (speed_<4)) { IRecipe last_recipe = currentRecipe(); updateCurrentRecipe(); if(currentRecipe() != last_recipe) { @@ -486,7 +494,7 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID } if(burning() && can_smelt) { if(heat_up()) dirty = true; - proc_time_elapsed_ += (TICK_INTERVAL * proc_speed_percent_/100); + proc_time_elapsed_ += (int)(TICK_INTERVAL * proc_speed_percent_ * speed_setting_factor_[speed_] / 100); if(proc_time_elapsed_ >= proc_time_needed_) { proc_time_elapsed_ = 0; proc_time_needed_ = getSmeltingTimeNeeded(world, stacks_.get(SMELTING_INPUT_SLOT_NO)); @@ -510,7 +518,6 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID if(dirty) markDirty(); field_max_energy_stored_ = getMaxEnergyStored(); field_isburning_ = burning() ? 1 : 0; - //if(this.energy_stored_ < this.getMaxEnergyStored() / 5) this.energy_stored_ = this.getMaxEnergyStored(); } // Furnace -------------------------------------------------------------------------------------- @@ -596,15 +603,25 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID return dirty; } - // returns TE dirty + int energy_consumption() + { + switch(speed_) { + case 1: return energy_consumption_; + case 2: return energy_consumption_ * 2; + case 3: return energy_consumption_ * 4; + default: return 0; + } + } + private boolean heat_up() { - if(energy_stored_ < (energy_consumption_)) return false; + int p = energy_consumption(); + if((p<=0) || (energy_stored_ < p)) return false; if(burntime_left_ >= (HEAT_CAPACITY-HEAT_INCREMENT)) return false; - energy_stored_ -= energy_consumption_; + energy_stored_ -= p; burntime_left_ += HEAT_INCREMENT; this.markDirty(); - return true; + return true; // returns TE dirty } private void sync_blockstate() @@ -728,9 +745,13 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID public void onServerPacketReceived(int windowId, CompoundNBT nbt) {} - @Override public void onClientPacketReceived(int windowId, PlayerEntity player, CompoundNBT nbt) - {} + { + if(!(inventory_ instanceof BTileEntity)) return; + BTileEntity te = (BTileEntity)inventory_; + if(nbt.contains("speed")) te.speed_ = MathHelper.clamp(nbt.getInt("speed"), 0, 3); + te.markDirty(); + } } //-------------------------------------------------------------------------------------------------------------------- @@ -773,9 +794,35 @@ public class BlockDecorFurnaceElectrical extends BlockDecorFurnace implements ID blit(x0+79, y0+30, 176, 15, 1+progress_px(17), 15); int we = energy_px(32, 8); if(we>0) blit(x0+88, y0+53, 185, 30, we, 13); + switch(getContainer().field(4)) { + case 0: blit(x0+144, y0+57, 180, 57, 6, 9); break; + case 1: blit(x0+142, y0+58, 190, 58, 9, 6); break; + case 2: blit(x0+144, y0+56, 200, 57, 6, 9); break; + case 3: blit(x0+143, y0+58, 210, 58, 9, 6); break; + default: break; + } RenderSystem.disableBlend(); } + @Override + public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) + { + BContainer container = (BContainer)getContainer(); + int mx = (int)(mouseX - getGuiLeft() + .5), my = (int)(mouseY - getGuiTop() + .5); + if((!isPointInRegion(136, 48, 28, 28, mouseX, mouseY))) { + return super.mouseClicked(mouseX, mouseY, mouseButton); + } else if(isPointInRegion(144, 64, 6, 10, mouseX, mouseY)) { + container.onGuiAction("speed", 0); + } else if(isPointInRegion(134, 58, 10, 6, mouseX, mouseY)) { + container.onGuiAction("speed", 1); + } else if(isPointInRegion(144, 48, 6, 10, mouseX, mouseY)) { + container.onGuiAction("speed", 2); + } else if(isPointInRegion(150, 58, 10, 6, mouseX, mouseY)) { + container.onGuiAction("speed", 3); + } + return true; + } + private int progress_px(int pixels) { final int tc=getContainer().field(2), T=getContainer().field(3); return ((T>0) && (tc>0)) ? (tc * pixels / T) : (0); } diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorHopper.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorHopper.java index 61bf401..1a30338 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorHopper.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorHopper.java @@ -8,6 +8,8 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShapes; import wile.engineersdecor.ModContent; import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.libmc.detail.Inventories; @@ -58,6 +60,10 @@ public class BlockDecorHopper extends BlockDecor.Directed implements IDecorBlock public BlockDecorHopper(long config, Block.Properties builder, final Supplier> shape_supplier) { super(config, builder, shape_supplier); } + @Override + public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context) + { return VoxelShapes.fullCube(); } + @Override @SuppressWarnings("deprecation") public boolean hasComparatorInputOverride(BlockState state) @@ -121,15 +127,14 @@ public class BlockDecorHopper extends BlockDecor.Directed implements IDecorBlock } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; final TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BTileEntity)) return true; - if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return true; + if(!(te instanceof BTileEntity)) return ActionResultType.FAIL; + if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return ActionResultType.FAIL; NetworkHooks.openGui((ServerPlayerEntity)player,(INamedContainerProvider)te); - return true; + return ActionResultType.SUCCESS; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorLadder.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorLadder.java index 7dbdd30..e92697a 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorLadder.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorLadder.java @@ -86,7 +86,7 @@ public class BlockDecorLadder extends LadderBlock implements IDecorBlock // Player update event, forwarded from the main mod instance. public static void onPlayerUpdateEvent(final PlayerEntity player) { - if((without_speed_boost_) || (player.onGround) || (!player.isOnLadder()) || (player.func_225608_bj_()/*isSneaking()*/) || (player.isSpectator())) return; + if((without_speed_boost_) || (player.onGround) || (!player.isOnLadder()) || (player.isShiftKeyDown()) || (player.isSpectator())) return; double lvy = player.getLookVec().y; if(Math.abs(lvy) < 0.94) return; final BlockPos pos = player.getPosition(); diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorMilker.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorMilker.java index 56c28b6..0932db9 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorMilker.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorMilker.java @@ -93,15 +93,14 @@ public class BlockDecorMilker extends BlockDecor.Horizontal implements IDecorBlo { return new BTileEntity(); } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; BTileEntity te = getTe(world, pos); - if(te==null) return true; + if(te==null) return ActionResultType.FAIL; final ItemStack in_stack = player.getHeldItem(hand); final ItemStack out_stack = BTileEntity.milk_filled_container_item(in_stack); - if(out_stack.isEmpty() && (te.fluid_handler()!=null)) return FluidUtil.interactWithFluidHandler(player, hand, te.fluid_handler()); + if(out_stack.isEmpty() && (te.fluid_handler()!=null)) return FluidUtil.interactWithFluidHandler(player, hand, te.fluid_handler()) ? ActionResultType.SUCCESS : ActionResultType.FAIL; boolean drained = false; IItemHandler player_inventory = new PlayerMainInvWrapper(player.inventory); if(te.fluid_level() >= BTileEntity.BUCKET_SIZE) { @@ -122,7 +121,7 @@ public class BlockDecorMilker extends BlockDecor.Horizontal implements IDecorBlo if(drained) { world.playSound(null, pos, SoundEvents.ITEM_BUCKET_FILL, SoundCategory.BLOCKS, 0.8f, 1f); } - return true; + return ActionResultType.SUCCESS; } @Nullable @@ -697,7 +696,7 @@ public class BlockDecorMilker extends BlockDecor.Horizontal implements IDecorBlo log("shouldContinueExecuting() -> already aborted"); return false; } else if(creature.getNavigator().noPath()) { - if((!creature.getNavigator().setPath(creature.getNavigator().func_225466_a(target_pos_.getX(), target_pos_.getY(), target_pos_.getZ(), 0), movementSpeed))) { + if((!creature.getNavigator().setPath(creature.getNavigator().getPathToPos(target_pos_.getX(), target_pos_.getY(), target_pos_.getZ(), 0), movementSpeed))) { log("shouldContinueExecuting() -> abort, no path"); abort(); return false; diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java index d32c210..e4fb419 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java @@ -111,13 +111,12 @@ public class BlockDecorMineralSmelter extends BlockDecor.Horizontal implements I } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; - if(player.func_225608_bj_()/*isSneaking()*/) return false; + if(player.isShiftKeyDown()) return ActionResultType.PASS; + if(world.isRemote) return ActionResultType.SUCCESS; BTileEntity te = getTe(world, pos); - if(te==null) return true; + if(te==null) return ActionResultType.FAIL; final ItemStack stack = player.getHeldItem(hand); boolean dirty = false; if(te.accepts_lava_container(stack)) { @@ -161,7 +160,7 @@ public class BlockDecorMineralSmelter extends BlockDecor.Horizontal implements I dirty = true; } if(dirty) player.inventory.markDirty(); - return true; + return ActionResultType.SUCCESS; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java index b550559..8ca6f67 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java @@ -23,10 +23,11 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ActionResultType; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.Hand; import net.minecraft.util.math.MathHelper; -import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -56,13 +57,13 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecor.Directed imple @Override @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BTileEntity)) return true; + if(!(te instanceof BTileEntity)) return ActionResultType.FAIL; ((BTileEntity)te).send_device_stats(player); - return true; + return ActionResultType.SUCCESS; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorPlacer.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorPlacer.java index a3722ff..7c3172f 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorPlacer.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorPlacer.java @@ -125,15 +125,14 @@ public class BlockDecorPlacer extends BlockDecor.Directed implements IDecorBlock } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; final TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BTileEntity)) return true; - if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return true; + if(!(te instanceof BTileEntity)) return ActionResultType.FAIL; + if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return ActionResultType.FAIL; NetworkHooks.openGui((ServerPlayerEntity)player,(INamedContainerProvider)te); - return true; + return ActionResultType.SUCCESS; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java index b86255c..0d89321 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java @@ -24,6 +24,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.ActionResultType; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; @@ -61,12 +62,11 @@ public class BlockDecorSolarPanel extends BlockDecor implements IDecorBlock { return new BlockDecorSolarPanel.BTileEntity(); } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { TileEntity te = world.getTileEntity(pos); if(te instanceof BTileEntity) ((BTileEntity)te).state_message(player); - return true; + return ActionResultType.SUCCESS; } //-------------------------------------------------------------------------------------------------------------------- @@ -211,7 +211,7 @@ public class BlockDecorSolarPanel extends BlockDecor implements IDecorBlock BlockState nstate = state.with(EXPOSITION, e); if(nstate != state) world.setBlockState(pos, nstate, 1|2); final double eff = (1.0-((world.getRainStrength(1f)*0.6)+(world.getThunderStrength(1f)*0.3))); - final double ll = ((double)(world.func_225524_e_().getLightEngine(LightType.SKY).getLightFor(getPos())))/15; + final double ll = ((double)(world.getLightManager().getLightEngine(LightType.SKY).getLightFor(getPos())))/15; final double rf = Math.sin((Math.PI/2) * Math.sqrt(((double)(((theta<0)||(theta>180))?(0):((theta>90)?(180-theta):(theta))))/90)); current_production_ = (int)(Math.min(rf*rf*eff*ll, 1) * peak_power_per_tick_); accumulated_power_ = Math.min(accumulated_power_ + (current_production_*(TICK_INTERVAL*ACCUMULATION_INTERVAL)), max_power_storage_); diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorTest.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorTest.java index ffe17c5..371eb1a 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorTest.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorTest.java @@ -21,6 +21,7 @@ import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.item.ItemStack; import net.minecraft.fluid.Fluids; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; import net.minecraft.util.Direction; import net.minecraft.util.math.MathHelper; @@ -79,12 +80,12 @@ public class BlockDecorTest extends BlockDecor.Directed implements Auxiliaries.I @Override @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BTileEntity)) return false; + if(!(te instanceof BTileEntity)) return ActionResultType.SUCCESS; ((BTileEntity)te).activated(player, hand, hit); - return true; + return ActionResultType.SUCCESS; } //-------------------------------------------------------------------------------------------------------------------- diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorTreeCutter.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorTreeCutter.java index c052f38..5d57162 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorTreeCutter.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorTreeCutter.java @@ -82,12 +82,11 @@ public class BlockDecorTreeCutter extends BlockDecor.Horizontal implements IDeco } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { TileEntity te = world.getTileEntity(pos); if(te instanceof BTileEntity) ((BTileEntity)te).state_message(player); - return true; + return ActionResultType.SUCCESS; } //-------------------------------------------------------------------------------------------------------------------- diff --git a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java index 4bb1960..5660ae8 100644 --- a/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java +++ b/1.15/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java @@ -134,15 +134,14 @@ public class BlockDecorWasteIncinerator extends BlockDecor implements IDecorBloc } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; final TileEntity te = world.getTileEntity(pos); - if(!(te instanceof BTileEntity)) return true; - if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return true; + if(!(te instanceof BTileEntity)) return ActionResultType.FAIL; + if((!(player instanceof ServerPlayerEntity) && (!(player instanceof FakePlayer)))) return ActionResultType.FAIL; NetworkHooks.openGui((ServerPlayerEntity)player,(INamedContainerProvider)te); - return true; + return ActionResultType.SUCCESS; } @Override @@ -166,6 +165,7 @@ public class BlockDecorWasteIncinerator extends BlockDecor implements IDecorBloc public static final int NUM_OF_FIELDS = 1; public static final int TICK_INTERVAL = 20; public static final int ENERGIZED_TICK_INTERVAL = 5; + public static final int INCINERATION_STACK_DECREMENT = 4; public static final int MAX_ENERGY_BUFFER = 16000; public static final int MAX_ENERGY_TRANSFER = 256; public static final int DEFAULT_ENERGY_CONSUMPTION = 16; @@ -190,7 +190,6 @@ public class BlockDecorWasteIncinerator extends BlockDecor implements IDecorBloc private int energy_stored_; protected NonNullList stacks_ = NonNullList.withSize(NUM_OF_SLOTS, ItemStack.EMPTY); - public BTileEntity() { this(ModContent.TET_WASTE_INCINERATOR); } @@ -503,7 +502,7 @@ public class BlockDecorWasteIncinerator extends BlockDecor implements IDecorBloc ItemStack first_stack = stacks_.get(0); boolean shift = !first_stack.isEmpty(); if(is_processing) { - processing_stack.shrink(1); + processing_stack.shrink(INCINERATION_STACK_DECREMENT); if(processing_stack.getCount() <= 0) { processing_stack = ItemStack.EMPTY; is_processing = false; @@ -516,22 +515,11 @@ public class BlockDecorWasteIncinerator extends BlockDecor implements IDecorBloc dirty = true; } if(shift) { - int max_shift_slot_no = BURN_SLOT_NO-1; - for(int i=1; i0; --i) { + transferred |= transferItems(i-1, i, getInventoryStackLimit()); + } + if((!is_processing) && (!transferred)) { shiftStacks(0, BURN_SLOT_NO); dirty = true; } diff --git a/1.15/src/main/java/wile/engineersdecor/detail/ModRenderers.java b/1.15/src/main/java/wile/engineersdecor/detail/ModRenderers.java index 276e751..f956719 100644 --- a/1.15/src/main/java/wile/engineersdecor/detail/ModRenderers.java +++ b/1.15/src/main/java/wile/engineersdecor/detail/ModRenderers.java @@ -82,9 +82,6 @@ public class ModRenderers { super(dispatcher); } @Override - public void func_225616_a_(final BlockDecorCraftingTable.CraftingTableTileEntity te, float f2, MatrixStack mxs, IRenderTypeBuffer buf, int i5, int i6) - { render(te, f2, mxs, buf, i5, i6); } - @SuppressWarnings("deprecation") public void render(final BlockDecorCraftingTable.CraftingTableTileEntity te, float unused1, MatrixStack mxs, IRenderTypeBuffer buf, int i5, int i6) { @@ -102,17 +99,14 @@ public class ModRenderers float oy = 0.5f; float ry = ((yrotations[di]+180) + ((prnd*60)-30)) % 360; if(stack.isEmpty()) return; - mxs.func_227860_a_(); // mxs.push() - mxs.func_227861_a_(0.5+ox, 0.5+oy, 0.5+oz); // mxs.translate() - - mxs.func_227863_a_(Vector3f.field_229179_b_.func_229187_a_(90.0f)); // mxs.transform(Vector3f.x_plus.rotation(90)) - - mxs.func_227863_a_(Vector3f.field_229183_f_.func_229187_a_(ry)); // mxs.transform(Vector3f.z_plus.rotation(ry)) - - mxs.func_227861_a_(rndo, rndo, 0); // mxs.translate() - mxs.func_227862_a_(scaler, scaler, scaler); // mxs.scale() - Minecraft.getInstance().getItemRenderer().func_229110_a_(stack, net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType.FIXED, i5, i6, mxs, buf); - mxs.func_227865_b_(); // mxs.pop() + mxs.push(); + mxs.translate(0.5+ox, 0.5+oy, 0.5+oz); + mxs.rotate(Vector3f.XP.rotationDegrees(90.0f)); + mxs.rotate(Vector3f.ZP.rotationDegrees(ry)); + mxs.translate(rndo, rndo, 0); + mxs.scale(scaler, scaler, scaler); + Minecraft.getInstance().getItemRenderer().renderItem(stack, net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType.FIXED, i5, i6, mxs, buf); + mxs.pop(); // mxs.pop() } } catch(Throwable e) { if(--tesr_error_counter<=0) { diff --git a/1.15/src/main/java/wile/engineersdecor/libmc/blocks/SlabSliceBlock.java b/1.15/src/main/java/wile/engineersdecor/libmc/blocks/SlabSliceBlock.java index eb0f441..82d586a 100644 --- a/1.15/src/main/java/wile/engineersdecor/libmc/blocks/SlabSliceBlock.java +++ b/1.15/src/main/java/wile/engineersdecor/libmc/blocks/SlabSliceBlock.java @@ -138,29 +138,28 @@ public class SlabSliceBlock extends StandardBlocks.WaterLoggable implements Stan { return new ArrayList(Collections.singletonList(new ItemStack(this.asItem(), num_slabs_contained_in_parts_[state.get(PARTS) & 0xf]))); } @Override - @SuppressWarnings("deprecation") - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult rayTraceResult) { Direction face = rayTraceResult.getFace(); final ItemStack stack = player.getHeldItem(hand); - if(stack.isEmpty() || (Block.getBlockFromItem(stack.getItem()) != this)) return false; - if((face != Direction.UP) && (face != Direction.DOWN)) return false; + if(stack.isEmpty() || (Block.getBlockFromItem(stack.getItem()) != this)) return ActionResultType.PASS; + if((face != Direction.UP) && (face != Direction.DOWN)) return ActionResultType.PASS; int parts = state.get(PARTS); if((face != Direction.UP) && (parts > 7)) { world.setBlockState(pos, state.with(PARTS, parts-1), 3); } else if((face != Direction.DOWN) && (parts < 7)) { world.setBlockState(pos, state.with(PARTS, parts+1), 3); } else { - return (parts != 7); + return (parts != 7) ? ActionResultType.SUCCESS : ActionResultType.PASS; } - if(world.isRemote) return true; + if(world.isRemote) return ActionResultType.SUCCESS; if(!player.isCreative()) { stack.shrink(1); if(player.inventory != null) player.inventory.markDirty(); } SoundType st = this.getSoundType(state, world, pos, null); world.playSound(null, pos, st.getPlaceSound(), SoundCategory.BLOCKS, (st.getVolume()+1f)/2.5f, 0.9f*st.getPitch()); - return true; + return ActionResultType.SUCCESS; } @Override diff --git a/1.15/src/main/java/wile/engineersdecor/libmc/blocks/StandardBlocks.java b/1.15/src/main/java/wile/engineersdecor/libmc/blocks/StandardBlocks.java index 6de8912..35fac5d 100644 --- a/1.15/src/main/java/wile/engineersdecor/libmc/blocks/StandardBlocks.java +++ b/1.15/src/main/java/wile/engineersdecor/libmc/blocks/StandardBlocks.java @@ -101,28 +101,16 @@ public class StandardBlocks vshape = shape; } - ///////////// -------------------------------------------------------------------------------------------------------- - // 1.15 transition + @Override + @SuppressWarnings("deprecation") + public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) + { return ActionResultType.PASS; } - public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) - { return false; } - - @Deprecated - public ActionResultType func_225533_a_(BlockState p_225533_1_, World p_225533_2_, BlockPos p_225533_3_, PlayerEntity p_225533_4_, Hand p_225533_5_, BlockRayTraceResult p_225533_6_) - { - return onBlockActivated(p_225533_1_,p_225533_2_,p_225533_3_,p_225533_4_,p_225533_5_,p_225533_6_) ? ActionResultType.SUCCESS : ActionResultType.PASS; - } - - @Deprecated - public void func_225534_a_(BlockState p_225534_1_, ServerWorld p_225534_2_, BlockPos p_225534_3_, Random p_225534_4_) - { tick(p_225534_1_,p_225534_2_,p_225534_3_,p_225534_4_); } - - public void tick(BlockState state, World world, BlockPos pos, Random rnd) + @Override + @SuppressWarnings("deprecation") + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random rnd) {} - // 1.15 /transition - ///////////// -------------------------------------------------------------------------------------------------------- - @Override @OnlyIn(Dist.CLIENT) public void addInformation(ItemStack stack, @Nullable IBlockReader world, List tooltip, ITooltipFlag flag) @@ -319,7 +307,7 @@ public class StandardBlocks // default: placement on the face the player clicking } if((config & CFG_OPPOSITE_PLACEMENT)!=0) facing = facing.getOpposite(); - if(((config & CFG_FLIP_PLACEMENT_SHIFTCLICK) != 0) && (context.getPlayer().func_225608_bj_()/*isSneaking()*/)) facing = facing.getOpposite(); + if(((config & CFG_FLIP_PLACEMENT_SHIFTCLICK) != 0) && (context.getPlayer().isShiftKeyDown())) facing = facing.getOpposite(); return super.getStateForPlacement(context).with(FACING, facing); } } @@ -380,7 +368,7 @@ public class StandardBlocks facing = ((facing==Direction.UP)||(facing==Direction.DOWN)) ? (context.getPlacementHorizontalFacing()) : facing; } if((config & CFG_OPPOSITE_PLACEMENT)!=0) facing = facing.getOpposite(); - if(((config & CFG_FLIP_PLACEMENT_SHIFTCLICK) != 0) && (context.getPlayer().func_225608_bj_()/*isSneaking()*/)) facing = facing.getOpposite(); + if(((config & CFG_FLIP_PLACEMENT_SHIFTCLICK) != 0) && (context.getPlayer().isShiftKeyDown())) facing = facing.getOpposite(); return super.getStateForPlacement(context).with(HORIZONTAL_FACING, facing); } diff --git a/1.15/src/main/java/wile/engineersdecor/libmc/blocks/StandardFenceBlock.java b/1.15/src/main/java/wile/engineersdecor/libmc/blocks/StandardFenceBlock.java index fdf92fd..ffa0bf2 100644 --- a/1.15/src/main/java/wile/engineersdecor/libmc/blocks/StandardFenceBlock.java +++ b/1.15/src/main/java/wile/engineersdecor/libmc/blocks/StandardFenceBlock.java @@ -96,7 +96,7 @@ public class StandardFenceBlock extends WallBlock implements StandardBlocks.ISta protected void fillStateContainer(StateContainer.Builder builder) { super.fillStateContainer(builder); } - private boolean attachesTo(BlockState facingState, IWorldReader world, BlockPos facingPos, Direction side) + protected boolean attachesTo(BlockState facingState, IWorldReader world, BlockPos facingPos, Direction side) { final Block block = facingState.getBlock(); if((block instanceof FenceGateBlock) || (block instanceof StandardFenceBlock) || (block instanceof VariantWallBlock)) return true; diff --git a/1.15/src/main/java/wile/engineersdecor/libmc/datagen/LootTableGen.java b/1.15/src/main/java/wile/engineersdecor/libmc/datagen/LootTableGen.java index 0ac2125..82f4561 100644 --- a/1.15/src/main/java/wile/engineersdecor/libmc/datagen/LootTableGen.java +++ b/1.15/src/main/java/wile/engineersdecor/libmc/datagen/LootTableGen.java @@ -85,7 +85,7 @@ public class LootTableGen extends LootTableProvider ItemLootEntry.Builder iltb = ItemLootEntry.builder(block); iltb.acceptFunction(CopyName.builder(Source.BLOCK_ENTITY)); if(block.hasTileEntity(block.getDefaultState())) { - iltb.acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY)); + iltb.acceptFunction(CopyNbt.builder(CopyNbt.Source.BLOCK_ENTITY)); } return LootTable.builder().addLootPool(LootPool.builder().name(rl_path).rolls(ConstantRange.of(1)).addEntry(iltb)); } diff --git a/1.15/src/main/java/wile/engineersdecor/libmc/detail/Auxiliaries.java b/1.15/src/main/java/wile/engineersdecor/libmc/detail/Auxiliaries.java index 9a71847..b763f67 100644 --- a/1.15/src/main/java/wile/engineersdecor/libmc/detail/Auxiliaries.java +++ b/1.15/src/main/java/wile/engineersdecor/libmc/detail/Auxiliaries.java @@ -79,15 +79,15 @@ public class Auxiliaries @OnlyIn(Dist.CLIENT) public static final boolean isShiftDown() { - return (InputMappings.isKeyDown(SidedProxy.mc().func_228018_at_()/*getMainWindow()*/.getHandle(), GLFW.GLFW_KEY_LEFT_SHIFT) || - InputMappings.isKeyDown(SidedProxy.mc().func_228018_at_()/*getMainWindow()*/.getHandle(), GLFW.GLFW_KEY_RIGHT_SHIFT)); + return (InputMappings.isKeyDown(SidedProxy.mc().getMainWindow().getHandle(), GLFW.GLFW_KEY_LEFT_SHIFT) || + InputMappings.isKeyDown(SidedProxy.mc().getMainWindow().getHandle(), GLFW.GLFW_KEY_RIGHT_SHIFT)); } @OnlyIn(Dist.CLIENT) public static final boolean isCtrlDown() { - return (InputMappings.isKeyDown(SidedProxy.mc().func_228018_at_()/*getMainWindow()*/.getHandle(), GLFW.GLFW_KEY_LEFT_CONTROL) || - InputMappings.isKeyDown(SidedProxy.mc().func_228018_at_()/*getMainWindow()*/.getHandle(), GLFW.GLFW_KEY_RIGHT_CONTROL)); + return (InputMappings.isKeyDown(SidedProxy.mc().getMainWindow().getHandle(), GLFW.GLFW_KEY_LEFT_CONTROL) || + InputMappings.isKeyDown(SidedProxy.mc().getMainWindow().getHandle(), GLFW.GLFW_KEY_RIGHT_CONTROL)); } // ------------------------------------------------------------------------------------------------------------------- diff --git a/1.15/src/main/java/wile/engineersdecor/libmc/detail/Overlay.java b/1.15/src/main/java/wile/engineersdecor/libmc/detail/Overlay.java index 322e5c3..01132fe 100644 --- a/1.15/src/main/java/wile/engineersdecor/libmc/detail/Overlay.java +++ b/1.15/src/main/java/wile/engineersdecor/libmc/detail/Overlay.java @@ -89,7 +89,7 @@ public class Overlay if(deadline() < System.currentTimeMillis()) return; String txt = text(); if(txt.isEmpty()) return; - final MainWindow win = mc.func_228018_at_()/*getMainWindow()*/; + final MainWindow win = mc.getMainWindow(); final FontRenderer fr = mc.fontRenderer; final boolean was_unicode = fr.getBidiFlag(); try { diff --git a/1.15/src/main/resources/assets/engineersdecor/blockstates/steel_mesh_fence_gate.json b/1.15/src/main/resources/assets/engineersdecor/blockstates/steel_mesh_fence_gate.json new file mode 100644 index 0000000..65d6a4f --- /dev/null +++ b/1.15/src/main/resources/assets/engineersdecor/blockstates/steel_mesh_fence_gate.json @@ -0,0 +1,21 @@ +{ + "variants": { + "facing=north,open=false,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model" }, + "facing=north,open=true,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model_open" }, + "facing=south,open=false,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model" , "y":180 }, + "facing=south,open=true,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model_open", "y":180 }, + "facing=west,open=false,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model" , "y":270 }, + "facing=west,open=true,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model_open", "y":270 }, + "facing=east,open=false,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model" , "y":90 }, + "facing=east,open=true,segment=0": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_bottom_model_open", "y":90 }, + + "facing=north,open=false,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model" }, + "facing=north,open=true,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model_open" }, + "facing=south,open=false,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model" , "y":180 }, + "facing=south,open=true,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model_open", "y":180 }, + "facing=west,open=false,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model" , "y":270 }, + "facing=west,open=true,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model_open", "y":270 }, + "facing=east,open=false,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model" , "y":90 }, + "facing=east,open=true,segment=1": { "model": "engineersdecor:block/fence/steel_mesh_fence_gate_top_model_open", "y":90 } + } +} diff --git a/1.15/src/main/resources/assets/engineersdecor/lang/en_us.json b/1.15/src/main/resources/assets/engineersdecor/lang/en_us.json index 9d4e118..55234f0 100644 --- a/1.15/src/main/resources/assets/engineersdecor/lang/en_us.json +++ b/1.15/src/main/resources/assets/engineersdecor/lang/en_us.json @@ -151,6 +151,8 @@ "block.engineersdecor.steel_framed_window.help": "§6Steel framed triple glazed window. Well insulating. §r Does not connect to adjacent blocks like glass panes.", "block.engineersdecor.steel_mesh_fence": "Steel Mesh Fence", "block.engineersdecor.steel_mesh_fence.help": "§6Industrial style fence.§r\nDoes not connect do regular fences.", + "block.engineersdecor.steel_mesh_fence_gate": "Steel Mesh Fence Gate", + "block.engineersdecor.steel_mesh_fence_gate.help": "§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.", "block.engineersdecor.small_lab_furnace": "Small Laboratory Furnace", "block.engineersdecor.small_lab_furnace.help": "§6Small metal cased lab kiln.§r Solid fuel consuming, updraught. Slightly hotter and better isolated than a cobblestone furnace, therefore more efficient. Two auxiliary slots e.g. for storage. Two stack internal hopper fifos for input, output, and fuel. Place an external heater into a aux slot and connect power for electrical smelting speed boost.", "block.engineersdecor.small_electrical_furnace": "Small Electrical Furnace", diff --git a/1.15/src/main/resources/assets/engineersdecor/lang/ru_ru.json b/1.15/src/main/resources/assets/engineersdecor/lang/ru_ru.json index 552ce41..a9ab02b 100644 --- a/1.15/src/main/resources/assets/engineersdecor/lang/ru_ru.json +++ b/1.15/src/main/resources/assets/engineersdecor/lang/ru_ru.json @@ -151,6 +151,8 @@ "block.engineersdecor.steel_framed_window.help": "§6Стальной каркас окна с тройным остеклением. Хорошо изолирует. §r Не подключается к смежным блокам, таким как стеклянные панели.", "block.engineersdecor.steel_mesh_fence": "Забор из стальной сетки", "block.engineersdecor.steel_mesh_fence.help": "§6Забор в индустриальном стиле.§r\nНе стыкуется с обычными заборами.", + "block.engineersdecor.steel_mesh_fence_gate": "Steel Mesh Fence Gate", + "block.engineersdecor.steel_mesh_fence_gate.help": "§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.", "block.engineersdecor.small_lab_furnace": "Компактная лабораторная печь", "block.engineersdecor.small_lab_furnace.help": "§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива сверху. Немного горячее и изолированней каменной, поэтому быстрее. Два вспомогательных слота, например для хранения. Два слота-воронки для ввода, вывода, и топлива. Поместите внешний нагреватель в слот AUX и подключите питание для электрического повышения скорости обработки.", "block.engineersdecor.small_electrical_furnace": "Компактная конвейерная электрическая печь", diff --git a/1.15/src/main/resources/assets/engineersdecor/lang/zh_cn.json b/1.15/src/main/resources/assets/engineersdecor/lang/zh_cn.json index ca27c1e..4a99805 100644 --- a/1.15/src/main/resources/assets/engineersdecor/lang/zh_cn.json +++ b/1.15/src/main/resources/assets/engineersdecor/lang/zh_cn.json @@ -151,6 +151,8 @@ "block.engineersdecor.steel_framed_window.help": "§6钢框三层玻璃窗。绝缘良好。§r不像玻璃板一样连接到相邻方块。", "block.engineersdecor.steel_mesh_fence": "钢丝栅栏", "block.engineersdecor.steel_mesh_fence.help": "§6工业式栅栏。§r\n不与普通栅栏连接。", + "block.engineersdecor.steel_mesh_fence_gate": "Steel Mesh Fence Gate", + "block.engineersdecor.steel_mesh_fence_gate.help": "§6Industrial style fence gate that fits well to the Steel Mesh Fence.§r\nCan be placed as single or double size gate.", "block.engineersdecor.small_lab_furnace": "小型实验室炉", "block.engineersdecor.small_lab_furnace.help": "§6小型金属壳实验室窑。§r消耗固体燃料,向上排气。 比圆石炉稍微热一点,隔热性也更好,因此效率更高。 有两个用于储存的辅助格。两个堆叠的内部漏斗对输入、输出和燃料进行队列管理。 在辅助格放置一个外置加热器并通入电力可以加快熔炼速度。", "block.engineersdecor.small_electrical_furnace": "小型电炉", diff --git a/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model.json b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model.json new file mode 100644 index 0000000..eb1db96 --- /dev/null +++ b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model.json @@ -0,0 +1,267 @@ +{ + "textures": { + "p": "engineersdecor:block/fence/steel_mesh_pole_side", + "t": "engineersdecor:block/fence/steel_mesh_top", + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence" + }, + "elements": [ + { + "from": [3.125, 13.625, 9.4375], + "to": [12.8125, 13.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"}, + "south": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 9.625, 9.4375], + "to": [12.8125, 9.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"}, + "south": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 5.625, 9.4375], + "to": [12.8125, 5.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"}, + "south": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 1.625, 9.4375], + "to": [12.8125, 1.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"}, + "east": {"uv": [8, 14.02, 8.1875, 14.375], "texture": "#s"}, + "south": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"}, + "west": {"uv": [7.8125, 14.02, 8, 14.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 11.625, 9.625], + "to": [12.8125, 11.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"}, + "south": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 12.625, 9.875], + "to": [5.3125, 13.23, 10.1875], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 9.5, 10]}, + "faces": { + "north": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"}, + "east": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"}, + "south": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"}, + "west": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"}, + "up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 90, "texture": "#s"}, + "down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 12.625, 9], + "to": [5.3125, 13.23, 9.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 9.5, 9.125]}, + "faces": { + "north": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"}, + "east": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"}, + "south": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"}, + "west": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"}, + "up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 90, "texture": "#s"}, + "down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.5, 7.625, 9.625], + "to": [12.9375, 7.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"}, + "south": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.5, 3.625, 9.625], + "to": [12.9375, 3.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"}, + "south": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [12.25, 1, 9.25], + "to": [13, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "south": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "west": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.75, 15, 9.25], + "to": [12.25, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "south": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.75, 1, 9.25], + "to": [12.25, 2, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, -5.5, 9.625]}, + "faces": { + "north": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "east": {"uv": [7.625, 0, 8.375, 1], "texture": "#s"}, + "south": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "west": {"uv": [7.625, 0, 8.375, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3, 1, 9.25], + "to": [3.75, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "east": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "south": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [13, 0, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"} + } + }, + { + "from": [0, 0, 6.5], + "to": [3, 16, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"} + } + }, + { + "from": [0.5, 0, 9.5], + "to": [3, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"}, + "down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"} + } + }, + { + "from": [13, 0, 9.5], + "to": [15.5, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"}, + "down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"} + } + }, + { + "from": [11.75, 1.375, 9.5], + "to": [12.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [7.75, 1.375, 9.5], + "to": [8.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [3.75, 1.375, 9.5], + "to": [4.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [9.75, 1.375, 9.5], + "to": [10.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [5.75, 1.375, 9.5], + "to": [6.125, 15.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 8.5, 9.625]}, + "faces": { + "north": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + } + ] +} \ No newline at end of file diff --git a/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model_open.json b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model_open.json new file mode 100644 index 0000000..43688c4 --- /dev/null +++ b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_bottom_model_open.json @@ -0,0 +1,267 @@ +{ + "textures": { + "p": "engineersdecor:block/fence/steel_mesh_pole_side", + "t": "engineersdecor:block/fence/steel_mesh_top", + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence" + }, + "elements": [ + { + "from": [12.625, 13.625, 0.125], + "to": [12.8125, 13.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"}, + "west": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 9.625, 0.125], + "to": [12.8125, 9.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"}, + "west": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 5.625, 0.125], + "to": [12.8125, 5.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"}, + "west": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 1.625, 0.125], + "to": [12.8125, 1.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.8125, 14.02, 8, 14.375], "texture": "#s"}, + "east": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"}, + "south": {"uv": [8, 14.02, 8.1875, 14.375], "texture": "#s"}, + "west": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 11.625, 0.125], + "to": [12.625, 11.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"}, + "west": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.0625, 12.625, 0.125], + "to": [12.375, 13.23, 2.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"}, + "east": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"}, + "south": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"}, + "west": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"}, + "up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 180, "texture": "#s"}, + "down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.9375, 12.625, 0.125], + "to": [13.25, 13.23, 2.3125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [10, 2.77, 10.1875, 3.375], "texture": "#s"}, + "east": {"uv": [10.6875, 2.77, 12.875, 3.375], "texture": "#s"}, + "south": {"uv": [5.8125, 2.77, 6, 3.375], "texture": "#s"}, + "west": {"uv": [3.125, 2.77, 5.3125, 3.375], "texture": "#s"}, + "up": {"uv": [3.125, 10, 5.3125, 10.1875], "rotation": 180, "texture": "#s"}, + "down": {"uv": [3.125, 5.8125, 5.3125, 6], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 7.625, 0.5], + "to": [12.625, 7.98, 9.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"}, + "west": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 3.625, 0.5], + "to": [12.625, 3.98, 9.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"}, + "west": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 1, 9.25], + "to": [13, 16, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "east": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "west": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 15, 0.75], + "to": [13, 16, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 1, 0.75], + "to": [13, 2, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 1, 0], + "to": [13, 16, 0.75], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "east": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "west": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [13, 0, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"} + } + }, + { + "from": [0, 0, 6.5], + "to": [3, 16, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"}, + "down": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 270, "texture": "#t"} + } + }, + { + "from": [0.5, 0, 9.5], + "to": [3, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"}, + "down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"} + } + }, + { + "from": [13, 0, 9.5], + "to": [15.5, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"}, + "down": {"uv": [0, 5.5, 3, 6.5], "texture": "#t"} + } + }, + { + "from": [12.5, 1.375, 8.75], + "to": [12.75, 15.855, 9.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 1.375, 4.75], + "to": [12.75, 15.855, 5.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 1.375, 0.75], + "to": [12.75, 15.855, 1.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 1.375, 6.75], + "to": [12.75, 15.855, 7.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 1.375, 2.75], + "to": [12.75, 15.855, 3.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 8.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"} + } + } + ] +} \ No newline at end of file diff --git a/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_inventory.json b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_inventory.json new file mode 100644 index 0000000..6f09fa8 --- /dev/null +++ b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_inventory.json @@ -0,0 +1,319 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence", + "t": "engineersdecor:block/fence/steel_mesh_top" + }, + "elements": [ + { + "from": [7.5, 0, 3], + "to": [8.5, 16, 4], + "faces": { + "north": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"}, + "east": {"uv": [12, 0, 13, 16], "texture": "#s"}, + "south": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"}, + "west": {"uv": [3, 0, 4, 16], "texture": "#s"}, + "up": {"uv": [7.5, 3, 8.5, 4], "texture": "#t"}, + "down": {"uv": [7.5, 12, 8.5, 13], "texture": "#s"} + } + }, + { + "from": [7.5, 0, 12], + "to": [8.5, 16, 13], + "faces": { + "north": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"}, + "east": {"uv": [3, 0, 4, 16], "texture": "#s"}, + "south": {"uv": [7.5, 0, 8.5, 16], "texture": "#s"}, + "west": {"uv": [12, 0, 13, 16], "texture": "#s"}, + "up": {"uv": [7.5, 12, 8.5, 13], "texture": "#t"}, + "down": {"uv": [7.5, 3, 8.5, 4], "texture": "#s"} + } + }, + { + "from": [7.5, 15, 4], + "to": [8.5, 16, 12], + "faces": { + "east": {"uv": [4, 0, 12, 1], "texture": "#s"}, + "west": {"uv": [4, 0, 12, 1], "texture": "#s"}, + "up": {"uv": [7.5, 4, 8.5, 12], "texture": "#t"}, + "down": {"uv": [7.5, 4, 8.5, 12], "texture": "#s"} + } + }, + { + "from": [7.5, 7, 4], + "to": [8.5, 9, 5], + "faces": { + "east": {"uv": [11, 7, 12, 9], "texture": "#s"}, + "south": {"uv": [7.5, 7, 8.5, 9], "texture": "#s"}, + "west": {"uv": [4, 7, 5, 9], "texture": "#s"}, + "up": {"uv": [7.5, 4, 8.5, 5], "texture": "#t"}, + "down": {"uv": [7.5, 11, 8.5, 12], "texture": "#s"} + } + }, + { + "from": [7.5, 0, 4], + "to": [8.5, 0.5, 12], + "faces": { + "east": {"uv": [4, 15.5, 12, 16], "texture": "#s"}, + "west": {"uv": [4, 15.5, 12, 16], "texture": "#s"}, + "up": {"uv": [7.5, 4, 8.5, 12], "texture": "#t"}, + "down": {"uv": [7.5, 4, 8.5, 12], "texture": "#s"} + } + }, + { + "from": [8, 4.125, 3.5], + "to": [8.125, 4.5, 12.5], + "faces": { + "east": {"uv": [3.5, 11.5, 12.5, 11.875], "texture": "#s"}, + "west": {"uv": [3.5, 11.5, 12.5, 11.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 5.8125], + "to": [8.05, 15.375, 6.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [9.8125, 0.625, 10.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [5.8125, 0.625, 6.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 8.125, 3.5], + "to": [8.125, 8.5, 12.5], + "faces": { + "east": {"uv": [3.5, 7.5, 12.5, 7.875], "texture": "#s"}, + "west": {"uv": [3.5, 7.5, 12.5, 7.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 9.8125], + "to": [8.05, 15.375, 10.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [5.8125, 0.625, 6.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [9.8125, 0.625, 10.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 12.125, 3.5], + "to": [8.125, 12.5, 12.5], + "faces": { + "east": {"uv": [3.5, 3.5, 12.5, 3.875], "texture": "#s"}, + "west": {"uv": [3.5, 3.5, 12.5, 3.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [8, 2.125, 3.5], + "to": [8.125, 2.5, 12.5], + "faces": { + "east": {"uv": [3.5, 13.5, 12.5, 13.875], "texture": "#s"}, + "west": {"uv": [3.5, 13.5, 12.5, 13.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 3.8125], + "to": [8.05, 15.375, 4.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [11.8125, 0.625, 12.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [3.8125, 0.625, 4.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 6.125, 3.5], + "to": [8.125, 6.5, 12.5], + "faces": { + "east": {"uv": [3.5, 9.5, 12.5, 9.875], "texture": "#s"}, + "west": {"uv": [3.5, 9.5, 12.5, 9.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 7.8125], + "to": [8.05, 15.375, 8.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [7.8125, 0.625, 8.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [7.8125, 0.625, 8.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 10.125, 3.5], + "to": [8.125, 10.5, 12.5], + "faces": { + "east": {"uv": [3.5, 5.5, 12.5, 5.875], "texture": "#s"}, + "west": {"uv": [3.5, 5.5, 12.5, 5.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 11.8125], + "to": [8.05, 15.375, 12.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [3.8125, 0.625, 4.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [11.8125, 0.625, 12.1875, 16], "texture": "#s"} + } + }, + { + "from": [8, 14.125, 3.5], + "to": [8.125, 14.5, 12.5], + "faces": { + "east": {"uv": [3.5, 1.5, 12.5, 1.875], "texture": "#s"}, + "west": {"uv": [3.5, 1.5, 12.5, 1.875], "texture": "#s"}, + "up": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#t"}, + "down": {"uv": [8, 3.5, 8.125, 12.5], "texture": "#s"} + } + }, + { + "from": [7.875, 1.125, 3.5], + "to": [8, 1.5, 12.5], + "faces": { + "east": {"uv": [3.5, 14.5, 12.5, 14.875], "texture": "#s"}, + "west": {"uv": [3.5, 14.5, 12.5, 14.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.875, 5.125, 3.5], + "to": [8, 5.5, 12.5], + "faces": { + "east": {"uv": [3.5, 10.5, 12.5, 10.875], "texture": "#s"}, + "west": {"uv": [3.5, 10.5, 12.5, 10.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 6.8125], + "to": [8.05, 15.375, 7.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [8.8125, 0.625, 9.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [6.8125, 0.625, 7.1875, 16], "texture": "#s"} + } + }, + { + "from": [7.875, 9.125, 3.5], + "to": [8, 9.5, 12.5], + "faces": { + "east": {"uv": [3.5, 6.5, 12.5, 6.875], "texture": "#s"}, + "west": {"uv": [3.5, 6.5, 12.5, 6.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 10.8125], + "to": [8.05, 15.375, 11.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [4.8125, 0.625, 5.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [10.8125, 0.625, 11.1875, 16], "texture": "#s"} + } + }, + { + "from": [7.875, 13.125, 3.5], + "to": [8, 13.5, 12.5], + "faces": { + "east": {"uv": [3.5, 2.5, 12.5, 2.875], "texture": "#s"}, + "west": {"uv": [3.5, 2.5, 12.5, 2.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.875, 3.125, 3.5], + "to": [8, 3.5, 12.5], + "faces": { + "east": {"uv": [3.5, 12.5, 12.5, 12.875], "texture": "#s"}, + "west": {"uv": [3.5, 12.5, 12.5, 12.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 4.8125], + "to": [8.05, 15.375, 5.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [10.8125, 0.625, 11.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [4.8125, 0.625, 5.1875, 16], "texture": "#s"} + } + }, + { + "from": [7.875, 7.125, 3.5], + "to": [8, 7.5, 12.5], + "faces": { + "east": {"uv": [3.5, 8.5, 12.5, 8.875], "texture": "#s"}, + "west": {"uv": [3.5, 8.5, 12.5, 8.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + }, + { + "from": [7.925, 0, 8.8125], + "to": [8.05, 15.375, 9.1875], + "faces": { + "north": {"uv": [7.95, 0.625, 8.075, 16], "texture": "#s"}, + "east": {"uv": [6.8125, 0.625, 7.1875, 16], "texture": "#s"}, + "south": {"uv": [7.925, 0.625, 8.05, 16], "texture": "#t"}, + "west": {"uv": [8.8125, 0.625, 9.1875, 16], "texture": "#s"} + } + }, + { + "from": [7.875, 11.125, 3.5], + "to": [8, 11.5, 12.5], + "faces": { + "east": {"uv": [3.5, 4.5, 12.5, 4.875], "texture": "#s"}, + "west": {"uv": [3.5, 4.5, 12.5, 4.875], "texture": "#s"}, + "up": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#t"}, + "down": {"uv": [7.875, 3.5, 8, 12.5], "texture": "#s"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [9, 35, 0], + "translation": [0, 0, -1], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_righthand": { + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 1.5, 0], + "scale": [0.3, 0.3, 0.3] + }, + "gui": { + "rotation": [30, 135, 0], + "translation": [-0.25, 0.5, 0], + "scale": [0.7, 0.7, 0.7] + }, + "fixed": { + "rotation": [0, 90, 0], + "translation": [0, 0, -0.25] + } + } +} \ No newline at end of file diff --git a/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model.json b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model.json new file mode 100644 index 0000000..6d0e71a --- /dev/null +++ b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model.json @@ -0,0 +1,220 @@ +{ + "textures": { + "p": "engineersdecor:block/fence/steel_mesh_pole_side", + "t": "engineersdecor:block/fence/steel_mesh_top", + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence" + }, + "elements": [ + { + "from": [3.125, 12.625, 9.4375], + "to": [12.8125, 12.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"}, + "south": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 8.625, 9.4375], + "to": [12.8125, 8.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"}, + "south": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 4.625, 9.4375], + "to": [12.8125, 4.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"}, + "south": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 0.625, 9.4375], + "to": [12.8125, 0.98, 9.625], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"}, + "south": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.125, 10.625, 9.625], + "to": [12.8125, 10.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"}, + "south": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.5, 6.625, 9.625], + "to": [12.9375, 6.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"}, + "south": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3.5, 2.625, 9.625], + "to": [12.9375, 2.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"}, + "south": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 90, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [12.25, 0, 9.25], + "to": [13, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "south": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "west": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 90, "texture": "#s"} + } + }, + { + "from": [3.75, 14, 9.25], + "to": [12.25, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [2.25, 0, 13.75, 1], "texture": "#s"}, + "south": {"uv": [2.25, 0, 13.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 90, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 270, "texture": "#s"} + } + }, + { + "from": [3, 0, 9.25], + "to": [3.75, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "east": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "south": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 90, "texture": "#s"} + } + }, + { + "from": [13, 0, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"} + } + }, + { + "from": [0, 0, 6.5], + "to": [3, 16, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"} + } + }, + { + "from": [0.5, 0, 9.5], + "to": [3, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"} + } + }, + { + "from": [13, 0, 9.5], + "to": [15.5, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"} + } + }, + { + "from": [11.75, 0, 9.5], + "to": [12.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [7.75, 0, 9.5], + "to": [8.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [3.75, 0, 9.5], + "to": [4.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [9.75, 0, 9.5], + "to": [10.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [5.75, 0, 9.5], + "to": [6.125, 14.855, 9.75], + "rotation": {"angle": 0, "axis": "y", "origin": [3.375, 7.5, 9.625]}, + "faces": { + "north": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "south": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"}, + "west": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"} + } + } + ] +} \ No newline at end of file diff --git a/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model_open.json b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model_open.json new file mode 100644 index 0000000..fa0b52f --- /dev/null +++ b/1.15/src/main/resources/assets/engineersdecor/models/block/fence/steel_mesh_fence_gate_top_model_open.json @@ -0,0 +1,222 @@ +{ + "textures": { + "p": "engineersdecor:block/fence/steel_mesh_pole_side", + "t": "engineersdecor:block/fence/steel_mesh_top", + "particle": "engineersdecor:block/fence/steel_mesh_fence", + "s": "engineersdecor:block/fence/steel_mesh_fence" + }, + "elements": [ + { + "from": [12.625, 12.625, 0.125], + "to": [12.8125, 12.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 2.02, 15.5, 2.375], "texture": "#s"}, + "west": {"uv": [0.5, 2.02, 15.9375, 2.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 8.625, 0.125], + "to": [12.8125, 8.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 6.02, 15.5, 6.375], "texture": "#s"}, + "west": {"uv": [0.5, 6.02, 15.9375, 6.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 4.625, 0.125], + "to": [12.8125, 4.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 10.02, 15.5, 10.375], "texture": "#s"}, + "west": {"uv": [0.5, 10.02, 15.9375, 10.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.625, 0.625, 0.125], + "to": [12.8125, 0.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 14.02, 15.5, 14.375], "texture": "#s"}, + "west": {"uv": [0.5, 14.02, 15.9375, 14.375], "texture": "#s"}, + "up": {"uv": [7.8125, 0.0625, 8, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.8125, 0.5, 8, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 10.625, 0.125], + "to": [12.625, 10.98, 9.8125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 4.02, 15.5, 4.375], "texture": "#s"}, + "west": {"uv": [0.5, 4.02, 15.9375, 4.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 6.625, 0.5], + "to": [12.625, 6.98, 9.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 8.02, 15.5, 8.375], "texture": "#s"}, + "west": {"uv": [0.5, 8.02, 15.9375, 8.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.4375, 2.625, 0.5], + "to": [12.625, 2.98, 9.9375], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [0.0625, 12.02, 15.5, 12.375], "texture": "#s"}, + "west": {"uv": [0.5, 12.02, 15.9375, 12.375], "texture": "#s"}, + "up": {"uv": [8, 0.0625, 8.1875, 15.5], "rotation": 180, "texture": "#s"}, + "down": {"uv": [8, 0.5, 8.1875, 15.9375], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 0, 9.25], + "to": [13, 15, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "east": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "west": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "up": {"uv": [7.625, 1.5, 8.375, 2.25], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 14, 0.75], + "to": [13, 15, 9.25], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "east": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "west": {"uv": [2.25, 0, 10.75, 1], "texture": "#s"}, + "up": {"uv": [7.625, 2.25, 8.375, 10.75], "rotation": 180, "texture": "#s"}, + "down": {"uv": [7.625, 2.25, 8.375, 13.75], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [12.25, 0, 0], + "to": [13, 15, 0.75], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "east": {"uv": [13.75, 0, 14.5, 15], "texture": "#s"}, + "south": {"uv": [7.625, 0, 8.375, 15], "texture": "#s"}, + "west": {"uv": [1.5, 0, 2.25, 15], "texture": "#s"}, + "up": {"uv": [7.625, 13.75, 8.375, 14.5], "rotation": 180, "texture": "#s"} + } + }, + { + "from": [13, 0, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"} + } + }, + { + "from": [0, 0, 6.5], + "to": [3, 16, 9.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 8]}, + "faces": { + "north": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "east": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "south": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "west": {"uv": [6.5, 0, 9.5, 16], "texture": "#p"}, + "up": {"uv": [6.5, 6.5, 9.5, 9.5], "rotation": 90, "texture": "#t"} + } + }, + { + "from": [0.5, 0, 9.5], + "to": [3, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [-5, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"} + } + }, + { + "from": [13, 0, 9.5], + "to": [15.5, 16, 10.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "east": {"uv": [6, 0, 7, 16], "texture": "#p"}, + "south": {"uv": [0, 0, 3, 16], "texture": "#p"}, + "west": {"uv": [10, 0, 11, 16], "texture": "#p"}, + "up": {"uv": [6, 12, 9, 13], "texture": "#t"} + } + }, + { + "from": [12.5, 0, 8.75], + "to": [12.75, 14.855, 9.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [3.875, 0.145, 4.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [11.75, 0.145, 12.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 0, 4.75], + "to": [12.75, 14.855, 5.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [7.875, 0.145, 8.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [7.75, 0.145, 8.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 0, 0.75], + "to": [12.75, 14.855, 1.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [11.875, 0.145, 12.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [3.75, 0.145, 4.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 0, 6.75], + "to": [12.75, 14.855, 7.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [5.875, 0.145, 6.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [9.75, 0.145, 10.125, 15], "texture": "#s"} + } + }, + { + "from": [12.5, 0, 2.75], + "to": [12.75, 14.855, 3.125], + "rotation": {"angle": 0, "axis": "y", "origin": [12.625, 7.5, 9.625]}, + "faces": { + "north": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "east": {"uv": [9.875, 0.145, 10.25, 15], "texture": "#s"}, + "south": {"uv": [7.875, 0.145, 8.125, 15], "texture": "#s"}, + "west": {"uv": [5.75, 0.145, 6.125, 15], "texture": "#s"} + } + } + ] +} \ No newline at end of file diff --git a/1.15/src/main/resources/assets/engineersdecor/models/item/steel_mesh_fence_gate.json b/1.15/src/main/resources/assets/engineersdecor/models/item/steel_mesh_fence_gate.json new file mode 100644 index 0000000..4490a9b --- /dev/null +++ b/1.15/src/main/resources/assets/engineersdecor/models/item/steel_mesh_fence_gate.json @@ -0,0 +1 @@ +{ "parent": "engineersdecor:block/fence/steel_mesh_fence_gate_inventory" } \ No newline at end of file diff --git a/1.15/src/main/resources/assets/engineersdecor/textures/gui/small_electrical_furnace_gui.png b/1.15/src/main/resources/assets/engineersdecor/textures/gui/small_electrical_furnace_gui.png index 0177a2159c756879307a148d8659e098370cc037..0fdd087725253b78c0bb7f58d18f73bbbfc03449 100644 GIT binary patch literal 25902 zcmV*xKt8{TP)lfsgte|ay zA=)Ml5(r6T$Uj8Oa@YolAmxW-f&#!GX%pZsunS;;-JR~9#q4Xk``%NP{!y7(S*Pzj zw(kM=VsTGkF*E(BTj!jrtjsUJ{E{C3r@sq1X9NOcb8W7#gDV4+Q$nDK-~R32!iRoh z_7ev$;VXanS5N*I0QkEvyNq=>v^99M}KOvdNRH zzkBk_H^0ii{NfSg{eO0P`-2~y|Jr8T*NYy1{Bi!~Z~kU177M)a!VBoS2>=E&z?{KE z$bFC4bzo)?03rf_@^2zA10e=*&dAK55Kt_1KnMXT^Y$**x`P5QqS9ae6ZA&*{A} zG6RG%CvbTl6bR}k<(vSbG8X{EjGQyNuEW;$Ho%O@WMT%AnPnaUT^HS4%B|VIWlltd z5CRs91z5&9Ihg|loQP2_^VP>v#%BOA#^&FU&&Zj}eG?&20E59fmv7A?RX?p7w ze*b^=59UAr!5^OW+f%}q4*C6m^?yG3`OVgM2H??0AH}oJJ_qKqfFYYD^}W0hS?HYY zMbrgN07$-`k#Yvf1`9EQ%T7X02}A@6!4@4eqw6}^%(;w3Ww{cHk$`Lj-T%7L%O=cn z7gQFOES{8-ETCcp&@8OFpqUAoQ}g{0LNQ{x;JI#gUA(%vbVHFd1jT?cz-1mlH3WK( z#RxJOjGR*00J4!%zW|6Z>AGrMh{|Tk8EOfGY?_?%DdQMp1mt&eN}v$Lh>{sSwK_y( zKcio6HX~8_3;;pm#1I1d#iEQ$WWSShMvT$!Kg9apaw_kf0?GOyIRt<%M!Uyia3S+g zb}*;~2_YcmgeYJ8*vCF*_VWY((yV{Sn*#pH)A=v_7ys+Y-}~7gnDuYE9P$5rzJJdL zKR*9Ezw~3<{TB`sZr{NNKKSwZ2R7Ru2>vA31*Z#v-08{U6}Xk-exAXc?ImS36gfAG zj#(E1%4x5QPS$4TESsc!49W4P3o@m8lIR%4D3s61%;G(;oTMz9#?CM>XW6*LNRfIF zZs9{Vx85re6+@<9(FudiSn5XT`(k`RWy9z*WP1iI&$2%0%xpt;vhkfu(0BzzWJZWU zh%q3>h!6upjAo#-7z=%d6bOOpyE22T^UAGJ*G4*`4EuM1E}$Xri&eK{nqAef8wM?FEZSo07*WT0{*& zLRnz!V@V3KEMcJrBzCkh^u%>>DQsS4K?WkQy6`Bcm7a=_xSz#cN;xBjh@6we$SnVJ zu{#kG2sfX54%^$?w%`x;_i^>wZZT2>WI3U8O6CnTn~xct%%u~2Lk?d1JT=TD&%%de zYA`@R&c!3q&>>K8&j`+wsT(rLJ5Y}$sJFr}qf9^zA9Ulp6CKWo%0q2F4}wjAim}iy zA3Xm&wzs$K(D>@DTex~{*RX+@l7Y{E`TMr|z=Yp^I=%C+{rd6mzwe)!^$%YRIDDD^ z$_Ib*s=k@{3tuLIxw36^uVG1SncoXhX1E3BJRK98skB_OAT8lIGrO$~AyLCisB zmbr;x5I0|qkj443IdwA>kgI@~gzBd1Y1yY_pePaH=;#QG`5g24TwH6aI71UYko`^p z�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 literal 22957 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 W3(FSP0H!UoS()2ksyFj~^#1_OyMS5% diff --git a/1.15/src/main/resources/data/engineersdecor/loot_tables/blocks/steel_mesh_fence_gate.json b/1.15/src/main/resources/data/engineersdecor/loot_tables/blocks/steel_mesh_fence_gate.json new file mode 100644 index 0000000..8006fc0 --- /dev/null +++ b/1.15/src/main/resources/data/engineersdecor/loot_tables/blocks/steel_mesh_fence_gate.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "name": "steel_mesh_fence_gate_dlt", + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_name", + "source": "block_entity" + } + ], + "name": "engineersdecor:steel_mesh_fence_gate" + } + ] + } + ] +} \ No newline at end of file diff --git a/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/doors.json b/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/doors.json new file mode 100644 index 0000000..f2e5fa0 --- /dev/null +++ b/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/doors.json @@ -0,0 +1,18 @@ +{ + "name": "Gates and Doors", + "icon": "engineersdecor:steel_mesh_fence_gate", + "category": "buildingblocks", + "sortnum": 1060, + "pages": [ + { + "type": "spotlight", + "title": "Steel Mesh Fence Gate", + "item": "engineersdecor:steel_mesh_fence_gate", + "text": "A fence gate fitting the style of the $(o)Steel Mesh Fence$(). It can be placed one block high for normal fencing, or doubled for higher cage fences, and will form a fence door accordingly.$(br)Redstone open/close signals are accepted for the bottom segment from all sides, for the top segment only from above." + }, + { + "type": "text", + "text": "" + } + ] +} diff --git a/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/ladders.json b/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/ladders.json index df512ab..342a8ea 100644 --- a/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/ladders.json +++ b/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/ladders.json @@ -2,7 +2,7 @@ "name": "Ladders", "icon": "engineersdecor:treated_wood_ladder", "category": "buildingblocks", - "sortnum": 1070, + "sortnum": 1080, "pages": [ { "type": "spotlight", diff --git a/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/windows.json b/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/windows.json index a1dacee..316a6a6 100644 --- a/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/windows.json +++ b/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/buildingblocks/windows.json @@ -2,7 +2,7 @@ "name": "Windows", "icon": "engineersdecor:treated_wood_window", "category": "buildingblocks", - "sortnum": 1060, + "sortnum": 1070, "pages": [ { "type": "spotlight", diff --git a/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/crafting/small_electrical_furnace.json b/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/crafting/small_electrical_furnace.json index ac8fc4e..6cfd386 100644 --- a/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/crafting/small_electrical_furnace.json +++ b/1.15/src/main/resources/data/engineersdecor/patchouli_books/engineersdecor_manual/en_us/entries/crafting/small_electrical_furnace.json @@ -20,7 +20,7 @@ }, { "type": "text", - "text": "" + "text": "§nSpeed override switch$()$(br)A four-position switch in the bottom right area of the GUI allows to alter the processing speed of the furnace. Default is position 1 (normal). At high power expenses, you can alter this: $(br)$(li)Position 0: OFF$(li)Position 1: x1.0 -> RF x1$(li)Position 2: x1.5 -> RF x2$(li)Position 3: x2.0 -> RF x4$(br2)(Positions 0..4 are down, left, top, right)." } ] } diff --git a/1.15/src/main/resources/data/engineersdecor/recipes/independent/steel_mesh_fence_gate_recipe.json b/1.15/src/main/resources/data/engineersdecor/recipes/independent/steel_mesh_fence_gate_recipe.json new file mode 100644 index 0000000..26a4fc8 --- /dev/null +++ b/1.15/src/main/resources/data/engineersdecor/recipes/independent/steel_mesh_fence_gate_recipe.json @@ -0,0 +1,25 @@ +{ + "conditions": [ + { + "type": "engineersdecor:optional", + "result": "engineersdecor:steel_mesh_fence_gate", + "required": ["engineersdecor:thin_steel_pole", "engineersdecor:steel_mesh_fence"] + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "PFP" + ], + "key": { + "P": { + "item": "engineersdecor:thin_steel_pole" + }, + "F": { + "item": "engineersdecor:steel_mesh_fence" + } + }, + "result": { + "item": "engineersdecor:steel_mesh_fence_gate", + "count": 2 + } +} diff --git a/Makefile b/Makefile index edf1d93..731edef 100644 --- a/Makefile +++ b/Makefile @@ -41,10 +41,6 @@ compare: @djs tasks.js compare-blockstates -v @djs tasks.js compare-textures -v -migrate-from-112: - @cd 1.12; make -s port-languages - @djs tasks.js migrate-textures -v - # For reviewers: I am using a local repository for experimental changes, # this target copies the local working tree to the location of the # repository that you cloned. diff --git a/meta/update.json b/meta/update.json index d963340..6099951 100644 --- a/meta/update.json +++ b/meta/update.json @@ -4,12 +4,12 @@ "1.12.2-recommended": "1.0.19", "1.12.2-latest": "1.0.19", "1.14.4-recommended": "", - "1.14.4-latest": "1.0.19-b5", + "1.14.4-latest": "1.0.20-b1", "1.15.2-recommended": "", - "1.15.2-latest": "1.0.19-b5" + "1.15.2-latest": "1.0.20-b1" }, "1.12.2": { - "1.0.19": "[R] Release based on v1.0.19-b4. Release-to-release changes: * Transfer fixes for Tree Cutter / Block Braker, and Factory hopper. * Cleanups, feature backports * Visual fixes and improvements\n[A] Backport of status display for Tree Cutter, Block Breaker and Solar Panel.", + "1.0.19": "[R] Release based on v1.0.19-b4. Release-to-release changes: * Transfer fixes for Tree Cutter / Block Breaker, and Factory hopper. * Cleanups, feature backports * Visual fixes and improvements\n[A] Backport of status display for Tree Cutter, Block Breaker and Solar Panel.", "1.0.19-b4": "[A] Creative tab opt-out visibility handling added (issue #90, thx pimalel233).", "1.0.19-b3": "[A] Factory Hopper: Added bottom item handler (CR#227).", "1.0.19-b2": "[F] Fixed Floor Grating item pass-through jitters (thx Cid).\n[M] Removed obsolete recipe collision testing recipes.", @@ -89,6 +89,7 @@ "1.0.0-b1": "[A] Initial structure.\n[A] Added clinker bricks and clinker brick stairs.\n[A] Added slag bricks and slag brick stairs.\n[A] Added metal rung ladder.\n[A] Added staggered metal steps ladder.\n[A] Added treated wood ladder.\n[A] Added treated wood pole.\n[A] Added treated wood table." }, "1.14.4": { + "1.0.20-b1": "[A] Electrical Furnace: Added four-position speed switch (off, 100%, 150%, 200%), power consumption increases at higher rate (off, 100%, 200%, 400%).\n[A] Added Steel Mesh Fence Gate (single or double height gate fitting to the Steel Mesh Fence).\n[M] Waste Incinerator processing speed tweaked.", "1.0.19-b5": "[A] Added right-click display of power and progress information for Block Breaker, Solar Panel, and Tree Cutter.\n[A] Solar Panel power curve tuned.\n[A] Mod manual 1st edition release recipe added.\n[A] Factory Hopper: Resetting NBT when breaking with empty inventory (for stacking), enabled item cap for all sides.\n[M] Electrical Furnace model polished.", "1.0.19-b4": "[A] Ported primary Immersive Engineering dependent recipes (alternative recipes will still work if IE is not installed).\n[M] Furni comparator output overrides reflect input slots and empty fuel state/power-cutoff.\n[M] Solar Panel config: Default value for internal battery capacity increased.\n[F] Block Placer: Shifted GUI player slots 1px to the right.\n[A] Added mod block tags for slabs, stairs, and walls (PR#89, thanks CrudeAustin for the data).\n[A] Added experimental Patchouli manual (creative only).\n[!] Skipped blacklisting Treated Wood Crafting Table slots for the inventorysorter mod due to potential startup crashes for single player games (issue #88 fix deferred).", "1.0.19-b3": "[M] Config tweaks: Value limit ranges increased to facilitate modpacking.\n[A] Factory Hopper: Added bottom item handler (CR#227).\n[M] Block shapes refined.\n[F] Fixed duping bug (issue #87, thx Nachtflame)", @@ -136,6 +137,7 @@ "1.0.7-b3": "[A] Initial 1.14.2 port of decorative blocks." }, "1.15.2": { + "1.0.20-b1": "[A] Electrical Furnace: Added four-position speed switch (off, 100%, 150%, 200%), power consumption increases at higher rate (off, 100%, 200%, 400%).\n[A] Added Steel Mesh Fence Gate (single or double height gate fitting to the Steel Mesh Fence).\n[M] Waste Incinerator processing speed tweaked.\n[F] Fixed steel table visual glitch (thx Urbanxx001).\n[M] MCP/Forge mappings updated.", "1.0.19-b5": "[A] Added right-click display of power and progress information for Block Breaker, Solar Panel, and Tree Cutter.\n[A] Solar Panel power curve tuned.\n[A] Mod manual 1st edition release recipe added.\n[A] Factory Hopper: Resetting NBT when breaking with empty inventory (for stacking), enabled item cap for all sides.\n[M] Electrical Furnace model polished.", "1.0.19-b4": "[A] Ported primary Immersive Engineering dependent recipes (alternative recipes will still work if IE is not installed).\n[F] Blacklisted Treated Wood Crafting Table in inventorysorter mod (issue #88, thx Nachtflame).\n[M] Furni comparator output overrides reflect input slots and empty fuel state/power-cutoff.\n[M] Solar Panel config: Default value for internal battery capacity increased.\n[F] Block Placer: Shifted GUI player slots 1px to the right.\n[A] Added mod block tags for slabs, stairs, and walls (PR#89, thanks CrudeAustin for the data).\n[A] Added experimental Patchouli manual (creative only).", "1.0.19-b3": "[M] Config tweaks: Value limit ranges increased to facilitate modpacking.\n[A] Factory Hopper: Added bottom item handler (CR#227).\n[M] Block shapes refined.\n[F] Fixed duping bug (issue #87, thx Nachtflame)",