From 81d48c3f16d0ce819744b53154ea346c06c7e68c Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 6 Feb 2026 08:54:39 +1100 Subject: [PATCH 1/9] explodable machine --- .../api/machine/TieredEnergyMachine.java | 29 +--- .../machine/feature/IExplosionMachine.java | 84 ----------- .../api/machine/steam/SteamBoilerMachine.java | 7 +- .../machine/trait/ExplodableMachineTrait.java | 136 ++++++++++++++++++ .../gtceu/api/machine/trait/MachineTrait.java | 17 +++ .../trait/NotifiableEnergyContainer.java | 6 +- .../electric/BatteryBufferMachine.java | 3 +- .../machine/electric/BlockBreakerMachine.java | 7 +- .../machine/electric/ChargerMachine.java | 3 +- .../machine/electric/FisherMachine.java | 6 +- .../electric/ItemCollectorMachine.java | 6 +- .../common/machine/electric/PumpMachine.java | 6 +- .../machine/electric/RockCrusherMachine.java | 6 +- .../electric/ActiveTransformerMachine.java | 6 +- .../part/EnergyHatchPartMachine.java | 31 +--- .../multiblock/steam/LargeBoilerMachine.java | 10 +- 16 files changed, 186 insertions(+), 177 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExplosionMachine.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java index a2f6f081a82..a10859a3783 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -4,17 +4,17 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.editor.EditableUI; -import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; +import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.config.ConfigHolder; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget; +import lombok.Getter; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.util.Mth; @@ -24,17 +24,19 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class TieredEnergyMachine extends TieredMachine implements ITieredMachine, IExplosionMachine { +public class TieredEnergyMachine extends TieredMachine implements ITieredMachine { @SaveField @SyncToClient public final NotifiableEnergyContainer energyContainer; - protected TickableSubscription explosionSub; + @Getter + protected final ExplodableMachineTrait explodableMachineTrait; public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, Function energyContainerSupplier) { super(info, tier); energyContainer = energyContainerSupplier.apply(this); + explodableMachineTrait = new ExplodableMachineTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); } public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) { @@ -48,6 +50,7 @@ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) { energyContainer = NotifiableEnergyContainer.receiverContainer(this, tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage()); } + explodableMachineTrait = new ExplodableMachineTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); } ////////////////////////////////////// @@ -57,29 +60,11 @@ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) { @Override public void onLoad() { super.onLoad(); - if (!isRemote() && ConfigHolder.INSTANCE.machines.shouldWeatherOrTerrainExplosion && - shouldWeatherOrTerrainExplosion()) { - explosionSub = subscribeServerTick(this::checkExplosion); - checkExplosion(); - } } @Override public void onUnload() { super.onUnload(); - if (explosionSub != null) { - explosionSub.unsubscribe(); - explosionSub = null; - } - } - - ////////////////////////////////////// - // ******** Explosion ********// - ////////////////////////////////////// - protected void checkExplosion() { - if (energyContainer.getEnergyStored() > 0) { - checkWeatherOrTerrainExplosion(tier, tier * 10); - } } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExplosionMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExplosionMachine.java deleted file mode 100644 index 44f35b1e1c3..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExplosionMachine.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.utils.GTUtil; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Blocks; - -/** - * A machine which may cause explosion. e.g. whether, water around - */ -public interface IExplosionMachine extends IMachineFeature { - - /** - * should be called per tick. - * - * @param explosionPower explosion level - * @param additionalFireChance fire chance - */ - default void checkWeatherOrTerrainExplosion(float explosionPower, double additionalFireChance) { - if (!shouldWeatherOrTerrainExplosion()) return; - var machine = self(); - var level = machine.getLevel(); - var pos = machine.getBlockPos(); - if (GTValues.RNG.nextInt(1000) == 0) { - for (Direction side : GTUtil.DIRECTIONS) { - var fluidState = level.getBlockState(pos.relative(side)).getFluidState(); - if (!fluidState.isEmpty()) { - doExplosion(explosionPower); - return; - } - } - } - if (GTValues.RNG.nextInt(1000) == 0) { - if (level.isRainingAt(pos) || level.isRainingAt(pos.east()) || level.isRainingAt(pos.west()) || - level.isRainingAt(pos.north()) || level.isRainingAt(pos.south())) { - if (level.isThundering() && GTValues.RNG.nextInt(3) == 0) { - doExplosion(explosionPower); - } else if (GTValues.RNG.nextInt(10) == 0) { - doExplosion(explosionPower); - } else setOnFire(additionalFireChance); - } - } - } - - default void doExplosion(float explosionPower) { - doExplosion(self().getBlockPos(), explosionPower); - } - - default void doExplosion(BlockPos pos, float explosionPower) { - var machine = self(); - var level = machine.getLevel(); - level.removeBlock(pos, false); - level.explode(null, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, - explosionPower, ConfigHolder.INSTANCE.machines.doesExplosionDamagesTerrain ? - Level.ExplosionInteraction.BLOCK : Level.ExplosionInteraction.NONE); - } - - default void setOnFire(double additionalFireChance) { - var machine = self(); - var level = machine.getLevel(); - var pos = machine.getBlockPos(); - boolean isFirstFireSpawned = false; - for (Direction side : GTUtil.DIRECTIONS) { - if (level.isEmptyBlock(pos.relative(side))) { - if (!isFirstFireSpawned) { - level.setBlock(pos.relative(side), Blocks.FIRE.defaultBlockState(), 11); - if (!level.isEmptyBlock(pos.relative(side))) { - isFirstFireSpawned = true; - } - } else if (additionalFireChance >= GTValues.RNG.nextDouble() * 100) { - level.setBlock(pos.relative(side), Blocks.FIRE.defaultBlockState(), 11); - } - } - } - } - - default boolean shouldWeatherOrTerrainExplosion() { - return true; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java index 1b8195b229c..fa870537dfd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java @@ -9,9 +9,9 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; -import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; +import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; @@ -67,8 +67,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public abstract class SteamBoilerMachine extends SteamWorkableMachine - implements IUIMachine, IExplosionMachine, IDataInfoProvider, - IInteractedMachine { + implements IUIMachine, IDataInfoProvider, IInteractedMachine { @SaveField public final NotifiableFluidTank waterTank; @@ -196,7 +195,7 @@ protected void updateCurrentTemperature() { FluidAction.EXECUTE); } if (this.hasNoWater && hasDrainedWater) { - doExplosion(2.0f); + ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), 2.0f); } else this.hasNoWater = !hasDrainedWater; if (filledSteam == 0 && hasDrainedWater && getLevel() instanceof ServerLevel serverLevel) { final float x = getBlockPos().getX() + 0.5F; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java new file mode 100644 index 00000000000..bf90f4c1041 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java @@ -0,0 +1,136 @@ +package com.gregtechceu.gtceu.api.machine.trait; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.TickableSubscription; +import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.utils.GTUtil; +import lombok.Getter; +import lombok.Setter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Supplier; + +public class ExplodableMachineTrait extends MachineTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>(ExplodableMachineTrait.class); + + private @Nullable TickableSubscription explosionSub = null; + + private boolean shouldExplodeInWeatherAndWater; + @Getter + @Setter + private float explosionPower, fireChance; + @Setter + private Supplier explosionPredicate; + + public ExplodableMachineTrait(MetaMachine machine, float explosionPower, float fireChance, Supplier explosionPredicate) { + super(machine); + shouldExplodeInWeatherAndWater = true; + this.explosionPredicate = explosionPredicate; + this.explosionPower = explosionPower; + this.fireChance = fireChance; + } + + public ExplodableMachineTrait(MetaMachine machine, float explosionPower, float fireChance) { + this(machine, explosionPower, fireChance, () -> true); + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + public boolean shouldExplodeInWeatherAndWater() { + return shouldExplodeInWeatherAndWater; + } + + public void setShouldExplodeInWeatherAndWater(boolean value) { + shouldExplodeInWeatherAndWater = value; + updateSubscription(); + } + + @Override + public void onMachineLoad() { + super.onMachineLoad(); + if (!isRemote()) updateSubscription(); + } + + @Override + public void onMachineUnload() { + super.onMachineUnload(); + } + + private void updateSubscription() { + if (!isRemote() && shouldExplodeInWeatherAndWater && ConfigHolder.INSTANCE.machines.shouldWeatherOrTerrainExplosion) { + explosionSub = subscribeServerTick(explosionSub, this::checkExplosion); + } else { + if (explosionSub != null) explosionSub.unsubscribe(); + explosionSub = null; + } + } + + private void checkExplosion() { + if (!shouldExplodeInWeatherAndWater || !explosionPredicate.get()) return; + var level = machine.getLevel(); + var pos = getBlockPos(); + if (GTValues.RNG.nextInt(1000) == 0) { + for (Direction side : GTUtil.DIRECTIONS) { + var fluidState = level.getBlockState(pos.relative(side)).getFluidState(); + if (!fluidState.isEmpty()) { + doExplosion(); + return; + } + } + } + if (GTValues.RNG.nextInt(1000) == 0) { + if (level.isRainingAt(pos) || level.isRainingAt(pos.east()) || level.isRainingAt(pos.west()) || + level.isRainingAt(pos.north()) || level.isRainingAt(pos.south())) { + if (level.isThundering() && GTValues.RNG.nextInt(3) == 0) { + doExplosion(); + } else if (GTValues.RNG.nextInt(10) == 0) { + doExplosion(); + } else setOnFire(); + } + } + } + + public void doExplosion() { + doExplosion(getLevel(), getBlockPos(), explosionPower); + } + + public void doExplosion(float power) { + doExplosion(getLevel(), getBlockPos(), power); + } + + public static void doExplosion(Level level, BlockPos pos, float explosionPower) { + level.removeBlock(pos, false); + level.explode(null, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, + explosionPower, ConfigHolder.INSTANCE.machines.doesExplosionDamagesTerrain ? + Level.ExplosionInteraction.BLOCK : Level.ExplosionInteraction.NONE); + } + + public void setOnFire() { + setOnFire(getLevel(), getBlockPos(), fireChance); + } + + private static void setOnFire(Level level, BlockPos pos, double additionalFireChance) { + boolean isFirstFireSpawned = false; + for (Direction side : GTUtil.DIRECTIONS) { + if (level.isEmptyBlock(pos.relative(side))) { + if (!isFirstFireSpawned) { + level.setBlock(pos.relative(side), Blocks.FIRE.defaultBlockState(), 11); + if (!level.isEmptyBlock(pos.relative(side))) { + isFirstFireSpawned = true; + } + } else if (additionalFireChance >= GTValues.RNG.nextDouble() * 100) { + level.setBlock(pos.relative(side), Blocks.FIRE.defaultBlockState(), 11); + } + } + } + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java index 36b65137e0c..8d30620113e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTrait.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.machine.trait; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; @@ -45,10 +46,26 @@ public MachineTrait(MetaMachine machine) { public abstract MachineTraitType getTraitType(); + public @Nullable TickableSubscription subscribeServerTick(@Nullable TickableSubscription last, Runnable runnable) { + return machine.subscribeServerTick(last, runnable); + } + + public void unsubscribe(TickableSubscription current) { + machine.unsubscribe(current); + } + + public BlockPos getBlockPos() { + return machine.getBlockPos(); + } + public Level getLevel() { return machine.getLevel(); } + public boolean isRemote() { + return machine.isRemote(); + } + public final boolean hasCapability(@Nullable Direction side) { return capabilityValidator.test(side); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java index ecafbf2c766..0039109ebb0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java @@ -10,7 +10,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; -import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.EnergyStack; @@ -271,8 +270,9 @@ public long acceptEnergyFromNetwork(Direction side, long voltage, long amperage) if (amps >= getInputAmperage()) return 0; long canAccept = getEnergyCapacity() - getEnergyStored(); if (voltage > 0L && (side == null || inputsEnergy(side))) { - if (voltage > getInputVoltage() && machine instanceof IExplosionMachine explosionMachine) { - explosionMachine.doExplosion(GTUtil.getExplosionPower(voltage)); + if (voltage > getInputVoltage()) { + var explodable = machine.getTraitHolder().getTrait(ExplodableMachineTrait.TYPE); + if (explodable != null) explodable.doExplosion(GTUtil.getExplosionPower(voltage)); return Math.min(amperage, getInputAmperage() - amps); } if (canAccept >= voltage) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java index 026bc2e7ce6..3389978c6eb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java @@ -12,6 +12,7 @@ import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; +import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; @@ -289,7 +290,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long if (side == null || inputsEnergy(side)) { if (voltage > getInputVoltage()) { - machine.doExplosion(GTUtil.getExplosionPower(voltage)); + ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); return usedAmps; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java index 5ae4bb47a6e..099f05e881d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java @@ -82,8 +82,8 @@ public BlockBreakerMachine(BlockEntityCreationInfo info, int tier) { this.chargerInventory = createChargerItemHandler(); this.energyPerTick = GTValues.V[tier - 1]; this.efficiencyMultiplier = 1.0f - getEfficiencyMultiplier(tier); - this.autoOutput = AutoOutputTrait.ofItems(this, cache); + explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); } public static float getEfficiencyMultiplier(int tier) { @@ -264,11 +264,6 @@ protected void chargeBattery() { updateBatterySubscription(); } - @Override - public boolean shouldWeatherOrTerrainExplosion() { - return false; - } - public void setWorkingEnabled(boolean workingEnabled) { isWorkingEnabled = workingEnabled; syncDataHolder.markClientSyncFieldDirty("isWorkingEnabled"); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java index 3a3fe593102..d9ae3fefd5c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java @@ -10,6 +10,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; +import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; @@ -221,7 +222,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long if (side == null || inputsEnergy(side)) { if (voltage > getInputVoltage()) { - machine.doExplosion(GTUtil.getExplosionPower(voltage)); + ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); return usedAmps; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java index a4cdfc0dd1f..973e82c7179 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java @@ -123,6 +123,7 @@ public FisherMachine(BlockEntityCreationInfo info, int tier) { GTCapabilityHelper.getForgeEnergyItem(item) != null)); autoOutput = AutoOutputTrait.ofItems(this, cache); + explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); } public void setWorkingEnabled(boolean enabled) { @@ -161,11 +162,6 @@ public void onUnload() { } } - @Override - public boolean shouldWeatherOrTerrainExplosion() { - return false; - } - @Override public void onMachineRemoved() { clearInventory(chargerInventory); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java index 22821876b65..5e009ec2335 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java @@ -113,6 +113,7 @@ public ItemCollectorMachine(BlockEntityCreationInfo info, int tier) { this.output = createOutputItemHandler(); this.chargerInventory = createChargerItemHandler(); this.filterInventory = createFilterItemHandler(); + explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); this.autoOutput = AutoOutputTrait.ofItems(this, output); maxRange = (int) Math.pow(2, tier + 2); range = maxRange; @@ -167,11 +168,6 @@ public void onUnload() { } } - @Override - public boolean shouldWeatherOrTerrainExplosion() { - return false; - } - @Override public void onMachineRemoved() { clearInventory(chargerInventory); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java index 6a8668edc29..ffe14fcf71d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java @@ -75,6 +75,7 @@ public PumpMachine(BlockEntityCreationInfo info, int tier) { super(info, tier); this.cache = new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME * Math.max(1, getTier()), IO.NONE, IO.OUT); + explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); this.autoOutput = AutoOutputTrait.ofFluids(this, cache); } @@ -88,11 +89,6 @@ public void onLoad() { subscribeServerTick(this::update); } - @Override - public boolean shouldWeatherOrTerrainExplosion() { - return false; - } - ////////////////////////////////////// // ********* Logic **********// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java index e18da73b220..70fdf8cfdc3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java @@ -8,10 +8,6 @@ public class RockCrusherMachine extends SimpleTieredMachine { public RockCrusherMachine(BlockEntityCreationInfo info, int tier) { super(info, tier, GTMachineUtils.defaultTankSizeFunction); - } - - @Override - public boolean shouldWeatherOrTerrainExplosion() { - return false; + explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java index 0eb894dac70..402077e1b90 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java @@ -9,12 +9,12 @@ import com.gregtechceu.gtceu.api.gui.fancy.FancyMachineUIWidget; import com.gregtechceu.gtceu.api.machine.ConditionalSubscriptionHandler; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; +import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; @@ -44,7 +44,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class ActiveTransformerMachine extends WorkableElectricMultiblockMachine - implements IControllable, IExplosionMachine, IFancyUIMachine, IDisplayUIMachine { + implements IControllable, IFancyUIMachine, IDisplayUIMachine { private IEnergyContainer powerOutput; private IEnergyContainer powerInput; @@ -150,7 +150,7 @@ private List getPrioritySortedParts() { public void onStructureInvalid() { if ((isWorkingEnabled() && recipeLogic.getStatus() == RecipeLogic.Status.WORKING) && !ConfigHolder.INSTANCE.machines.harmlessActiveTransformers) { - doExplosion(6f + getTier()); + ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), 6f + getTier()); } super.onStructureInvalid(); this.powerOutput = new EnergyContainerList(new ArrayList<>()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java index 760589bb07b..4e86ab5d222 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java @@ -3,12 +3,10 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.machine.TickableSubscription; -import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; +import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; -import com.gregtechceu.gtceu.config.ConfigHolder; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.InteractionHand; @@ -21,11 +19,10 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class EnergyHatchPartMachine extends TieredIOPartMachine implements IExplosionMachine { +public class EnergyHatchPartMachine extends TieredIOPartMachine { @SaveField public final NotifiableEnergyContainer energyContainer; - protected TickableSubscription explosionSub; @Getter protected int amperage; @@ -33,6 +30,7 @@ public EnergyHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io, int super(info, tier, io); this.amperage = amperage; this.energyContainer = createEnergyContainer(); + new ExplodableMachineTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); } ////////////////////////////////////// @@ -63,29 +61,6 @@ public boolean shouldOpenUI(Player player, InteractionHand hand, BlockHitResult @Override public void onLoad() { super.onLoad(); - if (!isRemote() && ConfigHolder.INSTANCE.machines.shouldWeatherOrTerrainExplosion && - shouldWeatherOrTerrainExplosion()) { - explosionSub = subscribeServerTick(this::checkExplosion); - checkExplosion(); - } - } - - @Override - public void onUnload() { - super.onUnload(); - if (explosionSub != null) { - explosionSub.unsubscribe(); - explosionSub = null; - } - } - - ////////////////////////////////////// - // ******** Explosion ********// - ////////////////////////////////////// - protected void checkExplosion() { - if (energyContainer.getEnergyStored() > 0) { - checkWeatherOrTerrainExplosion(tier, tier * 10); - } } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java index dd5c477e765..3e56daa1642 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java @@ -6,10 +6,10 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.TickableSubscription; -import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; +import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; @@ -45,7 +45,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class LargeBoilerMachine extends WorkableMultiblockMachine implements IExplosionMachine, IDisplayUIMachine { +public class LargeBoilerMachine extends WorkableMultiblockMachine implements IDisplayUIMachine { public static final int TICKS_PER_STEAM_GENERATION = 5; @@ -155,15 +155,15 @@ protected void updateCurrentTemperature() { // check explosion if (drained < maxDrain) { - doExplosion(2f); + ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), 2f); var center = getBlockPos().below().relative(getFrontFacing().getOpposite()); if (GTValues.RNG.nextInt(100) > 80) { - doExplosion(center, 2f); + ExplodableMachineTrait.doExplosion(getLevel(), center, 2f); } for (Direction x : Direction.Plane.HORIZONTAL) { for (Direction y : Direction.Plane.HORIZONTAL) { if (GTValues.RNG.nextInt(100) > 80) { - doExplosion(center.relative(x).relative(y), 2f); + ExplodableMachineTrait.doExplosion(getLevel(), center.relative(x).relative(y), 2f); } } } From dd404e5589a44634a091e064f01f3097182162ec Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 7 Feb 2026 18:27:18 +1100 Subject: [PATCH 2/9] move explosion static method to utils --- .../api/machine/steam/SteamBoilerMachine.java | 4 +- .../machine/trait/ExplodableMachineTrait.java | 37 +++++-------------- .../electric/BatteryBufferMachine.java | 2 +- .../machine/electric/ChargerMachine.java | 3 +- .../electric/ActiveTransformerMachine.java | 4 +- .../multiblock/steam/LargeBoilerMachine.java | 8 ++-- .../com/gregtechceu/gtceu/utils/GTUtil.java | 23 ++++++++++++ 7 files changed, 42 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java index fa870537dfd..7c5e0b6390b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamBoilerMachine.java @@ -11,7 +11,6 @@ import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; -import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; @@ -24,6 +23,7 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; +import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.ISubscription; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; @@ -195,7 +195,7 @@ protected void updateCurrentTemperature() { FluidAction.EXECUTE); } if (this.hasNoWater && hasDrainedWater) { - ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), 2.0f); + GTUtil.doExplosion(getLevel(), getBlockPos(), 2.0f); } else this.hasNoWater = !hasDrainedWater; if (filledSteam == 0 && hasDrainedWater && getLevel() instanceof ServerLevel serverLevel) { final float x = getBlockPos().getX() + 0.5F; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java index bf90f4c1041..2e89e2adc44 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java @@ -5,12 +5,14 @@ import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; -import lombok.Getter; -import lombok.Setter; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; + +import lombok.Getter; +import lombok.Setter; import org.jetbrains.annotations.Nullable; import java.util.function.Supplier; @@ -66,7 +68,8 @@ public void onMachineUnload() { } private void updateSubscription() { - if (!isRemote() && shouldExplodeInWeatherAndWater && ConfigHolder.INSTANCE.machines.shouldWeatherOrTerrainExplosion) { + if (!isRemote() && shouldExplodeInWeatherAndWater && + ConfigHolder.INSTANCE.machines.shouldWeatherOrTerrainExplosion) { explosionSub = subscribeServerTick(explosionSub, this::checkExplosion); } else { if (explosionSub != null) explosionSub.unsubscribe(); @@ -100,37 +103,15 @@ private void checkExplosion() { } public void doExplosion() { - doExplosion(getLevel(), getBlockPos(), explosionPower); + GTUtil.doExplosion(getLevel(), getBlockPos(), explosionPower); } public void doExplosion(float power) { - doExplosion(getLevel(), getBlockPos(), power); - } - - public static void doExplosion(Level level, BlockPos pos, float explosionPower) { - level.removeBlock(pos, false); - level.explode(null, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, - explosionPower, ConfigHolder.INSTANCE.machines.doesExplosionDamagesTerrain ? - Level.ExplosionInteraction.BLOCK : Level.ExplosionInteraction.NONE); + GTUtil.doExplosion(getLevel(), getBlockPos(), power); } public void setOnFire() { - setOnFire(getLevel(), getBlockPos(), fireChance); + GTUtil.setOnFire(getLevel(), getBlockPos(), fireChance); } - private static void setOnFire(Level level, BlockPos pos, double additionalFireChance) { - boolean isFirstFireSpawned = false; - for (Direction side : GTUtil.DIRECTIONS) { - if (level.isEmptyBlock(pos.relative(side))) { - if (!isFirstFireSpawned) { - level.setBlock(pos.relative(side), Blocks.FIRE.defaultBlockState(), 11); - if (!level.isEmptyBlock(pos.relative(side))) { - isFirstFireSpawned = true; - } - } else if (additionalFireChance >= GTValues.RNG.nextDouble() * 100) { - level.setBlock(pos.relative(side), Blocks.FIRE.defaultBlockState(), 11); - } - } - } - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java index 3389978c6eb..2ec93115976 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java @@ -290,7 +290,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long if (side == null || inputsEnergy(side)) { if (voltage > getInputVoltage()) { - ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); + GTUtil.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); return usedAmps; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java index d9ae3fefd5c..c7b24daf69c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java @@ -10,7 +10,6 @@ import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; -import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; @@ -222,7 +221,7 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long if (side == null || inputsEnergy(side)) { if (voltage > getInputVoltage()) { - ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); + GTUtil.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); return usedAmps; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java index 402077e1b90..870944d293f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java @@ -14,13 +14,13 @@ import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableElectricMultiblockMachine; -import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.misc.EnergyContainerList; import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.FormattingUtil; +import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.*; @@ -150,7 +150,7 @@ private List getPrioritySortedParts() { public void onStructureInvalid() { if ((isWorkingEnabled() && recipeLogic.getStatus() == RecipeLogic.Status.WORKING) && !ConfigHolder.INSTANCE.machines.harmlessActiveTransformers) { - ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), 6f + getTier()); + GTUtil.doExplosion(getLevel(), getBlockPos(), 6f + getTier()); } super.onStructureInvalid(); this.powerOutput = new EnergyContainerList(new ArrayList<>()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java index 3e56daa1642..9181db7dbe6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java @@ -9,7 +9,6 @@ import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; -import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.ingredient.FluidIngredient; @@ -20,6 +19,7 @@ import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; import com.lowdragmc.lowdraglib.gui.util.ClickData; import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget; @@ -155,15 +155,15 @@ protected void updateCurrentTemperature() { // check explosion if (drained < maxDrain) { - ExplodableMachineTrait.doExplosion(getLevel(), getBlockPos(), 2f); + GTUtil.doExplosion(getLevel(), getBlockPos(), 2f); var center = getBlockPos().below().relative(getFrontFacing().getOpposite()); if (GTValues.RNG.nextInt(100) > 80) { - ExplodableMachineTrait.doExplosion(getLevel(), center, 2f); + GTUtil.doExplosion(getLevel(), center, 2f); } for (Direction x : Direction.Plane.HORIZONTAL) { for (Direction y : Direction.Plane.HORIZONTAL) { if (GTValues.RNG.nextInt(100) > 80) { - ExplodableMachineTrait.doExplosion(getLevel(), center.relative(x).relative(y), 2f); + GTUtil.doExplosion(getLevel(), center.relative(x).relative(y), 2f); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java index 3b42d4f2b80..81cf922611e 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java @@ -650,4 +650,27 @@ public static T getLast(List list) { public static ArrayList list(T obj) { return new ArrayList<>(List.of(obj)); } + + public static void doExplosion(Level level, BlockPos pos, float explosionPower) { + level.removeBlock(pos, false); + level.explode(null, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, + explosionPower, ConfigHolder.INSTANCE.machines.doesExplosionDamagesTerrain ? + Level.ExplosionInteraction.BLOCK : Level.ExplosionInteraction.NONE); + } + + public static void setOnFire(Level level, BlockPos pos, double additionalFireChance) { + boolean isFirstFireSpawned = false; + for (Direction side : DIRECTIONS) { + if (level.isEmptyBlock(pos.relative(side))) { + if (!isFirstFireSpawned) { + level.setBlock(pos.relative(side), Blocks.FIRE.defaultBlockState(), 11); + if (!level.isEmptyBlock(pos.relative(side))) { + isFirstFireSpawned = true; + } + } else if (additionalFireChance >= GTValues.RNG.nextDouble() * 100) { + level.setBlock(pos.relative(side), Blocks.FIRE.defaultBlockState(), 11); + } + } + } + } } From ceadf06815f7f0e575540f7bc297f83235fabaec Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 8 Feb 2026 11:31:10 +1100 Subject: [PATCH 3/9] spotless --- .../gtceu/api/machine/TieredEnergyMachine.java | 9 ++++++--- .../api/machine/trait/ExplodableMachineTrait.java | 10 ++++------ .../common/machine/electric/BatteryBufferMachine.java | 1 - .../multiblock/electric/ActiveTransformerMachine.java | 2 +- .../machine/multiblock/steam/LargeBoilerMachine.java | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java index a10859a3783..1c6310c5f36 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -14,10 +14,11 @@ import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget; -import lombok.Getter; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.util.Mth; +import lombok.Getter; + import java.util.function.Function; import javax.annotation.ParametersAreNonnullByDefault; @@ -36,7 +37,8 @@ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, Function energyContainerSupplier) { super(info, tier); energyContainer = energyContainerSupplier.apply(this); - explodableMachineTrait = new ExplodableMachineTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); + explodableMachineTrait = new ExplodableMachineTrait(this, tier, tier * 10, + () -> energyContainer.getEnergyStored() > 0); } public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) { @@ -50,7 +52,8 @@ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) { energyContainer = NotifiableEnergyContainer.receiverContainer(this, tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage()); } - explodableMachineTrait = new ExplodableMachineTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); + explodableMachineTrait = new ExplodableMachineTrait(this, tier, tier * 10, + () -> energyContainer.getEnergyStored() > 0); } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java index 2e89e2adc44..c6326a80c29 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java @@ -6,10 +6,7 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Blocks; import lombok.Getter; import lombok.Setter; @@ -19,7 +16,8 @@ public class ExplodableMachineTrait extends MachineTrait { - public static final MachineTraitType TYPE = new MachineTraitType<>(ExplodableMachineTrait.class); + public static final MachineTraitType TYPE = new MachineTraitType<>( + ExplodableMachineTrait.class); private @Nullable TickableSubscription explosionSub = null; @@ -30,7 +28,8 @@ public class ExplodableMachineTrait extends MachineTrait { @Setter private Supplier explosionPredicate; - public ExplodableMachineTrait(MetaMachine machine, float explosionPower, float fireChance, Supplier explosionPredicate) { + public ExplodableMachineTrait(MetaMachine machine, float explosionPower, float fireChance, + Supplier explosionPredicate) { super(machine); shouldExplodeInWeatherAndWater = true; this.explosionPredicate = explosionPredicate; @@ -113,5 +112,4 @@ public void doExplosion(float power) { public void setOnFire() { GTUtil.setOnFire(getLevel(), getBlockPos(), fireChance); } - } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java index 2ec93115976..25a24fa511b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java @@ -12,7 +12,6 @@ import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; import com.gregtechceu.gtceu.api.machine.feature.IMachineLife; -import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java index 870944d293f..4b7054160a0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/ActiveTransformerMachine.java @@ -19,8 +19,8 @@ import com.gregtechceu.gtceu.api.pattern.TraceabilityPredicate; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.FormattingUtil; - import com.gregtechceu.gtceu.utils.GTUtil; + import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.*; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java index 9181db7dbe6..3256314df3d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/steam/LargeBoilerMachine.java @@ -18,8 +18,8 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.config.ConfigHolder; - import com.gregtechceu.gtceu.utils.GTUtil; + import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; import com.lowdragmc.lowdraglib.gui.util.ClickData; import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget; From ac14a54c6f8fc9ccdba0b11c8e2c6fb007107332 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 8 Feb 2026 12:22:13 +1100 Subject: [PATCH 4/9] review changes --- .../api/machine/TieredEnergyMachine.java | 8 +-- ....java => EnvironmentalExplosionTrait.java} | 58 ++++++++----------- .../trait/NotifiableEnergyContainer.java | 4 +- .../machine/electric/BlockBreakerMachine.java | 2 +- .../machine/electric/FisherMachine.java | 2 +- .../electric/ItemCollectorMachine.java | 2 +- .../common/machine/electric/PumpMachine.java | 2 +- .../machine/electric/RockCrusherMachine.java | 2 +- .../part/EnergyHatchPartMachine.java | 4 +- 9 files changed, 36 insertions(+), 48 deletions(-) rename src/main/java/com/gregtechceu/gtceu/api/machine/trait/{ExplodableMachineTrait.java => EnvironmentalExplosionTrait.java} (58%) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java index 1c6310c5f36..4812783f7ad 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/TieredEnergyMachine.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.editor.EditableUI; import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine; -import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; +import com.gregtechceu.gtceu.api.machine.trait.EnvironmentalExplosionTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; @@ -31,13 +31,13 @@ public class TieredEnergyMachine extends TieredMachine implements ITieredMachine @SyncToClient public final NotifiableEnergyContainer energyContainer; @Getter - protected final ExplodableMachineTrait explodableMachineTrait; + protected final EnvironmentalExplosionTrait environmentalExplosionTrait; public TieredEnergyMachine(BlockEntityCreationInfo info, int tier, Function energyContainerSupplier) { super(info, tier); energyContainer = energyContainerSupplier.apply(this); - explodableMachineTrait = new ExplodableMachineTrait(this, tier, tier * 10, + environmentalExplosionTrait = new EnvironmentalExplosionTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); } @@ -52,7 +52,7 @@ public TieredEnergyMachine(BlockEntityCreationInfo info, int tier) { energyContainer = NotifiableEnergyContainer.receiverContainer(this, tierVoltage * 64L, tierVoltage, getMaxInputOutputAmperage()); } - explodableMachineTrait = new ExplodableMachineTrait(this, tier, tier * 10, + environmentalExplosionTrait = new EnvironmentalExplosionTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/EnvironmentalExplosionTrait.java similarity index 58% rename from src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java rename to src/main/java/com/gregtechceu/gtceu/api/machine/trait/EnvironmentalExplosionTrait.java index c6326a80c29..a739b7731bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExplodableMachineTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/EnvironmentalExplosionTrait.java @@ -12,46 +12,46 @@ import lombok.Setter; import org.jetbrains.annotations.Nullable; -import java.util.function.Supplier; +import java.util.function.BooleanSupplier; -public class ExplodableMachineTrait extends MachineTrait { +public class EnvironmentalExplosionTrait extends MachineTrait { - public static final MachineTraitType TYPE = new MachineTraitType<>( - ExplodableMachineTrait.class); + public static final MachineTraitType TYPE = new MachineTraitType<>( + EnvironmentalExplosionTrait.class); private @Nullable TickableSubscription explosionSub = null; - private boolean shouldExplodeInWeatherAndWater; + private boolean enableEnvironmentalExplosions; @Getter @Setter private float explosionPower, fireChance; @Setter - private Supplier explosionPredicate; + private BooleanSupplier explosionPredicate; - public ExplodableMachineTrait(MetaMachine machine, float explosionPower, float fireChance, - Supplier explosionPredicate) { + public EnvironmentalExplosionTrait(MetaMachine machine, float explosionPower, float fireChance, + BooleanSupplier explosionPredicate) { super(machine); - shouldExplodeInWeatherAndWater = true; + enableEnvironmentalExplosions = true; this.explosionPredicate = explosionPredicate; this.explosionPower = explosionPower; this.fireChance = fireChance; } - public ExplodableMachineTrait(MetaMachine machine, float explosionPower, float fireChance) { + public EnvironmentalExplosionTrait(MetaMachine machine, float explosionPower, float fireChance) { this(machine, explosionPower, fireChance, () -> true); } @Override - public MachineTraitType getTraitType() { + public MachineTraitType getTraitType() { return TYPE; } - public boolean shouldExplodeInWeatherAndWater() { - return shouldExplodeInWeatherAndWater; + public boolean enableEnvironmentalExplosions() { + return enableEnvironmentalExplosions; } - public void setShouldExplodeInWeatherAndWater(boolean value) { - shouldExplodeInWeatherAndWater = value; + public void setEnableEnvironmentalExplosions(boolean value) { + enableEnvironmentalExplosions = value; updateSubscription(); } @@ -67,24 +67,24 @@ public void onMachineUnload() { } private void updateSubscription() { - if (!isRemote() && shouldExplodeInWeatherAndWater && + if (!isRemote() && enableEnvironmentalExplosions && ConfigHolder.INSTANCE.machines.shouldWeatherOrTerrainExplosion) { - explosionSub = subscribeServerTick(explosionSub, this::checkExplosion); + explosionSub = subscribeServerTick(explosionSub, this::checkEnvironment); } else { if (explosionSub != null) explosionSub.unsubscribe(); explosionSub = null; } } - private void checkExplosion() { - if (!shouldExplodeInWeatherAndWater || !explosionPredicate.get()) return; + private void checkEnvironment() { + if (!enableEnvironmentalExplosions || !explosionPredicate.getAsBoolean()) return; var level = machine.getLevel(); var pos = getBlockPos(); if (GTValues.RNG.nextInt(1000) == 0) { for (Direction side : GTUtil.DIRECTIONS) { var fluidState = level.getBlockState(pos.relative(side)).getFluidState(); if (!fluidState.isEmpty()) { - doExplosion(); + GTUtil.doExplosion(level, pos, explosionPower); return; } } @@ -93,23 +93,11 @@ private void checkExplosion() { if (level.isRainingAt(pos) || level.isRainingAt(pos.east()) || level.isRainingAt(pos.west()) || level.isRainingAt(pos.north()) || level.isRainingAt(pos.south())) { if (level.isThundering() && GTValues.RNG.nextInt(3) == 0) { - doExplosion(); + GTUtil.doExplosion(level, pos, explosionPower); } else if (GTValues.RNG.nextInt(10) == 0) { - doExplosion(); - } else setOnFire(); + GTUtil.doExplosion(level, pos, explosionPower); + } else GTUtil.setOnFire(level, pos, fireChance); } } } - - public void doExplosion() { - GTUtil.doExplosion(getLevel(), getBlockPos(), explosionPower); - } - - public void doExplosion(float power) { - GTUtil.doExplosion(getLevel(), getBlockPos(), power); - } - - public void setOnFire() { - GTUtil.setOnFire(getLevel(), getBlockPos(), fireChance); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java index 0039109ebb0..1e5170c15be 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java @@ -271,8 +271,8 @@ public long acceptEnergyFromNetwork(Direction side, long voltage, long amperage) long canAccept = getEnergyCapacity() - getEnergyStored(); if (voltage > 0L && (side == null || inputsEnergy(side))) { if (voltage > getInputVoltage()) { - var explodable = machine.getTraitHolder().getTrait(ExplodableMachineTrait.TYPE); - if (explodable != null) explodable.doExplosion(GTUtil.getExplosionPower(voltage)); + var explodable = machine.getTraitHolder().getTrait(EnvironmentalExplosionTrait.TYPE); + if (explodable != null) GTUtil.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); return Math.min(amperage, getInputAmperage() - amps); } if (canAccept >= voltage) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java index 099f05e881d..dd607b6d05a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java @@ -83,7 +83,7 @@ public BlockBreakerMachine(BlockEntityCreationInfo info, int tier) { this.energyPerTick = GTValues.V[tier - 1]; this.efficiencyMultiplier = 1.0f - getEfficiencyMultiplier(tier); this.autoOutput = AutoOutputTrait.ofItems(this, cache); - explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); + environmentalExplosionTrait.setEnableEnvironmentalExplosions(false); } public static float getEfficiencyMultiplier(int tier) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java index 973e82c7179..024a77ecfc3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java @@ -123,7 +123,7 @@ public FisherMachine(BlockEntityCreationInfo info, int tier) { GTCapabilityHelper.getForgeEnergyItem(item) != null)); autoOutput = AutoOutputTrait.ofItems(this, cache); - explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); + environmentalExplosionTrait.setEnableEnvironmentalExplosions(false); } public void setWorkingEnabled(boolean enabled) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java index 5e009ec2335..9b251b5ae95 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java @@ -113,7 +113,7 @@ public ItemCollectorMachine(BlockEntityCreationInfo info, int tier) { this.output = createOutputItemHandler(); this.chargerInventory = createChargerItemHandler(); this.filterInventory = createFilterItemHandler(); - explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); + environmentalExplosionTrait.setEnableEnvironmentalExplosions(false); this.autoOutput = AutoOutputTrait.ofItems(this, output); maxRange = (int) Math.pow(2, tier + 2); range = maxRange; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java index ffe14fcf71d..d55f0117bd1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/PumpMachine.java @@ -75,7 +75,7 @@ public PumpMachine(BlockEntityCreationInfo info, int tier) { super(info, tier); this.cache = new NotifiableFluidTank(this, 1, 16 * FluidType.BUCKET_VOLUME * Math.max(1, getTier()), IO.NONE, IO.OUT); - explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); + environmentalExplosionTrait.setEnableEnvironmentalExplosions(false); this.autoOutput = AutoOutputTrait.ofFluids(this, cache); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java index 70fdf8cfdc3..24824e61c92 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/RockCrusherMachine.java @@ -8,6 +8,6 @@ public class RockCrusherMachine extends SimpleTieredMachine { public RockCrusherMachine(BlockEntityCreationInfo info, int tier) { super(info, tier, GTMachineUtils.defaultTankSizeFunction); - explodableMachineTrait.setShouldExplodeInWeatherAndWater(false); + environmentalExplosionTrait.setEnableEnvironmentalExplosions(false); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java index 4e86ab5d222..07c6be0c8e9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/EnergyHatchPartMachine.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; -import com.gregtechceu.gtceu.api.machine.trait.ExplodableMachineTrait; +import com.gregtechceu.gtceu.api.machine.trait.EnvironmentalExplosionTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; @@ -30,7 +30,7 @@ public EnergyHatchPartMachine(BlockEntityCreationInfo info, int tier, IO io, int super(info, tier, io); this.amperage = amperage; this.energyContainer = createEnergyContainer(); - new ExplodableMachineTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); + new EnvironmentalExplosionTrait(this, tier, tier * 10, () -> energyContainer.getEnergyStored() > 0); } ////////////////////////////////////// From 0305be2be6d4058ce7caea8e270f92a05be6352e Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 13 Feb 2026 07:25:42 +1100 Subject: [PATCH 5/9] sotplsess --- .../gtceu/api/machine/trait/NotifiableEnergyContainer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java index 1e5170c15be..7b6d5157c71 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java @@ -272,7 +272,8 @@ public long acceptEnergyFromNetwork(Direction side, long voltage, long amperage) if (voltage > 0L && (side == null || inputsEnergy(side))) { if (voltage > getInputVoltage()) { var explodable = machine.getTraitHolder().getTrait(EnvironmentalExplosionTrait.TYPE); - if (explodable != null) GTUtil.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); + if (explodable != null) + GTUtil.doExplosion(getLevel(), getBlockPos(), GTUtil.getExplosionPower(voltage)); return Math.min(amperage, getInputAmperage() - amps); } if (canAccept >= voltage) { From efd1e5e5b08ca3377030f1b4f0ff19f03f69e5db Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 13 Feb 2026 08:26:40 +1100 Subject: [PATCH 6/9] change if statements --- .../trait/EnvironmentalExplosionTrait.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/EnvironmentalExplosionTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/EnvironmentalExplosionTrait.java index a739b7731bd..db020eaf816 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/EnvironmentalExplosionTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/EnvironmentalExplosionTrait.java @@ -89,15 +89,13 @@ private void checkEnvironment() { } } } - if (GTValues.RNG.nextInt(1000) == 0) { - if (level.isRainingAt(pos) || level.isRainingAt(pos.east()) || level.isRainingAt(pos.west()) || - level.isRainingAt(pos.north()) || level.isRainingAt(pos.south())) { - if (level.isThundering() && GTValues.RNG.nextInt(3) == 0) { - GTUtil.doExplosion(level, pos, explosionPower); - } else if (GTValues.RNG.nextInt(10) == 0) { - GTUtil.doExplosion(level, pos, explosionPower); - } else GTUtil.setOnFire(level, pos, fireChance); - } + if (level.isRainingAt(pos) || level.isRainingAt(pos.east()) || level.isRainingAt(pos.west()) || + level.isRainingAt(pos.north()) || level.isRainingAt(pos.south())) { + if (level.isThundering() && GTValues.RNG.nextInt(3) == 0) { + if (GTValues.RNG.nextInt(1000) == 0) GTUtil.doExplosion(level, pos, explosionPower); + } else if (GTValues.RNG.nextInt(10) == 0) { + if (GTValues.RNG.nextInt(1000) == 0) GTUtil.doExplosion(level, pos, explosionPower); + } else if (GTValues.RNG.nextInt(1000) == 0) GTUtil.setOnFire(level, pos, fireChance); } } } From 40ef98b91c6085ca6b9f850ebc7087d84d15a695 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 13 Feb 2026 09:18:11 +1100 Subject: [PATCH 7/9] merge issue --- .../machine/multiblock/MultiblockControllerMachine.java | 7 ++----- .../api/machine/multiblock/part/MultiblockPartMachine.java | 3 +-- .../gtceu/integration/jade/provider/ParallelProvider.java | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java index 5cfec417d51..395db2dd449 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java @@ -19,8 +19,6 @@ import com.gregtechceu.gtceu.client.renderer.MultiblockInWorldPreviewRenderer; import com.gregtechceu.gtceu.common.machine.multiblock.part.ParallelHatchPartMachine; import com.gregtechceu.gtceu.config.ConfigHolder; -import com.gregtechceu.gtceu.client.renderer.MultiblockInWorldPreviewRenderer; -import com.gregtechceu.gtceu.config.ConfigHolder; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -176,7 +174,6 @@ public MultiblockMachineDefinition getDefinition() { /** * Get MultiblockState. It records all structure-related information. */ - @NotNull public MultiblockState getMultiblockState() { if (multiblockState == null) { multiblockState = new MultiblockState(getLevel(), getBlockPos()); @@ -278,7 +275,7 @@ public boolean allowFlip() { } @Override - public void setUpwardsFacing(@NotNull Direction upwardsFacing) { + public void setUpwardsFacing(Direction upwardsFacing) { if (!getDefinition().isAllowExtendedFacing()) { return; } @@ -320,7 +317,7 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play } return InteractionResult.SUCCESS; } - return IInteractedMachine.super.onUse(state, world, pos, player, hand, hit); + return super.onUse(state, world, pos, player, hand, hit); } public boolean allowCircuitSlots() { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java index 3771b55f437..b552c93432d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/part/MultiblockPartMachine.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeHandler; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; @@ -32,7 +31,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class MultiblockPartMachine extends MetaMachine implements IMultiPart, IInteractedMachine { +public class MultiblockPartMachine extends MetaMachine implements IMultiPart { @SyncToClient protected final Set controllerPositions = new ObjectOpenHashSet<>(8); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ParallelProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ParallelProvider.java index 83dec12cbbe..e6671be24b6 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ParallelProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ParallelProvider.java @@ -2,8 +2,8 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; -import com.gregtechceu.gtceu.common.machine.multiblock.part.ParallelHatchPartMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.common.machine.multiblock.part.ParallelHatchPartMachine; import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.ChatFormatting; From c3c8b0b53b153e8ddc6bcb85a2e03bc5a09fcb72 Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Sat, 14 Feb 2026 08:38:07 +1100 Subject: [PATCH 8/9] Update IDisplayUIMachine.java --- .../api/machine/feature/multiblock/IDisplayUIMachine.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IDisplayUIMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IDisplayUIMachine.java index 7007c33eebe..d6bfdb6b5fa 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IDisplayUIMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IDisplayUIMachine.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; -import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -18,7 +17,7 @@ import java.util.List; -public interface IDisplayUIMachine extends IUIMachine, IInteractedMachine { +public interface IDisplayUIMachine extends IUIMachine { default void addDisplayText(List textList) { for (var part : self().getParts()) { From c79522d40955da36299bcca68ce9ecf339ae4387 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 14 Feb 2026 10:54:47 +1100 Subject: [PATCH 9/9] spotless --- .../api/machine/multiblock/MultiblockControllerMachine.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java index 395db2dd449..acd796209a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/multiblock/MultiblockControllerMachine.java @@ -32,7 +32,6 @@ import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*;