Added check valve, double-T supports with auto-connections. Block/te registration adapted.

This commit is contained in:
stfwi 2019-04-27 20:43:50 +02:00
parent 9217753469
commit a6bdff4bde
27 changed files with 707 additions and 66 deletions

View file

@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G
version_minecraft=1.12.2
version_forge=14.23.5.2768
version_jei=4.10.0.198
version_engineersdecor=1.0.4-b4
version_engineersdecor=1.0.4-b5

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.",
"1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).",
"1.0.4-b3": "[A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles.\n[A] Added support head/foot components for thin and thick steel poles.",
"1.0.4-b2": "[A] Added position dependent texture variation to clinker wall, slag brick wall and rebar concrete wall.",
@ -28,6 +29,6 @@
},
"promos": {
"1.12.2-recommended": "1.0.3",
"1.12.2-latest": "1.0.4-b4"
"1.12.2-latest": "1.0.4-b5"
}
}

View file

@ -10,6 +10,10 @@ Mod sources for Minecraft version 1.12.2.
----
## Revision history
- v1.0.4-b5 [A] Horizontal steel double-T support beam with pole connections.
[A] Added fluid pipe check valve (straight, conducts only one way).
[M] Internal registration block/te handling changed.
- v1.0.4-b4 [F] Clinker/slag brick wall side cullfacing disabled to prevent
texture leaks when connecting to concrete walls.
[F] Unused treated wood pole texture regions filled (optifine).

View file

@ -1,15 +1,19 @@
/*
* @file BlockDecorDirected.java
* @file BlockDecorHorizontalSupport.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Smaller (cutout) block with a defined facing.
* Horizontal ceiling support. Symmetric x axis, fixed in
* xz plane, therefore boolean placement state.
*/
package wile.engineersdecor.blocks;
import net.minecraft.block.SoundType;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import wile.engineersdecor.detail.ModAuxiliaries;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.material.Material;
@ -31,7 +35,10 @@ import java.util.Arrays;
public class BlockDecorHorizontalSupport extends BlockDecor
{
public static final PropertyBool EASTWEST = PropertyBool.create("eastwest");
public static final PropertyBool EASTWEST = PropertyBool.create("eastwest");
public static final PropertyBool LEFTBEAM = PropertyBool.create("leftbeam");
public static final PropertyBool RIGHTBEAM = PropertyBool.create("rightbeam");
public static final PropertyInteger DOWNCONNECT = PropertyInteger.create("downconnect", 0, 2);
protected final ArrayList<AxisAlignedBB> AABBs;
public BlockDecorHorizontalSupport(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB)
@ -39,10 +46,13 @@ public class BlockDecorHorizontalSupport extends BlockDecor
super(registryName, config|CFG_HORIZIONTAL, material, hardness, resistance, sound);
final boolean is_horizontal = ((config & CFG_HORIZIONTAL)!=0);
AABBs = new ArrayList<AxisAlignedBB>(Arrays.asList(
// Effective bounding box
ModAuxiliaries.getRotatedAABB(unrotatedAABB.grow(2.0/16, 0, 0), EnumFacing.NORTH, true),
ModAuxiliaries.getRotatedAABB(unrotatedAABB.grow(2.0/16, 0, 0), EnumFacing.WEST, true),
// Displayed bounding box
ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.NORTH, true),
ModAuxiliaries.getRotatedAABB(unrotatedAABB, EnumFacing.WEST, true)
));
}
@Override
@ -66,6 +76,11 @@ public class BlockDecorHorizontalSupport extends BlockDecor
public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face)
{ return BlockFaceShape.UNDEFINED; }
@SideOnly(Side.CLIENT)
@SuppressWarnings("deprecation")
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World world, BlockPos pos)
{ return AABBs.get(state.getValue(EASTWEST) ? 0x3 : 0x2).offset(pos); }
@Override
@SuppressWarnings("deprecation")
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
@ -78,15 +93,39 @@ public class BlockDecorHorizontalSupport extends BlockDecor
@Override
public IBlockState getStateFromMeta(int meta)
{ return this.getDefaultState().withProperty(EASTWEST, ((meta & 0x1) != 0)); }
{ return getDefaultState().withProperty(EASTWEST, ((meta & 0x1) != 0)); }
@Override
public int getMetaFromState(IBlockState state)
{ return state.getValue(EASTWEST) ? 0x1 : 0x0; }
{ return (state.getValue(EASTWEST) ? 0x1:0x0); }
@Override
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos)
{
boolean ew = state.getValue(EASTWEST);
final IBlockState rstate = world.getBlockState((!ew) ? (pos.east()) : (pos.south()) );
final IBlockState lstate = world.getBlockState((!ew) ? (pos.west()) : (pos.north()) );
final IBlockState dstate = world.getBlockState(pos.down());
int down_connector = 0;
if((dstate.getBlock() instanceof BlockDecorStraightPole)) {
final EnumFacing dfacing = dstate.getValue(BlockDecorStraightPole.FACING);
final BlockDecorStraightPole pole = (BlockDecorStraightPole)dstate.getBlock();
if((dfacing.getAxis() == EnumFacing.Axis.Y)) {
if((pole==ModBlocks.THICK_STEEL_POLE) || ((pole==ModBlocks.THICK_STEEL_POLE_HEAD) && (dfacing==EnumFacing.UP))) {
down_connector = 2;
} else if((pole==ModBlocks.THIN_STEEL_POLE) || ((pole==ModBlocks.THIN_STEEL_POLE_HEAD) && (dfacing==EnumFacing.UP))) {
down_connector = 1;
}
}
}
return state.withProperty(RIGHTBEAM, (rstate.getBlock()==this) && (rstate.getValue(EASTWEST) != ew))
.withProperty(LEFTBEAM , (lstate.getBlock()==this) && (lstate.getValue(EASTWEST) != ew))
.withProperty(DOWNCONNECT , down_connector);
}
@Override
protected BlockStateContainer createBlockState()
{ return new BlockStateContainer(this, EASTWEST); }
{ return new BlockStateContainer(this, EASTWEST, RIGHTBEAM, LEFTBEAM, DOWNCONNECT); }
@Override
public IBlockState withRotation(IBlockState state, Rotation rot)
@ -104,9 +143,6 @@ public class BlockDecorHorizontalSupport extends BlockDecor
@Override
@SuppressWarnings("deprecation")
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer)
{
facing = placer.getHorizontalFacing();
return getDefaultState().withProperty(EASTWEST, (facing==EnumFacing.EAST)||(facing==EnumFacing.WEST));
}
{ return getActualState(getDefaultState().withProperty(EASTWEST, (placer.getHorizontalFacing().getAxis()==EnumFacing.Axis.X)), world, pos); }
}

View file

@ -0,0 +1,198 @@
/*
* @file BlockDecorPipeValve.java
* @author Stefan Wilhelm (wile)
* @copyright (C) 2019 Stefan Wilhelm
* @license MIT (see https://opensource.org/licenses/MIT)
*
* Basically a piece of pipe that does not connect to
* pipes on the side, and conducts fluids only in one way.
*/
package wile.engineersdecor.blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.IFluidTankProperties;
import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class BlockDecorPipeValve extends BlockDecorDirected
{
public BlockDecorPipeValve(@Nonnull String registryName, long config, @Nullable Material material, float hardness, float resistance, @Nullable SoundType sound, @Nonnull AxisAlignedBB unrotatedAABB)
{ super(registryName, config, material, hardness, resistance, sound, unrotatedAABB); }
@Override
@SuppressWarnings("deprecation")
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer)
{
IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer);
if(!placer.isSneaking()) state = state.withProperty(FACING, state.getValue(FACING).getOpposite());
return state;
}
@Override
@SuppressWarnings("deprecation")
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos)
{
EnumFacing fc = state.getValue(FACING);
if(fromPos.equals(pos.offset(fc)) || fromPos.equals(pos.offset(fc.getOpposite()))) update_te(world, state, pos);
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
{
update_te(world, state, pos);
world.notifyNeighborsOfStateChange(pos, this, true);
}
@Override
public boolean hasTileEntity(IBlockState state)
{ return true; }
@Nullable
public TileEntity createTileEntity(World world, IBlockState state)
{ return new BlockDecorPipeValve.BTileEntity(); }
private void update_te(World world, IBlockState state, BlockPos pos)
{
TileEntity te = world.getTileEntity(pos);
if(te instanceof BlockDecorPipeValve.BTileEntity) ((BlockDecorPipeValve.BTileEntity)te).block_reconfigure(state.getValue(FACING));
}
//--------------------------------------------------------------------------------------------------------------------
// Tile entity
//--------------------------------------------------------------------------------------------------------------------
public static class BTileEntity extends TileEntity implements IFluidHandler, IFluidTankProperties, ICapabilityProvider
{
public static final int FLUID_CAPACITY_MB = 1000; // likely also the max flow per tick
private static final BackFlowHandler back_flow_handler_ = new BackFlowHandler();
private final IFluidTankProperties[] fluid_props_ = {this};
private EnumFacing block_facing_ = EnumFacing.NORTH;
private boolean filling = false;
public BTileEntity()
{}
public void block_reconfigure(EnumFacing facing)
{ block_facing_ = facing; }
// TileEntity ------------------------------------------------------------------------------
@Override
public boolean shouldRefresh(World world, BlockPos pos, IBlockState os, IBlockState ns)
{ return (os.getBlock() != ns.getBlock()) || (!(ns.getBlock() instanceof BlockDecorPipeValve)); }
@Override
public void onLoad()
{
if(!hasWorld()) return;
final IBlockState state = world.getBlockState(pos);
if((!(state.getBlock() instanceof BlockDecorPipeValve))) return;
block_reconfigure(state.getValue(FACING));
}
// ICapabilityProvider --------------------------------------------------------------------
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing)
{ return ((capability==CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) && ((facing==block_facing_) || (facing==block_facing_.getOpposite()))); }
@Override
@SuppressWarnings("unchecked")
@Nullable
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing)
{
if(capability!=CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) return super.getCapability(capability, facing);
return (facing==block_facing_) ? ((T)back_flow_handler_) : (((T)this));
}
// IFluidHandler/IFluidTankProperties ---------------------------------------------------------------
@Override
public int fill(FluidStack resource, boolean doFill)
{
if(filling) return 0;
final TileEntity te = world.getTileEntity(pos.offset(block_facing_));
if(te == null) return 0;
final IFluidHandler fh = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, block_facing_.getOpposite());
if(fh==null) return 0;
filling = true; // in case someone does not check the cap, but just "forwards back" what is beeing filled right now.
int n_filled = fh.fill(resource, doFill);
filling = false;
return n_filled;
}
@Override
@Nullable
public FluidStack drain(FluidStack resource, boolean doDrain)
{ return null; }
@Override
@Nullable
public FluidStack drain(int maxDrain, boolean doDrain)
{ return null; }
@Override
public IFluidTankProperties[] getTankProperties()
{ return fluid_props_; }
// IFluidTankProperties --
@Override
@Nullable
public FluidStack getContents()
{ return null; }
public int getCapacity()
{ return FLUID_CAPACITY_MB; }
@Override
public boolean canFill()
{ return true; }
@Override
public boolean canDrain()
{ return false; }
@Override
public boolean canFillFluidType(FluidStack fluidStack)
{ return true; }
@Override
public boolean canDrainFluidType(FluidStack fluidStack)
{ return false; }
// Back flow prevention handler --
private static class BackFlowHandler implements IFluidHandler, IFluidTankProperties
{
private final IFluidTankProperties[] props_ = {this};
@Override public IFluidTankProperties[] getTankProperties() { return props_; }
@Override public int fill(FluidStack resource, boolean doFill) { return 0; }
@Override @Nullable public FluidStack drain(FluidStack resource, boolean doDrain) { return null; }
@Override @Nullable public FluidStack drain(int maxDrain, boolean doDrain) { return null; }
@Override @Nullable public FluidStack getContents() { return null; }
@Override public int getCapacity() { return 0; }
@Override public boolean canFill() { return false; }
@Override public boolean canDrain() { return false; }
@Override public boolean canFillFluidType(FluidStack fluidStack) { return false; }
@Override public boolean canDrainFluidType(FluidStack fluidStack) { return false; }
}
}
}

View file

@ -12,6 +12,7 @@
*/
package wile.engineersdecor.blocks;
import net.minecraft.tileentity.TileEntity;
import wile.engineersdecor.ModEngineersDecor;
import wile.engineersdecor.detail.ModAuxiliaries;
import wile.engineersdecor.detail.ModConfig;
@ -35,6 +36,10 @@ import javax.annotation.Nonnull;
@SuppressWarnings("unused")
public class ModBlocks
{
//--------------------------------------------------------------------------------------------------------------------
//-- Blocks
//--------------------------------------------------------------------------------------------------------------------
public static final BlockDecorFull CLINKER_BRICK_BLOCK = new BlockDecorFull("clinker_brick_block", 0, Material.ROCK, 2f, 50f, SoundType.STONE);
public static final BlockDecorStairs CLINKER_BRICK_STAIRS = new BlockDecorStairs("clinker_brick_stairs", CLINKER_BRICK_BLOCK.getDefaultState());
public static final BlockDecorWall CLINKER_BRICK_WALL = new BlockDecorWall("clinker_brick_wall", BlockDecor.CFG_DEFAULT, Material.ROCK, 8f, 50f, SoundType.STONE);
@ -176,9 +181,40 @@ public class ModBlocks
ModAuxiliaries.getPixeledAABB(5,11,0, 11,16,16)
);
public static final BlockDecorPipeValve STRAIGHT_PIPE_VALVE = new BlockDecorPipeValve(
"straight_pipe_valve",
BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT,
Material.IRON, 1.0f, 15f, SoundType.METAL,
ModAuxiliaries.getPixeledAABB(4,4,0, 12,12,16)
);
private static final Block modBlocks[] = {
TREATED_WOOD_CRAFTING_TABLE,
//--------------------------------------------------------------------------------------------------------------------
//-- Tile entities
//--------------------------------------------------------------------------------------------------------------------
private static class TileEntityRegistrationData
{
public final Class<? extends TileEntity> clazz;
public final ResourceLocation key;
public TileEntityRegistrationData(Class<? extends TileEntity> c, String k) { clazz=c; key = new ResourceLocation(ModEngineersDecor.MODID, k); }
}
private static final TileEntityRegistrationData TREATED_WOOD_CRAFTING_TABLE_TEI = new TileEntityRegistrationData(
BlockDecorCraftingTable.BTileEntity.class, "te_crafting_table"
);
private static final TileEntityRegistrationData SMALL_LAB_FURNACE_TEI = new TileEntityRegistrationData(
BlockDecorFurnace.BTileEntity.class, "te_small_lab_furnace"
);
private static final TileEntityRegistrationData STRAIGHT_PIPE_VALVE_TEI = new TileEntityRegistrationData(
BlockDecorPipeValve.BTileEntity.class, "te_pipe_valve"
);
//--------------------------------------------------------------------------------------------------------------------
//-- Registration list
//--------------------------------------------------------------------------------------------------------------------
private static final Object content[] = {
TREATED_WOOD_CRAFTING_TABLE, TREATED_WOOD_CRAFTING_TABLE_TEI,
CLINKER_BRICK_BLOCK,
CLINKER_BRICK_STAIRS,
CLINKER_BRICK_WALL,
@ -201,7 +237,7 @@ public class ModBlocks
TREATED_WOOD_WINDOW,
TREATED_WOOD_WINDOWSILL,
INSET_LIGHT_IRON,
SMALL_LAB_FURNACE,
SMALL_LAB_FURNACE, SMALL_LAB_FURNACE_TEI,
STEEL_FRAMED_WINDOW,
TREATED_WOOD_POLE_SUPPORT,
TREATED_WOOD_POLE_HEAD,
@ -210,13 +246,19 @@ public class ModBlocks
THICK_STEEL_POLE,
THIN_STEEL_POLE_HEAD,
THICK_STEEL_POLE_HEAD,
STEEL_DOUBLE_T_SUPPORT
STEEL_DOUBLE_T_SUPPORT,
STRAIGHT_PIPE_VALVE, STRAIGHT_PIPE_VALVE_TEI
};
private static final Block devBlocks[] = {
private static final Object dev_content[] = {
};
//--------------------------------------------------------------------------------------------------------------------
//-- Init
//--------------------------------------------------------------------------------------------------------------------
private static ArrayList<Block> registeredBlocks = new ArrayList<>();
private static ArrayList<TileEntityRegistrationData> registeredTileEntityInits = new ArrayList<>();
@Nonnull
public static List<Block> getRegisteredBlocks()
@ -226,28 +268,33 @@ public class ModBlocks
public static final void registerBlocks(RegistryEvent.Register<Block> event)
{
// Config based registry selection
int num_registrations_skipped = 0;
ArrayList<Block> allBlocks = new ArrayList<>();
Collections.addAll(allBlocks, modBlocks);
//if(Loader.isModLoaded("immersiveengineering")){}
if(ModConfig.zmisc.with_experimental) Collections.addAll(allBlocks, devBlocks);
int num_block_registrations_skipped = 0;
final boolean woor = ModConfig.isWithoutOptOutRegistration();
for(Block e:allBlocks) {
if((!woor) || (!ModConfig.isOptedOut(e))) {
registeredBlocks.add(e);
} else {
++num_registrations_skipped;
for(Object e:content) {
if(e instanceof Block) {
if((!woor) || (!ModConfig.isOptedOut((Block)e))) {
registeredBlocks.add((Block) e);
} else {
++num_block_registrations_skipped;
}
} else if(e instanceof TileEntityRegistrationData) {
registeredTileEntityInits.add((TileEntityRegistrationData)e);
}
}
if(ModConfig.zmisc.with_experimental) {
for(Object e:dev_content) {
if(e instanceof Block) {
registeredBlocks.add((Block) e);
} else if(e instanceof TileEntityRegistrationData) {
registeredTileEntityInits.add((TileEntityRegistrationData) e);
}
}
}
for(Block e:registeredBlocks) event.getRegistry().register(e);
ModEngineersDecor.logger.info("Registered " + Integer.toString(registeredBlocks.size()) + " blocks.");
if(num_registrations_skipped > 0) {
ModEngineersDecor.logger.info("Skipped registration of " + num_registrations_skipped + " blocks due to no-register-opt-out config.");
}
// TEs
GameRegistry.registerTileEntity(BlockDecorCraftingTable.BTileEntity.class, new ResourceLocation(ModEngineersDecor.MODID, "te_crafting_table"));
GameRegistry.registerTileEntity(BlockDecorFurnace.BTileEntity.class, new ResourceLocation(ModEngineersDecor.MODID, "te_small_lab_furnace"));
if(num_block_registrations_skipped > 0) ModEngineersDecor.logger.info("Skipped registration of " + num_block_registrations_skipped + " blocks.");
for(TileEntityRegistrationData e:registeredTileEntityInits) GameRegistry.registerTileEntity(e.clazz, e.key);
ModEngineersDecor.logger.info("Registered " + Integer.toString(registeredTileEntityInits.size()) + " tile entities.");
}
// Invoked from ClientProxy.registerModels()

View file

@ -144,4 +144,6 @@ public class ModAuxiliaries
}
return bb;
}
public interface IExperimentalFeature{}
}

View file

@ -229,6 +229,7 @@ public class ModConfig
{
if((block == null) || (optout==null)) return true;
if(block == ModBlocks.SIGN_MODLOGO) return true;
if((!zmisc.with_experimental) && (block instanceof ModAuxiliaries.IExperimentalFeature)) return true;
final String rn = block.getRegistryName().getPath();
if(optout.without_clinker_bricks && rn.startsWith("clinker_brick_")) return true;
if(optout.without_slag_bricks && rn.startsWith("slag_brick_")) return true;

View file

@ -11,7 +11,18 @@
},
"variants": {
"normal": [{}],
"inventory": [{}],
"eastwest": { "false":{"y":0}, "true": {"y":90}},
"inventory": [{}]
"rightbeam": { "false":{}, "true": {
"submodel": {"rsteelsupport": { "model": "engineersdecor:hsupport/steel_double_t_support_xconnect_model", "y": 0 }}
}},
"leftbeam": { "false":{}, "true": {
"submodel": {"lsteelsupport": { "model": "engineersdecor:hsupport/steel_double_t_support_xconnect_model", "y": 180 }}
}},
"downconnect": {
"0": {},
"1": { "submodel": {"dthinpole": { "model": "engineersdecor:hsupport/steel_double_t_support_xconnect_thin_pole_model"}} },
"2": { "submodel": {"dthickpole": { "model": "engineersdecor:hsupport/steel_double_t_support_xconnect_thick_pole_model"}} }
}
}
}

View file

@ -0,0 +1,9 @@
{
"forge_marker": 1,
"defaults": { "model": "engineersdecor:pipe/straight_pipe_valve_model" },
"variants": {
"normal": [{}],
"inventory": [{}],
"facing": { "north":{"y":0}, "south":{"y":180}, "west":{"y":270}, "east":{"y":90}, "up": {"x":-90}, "down": {"x":90} }
}
}

View file

@ -64,6 +64,8 @@ tile.engineersdecor.thin_steel_pole_head.name=Straight thin steel pole head/foot
tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or head of the thin steel pole (4x4x16).
tile.engineersdecor.thick_steel_pole_head.name=Straight thick steel pole head/foot
tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16).
tile.engineersdecor.steel_double_t_support.name=Steel double T support
tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.treated_wood_table.name=Treated wood table
tile.engineersdecor.treated_wood_table.help=§6Robust four-legged wood table.§r Indoor and outdoor use.
@ -92,12 +94,11 @@ tile.engineersdecor.small_lab_furnace.help=§6Small metal cased lab kiln.§r Sol
and fuel. Place an external heater into a aux slot and connect power for electrical \
smelting speed boost.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.steel_double_t_support.name=Steel double T support
tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment.
tile.engineersdecor.straight_pipe_valve.name=Fluid pipe check valve
tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. Does not connect to the sides. Sneak to place in reverse direction.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor)
tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots.
#-----------------------------------------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------------------------------------

View file

@ -64,6 +64,8 @@ tile.engineersdecor.thin_steel_pole_head.name=Straight thin steel pole head/foot
#tile.engineersdecor.thin_steel_pole_head.help=§6Steel part fitting as foot or head of the thin steel pole (4x4x16).
tile.engineersdecor.thick_steel_pole_head.name=Straight thick steel pole head/foot
#tile.engineersdecor.thick_steel_pole_head.help=§6Steel part fitting as foot or head of the thick steel pole (6x6x16).
tile.engineersdecor.steel_double_t_support.name=Steel double T support
#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.treated_wood_table.name=Стол из обработанного дерева
tile.engineersdecor.treated_wood_table.help=§6Прочный деревянный стол с четырьмя ножками .§r Для использования в помещении и на улице.
@ -85,12 +87,11 @@ tile.engineersdecor.steel_framed_window.name=Окно со стальной ра
tile.engineersdecor.small_lab_furnace.name=Компактная лабораторная печь
tile.engineersdecor.small_lab_furnace.help=§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива - сверху. Немного горячее чем каменная, поэтому быстрее. Два внутренних слота для ввода, выхода и топлива.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.steel_double_t_support.name=Steel double T support
#tile.engineersdecor.steel_double_t_support.help=§6Horizontal ceiling support bream fragment.
tile.engineersdecor.straight_pipe_valve.name=Straight fluid valve
#tile.engineersdecor.straight_pipe_valve.help=§6Straight fluid pipe fragment.§r Conducts fluids only in one direction. Does not connect to the sides. Sneak to place in reverse direction.
#-----------------------------------------------------------------------------------------------------------
tile.engineersdecor.sign_decor.name=Sign plate (Engineer's decor logo)
#tile.engineersdecor.sign_decor.help=§6This should not be craftable or visible in JEI. Used for creative tab and screenshots.
#-----------------------------------------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------------------------------------

View file

@ -2,53 +2,53 @@
"parent": "block/cube",
"textures": {
"end": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture",
"particle": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture",
"side": "engineersdecor:blocks/hsupport/steel_double_t_support_side_texture",
"top": "engineersdecor:blocks/hsupport/steel_double_t_support_top_texture",
"particle": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture"
"top": "engineersdecor:blocks/hsupport/steel_double_t_support_top_texture"
},
"elements": [
{
"from": [5, 15, 0],
"to": [11, 16, 16],
"faces": {
"north": {"texture": "#end"},
"east": {"texture": "#side"},
"south": {"texture": "#end"},
"west": {"texture": "#side"},
"up": {"texture": "#top"},
"down": {"texture": "#top"}
"north": {"uv": [5, 0, 11, 1], "texture": "#end"},
"east": {"uv": [0, 0, 16, 1], "texture": "#side"},
"south": {"uv": [5, 0, 11, 1], "texture": "#end"},
"west": {"uv": [0, 0, 16, 1], "texture": "#side"},
"up": {"uv": [5, 0, 11, 16], "texture": "#top"},
"down": {"uv": [5, 0, 11, 16], "texture": "#top"}
}
},
{
"from": [9, 12, 0],
"to": [10, 15, 16],
"faces": {
"north": {"texture": "#end"},
"east": {"texture": "#side"},
"south": {"texture": "#end"},
"west": {"texture": "#side"}
"north": {"uv": [6, 1, 7, 4], "texture": "#end"},
"east": {"uv": [0, 1, 16, 4], "texture": "#side"},
"south": {"uv": [9, 1, 10, 4], "texture": "#end"},
"west": {"uv": [0, 1, 16, 4], "texture": "#side"}
}
},
{
"from": [6, 12, 0],
"to": [7, 15, 16],
"faces": {
"north": {"texture": "#end"},
"east": {"texture": "#side"},
"south": {"texture": "#end"},
"west": {"texture": "#side"}
"north": {"uv": [9, 1, 10, 4], "texture": "#end"},
"east": {"uv": [0, 1, 16, 4], "texture": "#side"},
"south": {"uv": [6, 1, 7, 4], "texture": "#end"},
"west": {"uv": [0, 1, 16, 4], "texture": "#side"}
}
},
{
"from": [5, 11, 0],
"to": [11, 12, 16],
"faces": {
"north": {"texture": "#end"},
"east": {"texture": "#side"},
"south": {"texture": "#end"},
"west": {"texture": "#side"},
"up": {"texture": "#top"},
"down": {"texture": "#top"}
"north": {"uv": [5, 4, 11, 5], "texture": "#end"},
"east": {"uv": [0, 4, 16, 5], "texture": "#side"},
"south": {"uv": [5, 4, 11, 5], "texture": "#end"},
"west": {"uv": [0, 4, 16, 5], "texture": "#side"},
"up": {"uv": [5, 0, 11, 16], "texture": "#top"},
"down": {"uv": [5, 0, 11, 16], "texture": "#top"}
}
}
],
@ -62,6 +62,16 @@
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
},
"firstperson_righthand": {
"scale": [0.5, 0.5, 0.5],
"rotation": [120, 30, 0],
"translation": [2, 3, 0]
},
"thirdperson_righthand": {
"scale": [0.5, 0.5, 0.5],
"rotation": [120, 15, 0],
"translation": [-1, -1, -2]
}
}
}

View file

@ -0,0 +1,63 @@
{
"parent": "block/cube",
"textures": {
"end": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture",
"particle": "engineersdecor:blocks/hsupport/steel_double_t_support_end_texture",
"side": "engineersdecor:blocks/hsupport/steel_double_t_support_side_texture",
"top": "engineersdecor:blocks/hsupport/steel_double_t_support_top_texture"
},
"elements": [
{
"from": [11, 15, 5],
"to": [16, 16, 11],
"faces": {
"north": {"uv": [0, 0, 5, 1], "texture": "#side"},
"east": {"uv": [5, 0, 11, 1], "texture": "#end"},
"south": {"uv": [11, 0, 16, 1], "texture": "#side"},
"up": {"uv": [5, 10, 11, 16], "rotation": 270, "texture": "#top"},
"down": {"uv": [11, 5, 16, 11], "rotation": 90, "texture": "#top"}
}
},
{
"from": [11, 11, 5],
"to": [16, 12, 11],
"faces": {
"north": {"uv": [0, 4, 5, 5], "texture": "#side"},
"east": {"uv": [5, 4, 11, 5], "texture": "#end"},
"south": {"uv": [11, 4, 16, 5], "texture": "#side"},
"up": {"uv": [11, 5, 16, 11], "rotation": 270, "texture": "#top"},
"down": {"uv": [5, 10, 11, 16], "rotation": 90, "texture": "#top"}
}
},
{
"from": [10, 12, 9],
"to": [16, 15, 10],
"faces": {
"north": {"uv": [0, 1, 6, 4], "texture": "#side"},
"east": {"uv": [6, 1, 7, 4], "texture": "#end"},
"south": {"uv": [10, 1, 16, 4], "texture": "#side"}
}
},
{
"from": [10, 12, 6],
"to": [16, 15, 7],
"faces": {
"north": {"uv": [0, 1, 6, 4], "texture": "#side"},
"east": {"uv": [9, 1, 10, 4], "texture": "#end"},
"south": {"uv": [10, 1, 16, 4], "texture": "#side"}
}
}
],
"display": {
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -0,0 +1,62 @@
{
"parent": "block/cube",
"textures": {
"pside": "engineersdecor:blocks/pole/thick_steel_pole_side_texture",
"particle": "engineersdecor:blocks/pole/thick_steel_pole_side_texture",
"ptop": "engineersdecor:blocks/pole/thick_steel_pole_top_texture"
},
"elements": [
{
"from": [6, 0, 10],
"to": [10, 11, 11],
"faces": {
"north": {"uv": [6, 5, 10, 16], "texture": "#pside"},
"south": {"uv": [6, 5, 10, 16], "texture": "#pside"},
"down": {"uv": [6, 5, 10, 6], "texture": "#ptop"}
}
},
{
"from": [10, 0, 5],
"to": [11, 11, 11],
"faces": {
"north": {"uv": [5, 5, 6, 16], "texture": "#pside"},
"east": {"uv": [5, 5, 11, 16], "texture": "#pside"},
"south": {"uv": [10, 5, 11, 16], "texture": "#pside"},
"west": {"uv": [5, 5, 11, 16], "texture": "#pside"},
"down": {"uv": [10, 5, 11, 11], "texture": "#ptop"}
}
},
{
"from": [5, 0, 5],
"to": [6, 11, 11],
"faces": {
"north": {"uv": [10, 5, 11, 16], "texture": "#pside"},
"east": {"uv": [5, 5, 11, 16], "texture": "#pside"},
"south": {"uv": [5, 5, 6, 16], "texture": "#pside"},
"west": {"uv": [5, 5, 11, 16], "texture": "#pside"},
"down": {"uv": [5, 5, 6, 11], "texture": "#ptop"}
}
},
{
"from": [6, 0, 5],
"to": [10, 11, 6],
"faces": {
"north": {"uv": [6, 5, 10, 16], "texture": "#pside"},
"south": {"uv": [6, 5, 10, 16], "texture": "#pside"},
"down": {"uv": [6, 10, 10, 11], "texture": "#ptop"}
}
}
],
"display": {
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -0,0 +1,62 @@
{
"parent": "block/cube",
"textures": {
"pside": "engineersdecor:blocks/pole/thin_steel_pole_side_texture",
"particle": "engineersdecor:blocks/pole/thin_steel_pole_side_texture",
"ptop": "engineersdecor:blocks/pole/thin_steel_pole_top_texture"
},
"elements": [
{
"from": [7, 0, 9],
"to": [9, 11, 10],
"faces": {
"north": {"uv": [7, 5, 9, 16], "texture": "#pside"},
"south": {"uv": [7, 5, 9, 16], "texture": "#pside"},
"down": {"uv": [7, 6, 9, 7], "texture": "#ptop"}
}
},
{
"from": [9, 0, 6],
"to": [10, 11, 10],
"faces": {
"north": {"uv": [6, 5, 7, 16], "texture": "#pside"},
"east": {"uv": [6, 5, 10, 16], "texture": "#pside"},
"south": {"uv": [9, 5, 10, 16], "texture": "#pside"},
"west": {"uv": [6, 5, 10, 16], "texture": "#pside"},
"down": {"uv": [9, 6, 10, 10], "texture": "#ptop"}
}
},
{
"from": [6, 0, 6],
"to": [7, 11, 10],
"faces": {
"north": {"uv": [9, 5, 10, 16], "texture": "#pside"},
"east": {"uv": [6, 5, 10, 16], "texture": "#pside"},
"south": {"uv": [6, 5, 7, 16], "texture": "#pside"},
"west": {"uv": [6, 5, 10, 16], "texture": "#pside"},
"down": {"uv": [6, 6, 7, 10], "texture": "#ptop"}
}
},
{
"from": [7, 0, 6],
"to": [9, 11, 7],
"faces": {
"north": {"uv": [7, 5, 9, 16], "texture": "#pside"},
"south": {"uv": [7, 5, 9, 16], "texture": "#pside"},
"down": {"uv": [7, 9, 9, 10], "texture": "#ptop"}
}
}
],
"display": {
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -0,0 +1,87 @@
{
"textures": {
"end": "engineersdecor:blocks/pipe/straight_pipe_valve_end_texture",
"particle": "engineersdecor:blocks/pipe/straight_pipe_valve_end_texture",
"side": "engineersdecor:blocks/pipe/straight_pipe_valve_side_texture"
},
"elements": [
{
"from": [2, 2, 0],
"to": [14, 14, 2],
"faces": {
"north": {"uv": [2, 2, 14, 14], "texture": "#end"},
"east": {"uv": [2, 0, 14, 2], "rotation": 90, "texture": "#side"},
"south": {"uv": [2, 2, 14, 14], "texture": "#end"},
"west": {"uv": [2, 0, 14, 2], "rotation": 270, "texture": "#side"},
"up": {"uv": [2, 0, 14, 2], "texture": "#side"},
"down": {"uv": [2, 14, 14, 16], "texture": "#side"}
}
},
{
"from": [2, 2, 14],
"to": [14, 14, 16],
"faces": {
"north": {"uv": [2, 2, 14, 14], "texture": "#end"},
"east": {"uv": [2, 14, 14, 16], "rotation": 90, "texture": "#side"},
"south": {"uv": [2, 2, 14, 14], "texture": "#end"},
"west": {"uv": [2, 0, 14, 2], "rotation": 90, "texture": "#side"},
"up": {"uv": [2, 14, 14, 16], "texture": "#side"},
"down": {"uv": [2, 0, 14, 2], "texture": "#side"}
}
},
{
"from": [4, 4, 11],
"to": [12, 12, 14],
"faces": {
"east": {"uv": [4, 11, 12, 14], "rotation": 90, "texture": "#side"},
"west": {"uv": [4, 11, 12, 14], "rotation": 270, "texture": "#side"},
"up": {"uv": [4, 11, 12, 14], "texture": "#side"},
"down": {"uv": [4, 11, 12, 14], "rotation": 180, "texture": "#side"}
}
},
{
"from": [4, 4, 2],
"to": [12, 12, 5],
"faces": {
"east": {"uv": [4, 11, 12, 14], "rotation": 90, "texture": "#side"},
"west": {"uv": [4, 11, 12, 14], "rotation": 270, "texture": "#side"},
"up": {"uv": [4, 2, 12, 5], "texture": "#side"},
"down": {"uv": [4, 2, 12, 5], "rotation": 180, "texture": "#side"}
}
},
{
"from": [3, 3, 5],
"to": [13, 13, 11],
"faces": {
"north": {"uv": [4, 4, 12, 12], "texture": "#end"},
"east": {"uv": [3, 5, 13, 11], "rotation": 90, "texture": "#side"},
"south": {"uv": [4, 4, 12, 12], "texture": "#end"},
"west": {"uv": [3, 5, 13, 11], "rotation": 270, "texture": "#side"},
"up": {"uv": [3, 5, 13, 11], "texture": "#side"},
"down": {"uv": [3, 5, 13, 11], "rotation": 180, "texture": "#side"}
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [120, 15, 0],
"translation": [-1, -1, -2],
"scale": [0.4, 0.4, 0.4]
},
"firstperson_righthand": {
"rotation": [120, 30, 0],
"translation": [2, 3, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"scale": [0.2, 0.2, 0.2]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
}

View file

@ -162,6 +162,13 @@
"ingredient": { "item": "immersiveengineering:wooden_device0", "data": 0 },
"name": "crateTreatedWood"
},
{
"conditions": [
{ "type": "minecraft:item_exists", "item": "immersiveengineering:metal_device1" }
],
"ingredient": { "item": "immersiveengineering:metal_device1", "data": 6 },
"name": "itemFluidPipe"
},
{
"conditions": [
{ "type": "engineersdecor:grc", "missing": ["immersiveengineering:stone_decoration"] }

View file

@ -0,0 +1,22 @@
{
"conditions": [
{
"type": "engineersdecor:grc",
"result": "engineersdecor:straight_pipe_valve",
"required": ["immersiveengineering:material"]
}
],
"type": "minecraft:crafting_shaped",
"pattern": [
"PPP"
],
"key": {
"P": {
"item": "#itemFluidPipe"
}
},
"result": {
"item": "engineersdecor:straight_pipe_valve",
"count": 3
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

After

Width:  |  Height:  |  Size: 350 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

After

Width:  |  Height:  |  Size: 270 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

After

Width:  |  Height:  |  Size: 376 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

View file

@ -23,6 +23,9 @@ IE components used in this mod:
"engineersdecor:blocks/iestyle/stone_decoration_concrete_by_blusunrize",
used in block "engineersdecor:concrete_wall".
- immersiveengineering:textures/block/metal_device1_fluid_pipe.png (for
valves).
Source codes derived (inspected e.g. for trouble shooting and learning how things work):
- Ore dict based recipe registration from blusunrize.immersiveengineering.common.IERecipes.

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.4-b5": "[A] Horizontal steel double-T support beam with pole connections.\n[A] Added fluid pipe check valve (straight, conducts only one way).\n[M] Internal registration block/te handling changed.",
"1.0.4-b4": "[F] Clinker/slag brick wall side cullfacing disabled to prevent texture leaks when connecting to concrete walls.\n[F] Unused treated wood pole texture regions filled (optifine).\n[F] Using mipped cutout format for window multi-layer model (issue #19, thanks rixmswey for reporting and details).\n[M] Recipe tuning, added standalone recipe for all mod blocks.\n[M] In-game CTRL-SHIFT tooltip documentation updated.\n[M] Panzer glass block: Ambient occlusion and light opacity tuned.\n[M] Stairs: Light opacity tuned.\n[A] Tooltip documentation added for mod stairs.\n[E] Horizontal steel double-T support beam (config:experimental).",
"1.0.4-b3": "[A] Added thin (4x4x16) and thick (6x6x16) steel hollow poles.\n[A] Added support head/foot components for thin and thick steel poles.",
"1.0.4-b2": "[A] Added position dependent texture variation to clinker wall, slag brick wall and rebar concrete wall.",
@ -37,7 +38,7 @@
},
"promos": {
"1.12.2-recommended": "1.0.3",
"1.12.2-latest": "1.0.4-b4",
"1.12.2-latest": "1.0.4-b5",
"1.13.2-recommended": "",
"1.13.2-latest": "1.0.4-b3"
}

View file

@ -79,10 +79,23 @@ The mod has its focus decorative blocks. Current feature set:
Can be used e.g. for structural support or wire relay post, where the height
of the IE wire posts does not match.
- *Thin and thick steel support poles*: Hollow steel pole fragments, can be
placed in all directions. Also with head/food end components. Thin poles crafted
3x3 from three steel ingots (output 12), thick poles crafted 3x3 from six thin
steel poles.
- Double-T steel support: Horizontal top-aligned support beam, placed in the
direction you look. Auto connects to adjacent beams if facing towards them. Auto
connects to steel poles underneath. Crafted 3x3 from thin steel poles in a T-shape
(output: 6 beams).
- *Inset spot light*: Small metal framed glowstone based light source for ceiling,
wall, or floor. Light level like a torch. Thin, hence not blocking the way.
Allows illuminating places where electrical light installations are problematic.
- *Fluid pipe check valve*: IE fluid pipe styled straight valve that conducts fluids
only in one direction. Crafted from 3x3 from three fluid pipes.
More to come slowly but steadily.
----