diff --git a/1.12/gradle.properties b/1.12/gradle.properties index ccfab96..8b1cc0a 100644 --- a/1.12/gradle.properties +++ b/1.12/gradle.properties @@ -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.16 +version_engineersdecor=1.0.17-b1 diff --git a/1.12/meta/update.json b/1.12/meta/update.json index cf86da8..1081662 100644 --- a/1.12/meta/update.json +++ b/1.12/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.12.2": { + "1.0.17-b1": "[A] Added Milking Machine.\n[M] Window placement improved.\n[M] Made Pipe Valve textures slightly darker to fit IE pipes better when shaded.", "1.0.16": "[R] Release based on v1.0.16-b3. Release-to-release changes: * Added Gas Concrete blocks/walls/stairs/slabs/slab slices. * Added Fluid Collection Funnel * Crafting yield for Clinker/Slag bricks increased. * Block Placer improvements (cocoa planting) and fixes. * Block breaker compat improvements and fixes. * Recipe compat auto detection fixes. * Feature opt-out and tweak config options for mod packs improved.", "1.0.16-b3": "[M] Increased slag brick recipe yield to 8.\n[A] Small Block Placer can plant Cocoa.\n[F] Fixed Small Block Placer seed detection issue (issue #64, thx Federsavo).\n[F] Fixed incorrectly enabled alternative recipes for fluid accumulator and check valve when IE is installed.\n[M] Slightly nerfed the Small Solar Panel default peak power output (does not affect existing configurations).", "1.0.16-b2": "[A] Added Gas Concrete (including slab, wall, stairs, and slab slice).\n[A] Added explicit RF-power-required option for Small Block Breaker and Small Tree Cutter (issue #63).\n[M] Increased clinker brick recipe yield to 8 for the master builders needs.\n[F] Fixed item-on-ground display glitch (issue #61, thx Federsavo for the hint).\n[F] Fixed sign bounding boxes (issue #62, thx angela/themartin).", @@ -70,6 +71,6 @@ }, "promos": { "1.12.2-recommended": "1.0.16", - "1.12.2-latest": "1.0.16" + "1.12.2-latest": "1.0.17-b1" } } \ No newline at end of file diff --git a/1.12/readme.md b/1.12/readme.md index a93c722..990695b 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,6 +10,10 @@ Mod sources for Minecraft version 1.12.2. ---- ## Version history + - v1.0.17-b1 [A] Added Milking Machine. + [M] Window placement improved. + [M] Made Pipe Valve textures slightly darker to fit IE pipes better when shaded. + ------------------------------------------------------------------- - v1.0.16 [R] Release based on v1.0.16-b3. Release-to-release changes: * Added Gas Concrete blocks/walls/stairs/slabs/slab slices. diff --git a/1.12/src/main/java/wile/engineersdecor/ModContent.java b/1.12/src/main/java/wile/engineersdecor/ModContent.java index 9666f5d..da2e8f2 100644 --- a/1.12/src/main/java/wile/engineersdecor/ModContent.java +++ b/1.12/src/main/java/wile/engineersdecor/ModContent.java @@ -12,12 +12,11 @@ */ package wile.engineersdecor; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - +import wile.engineersdecor.blocks.*; +import wile.engineersdecor.detail.ModAuxiliaries; +import wile.engineersdecor.detail.ModConfig; +import wile.engineersdecor.detail.ModTesrs; +import wile.engineersdecor.items.ItemDecor; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -32,11 +31,11 @@ import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import wile.engineersdecor.blocks.*; -import wile.engineersdecor.detail.ModAuxiliaries; -import wile.engineersdecor.detail.ModConfig; -import wile.engineersdecor.detail.ModTesrs; -import wile.engineersdecor.items.ItemDecor; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nonnull; + @SuppressWarnings("unused") public class ModContent @@ -545,6 +544,7 @@ public class ModContent STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, STRAIGHT_PIPE_VALVE_TEI, SMALL_FLUID_FUNNEL,SMALL_FLUID_FUNNEL_TEI, PASSIVE_FLUID_ACCUMULATOR, PASSIVE_FLUID_ACCUMULATOR_TEI, + SMALL_MILKING_MACHINE,SMALL_MILKING_MACHINE_TEI, CLINKER_BRICK_BLOCK, CLINKER_BRICK_SLAB, CLINKER_BRICK_STAIRS, @@ -603,7 +603,6 @@ public class ModContent PANZERGLASS_SLAB, // @todo: check if another class is needed due to is_side_visible TREATED_WOOD_FLOOR, // @todo: check if textures need improvement TEST_BLOCK,TEST_BLOCK_TEI, - SMALL_MILKING_MACHINE,SMALL_MILKING_MACHINE_TEI }; //-------------------------------------------------------------------------------------------------------------------- diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java index 18ddb0c..def430a 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java @@ -11,11 +11,14 @@ package wile.engineersdecor.blocks; 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.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nonnull; @@ -23,7 +26,6 @@ import javax.annotation.Nullable; public class BlockDecorWindow extends BlockDecorDirected { - public BlockDecorWindow(@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); } @@ -58,4 +60,22 @@ public class BlockDecorWindow extends BlockDecorDirected public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { return false; } + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + facing = placer.getHorizontalFacing(); + if(Math.abs(placer.getLookVec().y) > 0.9) { + facing = EnumFacing.getDirectionFromEntityLiving(pos, placer); + } else { + for(EnumFacing f: EnumFacing.values()) { + IBlockState st = world.getBlockState(pos.offset(f)); + if(st.getBlock() == this) { + facing = st.getValue(FACING); + break; + } + } + } + return getDefaultState().withProperty(FACING, facing); + } + } diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_analog_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_analog_texture.png index f0c34e6..498f399 100644 Binary files a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_analog_texture.png and b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_analog_texture.png differ diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_texture.png index 0418660..5ed5dab 100644 Binary files a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_texture.png and b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_redstone_texture.png differ diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_texture.png b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_texture.png index 66db297..8ed332a 100644 Binary files a/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_texture.png and b/1.12/src/main/resources/assets/engineersdecor/textures/blocks/pipe/straight_pipe_valve_side_texture.png differ diff --git a/1.14/gradle.properties b/1.14/gradle.properties index aef2094..d25f2a8 100644 --- a/1.14/gradle.properties +++ b/1.14/gradle.properties @@ -2,7 +2,7 @@ org.gradle.daemon=false org.gradle.jvmargs=-Xmx8G version_minecraft=1.14.4 -version_forge_minecraft=1.14.4-28.1.90 +version_forge_minecraft=1.14.4-28.1.104 version_fml_mappings=20190719-1.14.3 version_jei=1.14.4:6.0.0.10 -version_engineersdecor=1.0.16-b7 +version_engineersdecor=1.0.17-b1 diff --git a/1.14/meta/update.json b/1.14/meta/update.json index 3d4e5c3..c6d7c73 100644 --- a/1.14/meta/update.json +++ b/1.14/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.14.4": { + "1.0.17-b1": "[A] Added Milking Machine.\n[A] Added Mineral Smelter gravity fluid transfer.\n[M] Window placement improved.\n[M] Made Pipe Valve textures slightly darker to fit IE pipes better when shaded.\n[F] Levers can be directly attached to redstone controller Pipe Valves.\n[F] Replaced Pipe Valve early load with lazy initialized data (issue #69, thx @Siriuo).", "1.0.16-b7": "[M] Forge blockstates ported from 1.12 transformed to vanilla.", "1.0.16-b6": "[A] Made slab slice left-click pickup optional (default enabled).\n[A] Added config option for device drops in creative mode (addresses #67),\n[F] Fixed Panzer Glass Block submerged display (issue #68, thx WenXin20).", "1.0.16-b5": "[F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, and gigaherz & killjoy for the help).", @@ -37,6 +38,6 @@ }, "promos": { "1.14.4-recommended": "", - "1.14.4-latest": "1.0.16-b7" + "1.14.4-latest": "1.0.17-b1" } } \ No newline at end of file diff --git a/1.14/readme.md b/1.14/readme.md index 7d124b0..14b7821 100644 --- a/1.14/readme.md +++ b/1.14/readme.md @@ -11,142 +11,149 @@ Mod sources for Minecraft version 1.14.4. ## Version history - - v1.0.16-b7 [M] Forge blockstates ported from 1.12 transformed to vanilla. + - v1.0.17-b1 [A] Added Milking Machine. + [A] Added Mineral Smelter gravity fluid transfer. + [M] Window placement improved. + [M] Made Pipe Valve textures slightly darker to fit IE pipes better when shaded. + [F] Levers can be directly attached to redstone controller Pipe Valves. + [F] Replaced Pipe Valve early load with lazy initialized data (issue #69, thx @Siriuo). - - v1.0.16-b6 [A] Made slab slice left-click pickup optional (default enabled). - [A] Added config option for device drops in creative mode (addresses #67), - [F] Fixed Panzer Glass Block submerged display (issue #68, thx WenXin20). + - v1.0.16-b7 [M] Forge blockstates ported from 1.12 transformed to vanilla. - - v1.0.16-b5 [F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, - and gigaherz & killjoy for the help). + - v1.0.16-b6 [A] Made slab slice left-click pickup optional (default enabled). + [A] Added config option for device drops in creative mode (addresses #67), + [F] Fixed Panzer Glass Block submerged display (issue #68, thx WenXin20). - - v1.0.16-b4 [U] Updated to Forge 1.14.4-28.1.90/20190719-1.14.3. - [M] Increased slag brick recipe yield to 8. - [M] Parent specs in model files adapted. + - v1.0.16-b5 [F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, + and gigaherz & killjoy for the help). - - v1.0.16-b3 [A] Config options (opt-outs and tweaks) added. - [M] Increased clinker brick recipe yield to 8 for the builders needs. + - v1.0.16-b4 [U] Updated to Forge 1.14.4-28.1.90/20190719-1.14.3. + [M] Increased slag brick recipe yield to 8. + [M] Parent specs in model files adapted. - - v1.0.16-b2 [A] Added Gas Concrete (including wall, stairs, slab, and slab slice). - [F] Fixed Small Block Breaker active model. - [F] Fixed item-on-ground display glitch (issue #61, thx Federsavo for the hint). - [F] Added two missing recipes. + - v1.0.16-b3 [A] Config options (opt-outs and tweaks) added. + [M] Increased clinker brick recipe yield to 8 for the builders needs. - - v1.0.16-b1 [U] Updated to Forge 1.14.4-28.1.79/20190719-1.14.3. - [A] Added Fluid Collection Funnel. + - v1.0.16-b2 [A] Added Gas Concrete (including wall, stairs, slab, and slab slice). + [F] Fixed Small Block Breaker active model. + [F] Fixed item-on-ground display glitch (issue #61, thx Federsavo for the hint). + [F] Added two missing recipes. - - v1.0.15-b3 [A] Added Small Block Breaker. - [M] Mineral Smelter fluid handler/transfer added. + - v1.0.16-b1 [U] Updated to Forge 1.14.4-28.1.79/20190719-1.14.3. + [A] Added Fluid Collection Funnel. - - v1.0.15-b2 [!] Forge version requirement set to 1.14.4-28.1.68 or higher. - [A] Added Factory Block Placer and Planter. - [A] Added Small Tree Cutter. + - v1.0.15-b3 [A] Added Small Block Breaker. + [M] Mineral Smelter fluid handler/transfer added. - - v1.0.15-b1 [A] Added Floor Edge Light. - [U] Updated to Forge 1.14.4-28.1.68/20190719-1.14.3. + - v1.0.15-b2 [!] Forge version requirement set to 1.14.4-28.1.68 or higher. + [A] Added Factory Block Placer and Planter. + [A] Added Small Tree Cutter. - - v1.0.14-b1 [U] Updated to Forge 1.14.4-28.1.40/20190719-1.14.3. - [A] Factory Hopper added (configurable hopper and item collector). - [M] Switched to integrated loot table generation. - [M] Lang file zh_cn updated (scikirbypoke, PR#53). + - v1.0.15-b1 [A] Added Floor Edge Light. + [U] Updated to Forge 1.14.4-28.1.68/20190719-1.14.3. - - v1.0.13-b2 [A] Added Steel Mesh Fence. - [A] Added Broad Window Sill. + - v1.0.14-b1 [U] Updated to Forge 1.14.4-28.1.40/20190719-1.14.3. + [A] Factory Hopper added (configurable hopper and item collector). + [M] Switched to integrated loot table generation. + [M] Lang file zh_cn updated (scikirbypoke, PR#53). - - v1.0.12-b3 [U] Updated to Forge 1.14.4-28.1.10/20190719-1.14.3. - [A] Crafting Table: Added recipe collision resolver, - also applies to crafting history refabrication. - [A] Crafting Table: Added rendering of placed items - on the top surface of the table. - [A] Waterlogging of non-full-blocks added. + - v1.0.13-b2 [A] Added Steel Mesh Fence. + [A] Added Broad Window Sill. - - v1.0.12-b2 [U] Updated to Forge 1.14.4-28.0.105/20190719-1.14.3. - [A] Small Solar Panel added. - [M] Items fall through the Steel Floor Grating like in 1.12.2 version. - [M] Factory Dropper: Added pulse/continuous mode in GUI (issue #51, - thx Aristine for the CR). + - v1.0.12-b3 [U] Updated to Forge 1.14.4-28.1.10/20190719-1.14.3. + [A] Crafting Table: Added recipe collision resolver, + also applies to crafting history refabrication. + [A] Crafting Table: Added rendering of placed items + on the top surface of the table. + [A] Waterlogging of non-full-blocks added. - - v1.0.12-b1 [U] Updated to Forge 1.14.4-28.0.93/20190719-1.14.3. - [M] Logo location fixed. + - v1.0.12-b2 [U] Updated to Forge 1.14.4-28.0.105/20190719-1.14.3. + [A] Small Solar Panel added. + [M] Items fall through the Steel Floor Grating like in 1.12.2 version. + [M] Factory Dropper: Added pulse/continuous mode in GUI (issue #51, + thx Aristine for the CR). - - v1.0.11-b3 [U] Updated to Forge 1.14.4-28.0.81/20190719-1.14.3. - [F] Adapted recipe condition to Forge version (issue #49). + - v1.0.12-b1 [U] Updated to Forge 1.14.4-28.0.93/20190719-1.14.3. + [M] Logo location fixed. - - v1.0.11-b2 [U] JEI dependency update 1.14.4:6.0.0.10. - [F] Fixed creative ghost block issue (issue #48). - [M] Updated ru_ru lang file (Shellyoung, PR#47). + - v1.0.11-b3 [U] Updated to Forge 1.14.4-28.0.81/20190719-1.14.3. + [F] Adapted recipe condition to Forge version (issue #49). - - v1.0.11-b1 [A] Added Steel Table - [A] Added Treated Wood Side Table - [A] Added Exit Sign - [A] Added Steel Floor Grating - [M] Sign orientation fixed, only blocked vertical placement. + - v1.0.11-b2 [U] JEI dependency update 1.14.4:6.0.0.10. + [F] Fixed creative ghost block issue (issue #48). + [M] Updated ru_ru lang file (Shellyoung, PR#47). - - v1.0.9-b9 [U] Update to Forge 1.14.4-28.0.40/20190719-1.14.3 for Forge - testing. + - v1.0.11-b1 [A] Added Steel Table + [A] Added Treated Wood Side Table + [A] Added Exit Sign + [A] Added Steel Floor Grating + [M] Sign orientation fixed, only blocked vertical placement. - - v1.0.9-b8 [U] UPDATE TO 1.14.4. Forge 1.14.4-28.0.11/20190719-1.14.3. + - v1.0.9-b9 [U] Update to Forge 1.14.4-28.0.40/20190719-1.14.3 for Forge + testing. - - v1.0.9-b7 [U] Updated to Forge 1.14.3-27.0.60/20190719-1.14.3. - [F] Disabled all early implemented fuild handling of valves - and the Fluid Accumulator to prevent world loading - hang-ups (issue #42, thx TheOhmegha for reporting). - Will be re-enabled after fluid handling released in Forge. - [F] Fixed blockstate model locations for signs and crafting - table (issue #43, thx ProsperCraft for the beta test). + - v1.0.9-b8 [U] UPDATE TO 1.14.4. Forge 1.14.4-28.0.11/20190719-1.14.3. - - v1.0.9-b6 [U] Updated to Forge 1.14.3-27.0.50/20190621-1.14.2. + - v1.0.9-b7 [U] Updated to Forge 1.14.3-27.0.60/20190719-1.14.3. + [F] Disabled all early implemented fuild handling of valves + and the Fluid Accumulator to prevent world loading + hang-ups (issue #42, thx TheOhmegha for reporting). + Will be re-enabled after fluid handling released in Forge. + [F] Fixed blockstate model locations for signs and crafting + table (issue #43, thx ProsperCraft for the beta test). - - v1.0.9-b5 [A] Added missing recipes for slabs, stained clinker, half-slabs, valves. - [M] Standalone recipes adapted. - [F] Lang files: Fixed double newline escape. - [A] Implicit opt-out of hard IE dependent blocks ported (e.g. Concrete Wall). - [M] Basic mod config features, opt-outs and tweaks ported. + - v1.0.9-b6 [U] Updated to Forge 1.14.3-27.0.50/20190621-1.14.2. - - v1.0.9-b4 [E] Experimental: Config skel ported (!not all options have effect yet). - [E] Experimental: JEI integration for opt-outs and crafting table ported - (also addresses issue #38). + - v1.0.9-b5 [A] Added missing recipes for slabs, stained clinker, half-slabs, valves. + [M] Standalone recipes adapted. + [F] Lang files: Fixed double newline escape. + [A] Implicit opt-out of hard IE dependent blocks ported (e.g. Concrete Wall). + [M] Basic mod config features, opt-outs and tweaks ported. - - v1.0.9-b3 [F] Additional item drop fixes when blocks are destroyed (issue #39). + - v1.0.9-b4 [E] Experimental: Config skel ported (!not all options have effect yet). + [E] Experimental: JEI integration for opt-outs and crafting table ported + (also addresses issue #38). - - v1.0.9-b2 [U] Updated to Forge 1.14.3-27.0.25/20190621-1.14.2. - [F] Fixed recipe collision of Metal Rung Ladder (issue #37, - thx ProsperCraft for reporting). - [F] Fixed opening crafting table, furni, dropper server crash - issue #35 (thx ProsperCraft also here). - [F] Fixed missing pole/support item drops (issue #36, ProsperCraft). + - v1.0.9-b3 [F] Additional item drop fixes when blocks are destroyed (issue #39). - - v1.0.9-b1 [U] Updated to MC1.14.3, Forge 1.14.3-27.0.17/20190621-1.14.2. - [A] Added Small Mineral Smelter. + - v1.0.9-b2 [U] Updated to Forge 1.14.3-27.0.25/20190621-1.14.2. + [F] Fixed recipe collision of Metal Rung Ladder (issue #37, + thx ProsperCraft for reporting). + [F] Fixed opening crafting table, furni, dropper server crash + issue #35 (thx ProsperCraft also here). + [F] Fixed missing pole/support item drops (issue #36, ProsperCraft). - - v1.0.8-b3 [A] Ported slabs and slab slices from 1.12.2. - [A] IE independent ("standalone") recipes ported. + - v1.0.9-b1 [U] Updated to MC1.14.3, Forge 1.14.3-27.0.17/20190621-1.14.2. + [A] Added Small Mineral Smelter. - - v1.0.8-b2 [U] Updated to Forge BETA 1.14.2-26.0.63/20190621-1.14.2, - code adapted to new mappings. - [M] Updated 1st/3rd person item model rotations/translations. + - v1.0.8-b3 [A] Ported slabs and slab slices from 1.12.2. + [A] IE independent ("standalone") recipes ported. - - v1.0.8-b1 [V] Feature set of 1.12 ported. - [A] CTRL-SHIFT tooltips ported. - [A] Ported stained clinker block/stairs. - [M] Updated textures. - [I] Issue: Scoped recipe constants still not working. + - v1.0.8-b2 [U] Updated to Forge BETA 1.14.2-26.0.63/20190621-1.14.2, + code adapted to new mappings. + [M] Updated 1st/3rd person item model rotations/translations. - - v1.0.7-b5 [U] Updated to Forge BETA 1.14.2-26.0.35/20190608-1.14.2. - [A] Factory dropper functionality ported. - [A] Small lab furnace functionality ported. - [A] Small electrical lab furnace functionality ported. - [A] Small waste incinerator functionality ported. - [A] Fluid valves, Passive Fluid Accumulator ported. - [I] Issue: Scoped recipe constants still not working. + - v1.0.8-b1 [V] Feature set of 1.12 ported. + [A] CTRL-SHIFT tooltips ported. + [A] Ported stained clinker block/stairs. + [M] Updated textures. + [I] Issue: Scoped recipe constants still not working. - - v1.0.7-b4 [U] Updated to Forge BETA 1.14.2-26.0.32/20190608-1.14.2. - [A] Sitting on the stool ported. - [A] Ladder climbing speed boost ported. - [A] Crafting table functionality ported. - [I] Issue: Scoped recipe constants not working yet with - the current Forge version (or somehow changed). + - v1.0.7-b5 [U] Updated to Forge BETA 1.14.2-26.0.35/20190608-1.14.2. + [A] Factory dropper functionality ported. + [A] Small lab furnace functionality ported. + [A] Small electrical lab furnace functionality ported. + [A] Small waste incinerator functionality ported. + [A] Fluid valves, Passive Fluid Accumulator ported. + [I] Issue: Scoped recipe constants still not working. - - v1.0.7-b3 [A] Initial 1.14.2 port of decorative blocks. + - v1.0.7-b4 [U] Updated to Forge BETA 1.14.2-26.0.32/20190608-1.14.2. + [A] Sitting on the stool ported. + [A] Ladder climbing speed boost ported. + [A] Crafting table functionality ported. + [I] Issue: Scoped recipe constants not working yet with + the current Forge version (or somehow changed). + + - v1.0.7-b3 [A] Initial 1.14.2 port of decorative blocks. ---- diff --git a/1.14/src/main/java/wile/engineersdecor/ModContent.java b/1.14/src/main/java/wile/engineersdecor/ModContent.java index 2eea7c8..39e7980 100644 --- a/1.14/src/main/java/wile/engineersdecor/ModContent.java +++ b/1.14/src/main/java/wile/engineersdecor/ModContent.java @@ -33,7 +33,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.event.RegistryEvent; - import org.apache.commons.lang3.ArrayUtils; import java.util.ArrayList; import java.util.List; @@ -525,6 +524,14 @@ public class ModContent // ------------------------------------------------------------------------------------------------------------------- + public static final BlockDecorTest TEST_BLOCK = (BlockDecorTest)(new BlockDecorTest( + BlockDecor.CFG_LOOK_PLACEMENT|BlockDecor.CFG_FLIP_PLACEMENT_SHIFTCLICK|BlockDecor.CFG_ELECTRICAL|BlockDecor.CFG_REDSTONE_CONTROLLED, + Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(0f, 32000f).sound(SoundType.METAL), + ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) + )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "test_block")); + + // ------------------------------------------------------------------------------------------------------------------- + private static final Block modBlocks[] = { TREATED_WOOD_CRAFTING_TABLE, SMALL_LAB_FURNACE, @@ -537,6 +544,7 @@ public class ModContent SMALL_SOLAR_PANEL, SMALL_WASTE_INCINERATOR, SMALL_MINERAL_SMELTER, + SMALL_MILKING_MACHINE, STRAIGHT_CHECK_VALVE, STRAIGHT_REDSTONE_VALVE, STRAIGHT_REDSTONE_ANALOG_VALVE, @@ -608,7 +616,7 @@ public class ModContent }; private static final Block devBlocks[] = { - SMALL_MILKING_MACHINE + //TEST_BLOCK }; //-------------------------------------------------------------------------------------------------------------------- @@ -690,6 +698,10 @@ public class ModContent .build(null) .setRegistryName(ModEngineersDecor.MODID, "te_small_tree_cutter"); + public static final TileEntityType TET_TEST_BLOCK = TileEntityType.Builder + .create(BlockDecorPipeValve.BTileEntity::new, TEST_BLOCK) + .build(null) + .setRegistryName(ModEngineersDecor.MODID, "te_test_block"); private static final TileEntityType tile_entity_types[] = { TET_TREATED_WOOD_CRAFTING_TABLE, @@ -707,6 +719,7 @@ public class ModContent TET_STRAIGHT_PIPE_VALVE, TET_PASSIVE_FLUID_ACCUMULATOR, TET_SMALL_FLUID_FUNNEL, + TET_TEST_BLOCK }; //-------------------------------------------------------------------------------------------------------------------- diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFluidFunnel.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFluidFunnel.java index 835b849..a232a13 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFluidFunnel.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFluidFunnel.java @@ -148,7 +148,7 @@ public class BlockDecorFluidFunnel extends BlockDecor public static final int MAX_TRACKING_STEPS_PER_CYCLE_INTENSIVE = 1024; public static final int MAX_TRACK_RADIUS_SQ = MAX_TRACK_RADIUS*MAX_TRACK_RADIUS; public static final int INTENSIVE_SEARCH_TRIGGER_THRESHOLD = 16; - private FluidStack tank_ = FluidStack.EMPTY.copy(); + private FluidStack tank_ = FluidStack.EMPTY; private int tick_timer_ = 0; private int collection_timer_ = 0; private int no_fluid_found_counter_ = 0; @@ -168,7 +168,7 @@ public class BlockDecorFluidFunnel extends BlockDecor public void readnbt(CompoundNBT nbt) { - tank_ = (!nbt.contains("tank")) ? (FluidStack.EMPTY.copy()) : (FluidStack.loadFluidStackFromNBT(nbt.getCompound("tank"))); + tank_ = (!nbt.contains("tank")) ? (FluidStack.EMPTY) : (FluidStack.loadFluidStackFromNBT(nbt.getCompound("tank"))); } public void writenbt(CompoundNBT nbt) @@ -200,19 +200,19 @@ public class BlockDecorFluidFunnel extends BlockDecor @Override public FluidStack drain(FluidStack resource, FluidAction action) { - if((resource==null) || (te.tank_.isEmpty())) return FluidStack.EMPTY.copy(); - return (!(te.tank_.isFluidEqual(resource))) ? (FluidStack.EMPTY.copy()) : drain(resource.getAmount(), action); + if((resource==null) || (te.tank_.isEmpty())) return FluidStack.EMPTY; + return (!(te.tank_.isFluidEqual(resource))) ? (FluidStack.EMPTY) : drain(resource.getAmount(), action); } @Override public FluidStack drain(int maxDrain, FluidAction action) { + if(te.tank_.isEmpty()) return FluidStack.EMPTY; FluidStack res = te.tank_.copy(); - if(res.isEmpty()) return res; maxDrain = MathHelper.clamp(maxDrain ,0 , te.tank_.getAmount()); res.setAmount(maxDrain); if(action != FluidAction.EXECUTE) return res; te.tank_.setAmount(te.tank_.getAmount()-maxDrain); - if(te.tank_.getAmount() <= 0) te.tank_ = FluidStack.EMPTY.copy(); + if(te.tank_.getAmount() <= 0) te.tank_ = FluidStack.EMPTY; return res; } } diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMilker.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMilker.java index 4dfa6ee..7baca34 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMilker.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMilker.java @@ -269,12 +269,12 @@ public class BlockDecorMilker extends BlockDecorDirectedHorizontal @Override public FluidStack drain(FluidStack resource, FluidAction action) - { return (!resource.isFluidEqual(milk_fluid_)) ? (FluidStack.EMPTY.copy()) : drain(resource.getAmount(), action); } + { return (!resource.isFluidEqual(milk_fluid_)) ? (FluidStack.EMPTY) : drain(resource.getAmount(), action); } @Override public FluidStack drain(int maxDrain, FluidAction action) { - if(te.fluid_level() <= 0) return FluidStack.EMPTY.copy(); + if(te.fluid_level() <= 0) return FluidStack.EMPTY; FluidStack fs = milk_fluid_.copy(); fs.setAmount(Math.min(fs.getAmount(), te.fluid_level())); if(action==FluidAction.EXECUTE) te.tank_level_ -= fs.getAmount(); @@ -300,7 +300,7 @@ public class BlockDecorMilker extends BlockDecorDirectedHorizontal // ITickable ------------------------------------------------------------------------------------ private void log(String s) - {} // System.out.println("Milker|" + s); may be enabled with config, for dev was println + {} // println("Milker|" + s); may be enabled with config, for dev was println private static ItemStack milk_filled_container_item(ItemStack stack) { return milk_containers_.entrySet().stream().filter(e->e.getKey().isItemEqual(stack)).map(Map.Entry::getValue).findFirst().orElse(ItemStack.EMPTY); } @@ -510,7 +510,7 @@ public class BlockDecorMilker extends BlockDecorDirectedHorizontal { @FunctionalInterface public interface TargetPositionInValidCheck { boolean test(SingleMoveGoal goal, IWorldReader world, BlockPos pos); } @FunctionalInterface public interface StrollEvent { void apply(SingleMoveGoal goal, IWorldReader world, Vec3d pos); } - private static void log(String s) {} // System.out.println(s); + private static void log(String s) {} // println(s); private static final int motion_timeout = 20*20; private boolean aborted_; diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java index e106c90..aba9759 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java @@ -9,38 +9,42 @@ */ package wile.engineersdecor.blocks; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; + import wile.engineersdecor.ModContent; import wile.engineersdecor.ModEngineersDecor; -import net.minecraft.entity.LivingEntity; + +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraft.block.*; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.ItemStackHelper; import net.minecraft.item.Item; import net.minecraft.item.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.BlockItemUseContext; import net.minecraft.nbt.CompoundNBT; import net.minecraft.particles.IParticleData; import net.minecraft.particles.ParticleTypes; -import net.minecraft.tileentity.ITickableTileEntity; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.*; import net.minecraft.util.math.*; import net.minecraft.util.text.StringTextComponent; -import net.minecraft.block.*; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.state.IntegerProperty; -import net.minecraft.util.*; import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.World; +import net.minecraft.state.IntegerProperty; import net.minecraft.state.StateContainer; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.block.BlockState; -import net.minecraft.world.IBlockReader; +import net.minecraft.fluid.Fluids; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; @@ -213,6 +217,7 @@ public class BlockDecorMineralSmelter extends BlockDecorDirectedHorizontal private static final ItemStack MAGMA_STACK = new ItemStack(Blocks.MAGMA_BLOCK); private static final ItemStack BUCKET_STACK = new ItemStack(Items.BUCKET); private static final ItemStack LAVA_BUCKET_STACK = new ItemStack(Items.LAVA_BUCKET); + private static final FluidStack LAVA_BUCKET_FLUID_STACK = new FluidStack(Fluids.LAVA, 1000); private static int energy_consumption = DEFAULT_ENERGY_CONSUMPTION; private static int heatup_rate = DEFAULT_HEATUP_RATE; private static int cooldown_rate = 1; @@ -485,7 +490,7 @@ public class BlockDecorMineralSmelter extends BlockDecorDirectedHorizontal @Override public FluidStack drain(FluidStack resource, FluidAction action) { - if(!resource.isFluidEqual(lava) || (te.fluid_level() <= 0)) return FluidStack.EMPTY.copy(); + if(!resource.isFluidEqual(lava) || (te.fluid_level() <= 0)) return FluidStack.EMPTY; FluidStack stack = new FluidStack(lava, te.fluid_level()); if(action == FluidAction.EXECUTE) te.fluid_level_drain(te.fluid_level()); return stack; @@ -494,7 +499,7 @@ public class BlockDecorMineralSmelter extends BlockDecorDirectedHorizontal @Override public FluidStack drain(int maxDrain, FluidAction action) { - if(te.fluid_level() <= 0) return FluidStack.EMPTY.copy(); + if(te.fluid_level() <= 0) return FluidStack.EMPTY; maxDrain = (action==FluidAction.EXECUTE) ? (te.fluid_level_drain(maxDrain)) : (Math.min(maxDrain, te.fluid_level())); return new FluidStack(lava, maxDrain); } @@ -633,7 +638,21 @@ public class BlockDecorMineralSmelter extends BlockDecorDirectedHorizontal break; } } + } else if((phase()==PHASE_LAVA) && (fluid_level() >= MAX_BUCKET_EXTRACT_FLUID_LEVEL)) { + // Fluid transfer check + final IFluidHandler fh = FluidUtil.getFluidHandler(world, getPos().down(), Direction.UP).orElse(null); + if(fh != null) { + int n = fh.fill(LAVA_BUCKET_FLUID_STACK.copy(), FluidAction.SIMULATE); + if(n >= LAVA_BUCKET_FLUID_STACK.getAmount()/2) { + n = fh.fill(LAVA_BUCKET_FLUID_STACK.copy(), FluidAction.EXECUTE); + if(n > 0) { + reset_process(); + world.playSound(null, pos, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.BLOCKS, 0.3f, 0.7f); + } + } + } } + // Block state BlockState state = world.getBlockState(pos); if((state.getBlock() instanceof BlockDecorMineralSmelter) && (force_block_update_ || (state.get(PHASE) != new_phase))) { state = state.with(PHASE, new_phase); diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java index 7506eaf..f9e0dc6 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPassiveFluidAccumulator.java @@ -112,7 +112,7 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected public void read(CompoundNBT nbt) { super.read(nbt); - tank_ = (!nbt.contains("tank")) ? (FluidStack.EMPTY.copy()) : (FluidStack.loadFluidStackFromNBT(nbt.getCompound("tank"))); + tank_ = (!nbt.contains("tank")) ? (FluidStack.EMPTY) : (FluidStack.loadFluidStackFromNBT(nbt.getCompound("tank"))); } @Override @@ -134,8 +134,8 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected @Override public int getTankCapacity(int tank) { return max_flowrate; } @Override public boolean isFluidValid(int tank, @Nonnull FluidStack stack) { return true; } @Override public int fill(FluidStack resource, FluidAction action) { return 0; } - @Override public FluidStack drain(FluidStack resource, FluidAction action) { return FluidStack.EMPTY.copy(); } - @Override public FluidStack drain(int maxDrain, FluidAction action) { return FluidStack.EMPTY.copy(); } + @Override public FluidStack drain(FluidStack resource, FluidAction action) { return FluidStack.EMPTY; } + @Override public FluidStack drain(int maxDrain, FluidAction action) { return FluidStack.EMPTY; } } // Output flow handler --------------------------------------------------------------------- @@ -152,21 +152,21 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected @Override public FluidStack drain(FluidStack resource, FluidAction action) { - if((resource==null) || (te.tank_.isEmpty())) return FluidStack.EMPTY.copy(); - return (!(te.tank_.isFluidEqual(resource))) ? (FluidStack.EMPTY.copy()) : drain(resource.getAmount(), action); + if((resource==null) || (te.tank_.isEmpty())) return FluidStack.EMPTY; + return (!(te.tank_.isFluidEqual(resource))) ? (FluidStack.EMPTY) : drain(resource.getAmount(), action); } @Override public FluidStack drain(int maxDrain, FluidAction action) { - if(!te.initialized_) FluidStack.EMPTY.copy(); + if(!te.initialized_) return FluidStack.EMPTY; if((action==FluidAction.EXECUTE) && (maxDrain > 0)) te.last_drain_request_amount_ = maxDrain; - if(te.tank_.isEmpty()) return FluidStack.EMPTY.copy(); + if(te.tank_.isEmpty()) return FluidStack.EMPTY; maxDrain = MathHelper.clamp(maxDrain ,0 , te.tank_.getAmount()); FluidStack res = te.tank_.copy(); if(action!=FluidAction.EXECUTE) return res; res.setAmount(maxDrain); te.tank_.setAmount(te.tank_.getAmount()-maxDrain); - if(te.tank_.getAmount() <= 0) te.tank_ = FluidStack.EMPTY.copy(); + if(te.tank_.getAmount() <= 0) te.tank_ = FluidStack.EMPTY; te.total_volume_drained_ += res.getAmount(); return res; } @@ -232,7 +232,7 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected if(fh==null) continue; if(tank_.isEmpty()) { FluidStack res = fh.drain(n_requested, FluidAction.EXECUTE).copy(); - if(res.getAmount()==0) continue; + if(res.isEmpty()) continue; total_volume_filled_ += res.getAmount(); tank_ = res.copy(); has_refilled = true; @@ -240,7 +240,9 @@ public class BlockDecorPassiveFluidAccumulator extends BlockDecorDirected if((tank_.getAmount() + n_requested) > max_flowrate) n_requested = (max_flowrate - tank_.getAmount()); FluidStack rq = tank_.copy(); rq.setAmount(n_requested); - FluidStack res = fh.drain(rq, FluidAction.EXECUTE); + FluidStack res = fh.drain(rq, FluidAction.SIMULATE); + if(!res.isFluidEqual(rq)) continue; + res = fh.drain(rq, FluidAction.EXECUTE); if(res.isEmpty()) continue; tank_.setAmount(tank_.getAmount()+res.getAmount()); total_volume_filled_ += res.getAmount(); diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java index 8be54d9..dd61474 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java @@ -11,24 +11,27 @@ package wile.engineersdecor.blocks; import wile.engineersdecor.ModContent; import wile.engineersdecor.ModEngineersDecor; -import net.minecraft.block.IWaterLoggable; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.state.BooleanProperty; import net.minecraft.world.IWorld; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.StateContainer; -import net.minecraft.tileentity.TileEntityType; +import net.minecraft.world.World; import net.minecraft.world.IBlockReader; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.StateContainer; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.item.ItemStack; -import net.minecraft.entity.LivingEntity; +import net.minecraft.block.IWaterLoggable; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.entity.LivingEntity; import net.minecraft.util.math.MathHelper; import net.minecraft.util.Direction; 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.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; @@ -82,12 +85,16 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog return state; } - private void update_te(World world, BlockState state, BlockPos pos) + private void update_te(IWorld world, BlockState state, BlockPos pos) { TileEntity te = world.getTileEntity(pos); if(te instanceof BlockDecorPipeValve.BTileEntity) ((BlockDecorPipeValve.BTileEntity)te).block_reconfigure(state.get(FACING), config); } + @Override + public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext selectionContext) + { return VoxelShapes.fullCube(); } + @Override protected void fillStateContainer(StateContainer.Builder builder) { super.fillStateContainer(builder); builder.add(RS_CN_N, RS_CN_S, RS_CN_E, RS_CN_W, RS_CN_U, RS_CN_D, WATERLOGGED); } @@ -103,7 +110,10 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog @Override @SuppressWarnings("deprecation") public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld world, BlockPos pos, BlockPos facingPos) - { return get_rsconnector_state(state, world, pos, null); } + { + update_te(world, state, pos); + return get_rsconnector_state(state, world, pos, null); + } @Override public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) @@ -112,19 +122,6 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog world.notifyNeighborsOfStateChange(pos,this); } - @Deprecated - @SuppressWarnings("deprecation") - public void neighborChanged(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) - { - Direction fc = state.get(FACING); - if(fromPos.equals(pos.offset(fc)) || fromPos.equals(pos.offset(fc.getOpposite()))) { - update_te(world, state, pos); - } else { - BlockState connector_state = get_rsconnector_state(state, world, pos, fromPos); - if(!state.equals(connector_state)) world.setBlockState(pos, connector_state); - } - } - @Override public boolean hasTileEntity(BlockState state) { return true; } @@ -146,50 +143,34 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog { protected static int fluid_maxflow_mb = 1000; protected static int redstone_flow_slope_mb = 1000/15; - // private final IFluidTankProperties[] fluid_props_ = {this}; - private Direction block_facing_ = Direction.NORTH; + private Direction block_facing_ = null; private boolean filling_ = false; private boolean getlocked_ = false; - private boolean filling_enabled_ = true; private long block_config_ = 0; - public BTileEntity() { this(ModContent.TET_STRAIGHT_PIPE_VALVE); } public BTileEntity(TileEntityType te_type) { super(te_type); } - public void block_reconfigure(Direction facing, long block_config) { block_facing_ = facing; block_config_ = block_config; - filling_enabled_ = false; -// IFluidHandler fh = forward_fluid_handler(); -// if(fh!=null) { -// if(fh.getTankProperties().length==0) { -// filling_enabled_ = true; // we don't know, so in doubt try filling. -// } else { -// for(IFluidTankProperties fp:fh.getTankProperties()) { -// if((fp!=null) && (fp.canFill())) { filling_enabled_ = true; break; } -// } -// } -// } + } + + private Direction block_facing() + { + if(block_facing_ == null) { + BlockState st = getWorld().getBlockState(getPos()); + block_facing_ = (st.getBlock() instanceof BlockDecorPipeValve) ? st.get(FACING) : Direction.NORTH; + } + return block_facing_; } // TileEntity ------------------------------------------------------------------------------ - @Override - public void onLoad() - { - if(!hasWorld()) return; - final BlockState state = world.getBlockState(pos); - if((!(state.getBlock() instanceof BlockDecorPipeValve))) return; - block_reconfigure(state.get(FACING), block_config_); - world.notifyNeighborsOfStateChange(pos, state.getBlock()); - } - @Override public void read(CompoundNBT nbt) { @@ -203,7 +184,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog public CompoundNBT write(CompoundNBT nbt) { super.write(nbt); - nbt.putInt("facing", block_facing_.getIndex()); + if(block_facing_!=null) nbt.putInt("facing", block_facing_.getIndex()); nbt.putLong("conf", block_config_); return nbt; } @@ -218,8 +199,8 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog { if(!this.removed && (facing != null)) { if(capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { - if(facing == block_facing_) return fluid_handler_.cast(); - if(facing == block_facing_.getOpposite()) return back_flow_handler_.cast(); + if(facing == block_facing()) return back_flow_handler_.cast(); + if(facing == block_facing().getOpposite()) return fluid_handler_.cast(); } } return super.getCapability(capability, facing); @@ -230,9 +211,9 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog @Nullable private IFluidHandler forward_fluid_handler() { - final TileEntity te = world.getTileEntity(pos.offset(block_facing_)); + final TileEntity te = world.getTileEntity(pos.offset(block_facing())); if(te == null) return null; - return te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, block_facing_.getOpposite()).orElse(null); + return te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, block_facing().getOpposite()).orElse(null); } // Forward flow handler -- @@ -244,13 +225,15 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog @Override public int getTanks() { return 0; } @Override public FluidStack getFluidInTank(int tank) { return FluidStack.EMPTY; } @Override public int getTankCapacity(int tank) { return fluid_maxflow_mb; } - @Override public FluidStack drain(FluidStack resource, FluidAction action) { return FluidStack.EMPTY.copy(); } - @Override public FluidStack drain(int maxDrain, FluidAction action) { return FluidStack.EMPTY.copy(); } + @Override public FluidStack drain(FluidStack resource, FluidAction action) { return FluidStack.EMPTY; } + @Override public FluidStack drain(int maxDrain, FluidAction action) { return FluidStack.EMPTY; } @Override public boolean isFluidValid(int tank, @Nonnull FluidStack stack) { return true; } @Override public int fill(FluidStack resource, FluidAction action) { - if((te.filling_) || (!te.filling_enabled_)) return 0; + if(te.filling_) return 0; + final IFluidHandler fh = te.forward_fluid_handler(); + if(fh==null) return 0; if((te.block_config_ & CFG_REDSTONE_CONTROLLED) != 0) { int rs = te.world.getRedstonePowerFromNeighbors(te.pos); if(rs <= 0) return 0; @@ -258,17 +241,15 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog } FluidStack res = resource.copy(); if(res.getAmount() > fluid_maxflow_mb) res.setAmount(fluid_maxflow_mb); - final IFluidHandler fh = te.forward_fluid_handler(); - if(fh==null) return 0; - te.filling_ = true; // in case someone does not check the cap, but just "forwards back" what is beeing filled right now. - //if(res.amount > 50) { - //final TileEntity te = te.world.getTileEntity(te.pos.offset(te.block_facing_)); - //if(te instanceof IFluidPipe) { - // // forward pressureized tag - // if(res.tag == null) res.tag = new CompoundNBT(); - // res.tag.putBoolean("pressurized", true); - //} - //} + te.filling_ = true; + // IE fluid pipe not available yet + // if(res.getAmount() > 50) { + // final TileEntity fte = te.world.getTileEntity(te.pos.offset(te.block_facing())); + // if(!(fte instanceof IFluidPipe)) { + // CompoundNBT tag = res.getTag(); + // if((tag != null) && (tag.contains("pressurized"))) tag.remove("pressurized"); // remove pressureized tag if no IFluidPipe + // } + // } int n_filled = fh.fill(res, action); te.filling_ = false; return n_filled; @@ -284,21 +265,21 @@ public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLog @Override public int getTankCapacity(int tank) { return 0; } @Override public boolean isFluidValid(int tank, @Nonnull FluidStack stack) { return false; } @Override public int fill(FluidStack resource, FluidAction action) { return 0; } - @Override public FluidStack drain(FluidStack resource, FluidAction action) { return FluidStack.EMPTY.copy(); } - @Override public FluidStack drain(int maxDrain, FluidAction action) { return FluidStack.EMPTY.copy(); } + @Override public FluidStack drain(FluidStack resource, FluidAction action) { return FluidStack.EMPTY; } + @Override public FluidStack drain(int maxDrain, FluidAction action) { return FluidStack.EMPTY; } } - // IFluidPipe + // IE IFluidPipe // @Override // public boolean hasOutputConnection(Direction side) - // { return (side == block_facing_); } + // { return (side == block_facing()); } // // @Override // public boolean canOutputPressurized(boolean consumePower) // { // if(getlocked_ || (!filling_enabled_)) return false; - // final TileEntity te = world.getTileEntity(pos.offset(block_facing_)); + // final TileEntity te = world.getTileEntity(pos.offset(block_facing())); // if(!(te instanceof IFluidPipe)) return false; // getlocked_ = true; // not sure if IE explicitly pre-detects loops, so let's lock recurion here, too. // boolean r = ((IFluidPipe)te).canOutputPressurized(consumePower); diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPlacer.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPlacer.java index 0261a66..9aaf274 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPlacer.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPlacer.java @@ -418,12 +418,19 @@ public class BlockDecorPlacer extends BlockDecorDirected { return (i " + block + " at " + placement_pos.subtract(pos) + "( item=" + item + ")"); + // println("PLACE " + current_stack + " --> " + block + " at " + placement_pos.subtract(pos) + "( item=" + item + ")"); if(block != Blocks.AIR) { try { BlockItemUseContext use_context = null; @@ -524,9 +531,9 @@ public class BlockDecorPlacer extends BlockDecorDirected // The block really needs a player or other issues happened during placement. // A hard crash should not be fired here, instead spit out the item to indicated that this // block is not compatible. - System.out.println("Exception while trying to place " + e); + ModEngineersDecor.logger().error("Exception while trying to place " + ((block==null)?(""):(""+block)) + ", spitting out. Exception is: " + e); world.removeBlock(placement_pos, false); - return spit_out(facing); + return spit_out(facing, true); } } if((!no_space) && (!current_stack.isEmpty())) { diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorTest.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorTest.java new file mode 100644 index 0000000..8911eb0 --- /dev/null +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorTest.java @@ -0,0 +1,312 @@ +/* + * @file BlockDecorTest.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2019 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Creative mod testing block + */ +package wile.engineersdecor.blocks; + +import wile.engineersdecor.ModContent; +import wile.engineersdecor.detail.ModAuxiliaries; +import wile.engineersdecor.detail.ModAuxiliaries.IExperimentalFeature; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.fluid.Fluids; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Hand; +import net.minecraft.util.Direction; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockRayTraceResult; +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.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandlerItem; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; + + +public class BlockDecorTest extends BlockDecorDirected implements IExperimentalFeature +{ + public BlockDecorTest(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) + { super(config, builder, unrotatedAABB); } + + @Override + public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext selectionContext) + { return VoxelShapes.fullCube(); } + + @Override + public boolean hasTileEntity(BlockState state) + { return true; } + + @Override + @Nullable + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { return new BTileEntity(); } + + @Override + public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, @Nullable Direction side) + { return true; } + + @Override + public boolean hasDynamicDropList() + { return true; } + + @Override + public List dropList(BlockState state, World world, BlockPos pos, boolean explosion) + { + // @todo ... there was something like single element list or so ... + ArrayList list = new ArrayList(); + list.add(new ItemStack(this, 1)); + return list; + } + + @Override + @SuppressWarnings("deprecation") + public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) + { + TileEntity te = world.getTileEntity(pos); + if(!(te instanceof BTileEntity)) return false; + ((BTileEntity)te).activated(player, hand, hit); + return true; + } + + //-------------------------------------------------------------------------------------------------------------------- + // Tile entity + //-------------------------------------------------------------------------------------------------------------------- + + public static class BTileEntity extends TileEntity implements ITickableTileEntity, ICapabilityProvider //, IItemHandler, IEnergyStorage + { + private int tick_interval_ = 10; + private int passive_tank_capacity_ = 32000; + private FluidStack passive_tank_ = FluidStack.EMPTY; + private FluidStack passive_drain_fluidstack_ = new FluidStack(Fluids.WATER, 1000); + private int passive_drain_max_flowrate_ = 1000; + private int passive_fill_max_flowrate_ = 1000; + private int passive_num_drained_general_mb_ = 0; + private int passive_num_drained_specific_mb_ = 0; + private int passive_num_filled_specific_mb_ = 0; + private int passive_num_fh_interactions_ = 0; + private FluidStack active_fill_fluidstack_ = FluidStack.EMPTY; + private int active_num_filled_ = 0; + private int tick_timer_ = 0; + + // ------------------------------------------------------------------------------------------ + + public BTileEntity() + { this(ModContent.TET_TEST_BLOCK); } + + public BTileEntity(TileEntityType te_type) + { super(te_type); } + + // ------------------------------------------------------------------------------------------ + + private Direction block_facing() + { + BlockState st = getWorld().getBlockState(getPos()); + return (st.getBlock() instanceof BlockDecorTest) ? st.get(FACING) : Direction.NORTH; + } + + private String dump_fluid_stack(FluidStack fs) + { + String s = ""; + if(fs.getFluid().getRegistryName().getNamespace() != "minecraft") s += fs.getFluid().getRegistryName().getNamespace()+":"; + s += fs.getFluid().getRegistryName().getPath(); + s += " x" + fs.getAmount(); + return "[" + s + "]"; + } + + public void activated(PlayerEntity player, Hand hand, BlockRayTraceResult hit) + { + if(world.isRemote()) return; + final ItemStack held_stack = player.getHeldItem(hand); + // Empty hand -> statistics + { + if(held_stack.isEmpty()) { + String message = ""; + if(passive_num_filled_specific_mb_>0 || passive_num_drained_specific_mb_>0 || passive_num_drained_general_mb_>0) { + message += "Fluid handler: filled:" + passive_num_filled_specific_mb_ + ", drained:" + (passive_num_drained_specific_mb_+ passive_num_drained_general_mb_) + ", interactions:" + passive_num_fh_interactions_ + "\n"; + } + if(active_num_filled_>0) { + message += "Fluid insertion:" + active_num_filled_ + "mb, (current:" + dump_fluid_stack(active_fill_fluidstack_) + ")\n"; + } + if(message.isEmpty()) { + message = "No fluid, energy, or item interactions done yet."; + } + ModAuxiliaries.playerChatMessage(player, message); + return; + } + } + // Fluid container -> set fluid to insert, increase/decrease amount. + { + final IFluidHandlerItem fhi = held_stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).orElse(null); + if((fhi != null)) { + int ntanks = fhi.getTanks(); + if(ntanks == 0) return; + int capacity = fhi.getTankCapacity(0); + FluidStack fs = fhi.drain(capacity, FluidAction.SIMULATE); + if(!fs.isEmpty()) { + if(active_fill_fluidstack_.isEmpty()) { + active_fill_fluidstack_ = fs.copy(); + ModAuxiliaries.playerChatMessage(player, "Fluid insertion fluid set: " + dump_fluid_stack(active_fill_fluidstack_)); + } else if(fs.isFluidEqual(active_fill_fluidstack_)) { + active_fill_fluidstack_.grow(fs.getAmount()); + ModAuxiliaries.playerChatMessage(player, "Fluid insertion flowrate increased: " + dump_fluid_stack(active_fill_fluidstack_)); + } else { + int amount = active_fill_fluidstack_.getAmount(); + active_fill_fluidstack_ = fs.copy(); + active_fill_fluidstack_.setAmount(amount); + ModAuxiliaries.playerChatMessage(player, "Fluid insertion fluid changed: " + dump_fluid_stack(active_fill_fluidstack_)); + } + } else { + if(!active_fill_fluidstack_.isEmpty()) { + active_fill_fluidstack_.shrink(1000); + if(active_fill_fluidstack_.isEmpty()) active_fill_fluidstack_ = FluidStack.EMPTY; + ModAuxiliaries.playerChatMessage(player, "Fluid insertion flowrate decreased: " + dump_fluid_stack(active_fill_fluidstack_)); + } else { + ModAuxiliaries.playerChatMessage(player, "Fluid insertion disabled."); + } + } + passive_drain_fluidstack_ = active_fill_fluidstack_.copy(); // currently no difference + return; + } + } + } + + // TileEntity ------------------------------------------------------------------------------ + + @Override + public void read(CompoundNBT nbt) + { + super.read(nbt); + if(nbt.contains("passive_tank")) passive_tank_ = FluidStack.loadFluidStackFromNBT(nbt.getCompound("passive_tank")); + if(nbt.contains("passive_drain")) passive_drain_fluidstack_ = FluidStack.loadFluidStackFromNBT(nbt.getCompound("passive_drain")); + if(nbt.contains("active")) active_fill_fluidstack_ = FluidStack.loadFluidStackFromNBT(nbt.getCompound("active")); + } + + @Override + public CompoundNBT write(CompoundNBT nbt) + { + super.write(nbt); + if(!passive_tank_.isEmpty()) nbt.put("passive_tank", passive_tank_.writeToNBT(new CompoundNBT())); + if(!passive_drain_fluidstack_.isEmpty()) nbt.put("passive_drain", passive_drain_fluidstack_.writeToNBT(new CompoundNBT())); + if(!active_fill_fluidstack_.isEmpty()) nbt.put("active", active_fill_fluidstack_.writeToNBT(new CompoundNBT())); + return nbt; + } + + // ICapabilityProvider -------------------------------------------------------------------- + + private LazyOptional fluid_handler_ = LazyOptional.of(() -> (IFluidHandler)new MainFluidHandler(this)); + + @Override + public LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable Direction facing) + { + if(!this.removed && (facing != null)) { + if(capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + if(facing != block_facing()) return fluid_handler_.cast(); + } + } + return super.getCapability(capability, facing); + } + + // IFluidHandler --------------------------------------------------------------------------- + + private static class MainFluidHandler implements IFluidHandler + { + private BTileEntity te; + public MainFluidHandler(BTileEntity te) + { this.te = te; } + + @Override public int getTanks() + { return 1; } + + @Override public FluidStack getFluidInTank(int tank) + { return FluidStack.EMPTY; } + + @Override public int getTankCapacity(int tank) + { return te.passive_tank_capacity_; } + + @Override public FluidStack drain(FluidStack resource, FluidAction action) + { + ++te.passive_num_fh_interactions_; + if(resource.isEmpty()) return FluidStack.EMPTY; + if(!resource.isFluidEqual(te.passive_drain_fluidstack_)) return FluidStack.EMPTY; + FluidStack st = resource.copy(); + st.setAmount(MathHelper.clamp(st.getAmount(), 0, te.passive_drain_max_flowrate_)); + if(st.isEmpty()) return FluidStack.EMPTY; + if(action==FluidAction.EXECUTE) te.passive_num_drained_specific_mb_ += st.getAmount(); + return st; + } + + @Override public FluidStack drain(int maxDrain, FluidAction action) + { + ++te.passive_num_fh_interactions_; + maxDrain = MathHelper.clamp(maxDrain, 0, te.passive_drain_max_flowrate_); + if((te.passive_drain_fluidstack_.isEmpty()) || (maxDrain<=0)) return FluidStack.EMPTY; + if(action==FluidAction.EXECUTE) te.passive_num_drained_general_mb_ += maxDrain; + FluidStack st = te.passive_drain_fluidstack_.copy(); + st.setAmount(maxDrain); + return st; + } + + @Override public boolean isFluidValid(int tank, @Nonnull FluidStack stack) + { return true; } + + @Override public int fill(FluidStack resource, FluidAction action) + { + ++te.passive_num_fh_interactions_; + int amount = MathHelper.clamp(resource.getAmount(), 0, te.passive_fill_max_flowrate_); + if(action == FluidAction.EXECUTE) { + te.passive_num_filled_specific_mb_ += amount; + if(te.passive_tank_.isFluidEqual(resource)) { + int level = (int)MathHelper.clamp((long)te.passive_tank_.getAmount() + (long)amount, (long)0, (long)Integer.MAX_VALUE); + te.passive_tank_.setAmount(level); + } + } + return amount; + } + } + + // ITickableTileEntity ---------------------------------------------------------------------- + + private void fluid_insertion() + { + if(active_fill_fluidstack_.isEmpty()) return; + final TileEntity te = world.getTileEntity(pos.offset(block_facing())); + if(te == null) return; + final IFluidHandler fh = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, block_facing().getOpposite()).orElse(null); + if(fh == null) return; + int filled = fh.fill(active_fill_fluidstack_.copy(), FluidAction.EXECUTE); + active_num_filled_ += filled; + } + + @Override + public void tick() + { + if(world.isRemote) return; + if(--tick_timer_ > 0) return; + tick_interval_ = MathHelper.clamp(tick_interval_ ,1 , 200); + tick_timer_ = tick_interval_; + fluid_insertion(); + } + + } +} diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java index f670831..a796be4 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java @@ -11,12 +11,16 @@ package wile.engineersdecor.blocks; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.IWaterLoggable; +import net.minecraft.item.BlockItemUseContext; import net.minecraft.state.StateContainer; import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import javax.annotation.Nullable; + public class BlockDecorWindow extends BlockDecorDirected implements IWaterLoggable { public BlockDecorWindow(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) @@ -35,4 +39,24 @@ public class BlockDecorWindow extends BlockDecorDirected implements IWaterLoggab @Override protected void fillStateContainer(StateContainer.Builder builder) { super.fillStateContainer(builder); builder.add(WATERLOGGED); } + + @Override + @Nullable + public BlockState getStateForPlacement(BlockItemUseContext context) + { + Direction facing = context.getPlacementHorizontalFacing(); + if(Math.abs(context.getPlayer().getLookVec().y) > 0.9) { + facing = context.getNearestLookingDirection(); + } else { + for(Direction f: Direction.values()) { + BlockState st = context.getWorld().getBlockState(context.getPos().offset(f)); + if(st.getBlock() == this) { + facing = st.get(FACING); + break; + } + } + } + return super.getStateForPlacement(context).with(FACING, facing); + } + } diff --git a/1.14/src/main/resources/META-INF/mods.toml b/1.14/src/main/resources/META-INF/mods.toml index b011df3..12c2852 100644 --- a/1.14/src/main/resources/META-INF/mods.toml +++ b/1.14/src/main/resources/META-INF/mods.toml @@ -1,7 +1,7 @@ # @file mods.toml # @spec TOML v0.5.0 (https://github.com/toml-lang/toml) -modLoader="javafml" # forge FML java -loaderVersion="[25,)" +modLoader="javafml" +loaderVersion="[28,)" issueTrackerURL="https://github.com/stfwi/engineers-decor/issues/" [[mods]] diff --git a/1.14/src/main/resources/assets/engineersdecor/blockstates/test_block.json b/1.14/src/main/resources/assets/engineersdecor/blockstates/test_block.json new file mode 100644 index 0000000..e85be65 --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/blockstates/test_block.json @@ -0,0 +1,10 @@ +{ + "variants": { + "facing=north": { "model": "engineersdecor:block/generic/test_block_model" }, + "facing=south": { "model": "engineersdecor:block/generic/test_block_model", "y":180 }, + "facing=west": { "model": "engineersdecor:block/generic/test_block_model", "y":270 }, + "facing=east": { "model": "engineersdecor:block/generic/test_block_model", "y":90 }, + "facing=up": { "model": "engineersdecor:block/generic/test_block_model", "x":270 }, + "facing=down": { "model": "engineersdecor:block/generic/test_block_model", "x":90 } + } +} \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/block/generic/directed_cube.json b/1.14/src/main/resources/assets/engineersdecor/models/block/generic/directed_cube.json new file mode 100644 index 0000000..295c533 --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/block/generic/directed_cube.json @@ -0,0 +1,39 @@ +{ + "parent": "block/block", + "textures": { + "top": "engineersdecor:block/furnace/small_electrical_furnace_top", + "particle": "engineersdecor:block/furnace/small_electrical_furnace_top", + "bottom": "engineersdecor:block/furnace/small_electrical_furnace_bottom", + "left": "engineersdecor:block/furnace/small_electrical_furnace_left", + "right": "engineersdecor:block/furnace/small_electrical_furnace_right", + "front": "engineersdecor:block/furnace/small_electrical_furnace_front", + "back": "engineersdecor:block/furnace/small_electrical_furnace_back" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"texture": "#front"}, + "east": {"texture": "#right"}, + "south": {"texture": "#back"}, + "west": {"texture": "#left"}, + "up": {"texture": "#top"}, + "down": {"texture": "#bottom"} + } + } + ], + "display": { + "ground": { + "translation": [0, 1.75, 0], + "scale": [0.2, 0.2, 0.2] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/block/generic/test_block_model.json b/1.14/src/main/resources/assets/engineersdecor/models/block/generic/test_block_model.json new file mode 100644 index 0000000..3b15536 --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/block/generic/test_block_model.json @@ -0,0 +1,12 @@ +{ + "parent": "engineersdecor:block/generic/directed_cube", + "textures": { + "top": "engineersdecor:block/furnace/small_electrical_furnace_bottom", + "particle": "engineersdecor:block/furnace/small_electrical_furnace_bottom", + "bottom": "engineersdecor:block/furnace/small_electrical_furnace_bottom", + "left": "engineersdecor:block/furnace/small_electrical_furnace_bottom", + "right": "engineersdecor:block/furnace/small_electrical_furnace_bottom", + "front": "engineersdecor:block/furnace/small_electrical_furnace_top", + "back": "engineersdecor:block/furnace/small_electrical_furnace_bottom" + } +} \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/item/straight_pipe_valve_redstone_analog.json b/1.14/src/main/resources/assets/engineersdecor/models/item/straight_pipe_valve_redstone_analog.json index 0601142..12f19ec 100644 --- a/1.14/src/main/resources/assets/engineersdecor/models/item/straight_pipe_valve_redstone_analog.json +++ b/1.14/src/main/resources/assets/engineersdecor/models/item/straight_pipe_valve_redstone_analog.json @@ -1 +1 @@ -{ "parent": "engineersdecor:block/pipe/straight_pipe_valve_model" } \ No newline at end of file +{ "parent": "engineersdecor:block/pipe/straight_pipe_valve_redstone_analog_model" } \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/models/item/test_block.json b/1.14/src/main/resources/assets/engineersdecor/models/item/test_block.json new file mode 100644 index 0000000..71f24e5 --- /dev/null +++ b/1.14/src/main/resources/assets/engineersdecor/models/item/test_block.json @@ -0,0 +1 @@ +{ "parent": "engineersdecor:block/generic/test_block_model" } \ No newline at end of file diff --git a/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_analog_texture.png b/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_analog_texture.png index f0c34e6..498f399 100644 Binary files a/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_analog_texture.png and b/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_analog_texture.png differ diff --git a/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_texture.png b/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_texture.png index 0418660..5ed5dab 100644 Binary files a/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_texture.png and b/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_redstone_texture.png differ diff --git a/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_texture.png b/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_texture.png index 66db297..8ed332a 100644 Binary files a/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_texture.png and b/1.14/src/main/resources/assets/engineersdecor/textures/block/pipe/straight_pipe_valve_side_texture.png differ diff --git a/meta/update.json b/meta/update.json index 1bff286..c5592c4 100644 --- a/meta/update.json +++ b/meta/update.json @@ -2,11 +2,12 @@ "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "promos": { "1.12.2-recommended": "1.0.16", - "1.12.2-latest": "1.0.16", + "1.12.2-latest": "1.0.17-b1", "1.14.4-recommended": "", - "1.14.4-latest": "1.0.16-b7" + "1.14.4-latest": "1.0.17-b1" }, "1.12.2": { + "1.0.17-b1": "[A] Added Milking Machine.\n[M] Window placement improved.\n[M] Made Pipe Valve textures slightly darker to fit IE pipes better when shaded.", "1.0.16": "[R] Release based on v1.0.16-b3. Release-to-release changes: * Added Gas Concrete blocks/walls/stairs/slabs/slab slices. * Added Fluid Collection Funnel * Crafting yield for Clinker/Slag bricks increased. * Block Placer improvements (cocoa planting) and fixes. * Block breaker compat improvements and fixes. * Recipe compat auto detection fixes. * Feature opt-out and tweak config options for mod packs improved.", "1.0.16-b3": "[M] Increased slag brick recipe yield to 8.\n[A] Small Block Placer can plant Cocoa.\n[F] Fixed Small Block Placer seed detection issue (issue #64, thx Federsavo).\n[F] Fixed incorrectly enabled alternative recipes for fluid accumulator and check valve when IE is installed.\n[M] Slightly nerfed the Small Solar Panel default peak power output (does not affect existing configurations).", "1.0.16-b2": "[A] Added Gas Concrete (including slab, wall, stairs, and slab slice).\n[A] Added explicit RF-power-required option for Small Block Breaker and Small Tree Cutter (issue #63).\n[M] Increased clinker brick recipe yield to 8 for the master builders needs.\n[F] Fixed item-on-ground display glitch (issue #61, thx Federsavo for the hint).\n[F] Fixed sign bounding boxes (issue #62, thx angela/themartin).", @@ -75,6 +76,7 @@ "1.0.0-b1": "[A] Initial structure.\n[A] Added clinker bricks and clinker brick stairs.\n[A] Added slag bricks and slag brick stairs.\n[A] Added metal rung ladder.\n[A] Added staggered metal steps ladder.\n[A] Added treated wood ladder.\n[A] Added treated wood pole.\n[A] Added treated wood table." }, "1.14.4": { + "1.0.17-b1": "[A] Added Milking Machine.\n[A] Added Mineral Smelter gravity fluid transfer.\n[M] Window placement improved.\n[M] Made Pipe Valve textures slightly darker to fit IE pipes better when shaded.\n[F] Levers can be directly attached to redstone controller Pipe Valves.\n[F] Replaced Pipe Valve early load with lazy initialized data (issue #69, thx @Siriuo).", "1.0.16-b7": "[M] Forge blockstates ported from 1.12 transformed to vanilla.", "1.0.16-b6": "[A] Made slab slice left-click pickup optional (default enabled).\n[A] Added config option for device drops in creative mode (addresses #67),\n[F] Fixed Panzer Glass Block submerged display (issue #68, thx WenXin20).", "1.0.16-b5": "[F] Fixed recipe condition bug (issue #65, thx Nachtflame for the report, and gigaherz & killjoy for the help).", diff --git a/readme.md b/readme.md index c6b14fb..7b050f7 100644 --- a/readme.md +++ b/readme.md @@ -227,15 +227,17 @@ commits. ### Community references -Mods covering similar features, or may fit well together with IE and the decorations of this mod: +Mods covering similar features, or may fit well together with IE and the decorations or features of this mod: - [Immersive Engineering](https://github.com/BluSunrize/ImmersiveEngineering/): Without IE, my - little mod here does not make much sense ;). It works without IE, but quite a few blocks are - not craftable. + little mod here does not make much sense ;). It works without IE ("standalone recipes" are automatically + selected), but the vanilla-ingredient based recipes are not as good compared to the available IE items. - [Engineer's doors](https://www.curseforge.com/minecraft/mc-mods/engineers-doors) has brilliant doors, trapdoors, and fence doors, all made of the IE materials. +- [Immersive Posts](https://www.curseforge.com/minecraft/mc-mods/immersiveposts) provides extensible wire posts. + - [Dirty Bricks](https://www.curseforge.com/minecraft/texture-packs/dirty-bricks-vanilla-add-on) applies position dependent variations to the vanilla bricks, similar to the clinkers and slag bricks in this mod. @@ -243,6 +245,10 @@ Mods covering similar features, or may fit well together with IE and the decorat - [Chisel](https://www.curseforge.com/minecraft/mc-mods/chisel) needless to say, Chisel has a variety of factory blocks. +- [Actually Additions](https://www.curseforge.com/minecraft/mc-mods/actually-additions) and [Cyclic](https://www.curseforge.com/minecraft/mc-mods/cyclic) + also have a block breakers and block placers. + + ### Screenshots ![Concrete](documentation/engineers-decor-v100a-concrete-stuff.png)