Fixed AI path issue #116. Dark Shingle Roof added (experimental).

This commit is contained in:
stfwi 2020-08-03 20:52:22 +02:00
parent 6876063b70
commit 267233d994
64 changed files with 1045 additions and 40 deletions

View file

@ -2,7 +2,7 @@
org.gradle.daemon=false org.gradle.daemon=false
org.gradle.jvmargs=-Xmx8G org.gradle.jvmargs=-Xmx8G
version_minecraft=1.16.1 version_minecraft=1.16.1
version_forge_minecraft=1.16.1-32.0.98 version_forge_minecraft=1.16.1-32.0.106
version_fml_mappings=20200514-1.16 version_fml_mappings=20200514-1.16
version_jei=1.16.1:7.0.0.6 version_jei=1.16.1:7.0.0.6
version_engineersdecor=1.1.1-b6 version_engineersdecor=1.1.1-b7

View file

@ -1,6 +1,7 @@
{ {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.16.1": { "1.16.1": {
"1.1.1-b7": "[F] Fixed AI-open-path bug (issue #116, ty KrAzYGEEK32, desht).\n[F] Conditional recipes extended to additional vanilla ingredients in case of oredict tag issues.\n[M] Lang file update zh_cn (PR#117, Moonisky).",
"1.1.1-b6": "[F] Iron Hatch rendering fixed (issue #113, ty KrAzYGEEK32).\n[F] Hotfix of UI tooltip crash for versions Forge < 32.0.97 mapping issue.", "1.1.1-b6": "[F] Iron Hatch rendering fixed (issue #113, ty KrAzYGEEK32).\n[F] Hotfix of UI tooltip crash for versions Forge < 32.0.97 mapping issue.",
"1.1.1-b5": "[M] Transmuted the \"Treated Wood Crafting Table\" to a \"Metal Crafting Table\" to de-duplicate the new Immersive Engineering \"Engineer's Crafting Table\".\n[F] Fixed metal pole culling (issue #109, thx Alsett).", "1.1.1-b5": "[M] Transmuted the \"Treated Wood Crafting Table\" to a \"Metal Crafting Table\" to de-duplicate the new Immersive Engineering \"Engineer's Crafting Table\".\n[F] Fixed metal pole culling (issue #109, thx Alsett).",
"1.1.1-b4": "[F] Fixed Fluid Barrel tooltip text duplicate.\n[F] Fixed IE hard-dependency opt-out.\n[M] Side Table model and shape refined.\n[A] Dense Grit Dirt added.\n[M] Wood textures slightly darker, obsolete textures removed.", "1.1.1-b4": "[F] Fixed Fluid Barrel tooltip text duplicate.\n[F] Fixed IE hard-dependency opt-out.\n[M] Side Table model and shape refined.\n[A] Dense Grit Dirt added.\n[M] Wood textures slightly darker, obsolete textures removed.",
@ -10,7 +11,7 @@
"1.1.1-a1": "[A] Initial port." "1.1.1-a1": "[A] Initial port."
}, },
"promos": { "promos": {
"1.16.1-recommended": "1.1.1-b6", "1.16.1-recommended": "1.1.1-b7",
"1.16.1-latest": "1.1.1-b6" "1.16.1-latest": "1.1.1-b7"
} }
} }

View file

@ -11,6 +11,10 @@ Mod sources for Minecraft version 1.15.1.
## Version history ## Version history
- v1.1.1-b7 [F] Fixed AI-open-path bug (issue #116, ty KrAzYGEEK32, desht).
[F] Conditional recipes extended to additional vanilla ingredients in case of oredict tag issues.
[M] Lang file update zh_cn (PR#117, Moonisky).
- v1.1.1-b6 [F] Iron Hatch rendering fixed (issue #113, ty KrAzYGEEK32). - v1.1.1-b6 [F] Iron Hatch rendering fixed (issue #113, ty KrAzYGEEK32).
[F] Hotfix of UI tooltip crash for versions Forge < 32.0.97 mapping issue. [F] Hotfix of UI tooltip crash for versions Forge < 32.0.97 mapping issue.

View file

@ -521,6 +521,8 @@ public class ModConfig
// Cache // Cache
//-------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------
@Deprecated
private static String const_exclude_patterns = "dark_shingle_*"; // experimental
private static final CompoundNBT server_config_ = new CompoundNBT(); private static final CompoundNBT server_config_ = new CompoundNBT();
private static HashSet<String> optouts_ = new HashSet<>(); private static HashSet<String> optouts_ = new HashSet<>();
private static boolean with_experimental_features_ = false; private static boolean with_experimental_features_ = false;
@ -551,6 +553,7 @@ public class ModConfig
{ {
String exc = SERVER.pattern_excludes.get().toLowerCase().replaceAll(MODID+":", "").replaceAll("[^*_,a-z0-9]", ""); String exc = SERVER.pattern_excludes.get().toLowerCase().replaceAll(MODID+":", "").replaceAll("[^*_,a-z0-9]", "");
if(!exc.isEmpty()) LOGGER.info("Config pattern excludes: '" + exc + "'"); if(!exc.isEmpty()) LOGGER.info("Config pattern excludes: '" + exc + "'");
if(!const_exclude_patterns.isEmpty()) exc += "," + const_exclude_patterns;
String[] excl = exc.split(","); String[] excl = exc.split(",");
excludes_.clear(); excludes_.clear();
for(int i=0; i< excl.length; ++i) { for(int i=0; i< excl.length; ++i) {

View file

@ -211,6 +211,28 @@ public class ModContent
// ------------------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------------------
public static final EdRoofBlock DARK_CERAMIC_SHINGLE_ROOF = (EdRoofBlock)(new EdRoofBlock(
DecorBlock.CFG_DEFAULT,
Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(2f, 15f).sound(SoundType.STONE)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "dark_shingle_roof"));
public static final DecorBlock.Normal DARK_CERAMIC_SHINGLE_ROOF_BLOCK = (DecorBlock.Normal)(new DecorBlock.Normal(
DecorBlock.CFG_DEFAULT,
Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(2f, 15f).sound(SoundType.STONE)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "dark_shingle_roof_block"));
public static final EdSlabBlock DARK_CERAMIC_SHINGLE_ROOF_SLAB = (EdSlabBlock)(new EdSlabBlock(
DecorBlock.CFG_DEFAULT,
Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(2f, 15f).sound(SoundType.STONE)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "dark_shingle_roof_slab"));
public static final EdSlabSliceBlock HALFSLAB_DARK_CERAMIC_SHINGLE_ROOF = (EdSlabSliceBlock)(new EdSlabSliceBlock(
DecorBlock.CFG_CUTOUT,
Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(2f, 15f).sound(SoundType.STONE)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "dark_shingle_roof_slabslice"));
// -------------------------------------------------------------------------------------------------------------------
public static final EdGroundBlock DENSE_GRIT_SAND = (EdGroundBlock)(new EdGroundBlock( public static final EdGroundBlock DENSE_GRIT_SAND = (EdGroundBlock)(new EdGroundBlock(
DecorBlock.CFG_DEFAULT, DecorBlock.CFG_DEFAULT,
Block.Properties.create(Material.EARTH, MaterialColor.DIRT).hardnessAndResistance(0.5f, 3f).sound(SoundType.GROUND).harvestTool(ToolType.SHOVEL) Block.Properties.create(Material.EARTH, MaterialColor.DIRT).hardnessAndResistance(0.5f, 3f).sound(SoundType.GROUND).harvestTool(ToolType.SHOVEL)
@ -281,7 +303,7 @@ public class ModContent
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_side_table")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_side_table"));
public static final DecorBlock.DirectedWaterLoggable TREATED_WOOD_WINDOWSILL = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable TREATED_WOOD_WINDOWSILL = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_FACING_PLACEMENT, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD).notSolid(), 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) Auxiliaries.getPixeledAABB(0.5,15,10.5, 15.5,16,16)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_windowsill")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_windowsill"));
@ -295,19 +317,19 @@ public class ModContent
// ------------------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------------------
public static final DecorBlock.DirectedWaterLoggable INSET_LIGHT_IRON = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable INSET_LIGHT_IRON = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_OPPOSITE_PLACEMENT, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_OPPOSITE_PLACEMENT|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_235838_a_((state)->15).notSolid(), Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_235838_a_((state)->15).notSolid(),
Auxiliaries.getPixeledAABB(5.2,5.2,0, 10.8,10.8,0.3) Auxiliaries.getPixeledAABB(5.2,5.2,0, 10.8,10.8,0.3)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_inset_light")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_inset_light"));
public static final DecorBlock.DirectedWaterLoggable FLOOR_EDGE_LIGHT_IRON = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable FLOOR_EDGE_LIGHT_IRON = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_LOOK_PLACEMENT|DecorBlock.CFG_HORIZIONTAL, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_LOOK_PLACEMENT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_235838_a_((state)->15).notSolid(), Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_235838_a_((state)->15).notSolid(),
Auxiliaries.getPixeledAABB(5,0,0, 11,2,0.5) Auxiliaries.getPixeledAABB(5,0,0, 11,2,0.5)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_floor_edge_light")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_floor_edge_light"));
public static final DecorBlock.DirectedWaterLoggable CEILING_EDGE_LIGHT_IRON = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable CEILING_EDGE_LIGHT_IRON = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_LOOK_PLACEMENT|DecorBlock.CFG_HORIZIONTAL, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_LOOK_PLACEMENT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_235838_a_((state)->15).notSolid(), Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_235838_a_((state)->15).notSolid(),
new AxisAlignedBB[]{ new AxisAlignedBB[]{
Auxiliaries.getPixeledAABB( 0,15.5,0, 16,16,2.0), Auxiliaries.getPixeledAABB( 0,15.5,0, 16,16,2.0),
@ -318,7 +340,7 @@ public class ModContent
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_ceiling_edge_light")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_ceiling_edge_light"));
public static final DecorBlock.DirectedWaterLoggable BULB_LIGHT_IRON = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable BULB_LIGHT_IRON = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_OPPOSITE_PLACEMENT, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_OPPOSITE_PLACEMENT|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_235838_a_((state)->15).notSolid(), Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).func_235838_a_((state)->15).notSolid(),
new AxisAlignedBB[]{ new AxisAlignedBB[]{
Auxiliaries.getPixeledAABB(6.5,6.5,1, 9.5,9.5,4), Auxiliaries.getPixeledAABB(6.5,6.5,1, 9.5,9.5,4),
@ -407,37 +429,37 @@ public class ModContent
// ------------------------------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------------------------------
public static final DecorBlock.DirectedWaterLoggable SIGN_MODLOGO = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable SIGN_MODLOGO = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1000f).sound(SoundType.WOOD).func_235838_a_((state)->1).notSolid(), Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1000f).sound(SoundType.WOOD).func_235838_a_((state)->1).notSolid(),
Auxiliaries.getPixeledAABB(0,0,15.6, 16,16,16.0) Auxiliaries.getPixeledAABB(0,0,15.6, 16,16,16.0)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_decor")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_decor"));
public static final DecorBlock.DirectedWaterLoggable SIGN_HOTWIRE = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable SIGN_HOTWIRE = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(),
Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_hotwire")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_hotwire"));
public static final DecorBlock.DirectedWaterLoggable SIGN_DANGER = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable SIGN_DANGER = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(),
Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_danger")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_danger"));
public static final DecorBlock.DirectedWaterLoggable SIGN_DEFENSE = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable SIGN_DEFENSE = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(),
Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_defense")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_defense"));
public static final DecorBlock.DirectedWaterLoggable SIGN_FACTORY_AREA = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable SIGN_FACTORY_AREA = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(),
Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) Auxiliaries.getPixeledAABB(2,2,15.6, 14,14,16)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_factoryarea")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_factoryarea"));
public static final DecorBlock.DirectedWaterLoggable SIGN_EXIT = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable( public static final DecorBlock.DirectedWaterLoggable SIGN_EXIT = (DecorBlock.DirectedWaterLoggable)(new DecorBlock.DirectedWaterLoggable(
DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL, DecorBlock.CFG_CUTOUT|DecorBlock.CFG_FACING_PLACEMENT|DecorBlock.CFG_HORIZIONTAL|DecorBlock.CFG_AI_PASSABLE,
Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(), Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD).notSolid(),
Auxiliaries.getPixeledAABB(3,7,15.6, 13,13,16) Auxiliaries.getPixeledAABB(3,7,15.6, 13,13,16)
)).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_exit")); )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_exit"));
@ -793,6 +815,10 @@ public class ModContent
CONCRETE_WALL, CONCRETE_WALL,
PANZERGLASS_BLOCK, PANZERGLASS_BLOCK,
PANZERGLASS_SLAB, PANZERGLASS_SLAB,
DARK_CERAMIC_SHINGLE_ROOF,
DARK_CERAMIC_SHINGLE_ROOF_BLOCK,
DARK_CERAMIC_SHINGLE_ROOF_SLAB,
HALFSLAB_DARK_CERAMIC_SHINGLE_ROOF,
METAL_RUNG_LADDER, METAL_RUNG_LADDER,
METAL_RUNG_STEPS, METAL_RUNG_STEPS,
TREATED_WOOD_LADDER, TREATED_WOOD_LADDER,

View file

@ -37,6 +37,7 @@ public class DecorBlock
public static final long CFG_FLIP_PLACEMENT_IF_SAME = StandardBlocks.CFG_FLIP_PLACEMENT_IF_SAME; public static final long CFG_FLIP_PLACEMENT_IF_SAME = StandardBlocks.CFG_FLIP_PLACEMENT_IF_SAME;
public static final long CFG_FLIP_PLACEMENT_SHIFTCLICK = StandardBlocks.CFG_FLIP_PLACEMENT_SHIFTCLICK; public static final long CFG_FLIP_PLACEMENT_SHIFTCLICK = StandardBlocks.CFG_FLIP_PLACEMENT_SHIFTCLICK;
public static final long CFG_STRICT_CONNECTIONS = StandardBlocks.CFG_STRICT_CONNECTIONS; public static final long CFG_STRICT_CONNECTIONS = StandardBlocks.CFG_STRICT_CONNECTIONS;
public static final long CFG_AI_PASSABLE = StandardBlocks.CFG_AI_PASSABLE;
public static final long CFG_HARD_IE_DEPENDENT = 0x8000000000000000L; public static final long CFG_HARD_IE_DEPENDENT = 0x8000000000000000L;
public static class Normal extends StandardBlocks.BaseBlock implements IDecorBlock public static class Normal extends StandardBlocks.BaseBlock implements IDecorBlock

View file

@ -62,7 +62,7 @@ public class EdHatchBlock extends DecorBlock.HorizontalWaterLoggable implements
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public boolean allowsMovement(BlockState state, IBlockReader world, BlockPos pos, PathType type) public boolean allowsMovement(BlockState state, IBlockReader world, BlockPos pos, PathType type)
{ return state.get(OPEN); } { return !state.get(OPEN); }
@Override @Override
public boolean isLadder(BlockState state, IWorldReader world, BlockPos pos, LivingEntity entity) public boolean isLadder(BlockState state, IWorldReader world, BlockPos pos, LivingEntity entity)

View file

@ -0,0 +1,202 @@
/*
* @file EdRoofBlock.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Roof blocks.
*/
package wile.engineersdecor.blocks;
import net.minecraft.fluid.FluidState;
import net.minecraft.fluid.Fluids;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.pathfinding.PathType;
import net.minecraft.state.EnumProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.state.properties.Half;
import net.minecraft.state.properties.StairsShape;
import net.minecraft.util.*;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
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.block.*;
import net.minecraft.block.BlockState;
import wile.engineersdecor.libmc.blocks.StandardBlocks;
import wile.engineersdecor.libmc.detail.Auxiliaries;
public class EdRoofBlock extends StandardBlocks.HorizontalWaterLoggable implements IDecorBlock
{
public static final EnumProperty<StairsShape> SHAPE = BlockStateProperties.STAIRS_SHAPE;
public static final EnumProperty<Half> HALF = BlockStateProperties.HALF;
private static final VoxelShape[][][] SHAPE_CACHE = makeShapes();
public EdRoofBlock(long config, Block.Properties properties)
{
super(config,
properties.func_235838_a_((state)->1), // .notSolid() shade rendering again messed up
Auxiliaries.getPixeledAABB(0, 0,0,16, 8, 16));
setDefaultState(stateContainer.getBaseState().with(HORIZONTAL_FACING, Direction.NORTH).with(SHAPE, StairsShape.STRAIGHT).with(WATERLOGGED, false));
}
@Override
public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context)
{ return SHAPE_CACHE[state.get(HALF).ordinal()][state.get(HORIZONTAL_FACING).getIndex()][state.get(SHAPE).ordinal()]; }
@Override
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder)
{ super.fillStateContainer(builder); builder.add(SHAPE, HALF); }
@Override
public FluidState getFluidState(BlockState state)
{ return state.get(WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state); }
@Override
public boolean allowsMovement(BlockState state, IBlockReader world, BlockPos pos, PathType type)
{ return false; }
@Override
public BlockState getStateForPlacement(BlockItemUseContext context)
{
BlockPos pos = context.getPos();
Direction face = context.getFace();
BlockState state = getDefaultState()
.with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing())
.with(HALF, (face == Direction.DOWN) ? Half.TOP : Half.BOTTOM)
.with(WATERLOGGED, context.getWorld().getFluidState(pos).getFluid()==Fluids.WATER);
return state.with(SHAPE, getStairsShapeProperty(state, context.getWorld(), pos));
}
@Override
public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld world, BlockPos pos, BlockPos facingPos)
{
if(state.get(WATERLOGGED)) world.getPendingFluidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
return (facing.getAxis().isHorizontal()) ? (state.with(SHAPE, getStairsShapeProperty(state, world, pos))) : (super.updatePostPlacement(state, facing, facingState, world, pos, facingPos));
}
@Override
public BlockState rotate(BlockState state, Rotation rot)
{ return state.with(HORIZONTAL_FACING, rot.rotate(state.get(HORIZONTAL_FACING))); }
@Override
@SuppressWarnings("deprecation")
public BlockState mirror(BlockState state, Mirror where)
{
if((where==Mirror.LEFT_RIGHT) && (state.get(HORIZONTAL_FACING).getAxis()==Direction.Axis.Z)) {
switch(state.get(SHAPE)) {
case INNER_LEFT: return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_RIGHT);
case INNER_RIGHT: return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_LEFT);
case OUTER_LEFT: return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_RIGHT);
case OUTER_RIGHT: return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_LEFT);
default: return state.rotate(Rotation.CLOCKWISE_180);
}
} else if((where==Mirror.FRONT_BACK) && (state.get(HORIZONTAL_FACING).getAxis() == Direction.Axis.X)) {
switch(state.get(SHAPE)) {
case INNER_LEFT: return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_LEFT);
case INNER_RIGHT: return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_RIGHT);
case OUTER_LEFT: return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_RIGHT);
case OUTER_RIGHT: return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_LEFT);
case STRAIGHT: return state.rotate(Rotation.CLOCKWISE_180);
}
}
return super.mirror(state, where);
}
private static boolean isRoofBlock(BlockState state)
{ return (state.getBlock() instanceof EdRoofBlock); }
private static boolean isOtherRoofState(BlockState state, IBlockReader world, BlockPos pos, Direction facing)
{
BlockState st = world.getBlockState(pos.offset(facing));
return (!isRoofBlock(st)) || (st.get(HORIZONTAL_FACING) != state.get(HORIZONTAL_FACING));
}
private static VoxelShape[][][] makeShapes()
{
VoxelShape[][][] shapes = new VoxelShape[2][6][5];
for(int half_index=0; half_index<Half.values().length; ++half_index) {
for(int direction_index=0; direction_index<Direction.values().length; ++direction_index) {
for(int stairs_shape_index=0; stairs_shape_index<StairsShape.values().length; ++stairs_shape_index) {
shapes[half_index][direction_index][stairs_shape_index] = makeShape(half_index, direction_index, stairs_shape_index);
}
}
}
return shapes;
}
private static VoxelShape makeShape(int half_index, int direction_index, int stairs_shape_index)
{
AxisAlignedBB[] straight = new AxisAlignedBB[]{
Auxiliaries.getPixeledAABB( 0, 0, 0, 16, 4, 16),
Auxiliaries.getPixeledAABB( 4, 4, 0, 16, 8, 16),
Auxiliaries.getPixeledAABB( 8, 8, 0, 16, 12, 16),
Auxiliaries.getPixeledAABB(12, 12, 0, 16, 16, 16)
};
AxisAlignedBB[] pyramid = new AxisAlignedBB[]{
Auxiliaries.getPixeledAABB( 0, 0, 0, 16, 4, 16),
Auxiliaries.getPixeledAABB( 4, 4, 4, 16, 8, 16),
Auxiliaries.getPixeledAABB( 8, 8, 8, 16, 12, 16),
Auxiliaries.getPixeledAABB(12, 12, 12, 16, 16, 16)
};
final Half half = Half.values()[half_index];
if(half==Half.TOP) {
straight = Auxiliaries.getMirroredAABB(straight, Axis.Y);
pyramid = Auxiliaries.getMirroredAABB(pyramid, Axis.Y);
}
Direction direction = Direction.byIndex(direction_index);
if((direction==Direction.UP) || (direction==Direction.DOWN)) return VoxelShapes.fullCube();
direction_index = (direction.getHorizontalIndex()+1) & 0x03; // ref NORTH -> EAST for stairs compliancy.
final StairsShape stairs = StairsShape.values()[stairs_shape_index];
switch(stairs) {
case STRAIGHT:
return Auxiliaries.getUnionShape(Auxiliaries.getYRotatedAABB(straight, direction_index));
case OUTER_LEFT:
return Auxiliaries.getUnionShape(Auxiliaries.getYRotatedAABB(pyramid, direction_index-1));
case OUTER_RIGHT:
return Auxiliaries.getUnionShape(Auxiliaries.getYRotatedAABB(pyramid, direction_index));
case INNER_LEFT:
return Auxiliaries.getUnionShape(
Auxiliaries.getYRotatedAABB(straight, direction_index),
Auxiliaries.getYRotatedAABB(straight, direction_index-1)
);
case INNER_RIGHT:
return Auxiliaries.getUnionShape(
Auxiliaries.getYRotatedAABB(straight, direction_index),
Auxiliaries.getYRotatedAABB(straight, direction_index+1)
);
default:
return VoxelShapes.fullCube();
}
}
private static StairsShape getStairsShapeProperty(BlockState state, IBlockReader world, BlockPos pos)
{
Direction direction = state.get(HORIZONTAL_FACING);
{
BlockState ns = world.getBlockState(pos.offset(direction));
if(isRoofBlock(ns) && (state.get(HALF) == ns.get(HALF))) {
Direction nf = ns.get(HORIZONTAL_FACING);
if(nf.getAxis() != state.get(HORIZONTAL_FACING).getAxis() && isOtherRoofState(state, world, pos, nf.getOpposite())) {
return (nf == direction.rotateYCCW()) ? StairsShape.OUTER_LEFT : StairsShape.OUTER_RIGHT;
}
}
}
{
BlockState ns = world.getBlockState(pos.offset(direction.getOpposite()));
if(isRoofBlock(ns) && (state.get(HALF) == ns.get(HALF))) {
Direction nf = ns.get(HORIZONTAL_FACING);
if(nf.getAxis() != state.get(HORIZONTAL_FACING).getAxis() && isOtherRoofState(state, world, pos, nf)) {
return (nf == direction.rotateYCCW()) ? StairsShape.INNER_LEFT : StairsShape.INNER_RIGHT;
}
}
}
return StairsShape.STRAIGHT;
}
}

View file

@ -13,6 +13,7 @@
package wile.engineersdecor.libmc.blocks; package wile.engineersdecor.libmc.blocks;
import net.minecraft.entity.EntitySpawnPlacementRegistry; import net.minecraft.entity.EntitySpawnPlacementRegistry;
import net.minecraft.pathfinding.PathType;
import wile.engineersdecor.libmc.detail.Auxiliaries; import wile.engineersdecor.libmc.detail.Auxiliaries;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
@ -66,6 +67,7 @@ public class StandardBlocks
public static final long CFG_FLIP_PLACEMENT_IF_SAME = 0x0000000000000100L; // placement direction flipped if an instance of the same class was clicked public static final long CFG_FLIP_PLACEMENT_IF_SAME = 0x0000000000000100L; // placement direction flipped if an instance of the same class was clicked
public static final long CFG_FLIP_PLACEMENT_SHIFTCLICK = 0x0000000000000200L; // placement direction flipped if player is sneaking public static final long CFG_FLIP_PLACEMENT_SHIFTCLICK = 0x0000000000000200L; // placement direction flipped if player is sneaking
public static final long CFG_STRICT_CONNECTIONS = 0x0000000000000400L; // blocks do not connect to similar blocks around (implementation details may vary a bit) public static final long CFG_STRICT_CONNECTIONS = 0x0000000000000400L; // blocks do not connect to similar blocks around (implementation details may vary a bit)
public static final long CFG_AI_PASSABLE = 0x0000000000000800L; // does not block movement path for AI, needed for non-opaque blocks with collision shapes not thin at the bottom or one side.
public interface IStandardBlock public interface IStandardBlock
{ {
@ -94,7 +96,7 @@ public class StandardBlocks
{ {
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
public final long config; public final long config;
public final VoxelShape vshape; private final VoxelShape vshape;
public BaseBlock(long conf, Block.Properties properties) public BaseBlock(long conf, Block.Properties properties)
{ this(conf, properties, Auxiliaries.getPixeledAABB(0, 0, 0, 16, 16,16 )); } { this(conf, properties, Auxiliaries.getPixeledAABB(0, 0, 0, 16, 16,16 )); }
@ -134,7 +136,12 @@ public class StandardBlocks
@Override @Override
public RenderTypeHint getRenderTypeHint() public RenderTypeHint getRenderTypeHint()
{ return ((config & CFG_CUTOUT)!=0) ? RenderTypeHint.CUTOUT : RenderTypeHint.SOLID; } {
if((config & CFG_CUTOUT)!=0) return RenderTypeHint.CUTOUT;
if((config & CFG_MIPPED)!=0) return RenderTypeHint.CUTOUT_MIPPED;
if((config & CFG_TRANSLUCENT)!=0) return RenderTypeHint.TRANSLUCENT;
return RenderTypeHint.SOLID;
}
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -146,6 +153,11 @@ public class StandardBlocks
public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext selectionContext) public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext selectionContext)
{ return vshape; } { return vshape; }
@Override
@SuppressWarnings("deprecation")
public boolean allowsMovement(BlockState state, IBlockReader world, BlockPos pos, PathType type)
{ return ((config & CFG_AI_PASSABLE)==0) ? false : super.allowsMovement(state, world, pos, type); }
@Override @Override
@Nullable @Nullable
public BlockState getStateForPlacement(BlockItemUseContext context) public BlockState getStateForPlacement(BlockItemUseContext context)

View file

@ -9,6 +9,7 @@
package wile.engineersdecor.libmc.blocks; package wile.engineersdecor.libmc.blocks;
import net.minecraft.entity.EntitySpawnPlacementRegistry; import net.minecraft.entity.EntitySpawnPlacementRegistry;
import net.minecraft.pathfinding.PathType;
import net.minecraft.state.BooleanProperty; import net.minecraft.state.BooleanProperty;
import net.minecraft.state.EnumProperty; import net.minecraft.state.EnumProperty;
import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.BlockStateProperties;

View file

@ -12,6 +12,7 @@ import net.minecraft.client.util.InputMappings;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.SharedConstants; import net.minecraft.util.SharedConstants;
import net.minecraft.util.math.shapes.IBooleanFunction; import net.minecraft.util.math.shapes.IBooleanFunction;
import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShape;
@ -262,15 +263,47 @@ public class Auxiliaries
public static final AxisAlignedBB[] getRotatedAABB(AxisAlignedBB[] bbs, Direction new_facing, boolean horizontal_rotation) public static final AxisAlignedBB[] getRotatedAABB(AxisAlignedBB[] bbs, Direction new_facing, boolean horizontal_rotation)
{ {
AxisAlignedBB[] transformed = new AxisAlignedBB[bbs.length]; final AxisAlignedBB[] transformed = new AxisAlignedBB[bbs.length];
for(int i=0; i<bbs.length; ++i) transformed[i] = getRotatedAABB(bbs[i], new_facing, horizontal_rotation); for(int i=0; i<bbs.length; ++i) transformed[i] = getRotatedAABB(bbs[i], new_facing, horizontal_rotation);
return transformed; return transformed;
} }
public static final VoxelShape getUnionShape(AxisAlignedBB[] aabbs) public static final AxisAlignedBB getYRotatedAABB(AxisAlignedBB bb, int clockwise_90deg_steps)
{
final Direction direction_map[] = new Direction[]{Direction.NORTH,Direction.EAST,Direction.SOUTH,Direction.WEST};
return getRotatedAABB(bb, direction_map[(clockwise_90deg_steps+4096) & 0x03], true);
}
public static final AxisAlignedBB[] getYRotatedAABB(AxisAlignedBB[] bbs, int clockwise_90deg_steps)
{
final AxisAlignedBB[] transformed = new AxisAlignedBB[bbs.length];
for(int i=0; i<bbs.length; ++i) transformed[i] = getYRotatedAABB(bbs[i], clockwise_90deg_steps);
return transformed;
}
public static final AxisAlignedBB getMirroredAABB(AxisAlignedBB bb, Axis axis)
{
switch(axis) {
case X: return new AxisAlignedBB(1-bb.maxX, bb.minY, bb.minZ, 1-bb.minX, bb.maxY, bb.maxZ);
case Y: return new AxisAlignedBB(bb.minX, 1-bb.maxY, bb.minZ, bb.maxX, 1-bb.minY, bb.maxZ);
case Z: return new AxisAlignedBB(bb.minX, bb.minY, 1-bb.maxZ, bb.maxX, bb.maxY, 1-bb.minZ);
default: return bb;
}
}
public static final AxisAlignedBB[] getMirroredAABB(AxisAlignedBB[] bbs, Axis axis)
{
final AxisAlignedBB[] transformed = new AxisAlignedBB[bbs.length];
for(int i=0; i<bbs.length; ++i) transformed[i] = getMirroredAABB(bbs[i], axis);
return transformed;
}
public static final VoxelShape getUnionShape(AxisAlignedBB[] ... aabb_list)
{ {
VoxelShape shape = VoxelShapes.empty(); VoxelShape shape = VoxelShapes.empty();
for(AxisAlignedBB aabb: aabbs) shape = VoxelShapes.combine(shape, VoxelShapes.create(aabb), IBooleanFunction.OR); for(AxisAlignedBB[] aabbs:aabb_list) {
for(AxisAlignedBB aabb: aabbs) shape = VoxelShapes.combine(shape, VoxelShapes.create(aabb), IBooleanFunction.OR);
}
return shape; return shape;
} }

View file

@ -59,7 +59,6 @@ public class OptionalRecipeCondition implements ICondition
item_optouts = item_optout_provider; item_optouts = item_optout_provider;
} }
public OptionalRecipeCondition(ResourceLocation result, List<ResourceLocation> required, List<ResourceLocation> missing, List<ResourceLocation> required_tags, List<ResourceLocation> missing_tags, boolean isexperimental, boolean result_is_tag) public OptionalRecipeCondition(ResourceLocation result, List<ResourceLocation> required, List<ResourceLocation> missing, List<ResourceLocation> required_tags, List<ResourceLocation> missing_tags, boolean isexperimental, boolean result_is_tag)
{ {
all_required = required; all_required = required;

View file

@ -11,7 +11,7 @@ displayName="Engineer's Decor"
description="Adds cosmetic blocks for the engineer's workshop, factory and home." description="Adds cosmetic blocks for the engineer's workshop, factory and home."
authors="wilechaote" authors="wilechaote"
credits="BluSunrize, Damien Hazard, malte0811, et al., the Forge Smiths, the Modders of the World." credits="BluSunrize, Damien Hazard, malte0811, et al., the Forge Smiths, the Modders of the World."
updateJSONURL="https://raw.githubusercontent.com/stfwi/engineers-decor/develop/1.16/meta/update.json" updateJSONURL="https://raw.githubusercontent.com/stfwi/engineers-decor/1.16/meta/update.json"
displayURL="https://github.com/stfwi/engineers-decor/" displayURL="https://github.com/stfwi/engineers-decor/"
logoFile="logo.png" logoFile="logo.png"

View file

@ -0,0 +1,44 @@
{
"variants": {
"facing=east,half=bottom,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_model" },
"facing=west,half=bottom,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_model", "y": 180, "uvlock": true },
"facing=south,half=bottom,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_model", "y": 90, "uvlock": true },
"facing=north,half=bottom,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_model", "y": 270, "uvlock": true },
"facing=east,half=bottom,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer" },
"facing=west,half=bottom,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 180, "uvlock": true },
"facing=south,half=bottom,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 90, "uvlock": true },
"facing=north,half=bottom,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 270, "uvlock": true },
"facing=east,half=bottom,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 270, "uvlock": true },
"facing=west,half=bottom,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 90, "uvlock": true },
"facing=south,half=bottom,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer" },
"facing=north,half=bottom,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "y": 180, "uvlock": true },
"facing=east,half=bottom,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner" },
"facing=west,half=bottom,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 180, "uvlock": true },
"facing=south,half=bottom,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 90, "uvlock": true },
"facing=north,half=bottom,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 270, "uvlock": true },
"facing=east,half=bottom,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 270, "uvlock": true },
"facing=west,half=bottom,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 90, "uvlock": true },
"facing=south,half=bottom,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner" },
"facing=north,half=bottom,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "y": 180, "uvlock": true },
"facing=east,half=top,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_model", "x": 180, "uvlock": true },
"facing=west,half=top,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_model", "x": 180, "y": 180, "uvlock": true },
"facing=south,half=top,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_model", "x": 180, "y": 90, "uvlock": true },
"facing=north,half=top,shape=straight": { "model": "engineersdecor:block/roof/dark_shingle_roof_model", "x": 180, "y": 270, "uvlock": true },
"facing=east,half=top,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 90, "uvlock": true },
"facing=west,half=top,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 270, "uvlock": true },
"facing=south,half=top,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 180, "uvlock": true },
"facing=north,half=top,shape=outer_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "uvlock": true },
"facing=east,half=top,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "uvlock": true },
"facing=west,half=top,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 180, "uvlock": true },
"facing=south,half=top,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 90, "uvlock": true },
"facing=north,half=top,shape=outer_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_outer", "x": 180, "y": 270, "uvlock": true },
"facing=east,half=top,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 90, "uvlock": true },
"facing=west,half=top,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 270, "uvlock": true },
"facing=south,half=top,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 180, "uvlock": true },
"facing=north,half=top,shape=inner_right": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "uvlock": true },
"facing=east,half=top,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "uvlock": true },
"facing=west,half=top,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 180, "uvlock": true },
"facing=south,half=top,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 90, "uvlock": true },
"facing=north,half=top,shape=inner_left": { "model": "engineersdecor:block/roof/dark_shingle_roof_model_inner", "x": 180, "y": 270, "uvlock": true }
}
}

View file

@ -0,0 +1,5 @@
{
"variants": {
"": [ { "model": "engineersdecor:block/roof/dark_shingle_roof_block_model" } ]
}
}

View file

@ -0,0 +1,16 @@
{
"variants": {
"tvariant=0,type=bottom": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s0v0_model" },
"tvariant=1,type=bottom": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s0v0_model" },
"tvariant=2,type=bottom": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s0v0_model" },
"tvariant=3,type=bottom": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s0v0_model" },
"tvariant=0,type=top": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s1v0_model" },
"tvariant=1,type=top": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s1v0_model" },
"tvariant=2,type=top": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s1v0_model" },
"tvariant=3,type=top": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s1v0_model" },
"tvariant=0,type=double": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s2v0_model" },
"tvariant=1,type=double": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s2v0_model" },
"tvariant=2,type=double": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s2v0_model" },
"tvariant=3,type=double": { "model": "engineersdecor:block/slab/specific/dark_shingle_roof_slab_s2v0_model" }
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"parts=0": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s0_model" },
"parts=1": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s1_model" },
"parts=2": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s2_model" },
"parts=3": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s3_model" },
"parts=4": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s4_model" },
"parts=5": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s5_model" },
"parts=6": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s6_model" },
"parts=7": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s7_model" },
"parts=8": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s8_model" },
"parts=9": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_s9_model" },
"parts=10": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_sa_model" },
"parts=11": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_sb_model" },
"parts=12": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_sc_model" },
"parts=13": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_sd_model" },
"parts=14": { "model": "engineersdecor:block/slab/specific/halfslab_dark_shingle_roof_se_model" }
}
}

View file

@ -67,6 +67,10 @@
"block.engineersdecor.clinker_brick_wall.help": "§6Simplistic Clinker Brick Wall.", "block.engineersdecor.clinker_brick_wall.help": "§6Simplistic Clinker Brick Wall.",
"block.engineersdecor.concrete_wall": "Concrete Wall", "block.engineersdecor.concrete_wall": "Concrete Wall",
"block.engineersdecor.concrete_wall.help": "§6Wall made of solid concrete.", "block.engineersdecor.concrete_wall.help": "§6Wall made of solid concrete.",
"block.engineersdecor.dark_shingle_roof": "Dark Ceramic Shingle Roof",
"block.engineersdecor.dark_shingle_roof_block": "Dark Ceramic Shingle Roof Block",
"block.engineersdecor.dark_shingle_roof_slab": "Dark Ceramic Shingle Roof Slab",
"block.engineersdecor.dark_shingle_roof_slabslice": "Dark Ceramic Shingle Roof Slab Slice",
"block.engineersdecor.dense_grit_dirt_block": "Dense Grit Dirt", "block.engineersdecor.dense_grit_dirt_block": "Dense Grit Dirt",
"block.engineersdecor.dense_grit_dirt_block.help": "§6A compressed dirt-like soil, plain texture with some cracks.§r Known from often used paths or trampled yard grounds. Dirt and coarse dirt can be mixed in for accentuation. Position dependent texture variations. Prevents grass spreading.", "block.engineersdecor.dense_grit_dirt_block.help": "§6A compressed dirt-like soil, plain texture with some cracks.§r Known from often used paths or trampled yard grounds. Dirt and coarse dirt can be mixed in for accentuation. Position dependent texture variations. Prevents grass spreading.",
"block.engineersdecor.dense_grit_sand_block": "Dense Grit Sand", "block.engineersdecor.dense_grit_sand_block": "Dense Grit Sand",

View file

@ -67,6 +67,10 @@
"block.engineersdecor.clinker_brick_wall.help": "§6Обыкновенная клинкерная кирпичная стена.", "block.engineersdecor.clinker_brick_wall.help": "§6Обыкновенная клинкерная кирпичная стена.",
"block.engineersdecor.concrete_wall": "Бетонная стена", "block.engineersdecor.concrete_wall": "Бетонная стена",
"block.engineersdecor.concrete_wall.help": "§6Стена из твёрдого бетона.", "block.engineersdecor.concrete_wall.help": "§6Стена из твёрдого бетона.",
"block.engineersdecor.dark_shingle_roof": "Dark Ceramic Shingle Roof",
"block.engineersdecor.dark_shingle_roof_block": "Dark Ceramic Shingle Roof Block",
"block.engineersdecor.dark_shingle_roof_slab": "Dark Ceramic Shingle Roof Slab",
"block.engineersdecor.dark_shingle_roof_slabslice": "Dark Ceramic Shingle Roof Slab Slice",
"block.engineersdecor.dense_grit_dirt_block": "Dense Grit Dirt", "block.engineersdecor.dense_grit_dirt_block": "Dense Grit Dirt",
"block.engineersdecor.dense_grit_dirt_block.help": "§6A compressed dirt-like soil, plain texture with some cracks.§r Known from often used paths or trampled yard grounds. Dirt and coarse dirt can be mixed in for accentuation. Position dependent texture variations. Prevents grass spreading.", "block.engineersdecor.dense_grit_dirt_block.help": "§6A compressed dirt-like soil, plain texture with some cracks.§r Known from often used paths or trampled yard grounds. Dirt and coarse dirt can be mixed in for accentuation. Position dependent texture variations. Prevents grass spreading.",
"block.engineersdecor.dense_grit_sand_block": "Dense Grit Sand", "block.engineersdecor.dense_grit_sand_block": "Dense Grit Sand",

View file

@ -67,10 +67,14 @@
"block.engineersdecor.clinker_brick_wall.help": "§6简单的过烧砖墙。", "block.engineersdecor.clinker_brick_wall.help": "§6简单的过烧砖墙。",
"block.engineersdecor.concrete_wall": "混凝土墙", "block.engineersdecor.concrete_wall": "混凝土墙",
"block.engineersdecor.concrete_wall.help": "§6用坚固混凝土制造的墙。", "block.engineersdecor.concrete_wall.help": "§6用坚固混凝土制造的墙。",
"block.engineersdecor.dense_grit_dirt_block": "Dense Grit Dirt", "block.engineersdecor.dark_shingle_roof": "Dark Ceramic Shingle Roof",
"block.engineersdecor.dense_grit_dirt_block.help": "§6A compressed dirt-like soil, plain texture with some cracks.§r Known from often used paths or trampled yard grounds. Dirt and coarse dirt can be mixed in for accentuation. Position dependent texture variations. Prevents grass spreading.", "block.engineersdecor.dark_shingle_roof_block": "Dark Ceramic Shingle Roof Block",
"block.engineersdecor.dense_grit_sand_block": "Dense Grit Sand", "block.engineersdecor.dark_shingle_roof_slab": "Dark Ceramic Shingle Roof Slab",
"block.engineersdecor.dense_grit_sand_block.help": "§6A compressed sandy soil mixed with stone grid, as known from machine and storage yards.§r Flowers don't really grow on that. Position dependent texture variations.", "block.engineersdecor.dark_shingle_roof_slabslice": "Dark Ceramic Shingle Roof Slab Slice",
"block.engineersdecor.dense_grit_dirt_block": "压制砾土",
"block.engineersdecor.dense_grit_dirt_block.help": "§6一种压制而成的泥土与砂土非常类似其光滑的表面上带有些许裂缝。§r常见于人来人往的小径或者肆意践踏的庭院中。重点是可以混入泥土和砂土。纹理会根据位置的不同而发生变化。可以阻止草的蔓延。",
"block.engineersdecor.dense_grit_sand_block": "压制砾砂",
"block.engineersdecor.dense_grit_sand_block.help": "§6一种压制而成的沙土其中混有石砾常见于机械场和堆货场。§r其上不能种植花朵。纹理会根据位置的不同而发生变化。",
"block.engineersdecor.factory_dropper": "工厂掉落器", "block.engineersdecor.factory_dropper": "工厂掉落器",
"block.engineersdecor.factory_dropper.help": "§6适用于高级工厂自动化的掉落器。§r有十二个轮询选择的储物格。 掉落的力度、角度、一叠数量和冷却延时可在GUI调节。三个 内部比较槽带有逻辑与或逻辑或功能,可用作内部触发源。内部触发 还能和外部红石信号触发再进行逻辑与或逻辑或。触发模拟按钮仅作测试用途。 当内部触发条件满足时,预先打开卷帘门。所有符合条件的物品 会同时掉落。点击GUI的各处来了解如何运作。", "block.engineersdecor.factory_dropper.help": "§6适用于高级工厂自动化的掉落器。§r有十二个轮询选择的储物格。 掉落的力度、角度、一叠数量和冷却延时可在GUI调节。三个 内部比较槽带有逻辑与或逻辑或功能,可用作内部触发源。内部触发 还能和外部红石信号触发再进行逻辑与或逻辑或。触发模拟按钮仅作测试用途。 当内部触发条件满足时,预先打开卷帘门。所有符合条件的物品 会同时掉落。点击GUI的各处来了解如何运作。",
"block.engineersdecor.factory_dropper.tooltips.direction": "Drop direction x/y (-45° to +45°)", "block.engineersdecor.factory_dropper.tooltips.direction": "Drop direction x/y (-45° to +45°)",
@ -127,19 +131,19 @@
"block.engineersdecor.halfslab_sheetmetal_steel.help": "§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。", "block.engineersdecor.halfslab_sheetmetal_steel.help": "§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。",
"block.engineersdecor.halfslab_treated_wood": "防腐木切片", "block.engineersdecor.halfslab_treated_wood": "防腐木切片",
"block.engineersdecor.halfslab_treated_wood.help": "§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。", "block.engineersdecor.halfslab_treated_wood.help": "§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。",
"block.engineersdecor.iron_bulb_light": "Iron Bulb Light", "block.engineersdecor.iron_bulb_light": "铁架灯泡",
"block.engineersdecor.iron_bulb_light.help": "§6Small glowstone light source§r, placed on the ceiling, walls, fence posts or metal poles.", "block.engineersdecor.iron_bulb_light.help": "§6小型萤石光源§r可放置于天花板、墙壁、栅栏以及金属栏杆上。",
"block.engineersdecor.iron_ceiling_edge_light": "Ceiling Edge Light", "block.engineersdecor.iron_ceiling_edge_light": "吸顶灯",
"block.engineersdecor.iron_ceiling_edge_light.help": "§6Small glowstone light source§r, placed at the edge of a ceiling block.", "block.engineersdecor.iron_ceiling_edge_light.help": "§6小型萤石光源§r可放置于顶部方块的边缘。",
"block.engineersdecor.iron_floor_edge_light": "嵌入地板边缘灯", "block.engineersdecor.iron_floor_edge_light": "嵌入地板边缘灯",
"block.engineersdecor.iron_floor_edge_light.help": "§6小型荧石光源置于地板方块边缘。§r\n 用于照亮电力光源难以安装的地方。", "block.engineersdecor.iron_floor_edge_light.help": "§6小型荧石光源置于地板方块边缘。§r\n 用于照亮电力光源难以安装的地方。",
"block.engineersdecor.iron_hatch": "Iron Hatch", "block.engineersdecor.iron_hatch": "Iron Hatch",
"block.engineersdecor.iron_hatch.help": "§6An upside down trapdoor,§r placed above mainenance shafts or ladders. Creeper-proof, functions as ladder when open.", "block.engineersdecor.iron_hatch.help": "§6An upside down trapdoor,§r placed above mainenance shafts or ladders. Creeper-proof, functions as ladder when open.",
"block.engineersdecor.iron_inset_light": "嵌入灯", "block.engineersdecor.iron_inset_light": "嵌入灯",
"block.engineersdecor.iron_inset_light.help": "§6小型荧石光源能嵌入地板、天花板或墙里。§r\n 用于照亮电力光源难以安装的地方。 亮度与火把一样。", "block.engineersdecor.iron_inset_light.help": "§6小型荧石光源能嵌入地板、天花板或墙里。§r\n 用于照亮电力光源难以安装的地方。 亮度与火把一样。",
"block.engineersdecor.labeled_crate": "Labeled Crate", "block.engineersdecor.labeled_crate": "贴标签的板条箱",
"block.engineersdecor.labeled_crate.help": "§6A storage crate with 9x6 slots and a built-in item frame at the front.§r\nPlace an item into the frame slot at the bottom right of the GUI to define the shown label.", "block.engineersdecor.labeled_crate.help": "§6具备 9x6 大小格子的木箱前面自带一个物品展示框。§r\n将物品放置在 GUI 右下角的框架槽内,可以定义所显示的标签。",
"block.engineersdecor.labeled_crate.tip": "§6Label:§r %1$s\n%2$s slots used / %3$s free\n%4$s total items stored", "block.engineersdecor.labeled_crate.tip": "§6标签§r %1$s\n已使用 %2$s / 剩余 %3$s \n共存储 %4$s 件物品",
"block.engineersdecor.metal_rung_ladder": "金属蹬梯子", "block.engineersdecor.metal_rung_ladder": "金属蹬梯子",
"block.engineersdecor.metal_rung_ladder.help": "§6典型的工业墙梯由水平的金属杆蹬组成。§r往上/下看会爬得更快。", "block.engineersdecor.metal_rung_ladder.help": "§6典型的工业墙梯由水平的金属杆蹬组成。§r往上/下看会爬得更快。",
"block.engineersdecor.metal_rung_steps": "交错金属台阶", "block.engineersdecor.metal_rung_steps": "交错金属台阶",
@ -217,10 +221,10 @@
"block.engineersdecor.steel_floor_grating.help": "§6装饰用钢制地板盖。§r顶端对齐。掉落物会穿过。", "block.engineersdecor.steel_floor_grating.help": "§6装饰用钢制地板盖。§r顶端对齐。掉落物会穿过。",
"block.engineersdecor.steel_framed_window": "钢框窗", "block.engineersdecor.steel_framed_window": "钢框窗",
"block.engineersdecor.steel_framed_window.help": "§6钢框三层玻璃窗。绝缘良好。§r不像玻璃板一样连接到相邻方块。", "block.engineersdecor.steel_framed_window.help": "§6钢框三层玻璃窗。绝缘良好。§r不像玻璃板一样连接到相邻方块。",
"block.engineersdecor.steel_mesh_fence": "钢栅栏", "block.engineersdecor.steel_mesh_fence": "钢制网状栅栏",
"block.engineersdecor.steel_mesh_fence.help": "§6工业栅栏。§r\n不与普通栅栏连接。", "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": "钢制网状栅栏门",
"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.steel_mesh_fence_gate.help": "§6工业风格的栅栏门可以同钢丝栅栏完美搭配。§r\n放置时可以设置为单叶门或者双叶门。",
"block.engineersdecor.steel_table": "钢桌", "block.engineersdecor.steel_table": "钢桌",
"block.engineersdecor.steel_table.help": "§6结实的四脚钢桌。", "block.engineersdecor.steel_table.help": "§6结实的四脚钢桌。",
"block.engineersdecor.straight_pipe_valve": "输液管止回阀", "block.engineersdecor.straight_pipe_valve": "输液管止回阀",

View file

@ -0,0 +1 @@
{ "parent": "block/cube_all", "textures": { "all": "engineersdecor:block/roof/dark_shingle_roof" } }

View file

@ -0,0 +1,71 @@
{
"parent": "block/block",
"textures": {
"particle": "engineersdecor:block/roof/dark_shingle_roof",
"s": "engineersdecor:block/roof/dark_shingle_roof"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 4, 16],
"faces": {
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#s"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"texture": "#s"}
}
},
{
"from": [4, 4, 0],
"to": [16, 8, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 8]},
"faces": {
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#s"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"texture": "#s"}
}
},
{
"from": [8, 8, 0],
"to": [16, 12, 16],
"faces": {
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#s"},
"west": {"texture": "#s"},
"up": {"texture": "#s"}
}
},
{
"from": [12, 12, 0],
"to": [16, 16, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 8]},
"faces": {
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#s"},
"west": {"texture": "#s"},
"up": {"texture": "#s"}
}
}
],
"display": {
"thirdperson_lefthand": {
"rotation": [75, -135, 0],
"translation": [0, 2.5, 0],
"scale": [0.375, 0.375, 0.375]
},
"gui": {
"rotation": [30, 135, 0],
"scale": [0.625, 0.625, 0.625]
},
"head": {
"rotation": [0, -90, 0]
}
}
}

View file

@ -0,0 +1,98 @@
{
"textures": {
"particle": "engineersdecor:block/roof/dark_shingle_roof",
"s": "engineersdecor:block/roof/dark_shingle_roof"
},
"elements": [
{
"from": [12, 0, 0],
"to": [16, 16, 12],
"faces": {
"north": {"uv": [0, 0, 4, 16], "texture": "#s"},
"east": {"uv": [4, 0, 16, 16], "texture": "#s"},
"south": {"uv": [12, 0, 16, 16], "texture": "#s"},
"west": {"uv": [0, 0, 12, 16], "texture": "#s"},
"up": {"uv": [12, 0, 16, 12], "texture": "#s"},
"down": {"uv": [12, 4, 16, 16], "texture": "#s"}
}
},
{
"from": [0, 0, 12],
"to": [16, 16, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 16]},
"faces": {
"north": {"uv": [0, 0, 16, 16], "texture": "#s"},
"east": {"uv": [0, 0, 4, 16], "texture": "#s"},
"south": {"uv": [0, 0, 16, 16], "texture": "#s"},
"west": {"uv": [12, 0, 16, 16], "texture": "#s"},
"up": {"uv": [0, 12, 16, 16], "texture": "#s"},
"down": {"uv": [0, 0, 16, 4], "texture": "#s"}
}
},
{
"from": [0, 0, 8],
"to": [12, 12, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 12]},
"faces": {
"north": {"uv": [4, 4, 16, 16], "texture": "#s"},
"east": {"uv": [4, 4, 8, 16], "texture": "#s"},
"south": {"uv": [0, 4, 12, 16], "texture": "#s"},
"west": {"uv": [8, 4, 12, 16], "texture": "#s"},
"up": {"uv": [0, 8, 12, 12], "texture": "#s"},
"down": {"uv": [0, 4, 12, 8], "texture": "#s"}
}
},
{
"from": [0, 0, 4],
"to": [8, 8, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 8]},
"faces": {
"north": {"uv": [8, 8, 16, 16], "texture": "#s"},
"east": {"uv": [8, 8, 12, 16], "texture": "#s"},
"south": {"uv": [0, 8, 8, 16], "texture": "#s"},
"west": {"uv": [4, 8, 8, 16], "texture": "#s"},
"up": {"uv": [0, 4, 8, 8], "texture": "#s"},
"down": {"uv": [0, 8, 8, 12], "texture": "#s"}
}
},
{
"from": [8, 0, 0],
"to": [12, 12, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 8]},
"faces": {
"north": {"uv": [4, 4, 8, 16], "texture": "#s"},
"east": {"uv": [8, 4, 16, 16], "texture": "#s"},
"south": {"uv": [8, 4, 12, 16], "texture": "#s"},
"west": {"uv": [0, 4, 8, 16], "texture": "#s"},
"up": {"uv": [8, 0, 12, 8], "texture": "#s"},
"down": {"uv": [8, 8, 12, 16], "texture": "#s"}
}
},
{
"from": [4, 0, 0],
"to": [8, 8, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [4, 12, 8]},
"faces": {
"north": {"uv": [8, 8, 12, 16], "texture": "#s"},
"east": {"uv": [12, 8, 16, 16], "texture": "#s"},
"south": {"uv": [4, 8, 8, 16], "texture": "#s"},
"west": {"uv": [0, 8, 4, 16], "texture": "#s"},
"up": {"uv": [4, 0, 8, 4], "texture": "#s"},
"down": {"uv": [4, 12, 8, 16], "texture": "#s"}
}
},
{
"from": [0, 0, 0],
"to": [4, 4, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [0, 12, 8]},
"faces": {
"north": {"uv": [12, 12, 16, 16], "texture": "#s"},
"east": {"uv": [12, 12, 16, 16], "texture": "#s"},
"south": {"uv": [0, 12, 4, 16], "texture": "#s"},
"west": {"uv": [0, 12, 4, 16], "texture": "#s"},
"up": {"uv": [0, 0, 4, 4], "texture": "#s"},
"down": {"uv": [0, 12, 4, 16], "texture": "#s"}
}
}
]
}

View file

@ -0,0 +1,56 @@
{
"textures": {
"particle": "engineersdecor:block/roof/dark_shingle_roof",
"s": "engineersdecor:block/roof/dark_shingle_roof"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 4, 16],
"faces": {
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#s"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"texture": "#s"}
}
},
{
"from": [4, 4, 4],
"to": [16, 8, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 8]},
"faces": {
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#s"},
"west": {"texture": "#s"},
"up": {"texture": "#s"},
"down": {"texture": "#s"}
}
},
{
"from": [8, 8, 8],
"to": [16, 12, 16],
"faces": {
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#s"},
"west": {"texture": "#s"},
"up": {"texture": "#s"}
}
},
{
"from": [12, 12, 12],
"to": [16, 16, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 12, 8]},
"faces": {
"north": {"texture": "#s"},
"east": {"texture": "#s"},
"south": {"texture": "#s"},
"west": {"texture": "#s"},
"up": {"texture": "#s"}
}
}
]
}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/slab_s0_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/slab_s1_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/slab_s2_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s0_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s1_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s2_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s3_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s4_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s5_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s6_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s7_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s8_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_s9_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sa_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sb_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sc_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_sd_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_se_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{ "parent": "engineersdecor:block/roof/dark_shingle_roof_model" }

View file

@ -0,0 +1 @@
{ "parent": "engineersdecor:block/roof/dark_shingle_roof_block_model" }

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/slab_inventory_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

View file

@ -0,0 +1 @@
{"parent":"engineersdecor:block/slab/generic/halfslab_inventory_model","textures":{"all":"engineersdecor:block/roof/dark_shingle_roof"}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

View file

@ -0,0 +1,21 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "dark_shingle_roof_dlt",
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:copy_name",
"source": "block_entity"
}
],
"name": "engineersdecor:dark_shingle_roof"
}
]
}
]
}

View file

@ -0,0 +1,21 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "dark_shingle_roof_block_dlt",
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:copy_name",
"source": "block_entity"
}
],
"name": "engineersdecor:dark_shingle_roof_block"
}
]
}
]
}

View file

@ -29,8 +29,7 @@
"conditions": [ "conditions": [
{ {
"type": "engineersdecor:optional", "type": "engineersdecor:optional",
"result": "engineersdecor:gas_concrete", "result": "engineersdecor:gas_concrete"
"missing": ["immersiveengineering:concrete", "#forge:sand"]
} }
], ],
"recipe": { "recipe": {

View file

@ -51,6 +51,31 @@
"count": 8 "count": 8
} }
} }
},
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:iron_inset_light"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"pattern": [
" ",
"GGG",
"PLP"
],
"key": {
"P": { "item": "minecraft:iron_ingot" },
"L": { "item" : "minecraft:glowstone" },
"G": { "item" : "minecraft:glass_pane" }
},
"result": {
"item": "engineersdecor:iron_inset_light",
"count": 8
}
}
} }
] ]
} }

View file

@ -0,0 +1,30 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:dark_shingle_roof_slabslice",
"required": ["engineersdecor:dark_shingle_roof_slab"]
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"pattern": [
"SS",
"SS"
],
"key": {
"S": {
"item": "engineersdecor:dark_shingle_roof_slab"
}
},
"result": {
"item": "engineersdecor:dark_shingle_roof_slabslice",
"count": 16
}
}
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:dark_shingle_roof_slab",
"required": ["engineersdecor:dark_shingle_roof_slabslice"]
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"pattern": [
"SS",
"SS"
],
"key": {
"S": {
"item": "engineersdecor:dark_shingle_roof_slabslice"
}
},
"result": {
"item": "engineersdecor:dark_shingle_roof_slab",
"count": 1
}
}
}
]
}

View file

@ -0,0 +1,33 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:dark_shingle_roof"
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"pattern": [
"B ",
"BB ",
"DBB"
],
"key": {
"B": {
"item": "minecraft:brick"
},
"D": {
"item": "minecraft:black_dye"
}
},
"result": {
"item": "engineersdecor:dark_shingle_roof",
"count": 8
}
}
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:dark_shingle_roof_block",
"required": ["engineersdecor:dark_shingle_roof"]
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"pattern": [
"RR",
"RR"
],
"key": {
"R": {
"item": "engineersdecor:dark_shingle_roof"
}
},
"result": {
"item": "engineersdecor:dark_shingle_roof_block",
"count": 3
}
}
}
]
}

View file

@ -0,0 +1,31 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:dark_shingle_roof",
"required": ["engineersdecor:dark_shingle_roof_block"]
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"pattern": [
"B ",
"BB ",
"BBB"
],
"key": {
"B": {
"item": "engineersdecor:dark_shingle_roof_block"
}
},
"result": {
"item": "engineersdecor:dark_shingle_roof",
"count": 8
}
}
}
]
}

View file

@ -0,0 +1,29 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:dark_shingle_roof_slab",
"required": ["engineersdecor:dark_shingle_roof_block"]
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"pattern": [
"BBB"
],
"key": {
"B": {
"item": "engineersdecor:dark_shingle_roof_block"
}
},
"result": {
"item": "engineersdecor:dark_shingle_roof_slab",
"count": 6
}
}
}
]
}

View file

@ -0,0 +1,28 @@
{
"type": "forge:conditional",
"recipes": [
{
"conditions": [
{
"type": "engineersdecor:optional",
"result": "engineersdecor:dark_shingle_roof_block",
"required": ["engineersdecor:dark_shingle_roof_slab"]
}
],
"recipe": {
"type": "minecraft:crafting_shaped",
"pattern": [
"S",
"S"
],
"key": {
"S": { "item": "engineersdecor:dark_shingle_roof_slab" }
},
"result": {
"item": "engineersdecor:dark_shingle_roof_block",
"count": 1
}
}
}
]
}

View file

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"minecraft:bricks",
"minecraft:nether_bricks"
]
}

View file

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"minecraft:dirt",
"minecraft:coarse_dirt"
]
}

View file

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"minecraft:glowstone",
"minecraft:sea_lantern"
]
}

View file

@ -0,0 +1,37 @@
{
"replace": false,
"values": [
"minecraft:black_concrete_powder",
"minecraft:blue_concrete_powder",
"minecraft:brown_concrete_powder",
"minecraft:cyan_concrete_powder",
"minecraft:gray_concrete_powder",
"minecraft:green_concrete_powder",
"minecraft:light_blue_concrete_powder",
"minecraft:light_gray_concrete_powder",
"minecraft:lime_concrete_powder",
"minecraft:magenta_concrete_powder",
"minecraft:orange_concrete_powder",
"minecraft:pink_concrete_powder",
"minecraft:purple_concrete_powder",
"minecraft:red_concrete_powder",
"minecraft:white_concrete_powder",
"minecraft:yellow_concrete_powder",
"minecraft:black_concrete",
"minecraft:blue_concrete",
"minecraft:brown_concrete",
"minecraft:cyan_concrete",
"minecraft:gray_concrete",
"minecraft:green_concrete",
"minecraft:light_blue_concrete",
"minecraft:light_gray_concrete",
"minecraft:lime_concrete",
"minecraft:magenta_concrete",
"minecraft:orange_concrete",
"minecraft:pink_concrete",
"minecraft:purple_concrete",
"minecraft:red_concrete",
"minecraft:white_concrete",
"minecraft:yellow_concrete"
]
}

View file

@ -0,0 +1,22 @@
{
"replace": false,
"values": [
"minecraft:glass",
"minecraft:black_stained_glass",
"minecraft:blue_stained_glass",
"minecraft:brown_stained_glass",
"minecraft:cyan_stained_glass",
"minecraft:gray_stained_glass",
"minecraft:green_stained_glass",
"minecraft:light_blue_stained_glass",
"minecraft:light_gray_stained_glass",
"minecraft:lime_stained_glass",
"minecraft:magenta_stained_glass",
"minecraft:orange_stained_glass",
"minecraft:pink_stained_glass",
"minecraft:purple_stained_glass",
"minecraft:red_stained_glass",
"minecraft:white_stained_glass",
"minecraft:yellow_stained_glass"
]
}

View file

@ -0,0 +1,22 @@
{
"replace": false,
"values": [
"minecraft:glass_pane",
"minecraft:black_stained_glass_pane",
"minecraft:blue_stained_glass_pane",
"minecraft:brown_stained_glass_pane",
"minecraft:cyan_stained_glass_pane",
"minecraft:gray_stained_glass_pane",
"minecraft:green_stained_glass_pane",
"minecraft:light_blue_stained_glass_pane",
"minecraft:light_gray_stained_glass_pane",
"minecraft:lime_stained_glass_pane",
"minecraft:magenta_stained_glass_pane",
"minecraft:orange_stained_glass_pane",
"minecraft:pink_stained_glass_pane",
"minecraft:purple_stained_glass_pane",
"minecraft:red_stained_glass_pane",
"minecraft:white_stained_glass_pane",
"minecraft:yellow_stained_glass_pane"
]
}