Config event update fixed. Milker fluid tank handling issue fixed. Device collision shapes adapted to allow attaching levers.

This commit is contained in:
stfwi 2021-09-08 21:18:36 +02:00
parent 2e341ef659
commit b715ea13c1
11 changed files with 82 additions and 61 deletions

View file

@ -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

View file

@ -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"
}
}

View file

@ -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.

View file

@ -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<MenuType<?>> 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());
}
}
*/
}
//

View file

@ -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<EdElectricalFurnace.ElectricalFurnaceTileEntity> 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<Block, BlockState> builder)
{ super.createBlockStateDefinition(builder); builder.add(LIT); }

View file

@ -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<Block, BlockState> builder)
{ super.createBlockStateDefinition(builder); builder.add(FILL_LEVEL); }

View file

@ -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<Block, BlockState> builder)
{ super.createBlockStateDefinition(builder); builder.add(FILL_LEVEL); }

View file

@ -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<EdFreezer.FreezerTileEntity> 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<Block, BlockState> builder)
{ super.createBlockStateDefinition(builder); builder.add(PHASE); }

View file

@ -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<ItemStack, ItemStack> 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 <T> LazyOptional<T> getCapability(net.minecraftforge.common.capabilities.Capability<T> 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 <T> LazyOptional<T> getCapability(net.minecraftforge.common.capabilities.Capability<T> 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 ------------------------------------------------------------------------------------

View file

@ -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<EdMineralSmelter.MineralSmelterTileEntity> 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<Block, BlockState> builder)
{ super.createBlockStateDefinition(builder); builder.add(PHASE); }

View file

@ -273,12 +273,14 @@ public class StandardBlocks
{
public static final DirectionProperty FACING = DirectionalBlock.FACING;
protected final ArrayList<VoxelShape> vshapes;
protected final ArrayList<VoxelShape> cshapes;
public Directed(long config, BlockBehaviour.Properties properties, final Supplier<ArrayList<VoxelShape>> 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<cshapes.size(); ++i) cshapes.set(i, Shapes.create(unrotatedAABB)); }
@Override
public boolean isPossibleToRespawnInThis()
{ return false; }
@ -315,7 +320,7 @@ public class StandardBlocks
@Override
public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext selectionContext)
{ return getShape(state, world, pos, selectionContext); }
{ return cshapes.get((state.getValue(FACING)).get3DDataValue() & 0x7); }
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder)
@ -346,12 +351,14 @@ public class StandardBlocks
{
public static final DirectionProperty HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING;
protected final ArrayList<VoxelShape> vshapes;
protected final ArrayList<VoxelShape> cshapes;
public Horizontal(long config, BlockBehaviour.Properties properties, final Supplier<ArrayList<VoxelShape>> 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<cshapes.size(); ++i) cshapes.set(i, Shapes.create(unrotatedAABB)); }
@Override
public VoxelShape getShape(BlockState state, BlockGetter source, BlockPos pos, CollisionContext selectionContext)
{ return vshapes.get((state.getValue(HORIZONTAL_FACING)).get3DDataValue() & 0x7); }
@Override
public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext selectionContext)
{ return getShape(state, world, pos, selectionContext); }
{ return cshapes.get((state.getValue(HORIZONTAL_FACING)).get3DDataValue() & 0x7); }
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder)