From b715ea13c16c346cc76a579b9d2d0fc0a8e7c337 Mon Sep 17 00:00:00 2001 From: stfwi Date: Wed, 8 Sep 2021 21:18:36 +0200 Subject: [PATCH] Config event update fixed. Milker fluid tank handling issue fixed. Device collision shapes adapted to allow attaching levers. --- gradle.properties | 2 +- meta/update.json | 3 +- readme.md | 4 ++ .../engineersdecor/ModEngineersDecor.java | 13 ++-- .../blocks/EdElectricalFurnace.java | 7 ++ .../engineersdecor/blocks/EdFluidBarrel.java | 7 ++ .../engineersdecor/blocks/EdFluidFunnel.java | 8 +++ .../wile/engineersdecor/blocks/EdFreezer.java | 8 +++ .../wile/engineersdecor/blocks/EdMilker.java | 69 +++++-------------- .../blocks/EdMineralSmelter.java | 8 +++ .../libmc/blocks/StandardBlocks.java | 14 +++- 11 files changed, 82 insertions(+), 61 deletions(-) diff --git a/gradle.properties b/gradle.properties index 71ab5c0..6884bd6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G version_minecraft=1.17.1 version_forge_minecraft=1.17.1-37.0.51 version_jei=1.17.1:8.0.0.15 -version_engineersdecor=1.1.17-b3 +version_engineersdecor=1.1.17-b4 diff --git a/meta/update.json b/meta/update.json index 0314e1d..2bac1c0 100644 --- a/meta/update.json +++ b/meta/update.json @@ -1,6 +1,7 @@ { "homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/", "1.17.1": { + "1.1.17-b4": "[F] Config event update fixed.\n[F] Milker fluid tank handling issue fixed.\n[F] Device collision shapes adapted to allow attaching levers.", "1.1.17-b3": "[F] Fixed Factory Hopper GUI element events.", "1.1.17-b2": "[F] Updated to Forge 1.17.1-37.0.51 to fix `ToolType not found` startup crash.\n[A] JEI plugin enabled.\n[A] Dark Shingle Roof recipe variant added.", "1.1.17-b1": "[U] Initial MC 1.17.1 port.\n[M] Clinker Brick textures adapted to contemporary MC textures.\n[D] Gas Concrete dropped (Rebar Concrete suffices for texture variation).\n[D] Treated Wood Side Table dropped.\n[M] Updated zh_cn (PR#183, Lyaiya).", @@ -43,6 +44,6 @@ }, "promos": { "1.17.1-recommended": "1.1.14", - "1.17.1-latest": "1.1.17-b3" + "1.17.1-latest": "1.1.17-b4" } } \ No newline at end of file diff --git a/readme.md b/readme.md index 464f819..2f30f03 100644 --- a/readme.md +++ b/readme.md @@ -11,6 +11,10 @@ Mod sources for Minecraft version 1.16.x. ## Version history + - v1.1.17-b4 [F] Config event update fixed. + [F] Milker fluid tank handling issue fixed. + [F] Device collision shapes adapted to allow attaching levers. + - v1.1.17-b3 [F] Fixed Factory Hopper GUI element events. - v1.1.17-b2 [F] Updated to Forge 1.17.1-37.0.51 to fix `ToolType not found` startup crash. diff --git a/src/main/java/wile/engineersdecor/ModEngineersDecor.java b/src/main/java/wile/engineersdecor/ModEngineersDecor.java index 4d91e7b..214905d 100644 --- a/src/main/java/wile/engineersdecor/ModEngineersDecor.java +++ b/src/main/java/wile/engineersdecor/ModEngineersDecor.java @@ -17,6 +17,7 @@ import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.config.ModConfigEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @@ -44,8 +45,6 @@ public class ModEngineersDecor ModLoadingContext.get().registerConfig(net.minecraftforge.fml.config.ModConfig.Type.COMMON, ModConfig.COMMON_CONFIG_SPEC); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSetup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup); - // FMLJavaModLoadingContext.get().getModEventBus().addListener(ForgeEvents::onConfigLoad); - // FMLJavaModLoadingContext.get().getModEventBus().addListener(ForgeEvents::onConfigReload); MinecraftForge.EVENT_BUS.register(this); } @@ -93,20 +92,20 @@ public class ModEngineersDecor public static void onRegisterContainerTypes(final RegistryEvent.Register> event) { ModContent.registerContainers(event); } - /* - public static void onConfigLoad(net.minecraftforge.fml.config.ModConfig.Loading configEvent) + @SubscribeEvent + public static void onConfigLoad(final ModConfigEvent.Loading event) { ModConfig.apply(); } - public static void onConfigReload(net.minecraftforge.fml.config.ModConfig.Reloading configEvent) + @SubscribeEvent + public static void onConfigReload(final ModConfigEvent.Reloading event) { try { - ModEngineersDecor.logger().info("Config file changed {}", configEvent.getConfig().getFileName()); + ModEngineersDecor.logger().info("Config file changed {}", event.getConfig().getFileName()); ModConfig.apply(); } catch(Throwable e) { ModEngineersDecor.logger().error("Failed to load changed config: " + e.getMessage()); } } - */ } // diff --git a/src/main/java/wile/engineersdecor/blocks/EdElectricalFurnace.java b/src/main/java/wile/engineersdecor/blocks/EdElectricalFurnace.java index da5625f..3d9e4bc 100644 --- a/src/main/java/wile/engineersdecor/blocks/EdElectricalFurnace.java +++ b/src/main/java/wile/engineersdecor/blocks/EdElectricalFurnace.java @@ -43,6 +43,9 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.ForgeHooks; @@ -93,6 +96,10 @@ public class EdElectricalFurnace public BlockEntityType getBlockEntityType() { return ModContent.TET_SMALL_ELECTRICAL_FURNACE; } + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext selectionContext) + { return Shapes.block(); } + @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); builder.add(LIT); } diff --git a/src/main/java/wile/engineersdecor/blocks/EdFluidBarrel.java b/src/main/java/wile/engineersdecor/blocks/EdFluidBarrel.java index 5e07c02..abd4825 100644 --- a/src/main/java/wile/engineersdecor/blocks/EdFluidBarrel.java +++ b/src/main/java/wile/engineersdecor/blocks/EdFluidBarrel.java @@ -41,6 +41,9 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.ICapabilityProvider; @@ -144,6 +147,10 @@ public class EdFluidBarrel } } + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext selectionContext) + { return Shapes.block(); } + @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); builder.add(FILL_LEVEL); } diff --git a/src/main/java/wile/engineersdecor/blocks/EdFluidFunnel.java b/src/main/java/wile/engineersdecor/blocks/EdFluidFunnel.java index c67689e..6fe35f5 100644 --- a/src/main/java/wile/engineersdecor/blocks/EdFluidFunnel.java +++ b/src/main/java/wile/engineersdecor/blocks/EdFluidFunnel.java @@ -21,6 +21,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; @@ -36,6 +37,9 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; @@ -82,6 +86,10 @@ public class EdFluidFunnel public RenderTypeHint getRenderTypeHint() { return RenderTypeHint.CUTOUT; } + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext selectionContext) + { return Shapes.block(); } + @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); builder.add(FILL_LEVEL); } diff --git a/src/main/java/wile/engineersdecor/blocks/EdFreezer.java b/src/main/java/wile/engineersdecor/blocks/EdFreezer.java index c38d75b..9ad57ca 100644 --- a/src/main/java/wile/engineersdecor/blocks/EdFreezer.java +++ b/src/main/java/wile/engineersdecor/blocks/EdFreezer.java @@ -22,6 +22,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; @@ -34,6 +35,9 @@ import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.LazyOptional; @@ -77,6 +81,10 @@ public class EdFreezer public BlockEntityType getBlockEntityType() { return ModContent.TET_FREEZER; } + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext selectionContext) + { return Shapes.block(); } + @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); builder.add(PHASE); } diff --git a/src/main/java/wile/engineersdecor/blocks/EdMilker.java b/src/main/java/wile/engineersdecor/blocks/EdMilker.java index 4cf9686..11c2836 100644 --- a/src/main/java/wile/engineersdecor/blocks/EdMilker.java +++ b/src/main/java/wile/engineersdecor/blocks/EdMilker.java @@ -43,8 +43,10 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; 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.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; @@ -76,7 +78,7 @@ public class EdMilker public static final int MAX_ENERGY_TRANSFER = 512; public static final int DEFAULT_ENERGY_CONSUMPTION = 0; public static final int DEFAULT_MILKING_DELAY_PER_COW = 4000; - private static final FluidStack NO_MILK_FLUID = new FluidStack(Fluids.WATER, 0); + private static final FluidStack NO_MILK_FLUID = new FluidStack(Fluids.WATER, 1000); private static FluidStack milk_fluid_ = NO_MILK_FLUID; private static final HashMap milk_containers_ = new HashMap<>(); @@ -113,7 +115,10 @@ public class EdMilker public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); public MilkerBlock(long config, BlockBehaviour.Properties builder, final AABB[] unrotatedAABBs) - { super(config, builder, unrotatedAABBs); } + { + super(config, builder, unrotatedAABBs); + overrideCollisionShape(Auxiliaries.getPixeledAABB(0,0,0, 16,24,16)); + } @Override @Nullable @@ -213,8 +218,8 @@ public class EdMilker public MilkerTileEntity(BlockPos pos, BlockState state) { super(ModContent.TET_SMALL_MILKING_MACHINE, pos, state); - tank_ = new Fluidics.Tank(TANK_CAPACITY, 0, BUCKET_SIZE, (fs)->(has_milk_fluid() && fs.isFluidEqual(milk_fluid_))); - fluid_handler_ = tank_.createFluidHandler(); + tank_ = new Fluidics.Tank(TANK_CAPACITY, 0, BUCKET_SIZE, fs->fs.isFluidEqual(milk_fluid_)); + fluid_handler_ = tank_.createOutputFluidHandler(); battery_ = new RfEnergy.Battery(MAX_ENERGY_BUFFER, MAX_ENERGY_TRANSFER, 0); energy_handler_ = battery_.createEnergyHandler(); reset(); @@ -252,6 +257,9 @@ public class EdMilker if(!battery_.isEmpty()) battery_.save(nbt); } + private boolean has_milk_fluid() + { return !(NO_MILK_FLUID.isFluidEqual(milk_fluid_)); } + private IFluidHandler fluid_handler() { return fluid_handler_.orElse(null); } @@ -285,54 +293,15 @@ public class EdMilker fluid_handler_.invalidate(); } - // IFluidTank ------------------------------------------------------------------------------------------ - - private boolean has_milk_fluid() - { return !(NO_MILK_FLUID.isFluidEqual(milk_fluid_)); } - -// @Override -// @Nonnull -// public FluidStack getFluid() -// { return has_milk_fluid() ? (new FluidStack(milk_fluid_, fluid_level())) : (FluidStack.EMPTY); } -// -// @Override -// public int getFluidAmount() -// { return has_milk_fluid() ? fluid_level() : 0; } -// -// @Override -// public int getCapacity() -// { return TANK_CAPACITY; } -// -// @Override -// public boolean isFluidValid(FluidStack stack) -// { return has_milk_fluid() && stack.isFluidEqual(milk_fluid_); } -// -// @Override -// public int fill(FluidStack resource, IFluidHandler.FluidAction action) -// { return 0; } -// -// @Override -// @Nonnull -// public FluidStack drain(FluidStack resource, IFluidHandler.FluidAction action) -// { return (!resource.isFluidEqual(milk_fluid_)) ? (FluidStack.EMPTY) : drain(resource.getAmount(), action); } -// -// @Override -// @Nonnull -// public FluidStack drain(int maxDrain, IFluidHandler.FluidAction action) -// { -// if((!has_milk_fluid()) || (fluid_level() <= 0)) return FluidStack.EMPTY; -// return tank_.drain(maxDrain, action); -// } - // ICapabilityProvider --------------------------------------------------------------------------- -// @Override -// public LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable Direction facing) -// { -// if((capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) && has_milk_fluid()) return fluid_handler_.cast(); -// if((capability == CapabilityEnergy.ENERGY) && (energy_consumption_>0)) return energy_handler_.cast(); -// return super.getCapability(capability, facing); -// } + @Override + public LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable Direction facing) + { + if((capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) && has_milk_fluid()) return fluid_handler_.cast(); + if((capability == CapabilityEnergy.ENERGY) && (energy_consumption_>0)) return energy_handler_.cast(); + return super.getCapability(capability, facing); + } // ITickable ------------------------------------------------------------------------------------ diff --git a/src/main/java/wile/engineersdecor/blocks/EdMineralSmelter.java b/src/main/java/wile/engineersdecor/blocks/EdMineralSmelter.java index 0cbbb46..441df11 100644 --- a/src/main/java/wile/engineersdecor/blocks/EdMineralSmelter.java +++ b/src/main/java/wile/engineersdecor/blocks/EdMineralSmelter.java @@ -26,6 +26,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; @@ -39,6 +40,9 @@ import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.LazyOptional; @@ -83,6 +87,10 @@ public class EdMineralSmelter public BlockEntityType getBlockEntityType() { return ModContent.TET_MINERAL_SMELTER; } + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext selectionContext) + { return Shapes.block(); } + @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); builder.add(PHASE); } diff --git a/src/main/java/wile/engineersdecor/libmc/blocks/StandardBlocks.java b/src/main/java/wile/engineersdecor/libmc/blocks/StandardBlocks.java index db28902..ed5b49d 100644 --- a/src/main/java/wile/engineersdecor/libmc/blocks/StandardBlocks.java +++ b/src/main/java/wile/engineersdecor/libmc/blocks/StandardBlocks.java @@ -273,12 +273,14 @@ public class StandardBlocks { public static final DirectionProperty FACING = DirectionalBlock.FACING; protected final ArrayList vshapes; + protected final ArrayList cshapes; public Directed(long config, BlockBehaviour.Properties properties, final Supplier> shape_supplier) { super(config, properties); registerDefaultState(super.defaultBlockState().setValue(FACING, Direction.UP)); vshapes = shape_supplier.get(); + cshapes = new ArrayList<>(vshapes); } public Directed(long config, BlockBehaviour.Properties properties, final AABB[] unrotatedAABBs) @@ -301,6 +303,9 @@ public class StandardBlocks public Directed(long config, BlockBehaviour.Properties properties, final AABB unrotatedAABB) { this(config, properties, new AABB[]{unrotatedAABB}); } + protected void overrideCollisionShape(final AABB unrotatedAABB) + { for(int i=0; i builder) @@ -346,12 +351,14 @@ public class StandardBlocks { public static final DirectionProperty HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING; protected final ArrayList vshapes; + protected final ArrayList cshapes; public Horizontal(long config, BlockBehaviour.Properties properties, final Supplier> shape_supplier) { super(config|CFG_HORIZIONTAL, properties); registerDefaultState(super.defaultBlockState().setValue(HORIZONTAL_FACING, Direction.NORTH)); vshapes = shape_supplier.get(); + cshapes = new ArrayList<>(vshapes); } public Horizontal(long config, BlockBehaviour.Properties properties, final AABB[] unrotatedAABBs) @@ -374,13 +381,16 @@ public class StandardBlocks )); } + protected void overrideCollisionShape(final AABB unrotatedAABB) + { for(int i=0; i builder)