From 28bff24636092c5621f5a2085e368806079105c3 Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Tue, 17 Feb 2026 00:18:40 +1100 Subject: [PATCH 01/17] Port hazard and exhaust interfaces to trait system (#4584) --- .../api/machine/SimpleGeneratorMachine.java | 12 +- .../feature/IEnvironmentalHazardCleaner.java | 10 - .../feature/IEnvironmentalHazardEmitter.java | 49 ----- .../machine/feature/IExhaustVentMachine.java | 184 ------------------ .../feature/ILocalizedHazardEmitter.java | 49 ----- .../feature/multiblock/IMufflerMachine.java | 103 ---------- .../api/machine/steam/SimpleSteamMachine.java | 39 ++-- .../trait/ExhaustVentMachineTrait.java | 136 +++++++++++++ .../EnvironmentalHazardCleanerTrait.java | 130 +++++++++++++ .../EnvironmentalHazardEmitterTrait.java | 64 ++++++ .../hazard/LocalizedHazardEmitterTrait.java | 64 ++++++ .../machine/trait/hazard/package-info.java | 4 + .../gtceu/common/block/DuctPipeBlock.java | 10 +- .../blockentity/DuctPipeBlockEntity.java | 14 +- .../machine/electric/AirScrubberMachine.java | 96 ++------- .../multiblock/electric/CleanroomMachine.java | 4 +- .../multiblock/part/MufflerPartMachine.java | 63 +++++- .../primitive/PrimitiveWorkableMachine.java | 20 +- .../machine/steam/SteamMinerMachine.java | 38 +--- .../machine/trait/miner/SteamMinerLogic.java | 10 +- .../common/pipelike/duct/DuctNetHandler.java | 12 +- .../recipe/condition/VentCondition.java | 7 +- .../provider/ExhaustVentBlockProvider.java | 33 +--- .../provider/HazardCleanerBlockProvider.java | 17 +- 24 files changed, 564 insertions(+), 604 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardCleaner.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardEmitter.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExhaustVentMachine.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/ILocalizedHazardEmitter.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExhaustVentMachineTrait.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/EnvironmentalHazardCleanerTrait.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/LocalizedHazardEmitterTrait.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/package-info.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java index 1e23a3f118b..9dd612e5360 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleGeneratorMachine.java @@ -4,8 +4,8 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.gui.editor.EditableMachineUI; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardEmitterTrait; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.recipe.modifier.ParallelLogic; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.api.recipe.ui.GTRecipeTypeUI; +import com.gregtechceu.gtceu.common.data.GTMedicalConditions; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; import com.lowdragmc.lowdraglib.utils.Position; @@ -33,17 +34,18 @@ import java.util.function.BiFunction; public class SimpleGeneratorMachine extends WorkableTieredMachine - implements IFancyUIMachine, IEnvironmentalHazardEmitter { + implements IFancyUIMachine { @Getter - private final float hazardStrengthPerOperation; + private final EnvironmentalHazardEmitterTrait hazardEmitter; public SimpleGeneratorMachine(BlockEntityCreationInfo info, int tier, float hazardStrengthPerOperation, Int2IntFunction tankScalingFunction) { super(info, tier, tankScalingFunction); energyContainer.setSideOutputCondition(side -> !hasFrontFacing() || side == getFrontFacing()); - this.hazardStrengthPerOperation = hazardStrengthPerOperation; + this.hazardEmitter = new EnvironmentalHazardEmitterTrait(this, GTMedicalConditions.CARBON_MONOXIDE_POISONING, + hazardStrengthPerOperation); } public SimpleGeneratorMachine(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScalingFunction) { @@ -112,7 +114,7 @@ public boolean canVoidRecipeOutputs(RecipeCapability capability) { @Override public void afterWorking() { super.afterWorking(); - spreadEnvironmentalHazard(); + hazardEmitter.emitHazard(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardCleaner.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardCleaner.java deleted file mode 100644 index cdb7b0e7709..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardCleaner.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; - -public interface IEnvironmentalHazardCleaner extends IMachineFeature { - - float getRemovedLastSecond(); - - void cleanHazard(MedicalCondition condition, float amount); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardEmitter.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardEmitter.java deleted file mode 100644 index 4d4edb0c46e..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IEnvironmentalHazardEmitter.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; -import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; -import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; -import com.gregtechceu.gtceu.common.data.GTMedicalConditions; -import com.gregtechceu.gtceu.config.ConfigHolder; - -import net.minecraft.server.level.ServerLevel; - -/** - * common interface for environmental hazard (e.g. pollution) emitters like mufflers. - */ -public interface IEnvironmentalHazardEmitter extends IMachineFeature { - - /** - * @return the medical condition this hazard emitter creates. - */ - default MedicalCondition getConditionToEmit() { - return GTMedicalConditions.CARBON_MONOXIDE_POISONING; - } - - /** - * @return the starting strength of the hazard zone. - */ - float getHazardStrengthPerOperation(); - - default void spreadEnvironmentalHazard() { - if (!ConfigHolder.INSTANCE.gameplay.environmentalHazards) { - return; - } - - if (self().getLevel() instanceof ServerLevel serverLevel) { - IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(serverLevel, - self().getBlockPos().relative(self().getFrontFacing()), self().getFrontFacing().getOpposite()); - if (container != null && - container.getHazardCanBeInserted(getConditionToEmit()) > getHazardStrengthPerOperation()) { - container.addHazard(getConditionToEmit(), getHazardStrengthPerOperation()); - return; - } - - var savedData = EnvironmentalHazardSavedData.getOrCreate(serverLevel); - savedData.addZone(self().getBlockPos(), getHazardStrengthPerOperation(), true, - HazardProperty.HazardTrigger.INHALATION, getConditionToEmit()); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExhaustVentMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExhaustVentMachine.java deleted file mode 100644 index 7c62d616ba2..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IExhaustVentMachine.java +++ /dev/null @@ -1,184 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; -import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; -import com.gregtechceu.gtceu.common.data.GTDamageTypes; -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.core.particles.ParticleTypes; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.EnumProperty; -import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.shapes.Shapes; - -import org.jetbrains.annotations.NotNull; - -/** - * Interface defining the functionality of a machine which vents exhaust from a side. - * - * @implNote {@link com.gregtechceu.gtceu.api.machine.steam.SimpleSteamMachine} - */ -public interface IExhaustVentMachine extends IMachineFeature { - - EnumProperty VENT_DIRECTION_PROPERTY = GTMachineModelProperties.VENT_DIRECTION; - - /** - * @return the direction the vent faces - */ - @NotNull - Direction getVentingDirection(); - - /** - * @return if venting is needed - */ - boolean isNeedsVenting(); - - void setNeedsVenting(boolean needsVenting); - - /** - * Mark the machine as no longer needing venting - */ - void markVentingComplete(); - - /** - * @return the damage to deal to entities in the vent area - */ - float getVentingDamage(); - - /** - * Checks the venting state. Performs venting only if required. - * - * @return if the machine does not need venting - */ - default boolean checkVenting() { - if (isNeedsVenting()) { - tryDoVenting(self().getLevel(), self().getBlockPos()); - } - return !isNeedsVenting(); - } - - /** - * @return if venting is being blocked by something - */ - default boolean isVentingBlocked() { - Level level = self().getLevel(); - Direction ventingSide = getVentingDirection(); - BlockPos ventingBlockPos = self().getBlockPos().relative(ventingSide); - BlockState state = level.getBlockState(ventingBlockPos); - - return state.canOcclude() || Shapes.blockOccudes(state.getCollisionShape(level, ventingBlockPos), - Shapes.block(), ventingSide.getOpposite()); - } - - /** - * Attempts to vent, if needed - * - * @param level the level containing the machine venting - * @param pos the position of the machine - */ - default void tryDoVenting(@NotNull Level level, @NotNull BlockPos pos) { - if (!isNeedsVenting()) return; - - if (!isVentingBlocked()) { - performVenting(level, pos); - return; - } - - BlockPos ventingPos = pos.relative(getVentingDirection()); - if (GTUtil.tryBreakSnow(level, ventingPos, level.getBlockState(ventingPos), false)) { - performVenting(level, pos); - } - } - - private void performVenting(@NotNull Level level, @NotNull BlockPos pos) { - doVentingDamage(level, pos); - - Direction ventingDirection = getVentingDirection(); - double posX = pos.getX() + 0.5 + ventingDirection.getStepX() * 0.6; - double posY = pos.getY() + 0.5 + ventingDirection.getStepY() * 0.6; - double posZ = pos.getZ() + 0.5 + ventingDirection.getStepZ() * 0.6; - createVentingParticles(level, posX, posY, posZ); - - if (ConfigHolder.INSTANCE.machines.machineSounds) { - playVentingSound(level, posX, posY, posZ); - } - - markVentingComplete(); - } - - /** - * Damages entities upon venting - * - * @param level the level containing the machine and entities - * @param pos the position of the machine venting - */ - default void doVentingDamage(@NotNull Level level, @NotNull BlockPos pos) { - for (LivingEntity entity : level.getEntitiesOfClass(LivingEntity.class, - new AABB(pos.relative(getVentingDirection())), - entity -> !(entity instanceof Player player) || !player.isSpectator() && !player.isCreative())) { - entity.hurt(GTDamageTypes.HEAT.source(level), getVentingDamage()); - // TODO ADVANCEMENT - // if (entity instanceof ServerPlayer) { - // AdvancementTriggers.STEAM_VENT_DEATH.trigger((ServerPlayer) entity); - // } - } - } - - /** - * Create the particles for venting - * - * @param level the level containing the machine - * @param posX the x position to send particles to - * @param posY the y position to send particles to - * @param posZ the z position to send particles to - */ - default void createVentingParticles(@NotNull Level level, double posX, double posY, double posZ) { - Direction ventingDirection = getVentingDirection(); - var count = 7 + level.random.nextInt(3); - if (level instanceof ServerLevel serverLevel) { - serverLevel.sendParticles(ParticleTypes.CLOUD, posX, posY, posZ, - count, - ventingDirection.getStepX() / 2.0, - ventingDirection.getStepY() / 2.0, - ventingDirection.getStepZ() / 2.0, 0.1); - } else { - for (int i = 0; i < count; ++i) { - double d1 = level.random.nextGaussian() * (double) ventingDirection.getStepX() / 2.0; - double d3 = level.random.nextGaussian() * (double) ventingDirection.getStepY() / 2.0; - double d5 = level.random.nextGaussian() * (double) ventingDirection.getStepZ() / 2.0; - double d6 = level.random.nextGaussian() * 0.1; - double d7 = level.random.nextGaussian() * 0.1; - double d8 = level.random.nextGaussian() * 0.1; - try { - level.addParticle(ParticleTypes.CLOUD, posX + d1, posY + d3, posZ + d5, d6, d7, d8); - continue; - } catch (Throwable throwable) { - GTCEu.LOGGER.warn("Could not spawn particle effect {}", ParticleTypes.CLOUD); - return; - } - } - } - } - - /** - * Play the venting sound - * - * @param level the level to play the sound in - * @param posX the x position to play the sound at - * @param posY the y position to play the sound at - * @param posZ the z position to play the sound at - */ - default void playVentingSound(@NotNull Level level, double posX, double posY, double posZ) { - level.playSound(null, posX, posY, posZ, SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1F, 1F); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ILocalizedHazardEmitter.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ILocalizedHazardEmitter.java deleted file mode 100644 index f13c10b0af1..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/ILocalizedHazardEmitter.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature; - -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; -import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; -import com.gregtechceu.gtceu.common.capability.LocalizedHazardSavedData; -import com.gregtechceu.gtceu.common.data.GTMedicalConditions; -import com.gregtechceu.gtceu.config.ConfigHolder; - -import net.minecraft.server.level.ServerLevel; - -/** - * common interface for localized hazard (e.g. radiation) emitters like nuclear reactors. - */ -public interface ILocalizedHazardEmitter extends IMachineFeature { - - /** - * @return the medical condition this hazard emitter creates. - */ - default MedicalCondition getConditionToEmit() { - return GTMedicalConditions.CARCINOGEN; - } - - /** - * @return the starting strength of the hazard zone. recommended values are in the range [1,5) - */ - int getHazardSizePerOperation(); - - default void spreadLocalizedHazard() { - if (!ConfigHolder.INSTANCE.gameplay.environmentalHazards) { - return; - } - - if (self().getLevel() instanceof ServerLevel serverLevel) { - IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(serverLevel, - self().getBlockPos().relative(self().getFrontFacing()), self().getFrontFacing().getOpposite()); - if (container != null && - container.getHazardCanBeInserted(getConditionToEmit()) > getHazardSizePerOperation()) { - container.addHazard(getConditionToEmit(), getHazardSizePerOperation()); - return; - } - - var savedData = LocalizedHazardSavedData.getOrCreate(serverLevel); - savedData.addSphericalZone(self().getBlockPos(), getHazardSizePerOperation(), false, - HazardProperty.HazardTrigger.INHALATION, getConditionToEmit()); - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java deleted file mode 100644 index db1ea9e0ea4..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/multiblock/IMufflerMachine.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.feature.multiblock; - -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; -import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.api.gui.fancy.IFancyTooltip; -import com.gregtechceu.gtceu.api.gui.fancy.TooltipsPanel; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; -import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; -import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; -import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.common.data.GTParticleTypes; - -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; -import net.minecraft.world.item.ItemStack; - -import java.util.List; - -public interface IMufflerMachine extends IMultiPart, IEnvironmentalHazardEmitter { - - void recoverItemsTable(ItemStack... recoveryItems); - - /** - * @return true if front face is free and contains only air blocks in 1x1 area OR has a duct block on it. - */ - default boolean isFrontFaceFree() { - var frontPos = self().getBlockPos().relative(self().getFrontFacing()); - return self().getLevel().getBlockState(frontPos).isAir() || - GTCapabilityHelper.getHazardContainer(self().getLevel(), - frontPos, self().getFrontFacing().getOpposite()) != null; - } - - default void emitPollutionParticles() { - var pos = self().getBlockPos(); - var facing = self().getFrontFacing(); - - IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(self().getLevel(), - pos.relative(facing), facing.getOpposite()); - if (container != null) { - // do not emit particles if front face has a duct on it. - return; - } - - var center = pos.getCenter(); - var offset = .75f; - var xPos = (float) (center.x + facing.getStepX() * offset + (GTValues.RNG.nextFloat() - .5f) * .35f); - var yPos = (float) (center.y + facing.getStepY() * offset + (GTValues.RNG.nextFloat() - .5f) * .35f); - var zPos = (float) (center.z + facing.getStepZ() * offset + (GTValues.RNG.nextFloat() - .5f) * .35f); - - var ySpd = facing.getStepY() + (GTValues.RNG.nextFloat() - .15f) * .5f; - var xSpd = facing.getStepX() + (GTValues.RNG.nextFloat() - .5f) * .5f; - var zSpd = facing.getStepZ() + (GTValues.RNG.nextFloat() - .5f) * .5f; - - self().getLevel().addParticle(GTParticleTypes.MUFFLER_PARTICLE.get(), - xPos, yPos, zPos, xSpd, ySpd, zSpd); - } - - @Override - default GTRecipe modifyRecipe(GTRecipe recipe) { - if (!isFrontFaceFree()) { - return null; - } - return IMultiPart.super.modifyRecipe(recipe); - } - - @Override - default float getHazardStrengthPerOperation() { - float outputAmount = 2.5f; - return this instanceof TieredPartMachine tiered ? outputAmount / Math.max(tiered.getTier(), 1) : outputAmount; - } - - @Override - default boolean afterWorking(IWorkableMultiController controller) { - spreadEnvironmentalHazard(); - var supplier = controller.self().getDefinition().getRecoveryItems(); - if (supplier != null) { - recoverItemsTable(supplier.get()); - } - return IMultiPart.super.afterWorking(controller); - } - - ////////////////////////////////////// - // ******* FANCY GUI ********// - ////////////////////////////////////// - - @Override - default void attachFancyTooltipsToController(MultiblockControllerMachine controller, TooltipsPanel tooltipsPanel) { - attachTooltips(tooltipsPanel); - } - - @Override - default void attachTooltips(TooltipsPanel tooltipsPanel) { - tooltipsPanel.attachTooltips(new IFancyTooltip.Basic( - () -> GuiTextures.INDICATOR_NO_STEAM.get(false), - () -> List.of(Component.translatable("gtceu.multiblock.universal.muffler_obstructed") - .setStyle(Style.EMPTY.withColor(ChatFormatting.RED))), - () -> !isFrontFaceFree(), - () -> null)); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java index 42a5a224244..507e08d9807 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SimpleSteamMachine.java @@ -9,9 +9,9 @@ import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.PredicatedImageWidget; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IExhaustVentMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; +import com.gregtechceu.gtceu.api.machine.trait.ExhaustVentMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; @@ -34,7 +34,6 @@ import com.google.common.collect.Tables; import lombok.Getter; -import lombok.Setter; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -43,22 +42,23 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class SimpleSteamMachine extends SteamWorkableMachine implements IExhaustVentMachine, IUIMachine { +public class SimpleSteamMachine extends SteamWorkableMachine implements IUIMachine { @SaveField public final NotifiableItemStackHandler importItems; @SaveField public final NotifiableItemStackHandler exportItems; + @Getter - @Setter - @SaveField - private boolean needsVenting; + private final ExhaustVentMachineTrait exhaustVentTrait; public SimpleSteamMachine(BlockEntityCreationInfo info, boolean isHighPressure) { super(info, isHighPressure); this.importItems = createImportItemHandler(); this.exportItems = createExportItemHandler(); + this.exhaustVentTrait = new ExhaustVentMachineTrait(this); + exhaustVentTrait.setVentingDamageAmount(isHighPressure() ? 12F : 6F); MachineRenderState renderState = getRenderState(); if (renderState.hasProperty(GTMachineModelProperties.VENT_DIRECTION)) { // outputFacing will always be opposite the front facing on init @@ -81,6 +81,7 @@ protected NotifiableItemStackHandler createExportItemHandler() { @Override public void onLoad() { super.onLoad(); + exhaustVentTrait.setVentingDirection(Objects.requireNonNull(getOutputFacing())); // Simulate an EU machine via a SteamEnergyHandler this.addHandlerList(RecipeHandlerList.of(IO.IN, new SteamEnergyRecipeHandler(steamTank, getConversionRate()))); } @@ -96,17 +97,6 @@ public void onMachineDestroyed() { // ****** Venting Logic ******// ////////////////////////////////////// - @Override - public float getVentingDamage() { - return isHighPressure() ? 12F : 6F; - } - - @SuppressWarnings("DataFlowIssue") - @Override - public @NotNull Direction getVentingDirection() { - return getOutputFacing(); - } - public void updateModelVentDirection() { MachineRenderState renderState = getRenderState(); if (renderState.hasProperty(GTMachineModelProperties.VENT_DIRECTION)) { @@ -115,7 +105,8 @@ public void updateModelVentDirection() { if (getFrontFacing() == Direction.UP && !allowExtendedFacing()) { upwardsDir = upwardsDir.getOpposite(); } - var relative = RelativeDirection.findRelativeOf(getFrontFacing(), getVentingDirection(), upwardsDir); + var relative = RelativeDirection.findRelativeOf(getFrontFacing(), exhaustVentTrait.getVentingDirection(), + upwardsDir); setRenderState(renderState.setValue(GTMachineModelProperties.VENT_DIRECTION, relative)); } } @@ -126,6 +117,7 @@ public void setOutputFacing(@NotNull Direction outputFacing) { super.setOutputFacing(outputFacing); if (getOutputFacing() != oldFacing) { updateModelVentDirection(); + exhaustVentTrait.setVentingDirection(outputFacing); } } @@ -147,11 +139,6 @@ public void setUpwardsFacing(@NotNull Direction upwardsFacing) { } } - @Override - public void markVentingComplete() { - this.needsVenting = false; - } - public double getConversionRate() { return isHighPressure() ? 2.0 : 1.0; } @@ -175,7 +162,7 @@ public static ModifierFunction recipeModifier(@NotNull MetaMachine machine, @Not if (!(machine instanceof SimpleSteamMachine steamMachine)) { return RecipeModifier.nullWrongType(SimpleSteamMachine.class, machine); } - if (RecipeHelper.getRecipeEUtTier(recipe) > GTValues.LV || !steamMachine.checkVenting()) { + if (RecipeHelper.getRecipeEUtTier(recipe) > GTValues.LV || !steamMachine.exhaustVentTrait.checkVenting()) { return ModifierFunction.NULL; } @@ -187,8 +174,8 @@ public static ModifierFunction recipeModifier(@NotNull MetaMachine machine, @Not @Override public void afterWorking() { super.afterWorking(); - needsVenting = true; - checkVenting(); + exhaustVentTrait.setNeedsVenting(true); + exhaustVentTrait.checkVenting(); } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExhaustVentMachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExhaustVentMachineTrait.java new file mode 100644 index 00000000000..a8862e5a58e --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/ExhaustVentMachineTrait.java @@ -0,0 +1,136 @@ +package com.gregtechceu.gtceu.api.machine.trait; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.common.data.GTDamageTypes; +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.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.Shapes; + +import lombok.Getter; +import lombok.Setter; + +public class ExhaustVentMachineTrait extends MachineTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>( + ExhaustVentMachineTrait.class, false); + + @Getter + @Setter + private Direction ventingDirection; + @Getter + @Setter + @SaveField + private boolean needsVenting; + @Getter + @Setter + private float ventingDamageAmount; + + public ExhaustVentMachineTrait(MetaMachine machine) { + super(machine); + + this.ventingDirection = machine.getFrontFacing().getOpposite(); + this.needsVenting = false; + this.ventingDamageAmount = 0; + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + public boolean isVentingBlocked() { + BlockPos ventingBlockPos = getBlockPos().relative(getVentingDirection()); + BlockState state = getLevel().getBlockState(ventingBlockPos); + + return state.canOcclude() || Shapes.blockOccudes(state.getCollisionShape(getLevel(), ventingBlockPos), + Shapes.block(), getVentingDirection().getOpposite()); + } + + public boolean checkVenting() { + if (!needsVenting) return true; + + if (!isVentingBlocked()) { + performVenting(); + return true; + } + + BlockPos ventingPos = getBlockPos().relative(getVentingDirection()); + if (GTUtil.tryBreakSnow(getLevel(), ventingPos, getLevel().getBlockState(ventingPos), false)) { + performVenting(); + return true; + } + return false; + } + + private void performVenting() { + doVentingDamage(); + createVentingParticles(); + if (ConfigHolder.INSTANCE.machines.machineSounds) { + playVentingSound(); + } + needsVenting = false; + } + + private void doVentingDamage() { + for (LivingEntity entity : getLevel().getEntitiesOfClass(LivingEntity.class, + new AABB(getBlockPos().relative(getVentingDirection())), + entity -> !(entity instanceof Player player) || !player.isSpectator() && !player.isCreative())) { + entity.hurt(GTDamageTypes.HEAT.source(getLevel()), ventingDamageAmount); + } + } + + private void createVentingParticles() { + var level = getLevel(); + var pos = getBlockPos(); + Direction ventingDirection = getVentingDirection(); + double posX = pos.getX() + 0.5 + ventingDirection.getStepX() * 0.6; + double posY = pos.getY() + 0.5 + ventingDirection.getStepY() * 0.6; + double posZ = pos.getZ() + 0.5 + ventingDirection.getStepZ() * 0.6; + var count = 7 + level.random.nextInt(3); + if (level instanceof ServerLevel serverLevel) { + serverLevel.sendParticles(ParticleTypes.CLOUD, posX, posY, posZ, + count, + ventingDirection.getStepX() / 2.0, + ventingDirection.getStepY() / 2.0, + ventingDirection.getStepZ() / 2.0, 0.1); + } else { + for (int i = 0; i < count; ++i) { + double d1 = level.random.nextGaussian() * (double) ventingDirection.getStepX() / 2.0; + double d3 = level.random.nextGaussian() * (double) ventingDirection.getStepY() / 2.0; + double d5 = level.random.nextGaussian() * (double) ventingDirection.getStepZ() / 2.0; + double d6 = level.random.nextGaussian() * 0.1; + double d7 = level.random.nextGaussian() * 0.1; + double d8 = level.random.nextGaussian() * 0.1; + try { + level.addParticle(ParticleTypes.CLOUD, posX + d1, posY + d3, posZ + d5, d6, d7, d8); + continue; + } catch (Throwable throwable) { + GTCEu.LOGGER.warn("Could not spawn particle effect {}", ParticleTypes.CLOUD); + return; + } + } + } + } + + private void playVentingSound() { + var pos = getBlockPos(); + var level = getLevel(); + double posX = pos.getX() + 0.5 + ventingDirection.getStepX() * 0.6; + double posY = pos.getY() + 0.5 + ventingDirection.getStepY() * 0.6; + double posZ = pos.getZ() + 0.5 + ventingDirection.getStepZ() * 0.6; + level.playSound(null, posX, posY, posZ, SoundEvents.LAVA_EXTINGUISH, SoundSource.BLOCKS, 1F, 1F); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/EnvironmentalHazardCleanerTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/EnvironmentalHazardCleanerTrait.java new file mode 100644 index 00000000000..73afc1c5c11 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/EnvironmentalHazardCleanerTrait.java @@ -0,0 +1,130 @@ +package com.gregtechceu.gtceu.api.machine.trait.hazard; + +import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; +import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; +import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; +import com.gregtechceu.gtceu.common.blockentity.DuctPipeBlockEntity; +import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; +import com.gregtechceu.gtceu.common.network.GTNetwork; +import com.gregtechceu.gtceu.common.network.packets.hazard.SPacketRemoveHazardZone; +import com.gregtechceu.gtceu.utils.GTUtil; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.chunk.LevelChunk; + +import it.unimi.dsi.fastutil.objects.Object2FloatMap; +import it.unimi.dsi.fastutil.objects.Object2FloatOpenHashMap; +import lombok.Getter; +import org.jetbrains.annotations.Nullable; + +import java.util.function.BiPredicate; + +public class EnvironmentalHazardCleanerTrait extends MachineTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>( + EnvironmentalHazardCleanerTrait.class); + + @Getter + protected float removedLastSecond; + + @Getter + protected float amountPerOperation; + @Getter + protected MedicalCondition conditionToRemove; + @Getter + protected int cleaningRadius; + @Getter + private boolean cleaningOperationInProgress; + + private final @Nullable BiPredicate cleaningHandler; + + public EnvironmentalHazardCleanerTrait(MetaMachine machine, int cleaningRadius, + @Nullable BiPredicate validateCleaningOperation) { + super(machine); + this.cleaningRadius = cleaningRadius; + this.cleaningHandler = validateCleaningOperation; + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + public boolean cleanHazard(MedicalCondition condition, float totalAmountToRemove) { + if (cleaningHandler == null) return beginCleaningOperation(condition, totalAmountToRemove); + return cleaningHandler.test(condition, totalAmountToRemove); + } + + public boolean beginCleaningOperation(MedicalCondition condition, float amountPerOperation) { + if (cleaningOperationInProgress) return false; + + this.conditionToRemove = condition; + this.amountPerOperation = amountPerOperation; + this.cleaningOperationInProgress = true; + return true; + } + + public void endCleaningOperation() { + this.cleaningOperationInProgress = false; + } + + public void cleanHazard() { + if (!cleaningOperationInProgress) return; + if (machine.getOffsetTimer() % 20 == 0) { + removedLastSecond = 0; + + for (Direction dir : GTUtil.DIRECTIONS) { + BlockPos offset = getBlockPos().relative(dir); + if (GTCapabilityHelper.getHazardContainer(getLevel(), offset, dir.getOpposite()) != null) { + if (getLevel().getBlockEntity(offset) instanceof DuctPipeBlockEntity duct && + !duct.isConnected(dir.getOpposite())) { + continue; + } + return; + } + } + + final ServerLevel serverLevel = (ServerLevel) getLevel(); + EnvironmentalHazardSavedData savedData = EnvironmentalHazardSavedData.getOrCreate(serverLevel); + + final ChunkPos pos = new ChunkPos(getBlockPos()); + Object2FloatMap relativePositions = new Object2FloatOpenHashMap<>(); + if (cleaningRadius <= 0) { + // LV scrubber can only process the chunk it's in + relativePositions.put(pos, 1); + } else { + for (int x = -cleaningRadius; x <= cleaningRadius; ++x) { + for (int z = -cleaningRadius; z <= cleaningRadius; ++z) { + relativePositions.put(new ChunkPos(pos.x + x, pos.z + z), Mth.sqrt(Mth.abs(x * z)) + 1); + } + } + } + for (ChunkPos rel : relativePositions.keySet()) { + final float distance = relativePositions.getFloat(rel); + savedData.getHazardZones().compute(rel, (chunkPos, zone) -> { + if (zone == null || zone.strength() <= 0) { + return null; + } + + float toClean = amountPerOperation / distance; + removedLastSecond += toClean; + zone.removeStrength(toClean); + if (zone.strength() <= 0) { + if (serverLevel.hasChunk(chunkPos.x, chunkPos.z)) { + LevelChunk chunk = serverLevel.getChunk(chunkPos.x, chunkPos.z); + GTNetwork.sendToAllPlayersTrackingChunk(chunk, new SPacketRemoveHazardZone(chunkPos)); + } + return null; + } else return zone; + }); + } + } + return; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java new file mode 100644 index 00000000000..f3dce5ffe4a --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java @@ -0,0 +1,64 @@ +package com.gregtechceu.gtceu.api.machine.trait.hazard; + +import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; +import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; +import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; +import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; +import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; +import com.gregtechceu.gtceu.config.ConfigHolder; + +import net.minecraft.server.level.ServerLevel; + +import lombok.Getter; +import lombok.Setter; + +/** + * trait for environmental hazard (e.g. pollution) emitters like mufflers. + */ +public class EnvironmentalHazardEmitterTrait extends MachineTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>( + EnvironmentalHazardEmitterTrait.class); + + @Getter + @Setter + protected float emissionStrength; + @Getter + @Setter + protected MedicalCondition conditionToEmit; + + public EnvironmentalHazardEmitterTrait(MetaMachine machine, MedicalCondition conditionToEmit, + float emissionStrength) { + super(machine); + this.conditionToEmit = conditionToEmit; + this.emissionStrength = emissionStrength; + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + public void emitHazard() { + if (!ConfigHolder.INSTANCE.gameplay.environmentalHazards) { + return; + } + + if (getLevel() instanceof ServerLevel serverLevel) { + IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(serverLevel, + getBlockPos().relative(machine.getFrontFacing()), machine.getFrontFacing().getOpposite()); + if (container != null && + container.getHazardCanBeInserted(getConditionToEmit()) > getEmissionStrength()) { + container.addHazard(getConditionToEmit(), getEmissionStrength()); + return; + } + + var savedData = EnvironmentalHazardSavedData.getOrCreate(serverLevel); + savedData.addZone(getBlockPos(), getEmissionStrength(), true, + HazardProperty.HazardTrigger.INHALATION, getConditionToEmit()); + } + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/LocalizedHazardEmitterTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/LocalizedHazardEmitterTrait.java new file mode 100644 index 00000000000..8192765380b --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/LocalizedHazardEmitterTrait.java @@ -0,0 +1,64 @@ +package com.gregtechceu.gtceu.api.machine.trait.hazard; + +import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; +import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; +import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; +import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType; +import com.gregtechceu.gtceu.common.capability.LocalizedHazardSavedData; +import com.gregtechceu.gtceu.config.ConfigHolder; + +import net.minecraft.server.level.ServerLevel; + +import lombok.Getter; +import lombok.Setter; + +/** + * trait for localized hazard (e.g. radiation) emitters like nuclear reactors. + */ +public class LocalizedHazardEmitterTrait extends MachineTrait { + + public static final MachineTraitType TYPE = new MachineTraitType<>( + LocalizedHazardEmitterTrait.class); + + @Getter + @Setter + private MedicalCondition conditionToEmit; + @Getter + @Setter + private int conditionStrength; + + public LocalizedHazardEmitterTrait(MetaMachine machine, MedicalCondition conditionToEmit, + int defaultConditionStrength) { + super(machine); + this.conditionToEmit = conditionToEmit; + this.conditionStrength = defaultConditionStrength; + } + + @Override + public MachineTraitType getTraitType() { + return TYPE; + } + + public void spreadHazard() { + if (!ConfigHolder.INSTANCE.gameplay.environmentalHazards) { + return; + } + + if (getLevel() instanceof ServerLevel serverLevel) { + IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(serverLevel, + getBlockPos().relative(machine.getFrontFacing()), machine.getFrontFacing().getOpposite()); + if (container != null && + container.getHazardCanBeInserted(getConditionToEmit()) > getConditionStrength()) { + container.addHazard(getConditionToEmit(), getConditionStrength()); + return; + } + + var savedData = LocalizedHazardSavedData.getOrCreate(serverLevel); + savedData.addSphericalZone(getBlockPos(), getConditionStrength(), false, + HazardProperty.HazardTrigger.INHALATION, getConditionToEmit()); + } + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/package-info.java new file mode 100644 index 00000000000..a4d86990353 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/hazard/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.machine.trait.hazard; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java index 95cffc6ee83..548e1c613a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java @@ -5,8 +5,8 @@ import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardCleanerTrait; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardEmitterTrait; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.client.model.pipe.PipeModel; @@ -88,8 +88,10 @@ public boolean canPipeConnectToBlock(IPipeNode @Nullable BlockEntity tile) { return tile != null && (tile.getCapability(GTCapability.CAPABILITY_HAZARD_CONTAINER, side.getOpposite()).isPresent() || - tile instanceof MetaMachine metaMachine && (tile instanceof IEnvironmentalHazardCleaner || - tile instanceof IEnvironmentalHazardEmitter)); + tile instanceof MetaMachine metaMachine && + (metaMachine.getTraitHolder().getTrait(EnvironmentalHazardCleanerTrait.TYPE) != null || + metaMachine.getTraitHolder().getTrait(EnvironmentalHazardEmitterTrait.TYPE) != + null)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java index 6a4a060339f..8c4b4c34667 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java @@ -5,8 +5,9 @@ import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardCleanerTrait; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardEmitterTrait; import com.gregtechceu.gtceu.common.pipelike.duct.*; import com.gregtechceu.gtceu.utils.GTUtil; @@ -110,10 +111,11 @@ public boolean canAttachTo(Direction side) { return false; } BlockPos relative = getBlockPos().relative(side); - return GTCapabilityHelper.getHazardContainer(level, relative, side.getOpposite()) != - null || - (level.getBlockEntity(relative) instanceof IEnvironmentalHazardCleaner || - level.getBlockEntity(relative) instanceof IEnvironmentalHazardEmitter); + MetaMachine adjacent = MetaMachine.getMachine(level, relative); + return GTCapabilityHelper.getHazardContainer(level, relative, side.getOpposite()) != null || + (adjacent != null && + (adjacent.getTraitHolder().getTrait(EnvironmentalHazardEmitterTrait.TYPE) != null || + adjacent.getTraitHolder().getTrait(EnvironmentalHazardCleanerTrait.TYPE) != null)); } return false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/AirScrubberMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/AirScrubberMachine.java index 2b4458f88e3..ecdbbc256b5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/AirScrubberMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/AirScrubberMachine.java @@ -1,48 +1,36 @@ package com.gregtechceu.gtceu.common.machine.electric; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.machine.SimpleTieredMachine; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardCleanerTrait; import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.common.blockentity.DuctPipeBlockEntity; -import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; -import com.gregtechceu.gtceu.common.network.GTNetwork; -import com.gregtechceu.gtceu.common.network.packets.hazard.SPacketRemoveHazardZone; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; -import com.gregtechceu.gtceu.utils.GTUtil; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.Mth; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.LevelChunk; - -import it.unimi.dsi.fastutil.objects.Object2FloatMap; -import it.unimi.dsi.fastutil.objects.Object2FloatOpenHashMap; import lombok.Getter; import org.jetbrains.annotations.Nullable; import static com.gregtechceu.gtceu.api.GTValues.LV; import static com.gregtechceu.gtceu.api.GTValues.VHA; -public class AirScrubberMachine extends SimpleTieredMachine implements IEnvironmentalHazardCleaner { +public class AirScrubberMachine extends SimpleTieredMachine { public static final float MIN_CLEANING_PER_OPERATION = 10; - private float cleaningPerOperation; + private MedicalCondition currentRecipeMedicalCondition; @Getter private float removedLastSecond; + @Getter + private final EnvironmentalHazardCleanerTrait cleanerTrait; + public AirScrubberMachine(BlockEntityCreationInfo info, int tier) { super(info, tier, GTMachineUtils.largeTankSizeFunction); - this.cleaningPerOperation = MIN_CLEANING_PER_OPERATION; + this.cleanerTrait = new EnvironmentalHazardCleanerTrait(this, tier / 2, this::validateCleaningOperation); } @Override @@ -50,16 +38,17 @@ public boolean regressWhenWaiting() { return false; } - @Override - public void cleanHazard(MedicalCondition condition, float amount) { + public boolean validateCleaningOperation(MedicalCondition condition, float amount) { if (this.recipeLogic.isActive()) { - return; + return false; } + currentRecipeMedicalCondition = condition; + GTRecipeBuilder builder = GTRecipeTypes.AIR_SCRUBBER_RECIPES.recipeBuilder(condition.name + "_autogen") .duration(200).EUt(VHA[LV]); condition.recipeModifier.accept(builder); - this.recipeLogic.checkMatchedRecipeAvailable(builder.buildRawRecipe()); + return this.recipeLogic.checkMatchedRecipeAvailable(builder.buildRawRecipe()); } @Override @@ -72,8 +61,8 @@ public boolean isRecipeLogicAvailable() { public boolean beforeWorking(@Nullable GTRecipe recipe) { if (super.beforeWorking(recipe) && recipe != null) { // Sets the amount of hazard to clean based on the recipe tier, not the machine tier - this.cleaningPerOperation = MIN_CLEANING_PER_OPERATION * (recipe.ocLevel + 1); - return true; + return cleanerTrait.beginCleaningOperation(currentRecipeMedicalCondition, + MIN_CLEANING_PER_OPERATION * (recipe.ocLevel + 1)); } return false; } @@ -83,57 +72,12 @@ public boolean onWorking() { if (!super.onWorking() || !ConfigHolder.INSTANCE.gameplay.environmentalHazards) { return false; } - - if (getOffsetTimer() % 20 == 0) { - removedLastSecond = 0; - - for (Direction dir : GTUtil.DIRECTIONS) { - BlockPos offset = getBlockPos().relative(dir); - if (GTCapabilityHelper.getHazardContainer(getLevel(), offset, dir.getOpposite()) != null) { - if (getLevel().getBlockEntity(offset) instanceof DuctPipeBlockEntity duct && - !duct.isConnected(dir.getOpposite())) { - continue; - } - return true; - } - } - - final ServerLevel serverLevel = (ServerLevel) getLevel(); - EnvironmentalHazardSavedData savedData = EnvironmentalHazardSavedData.getOrCreate(serverLevel); - - final ChunkPos pos = new ChunkPos(getBlockPos()); - Object2FloatMap relativePositions = new Object2FloatOpenHashMap<>(); - int radius = tier / 2; - if (radius <= 0) { - // LV scrubber can only process the chunk it's in - relativePositions.put(pos, 1); - } else { - for (int x = -radius; x <= radius; ++x) { - for (int z = -radius; z <= radius; ++z) { - relativePositions.put(new ChunkPos(pos.x + x, pos.z + z), Mth.sqrt(Mth.abs(x * z)) + 1); - } - } - } - for (ChunkPos rel : relativePositions.keySet()) { - final float distance = relativePositions.getFloat(rel); - savedData.getHazardZones().compute(rel, (chunkPos, zone) -> { - if (zone == null || zone.strength() <= 0) { - return null; - } - - float toClean = cleaningPerOperation / distance; - removedLastSecond += toClean; - zone.removeStrength(toClean); - if (zone.strength() <= 0) { - if (serverLevel.hasChunk(chunkPos.x, chunkPos.z)) { - LevelChunk chunk = serverLevel.getChunk(chunkPos.x, chunkPos.z); - GTNetwork.sendToAllPlayersTrackingChunk(chunk, new SPacketRemoveHazardZone(chunkPos)); - } - return null; - } else return zone; - }); - } - } + cleanerTrait.cleanHazard(); return true; } + + @Override + public void afterWorking() { + cleanerTrait.endCleaningOperation(); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java index 46006d60b70..1a15abaee0b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java @@ -11,7 +11,6 @@ import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMufflerMachine; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; @@ -31,6 +30,7 @@ import com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeCombustionEngineMachine; import com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeTurbineMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.DiodePartMachine; +import com.gregtechceu.gtceu.common.machine.multiblock.part.MufflerPartMachine; import com.gregtechceu.gtceu.common.machine.multiblock.primitive.CokeOvenMachine; import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitiveBlastFurnaceMachine; import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitivePumpMachine; @@ -441,7 +441,7 @@ public boolean addCache() { protected boolean isMachineBanned(MetaMachine machine) { // blacklisted machines: mufflers and all generators, miners/drills, primitives if (machine.getTraitHolder().getTrait(CleanroomProviderTrait.TYPE) != null) return true; - if (machine instanceof IMufflerMachine) return true; + if (machine instanceof MufflerPartMachine) return true; if (machine instanceof SimpleGeneratorMachine) return true; if (machine instanceof LargeCombustionEngineMachine) return true; if (machine instanceof LargeTurbineMachine) return true; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java index f0b24e28460..9287241ef37 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MufflerPartMachine.java @@ -2,17 +2,23 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; +import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; +import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.UITemplate; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; -import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMufflerMachine; +import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardEmitterTrait; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; +import com.gregtechceu.gtceu.common.data.GTMedicalConditions; +import com.gregtechceu.gtceu.common.data.GTParticleTypes; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; @@ -28,6 +34,7 @@ import lombok.Getter; import org.jetbrains.annotations.MustBeInvokedByOverriders; +import org.jetbrains.annotations.Nullable; import java.util.stream.IntStream; @@ -35,7 +42,7 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class MufflerPartMachine extends TieredPartMachine implements IMufflerMachine, IUIMachine { +public class MufflerPartMachine extends TieredPartMachine implements IUIMachine { @Getter private final int recoveryChance; @@ -44,18 +51,21 @@ public class MufflerPartMachine extends TieredPartMachine implements IMufflerMac private final CustomItemStackHandler inventory; private TickableSubscription snowSubscription; + @Getter + private final EnvironmentalHazardEmitterTrait hazardEmitter; public MufflerPartMachine(BlockEntityCreationInfo info, int tier) { super(info, tier); this.recoveryChance = Math.max(1, tier * 10); this.inventory = new CustomItemStackHandler((int) Math.pow(tier + 1, 2)); + this.hazardEmitter = new EnvironmentalHazardEmitterTrait(this, GTMedicalConditions.CARBON_MONOXIDE_POISONING, + 2.5f / Math.max(tier, 1)); } ////////////////////////////////////// // ******** Muffler *********// ////////////////////////////////////// - @Override public void recoverItemsTable(ItemStack... recoveryItems) { int numRolls = Math.min(recoveryItems.length, inventory.getSlots()); IntStream.range(0, numRolls).forEach(slot -> { @@ -82,6 +92,21 @@ public void clientTick() { } } + @Override + public @Nullable GTRecipe modifyRecipe(GTRecipe recipe) { + return isFrontFaceFree() ? recipe : super.modifyRecipe(recipe); + } + + @Override + public boolean afterWorking(IWorkableMultiController controller) { + hazardEmitter.emitHazard(); + var supplier = controller.self().getDefinition().getRecoveryItems(); + if (supplier != null) { + recoverItemsTable(supplier.get()); + } + return super.afterWorking(controller); + } + @Override public void addedToController(MultiblockControllerMachine controller) { super.addedToController(controller); @@ -112,6 +137,38 @@ private void tryBreakSnow() { } } + public boolean isFrontFaceFree() { + var frontPos = self().getBlockPos().relative(self().getFrontFacing()); + return self().getLevel().getBlockState(frontPos).isAir() || + GTCapabilityHelper.getHazardContainer(self().getLevel(), + frontPos, self().getFrontFacing().getOpposite()) != null; + } + + public void emitPollutionParticles() { + var pos = self().getBlockPos(); + var facing = self().getFrontFacing(); + + IHazardParticleContainer container = GTCapabilityHelper.getHazardContainer(self().getLevel(), + pos.relative(facing), facing.getOpposite()); + if (container != null) { + // do not emit particles if front face has a duct on it. + return; + } + + var center = pos.getCenter(); + var offset = .75f; + var xPos = (float) (center.x + facing.getStepX() * offset + (GTValues.RNG.nextFloat() - .5f) * .35f); + var yPos = (float) (center.y + facing.getStepY() * offset + (GTValues.RNG.nextFloat() - .5f) * .35f); + var zPos = (float) (center.z + facing.getStepZ() * offset + (GTValues.RNG.nextFloat() - .5f) * .35f); + + var ySpd = facing.getStepY() + (GTValues.RNG.nextFloat() - .15f) * .5f; + var xSpd = facing.getStepX() + (GTValues.RNG.nextFloat() - .5f) * .5f; + var zSpd = facing.getStepZ() + (GTValues.RNG.nextFloat() - .5f) * .5f; + + self().getLevel().addParticle(GTParticleTypes.MUFFLER_PARTICLE.get(), + xPos, yPos, zPos, xSpd, ySpd, zSpd); + } + ////////////////////////////////////// // ********** GUI ***********// ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java index 69e17bf6007..0c525dd8c36 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveWorkableMachine.java @@ -4,21 +4,23 @@ import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardEmitterTrait; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.common.data.GTMedicalConditions; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraftforge.fluids.FluidType; +import lombok.Getter; + import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class PrimitiveWorkableMachine extends WorkableMultiblockMachine - implements IEnvironmentalHazardEmitter { +public class PrimitiveWorkableMachine extends WorkableMultiblockMachine { @SaveField public final NotifiableItemStackHandler importItems; @@ -29,12 +31,17 @@ public class PrimitiveWorkableMachine extends WorkableMultiblockMachine @SaveField public final NotifiableFluidTank exportFluids; + @Getter + private final EnvironmentalHazardEmitterTrait hazardEmitter; + public PrimitiveWorkableMachine(BlockEntityCreationInfo info) { super(info); this.importItems = createImportItemHandler(); this.exportItems = createExportItemHandler(); this.importFluids = createImportFluidHandler(); this.exportFluids = createExportFluidHandler(); + this.hazardEmitter = new EnvironmentalHazardEmitterTrait(this, GTMedicalConditions.CARBON_MONOXIDE_POISONING, + 0.1f); } ////////////////////////////////////// @@ -66,14 +73,9 @@ public void onMachineDestroyed() { exportItems.dropInventoryInWorld(); } - @Override - public float getHazardStrengthPerOperation() { - return 0.1f; - } - @Override public void afterWorking() { super.afterWorking(); - spreadEnvironmentalHazard(); + hazardEmitter.emitHazard(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index 664a0cb5a73..9af41453752 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -11,9 +11,9 @@ import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.steam.SteamWorkableMachine; +import com.gregtechceu.gtceu.api.machine.trait.ExhaustVentMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; -import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.SteamMinerLogic; import com.gregtechceu.gtceu.utils.GTTransferUtils; @@ -47,13 +47,9 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault -public class SteamMinerMachine extends SteamWorkableMachine implements IControllable, IExhaustVentMachine, +public class SteamMinerMachine extends SteamWorkableMachine implements IControllable, IUIMachine, IDataInfoProvider, IMiner { - @Getter - @SaveField - @SyncToClient - private boolean needsVenting; @SaveField public final NotifiableItemStackHandler importItems; @SaveField @@ -65,6 +61,9 @@ public class SteamMinerMachine extends SteamWorkableMachine implements IControll @Nullable protected ISubscription exportItemSubs; + @Getter + private final ExhaustVentMachineTrait exhaustVentTrait; + public SteamMinerMachine(BlockEntityCreationInfo info, boolean isHighPressure, int speed, int maximumRadius, int fortune, int energyPerTick) { super(info, isHighPressure, (m) -> new SteamMinerLogic(m, fortune, speed, maximumRadius)); @@ -73,6 +72,9 @@ public SteamMinerMachine(BlockEntityCreationInfo info, boolean isHighPressure, i this.energyPerTick = energyPerTick; this.importItems = createImportItemHandler(); this.exportItems = createExportItemHandler(); + this.exhaustVentTrait = new ExhaustVentMachineTrait(this); + exhaustVentTrait.setVentingDirection(Direction.UP); + exhaustVentTrait.setVentingDamageAmount(isHighPressure() ? 12F : 6F); } @Override @@ -143,11 +145,6 @@ protected void autoOutput() { updateAutoOutputSubscription(); } - public void setNeedsVenting(boolean venting) { - this.needsVenting = venting; - syncDataHolder.markClientSyncFieldDirty("needsVenting"); - } - ////////////////////////////////////// // *********** GUI ***********// ////////////////////////////////////// @@ -198,7 +195,7 @@ else if (!this.isWorkingEnabled()) if (getRecipeLogic().isInventoryFull()) textList.add(Component.translatable("gtceu.multiblock.large_miner.invfull") .withStyle(ChatFormatting.RED)); - if (isVentingBlocked()) + if (exhaustVentTrait.isVentingBlocked()) textList.add(Component.translatable("gtceu.multiblock.large_miner.vent") .withStyle(ChatFormatting.RED)); else if (!drainInput(true)) @@ -215,7 +212,7 @@ void addDisplayText2(List textList) { @Override public boolean drainInput(boolean simulate) { long resultSteam = steamTank.getFluidInTank(0).getAmount() - energyPerTick; - if (!this.isVentingBlocked() && resultSteam >= 0L && resultSteam <= steamTank.getTankCapacity(0)) { + if (!exhaustVentTrait.isVentingBlocked() && resultSteam >= 0L && resultSteam <= steamTank.getTankCapacity(0)) { if (!simulate) steamTank.drainInternal(energyPerTick, IFluidHandler.FluidAction.EXECUTE); return true; @@ -223,21 +220,6 @@ public boolean drainInput(boolean simulate) { return false; } - @Override - public @NotNull Direction getVentingDirection() { - return Direction.UP; - } - - @Override - public void markVentingComplete() { - this.needsVenting = false; - } - - @Override - public float getVentingDamage() { - return isHighPressure() ? 12F : 6F; - } - @NotNull @Override public List getDataInfo(PortableScannerBehavior.DisplayMode mode) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/SteamMinerLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/SteamMinerLogic.java index 5e5753a1e5d..3435e999ebf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/SteamMinerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/miner/SteamMinerLogic.java @@ -1,10 +1,12 @@ package com.gregtechceu.gtceu.common.machine.trait.miner; -import com.gregtechceu.gtceu.api.machine.feature.IExhaustVentMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; +import com.gregtechceu.gtceu.common.machine.steam.SteamMinerMachine; public class SteamMinerLogic extends MinerLogic { + private final SteamMinerMachine steamMiner; + /** * Creates the logic for steam miners * @@ -15,17 +17,17 @@ public class SteamMinerLogic extends MinerLogic { */ public SteamMinerLogic(IRecipeLogicMachine metaTileEntity, int fortune, int speed, int maximumRadius) { super(metaTileEntity, fortune, speed, maximumRadius); + steamMiner = (SteamMinerMachine) metaTileEntity; } @Override protected boolean checkCanMine() { - IExhaustVentMachine machine = (IExhaustVentMachine) this.machine; - return super.checkCanMine() && machine.checkVenting(); + return super.checkCanMine() && steamMiner.getExhaustVentTrait().checkVenting(); } @Override protected void onMineOperation() { super.onMineOperation(); - ((IExhaustVentMachine) machine).setNeedsVenting(true); + steamMiner.getExhaustVentTrait().setNeedsVenting(true); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetHandler.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetHandler.java index 913860aab60..754537f5165 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetHandler.java @@ -4,7 +4,8 @@ import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardCleanerTrait; import com.gregtechceu.gtceu.common.blockentity.DuctPipeBlockEntity; import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; @@ -65,9 +66,12 @@ public float changeHazard(MedicalCondition condition, float differenceAmount) { IHazardParticleContainer handler = path.getHandler(net.getLevel()); if (handler == null && path.getTargetPipe().isConnected(path.getTargetFacing())) { if (net.getLevel().getBlockEntity(path.getTargetPipePos() - .relative(path.getTargetFacing())) instanceof IEnvironmentalHazardCleaner cleaner) { - cleaner.cleanHazard(condition, differenceAmount); - break; + .relative(path.getTargetFacing())) instanceof MetaMachine machine) { + var cleanerTrait = machine.getTraitHolder().getTrait(EnvironmentalHazardCleanerTrait.TYPE); + if (cleanerTrait != null) { + cleanerTrait.cleanHazard(condition, differenceAmount); + break; + } } var savedData = EnvironmentalHazardSavedData.getOrCreate(net.getLevel()); diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java index b0b1aed1b27..29c155831e6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.common.recipe.condition; -import com.gregtechceu.gtceu.api.machine.feature.IExhaustVentMachine; +import com.gregtechceu.gtceu.api.machine.trait.ExhaustVentMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.RecipeCondition; @@ -35,8 +35,9 @@ public Component getTooltips() { @Override public boolean testCondition(@NotNull GTRecipe recipe, @NotNull RecipeLogic recipeLogic) { - if (recipeLogic.getProgress() % 10 == 0 && recipeLogic.machine instanceof IExhaustVentMachine ventMachine) { - return !(ventMachine.isNeedsVenting() && ventMachine.isVentingBlocked()); + var ventTrait = recipeLogic.machine.self().getTraitHolder().getTrait(ExhaustVentMachineTrait.TYPE); + if (recipeLogic.getProgress() % 10 == 0 && ventTrait != null) { + return !(ventTrait.isNeedsVenting() && ventTrait.isVentingBlocked()); } return true; } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ExhaustVentBlockProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ExhaustVentBlockProvider.java index 6c9004ece1d..27742384dc9 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ExhaustVentBlockProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/ExhaustVentBlockProvider.java @@ -1,50 +1,31 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.feature.IExhaustVentMachine; +import com.gregtechceu.gtceu.api.machine.trait.ExhaustVentMachineTrait; import net.minecraft.ChatFormatting; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.Nullable; import snownee.jade.api.BlockAccessor; import snownee.jade.api.ITooltip; import snownee.jade.api.config.IPluginConfig; -public class ExhaustVentBlockProvider extends BlockInfoProvider { +public class ExhaustVentBlockProvider extends MachineTraitProvider { public ExhaustVentBlockProvider() { - super(GTCEu.id("exhaust_vent_info")); + super(GTCEu.id("exhaust_vent_info"), ExhaustVentMachineTrait.TYPE); } - @Nullable @Override - protected IExhaustVentMachine getCapability(Level level, BlockPos blockPos) { - if (MetaMachine.getMachine(level, blockPos) instanceof IExhaustVentMachine exhaustVentMachine) { - return exhaustVentMachine; - } - return null; - } - - @Override - protected boolean allowDisplaying(IExhaustVentMachine capability) { - return super.allowDisplaying(capability); - } - - @Override - protected void write(CompoundTag compoundTag, IExhaustVentMachine iExhaustVentMachine, - BlockAccessor blockAccessor) { - var direction = iExhaustVentMachine.getVentingDirection(); + protected void write(CompoundTag compoundTag, BlockAccessor blockAccessor, ExhaustVentMachineTrait trait) { + var direction = trait.getVentingDirection(); compoundTag.putString("ventDirection", direction.getName()); var level = blockAccessor.getLevel(); var pos = blockAccessor.getPosition().relative(direction); @@ -52,8 +33,8 @@ protected void write(CompoundTag compoundTag, IExhaustVentMachine iExhaustVentMa var key = BuiltInRegistries.BLOCK.getKey(level.getBlockState(pos).getBlock()); compoundTag.putString("ventBlock", key.toString()); } - compoundTag.putBoolean("ventBlocked", iExhaustVentMachine.isVentingBlocked()); - compoundTag.putBoolean("needsVenting", iExhaustVentMachine.isNeedsVenting()); + compoundTag.putBoolean("ventBlocked", trait.isVentingBlocked()); + compoundTag.putBoolean("needsVenting", trait.isNeedsVenting()); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/HazardCleanerBlockProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/HazardCleanerBlockProvider.java index d0d02160ae4..769f2d95c0b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/HazardCleanerBlockProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jade/provider/HazardCleanerBlockProvider.java @@ -1,34 +1,25 @@ package com.gregtechceu.gtceu.integration.jade.provider; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; +import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardCleanerTrait; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; -import org.jetbrains.annotations.Nullable; import snownee.jade.api.BlockAccessor; import snownee.jade.api.ITooltip; import snownee.jade.api.config.IPluginConfig; -public class HazardCleanerBlockProvider extends CapabilityBlockProvider { +public class HazardCleanerBlockProvider extends MachineTraitProvider { public HazardCleanerBlockProvider() { - super(GTCEu.id("hazard_cleaner_provider")); + super(GTCEu.id("hazard_cleaner_provider"), EnvironmentalHazardCleanerTrait.TYPE); } @Override - protected @Nullable IEnvironmentalHazardCleaner getCapability(Level level, BlockPos pos, @Nullable Direction side) { - return level.getBlockEntity(pos) instanceof IEnvironmentalHazardCleaner cleaner ? cleaner : null; - } - - @Override - protected void write(CompoundTag data, IEnvironmentalHazardCleaner capability) { + protected void write(CompoundTag data, BlockAccessor block, EnvironmentalHazardCleanerTrait capability) { data.putFloat("Cleaned", capability.getRemovedLastSecond()); } From 8cab09ff04dfe533d358bd40db0bfa507eb91c46 Mon Sep 17 00:00:00 2001 From: Phoenixvine <82596737+Phoenixvine32908@users.noreply.github.com> Date: Thu, 19 Feb 2026 11:52:39 -0500 Subject: [PATCH 02/17] Update seperatedInto() description. (#4663) --- .../Modpacks/Materials-and-Elements/Material-Properties.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/Modpacks/Materials-and-Elements/Material-Properties.md b/docs/content/Modpacks/Materials-and-Elements/Material-Properties.md index 0108ec3c6f5..793950efaf2 100644 --- a/docs/content/Modpacks/Materials-and-Elements/Material-Properties.md +++ b/docs/content/Modpacks/Materials-and-Elements/Material-Properties.md @@ -102,7 +102,7 @@ Properties can be applied to a material to decide how they behave. An example of - `.washedIn(string fluid)` - `string fluid` Is what fluid it uses for if it has the ore prop and is making crushed->refined. For example, the sodium persulfate and mercury ore washing recipes. - `.separatedInto(list material)` - - `list material` Is the list of materials that are obtained when processing purified dusts in the centrifuge. + - `list material` Is the list of materials that are obtained when processing purified dusts in the electromagnetic seperator. There is a max of two materials. - `.oreSmeltInto(string material)` - `string material` Is what is obtained through directly smelting the ore. From 4acaf3d11d6774144db11e34bb28cf3cd838d36b Mon Sep 17 00:00:00 2001 From: Bernd <133775547+bernd-sbr@users.noreply.github.com> Date: Fri, 20 Feb 2026 20:12:05 +0100 Subject: [PATCH 03/17] PipeBlock neighbor change logic fix (#4664) --- src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java index c16c3d6a2c3..3ff8b344be1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java @@ -271,6 +271,7 @@ public void neighborChanged(BlockState state, Level level, BlockPos pos, Block b pipeTile.setConnection(facing, false, false); updateActiveNodeStatus(level, pos, pipeTile); } + pipeTile.getCoverContainer().onNeighborChanged(block, fromPos, isMoving); } } From 6f0fbae42b2997769be462ef12e4d63fe75c4650 Mon Sep 17 00:00:00 2001 From: Mqrius Date: Sun, 22 Feb 2026 21:04:44 +0100 Subject: [PATCH 04/17] Make groupColor optional even if KubeJS isn't loaded (#4684) --- .../com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java index a1ca70f39fe..ef1462da6d8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java @@ -208,7 +208,7 @@ private static Codec makeCodec(boolean isKubeLoaded) { CompoundTag.CODEC.optionalFieldOf("data", new CompoundTag()).forGetter(val -> val.data), ExtraCodecs.NON_NEGATIVE_INT.fieldOf("duration").forGetter(val -> val.duration), GTRegistries.RECIPE_CATEGORIES.codec().optionalFieldOf("category", GTRecipeCategory.DEFAULT).forGetter(val -> val.recipeCategory), - Codec.INT.fieldOf("groupColor").forGetter(val -> val.groupColor)) + Codec.INT.optionalFieldOf("groupColor", -1).forGetter(val -> val.groupColor)) .apply(instance, (type, inputs, outputs, tickInputs, tickOutputs, inputChanceLogics, outputChanceLogics, tickInputChanceLogics, tickOutputChanceLogics, From e3504c5d70a15ff6e5db68f7701c86e0141ba713 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 23 Feb 2026 00:11:59 -0700 Subject: [PATCH 05/17] Fix up output item bus filter (#4686) --- .../common/machine/multiblock/part/ItemBusPartMachine.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java index 0660dbb5c56..a29b3390e6c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java @@ -32,6 +32,7 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; @@ -314,7 +315,10 @@ public Widget createUIWidget() { var group = new WidgetGroup(0, 0, 18 * rowSize + 16, 18 * colSize + 16); var container = new WidgetGroup(4, 4, 18 * rowSize + 8, 18 * colSize + 8); int index = 0; - group.addWidget(filterHandler.createFilterSlotUI(-115 + (18 * rowSize) / 2, 35 + 11 * rowSize)); + if (this.io == IO.OUT) { + group.addWidget(filterHandler.createFilterSlotUI(71 + (18 * rowSize) / 2, 35 + 9 * rowSize) + .setHoverTooltips(Component.translatable("cover.item_filter.title"))); + } for (int y = 0; y < colSize; y++) { for (int x = 0; x < rowSize; x++) { container.addWidget( From 1e749f99bea136271731194e8aad1711101dd8bc Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Mon, 23 Feb 2026 18:15:50 +1100 Subject: [PATCH 06/17] Add multiblock traits and syncable traits (#4607) --- .../MultiblockControllerMachine.java | 12 ++++ .../api/machine/trait/MachineTraitHolder.java | 67 +++++++++++++++++++ .../machine/trait/MultiblockMachineTrait.java | 14 ++++ .../gtceu/api/sync_system/SyncDataHolder.java | 24 +++++-- .../data_transformers/ValueTransformer.java | 7 +- .../data_transformers/ValueTransformers.java | 3 + .../collections/ListTransformer.java | 2 +- .../collections/MapTransformer.java | 4 +- .../collections/ObjectArrayTransformer.java | 2 +- .../collections/SetTransformer.java | 2 +- 10 files changed, 125 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/MultiblockMachineTrait.java 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 89b0be5835f..762e42a214b 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 @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; +import com.gregtechceu.gtceu.api.machine.trait.MultiblockMachineTrait; import com.gregtechceu.gtceu.api.pattern.BlockPattern; import com.gregtechceu.gtceu.api.pattern.MultiblockState; import com.gregtechceu.gtceu.api.pattern.MultiblockWorldSavedData; @@ -123,6 +124,12 @@ public void onStructureFormed() { } part.addedToController(this); } + updatePartPositions(); + + for (var trait : getTraitHolder().getAllTraits()) { + if (trait instanceof MultiblockMachineTrait multiblockMachineTrait) + multiblockMachineTrait.onStructureFormed(); + } } /** @@ -147,6 +154,11 @@ public void onStructureInvalid() { parallelHatch = null; parts.clear(); updatePartPositions(); + + for (var trait : getTraitHolder().getAllTraits()) { + if (trait instanceof MultiblockMachineTrait multiblockMachineTrait) + multiblockMachineTrait.onStructureInvalid(); + } } /** diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTraitHolder.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTraitHolder.java index 1f12ceaeec1..1e7eb18063a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTraitHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MachineTraitHolder.java @@ -1,6 +1,12 @@ package com.gregtechceu.gtceu.api.machine.trait; +import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer; +import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformers; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -10,6 +16,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; public final class MachineTraitHolder { @@ -18,10 +25,13 @@ public final class MachineTraitHolder { private final List traits; private final Map, List> traitsByType; + private final Map traitsToSave; + public MachineTraitHolder(MetaMachine machine) { this.machine = machine; this.traits = new ObjectArrayList<>(); this.traitsByType = new Object2ObjectOpenHashMap<>(); + this.traitsToSave = new Object2ObjectOpenHashMap<>(); } public @UnmodifiableView List getAllTraits() { @@ -40,6 +50,28 @@ public void attachTrait(MachineTrait trait) { traits.add(trait); } + /** + * Registers a trait to be synced/saved. + * Do not register a trait to be synced and also store that trait as a syncable machine field, otherwise the trait + * data will be duplicated. Use only one sync method. + * + * @param traitName Unique identifier for this trait. + * @param trait The trait to register + */ + public MachineTraitHolder syncTrait(String traitName, MachineTrait trait) { + if (trait.machine != machine) throw new IllegalArgumentException("Trait does not belong to this machine."); + if (traitsToSave.containsKey(traitName)) + throw new IllegalArgumentException("Attempted to register duplicate trait save key \"" + traitName + "\""); + traitsToSave.put(traitName, trait); + return this; + } + + @SuppressWarnings("unchecked") + public @Nullable T getSyncTrait(String traitName) { + MachineTrait trait = traitsToSave.get(traitName); + return trait == null ? null : (T) trait; + } + /** * Gets the first trait with the specified type. */ @@ -62,4 +94,39 @@ public Optional getTraitOptional(MachineTraitType if (traitList == null) return List.of(); return Collections.unmodifiableList(traitList); } + + private static class MachineTraitHolderTransformer implements ValueTransformer { + + @Override + public Tag serializeNBT(MachineTraitHolder value, TransformerContext context) { + CompoundTag tag = new CompoundTag(); + + value.traitsToSave.forEach((k, v) -> tag.put(k, + v.getSyncDataHolder().serializeNBT(context.isClientSync(), context.isClientFullSyncUpdate()))); + + return tag; + } + + @Override + public @Nullable MachineTraitHolder deserializeNBT(Tag tag, TransformerContext context) { + var traitHolder = Objects.requireNonNull(context.currentValue()); + var compoundTag = (CompoundTag) tag; + + for (var key : compoundTag.getAllKeys()) { + var trait = traitHolder.getSyncTrait(key); + if (trait == null) { + GTCEu.LOGGER.warn("Attempted to deserialise syncable trait '{}', but no syncable trait has that ID", + key); + continue; + } + trait.getSyncDataHolder().deserializeNBT(compoundTag.getCompound("key"), context.isClientSync()); + } + + return null; + } + } + + static { + ValueTransformers.registerTransformer(MachineTraitHolder.class, new MachineTraitHolderTransformer()); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MultiblockMachineTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MultiblockMachineTrait.java new file mode 100644 index 00000000000..4070537b988 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/MultiblockMachineTrait.java @@ -0,0 +1,14 @@ +package com.gregtechceu.gtceu.api.machine.trait; + +import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; + +public abstract class MultiblockMachineTrait extends MachineTrait { + + public MultiblockMachineTrait(MultiblockControllerMachine multiMachine) { + super(multiMachine); + } + + public void onStructureFormed() {} + + public void onStructureInvalid() {} +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/SyncDataHolder.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/SyncDataHolder.java index c16d2630b29..03f195340e3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/SyncDataHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/SyncDataHolder.java @@ -59,7 +59,7 @@ public CompoundTag serializeNBT(boolean writeClientFields, boolean fullSync) { CompoundTag tag = new CompoundTag(); for (var field : fieldsToSerialize) { if (shouldSerializeField(field, writeClientFields, fullSync)) { - Tag nbtValue = serializeField(holder, field, writeClientFields); + Tag nbtValue = serializeField(holder, field, writeClientFields, fullSync); tag.put(field.nbtSaveKey, nbtValue); } } @@ -101,7 +101,7 @@ public void deserializeNBT(CompoundTag tag, boolean readingClientFields) { @SuppressWarnings("unchecked") private static Tag serializeField(ISyncManaged holder, FieldSyncData field, - boolean writeClientFields) { + boolean writeClientFields, boolean fullSync) { Object currentValue = field.handle.get(holder); if (!field.isSyncManaged && currentValue == null) { @@ -115,7 +115,7 @@ private static Tag serializeField(ISyncManaged holder, FieldSyncData field, if (field.transformer != null) { return ((ValueTransformer) field.transformer).serializeNBT(currentValue, new ValueTransformer.TransformerContext<>(holder, field.type, currentValue, field.fieldName, - writeClientFields)); + writeClientFields, fullSync)); } else if (currentValue instanceof ISyncManaged syncObj) { return syncObj.getSyncDataHolder().serializeNBT(writeClientFields); } else { @@ -150,7 +150,7 @@ private static void deserializeField(ISyncManaged holder, FieldSyncData field, try { var current = field.handle.get(holder); Object result = transformer.deserializeNBT(savedValue, new ValueTransformer.TransformerContext<>( - holder, field.type, current, field.fieldName, readingClientFields)); + holder, field.type, current, field.fieldName, readingClientFields, false)); if (result != current) { field.handle.set(holder, result); } @@ -175,4 +175,20 @@ private static void deserializeField(ISyncManaged holder, FieldSyncData field, GTCEu.LOGGER.error(e); } } + + public static class SyncManagedTransformer implements ValueTransformer { + + @Override + public Tag serializeNBT(ISyncManaged value, TransformerContext context) { + return value.getSyncDataHolder().serializeNBT(context.isClientSync(), context.isClientFullSyncUpdate()); + } + + @Override + public @Nullable ISyncManaged deserializeNBT(Tag tag, TransformerContext context) { + ISyncManaged syncManaged = context.currentValue(); + Objects.requireNonNull(syncManaged).getSyncDataHolder().deserializeNBT((CompoundTag) tag, + context.isClientSync()); + return syncManaged; + } + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformer.java index 22a83bc1f86..95128ec835c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformer.java @@ -25,11 +25,12 @@ public interface ValueTransformer { * @param fieldName The name of the field being serialized, or a string denoting the current sync context if not * being invoked directly on a field. * @param isClientSync Whether NBT is currently being generated as part of a sync update to the client, not as NBT - * being - * written to the server save. + * being written to the server save. + * */ record TransformerContext(@NotNull ISyncManaged holder, @NotNull TypeDeclaration type, - @Nullable U currentValue, @Nullable String fieldName, boolean isClientSync) {} + @Nullable U currentValue, @Nullable String fieldName, boolean isClientSync, + boolean isClientFullSyncUpdate) {} /** * Casts a given NBT tag to a specific tag type, throwing an error if the tag cannot be casted. diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java index 5a123341f30..09d3114fa7e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/ValueTransformers.java @@ -6,6 +6,8 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.sync_system.ISyncManaged; +import com.gregtechceu.gtceu.api.sync_system.SyncDataHolder; import com.gregtechceu.gtceu.api.sync_system.TypeDeclaration; import com.gregtechceu.gtceu.api.sync_system.data_transformers.collections.ListTransformer; import com.gregtechceu.gtceu.api.sync_system.data_transformers.collections.MapTransformer; @@ -177,6 +179,7 @@ public static void registerTransformerSupplier(Class type, Supplier getInnerElemContext(@Nullable T e ValueTransformer.TransformerContext> parentContext) { return new TransformerContext<>(parentContext.holder(), parentContext.type().getGenericTypeArgs()[0], elem, parentContext.fieldName() + "[element]", - parentContext.isClientSync()); + parentContext.isClientSync(), parentContext.isClientFullSyncUpdate()); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/MapTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/MapTransformer.java index b66985a169e..56bc98b7644 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/MapTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/MapTransformer.java @@ -48,7 +48,7 @@ private ValueTransformer.TransformerContext getInnerKeyContext(@Nullable K ke ValueTransformer.TransformerContext> parentContext) { return new TransformerContext<>(parentContext.holder(), parentContext.type().getGenericTypeArgs()[0], key, parentContext.fieldName() + "[key]", - parentContext.isClientSync()); + parentContext.isClientSync(), parentContext.isClientFullSyncUpdate()); } private ValueTransformer.TransformerContext getInnerValueContext(@Nullable V value, @@ -56,7 +56,7 @@ private ValueTransformer.TransformerContext getInnerValueContext(@Nullable V return new TransformerContext<>(parentContext.holder(), parentContext.type().getGenericTypeArgs()[1], value, parentContext.fieldName() + "[value]", - parentContext.isClientSync()); + parentContext.isClientSync(), parentContext.isClientFullSyncUpdate()); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java index 1f665105fe0..85eb9fe50b6 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java @@ -23,7 +23,7 @@ private ValueTransformer.TransformerContext getInnerElemContext(@Nullable T e ValueTransformer.TransformerContext parentContext) { return new TransformerContext<>(parentContext.holder(), parentContext.type().getArrayComponentType(), elem, parentContext.fieldName() + "[element]", - parentContext.isClientSync()); + parentContext.isClientSync(), parentContext.isClientFullSyncUpdate()); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java index 94c03417653..12f80e4b9da 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java @@ -33,7 +33,7 @@ private ValueTransformer.TransformerContext getInnerElemContext(@Nullable T e ValueTransformer.TransformerContext> parentContext) { return new TransformerContext<>(parentContext.holder(), parentContext.type().getGenericTypeArgs()[0], elem, parentContext.fieldName() + "[element]", - parentContext.isClientSync()); + parentContext.isClientSync(), parentContext.isClientSync()); } @Override From 63697bf60ebcac52a8ca8dadc5da5b2f4cc29a9c Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Mon, 23 Feb 2026 18:31:06 +1100 Subject: [PATCH 07/17] Move some item classes (#4668) --- docs/content/Modpacks/Changes/v8.0.0.md | 3 ++- .../java/com/gregtechceu/gtceu/api/block/PipeBlock.java | 2 +- .../data/chemical/material/properties/HazardProperty.java | 2 +- .../gtceu/api/gui/widget/GhostCircuitSlotWidget.java | 2 +- .../gtceu/api/gui/widget/ProspectingMapWidget.java | 2 +- .../widget/directional/handlers/CoverableConfigHandler.java | 2 +- .../gregtechceu/gtceu/api/machine/SimpleTieredMachine.java | 2 +- .../machine/fancyconfigurator/CircuitFancyConfigurator.java | 2 +- .../gtceu/api/machine/feature/IDataInfoProvider.java | 2 +- .../gtceu/api/machine/steam/SteamBoilerMachine.java | 2 +- .../com/gregtechceu/gtceu/api/recipe/FacadeCoverRecipe.java | 2 +- .../gtceu/api/recipe/ingredient/IntCircuitIngredient.java | 2 +- .../gtceu/api/registry/registrate/forge/GTFluidBuilder.java | 2 +- src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java | 6 +++--- .../gtceu/client/renderer/BlockHighlightRenderer.java | 2 +- .../gtceu/client/renderer/block/LampItemRenderer.java | 2 +- .../gtceu/client/renderer/cover/FacadeCoverRenderer.java | 2 +- .../gtceu/common/blockentity/CableBlockEntity.java | 2 +- .../gtceu/common/blockentity/FluidPipeBlockEntity.java | 2 +- .../com/gregtechceu/gtceu/common/cover/FacadeCover.java | 2 +- .../java/com/gregtechceu/gtceu/common/data/GTBlocks.java | 2 ++ .../gregtechceu/gtceu/common/data/GTCreativeModeTabs.java | 2 +- .../java/com/gregtechceu/gtceu/common/data/GTItems.java | 5 +++-- .../gtceu/common/data/machines/GTMachineUtils.java | 4 ++-- .../gtceu/{api => common}/item/DrumMachineItem.java | 3 ++- .../java/com/gregtechceu/gtceu/common/item/GTBoatItem.java | 1 + .../gtceu/{api => common}/item/GTBucketItem.java | 2 +- .../gtceu/{api => common}/item/LampBlockItem.java | 2 +- .../gtceu/{api => common}/item/LaserPipeBlockItem.java | 3 ++- .../gtceu/{api => common}/item/QuantumTankMachineItem.java | 3 ++- .../gtceu/common/item/{ => behavior}/AntidoteBehavior.java | 2 +- .../common/item/{ => behavior}/ColorSprayBehaviour.java | 2 +- .../gtceu/common/item/{ => behavior}/ConsumedBehaviour.java | 2 +- .../common/item/{ => behavior}/CoverPlaceBehavior.java | 2 +- .../gtceu/common/item/{ => behavior}/DataItemBehavior.java | 2 +- .../gtceu/common/item/{ => behavior}/DynamiteBehaviour.java | 2 +- .../common/item/{ => behavior}/FacadeItemBehaviour.java | 2 +- .../common/item/{ => behavior}/FertilizerBehavior.java | 2 +- .../common/item/{ => behavior}/FluidFilterBehaviour.java | 2 +- .../item/{ => behavior}/GTBoatItemDispenseBehaviour.java | 2 +- .../common/item/{ => behavior}/IntCircuitBehaviour.java | 2 +- .../common/item/{ => behavior}/ItemFilterBehaviour.java | 2 +- .../common/item/{ => behavior}/ItemFluidContainer.java | 2 +- .../common/item/{ => behavior}/ItemMagnetBehavior.java | 2 +- .../common/item/{tool => }/behavior/LighterBehavior.java | 2 +- .../{tool => }/behavior/MachineConfigCopyBehaviour.java | 3 +-- .../gtceu/common/item/{ => behavior}/NanoSaberBehavior.java | 2 +- .../common/item/{ => behavior}/PortableScannerBehavior.java | 2 +- .../item/{ => behavior}/ProspectorScannerBehavior.java | 2 +- .../gtceu/common/item/{ => behavior}/TapeBehaviour.java | 2 +- .../gtceu/common/item/{ => behavior}/TerminalBehavior.java | 2 +- .../item/{ => behavior}/ToggleEnergyConsumerBehavior.java | 2 +- .../gtceu/common/item/{ => behavior}/TooltipBehavior.java | 2 +- .../common/item/{ => behavior}/TurbineRotorBehaviour.java | 2 +- .../gtceu/common/machine/electric/MinerMachine.java | 2 +- .../machine/multiblock/electric/CentralMonitorMachine.java | 2 +- .../machine/multiblock/electric/CleanroomMachine.java | 2 +- .../machine/multiblock/electric/LargeMinerMachine.java | 2 +- .../machine/multiblock/part/DataAccessHatchMachine.java | 2 +- .../machine/multiblock/part/FluidHatchPartMachine.java | 2 +- .../common/machine/multiblock/part/ItemBusPartMachine.java | 2 +- .../machine/multiblock/part/LaserHatchPartMachine.java | 2 +- .../machine/multiblock/part/RotorHolderPartMachine.java | 2 +- .../multiblock/primitive/CharcoalPileIgniterMachine.java | 2 +- .../gtceu/common/machine/steam/SteamMinerMachine.java | 2 +- .../common/machine/storage/LongDistanceEndpointMachine.java | 2 +- .../common/machine/trait/customlogic/ArcFurnaceLogic.java | 2 +- .../common/machine/trait/customlogic/MaceratorLogic.java | 2 +- .../gtceu/data/recipe/builder/GTRecipeBuilder.java | 2 +- .../gtceu/data/recipe/generated/PartsRecipeHandler.java | 2 +- .../gtceu/data/recipe/misc/CustomToolRecipes.java | 2 +- .../gregtechceu/gtceu/forge/ForgeCommonEventListener.java | 2 +- .../integration/ae2/machine/MEInputBusPartMachine.java | 2 +- .../integration/ae2/machine/MEInputHatchPartMachine.java | 2 +- .../integration/ae2/machine/MEPatternBufferPartMachine.java | 2 +- .../integration/ae2/machine/MEStockingBusPartMachine.java | 2 +- .../integration/ae2/machine/MEStockingHatchPartMachine.java | 2 +- .../com/gregtechceu/gtceu/integration/emi/GTEMIPlugin.java | 2 +- .../emi/circuit/GTProgrammedCircuitCategory.java | 2 +- .../com/gregtechceu/gtceu/integration/jei/GTJEIPlugin.java | 2 +- .../gtceu/integration/kjs/recipe/GTRecipeSchema.java | 2 +- .../integration/xei/widgets/GTProgrammedCircuitWidget.java | 2 +- .../java/com/gregtechceu/gtceu/gametest/util/TestUtils.java | 2 +- 83 files changed, 93 insertions(+), 86 deletions(-) rename src/main/java/com/gregtechceu/gtceu/{api => common}/item/DrumMachineItem.java (94%) rename src/main/java/com/gregtechceu/gtceu/{api => common}/item/GTBucketItem.java (99%) rename src/main/java/com/gregtechceu/gtceu/{api => common}/item/LampBlockItem.java (98%) rename src/main/java/com/gregtechceu/gtceu/{api => common}/item/LaserPipeBlockItem.java (91%) rename src/main/java/com/gregtechceu/gtceu/{api => common}/item/QuantumTankMachineItem.java (92%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/AntidoteBehavior.java (98%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/ColorSprayBehaviour.java (99%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/ConsumedBehaviour.java (96%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/CoverPlaceBehavior.java (98%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/DataItemBehavior.java (99%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/DynamiteBehaviour.java (97%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/FacadeItemBehaviour.java (98%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/FertilizerBehavior.java (98%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/FluidFilterBehaviour.java (96%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/GTBoatItemDispenseBehaviour.java (98%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/IntCircuitBehaviour.java (99%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/ItemFilterBehaviour.java (96%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/ItemFluidContainer.java (93%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/ItemMagnetBehavior.java (99%) rename src/main/java/com/gregtechceu/gtceu/common/item/{tool => }/behavior/LighterBehavior.java (99%) rename src/main/java/com/gregtechceu/gtceu/common/item/{tool => }/behavior/MachineConfigCopyBehaviour.java (99%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/NanoSaberBehavior.java (98%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/PortableScannerBehavior.java (99%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/ProspectorScannerBehavior.java (99%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/TapeBehaviour.java (90%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/TerminalBehavior.java (97%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/ToggleEnergyConsumerBehavior.java (98%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/TooltipBehavior.java (94%) rename src/main/java/com/gregtechceu/gtceu/common/item/{ => behavior}/TurbineRotorBehaviour.java (98%) diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md index 9e9aae3f31a..4f6c80298f0 100644 --- a/docs/content/Modpacks/Changes/v8.0.0.md +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -143,4 +143,5 @@ A large number of machine feature interfaces have been removed, and have had the ## Other Changes - `BlastingRecipeBuilder`, `CampfireRecipeBuilder`, `SmeltingRecipeBuilder` and `SmokingRecipeBuilder` have been merged into `SimpleCookingRecipeBuilder` - - Example usage: `SimpleCookingRecipeBuilder.campfireCooking("cooking_chicken").input(new ItemStack(Items.CHICKEN)).output(new ItemStacks(Items.COOKED_CHICKEN)).cookingTime(100).experience(100).save(provider);` \ No newline at end of file + - Example usage: `SimpleCookingRecipeBuilder.campfireCooking("cooking_chicken").input(new ItemStack(Items.CHICKEN)).output(new ItemStacks(Items.COOKED_CHICKEN)).cookingTime(100).experience(100).save(provider);` +- Item behaviors have been moved to `common/item/behavior`, and some items have been moved from `api/item` to `common/item` \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java index 3ff8b344be1..965831da9f8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java @@ -18,7 +18,7 @@ import com.gregtechceu.gtceu.client.model.pipe.PipeModel; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; -import com.gregtechceu.gtceu.common.item.CoverPlaceBehavior; +import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; import com.gregtechceu.gtceu.utils.GTMath; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java index 64ce68c8eba..6f3a184a71a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java @@ -6,10 +6,10 @@ import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; -import com.gregtechceu.gtceu.api.item.GTBucketItem; import com.gregtechceu.gtceu.api.item.TagPrefixItem; import com.gregtechceu.gtceu.api.item.armor.ArmorComponentItem; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.item.GTBucketItem; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.CustomTags; diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/GhostCircuitSlotWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/GhostCircuitSlotWidget.java index c10f85179b8..26a37530d1c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/GhostCircuitSlotWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/GhostCircuitSlotWidget.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.api.gui.widget; import com.gregtechceu.gtceu.api.gui.GuiTextures; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ProspectingMapWidget.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ProspectingMapWidget.java index 69147b9a09b..56afaf9f62b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ProspectingMapWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/ProspectingMapWidget.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.gui.misc.ProspectorMode; import com.gregtechceu.gtceu.api.gui.texture.ProspectingTexture; import com.gregtechceu.gtceu.api.item.IComponentItem; -import com.gregtechceu.gtceu.common.item.ProspectorScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.ProspectorScannerBehavior; import com.gregtechceu.gtceu.integration.map.WaypointManager; import com.gregtechceu.gtceu.integration.map.cache.client.GTClientCache; import com.gregtechceu.gtceu.integration.map.cache.server.ServerCache; diff --git a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/CoverableConfigHandler.java b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/CoverableConfigHandler.java index a6a30fd5190..d20d95c0003 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/CoverableConfigHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/gui/widget/directional/handlers/CoverableConfigHandler.java @@ -13,7 +13,7 @@ import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.component.IItemComponent; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.item.CoverPlaceBehavior; +import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index e2e3a655937..a9c1989c72f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -22,7 +22,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CircuitFancyConfigurator.java b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CircuitFancyConfigurator.java index 522673f4fc7..dec55d9951c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CircuitFancyConfigurator.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/fancyconfigurator/CircuitFancyConfigurator.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.gui.fancy.IFancyCustomMiddleClickAction; import com.gregtechceu.gtceu.api.gui.fancy.IFancyCustomMouseWheelAction; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IDataInfoProvider.java b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IDataInfoProvider.java index da3d9a5f14c..534effbce38 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IDataInfoProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/feature/IDataInfoProvider.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.machine.feature; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; 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 7182caea78a..ad9b2d613be 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 @@ -18,7 +18,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTTransferUtils; diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/FacadeCoverRecipe.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/FacadeCoverRecipe.java index 7d59cda3a76..7e26452d3e8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/FacadeCoverRecipe.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/FacadeCoverRecipe.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.FacadeItemBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.FacadeItemBehaviour; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.NonNullList; diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntCircuitIngredient.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntCircuitIngredient.java index 619ca461b7e..7d1e32d3c78 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntCircuitIngredient.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/IntCircuitIngredient.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.common.data.GTItems; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.core.mixins.forge.StrictNBTIngredientAccessor; import net.minecraft.network.FriendlyByteBuf; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/forge/GTFluidBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/forge/GTFluidBuilder.java index a10731f6de1..e546e8048a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/forge/GTFluidBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/forge/GTFluidBuilder.java @@ -4,8 +4,8 @@ import com.gregtechceu.gtceu.api.fluids.FluidState; import com.gregtechceu.gtceu.api.fluids.GTFluid; import com.gregtechceu.gtceu.api.fluids.forge.GTFluidImpl; -import com.gregtechceu.gtceu.api.item.GTBucketItem; import com.gregtechceu.gtceu.api.registry.registrate.IGTFluidBuilder; +import com.gregtechceu.gtceu.common.item.GTBucketItem; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java index c4bc0f934da..ab3e935807b 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java @@ -6,11 +6,8 @@ import com.gregtechceu.gtceu.api.data.worldgen.GTOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.bedrockfluid.BedrockFluidDefinition; import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreDefinition; -import com.gregtechceu.gtceu.api.item.DrumMachineItem; import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.IGTTool; -import com.gregtechceu.gtceu.api.item.LampBlockItem; -import com.gregtechceu.gtceu.api.item.QuantumTankMachineItem; import com.gregtechceu.gtceu.client.model.item.FacadeUnbakedModel; import com.gregtechceu.gtceu.client.model.machine.MachineModelLoader; import com.gregtechceu.gtceu.client.model.pipe.PipeModel; @@ -39,6 +36,9 @@ import com.gregtechceu.gtceu.common.data.GTParticleTypes; import com.gregtechceu.gtceu.common.data.models.GTModels; import com.gregtechceu.gtceu.common.entity.GTBoat; +import com.gregtechceu.gtceu.common.item.DrumMachineItem; +import com.gregtechceu.gtceu.common.item.LampBlockItem; +import com.gregtechceu.gtceu.common.item.QuantumTankMachineItem; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.model.builder.PipeModelBuilder; diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/BlockHighlightRenderer.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/BlockHighlightRenderer.java index f8c933d7d65..d0a7a3849ec 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/BlockHighlightRenderer.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/BlockHighlightRenderer.java @@ -12,7 +12,7 @@ import com.gregtechceu.gtceu.api.pipenet.IPipeType; import com.gregtechceu.gtceu.client.util.PoseStackExtensions; import com.gregtechceu.gtceu.client.util.RenderUtil; -import com.gregtechceu.gtceu.common.item.CoverPlaceBehavior; +import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import com.gregtechceu.gtceu.common.item.tool.rotation.CustomBlockRotations; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/block/LampItemRenderer.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/block/LampItemRenderer.java index 853f9a3e361..268af12e43c 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/block/LampItemRenderer.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/block/LampItemRenderer.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.client.renderer.block; -import com.gregtechceu.gtceu.api.item.LampBlockItem; +import com.gregtechceu.gtceu.common.item.LampBlockItem; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; diff --git a/src/main/java/com/gregtechceu/gtceu/client/renderer/cover/FacadeCoverRenderer.java b/src/main/java/com/gregtechceu/gtceu/client/renderer/cover/FacadeCoverRenderer.java index 84eca1dd9c7..ce935bc334a 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/renderer/cover/FacadeCoverRenderer.java +++ b/src/main/java/com/gregtechceu/gtceu/client/renderer/cover/FacadeCoverRenderer.java @@ -9,7 +9,7 @@ import com.gregtechceu.gtceu.client.util.GTQuadTransformers; import com.gregtechceu.gtceu.client.util.StaticFaceBakery; import com.gregtechceu.gtceu.common.cover.FacadeCover; -import com.gregtechceu.gtceu.common.item.FacadeItemBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.FacadeItemBehaviour; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.Util; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java index 8d33f3c08f4..af70f68dd41 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java @@ -14,7 +14,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.block.CableBlock; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.pipelike.cable.*; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java index f4d8c653ed4..c77d314c086 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java @@ -20,7 +20,7 @@ import com.gregtechceu.gtceu.common.cover.FluidFilterCover; import com.gregtechceu.gtceu.common.cover.PumpCover; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.pipelike.fluidpipe.FluidPipeType; import com.gregtechceu.gtceu.common.pipelike.fluidpipe.PipeTankList; import com.gregtechceu.gtceu.utils.EntityDamageUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FacadeCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FacadeCover.java index 7c4863297b0..642b8cd2419 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FacadeCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FacadeCover.java @@ -6,7 +6,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.common.item.FacadeItemBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.FacadeItemBehaviour; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java index 241aa9101ff..b2a8f0e4f87 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java @@ -19,6 +19,8 @@ import com.gregtechceu.gtceu.common.block.explosive.IndustrialTNTBlock; import com.gregtechceu.gtceu.common.block.explosive.PowderbarrelBlock; import com.gregtechceu.gtceu.common.data.models.GTModels; +import com.gregtechceu.gtceu.common.item.LampBlockItem; +import com.gregtechceu.gtceu.common.item.LaserPipeBlockItem; import com.gregtechceu.gtceu.common.pipelike.duct.DuctPipeType; import com.gregtechceu.gtceu.common.pipelike.fluidpipe.longdistance.LDFluidPipeType; import com.gregtechceu.gtceu.common.pipelike.item.longdistance.LDItemPipeType; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTCreativeModeTabs.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTCreativeModeTabs.java index a024f476db8..7bc50d31c7a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTCreativeModeTabs.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTCreativeModeTabs.java @@ -6,10 +6,10 @@ import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.item.IComponentItem; import com.gregtechceu.gtceu.api.item.IGTTool; -import com.gregtechceu.gtceu.api.item.LampBlockItem; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; +import com.gregtechceu.gtceu.common.item.LampBlockItem; import com.gregtechceu.gtceu.common.pipelike.cable.Insulation; import net.minecraft.core.NonNullList; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java index 64cac05549e..4ce5ab3e790 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java @@ -26,10 +26,11 @@ import com.gregtechceu.gtceu.common.entity.GTBoat; import com.gregtechceu.gtceu.common.item.*; import com.gregtechceu.gtceu.common.item.armor.*; +import com.gregtechceu.gtceu.common.item.behavior.*; +import com.gregtechceu.gtceu.common.item.behavior.LighterBehavior; +import com.gregtechceu.gtceu.common.item.behavior.MachineConfigCopyBehaviour; import com.gregtechceu.gtceu.common.item.modules.ImageModuleBehaviour; import com.gregtechceu.gtceu.common.item.modules.TextModuleBehaviour; -import com.gregtechceu.gtceu.common.item.tool.behavior.LighterBehavior; -import com.gregtechceu.gtceu.common.item.tool.behavior.MachineConfigCopyBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; import com.gregtechceu.gtceu.data.recipe.CustomTags; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index 57515764f77..2f881c2b87b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -16,8 +16,6 @@ import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.fluids.PropertyFluidFilter; -import com.gregtechceu.gtceu.api.item.DrumMachineItem; -import com.gregtechceu.gtceu.api.item.QuantumTankMachineItem; import com.gregtechceu.gtceu.api.machine.*; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; @@ -38,6 +36,8 @@ import com.gregtechceu.gtceu.common.block.BoilerFireboxType; import com.gregtechceu.gtceu.common.data.*; import com.gregtechceu.gtceu.common.data.models.GTMachineModels; +import com.gregtechceu.gtceu.common.item.DrumMachineItem; +import com.gregtechceu.gtceu.common.item.QuantumTankMachineItem; import com.gregtechceu.gtceu.common.machine.electric.BatteryBufferMachine; import com.gregtechceu.gtceu.common.machine.electric.ChargerMachine; import com.gregtechceu.gtceu.common.machine.electric.ConverterMachine; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/DrumMachineItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/DrumMachineItem.java similarity index 94% rename from src/main/java/com/gregtechceu/gtceu/api/item/DrumMachineItem.java rename to src/main/java/com/gregtechceu/gtceu/common/item/DrumMachineItem.java index c4dc9e6c6a5..17d5e7fd41d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/DrumMachineItem.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/DrumMachineItem.java @@ -1,9 +1,10 @@ -package com.gregtechceu.gtceu.api.item; +package com.gregtechceu.gtceu.common.item; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.FluidPipeProperties; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; +import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.misc.forge.ThermalFluidHandlerItemStack; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/GTBoatItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/GTBoatItem.java index 945cc8a0098..3b3845b9e3e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/GTBoatItem.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/GTBoatItem.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.common.entity.GTBoat; import com.gregtechceu.gtceu.common.entity.GTChestBoat; +import com.gregtechceu.gtceu.common.item.behavior.GTBoatItemDispenseBehaviour; import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/GTBucketItem.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java rename to src/main/java/com/gregtechceu/gtceu/common/item/GTBucketItem.java index 510a7348163..01d7375ab4d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/GTBucketItem.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.item; +package com.gregtechceu.gtceu.common.item; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.data.chemical.material.Material; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/LampBlockItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/LampBlockItem.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/api/item/LampBlockItem.java rename to src/main/java/com/gregtechceu/gtceu/common/item/LampBlockItem.java index edb5174a25a..c1e59d991b2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/LampBlockItem.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/LampBlockItem.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.item; +package com.gregtechceu.gtceu.common.item; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.client.renderer.block.LampItemRenderer; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/LaserPipeBlockItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/LaserPipeBlockItem.java similarity index 91% rename from src/main/java/com/gregtechceu/gtceu/api/item/LaserPipeBlockItem.java rename to src/main/java/com/gregtechceu/gtceu/common/item/LaserPipeBlockItem.java index 3f34616dc3c..9a0629b52be 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/LaserPipeBlockItem.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/LaserPipeBlockItem.java @@ -1,6 +1,7 @@ -package com.gregtechceu.gtceu.api.item; +package com.gregtechceu.gtceu.common.item; import com.gregtechceu.gtceu.api.block.PipeBlock; +import com.gregtechceu.gtceu.api.item.PipeBlockItem; import com.gregtechceu.gtceu.common.block.LaserPipeBlock; import net.minecraft.client.color.item.ItemColor; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/QuantumTankMachineItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/QuantumTankMachineItem.java similarity index 92% rename from src/main/java/com/gregtechceu/gtceu/api/item/QuantumTankMachineItem.java rename to src/main/java/com/gregtechceu/gtceu/common/item/QuantumTankMachineItem.java index 65a6b1df1dd..b5ce32473af 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/QuantumTankMachineItem.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/QuantumTankMachineItem.java @@ -1,7 +1,8 @@ -package com.gregtechceu.gtceu.api.item; +package com.gregtechceu.gtceu.common.item; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.misc.forge.QuantumFluidHandlerItemStack; import com.gregtechceu.gtceu.common.machine.storage.QuantumTankMachine; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/AntidoteBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/common/item/AntidoteBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java index fa9729751e0..3046608a508 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/AntidoteBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IMedicalConditionTracker; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ColorSprayBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/item/ColorSprayBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java index e20d2c282cb..97e3470d53b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/ColorSprayBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.blockentity.IPaintable; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ConsumedBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ConsumedBehaviour.java similarity index 96% rename from src/main/java/com/gregtechceu/gtceu/common/item/ConsumedBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/ConsumedBehaviour.java index feca36f1270..35c04941bdb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/ConsumedBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ConsumedBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/CoverPlaceBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/common/item/CoverPlaceBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java index 320bd4bc140..57aee262726 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/CoverPlaceBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.ICoverable; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/DataItemBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/DataItemBehavior.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/item/DataItemBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/DataItemBehavior.java index 047f36f7484..58a3e79039d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/DataItemBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/DataItemBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.ICoverable; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/DynamiteBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/DynamiteBehaviour.java similarity index 97% rename from src/main/java/com/gregtechceu/gtceu/common/item/DynamiteBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/DynamiteBehaviour.java index f4bcff20550..0118e81f790 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/DynamiteBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/DynamiteBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; import com.gregtechceu.gtceu.common.entity.DynamiteEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/FacadeItemBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/FacadeItemBehaviour.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/common/item/FacadeItemBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/FacadeItemBehaviour.java index c4c27d6380c..4a5a4f38df9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/FacadeItemBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/FacadeItemBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.item.component.ICustomDescriptionId; import com.gregtechceu.gtceu.api.item.component.ISubItemHandler; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/FertilizerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/FertilizerBehavior.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/common/item/FertilizerBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/FertilizerBehavior.java index 3d44f33e50e..612fc336e33 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/FertilizerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/FertilizerBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/FluidFilterBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/FluidFilterBehaviour.java similarity index 96% rename from src/main/java/com/gregtechceu/gtceu/common/item/FluidFilterBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/FluidFilterBehaviour.java index e816afb4ccf..a842b379b8c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/FluidFilterBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/FluidFilterBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.cover.filter.FluidFilter; import com.gregtechceu.gtceu.api.gui.GuiTextures; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/GTBoatItemDispenseBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/GTBoatItemDispenseBehaviour.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/common/item/GTBoatItemDispenseBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/GTBoatItemDispenseBehaviour.java index edad3734666..d0451fb09fd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/GTBoatItemDispenseBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/GTBoatItemDispenseBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.common.entity.GTBoat; import com.gregtechceu.gtceu.common.entity.GTChestBoat; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/IntCircuitBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/item/IntCircuitBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java index 5661008cfa5..6fc53c26f41 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/IntCircuitBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ItemFilterBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemFilterBehaviour.java similarity index 96% rename from src/main/java/com/gregtechceu/gtceu/common/item/ItemFilterBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemFilterBehaviour.java index aac74875106..9e1c1badd2f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/ItemFilterBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemFilterBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; import com.gregtechceu.gtceu.api.gui.GuiTextures; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ItemFluidContainer.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemFluidContainer.java similarity index 93% rename from src/main/java/com/gregtechceu/gtceu/common/item/ItemFluidContainer.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemFluidContainer.java index f75a70ca6a4..1e309e069b4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/ItemFluidContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemFluidContainer.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.item.component.IRecipeRemainder; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ItemMagnetBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/item/ItemMagnetBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java index 4002ff888c5..c0af0800eec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/ItemMagnetBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LighterBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/LighterBehavior.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LighterBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/LighterBehavior.java index 72e07cc5c39..bf60c8214ab 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LighterBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/LighterBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item.tool.behavior; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IDurabilityBar; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/MachineConfigCopyBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/MachineConfigCopyBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java index 88434f8236d..64776f5f582 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/MachineConfigCopyBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item.tool.behavior; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.item.component.IAddInformation; @@ -6,7 +6,6 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.*; import com.gregtechceu.gtceu.api.machine.trait.AutoOutputTrait; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/NanoSaberBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/NanoSaberBehavior.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/common/item/NanoSaberBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/NanoSaberBehavior.java index c2fa9cbf5ef..37ed298b630 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/NanoSaberBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/NanoSaberBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.item.component.IEnchantableItem; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java index b23654b2d24..d42796e37a9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ProspectorScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ProspectorScannerBehavior.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/item/ProspectorScannerBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/ProspectorScannerBehavior.java index f0a393bd457..33de34a5288 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/ProspectorScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ProspectorScannerBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/TapeBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TapeBehaviour.java similarity index 90% rename from src/main/java/com/gregtechceu/gtceu/common/item/TapeBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/TapeBehaviour.java index af76b0a04c7..917e77f04c8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/TapeBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TapeBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/TerminalBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TerminalBehavior.java similarity index 97% rename from src/main/java/com/gregtechceu/gtceu/common/item/TerminalBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/TerminalBehavior.java index 2402ee1113d..e761841727f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/TerminalBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TerminalBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; import com.gregtechceu.gtceu.api.machine.MetaMachine; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/ToggleEnergyConsumerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ToggleEnergyConsumerBehavior.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/common/item/ToggleEnergyConsumerBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/ToggleEnergyConsumerBehavior.java index 90d0d1ad649..3bde4751251 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/ToggleEnergyConsumerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ToggleEnergyConsumerBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/TooltipBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TooltipBehavior.java similarity index 94% rename from src/main/java/com/gregtechceu/gtceu/common/item/TooltipBehavior.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/TooltipBehavior.java index df6d1faec04..00c1b336582 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/TooltipBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TooltipBehavior.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.item.component.IAddInformation; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorBehaviour.java rename to src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java index 482519ee168..24d2a6a2e03 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.common.item; +package com.gregtechceu.gtceu.common.item.behavior; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.data.chemical.material.Material; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java index a2bb710eaf2..568026f5d3a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java @@ -18,7 +18,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.MinerLogic; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java index 84cf9d94b28..f933bdb3e2b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java @@ -23,7 +23,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMachines; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.multiblock.electric.monitor.MonitorGroup; import com.gregtechceu.gtceu.common.machine.trait.CentralMonitorLogic; import com.gregtechceu.gtceu.common.network.GTNetwork; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java index 1a15abaee0b..2b513226ba5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CleanroomMachine.java @@ -25,7 +25,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMachines; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.electric.HullMachine; import com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeCombustionEngineMachine; import com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeTurbineMachine; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java index a2f4a715e9b..48e613f5492 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java @@ -16,7 +16,7 @@ import com.gregtechceu.gtceu.api.transfer.fluid.FluidHandlerList; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.LargeMinerLogic; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java index 4009a885b10..e332a06f651 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DataAccessHatchMachine.java @@ -16,7 +16,7 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.multiblock.electric.research.DataBankMachine; import com.gregtechceu.gtceu.common.recipe.condition.ResearchCondition; import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java index e8bf27a31fb..9fd53a92fd6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java @@ -19,7 +19,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMachines; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java index a29b3390e6c..79d8b8eaee2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java @@ -20,7 +20,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMachines; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java index 27d21392633..c3bc038a5cf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/LaserHatchPartMachine.java @@ -7,7 +7,7 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredIOPartMachine; import com.gregtechceu.gtceu.api.machine.trait.NotifiableLaserContainer; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index 26201a8a62e..934172bcdce 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -19,7 +19,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTDamageTypes; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.TurbineRotorBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import com.gregtechceu.gtceu.utils.ISubscription; import com.lowdragmc.lowdraglib.gui.widget.Widget; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java index c1daf9ad56e..b7a05fa2d02 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java @@ -13,7 +13,7 @@ import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTBlocks; -import com.gregtechceu.gtceu.common.item.tool.behavior.LighterBehavior; +import com.gregtechceu.gtceu.common.item.behavior.LighterBehavior; import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.lowdragmc.lowdraglib.utils.BlockInfo; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java index 9af41453752..049a773e409 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamMinerMachine.java @@ -14,7 +14,7 @@ import com.gregtechceu.gtceu.api.machine.trait.ExhaustVentMachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.SteamMinerLogic; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java index 5ab331b46a8..abd4454b021 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/LongDistanceEndpointMachine.java @@ -9,7 +9,7 @@ import com.gregtechceu.gtceu.api.pipenet.longdistance.LongDistanceNetwork; import com.gregtechceu.gtceu.api.pipenet.longdistance.LongDistancePipeType; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; -import com.gregtechceu.gtceu.common.item.PortableScannerBehavior; +import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java index 5a9d9c32d3e..05b6059f338 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java @@ -13,7 +13,7 @@ import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.TurbineRotorBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java index e1eea214c9c..a2f219c094f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java @@ -13,7 +13,7 @@ import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.TurbineRotorBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java index eb97eff4d6d..0cc2e4328c3 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java @@ -23,7 +23,7 @@ import com.gregtechceu.gtceu.api.recipe.ingredient.nbtpredicate.NBTPredicate; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.recipe.condition.*; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java index d29bb429d81..c7305d941f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java @@ -8,7 +8,7 @@ import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeCategories; -import com.gregtechceu.gtceu.common.item.TurbineRotorBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/CustomToolRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/CustomToolRecipes.java index a5510ac10c5..e654851a7cd 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/CustomToolRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/CustomToolRecipes.java @@ -13,7 +13,7 @@ import com.gregtechceu.gtceu.api.recipe.ToolHeadReplaceRecipe; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.ItemMagnetBehavior; +import com.gregtechceu.gtceu.common.item.behavior.ItemMagnetBehavior; import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; import com.gregtechceu.gtceu.utils.ToolItemHelper; diff --git a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java index b855f3dc6dc..e08aa5b1c02 100644 --- a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java @@ -34,9 +34,9 @@ import com.gregtechceu.gtceu.common.data.machines.GTAEMachines; import com.gregtechceu.gtceu.common.fluid.potion.BottleItemFluidHandler; import com.gregtechceu.gtceu.common.fluid.potion.PotionItemFluidHandler; -import com.gregtechceu.gtceu.common.item.ToggleEnergyConsumerBehavior; import com.gregtechceu.gtceu.common.item.armor.IJetpack; import com.gregtechceu.gtceu.common.item.armor.QuarkTechSuite; +import com.gregtechceu.gtceu.common.item.behavior.ToggleEnergyConsumerBehavior; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.common.network.GTNetwork; import com.gregtechceu.gtceu.common.network.packets.SPacketSendWorldID; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java index fb72184cb79..466d1af7ba1 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputBusPartMachine.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable; import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.integration.ae2.gui.widget.AEItemConfigWidget; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemList; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemSlot; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java index 1de078d911c..02b1410a017 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEInputHatchPartMachine.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.machine.feature.IDataStickInteractable; import com.gregtechceu.gtceu.api.machine.feature.IHasCircuitSlot; import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.integration.ae2.gui.widget.AEFluidConfigWidget; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidList; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidSlot; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 47cef66a016..ccd6c096165 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -22,7 +22,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; import com.gregtechceu.gtceu.common.data.machines.GTAEMachines; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.integration.ae2.gui.widget.AETextInputButtonWidget; import com.gregtechceu.gtceu.integration.ae2.gui.widget.slot.AEPatternViewSlotWidget; import com.gregtechceu.gtceu.integration.ae2.machine.trait.InternalSlotRecipeHandler; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java index eeefbcfb52f..9079e07333b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java @@ -10,7 +10,7 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.machine.feature.multiblock.IMEStockingPart; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemList; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java index 8828557d361..0cd3764e945 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java @@ -10,7 +10,7 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.machine.feature.multiblock.IMEStockingPart; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEFluidList; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/emi/GTEMIPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/emi/GTEMIPlugin.java index 187e873feac..ad042816170 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/emi/GTEMIPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/emi/GTEMIPlugin.java @@ -10,7 +10,7 @@ import com.gregtechceu.gtceu.common.data.machines.GTMultiMachines; import com.gregtechceu.gtceu.common.fluid.potion.PotionFluid; import com.gregtechceu.gtceu.common.fluid.potion.PotionFluidHelper; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.emi.circuit.GTProgrammedCircuitCategory; import com.gregtechceu.gtceu.integration.emi.multipage.MultiblockInfoEmiCategory; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/emi/circuit/GTProgrammedCircuitCategory.java b/src/main/java/com/gregtechceu/gtceu/integration/emi/circuit/GTProgrammedCircuitCategory.java index 8a56d47c0fe..7f6704c3c0c 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/emi/circuit/GTProgrammedCircuitCategory.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/emi/circuit/GTProgrammedCircuitCategory.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.common.data.GTItems; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.integration.xei.widgets.GTProgrammedCircuitWidget; import com.lowdragmc.lowdraglib.emi.ModularEmiRecipe; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/jei/GTJEIPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/jei/GTJEIPlugin.java index 43e6a704253..ff51702ef24 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/jei/GTJEIPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/jei/GTJEIPlugin.java @@ -8,7 +8,7 @@ import com.gregtechceu.gtceu.common.data.GTRecipeTypes; import com.gregtechceu.gtceu.common.data.machines.GTMultiMachines; import com.gregtechceu.gtceu.common.fluid.potion.PotionFluid; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.jei.circuit.GTProgrammedCircuitCategory; import com.gregtechceu.gtceu.integration.jei.multipage.MultiblockInfoCategory; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java index 280c5d5aba5..7704d092f7b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java @@ -21,7 +21,7 @@ import com.gregtechceu.gtceu.api.recipe.ingredient.*; import com.gregtechceu.gtceu.api.recipe.ingredient.nbtpredicate.NBTPredicate; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.recipe.condition.*; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/xei/widgets/GTProgrammedCircuitWidget.java b/src/main/java/com/gregtechceu/gtceu/integration/xei/widgets/GTProgrammedCircuitWidget.java index 3846d3c0635..72404571157 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/xei/widgets/GTProgrammedCircuitWidget.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/xei/widgets/GTProgrammedCircuitWidget.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.gui.widget.SlotWidget; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour; +import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java index 89663238e85..6c2840a8c17 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java @@ -15,7 +15,7 @@ import com.gregtechceu.gtceu.api.placeholder.MultiLineComponent; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.common.item.CoverPlaceBehavior; +import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; From 53cf5b1d9fa85c59212b69e89e4653c64d38e882 Mon Sep 17 00:00:00 2001 From: Mqrius Date: Mon, 23 Feb 2026 08:41:31 +0100 Subject: [PATCH 08/17] Clear categoryMap on reload to reload EMI correctly (#4683) --- .../java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java | 6 ++++++ .../gregtechceu/gtceu/core/mixins/RecipeManagerMixin.java | 2 +- .../gtceu/integration/kjs/GregTechKubeJSPlugin.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java index e35c3f83416..2f5e78e6acc 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java @@ -333,6 +333,12 @@ public Set getRecipesInCategory(GTRecipeCategory category) { return db; } + @ApiStatus.Internal + public void beginStagingRecipes() { + categoryMap.clear(); + additionHandler.beginStaging(); + } + public interface ICustomRecipeLogic { /** diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/RecipeManagerMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/RecipeManagerMixin.java index 4e7f22021a1..13c17314a74 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/RecipeManagerMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/RecipeManagerMixin.java @@ -40,7 +40,7 @@ public abstract class RecipeManagerMixin { if (!(recipeType instanceof GTRecipeType gtRecipeType)) { continue; } - gtRecipeType.getAdditionHandler().beginStaging(); + gtRecipeType.beginStagingRecipes(); gtRecipeType.getProxyRecipes().forEach((type, list) -> { var recipesByID = recipes.get(type); if (recipesByID == null) { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java index 282112a3928..d829715d5de 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -515,7 +515,7 @@ public void injectRuntimeRecipes(RecipesEventJS event, RecipeManager manager, if (!(recipeType instanceof GTRecipeType gtRecipeType)) { continue; } - gtRecipeType.getAdditionHandler().beginStaging(); + gtRecipeType.beginStagingRecipes(); gtRecipeType.getProxyRecipes().forEach((type, list) -> { RecipeManagerHandler.addProxyRecipesToLookup(recipesByName, gtRecipeType, type, list); }); From 00e4156a68dc23383aa3d3d48e1f3d6d2fa2a397 Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Mon, 23 Feb 2026 19:12:36 +1100 Subject: [PATCH 09/17] move/rename some forge specific stuff (#4655) --- .../capability/{forge => }/GTCapability.java | 3 +- .../api/capability/GTCapabilityHelper.java | 1 - .../api/capability/compat/EUToFEProvider.java | 2 +- .../capability/recipe/RecipeCapability.java | 2 +- .../api/item/component/ElectricStats.java | 2 +- .../gtceu/api/machine/MetaMachine.java | 2 +- .../trait/NotifiableComputationContainer.java | 2 +- .../api/recipe/ingredient/EnergyStack.java | 2 +- ...Listener.java => ClientEventListener.java} | 6 +- .../gregtechceu/gtceu/client/ClientProxy.java | 4 +- .../CommonEventListener.java} | 55 ++++++++++++++- .../gregtechceu/gtceu/common/CommonProxy.java | 4 +- .../gtceu/common/block/CableBlock.java | 2 +- .../gtceu/common/block/DuctPipeBlock.java | 2 +- .../gtceu/common/block/LaserPipeBlock.java | 2 +- .../gtceu/common/block/OpticalPipeBlock.java | 2 +- .../common/blockentity/CableBlockEntity.java | 2 +- .../blockentity/DuctPipeBlockEntity.java | 2 +- .../blockentity/FluidPipeBlockEntity.java | 2 +- .../blockentity/ItemPipeBlockEntity.java | 2 +- .../blockentity/LaserPipeBlockEntity.java | 2 +- .../blockentity/OpticalPipeBlockEntity.java | 2 +- .../behavior/PortableScannerBehavior.java | 2 +- .../research/ResearchStationMachine.java | 2 +- .../part/OpticalDataHatchMachine.java | 2 +- .../pipelike/cable/EnergyNetWalker.java | 2 +- .../common/pipelike/duct/DuctNetWalker.java | 2 +- .../common/pipelike/laser/LaserNetWalker.java | 2 +- .../pipelike/optical/OpticalNetWalker.java | 2 +- .../pipelike/optical/OpticalRoutePath.java | 2 +- .../condition/AdjacentBlockCondition.java | 2 +- .../condition/AdjacentFluidCondition.java | 2 +- .../data/{forge => }/DataGenerators.java | 2 +- .../forge/AlloyBlastPropertyAddition.java | 67 ------------------- .../cctweaked/CCTweakedPlugin.java | 2 +- .../codec/DispatchedMapCodec.java | 2 +- .../{api => utils}/codec/GTCodecUtils.java | 2 +- 37 files changed, 88 insertions(+), 112 deletions(-) rename src/main/java/com/gregtechceu/gtceu/api/capability/{forge => }/GTCapability.java (96%) rename src/main/java/com/gregtechceu/gtceu/client/{forge/ForgeClientEventListener.java => ClientEventListener.java} (97%) rename src/main/java/com/gregtechceu/gtceu/{forge/ForgeCommonEventListener.java => common/CommonEventListener.java} (92%) rename src/main/java/com/gregtechceu/gtceu/data/{forge => }/DataGenerators.java (98%) delete mode 100644 src/main/java/com/gregtechceu/gtceu/forge/AlloyBlastPropertyAddition.java rename src/main/java/com/gregtechceu/gtceu/{api => utils}/codec/DispatchedMapCodec.java (98%) rename src/main/java/com/gregtechceu/gtceu/{api => utils}/codec/GTCodecUtils.java (98%) diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java similarity index 96% rename from src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java rename to src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java index f26b143cd3f..66a0aa5c6b3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java @@ -1,6 +1,5 @@ -package com.gregtechceu.gtceu.api.capability.forge; +package com.gregtechceu.gtceu.api.capability; -import com.gregtechceu.gtceu.api.capability.*; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import net.minecraftforge.common.capabilities.Capability; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java index 1bf8262ac7e..ddd096e5fab 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.capability; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/compat/EUToFEProvider.java b/src/main/java/com/gregtechceu/gtceu/api/capability/compat/EUToFEProvider.java index 619d7904dec..b3b025c8f1a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/compat/EUToFEProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/compat/EUToFEProvider.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.api.capability.compat; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.GTUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java index 28df149687e..6d2a54badc1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.capability.recipe; -import com.gregtechceu.gtceu.api.codec.DispatchedMapCodec; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.content.Content; @@ -9,6 +8,7 @@ import com.gregtechceu.gtceu.api.recipe.lookup.ingredient.AbstractMapIngredient; import com.gregtechceu.gtceu.api.recipe.ui.GTRecipeTypeUI; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.utils.codec.DispatchedMapCodec; import com.lowdragmc.lowdraglib.gui.widget.Widget; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java b/src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java index 0d79562c552..1ec8ee3c7ce 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java @@ -2,10 +2,10 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.item.capability.ElectricItem; import com.gregtechceu.gtceu.api.item.component.forge.IComponentCapability; import com.gregtechceu.gtceu.client.renderer.item.ToolChargeBarRenderer; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index 7609d198079..d5c772d864e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -9,7 +9,7 @@ import com.gregtechceu.gtceu.api.blockentity.IGregtechBlockEntity; import com.gregtechceu.gtceu.api.blockentity.IPaintable; import com.gregtechceu.gtceu.api.capability.*; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.RotationState; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java index 4cfb6b28756..f04b8757722 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.api.machine.trait; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IOpticalComputationHatch; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; import com.gregtechceu.gtceu.api.capability.IOpticalComputationReceiver; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/EnergyStack.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/EnergyStack.java index 1c58ff062e1..2616bb60044 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/EnergyStack.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/EnergyStack.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.api.recipe.ingredient; import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.codec.GTCodecUtils; +import com.gregtechceu.gtceu.utils.codec.GTCodecUtils; import net.minecraft.network.FriendlyByteBuf; diff --git a/src/main/java/com/gregtechceu/gtceu/client/forge/ForgeClientEventListener.java b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java similarity index 97% rename from src/main/java/com/gregtechceu/gtceu/client/forge/ForgeClientEventListener.java rename to src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java index dfccab975d2..fd7ab140609 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/forge/ForgeClientEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.client.forge; +package com.gregtechceu.gtceu.client; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; @@ -6,8 +6,6 @@ import com.gregtechceu.gtceu.api.cosmetics.CapeRegistry; import com.gregtechceu.gtceu.api.item.tool.ToolHelper; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.client.EnvironmentalHazardClientHandler; -import com.gregtechceu.gtceu.client.TooltipsHandler; import com.gregtechceu.gtceu.client.renderer.BlockHighlightRenderer; import com.gregtechceu.gtceu.client.renderer.MultiblockInWorldPreviewRenderer; import com.gregtechceu.gtceu.client.renderer.cover.FacadeCoverRenderer; @@ -52,7 +50,7 @@ @Mod.EventBusSubscriber(modid = GTCEu.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) @OnlyIn(Dist.CLIENT) -public class ForgeClientEventListener { +public class ClientEventListener { @SubscribeEvent public static void onRenderLevelStageEvent(RenderLevelStageEvent event) { diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java index ab3e935807b..9a0574d59a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java @@ -29,6 +29,7 @@ import com.gregtechceu.gtceu.client.renderer.machine.DynamicRenderManager; import com.gregtechceu.gtceu.client.renderer.machine.impl.*; import com.gregtechceu.gtceu.client.renderer.machine.impl.BoilerMultiPartRender; +import com.gregtechceu.gtceu.common.CommonEventListener; import com.gregtechceu.gtceu.common.CommonProxy; import com.gregtechceu.gtceu.common.data.GTBlockEntities; import com.gregtechceu.gtceu.common.data.GTEntityTypes; @@ -43,7 +44,6 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.model.builder.PipeModelBuilder; import com.gregtechceu.gtceu.data.pack.event.RegisterDynamicResourcesEvent; -import com.gregtechceu.gtceu.forge.ForgeCommonEventListener; import com.gregtechceu.gtceu.integration.kjs.GregTechKubeJSPlugin; import com.gregtechceu.gtceu.integration.map.ClientCacheManager; import com.gregtechceu.gtceu.integration.map.cache.client.GTClientCache; @@ -87,7 +87,7 @@ public static void init() { ClientCacheManager.registerClientCache(GTClientCache.instance, "gtceu"); Layers.registerLayer(OreRenderLayer::new, "ore_veins"); Layers.registerLayer(FluidRenderLayer::new, "bedrock_fluids"); - ForgeCommonEventListener.registerCapes(new RegisterGTCapesEvent()); + CommonEventListener.registerCapes(new RegisterGTCapesEvent()); } initializeDynamicRenders(); } diff --git a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java similarity index 92% rename from src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java rename to src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index e08aa5b1c02..2e03ffa3503 100644 --- a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -1,21 +1,29 @@ -package com.gregtechceu.gtceu.forge; +package com.gregtechceu.gtceu.common; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.BlockAttributes; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; import com.gregtechceu.gtceu.api.capability.IMedicalConditionTracker; import com.gregtechceu.gtceu.api.capability.compat.EUToFEProvider; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.cosmetics.CapeRegistry; import com.gregtechceu.gtceu.api.cosmetics.event.RegisterGTCapesEvent; import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.event.PostMaterialEvent; +import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialFlags; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.AlloyBlastProperty; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.BlastProperty; import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; +import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialStack; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; +import com.gregtechceu.gtceu.api.fluids.FluidBuilder; +import com.gregtechceu.gtceu.api.fluids.FluidState; +import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; import com.gregtechceu.gtceu.api.item.armor.ArmorComponentItem; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.MetaMachine; @@ -51,6 +59,7 @@ import com.gregtechceu.gtceu.data.loader.BedrockOreLoader; import com.gregtechceu.gtceu.data.loader.GTOreLoader; import com.gregtechceu.gtceu.data.recipe.CustomTags; +import com.gregtechceu.gtceu.data.recipe.misc.alloyblast.CustomAlloyBlastRecipeProducer; import com.gregtechceu.gtceu.integration.map.ClientCacheManager; import com.gregtechceu.gtceu.integration.map.WaypointManager; import com.gregtechceu.gtceu.integration.map.cache.server.ServerCache; @@ -105,13 +114,14 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import static com.gregtechceu.gtceu.utils.FormattingUtil.toLowerCaseUnderscore; @Mod.EventBusSubscriber(modid = GTCEu.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) -public class ForgeCommonEventListener { +public class CommonEventListener { @SubscribeEvent public static void registerItemStackCapabilities(AttachCapabilitiesEvent event) { @@ -665,4 +675,43 @@ public static void breakSpeed(PlayerEvent.BreakSpeed event) { } } } + + @SubscribeEvent + public static void addAlloyBlastProperties(PostMaterialEvent event) { + for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { + if (!material.hasFlag(MaterialFlags.DISABLE_ALLOY_PROPERTY)) { + addAlloyBlastProperty(material); + } + } + // Alloy Blast Overriding + GTMaterials.NiobiumNitride.getProperty(PropertyKey.ALLOY_BLAST) + .setRecipeProducer(new CustomAlloyBlastRecipeProducer(1, 11, -1)); + + GTMaterials.IndiumTinBariumTitaniumCuprate.getProperty(PropertyKey.ALLOY_BLAST) + .setRecipeProducer(new CustomAlloyBlastRecipeProducer(-1, -1, 16)); + } + + public static void addAlloyBlastProperty(@NotNull Material material) { + final List components = material.getMaterialComponents(); + // ignore materials which are not alloys + if (components.size() < 2) return; + + BlastProperty blastProperty = material.getProperty(PropertyKey.BLAST); + if (blastProperty == null) return; + + if (!material.hasProperty(PropertyKey.FLUID)) return; + + // if there are more than 2 fluid-only components in the material, do not generate a hot fluid + if (components.stream().filter(CommonEventListener::isMaterialStackFluidOnly).limit(3).count() > 2) { + return; + } + + material.setProperty(PropertyKey.ALLOY_BLAST, new AlloyBlastProperty(material.getBlastTemperature())); + material.getProperty(PropertyKey.FLUID).getStorage().enqueueRegistration(FluidStorageKeys.MOLTEN, + new FluidBuilder().state(FluidState.LIQUID)); + } + + private static boolean isMaterialStackFluidOnly(@NotNull MaterialStack ms) { + return !ms.material().hasProperty(PropertyKey.DUST) && ms.material().hasProperty(PropertyKey.FLUID); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 53f27507e4d..68b203df551 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.addon.AddonFinder; import com.gregtechceu.gtceu.api.addon.IGTAddon; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.data.chemical.material.event.MaterialEvent; import com.gregtechceu.gtceu.api.data.chemical.material.event.MaterialRegistryEvent; @@ -45,7 +45,6 @@ import com.gregtechceu.gtceu.data.pack.GTDynamicResourcePack; import com.gregtechceu.gtceu.data.pack.GTPackSource; import com.gregtechceu.gtceu.data.recipe.GTCraftingComponents; -import com.gregtechceu.gtceu.forge.AlloyBlastPropertyAddition; import com.gregtechceu.gtceu.integration.ae2.GTAEPlaceholders; import com.gregtechceu.gtceu.integration.cctweaked.CCTweakedPlugin; import com.gregtechceu.gtceu.integration.create.GTCreateIntegration; @@ -94,7 +93,6 @@ public CommonProxy() { // used for forge events (ClientProxy + CommonProxy) IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus(); eventBus.register(this); - eventBus.addListener(AlloyBlastPropertyAddition::addAlloyBlastProperties); // must be set here because of KubeJS compat // trying to read this before the pre-init stage GTCEuAPI.materialManager = MaterialRegistryManager.getInstance(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/CableBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/CableBlock.java index 1abacd672cb..dacfeefdb21 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/CableBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/CableBlock.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.MaterialPipeBlock; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.data.chemical.material.properties.WireProperties; diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java index 548e1c613a5..bc5fa0cc8ff 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.PipeBlock; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardCleanerTrait; import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardEmitterTrait; diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/LaserPipeBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/LaserPipeBlock.java index 311338b6a1f..34b8860d158 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/LaserPipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/LaserPipeBlock.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.block.PipeBlock; import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/OpticalPipeBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/OpticalPipeBlock.java index c710e296547..63de5f63004 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/OpticalPipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/OpticalPipeBlock.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.block.PipeBlock; import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java index af70f68dd41..4adfabd4de4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java @@ -2,9 +2,9 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.chemical.material.properties.WireProperties; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java index 8c4b4c34667..efcf4eb4d6e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.blockentity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.trait.hazard.EnvironmentalHazardCleanerTrait; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java index c77d314c086..e35d87c2c81 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java @@ -2,8 +2,8 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.ICoverable; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.chemical.material.properties.FluidPipeProperties; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java index f222c06da11..c3743878966 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.blockentity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.chemical.material.properties.ItemPipeProperties; import com.gregtechceu.gtceu.common.block.ItemPipeBlock; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java index 4e66ec19415..fa11317d696 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java @@ -2,9 +2,9 @@ import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.ILaserContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.common.pipelike.laser.*; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java index f6d28f19418..bdadc7fa05c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java @@ -2,9 +2,9 @@ import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.api.recipe.GTRecipe; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java index d42796e37a9..fa7cc09023a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.block.property.GTBlockStateProperties; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; import com.gregtechceu.gtceu.api.capability.*; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.data.worldgen.bedrockfluid.BedrockFluidVeinSavedData; import com.gregtechceu.gtceu.api.gui.misc.ProspectorMode; import com.gregtechceu.gtceu.api.item.component.IAddInformation; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java index c4e8ed6f154..019a6ade85f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.research; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; import com.gregtechceu.gtceu.api.capability.IOpticalComputationReceiver; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.CWURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java index ea68cddff72..be745807be5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IOpticalDataAccessHatch; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IWorkableMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetWalker.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetWalker.java index c4404a0f6d7..12922071459 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetWalker.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.pipelike.cable; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.chemical.material.properties.WireProperties; import com.gregtechceu.gtceu.api.pipenet.PipeNetWalker; import com.gregtechceu.gtceu.common.blockentity.CableBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetWalker.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetWalker.java index 46878c50127..62c136bfb3c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetWalker.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.pipelike.duct; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.pipenet.PipeNetWalker; import com.gregtechceu.gtceu.common.blockentity.DuctPipeBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetWalker.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetWalker.java index 1dc939e15e0..bf3bed65d68 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetWalker.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.pipelike.laser; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.ILaserContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.pipenet.PipeNetWalker; import com.gregtechceu.gtceu.common.blockentity.LaserPipeBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetWalker.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetWalker.java index 16711b1e8a3..dbf79210f4d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetWalker.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.common.pipelike.optical; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.pipenet.PipeNetWalker; import com.gregtechceu.gtceu.common.blockentity.OpticalPipeBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java index a05cc0d1718..9f9b63f5dbb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.common.pipelike.optical; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; import com.gregtechceu.gtceu.api.capability.IOpticalDataAccessHatch; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.pipenet.IRoutePath; import com.gregtechceu.gtceu.common.blockentity.OpticalPipeBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java index 14bb3a39623..af779321ea4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.common.recipe.condition; -import com.gregtechceu.gtceu.api.codec.GTCodecUtils; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.RecipeCondition; import com.gregtechceu.gtceu.api.recipe.condition.RecipeConditionType; import com.gregtechceu.gtceu.common.data.GTRecipeConditions; import com.gregtechceu.gtceu.utils.GTUtil; +import com.gregtechceu.gtceu.utils.codec.GTCodecUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderSet; diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java index 8efbde197a2..34268e3ed9b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.common.recipe.condition; -import com.gregtechceu.gtceu.api.codec.GTCodecUtils; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.RecipeCondition; import com.gregtechceu.gtceu.api.recipe.condition.RecipeConditionType; import com.gregtechceu.gtceu.common.data.GTRecipeConditions; import com.gregtechceu.gtceu.utils.GTUtil; +import com.gregtechceu.gtceu.utils.codec.GTCodecUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderSet; diff --git a/src/main/java/com/gregtechceu/gtceu/data/forge/DataGenerators.java b/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/data/forge/DataGenerators.java rename to src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java index c88ef6d0daf..7ff6a458418 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/forge/DataGenerators.java +++ b/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.data.forge; +package com.gregtechceu.gtceu.data; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.registry.registrate.SoundEntryBuilder; diff --git a/src/main/java/com/gregtechceu/gtceu/forge/AlloyBlastPropertyAddition.java b/src/main/java/com/gregtechceu/gtceu/forge/AlloyBlastPropertyAddition.java deleted file mode 100644 index 8876472dc78..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/forge/AlloyBlastPropertyAddition.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.gregtechceu.gtceu.forge; - -import com.gregtechceu.gtceu.api.GTCEuAPI; -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.chemical.material.event.PostMaterialEvent; -import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialFlags; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.AlloyBlastProperty; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.BlastProperty; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; -import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialStack; -import com.gregtechceu.gtceu.api.fluids.FluidBuilder; -import com.gregtechceu.gtceu.api.fluids.FluidState; -import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; -import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.data.recipe.misc.alloyblast.CustomAlloyBlastRecipeProducer; - -import net.minecraftforge.eventbus.api.SubscribeEvent; - -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -/** - * Listen to PostMaterialEvent instead of doing this directly because it's a lot cleaner this way. - */ -// @Mod.EventBusSubscriber(modid = GTCEu.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) -public class AlloyBlastPropertyAddition { - - @SubscribeEvent - public static void addAlloyBlastProperties(PostMaterialEvent event) { - for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { - if (!material.hasFlag(MaterialFlags.DISABLE_ALLOY_PROPERTY)) { - addAlloyBlastProperty(material); - } - } - // Alloy Blast Overriding - GTMaterials.NiobiumNitride.getProperty(PropertyKey.ALLOY_BLAST) - .setRecipeProducer(new CustomAlloyBlastRecipeProducer(1, 11, -1)); - - GTMaterials.IndiumTinBariumTitaniumCuprate.getProperty(PropertyKey.ALLOY_BLAST) - .setRecipeProducer(new CustomAlloyBlastRecipeProducer(-1, -1, 16)); - } - - public static void addAlloyBlastProperty(@NotNull Material material) { - final List components = material.getMaterialComponents(); - // ignore materials which are not alloys - if (components.size() < 2) return; - - BlastProperty blastProperty = material.getProperty(PropertyKey.BLAST); - if (blastProperty == null) return; - - if (!material.hasProperty(PropertyKey.FLUID)) return; - - // if there are more than 2 fluid-only components in the material, do not generate a hot fluid - if (components.stream().filter(AlloyBlastPropertyAddition::isMaterialStackFluidOnly).limit(3).count() > 2) { - return; - } - - material.setProperty(PropertyKey.ALLOY_BLAST, new AlloyBlastProperty(material.getBlastTemperature())); - material.getProperty(PropertyKey.FLUID).getStorage().enqueueRegistration(FluidStorageKeys.MOLTEN, - new FluidBuilder().state(FluidState.LIQUID)); - } - - private static boolean isMaterialStackFluidOnly(@NotNull MaterialStack ms) { - return !ms.material().hasProperty(PropertyKey.DUST) && ms.material().hasProperty(PropertyKey.FLUID); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java index 69329403884..2a258b53c2a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.integration.cctweaked; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.NotSupportedException; import com.gregtechceu.gtceu.api.placeholder.exceptions.PlaceholderException; diff --git a/src/main/java/com/gregtechceu/gtceu/api/codec/DispatchedMapCodec.java b/src/main/java/com/gregtechceu/gtceu/utils/codec/DispatchedMapCodec.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/api/codec/DispatchedMapCodec.java rename to src/main/java/com/gregtechceu/gtceu/utils/codec/DispatchedMapCodec.java index 7d8abeda932..cc65a071539 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/codec/DispatchedMapCodec.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/codec/DispatchedMapCodec.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.codec; +package com.gregtechceu.gtceu.utils.codec; import com.gregtechceu.gtceu.GTCEu; diff --git a/src/main/java/com/gregtechceu/gtceu/api/codec/GTCodecUtils.java b/src/main/java/com/gregtechceu/gtceu/utils/codec/GTCodecUtils.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/api/codec/GTCodecUtils.java rename to src/main/java/com/gregtechceu/gtceu/utils/codec/GTCodecUtils.java index 36577fdd3bc..b5c488489bf 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/codec/GTCodecUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/codec/GTCodecUtils.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.codec; +package com.gregtechceu.gtceu.utils.codec; import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; From 5095d454e9e23a937b6897b6dd3d3ba3c09e3c2d Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Mon, 23 Feb 2026 19:21:42 +1100 Subject: [PATCH 10/17] merge gt fluid and gt fluid impl (#4656) --- docs/content/Modpacks/Changes/v8.0.0.md | 3 +- .../gregtechceu/gtceu/api/fluids/GTFluid.java | 61 ++++++++++++- .../gtceu/api/fluids/forge/GTFluidImpl.java | 90 ------------------- .../registrate/forge/GTFluidBuilder.java | 17 ++-- 4 files changed, 67 insertions(+), 104 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/fluids/forge/GTFluidImpl.java diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md index 4f6c80298f0..fdeb7e18ec6 100644 --- a/docs/content/Modpacks/Changes/v8.0.0.md +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -144,4 +144,5 @@ A large number of machine feature interfaces have been removed, and have had the - `BlastingRecipeBuilder`, `CampfireRecipeBuilder`, `SmeltingRecipeBuilder` and `SmokingRecipeBuilder` have been merged into `SimpleCookingRecipeBuilder` - Example usage: `SimpleCookingRecipeBuilder.campfireCooking("cooking_chicken").input(new ItemStack(Items.CHICKEN)).output(new ItemStacks(Items.COOKED_CHICKEN)).cookingTime(100).experience(100).save(provider);` -- Item behaviors have been moved to `common/item/behavior`, and some items have been moved from `api/item` to `common/item` \ No newline at end of file +- `GTFluidImpl` has been merged into `GTFluid`, use `GTFluid.Flowing` and `GTFluid.Source` instead of `GTFluidImpl.Flowing` and `GTFluidImpl.Source`. +- Item behaviors have been moved to `common/item/behavior`, and some items have been moved from `api/item` to `common/item` diff --git a/src/main/java/com/gregtechceu/gtceu/api/fluids/GTFluid.java b/src/main/java/com/gregtechceu/gtceu/api/fluids/GTFluid.java index 05fbacab74c..d39b11ff44f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/fluids/GTFluid.java +++ b/src/main/java/com/gregtechceu/gtceu/api/fluids/GTFluid.java @@ -17,9 +17,12 @@ import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.material.FlowingFluid; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; +import net.minecraftforge.common.extensions.IForgeFluid; +import net.minecraftforge.fluids.FluidType; import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet; import lombok.Getter; @@ -32,7 +35,7 @@ @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public abstract class GTFluid extends FlowingFluid implements IAttributedFluid { +public abstract class GTFluid extends FlowingFluid implements IAttributedFluid, IForgeFluid { @Getter private final Collection attributes = new ObjectLinkedOpenHashSet<>(); @@ -44,10 +47,11 @@ public abstract class GTFluid extends FlowingFluid implements IAttributedFluid { private final Supplier block; @Getter private final int burnTime; + private final Supplier fluidType; - public GTFluid(@NotNull FluidState state, Supplier stillFluid, + public GTFluid(FluidState state, Supplier stillFluid, Supplier flowingFluid, Supplier block, - Supplier bucket, int burnTime) { + Supplier bucket, int burnTime, Supplier fluidType) { super(); this.state = state; this.stillFluid = stillFluid; @@ -55,10 +59,11 @@ public GTFluid(@NotNull FluidState state, Supplier stillFluid, this.block = block; this.bucketItem = bucket; this.burnTime = burnTime; + this.fluidType = fluidType; } @Override - public void addAttribute(@NotNull FluidAttribute attribute) { + public void addAttribute(FluidAttribute attribute) { attributes.add(attribute); } @@ -127,4 +132,52 @@ public boolean isSame(Fluid fluid) { boolean flowing = this.getFlowing() == fluid; return still || flowing; } + + public FluidType getFluidType() { + return fluidType.get(); + } + + public static class Source extends GTFluid { + + public Source(FluidState state, Supplier stillFluid, + Supplier flowingFluid, Supplier block, + Supplier bucket, int burnTime, Supplier fluidType) { + super(state, stillFluid, flowingFluid, block, bucket, burnTime, fluidType); + } + + @Override + public int getAmount(net.minecraft.world.level.material.FluidState state) { + return 8; + } + + @Override + public boolean isSource(net.minecraft.world.level.material.FluidState state) { + return true; + } + } + + public static class Flowing extends GTFluid { + + public Flowing(FluidState state, Supplier stillFluid, + Supplier flowingFluid, Supplier block, + Supplier bucket, int burnTime, Supplier fluidType) { + super(state, stillFluid, flowingFluid, block, bucket, burnTime, fluidType); + // registerDefaultState(getStateDefinition().any().setValue(LEVEL, 7)); + } + + protected void createFluidStateDefinition(StateDefinition.@NotNull Builder builder) { + super.createFluidStateDefinition(builder); + builder.add(LEVEL); + } + + @Override + public int getAmount(net.minecraft.world.level.material.FluidState state) { + return state.getValue(LEVEL); + } + + @Override + public boolean isSource(net.minecraft.world.level.material.FluidState state) { + return false; + } + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/fluids/forge/GTFluidImpl.java b/src/main/java/com/gregtechceu/gtceu/api/fluids/forge/GTFluidImpl.java deleted file mode 100644 index cbc6e009b09..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/fluids/forge/GTFluidImpl.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.gregtechceu.gtceu.api.fluids.forge; - -import com.gregtechceu.gtceu.api.fluids.FluidState; -import com.gregtechceu.gtceu.api.fluids.GTFluid; - -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.LiquidBlock; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Fluid; -import net.minecraftforge.common.SoundActions; -import net.minecraftforge.common.extensions.IForgeFluid; -import net.minecraftforge.fluids.FluidType; - -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; -import java.util.function.Supplier; - -import javax.annotation.ParametersAreNonnullByDefault; - -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public abstract class GTFluidImpl extends GTFluid implements IForgeFluid { - - private final Supplier fluidType; - - public GTFluidImpl(@NotNull FluidState state, Supplier stillFluid, - Supplier flowingFluid, Supplier block, - Supplier bucket, int burnTime, Supplier fluidType) { - super(state, stillFluid, flowingFluid, block, bucket, burnTime); - this.fluidType = fluidType; - } - - @Override - public FluidType getFluidType() { - return fluidType.get(); - } - - @Override - public Optional getPickupSound() { - return fluidType != null && fluidType.get() != null ? - Optional.ofNullable(fluidType.get().getSound(SoundActions.BUCKET_FILL)) : Optional.empty(); - } - - public static class Source extends GTFluidImpl { - - public Source(@NotNull FluidState state, Supplier stillFluid, - Supplier flowingFluid, Supplier block, - Supplier bucket, int burnTime, Supplier fluidType) { - super(state, stillFluid, flowingFluid, block, bucket, burnTime, fluidType); - } - - @Override - public int getAmount(net.minecraft.world.level.material.FluidState state) { - return 8; - } - - @Override - public boolean isSource(net.minecraft.world.level.material.FluidState state) { - return true; - } - } - - public static class Flowing extends GTFluidImpl { - - public Flowing(@NotNull FluidState state, Supplier stillFluid, - Supplier flowingFluid, Supplier block, - Supplier bucket, int burnTime, Supplier fluidType) { - super(state, stillFluid, flowingFluid, block, bucket, burnTime, fluidType); - // registerDefaultState(getStateDefinition().any().setValue(LEVEL, 7)); - } - - protected void createFluidStateDefinition(StateDefinition.@NotNull Builder builder) { - super.createFluidStateDefinition(builder); - builder.add(LEVEL); - } - - @Override - public int getAmount(net.minecraft.world.level.material.FluidState state) { - return state.getValue(LEVEL); - } - - @Override - public boolean isSource(net.minecraft.world.level.material.FluidState state) { - return false; - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/forge/GTFluidBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/forge/GTFluidBuilder.java index e546e8048a2..58a63e5e6ba 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/forge/GTFluidBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/forge/GTFluidBuilder.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.fluids.FluidState; import com.gregtechceu.gtceu.api.fluids.GTFluid; -import com.gregtechceu.gtceu.api.fluids.forge.GTFluidImpl; import com.gregtechceu.gtceu.api.registry.registrate.IGTFluidBuilder; import com.gregtechceu.gtceu.common.item.GTBucketItem; import com.gregtechceu.gtceu.utils.GTUtil; @@ -60,7 +59,7 @@ @Accessors(chain = true, fluent = true) @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault -public class GTFluidBuilder

extends AbstractBuilder> +public class GTFluidBuilder

extends AbstractBuilder> implements IGTFluidBuilder { @Setter @@ -150,7 +149,7 @@ public GTFluidBuilder

renderType(Supplier layer) { } @SuppressWarnings("deprecation") - protected void registerRenderType(GTFluidImpl.Flowing entry) { + protected void registerRenderType(GTFluid.Flowing entry) { DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { OneTimeEventReceiver.addModListener(getOwner(), FMLClientSetupEvent.class, $ -> { if (this.layer != null) { @@ -188,11 +187,11 @@ public BlockBuilder> block() { return block(LiquidBlock::new); } - public BlockBuilder> block(NonNullBiFunction, BlockBehaviour.Properties, ? extends B> factory) { + public BlockBuilder> block(NonNullBiFunction, BlockBehaviour.Properties, ? extends B> factory) { if (this.defaultBlock == Boolean.FALSE) { throw new IllegalStateException("Only one call to block/noBlock per builder allowed"); } - NonNullSupplier supplier = asSupplier(); + NonNullSupplier supplier = asSupplier(); return getOwner().>block(this, sourceName, p -> factory.apply(supplier, p)) .properties(p -> BlockBehaviour.Properties.copy(Blocks.WATER).noLootTable()) @@ -284,8 +283,8 @@ private FluidType.Properties makeTypeProperties() { } @Override - protected GTFluidImpl.Flowing createEntry() { - return new GTFluidImpl.Flowing(this.state, () -> this.source.get(), () -> this.get().get(), + protected GTFluid.Flowing createEntry() { + return new GTFluid.Flowing(this.state, () -> this.source.get(), () -> this.get().get(), (() -> this.block != null ? this.block.get() : null), (() -> this.bucket != null ? this.bucket.get() : null), this.burnTime, this.fluidType); } @@ -319,7 +318,7 @@ public IGTFluidBuilder onFluidRegister(Consumer fluidConsumer) { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override - public RegistryEntry register() { + public RegistryEntry register() { // Check the fluid has a type. if (this.fluidType != null) { // Register the type. @@ -331,7 +330,7 @@ public RegistryEntry register() { } if (defaultSource == Boolean.TRUE) { - source(() -> new GTFluidImpl.Source(this.state, () -> this.source.get(), () -> this.get().get(), + source(() -> new GTFluid.Source(this.state, () -> this.source.get(), () -> this.get().get(), (() -> this.block != null ? this.block.get() : null), (() -> this.bucket != null ? this.bucket.get() : null), this.burnTime, this.fluidType)); } From 9ad23f97f81ab5e10cb03bf088f5ec488119cb2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A5=93?= Date: Tue, 24 Feb 2026 03:19:35 +0800 Subject: [PATCH 11/17] 1.20 Xaero's series fix (#4685) Co-authored-by: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> --- dependencies.gradle | 1 + gradle/forge.versions.toml | 10 ++++++---- gradle/scripts/repositories.gradle | 4 ++++ .../xaerominimap/MinimapFBORendererMixin.java | 8 ++++---- .../core/mixins/xaeroworldmap/GuiMapMixin.java | 3 ++- .../minimap/fluid/FluidChunkHighlighter.java | 5 +++-- .../xaeros/minimap/ore/OreVeinElementReader.java | 9 +++++++-- .../minimap/ore/OreVeinElementRenderProvider.java | 4 +++- .../worldmap/gui/GuiTexturedButtonWithSize.java | 4 ++-- .../xaeros/worldmap/ore/OreVeinElementReader.java | 15 ++++++++++----- .../ore/OreVeinElementRenderProvider.java | 7 +++++-- 11 files changed, 47 insertions(+), 23 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 263c4110bb0..e908852c3e6 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -58,6 +58,7 @@ dependencies { // Maps modCompileOnly(forge.ftbchunks) + modCompileOnly(forge.xaeroslib) modCompileOnly(forge.xaerosminimap) modCompileOnly(forge.xaerosworldmap) modCompileOnly(forge.journeymap.api) diff --git a/gradle/forge.versions.toml b/gradle/forge.versions.toml index 1f203aa06af..51f1f825a7a 100644 --- a/gradle/forge.versions.toml +++ b/gradle/forge.versions.toml @@ -24,6 +24,9 @@ ccTweaked = "1.114.3" create = "6.0.6-150" ponder = "1.0.80" flywheel = "1.0.4" +xaerosLib = "1.1.0" +xaerosWorldMap = "1.40.11" +xaerosMinimap = "25.3.10" ## modrinth maven ## jade = "11.6.3" @@ -35,8 +38,6 @@ modernfix = "DdUByV9S" # 5.24.1+mc1.20.1 worldStripper = "4578579" javd = "4803995" trenzalore = "4848244" -xaerosWorldMap = "5658224" -xaerosMinimap = "5773012" journeyMap = "5789363" resourcefullib = "5659871" argonauts = "5263580" @@ -88,6 +89,9 @@ jade = { module = "maven.modrinth:jade", version.ref = "jade" } embeddium = { module = "maven.modrinth:embeddium", version.ref = "embeddium" } oculus = { module = "maven.modrinth:oculus", version.ref = "oculus" } modernfix = { module = "maven.modrinth:modernfix", version.ref = "modernfix" } +xaeroslib = { module = "xaero.lib:xaerolib-forge-1.20.1", version.ref = "xaerosLib" } +xaerosworldmap = { module = "xaero.map:xaeroworldmap-forge-1.20.1", version.ref = "xaerosWorldMap" } +xaerosminimap = { module = "xaero.minimap:xaerominimap-forge-1.20.1", version.ref = "xaerosMinimap" } cc-tweaked-core-api = { module = "cc.tweaked:cc-tweaked-1.20.1-core-api", version.ref = "ccTweaked" } @@ -97,8 +101,6 @@ cc-tweaked-forge-impl = { module = "cc.tweaked:cc-tweaked-1.20.1-forge", version worldstripper = { module = "curse.maven:worldStripper-250603", version.ref = "worldStripper" } javd = { module = "curse.maven:javd-370890", version.ref = "javd" } trenzalore = { module = "curse.maven:trenzalore-870210", version.ref = "trenzalore" } -xaerosworldmap = { module = "curse.maven:xaeros-world-map-317780", version.ref = "xaerosWorldMap" } -xaerosminimap = { module = "curse.maven:xaeros-minimap-263420", version.ref = "xaerosMinimap" } journeymap-forge = { module = "curse.maven:journeymap-32274", version.ref = "journeyMap" } resourcefullib = { module = "curse.maven:resourceful-lib-570073", version.ref = "resourcefullib" } argonauts = { module = "curse.maven:argonauts-845833", version.ref = "argonauts" } diff --git a/gradle/scripts/repositories.gradle b/gradle/scripts/repositories.gradle index 167432e271f..9d82496f185 100644 --- a/gradle/scripts/repositories.gradle +++ b/gradle/scripts/repositories.gradle @@ -80,4 +80,8 @@ repositories { forRepository { maven { url = "https://maven.squiddev.cc" } } filter { includeGroup("cc.tweaked") } } + exclusiveContent { // Xaero's + forRepository { maven { url = "https://chocolateminecraft.com/maven/" } } + filter { includeGroupAndSubgroups("xaero") } + } } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/xaerominimap/MinimapFBORendererMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/xaerominimap/MinimapFBORendererMixin.java index 0fdd7ce067e..2ca0c9b1d9f 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/xaerominimap/MinimapFBORendererMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/xaerominimap/MinimapFBORendererMixin.java @@ -11,14 +11,14 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import xaero.common.IXaeroMinimap; +import xaero.common.HudMod; import xaero.common.minimap.MinimapProcessor; import xaero.common.minimap.render.MinimapFBORenderer; import xaero.common.minimap.render.MinimapRenderer; import xaero.hud.minimap.Minimap; import xaero.hud.minimap.compass.render.CompassRenderer; import xaero.hud.minimap.element.render.map.MinimapElementMapRendererHandler; -import xaero.hud.minimap.waypoint.render.WaypointsGuiRenderer; +import xaero.hud.minimap.waypoint.render.WaypointMapRenderer; // TODO move to xaeros api once that exists @Mixin(value = MinimapFBORenderer.class, remap = false) @@ -30,9 +30,9 @@ public abstract class MinimapFBORendererMixin extends MinimapRenderer { @Unique private OreVeinElementRenderer gtceu$oreVeinElementRenderer; - public MinimapFBORendererMixin(IXaeroMinimap modMain, Minecraft mc, WaypointsGuiRenderer waypointsGuiRenderer, + public MinimapFBORendererMixin(HudMod modMain, Minecraft mc, WaypointMapRenderer waypointMapRenderer, Minimap minimap, CompassRenderer compassRenderer) { - super(modMain, mc, waypointsGuiRenderer, minimap, compassRenderer); + super(modMain, mc, waypointMapRenderer, minimap, compassRenderer); } @Inject(method = "loadFrameBuffer", diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/xaeroworldmap/GuiMapMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/xaeroworldmap/GuiMapMixin.java index 2d95e391d87..f8713ac854b 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/xaeroworldmap/GuiMapMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/xaeroworldmap/GuiMapMixin.java @@ -18,6 +18,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import xaero.lib.client.gui.widget.Tooltip; import xaero.map.MapProcessor; import xaero.map.gui.*; @@ -118,7 +119,7 @@ protected GuiMapMixin(Screen parent, Screen escape, MapProcessor mapProcessor, E ButtonState.toggleButton(button); init(minecraft, width, height); }, - () -> new CursorBox("gtceu.button." + button.name)); + () -> new Tooltip("gtceu.button." + button.name)); addButton(mapButton); offset++; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/fluid/FluidChunkHighlighter.java b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/fluid/FluidChunkHighlighter.java index 8f9cf1068d9..72a3a1b5655 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/fluid/FluidChunkHighlighter.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/fluid/FluidChunkHighlighter.java @@ -12,7 +12,7 @@ import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; import xaero.common.minimap.highlight.ChunkHighlighter; -import xaero.common.minimap.info.render.compile.InfoDisplayCompiler; +import xaero.hud.minimap.info.render.compile.InfoDisplayCompiler; public class FluidChunkHighlighter extends ChunkHighlighter { @@ -63,7 +63,8 @@ protected int[] getColors(ResourceKey dimension, int chunkX, int chunkZ) } @Override - public void addChunkHighlightTooltips(InfoDisplayCompiler compiler, ResourceKey dimension, int chunkX, + public void addChunkHighlightTooltips(InfoDisplayCompiler compiler, + ResourceKey dimension, int chunkX, int chunkZ, int width) {} @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/ore/OreVeinElementReader.java b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/ore/OreVeinElementReader.java index 16a3bd67ca8..f7e7a851109 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/ore/OreVeinElementReader.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/ore/OreVeinElementReader.java @@ -7,6 +7,7 @@ import xaero.hud.minimap.element.render.MinimapElementReader; import xaero.map.WorldMap; +import xaero.map.common.config.option.WorldMapProfiledConfigOptions; public class OreVeinElementReader extends MinimapElementReader { @@ -42,12 +43,16 @@ public int getInteractionBoxRight(OreVeinElement element, OreVeinElementContext @Override public int getInteractionBoxTop(OreVeinElement element, OreVeinElementContext context, float partialTicks) { - return WorldMap.settings.waypointBackgrounds ? -41 : -12; + boolean flag = WorldMap.INSTANCE.getConfigs().getClientConfigManager() + .getEffective(WorldMapProfiledConfigOptions.WAYPOINT_BACKGROUNDS); + return flag ? -41 : -12; } @Override public int getInteractionBoxBottom(OreVeinElement element, OreVeinElementContext context, float partialTicks) { - return WorldMap.settings.waypointBackgrounds ? 0 : 12; + boolean flag = WorldMap.INSTANCE.getConfigs().getClientConfigManager() + .getEffective(WorldMapProfiledConfigOptions.WAYPOINT_BACKGROUNDS); + return flag ? 0 : 12; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/ore/OreVeinElementRenderProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/ore/OreVeinElementRenderProvider.java index 647e8176a91..b147141dd97 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/ore/OreVeinElementRenderProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/minimap/ore/OreVeinElementRenderProvider.java @@ -9,6 +9,7 @@ import xaero.hud.minimap.element.render.MinimapElementRenderLocation; import xaero.hud.minimap.element.render.MinimapElementRenderProvider; import xaero.map.WorldMap; +import xaero.map.common.config.option.WorldMapProfiledConfigOptions; import java.util.Iterator; @@ -20,7 +21,8 @@ public OreVeinElementRenderProvider() {} @Override public void begin(MinimapElementRenderLocation location, OreVeinElementContext context) { - if (WorldMap.settings.waypoints) { + if (WorldMap.INSTANCE.getConfigs().getClientConfigManager().getEffective( + WorldMapProfiledConfigOptions.WAYPOINT_BACKGROUNDS)) { ResourceKey currentDim = Minecraft.getInstance().level.dimension(); this.iterator = XaerosRenderer.oreElements.row(currentDim).values().iterator(); } else { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/gui/GuiTexturedButtonWithSize.java b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/gui/GuiTexturedButtonWithSize.java index 89eccff77f5..cb3874ec127 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/gui/GuiTexturedButtonWithSize.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/gui/GuiTexturedButtonWithSize.java @@ -4,7 +4,7 @@ import net.minecraft.resources.ResourceLocation; import com.mojang.blaze3d.systems.RenderSystem; -import xaero.map.gui.CursorBox; +import xaero.lib.client.gui.widget.Tooltip; import xaero.map.gui.GuiTexturedButton; import java.util.function.Supplier; @@ -16,7 +16,7 @@ public class GuiTexturedButtonWithSize extends GuiTexturedButton { public GuiTexturedButtonWithSize(int x, int y, int w, int h, int textureX, int textureY, int textureW, int textureH, int spriteW, int spriteH, ResourceLocation texture, OnPress onPress, - Supplier tooltip) { + Supplier tooltip) { super(x, y, w, h, textureX, textureY, textureW, textureH, texture, onPress, tooltip); this.spriteW = spriteW; this.spriteH = spriteH; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/ore/OreVeinElementReader.java b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/ore/OreVeinElementReader.java index 88e3a010b71..e7db60ba262 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/ore/OreVeinElementReader.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/ore/OreVeinElementReader.java @@ -8,9 +8,10 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; +import xaero.lib.client.gui.widget.Tooltip; import xaero.map.WorldMap; +import xaero.map.common.config.option.WorldMapProfiledConfigOptions; import xaero.map.element.MapElementReader; -import xaero.map.gui.CursorBox; import xaero.map.gui.IRightClickableElement; import xaero.map.gui.dropdown.rightclick.RightClickOption; @@ -58,12 +59,16 @@ public int getInteractionBoxRight(OreVeinElement element, OreVeinElementContext @Override public int getInteractionBoxTop(OreVeinElement element, OreVeinElementContext context, float partialTicks) { - return WorldMap.settings.waypointBackgrounds ? -41 : -12; + boolean flag = WorldMap.INSTANCE.getConfigs().getClientConfigManager() + .getEffective(WorldMapProfiledConfigOptions.WAYPOINT_BACKGROUNDS); + return flag ? -41 : -12; } @Override public int getInteractionBoxBottom(OreVeinElement element, OreVeinElementContext context, float partialTicks) { - return WorldMap.settings.waypointBackgrounds ? 0 : 12; + boolean flag = WorldMap.INSTANCE.getConfigs().getClientConfigManager() + .getEffective(WorldMapProfiledConfigOptions.WAYPOINT_BACKGROUNDS); + return flag ? 0 : 12; } @Override @@ -146,10 +151,10 @@ public int getRenderBoxBottom(OreVeinElement element, OreVeinElementContext cont } @Override - public CursorBox getTooltip(OreVeinElement element, OreVeinElementContext context, boolean overMenu) { + public Tooltip getTooltip(OreVeinElement element, OreVeinElementContext context, boolean overMenu) { List components = OreRenderLayer.getTooltip(element.getName(), element.getVein()); // Xaeros requires spaces before/after newlines (see xaero.map.misc.TextSplitter) String joined = components.stream().map(Component::getString).collect(Collectors.joining(" \n ")); - return new CursorBox(joined); + return new Tooltip(joined); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/ore/OreVeinElementRenderProvider.java b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/ore/OreVeinElementRenderProvider.java index 3c88a08e864..b83b73418c3 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/ore/OreVeinElementRenderProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/map/xaeros/worldmap/ore/OreVeinElementRenderProvider.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.Level; import xaero.map.WorldMap; +import xaero.map.common.config.option.WorldMapProfiledConfigOptions; import xaero.map.element.MapElementRenderProvider; import java.util.Iterator; @@ -18,13 +19,15 @@ public class OreVeinElementRenderProvider extends MapElementRenderProvider currentDim = Minecraft.getInstance().level.dimension(); this.iterator = XaerosRenderer.oreElements.row(currentDim).values() .stream() .map(element -> new OreVeinElement(element.getVein(), element.getName())) .iterator(); - context.worldmapWaypointsScale = WorldMap.settings.worldmapWaypointsScale; + context.worldmapWaypointsScale = WorldMap.INSTANCE.getConfigs().getClientConfigManager() + .getEffective(WorldMapProfiledConfigOptions.WAYPOINT_SCALE).floatValue(); } else { this.iterator = null; } From 47847e70f0ac5284d8a71641ea6eb6c22b36feba Mon Sep 17 00:00:00 2001 From: Bumperdo09 <45916709+Bumperdo09@users.noreply.github.com> Date: Tue, 24 Feb 2026 08:24:12 -0500 Subject: [PATCH 12/17] fluid regulators now check that the correct amount of fluid was moved (#4693) --- .../com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java index 0e63eb3cd2a..98124ee6865 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java @@ -103,7 +103,7 @@ private int transferExact(IFluidHandler source, IFluidHandler destination, int p continue; int insertableAmount = destination.fill(drained.copy(), FluidAction.SIMULATE); - if (insertableAmount <= 0) + if (insertableAmount != supplyAmount) continue; drained.setAmount(insertableAmount); From e12609931074b50889ebf13c2921c06e19ce02b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A5=93?= Date: Thu, 26 Feb 2026 15:53:22 +0800 Subject: [PATCH 13/17] Add #dragon_immune tag to endstone-based ores (#4689) --- src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java b/src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java index 75ace433779..26da2a0bc53 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java +++ b/src/main/java/com/gregtechceu/gtceu/core/MixinHelpers.java @@ -177,6 +177,11 @@ public static void generateGTDynamicTags(Map new ArrayList<>()).addAll(entries); + } + if (entry.tagPrefix() == TagPrefix.frameGt) { tagMap.computeIfAbsent(CustomTags.SLOW_WALKABLE_BLOCKS.location(), path -> new ArrayList<>()) .addAll(entries); From 55bde8f3d31a78b4cfa570f5ff03875c2e4fd3dc Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Sun, 1 Mar 2026 05:52:43 +1100 Subject: [PATCH 14/17] Refactor BE interaction methods (#4702) --- docs/content/Modpacks/Changes/v8.0.0.md | 3 +- .../gtceu/api/block/MetaMachineBlock.java | 9 +- .../gtceu/api/block/PipeBlock.java | 5 +- .../api/blockentity/PipeBlockEntity.java | 74 ++++------ .../gtceu/api/capability/GTCapability.java | 2 - .../api/capability/GTCapabilityHelper.java | 5 - .../gtceu/api/capability/IToolable.java | 25 ---- .../gtceu/api/cover/CoverBehavior.java | 23 ++- .../gtceu/api/machine/MetaMachine.java | 139 ++++++++---------- .../MultiblockControllerMachine.java | 16 +- .../api/machine/steam/SteamBoilerMachine.java | 19 +-- .../machine/steam/SteamWorkableMachine.java | 14 +- .../api/machine/trait/AutoOutputTrait.java | 28 ++-- .../trait/feature/IInteractionTrait.java | 19 +-- .../gtceu/common/CommonEventListener.java | 4 +- .../common/blockentity/CableBlockEntity.java | 2 - .../blockentity/DuctPipeBlockEntity.java | 2 - .../blockentity/FluidPipeBlockEntity.java | 2 - .../blockentity/ItemPipeBlockEntity.java | 2 - .../blockentity/LaserPipeBlockEntity.java | 2 - .../gtceu/common/cover/ShutterCover.java | 17 +-- .../common/cover/detector/DetectorCover.java | 10 +- .../cover/voiding/FluidVoidingCover.java | 9 +- .../cover/voiding/ItemVoidingCover.java | 9 +- .../machine/electric/ConverterMachine.java | 10 +- .../common/machine/electric/MinerMachine.java | 13 +- .../machine/electric/TransformerMachine.java | 10 +- .../electric/WorldAcceleratorMachine.java | 8 +- .../electric/LargeMinerMachine.java | 18 +-- .../electric/MultiblockTankMachine.java | 12 +- .../multiblock/part/DiodePartMachine.java | 9 +- .../part/FluidHatchPartMachine.java | 13 +- .../multiblock/part/ItemBusPartMachine.java | 13 +- .../part/MaintenanceHatchPartMachine.java | 13 +- .../part/RotorHolderPartMachine.java | 18 +-- .../monitor/AdvancedMonitorPartMachine.java | 17 +-- .../primitive/CharcoalPileIgniterMachine.java | 23 ++- .../multiblock/primitive/CokeOvenMachine.java | 14 +- .../multiblock/primitive/package-info.java | 4 + .../steam/SteamLiquidBoilerMachine.java | 13 +- .../common/machine/storage/CrateMachine.java | 20 +-- .../machine/storage/CreativeChestMachine.java | 20 +-- .../machine/storage/CreativeTankMachine.java | 43 +++--- .../common/machine/storage/DrumMachine.java | 17 +-- .../machine/storage/QuantumChestMachine.java | 31 ++-- .../machine/storage/QuantumTankMachine.java | 16 +- .../ae2/machine/MEStockingBusPartMachine.java | 12 +- .../machine/MEStockingHatchPartMachine.java | 12 +- .../gtceu/utils/ExtendedUseOnContext.java | 37 +++++ 49 files changed, 363 insertions(+), 493 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/capability/IToolable.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/package-info.java create mode 100644 src/main/java/com/gregtechceu/gtceu/utils/ExtendedUseOnContext.java diff --git a/docs/content/Modpacks/Changes/v8.0.0.md b/docs/content/Modpacks/Changes/v8.0.0.md index fdeb7e18ec6..d439a3ab106 100644 --- a/docs/content/Modpacks/Changes/v8.0.0.md +++ b/docs/content/Modpacks/Changes/v8.0.0.md @@ -145,4 +145,5 @@ A large number of machine feature interfaces have been removed, and have had the - `BlastingRecipeBuilder`, `CampfireRecipeBuilder`, `SmeltingRecipeBuilder` and `SmokingRecipeBuilder` have been merged into `SimpleCookingRecipeBuilder` - Example usage: `SimpleCookingRecipeBuilder.campfireCooking("cooking_chicken").input(new ItemStack(Items.CHICKEN)).output(new ItemStacks(Items.COOKED_CHICKEN)).cookingTime(100).experience(100).save(provider);` - `GTFluidImpl` has been merged into `GTFluid`, use `GTFluid.Flowing` and `GTFluid.Source` instead of `GTFluidImpl.Flowing` and `GTFluidImpl.Source`. -- Item behaviors have been moved to `common/item/behavior`, and some items have been moved from `api/item` to `common/item` +- Item behaviors have been moved to `common/item/behavior`, and some items have been moved from `api/item` to `common/item`. +- Methods for processing machine interactions have changed, and all now take a single `ExtendedUseOnContext` argument. diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java index 35c816d2bc4..fc73ae26fd4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/MetaMachineBlock.java @@ -11,6 +11,7 @@ import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.MethodsReturnNonnullByDefault; @@ -273,7 +274,13 @@ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player machine.setOwnerUUID(sPlayer.getUUID()); } - InteractionResult machineInteractResult = machine.onUse(state, world, pos, player, hand, hit); + InteractionResult machineInteractResult; + if (itemStack.isEmpty()) { + machineInteractResult = machine.onUse(new ExtendedUseOnContext(player, hand, hit)); + } else { + machineInteractResult = machine.onUseWithItem(new ExtendedUseOnContext(player, hand, hit)); + } + if (machineInteractResult != InteractionResult.PASS) return machineInteractResult; if (itemStack.is(GTItems.PORTABLE_SCANNER.get())) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java index 965831da9f8..0c81186ff92 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/api/block/PipeBlock.java @@ -21,6 +21,7 @@ import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.GTUtil; @@ -352,8 +353,8 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player } Set types = ToolHelper.getToolTypes(itemStack); - if ((!types.isEmpty() && ToolHelper.canUse(itemStack)) || (types.isEmpty() && player.isShiftKeyDown())) { - var result = pipeBlockEntity.onToolClick(types, itemStack, new UseOnContext(player, hand, hit)); + if ((!types.isEmpty() && ToolHelper.canUse(itemStack))) { + var result = pipeBlockEntity.onToolClick(new ExtendedUseOnContext(player, hand, hit)); if (result.getSecond() == InteractionResult.CONSUME && player instanceof ServerPlayer serverPlayer) { ToolHelper.playToolSound(result.getFirst(), serverPlayer); diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java index b4fce4cded1..2f352bf8ddc 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/PipeBlockEntity.java @@ -2,8 +2,6 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.MaterialPipeBlock; -import com.gregtechceu.gtceu.api.capability.ICoverable; -import com.gregtechceu.gtceu.api.capability.IToolable; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; @@ -18,6 +16,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -32,13 +31,11 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import com.mojang.datafixers.util.Pair; import lombok.Getter; @@ -55,7 +52,7 @@ @MethodsReturnNonnullByDefault public abstract class PipeBlockEntity & IPipeType, NodeDataType> extends ManagedSyncBlockEntity - implements IPipeNode, IToolGridHighlight, IToolable, + implements IPipeNode, IToolGridHighlight, ICopyable { private final long offset = GTValues.RNG.nextInt(20); @@ -350,56 +347,41 @@ public ResourceTexture getPipeTexture(boolean isBlock) { return null; } - @Override - public Pair<@Nullable GTToolType, InteractionResult> onToolClick(Set toolTypes, ItemStack itemStack, - UseOnContext context) { + public Pair<@Nullable GTToolType, InteractionResult> onToolClick(ExtendedUseOnContext context) { // the side hit from the machine grid - var playerIn = context.getPlayer(); - if (playerIn == null) return Pair.of(null, InteractionResult.PASS); - - var hand = context.getHand(); - var hitResult = new BlockHitResult(context.getClickLocation(), context.getClickedFace(), - context.getClickedPos(), false); - Direction gridSide = ICoverable.determineGridSideHit(hitResult); - CoverBehavior coverBehavior = gridSide == null ? null : coverContainer.getCoverAtSide(gridSide); - if (gridSide == null) gridSide = hitResult.getDirection(); - - // Prioritize covers where they apply (Screwdriver, Soft Mallet) - if (toolTypes.isEmpty() && playerIn.isShiftKeyDown()) { - if (coverBehavior != null) { - return Pair.of(null, coverBehavior.onScrewdriverClick(playerIn, hand, hitResult)); + var player = context.getPlayer(); + var toolType = context.getToolType(); + var gridSide = context.getGridSide(); + + if (player == null) return Pair.of(null, InteractionResult.PASS); + + // Prioritize covers + var cover = getCoverContainer().getCoverAtSide(context.getClickedFace()); + if (cover != null) { + var result = cover.onToolClick(context); + if (result.getSecond() != InteractionResult.PASS) return result; + + if (toolType.contains(GTToolType.CROWBAR) && !isRemote()) { + getCoverContainer().removeCover(context.getGridSide(), player); + return Pair.of(GTToolType.CROWBAR, InteractionResult.SUCCESS); } } - if (toolTypes.contains(GTToolType.SCREWDRIVER)) { - if (coverBehavior != null) { - return Pair.of(GTToolType.SCREWDRIVER, coverBehavior.onScrewdriverClick(playerIn, hand, hitResult)); - } - } else if (toolTypes.contains(GTToolType.SOFT_MALLET)) { - if (coverBehavior != null) { - return Pair.of(GTToolType.SOFT_MALLET, coverBehavior.onSoftMalletClick(playerIn, hand, hitResult)); - } - } else if (toolTypes.contains(getPipeTuneTool())) { - if (playerIn.isShiftKeyDown() && this.canHaveBlockedFaces()) { + + if (toolType.contains(getPipeTuneTool())) { + if (player.isShiftKeyDown() && this.canHaveBlockedFaces()) { boolean isBlocked = this.isBlocked(gridSide); this.setBlocked(gridSide, !isBlocked); } else { boolean isOpen = this.isConnected(gridSide); this.setConnection(gridSide, !isOpen, false); } - return Pair.of(getPipeTuneTool(), InteractionResult.sidedSuccess(playerIn.level().isClientSide)); - } else if (toolTypes.contains(GTToolType.CROWBAR)) { - if (coverBehavior != null) { - if (!isRemote()) { - getCoverContainer().removeCover(gridSide, playerIn); - return Pair.of(GTToolType.CROWBAR, InteractionResult.sidedSuccess(playerIn.level().isClientSide)); - } - } else { - if (!frameMaterial.isNull()) { - Block.popResource(getLevel(), this.getBlockPos(), - GTMaterialBlocks.MATERIAL_BLOCKS.get(TagPrefix.frameGt, frameMaterial).asStack()); - frameMaterial = GTMaterials.NULL; - return Pair.of(GTToolType.CROWBAR, InteractionResult.sidedSuccess(playerIn.level().isClientSide)); - } + return Pair.of(getPipeTuneTool(), InteractionResult.sidedSuccess(isRemote())); + } else if (toolType.contains(GTToolType.CROWBAR)) { + if (!frameMaterial.isNull()) { + Block.popResource(context.getLevel(), this.getBlockPos(), + GTMaterialBlocks.MATERIAL_BLOCKS.get(TagPrefix.frameGt, frameMaterial).asStack()); + frameMaterial = GTMaterials.NULL; + return Pair.of(GTToolType.CROWBAR, InteractionResult.sidedSuccess(isRemote())); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java index 66a0aa5c6b3..375da974dd5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java @@ -14,7 +14,6 @@ public class GTCapability { public static final Capability CAPABILITY_ENERGY_INFO_PROVIDER = CapabilityManager .get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_COVERABLE = CapabilityManager.get(new CapabilityToken<>() {}); - public static final Capability CAPABILITY_TOOLABLE = CapabilityManager.get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_WORKABLE = CapabilityManager.get(new CapabilityToken<>() {}); public static final Capability CAPABILITY_CONTROLLABLE = CapabilityManager .get(new CapabilityToken<>() {}); @@ -40,7 +39,6 @@ public static void register(RegisterCapabilitiesEvent event) { event.register(IEnergyContainer.class); event.register(IEnergyInfoProvider.class); event.register(ICoverable.class); - event.register(IToolable.class); event.register(IWorkable.class); event.register(IControllable.class); event.register(IElectricItem.class); diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java index ddd096e5fab..3fe65bbbd54 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java @@ -53,11 +53,6 @@ public static ICoverable getCoverable(Level level, BlockPos pos, @Nullable Direc return getBlockEntityCapability(GTCapability.CAPABILITY_COVERABLE, level, pos, side); } - @Nullable - public static IToolable getToolable(Level level, BlockPos pos, @Nullable Direction side) { - return getBlockEntityCapability(GTCapability.CAPABILITY_TOOLABLE, level, pos, side); - } - @Nullable public static IWorkable getWorkable(Level level, BlockPos pos, @Nullable Direction side) { return getBlockEntityCapability(GTCapability.CAPABILITY_WORKABLE, level, pos, side); diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/IToolable.java b/src/main/java/com/gregtechceu/gtceu/api/capability/IToolable.java deleted file mode 100644 index 338ea1b2164..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/IToolable.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.gregtechceu.gtceu.api.capability; - -import com.gregtechceu.gtceu.api.item.tool.GTToolType; - -import net.minecraft.world.InteractionResult; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.context.UseOnContext; - -import com.mojang.datafixers.util.Pair; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Set; - -public interface IToolable { - - /** - * Called when a player clicks this meta tile entity with a tool - * - * @return SUCCESS / CONSUME (will damage tool) / FAIL if something happened, so tools will get damaged and - * animations will be played - */ - Pair<@Nullable GTToolType, InteractionResult> onToolClick(@NotNull Set toolTypes, ItemStack itemStack, - UseOnContext context); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java b/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java index 7da44721bec..276b38b7575 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java @@ -16,6 +16,7 @@ import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.client.renderer.cover.ICoverRenderer; import com.gregtechceu.gtceu.client.renderer.cover.IDynamicCoverRenderer; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -23,15 +24,14 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.items.IItemHandlerModifiable; +import com.mojang.datafixers.util.Pair; import lombok.Getter; import org.jetbrains.annotations.MustBeInvokedByOverriders; import org.jetbrains.annotations.Nullable; @@ -150,17 +150,28 @@ public boolean canConnectRedstone() { ////////////////////////////////////// // ******* Interaction *******// ////////////////////////////////////// - public InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { + + public final Pair<@Nullable GTToolType, InteractionResult> onToolClick(ExtendedUseOnContext context) { + var toolType = context.getToolType(); + if (toolType.contains(GTToolType.SCREWDRIVER)) { + return Pair.of(GTToolType.SCREWDRIVER, onScrewdriverClick(context)); + } else if (toolType.contains(GTToolType.SOFT_MALLET)) { + return Pair.of(GTToolType.SOFT_MALLET, onSoftMalletClick(context)); + } + return Pair.of(null, InteractionResult.PASS); + } + + public InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { if (this instanceof IUICover) { - if (playerIn instanceof ServerPlayer serverPlayer) { + if (context.getPlayer() instanceof ServerPlayer serverPlayer) { CoverUIFactory.INSTANCE.openUI(this, serverPlayer); } - return InteractionResult.sidedSuccess(playerIn.level().isClientSide); + return InteractionResult.sidedSuccess(coverHolder.isRemote()); } return InteractionResult.PASS; } - public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { + public InteractionResult onSoftMalletClick(ExtendedUseOnContext context) { return InteractionResult.PASS; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java index d5c772d864e..e33cd7fd2a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -44,6 +44,7 @@ import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; import com.gregtechceu.gtceu.common.machine.owner.MachineOwner; import com.gregtechceu.gtceu.common.machine.owner.PlayerOwner; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTUtil; import com.gregtechceu.gtceu.utils.data.TagCompatibilityFixer; @@ -67,20 +68,17 @@ 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.UseOnContext; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.BlockHitResult; 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.client.model.data.ModelData; -import net.minecraftforge.client.model.data.ModelProperty; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.util.LazyOptional; @@ -100,12 +98,9 @@ import java.util.function.Consumer; import java.util.function.Predicate; -public class MetaMachine extends ManagedSyncBlockEntity implements IGregtechBlockEntity, IToolable, IToolGridHighlight, +public class MetaMachine extends ManagedSyncBlockEntity implements IGregtechBlockEntity, IToolGridHighlight, IFancyTooltip, IPaintable, IMachineFeature, ICopyable { - public static final ModelProperty MODEL_DATA_LEVEL = new ModelProperty<>(); - public static final ModelProperty MODEL_DATA_POS = new ModelProperty<>(); - @Getter protected final SyncDataHolder syncDataHolder = new SyncDataHolder(this); @@ -282,55 +277,44 @@ private void executeTick() { * @return SUCCESS / CONSUME (will damage tool) / FAIL if something happened, so tools will get damaged and * animations will be played */ - @Override - public final Pair<@Nullable GTToolType, InteractionResult> onToolClick(Set toolType, - ItemStack itemStack, - UseOnContext context) { + public final Pair<@Nullable GTToolType, InteractionResult> onToolClick(ExtendedUseOnContext context) { // the side hit from the machine grid - var playerIn = context.getPlayer(); - if (playerIn == null) return Pair.of(null, InteractionResult.PASS); + var player = context.getPlayer(); + if (player == null) return Pair.of(null, InteractionResult.PASS); - var hand = context.getHand(); - var hitResult = new BlockHitResult(context.getClickLocation(), context.getClickedFace(), - context.getClickedPos(), false); - Direction gridSide = ICoverable.determineGridSideHit(hitResult); - CoverBehavior coverBehavior = gridSide == null ? null : coverContainer.getCoverAtSide(gridSide); - if (gridSide == null) gridSide = hitResult.getDirection(); + var toolType = context.getToolType(); Pair<@Nullable GTToolType, InteractionResult> result = null; - // Prioritize covers where they apply (Screwdriver, Soft Mallet) - if (toolType.isEmpty() && playerIn.isShiftKeyDown()) { - if (coverBehavior != null) { - result = Pair.of(null, coverBehavior.onScrewdriverClick(playerIn, hand, hitResult)); + // Prioritize covers + var cover = getCoverContainer().getCoverAtSide(context.getClickedFace()); + if (cover != null) { + result = cover.onToolClick(context); + if (result.getSecond() != InteractionResult.PASS) return result; + + if (toolType.contains(GTToolType.CROWBAR) && !isRemote()) { + getCoverContainer().removeCover(context.getGridSide(), player); + return Pair.of(GTToolType.CROWBAR, InteractionResult.SUCCESS); } - } else if (toolType.contains(GTToolType.SCREWDRIVER)) { - if (coverBehavior != null) { - result = Pair.of(GTToolType.SCREWDRIVER, coverBehavior.onScrewdriverClick(playerIn, hand, hitResult)); - } else result = Pair.of(GTToolType.SCREWDRIVER, onScrewdriverClick(playerIn, hand, gridSide, hitResult)); + } + + if (toolType.contains(GTToolType.SCREWDRIVER)) { + result = Pair.of(GTToolType.SCREWDRIVER, onScrewdriverClick(context)); } else if (toolType.contains(GTToolType.SOFT_MALLET)) { - if (coverBehavior != null) { - result = Pair.of(GTToolType.SOFT_MALLET, coverBehavior.onSoftMalletClick(playerIn, hand, hitResult)); - } else result = Pair.of(GTToolType.SOFT_MALLET, onSoftMalletClick(playerIn, hand, gridSide, hitResult)); + result = Pair.of(GTToolType.SOFT_MALLET, onSoftMalletClick(context)); } else if (toolType.contains(GTToolType.WRENCH)) { - result = Pair.of(GTToolType.WRENCH, onWrenchClick(playerIn, hand, gridSide, hitResult)); + result = Pair.of(GTToolType.WRENCH, onWrenchClick(context)); } else if (toolType.contains(GTToolType.CROWBAR)) { - if (coverBehavior != null) { - if (!isRemote()) { - getCoverContainer().removeCover(gridSide, playerIn); - } - - } - result = Pair.of(GTToolType.CROWBAR, onCrowbarClick(playerIn, hand, gridSide, hitResult)); + result = Pair.of(GTToolType.CROWBAR, onCrowbarClick(context)); } else if (toolType.contains(GTToolType.HARD_HAMMER)) { - result = Pair.of(GTToolType.HARD_HAMMER, onHardHammerClick(playerIn, hand, gridSide, hitResult)); + result = Pair.of(GTToolType.HARD_HAMMER, onHardHammerClick(context)); } if (result != null && result.getSecond() != InteractionResult.PASS) return result; for (var trait : getTraitHolder().getAllTraits()) { if (trait instanceof IInteractionTrait interactionTrait) { - var r = interactionTrait.onToolClick(toolType, playerIn, hand, gridSide, hitResult); + var r = interactionTrait.onToolClick(context); if (r.getSecond() != InteractionResult.PASS) return r; } } @@ -338,32 +322,31 @@ private void executeTick() { return result != null ? result : Pair.of(null, InteractionResult.PASS); } - protected InteractionResult onHardHammerClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onHardHammerClick(ExtendedUseOnContext context) { if (this instanceof IMufflableMachine mufflableMachine) { if (!isRemote()) { mufflableMachine.setMuffled(!mufflableMachine.isMuffled()); - playerIn.sendSystemMessage(Component.translatable(mufflableMachine.isMuffled() ? + context.getPlayer().sendSystemMessage(Component.translatable(mufflableMachine.isMuffled() ? "gtceu.machine.muffle.on" : "gtceu.machine.muffle.off")); } - return InteractionResult.sidedSuccess(playerIn.level().isClientSide); + return InteractionResult.sidedSuccess(isRemote()); } return InteractionResult.PASS; } - protected InteractionResult onCrowbarClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onCrowbarClick(ExtendedUseOnContext context) { return InteractionResult.PASS; } - protected InteractionResult onWrenchClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onWrenchClick(ExtendedUseOnContext context) { + var player = context.getPlayer(); + var gridSide = context.getGridSide(); if (gridSide == getFrontFacing() && allowExtendedFacing()) { - setUpwardsFacing(playerIn.isShiftKeyDown() ? getUpwardsFacing().getCounterClockWise() : + setUpwardsFacing(player.isShiftKeyDown() ? getUpwardsFacing().getCounterClockWise() : getUpwardsFacing().getClockWise()); return InteractionResult.sidedSuccess(isRemote()); } - if (playerIn.isShiftKeyDown()) { + if (player.isShiftKeyDown()) { if (gridSide == getFrontFacing() || !isFacingValid(gridSide)) { return InteractionResult.FAIL; } @@ -373,34 +356,31 @@ protected InteractionResult onWrenchClick(Player playerIn, InteractionHand hand, return InteractionResult.PASS; } - protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { - var controllable = GTCapabilityHelper.getControllable(getLevel(), getBlockPos(), gridSide); + protected InteractionResult onSoftMalletClick(ExtendedUseOnContext context) { + var controllable = GTCapabilityHelper.getControllable(getLevel(), getBlockPos(), context.getGridSide()); if (controllable == null) return InteractionResult.PASS; if (!isRemote()) { controllable.setWorkingEnabled(!controllable.isWorkingEnabled()); - playerIn.sendSystemMessage(Component.translatable(controllable.isWorkingEnabled() ? + context.getPlayer().sendSystemMessage(Component.translatable(controllable.isWorkingEnabled() ? "behaviour.soft_hammer.enabled" : "behaviour.soft_hammer.disabled_cycle")); } - return InteractionResult.sidedSuccess(playerIn.level().isClientSide); + return InteractionResult.sidedSuccess(getLevel().isClientSide); } - protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { if (isRemote()) return InteractionResult.SUCCESS; return InteractionResult.PASS; } /** - * Called when a machine is right clicked. + * Called when a machine is right clicked with an item. */ - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - ItemStack itemStack = player.getItemInHand(hand); - - Set types = ToolHelper.getToolTypes(itemStack); + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { + var types = context.getToolType(); + var itemStack = context.getItemInHand(); + var player = context.getPlayer(); if (!types.isEmpty() && ToolHelper.canUse(itemStack) || types.isEmpty() && player.isShiftKeyDown()) { - var result = onToolClick(types, itemStack, new UseOnContext(player, hand, hit)); + var result = onToolClick(context); if (result.getSecond() == InteractionResult.CONSUME && player instanceof ServerPlayer serverPlayer) { ToolHelper.playToolSound(result.getFirst(), serverPlayer); @@ -410,10 +390,21 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play } if (result.getSecond() != InteractionResult.PASS) return result.getSecond(); } + return InteractionResult.PASS; + } + + /** + * Called when a machine is right clicked without an item. + */ + public InteractionResult onUse(ExtendedUseOnContext context) { + if (context.getPlayer().isShiftKeyDown()) { + var cover = coverContainer.getCoverAtSide(context.getClickedFace()); + if (cover != null) cover.onScrewdriverClick(context); + } for (var trait : getTraitHolder().getAllTraits()) { if (trait instanceof IInteractionTrait interactionTrait) { - InteractionResult result = interactionTrait.onUse(state, world, pos, player, hand, hit); + InteractionResult result = interactionTrait.onUse(context); if (result != InteractionResult.PASS) return result; } } @@ -426,8 +417,7 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play * * @return true to cancel the click event, false to continue processing */ - public boolean onLeftClick(Player player, Level world, InteractionHand hand, BlockPos pos, - @Nullable Direction face) { + public boolean onLeftClick(Player player, InteractionHand hand, @Nullable Direction face) { return false; } @@ -630,7 +620,7 @@ public void setFrontFacing(Direction facing) { } @Override - public @NotNull ModelData getModelData() { + public ModelData getModelData() { ModelData.Builder data = super.getModelData().derive(); updateModelData(data); return data.build(); @@ -641,7 +631,7 @@ public Direction getUpwardsFacing() { Direction.NORTH; } - public void setUpwardsFacing(@NotNull Direction upwardsFacing) { + public void setUpwardsFacing(Direction upwardsFacing) { if (!getDefinition().isAllowExtendedFacing()) { return; } @@ -681,7 +671,6 @@ public void onNeighborChanged(Block block, BlockPos fromPos, boolean isMoving) { public void animateTick(RandomSource random) {} - @NotNull public BlockState getBlockAppearance(BlockState state, BlockAndTintGetter level, BlockPos pos, Direction side, BlockState sourceState, BlockPos sourcePos) { var appearance = getCoverContainer().getBlockAppearance(state, level, pos, side, sourceState, sourcePos); @@ -737,7 +726,7 @@ public int getAnalogOutputSignal() { return 0; } - public boolean canConnectRedstone(@NotNull Direction side) { + public boolean canConnectRedstone(Direction side) { // For some reason, Minecraft requests the output signal from the opposite side... CoverBehavior cover = getCoverContainer().getCoverAtSide(side); if (cover == null) return false; @@ -898,7 +887,7 @@ public IFluidHandlerModifiable getFluidHandlerCap(@Nullable Direction side, bool } @Override - public @NotNull LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + public LazyOptional getCapability(Capability cap, @Nullable Direction side) { var result = getCapability(this, cap, side); return result.isPresent() ? result : super.getCapability(cap, side); } @@ -915,12 +904,10 @@ private static List getCapabilitiesFromTraits(List traits, return list; } - public static @NotNull LazyOptional getCapability(MetaMachine machine, @NotNull Capability cap, - @Nullable Direction side) { + public static LazyOptional getCapability(MetaMachine machine, Capability cap, + @Nullable Direction side) { if (cap == GTCapability.CAPABILITY_COVERABLE) { return GTCapability.CAPABILITY_COVERABLE.orEmpty(cap, LazyOptional.of(machine::getCoverContainer)); - } else if (cap == GTCapability.CAPABILITY_TOOLABLE) { - return GTCapability.CAPABILITY_TOOLABLE.orEmpty(cap, LazyOptional.of(() -> machine)); } else if (cap == GTCapability.CAPABILITY_WORKABLE) { if (machine instanceof IWorkable workable) { return GTCapability.CAPABILITY_WORKABLE.orEmpty(cap, LazyOptional.of(() -> workable)); 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 762e42a214b..2a700306d9c 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 @@ -20,17 +20,14 @@ 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.utils.ExtendedUseOnContext; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; import org.jetbrains.annotations.Nullable; @@ -319,16 +316,15 @@ public void setFrontFacing(Direction facing) { * Show the preview of structure. */ @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - if (!isFormed() && player.isShiftKeyDown() && player.getItemInHand(hand).isEmpty()) { - if (world.isClientSide()) { - MultiblockInWorldPreviewRenderer.showPreview(pos, this, + public InteractionResult onUse(ExtendedUseOnContext context) { + if (!isFormed() && context.getPlayer().isShiftKeyDown()) { + if (isRemote()) { + MultiblockInWorldPreviewRenderer.showPreview(getBlockPos(), this, ConfigHolder.INSTANCE.client.inWorldPreviewDuration * 20); } return InteractionResult.SUCCESS; } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUse(context); } public boolean allowCircuitSlots() { 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 ad9b2d613be..9c787e4058b 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 @@ -20,10 +20,7 @@ import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; 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.gregtechceu.gtceu.utils.*; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; @@ -42,13 +39,9 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidType; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; @@ -289,20 +282,18 @@ public void afterWorking() { ////////////////////////////////////// @Override - protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onSoftMalletClick(ExtendedUseOnContext context) { return InteractionResult.PASS; } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { if (!isRemote()) { - if (FluidUtil.interactWithFluidHandler(player, hand, waterTank)) { + if (FluidUtil.interactWithFluidHandler(context.getPlayer(), context.getHand(), waterTank)) { return InteractionResult.SUCCESS; } } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java index 8434c9c9fc3..5164e0df13d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/steam/SteamWorkableMachine.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.ISubscription; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -20,11 +21,9 @@ import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidType; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -156,14 +155,15 @@ public boolean isFacingValid(Direction facing) { } @Override - protected InteractionResult onWrenchClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { - if (!playerIn.isShiftKeyDown()) { + protected InteractionResult onWrenchClick(ExtendedUseOnContext context) { + var gridSide = context.getGridSide(); + var player = context.getPlayer(); + if (!player.isShiftKeyDown()) { if (hasFrontFacing() && gridSide == getFrontFacing()) return InteractionResult.PASS; setOutputFacing(gridSide); - return InteractionResult.sidedSuccess(playerIn.level().isClientSide); + return InteractionResult.sidedSuccess(player.level().isClientSide); } - return super.onWrenchClick(playerIn, hand, gridSide, hitResult); + return super.onWrenchClick(context); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/AutoOutputTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/AutoOutputTrait.java index b11770867d6..51b7fd892f0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/AutoOutputTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/AutoOutputTrait.java @@ -12,6 +12,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.item.tool.behavior.ToolModeSwitchBehavior; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; @@ -22,13 +23,11 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; @@ -324,23 +323,24 @@ public boolean shouldRenderGridOverlay(Player player, BlockPos pos, BlockState s } @Override - public Pair onToolClick(Set toolType, Player player, - InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + public Pair onToolClick(ExtendedUseOnContext context) { + var toolType = context.getToolType(); if (useDefaultToolHandlers) { if (toolType.contains(GTToolType.WRENCH)) { - return Pair.of(GTToolType.WRENCH, onWrenchClick(player, hand, gridSide, hitResult)); + return Pair.of(GTToolType.WRENCH, onWrenchClick(context)); } if (toolType.contains(GTToolType.SCREWDRIVER)) { - return Pair.of(GTToolType.SCREWDRIVER, onScrewdriverClick(player, hand, gridSide, hitResult)); + return Pair.of(GTToolType.SCREWDRIVER, onScrewdriverClick(context)); } } - return IInteractionTrait.super.onToolClick(toolType, player, hand, gridSide, hitResult); + return IInteractionTrait.super.onToolClick(context); } - private InteractionResult onWrenchClick(Player player, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { - var itemStack = player.getItemInHand(hand); + private InteractionResult onWrenchClick(ExtendedUseOnContext context) { + var player = context.getPlayer(); + var itemStack = context.getItemInHand(); + var gridSide = context.getGridSide(); + var tagCompound = getBehaviorsTag(itemStack); ToolModeSwitchBehavior.WrenchModeType type = ToolModeSwitchBehavior.WrenchModeType.VALUES[tagCompound .getByte("Mode")]; @@ -363,8 +363,10 @@ private InteractionResult onWrenchClick(Player player, InteractionHand hand, Dir return hasChanged ? InteractionResult.sidedSuccess(machine.isRemote()) : InteractionResult.PASS; } - private InteractionResult onScrewdriverClick(Player player, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + private InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { + var player = context.getPlayer(); + var gridSide = context.getGridSide(); + boolean hasChanged = false; if (player.isShiftKeyDown()) { if (getItemOutputDirection() == gridSide) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/feature/IInteractionTrait.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/feature/IInteractionTrait.java index 1f8d0e23ea7..aa1b4601f9d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/feature/IInteractionTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/feature/IInteractionTrait.java @@ -1,20 +1,12 @@ package com.gregtechceu.gtceu.api.machine.trait.feature; import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import com.mojang.datafixers.util.Pair; -import java.util.Set; - import javax.annotation.ParametersAreNonnullByDefault; /** @@ -23,16 +15,13 @@ @ParametersAreNonnullByDefault public interface IInteractionTrait extends ITraitFeature { - /// Called when a player interacts with a machine without a tool. - default InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { + /// Called when a player interacts with a machine without an item. + default InteractionResult onUse(ExtendedUseOnContext context) { return InteractionResult.PASS; } /// Called when a player interacts with a machine with a tool. - default Pair onToolClick(Set toolType, - Player player, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + default Pair onToolClick(ExtendedUseOnContext context) { return Pair.of(null, InteractionResult.PASS); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index 2e03ffa3503..7422451237f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -233,8 +233,8 @@ public static void onMobEffectEvent(MobEffectEvent.Applicable event) { @SubscribeEvent public static void onLeftClickBlock(PlayerInteractEvent.LeftClickBlock event) { var machine = MetaMachine.getMachine(event.getLevel(), event.getPos()); - if (machine != null) event.setCanceled(machine.onLeftClick(event.getEntity(), event.getLevel(), event.getHand(), - event.getPos(), event.getFace())); + if (machine != null) + event.setCanceled(machine.onLeftClick(event.getEntity(), event.getHand(), event.getFace())); } @SubscribeEvent diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java index 4adfabd4de4..be3caf82361 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java @@ -79,8 +79,6 @@ public CableBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockS } } else if (cap == GTCapability.CAPABILITY_COVERABLE) { return GTCapability.CAPABILITY_COVERABLE.orEmpty(cap, LazyOptional.of(this::getCoverContainer)); - } else if (cap == GTCapability.CAPABILITY_TOOLABLE) { - return GTCapability.CAPABILITY_TOOLABLE.orEmpty(cap, LazyOptional.of(() -> this)); } return super.getCapability(cap, side); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java index efcf4eb4d6e..3bcefb105e7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java @@ -56,8 +56,6 @@ public static void onBlockEntityRegister(BlockEntityType du LazyOptional.of(() -> handlers.getOrDefault(side, defaultHandler))); } else if (cap == GTCapability.CAPABILITY_COVERABLE) { return GTCapability.CAPABILITY_COVERABLE.orEmpty(cap, LazyOptional.of(this::getCoverContainer)); - } else if (cap == GTCapability.CAPABILITY_TOOLABLE) { - return GTCapability.CAPABILITY_TOOLABLE.orEmpty(cap, LazyOptional.of(() -> this)); } return super.getCapability(cap, side); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java index e35d87c2c81..ba6aa0648f6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java @@ -141,8 +141,6 @@ public LazyOptional getCapability(Capability capability, @Nullable Dir } } else if (capability == GTCapability.CAPABILITY_COVERABLE) { return GTCapability.CAPABILITY_COVERABLE.orEmpty(capability, LazyOptional.of(this::getCoverContainer)); - } else if (capability == GTCapability.CAPABILITY_TOOLABLE) { - return GTCapability.CAPABILITY_TOOLABLE.orEmpty(capability, LazyOptional.of(() -> this)); } return super.getCapability(capability, facing); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java index c3743878966..c756537a1a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java @@ -71,8 +71,6 @@ public static void onBlockEntityRegister(BlockEntityType it } } else if (cap == GTCapability.CAPABILITY_COVERABLE) { return GTCapability.CAPABILITY_COVERABLE.orEmpty(cap, LazyOptional.of(this::getCoverContainer)); - } else if (cap == GTCapability.CAPABILITY_TOOLABLE) { - return GTCapability.CAPABILITY_TOOLABLE.orEmpty(cap, LazyOptional.of(() -> this)); } return super.getCapability(cap, side); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java index fa11317d696..d18182c1b39 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java @@ -59,8 +59,6 @@ public static void onBlockEntityRegister(BlockEntityType c LazyOptional.of(() -> handlers.getOrDefault(side, defaultHandler))); } else if (cap == GTCapability.CAPABILITY_COVERABLE) { return GTCapability.CAPABILITY_COVERABLE.orEmpty(cap, LazyOptional.of(this::getCoverContainer)); - } else if (cap == GTCapability.CAPABILITY_TOOLABLE) { - return GTCapability.CAPABILITY_TOOLABLE.orEmpty(cap, LazyOptional.of(() -> this)); } return super.getCapability(cap, side); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ShutterCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ShutterCover.java index ee5a75ba8bc..ce81276db77 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ShutterCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ShutterCover.java @@ -6,19 +6,16 @@ import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.items.IItemHandlerModifiable; import lombok.Getter; import lombok.Setter; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -32,13 +29,13 @@ public class ShutterCover extends CoverBehavior implements IControllable { @Setter private boolean workingEnabled = true; - public ShutterCover(@NotNull CoverDefinition definition, @NotNull ICoverable coverableView, - @NotNull Direction attachedSide) { + public ShutterCover(CoverDefinition definition, ICoverable coverableView, + Direction attachedSide) { super(definition, coverableView, attachedSide); } @Override - public InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { + public InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { return InteractionResult.FAIL; } @@ -48,10 +45,10 @@ public boolean canPipePassThrough() { } @Override - public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { + public InteractionResult onSoftMalletClick(ExtendedUseOnContext context) { this.workingEnabled = !this.workingEnabled; - if (!playerIn.level().isClientSide) { - playerIn.sendSystemMessage(Component.translatable(isWorkingEnabled() ? + if (!coverHolder.isRemote()) { + context.getPlayer().sendSystemMessage(Component.translatable(isWorkingEnabled() ? "cover.shutter.message.enabled" : "cover.shutter.message.disabled")); } return InteractionResult.SUCCESS; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java index cfb13b85cd1..b92624160d3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/detector/DetectorCover.java @@ -7,16 +7,14 @@ import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; import lombok.Setter; @@ -72,8 +70,8 @@ private void toggleInvertedWithNotification() { } @Override - public InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { - InteractionResult superResult = super.onScrewdriverClick(playerIn, hand, hitResult); + public InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { + InteractionResult superResult = super.onScrewdriverClick(context); if (superResult != InteractionResult.PASS) { return superResult; } @@ -83,7 +81,7 @@ public InteractionResult onScrewdriverClick(Player playerIn, InteractionHand han String translationKey = isInverted() ? "cover.detector_base.message_inverted_state" : "cover.detector_base.message_normal_state"; - playerIn.sendSystemMessage(Component.translatable(translationKey)); + context.getPlayer().sendSystemMessage(Component.translatable(translationKey)); } return InteractionResult.SUCCESS; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/FluidVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/FluidVoidingCover.java index bbd2d2732a1..e940e453965 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/FluidVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/FluidVoidingCover.java @@ -7,6 +7,7 @@ import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.common.cover.PumpCover; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTMath; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -18,12 +19,10 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -112,13 +111,13 @@ protected String getUITitle() { } @Override - public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { + public InteractionResult onSoftMalletClick(ExtendedUseOnContext context) { if (!isRemote()) { setWorkingEnabled(!isWorkingEnabled); - playerIn.sendSystemMessage(Component.translatable(isWorkingEnabled() ? + context.getPlayer().sendSystemMessage(Component.translatable(isWorkingEnabled() ? "cover.voiding.message.enabled" : "cover.voiding.message.disabled")); } - return InteractionResult.sidedSuccess(playerIn.level().isClientSide); + return InteractionResult.sidedSuccess(isRemote()); } // TODO: Decide grid behavior diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java index 965a5340dcc..1a7740d401a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.common.cover.ConveyorCover; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; @@ -19,12 +20,10 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.items.IItemHandler; import org.jetbrains.annotations.NotNull; @@ -108,13 +107,13 @@ protected String getUITitle() { } @Override - public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { + public InteractionResult onSoftMalletClick(ExtendedUseOnContext context) { if (!isRemote()) { setWorkingEnabled(!isWorkingEnabled); - playerIn.sendSystemMessage(Component.translatable(isWorkingEnabled() ? + context.getPlayer().sendSystemMessage(Component.translatable(isWorkingEnabled() ? "cover.voiding.message.enabled" : "cover.voiding.message.disabled")); } - return InteractionResult.sidedSuccess(playerIn.level().isClientSide); + return InteractionResult.sidedSuccess(isRemote()); } // TODO: Decide grid behavior diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java index 6f2cf812f04..e8a87c5ffec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.common.machine.trait.ConverterTrait; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -15,12 +16,10 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.phys.BlockHitResult; import org.jetbrains.annotations.Nullable; @@ -58,12 +57,11 @@ public int tintColor(int index) { // ****** Interaction ******// ////////////////////////////////////// @Override - public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, Direction facing, - BlockHitResult hitResult) { + public InteractionResult onSoftMalletClick(ExtendedUseOnContext context) { if (!isRemote()) { if (getConverterTrait().isFeToEu()) { setFeToEu(false); - playerIn.sendSystemMessage( + context.getPlayer().sendSystemMessage( Component.translatable("gtceu.machine.energy_converter.message_conversion_eu", getConverterTrait().getAmps(), getConverterTrait().getVoltage(), FeCompat.toFeLong( @@ -71,7 +69,7 @@ public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand FeCompat.ratio(false)))); } else { setFeToEu(true); - playerIn.sendSystemMessage( + context.getPlayer().sendSystemMessage( Component.translatable("gtceu.machine.energy_converter.message_conversion_native", FeCompat.toFeLong( getConverterTrait().getVoltage() * getConverterTrait().getAmps(), diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java index 568026f5d3a..bce49dc02a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java @@ -22,6 +22,7 @@ import com.gregtechceu.gtceu.common.machine.trait.miner.MinerLogic; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.lang.LangHandler; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.ISubscription; import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget; @@ -37,10 +38,7 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.Style; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.BlockHitResult; import com.mojang.blaze3d.MethodsReturnNonnullByDefault; import lombok.Getter; @@ -278,15 +276,14 @@ public boolean drainInput(boolean simulate) { // ******* Interaction *******// ////////////////////////////////////// @Override - protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { if (isRemote()) return InteractionResult.SUCCESS; if (!this.isActive()) { int currentRadius = getRecipeLogic().getCurrentRadius(); if (currentRadius == 1) getRecipeLogic().setCurrentRadius(getRecipeLogic().getMaximumRadius()); - else if (playerIn.isShiftKeyDown()) + else if (context.getPlayer().isShiftKeyDown()) getRecipeLogic().setCurrentRadius(Math.max(1, Math.round(currentRadius / 2.0f))); else getRecipeLogic().setCurrentRadius(Math.max(1, currentRadius - 1)); @@ -294,10 +291,10 @@ else if (playerIn.isShiftKeyDown()) getRecipeLogic().resetArea(true); int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); - playerIn.sendSystemMessage( + context.getPlayer().sendSystemMessage( Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); } else { - playerIn.sendSystemMessage(Component.translatable("gtceu.multiblock.large_miner.errorradius")); + context.getPlayer().sendSystemMessage(Component.translatable("gtceu.multiblock.large_miner.errorradius")); } return InteractionResult.SUCCESS; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java index ee341176a5b..ef710fb96ad 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/TransformerMachine.java @@ -9,15 +9,12 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.ClientFieldChangeListener; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; import lombok.Setter; @@ -115,11 +112,10 @@ public void setTransformUp(boolean isTransformUp) { } @Override - protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { if (!isRemote()) { setTransformUp(!isTransformUp()); - playerIn.sendSystemMessage(Component.translatable( + context.getPlayer().sendSystemMessage(Component.translatable( isTransformUp() ? "gtceu.machine.transformer.message_transform_up" : "gtceu.machine.transformer.message_transform_down", energyContainer.getInputVoltage(), energyContainer.getInputAmperage(), diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java index 4828888116c..108f2419497 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/WorldAcceleratorMachine.java @@ -16,6 +16,7 @@ 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.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture; @@ -25,7 +26,6 @@ import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntity; @@ -33,7 +33,6 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.phys.BlockHitResult; import it.unimi.dsi.fastutil.objects.Object2BooleanFunction; import it.unimi.dsi.fastutil.objects.Object2BooleanOpenHashMap; @@ -232,13 +231,12 @@ public void setWorkingEnabled(boolean workingEnabled) { } @Override - protected @NotNull InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { if (!isRemote()) { isRandomTickMode = !isRandomTickMode; setRenderState(getRenderState().setValue(GTMachineModelProperties.IS_RANDOM_TICK_MODE, isRandomTickMode)); syncDataHolder.markClientSyncFieldDirty("isRandomTickMode"); - playerIn.sendSystemMessage(Component.translatable(isRandomTickMode ? + context.getPlayer().sendSystemMessage(Component.translatable(isRandomTickMode ? "gtceu.machine.world_accelerator.mode_entity" : "gtceu.machine.world_accelerator.mode_tile")); scheduleRenderUpdate(); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java index 48e613f5492..3097e1c99c4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeMinerMachine.java @@ -18,6 +18,7 @@ import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.item.behavior.PortableScannerBehavior; import com.gregtechceu.gtceu.common.machine.trait.miner.LargeMinerLogic; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.GTUtil; @@ -29,18 +30,14 @@ import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.Block; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectMaps; import lombok.Getter; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -237,8 +234,7 @@ public void handleDisplayClick(String componentData, ClickData clickData) { // ******* Interaction *******// ////////////////////////////////////// @Override - public InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction facing, - BlockHitResult hitResult) { + public InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { if (isRemote() || !this.isFormed()) return InteractionResult.SUCCESS; @@ -251,8 +247,9 @@ public InteractionResult onScrewdriverClick(Player playerIn, InteractionHand han getRecipeLogic().setCurrentRadius(currentRadius - CHUNK_LENGTH); } int workingAreaChunks = getRecipeLogic().getCurrentRadius() * 2 / CHUNK_LENGTH; - playerIn.sendSystemMessage(Component.translatable("gtceu.universal.tooltip.working_area_chunks", - workingAreaChunks, workingAreaChunks)); + context.getPlayer() + .sendSystemMessage(Component.translatable("gtceu.universal.tooltip.working_area_chunks", + workingAreaChunks, workingAreaChunks)); } else { if (currentRadius - CHUNK_LENGTH / 2 <= 0) { getRecipeLogic().setCurrentRadius(getRecipeLogic().getMaximumRadius()); @@ -260,17 +257,16 @@ public InteractionResult onScrewdriverClick(Player playerIn, InteractionHand han getRecipeLogic().setCurrentRadius(currentRadius - CHUNK_LENGTH / 2); } int workingArea = IMiner.getWorkingArea(getRecipeLogic().getCurrentRadius()); - playerIn.sendSystemMessage( + context.getPlayer().sendSystemMessage( Component.translatable("gtceu.universal.tooltip.working_area", workingArea, workingArea)); } getRecipeLogic().resetArea(true); } else { - playerIn.sendSystemMessage(Component.translatable("gtceu.multiblock.large_miner.errorradius")); + context.getPlayer().sendSystemMessage(Component.translatable("gtceu.multiblock.large_miner.errorradius")); } return InteractionResult.SUCCESS; } - @NotNull @Override public List getDataInfo(PortableScannerBehavior.DisplayMode mode) { if (mode == PortableScannerBehavior.DisplayMode.SHOW_ALL || diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java index 2e71fb67cac..e31ff5d1445 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/MultiblockTankMachine.java @@ -10,6 +10,7 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.gui.widget.ImageWidget; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; @@ -17,14 +18,8 @@ import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; import org.jetbrains.annotations.NotNull; @@ -49,9 +44,8 @@ public MultiblockTankMachine(BlockEntityCreationInfo info, int capacity, @Nullab } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - var superResult = super.onUse(state, world, pos, player, hand, hit); + public InteractionResult onUse(ExtendedUseOnContext context) { + var superResult = super.onUse(context); if (superResult != InteractionResult.PASS) return superResult; if (!isFormed()) return InteractionResult.FAIL; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java index 96a0d8dc021..20f559bf544 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DiodePartMachine.java @@ -9,16 +9,14 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.ClientFieldChangeListener; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.util.StringRepresentable; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.state.properties.EnumProperty; -import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; @@ -129,12 +127,11 @@ public boolean isFacingValid(Direction facing) { } @Override - protected InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onSoftMalletClick(ExtendedUseOnContext context) { cycleAmpMode(); if (!isRemote()) { this.scheduleRenderUpdate(); - playerIn.sendSystemMessage(Component.translatable("gtceu.machine.diode.message", amps)); + context.getPlayer().sendSystemMessage(Component.translatable("gtceu.machine.diode.message", amps)); return InteractionResult.SUCCESS; } return InteractionResult.CONSUME; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java index 9fd53a92fd6..346495ad0a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java @@ -21,6 +21,7 @@ import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; @@ -35,13 +36,10 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidType; @@ -220,14 +218,13 @@ public void setWorkingEnabled(boolean workingEnabled) { } @Override - protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { - InteractionResult superResult = super.onScrewdriverClick(playerIn, hand, gridSide, hitResult); + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { + InteractionResult superResult = super.onScrewdriverClick(context); if (superResult != InteractionResult.PASS) return superResult; if (io == IO.BOTH) return InteractionResult.PASS; - if (playerIn.isShiftKeyDown()) { + if (context.getPlayer().isShiftKeyDown()) { if (swapIO()) { - return InteractionResult.sidedSuccess(playerIn.level().isClientSide); + return InteractionResult.sidedSuccess(getLevel().isClientSide); } } return InteractionResult.PASS; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java index 79d8b8eaee2..2f169df6e1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java @@ -22,6 +22,7 @@ import com.gregtechceu.gtceu.common.data.GTMachines; import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTTransferUtils; import com.gregtechceu.gtceu.utils.ISubscription; @@ -35,13 +36,10 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import lombok.AccessLevel; import lombok.Getter; @@ -250,14 +248,13 @@ public void setWorkingEnabled(boolean workingEnabled) { } @Override - protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { - InteractionResult superResult = super.onScrewdriverClick(playerIn, hand, gridSide, hitResult); + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { + InteractionResult superResult = super.onScrewdriverClick(context); if (superResult != InteractionResult.PASS) return superResult; if (io == IO.BOTH) return InteractionResult.PASS; - if (playerIn.isShiftKeyDown()) { + if (context.getPlayer().isShiftKeyDown()) { if (swapIO()) { - return InteractionResult.sidedSuccess(playerIn.level().isClientSide); + return InteractionResult.sidedSuccess(isRemote()); } } return InteractionResult.PASS; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java index 9bef4765b0a..e8c2c09c059 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java @@ -16,13 +16,13 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.widget.*; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.Style; @@ -32,9 +32,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; @@ -319,17 +316,17 @@ public float getTimeMultiplier() { ////////////////////////////////////// // ******* INTERACTION *******// ////////////////////////////////////// + @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { if (hasMaintenanceProblems()) { - if (consumeDuctTape(player, hand)) { + if (consumeDuctTape(context.getPlayer(), context.getHand())) { fixAllMaintenanceProblems(); setTaped(true); return InteractionResult.SUCCESS; } } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); } ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index 934172bcdce..8ef497e5295 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -20,6 +20,7 @@ import com.gregtechceu.gtceu.common.data.GTDamageTypes; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.ISubscription; import com.lowdragmc.lowdraglib.gui.widget.Widget; @@ -27,17 +28,11 @@ import net.minecraft.ChatFormatting; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; import org.jetbrains.annotations.NotNull; @@ -131,7 +126,7 @@ static int getBaseEfficiency() { // ****** Rotor Holder ******// ////////////////////////////////////// - public @NotNull Material getRotorMaterial() { + public Material getRotorMaterial() { // handles clients trying to get the material before server data sync // noinspection ConstantValue if (rotorMaterial == null) { @@ -226,14 +221,13 @@ public void setRotorStack(ItemStack rotorStack) { } @Override - public InteractionResult onUse(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - var superResult = super.onUse(state, level, pos, player, hand, hit); + public InteractionResult onUse(ExtendedUseOnContext context) { + var superResult = super.onUse(context); if (superResult != InteractionResult.PASS) return superResult; - if (!isRemote() && getRotorSpeed() > 0 && !player.isCreative()) { + if (!isRemote() && getRotorSpeed() > 0 && !context.getPlayer().isCreative()) { TurbineRotorBehaviour behaviour = TurbineRotorBehaviour.getBehaviour(getRotorStack()); if (behaviour != null) { - player.hurt(GTDamageTypes.TURBINE.source(level), behaviour.getDamage(getRotorStack())); + context.getPlayer().hurt(GTDamageTypes.TURBINE.source(level), behaviour.getDamage(getRotorStack())); } return InteractionResult.FAIL; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java index cd451b26b1d..f7043125950 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/monitor/AdvancedMonitorPartMachine.java @@ -4,16 +4,11 @@ import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; import org.jetbrains.annotations.Nullable; @@ -44,13 +39,13 @@ public AdvancedMonitorPartMachine(BlockEntityCreationInfo info) { } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - if (hit.getDirection() != getFrontFacing()) return super.onUse(state, world, pos, player, hand, hit); + public InteractionResult onUse(ExtendedUseOnContext context) { + if (context.getClickedFace() != getFrontFacing()) return super.onUse(context); + var hitLocation = context.getHitResult().getLocation(); clicked = true; - clickPosX = hit.getLocation() + clickPosX = hitLocation .get(RelativeDirection.RIGHT.getRelative(getFrontFacing(), getUpwardsFacing(), false).getAxis()); - clickPosY = hit.getLocation() + clickPosY = hitLocation .get(getFrontFacing().getAxis().isVertical() ? Direction.Axis.X : Direction.Axis.Y); clickPosX -= Math.floor(clickPosX); if (clickPosX < 0) clickPosX++; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java index b7a05fa2d02..43e6b0580a0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java @@ -15,6 +15,7 @@ import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.item.behavior.LighterBehavior; import com.gregtechceu.gtceu.data.recipe.CustomTags; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.utils.BlockInfo; @@ -27,22 +28,17 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.tags.BlockTags; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import it.unimi.dsi.fastutil.longs.Long2BooleanMap; import it.unimi.dsi.fastutil.longs.Long2BooleanOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; -import org.jetbrains.annotations.NotNull; import java.util.*; @@ -90,7 +86,7 @@ public void onStructureFormed() { } @Override - public @NotNull CharcoalRecipeLogic getRecipeLogic() { + public CharcoalRecipeLogic getRecipeLogic() { return (CharcoalRecipeLogic) super.getRecipeLogic(); } @@ -312,12 +308,11 @@ private void convertLogBlocks() { } @Override - public InteractionResult onUse(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - if (!isFormed() || hasAir) { - return super.onUse(state, level, pos, player, hand, hit); - } - ItemStack stack = player.getItemInHand(hand); + public InteractionResult onUse(ExtendedUseOnContext context) { + var stack = context.getItemInHand(); + var player = context.getPlayer(); + var hand = context.getHand(); + if (!stack.is(CustomTags.TOOLS_IGNITER)) { return InteractionResult.PASS; } @@ -344,13 +339,13 @@ public InteractionResult onUse(BlockState state, Level level, BlockPos pos, Play if (shouldActivate) { getRecipeLogic().setStatus(RecipeLogic.Status.WORKING); - level.playSound(null, pos, + level.playSound(null, getBlockPos(), stack.is(Items.FIRE_CHARGE) ? SoundEvents.FIRECHARGE_USE : SoundEvents.FLINTANDSTEEL_USE, SoundSource.BLOCKS, 1.0f, 1.0f); return InteractionResult.CONSUME; } } - return super.onUse(state, level, pos, player, hand, hit); + return super.onUse(context); } public static class CharcoalRecipeLogic extends RecipeLogic { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java index e587e36b14d..f0e15368744 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CokeOvenMachine.java @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.api.gui.widget.TankWidget; import com.gregtechceu.gtceu.api.machine.feature.IUIMachine; import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; @@ -22,12 +23,8 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidUtil; import javax.annotation.ParametersAreNonnullByDefault; @@ -92,17 +89,16 @@ public void animateTick(RandomSource random) { } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { if (!isRemote()) { - if (super.onUse(state, world, pos, player, hand, hit) == InteractionResult.SUCCESS) { + if (super.onUseWithItem(context) == InteractionResult.SUCCESS) { return InteractionResult.SUCCESS; } - if (FluidUtil.interactWithFluidHandler(player, hand, exportFluids)) { + if (FluidUtil.interactWithFluidHandler(context.getPlayer(), context.getHand(), exportFluids)) { return InteractionResult.SUCCESS; } return InteractionResult.PASS; } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/package-info.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/package-info.java new file mode 100644 index 00000000000..4ea37be3296 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.common.machine.multiblock.primitive; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java index 78ee8dc9936..a71033ca61f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/steam/SteamLiquidBoilerMachine.java @@ -9,21 +9,17 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.util.RandomSource; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidType; import net.minecraftforge.fluids.FluidUtil; @@ -94,13 +90,12 @@ protected void randomDisplayTick(RandomSource random, float x, float y, float z) } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { if (!isRemote()) { - if (FluidUtil.interactWithFluidHandler(player, hand, fuelTank)) { + if (FluidUtil.interactWithFluidHandler(context.getPlayer(), context.getHand(), fuelTank)) { return InteractionResult.SUCCESS; } } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java index 11b1a93ff98..fdc705e147d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CrateMachine.java @@ -14,22 +14,18 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.gui.modular.ModularUI; import com.lowdragmc.lowdraglib.gui.widget.LabelWidget; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.phys.BlockHitResult; import lombok.Getter; import org.jetbrains.annotations.Nullable; @@ -88,21 +84,21 @@ public ModularUI createUI(Player entityPlayer) { } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - ItemStack stack = player.getItemInHand(hand); - if (player.isCrouching() && !isTaped) { - if (stack.is(GTItems.DUCT_TAPE.asItem()) || stack.is(GTItems.BASIC_TAPE.asItem())) { + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { + var stack = context.getItemInHand(); + var player = context.getPlayer(); + if (stack.is(GTItems.DUCT_TAPE.asItem()) || stack.is(GTItems.BASIC_TAPE.asItem())) { + if (player != null && player.isCrouching() && !isTaped) { if (!player.isCreative()) { stack.shrink(1); } isTaped = true; setRenderState(getRenderState().setValue(GTMachineModelProperties.IS_TAPED, isTaped)); syncDataHolder.markClientSyncFieldDirty("isTaped"); - return InteractionResult.sidedSuccess(world.isClientSide); + return InteractionResult.sidedSuccess(context.getLevel().isClientSide); } } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java index ec436be4bfa..37595699436 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.gui.widget.PhantomSlotWidget; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; @@ -14,15 +15,9 @@ import com.lowdragmc.lowdraglib.gui.widget.*; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.items.ItemHandlerHelper; import lombok.Getter; @@ -85,10 +80,11 @@ public void loadFromItem(CompoundTag tag) { } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - var heldItem = player.getItemInHand(hand); - if (hit.getDirection() == getFrontFacing() && !isRemote()) { + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { + var heldItem = context.getItemInHand(); + var player = context.getPlayer(); + + if (context.getClickedFace() == getFrontFacing() && !isRemote()) { // Clear item if empty hand + shift-rclick if (heldItem.isEmpty() && player.isCrouching() && !stored.isEmpty()) { return updateStored(ItemStack.EMPTY); @@ -96,13 +92,13 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play // If held item can stack with stored item, delete held item if (!heldItem.isEmpty() && ItemHandlerHelper.canItemStacksStack(stored, heldItem)) { - player.setItemInHand(hand, ItemStack.EMPTY); + player.setItemInHand(context.getHand(), ItemStack.EMPTY); return InteractionResult.SUCCESS; } else if (!heldItem.isEmpty()) { // If held item is different than stored item, update stored item return updateStored(heldItem); } } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java index d7e5cd1972a..bc7891884e9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeTankMachine.java @@ -7,6 +7,7 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; import com.lowdragmc.lowdraglib.gui.texture.ResourceBorderTexture; @@ -14,15 +15,9 @@ import com.lowdragmc.lowdraglib.gui.widget.*; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.items.ItemHandlerHelper; @@ -81,30 +76,22 @@ private void setmBPerCycle(String value) { } @Override - public void saveToItem(@NotNull CompoundTag tag) { + public void saveToItem(CompoundTag tag) { tag.putInt("mBPerCycle", mBPerCycle); tag.putInt("ticksPerCycle", ticksPerCycle); } @Override - public void loadFromItem(@NotNull CompoundTag tag) { + public void loadFromItem(CompoundTag tag) { mBPerCycle = tag.getInt("mBPerCycle"); ticksPerCycle = tag.getInt("ticksPerCycle"); } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - var heldItem = player.getItemInHand(hand); - if (hit.getDirection() == getFrontFacing() && !isRemote()) { - // Clear fluid if empty + shift-rclick - if (heldItem.isEmpty()) { - if (player.isCrouching() && !stored.isEmpty()) { - return updateStored(FluidStack.EMPTY); - } - return InteractionResult.PASS; - } - + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { + var heldItem = context.getItemInHand(); + var player = context.getPlayer(); + if (context.getClickedFace() == getFrontFacing() && !isRemote()) { // If no fluid set and held-item has fluid, set fluid if (stored.isEmpty()) { return FluidUtil.getFluidContained(heldItem) @@ -123,7 +110,7 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play } if (!result.isEmpty()) { - player.setItemInHand(hand, result); + player.setItemInHand(context.getHand(), result); return InteractionResult.SUCCESS; } else { return FluidUtil.getFluidContained(heldItem) @@ -131,7 +118,19 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play .orElse(InteractionResult.PASS); } } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); + } + + @Override + public InteractionResult onUse(ExtendedUseOnContext context) { + if (context.getClickedFace() == getFrontFacing() && !isRemote()) { + // Clear fluid if empty + shift-rclick + if (context.getPlayer().isCrouching() && !stored.isEmpty()) { + return updateStored(FluidStack.EMPTY); + } + return InteractionResult.PASS; + } + return super.onUse(context); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java index 83398fdd0be..1f604cc8e0f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/DrumMachine.java @@ -10,17 +10,12 @@ import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank; import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.ISubscription; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; @@ -124,19 +119,17 @@ public boolean savePickClone() { } @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { if (!isRemote()) { - if (FluidUtil.interactWithFluidHandler(player, hand, cache)) { + if (FluidUtil.interactWithFluidHandler(context.getPlayer(), context.getHand(), cache)) { return InteractionResult.SUCCESS; } } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); } @Override - protected InteractionResult onScrewdriverClick(Player player, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { autoOutput.setAllowAutoOutputItems(!autoOutput.isAutoOutputItems()); return InteractionResult.SUCCESS; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java index 64f5ad3c7fd..598f88d5a55 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumChestMachine.java @@ -19,10 +19,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.utils.FormattingUtil; -import com.gregtechceu.gtceu.utils.GTMath; -import com.gregtechceu.gtceu.utils.GTTransferUtils; -import com.gregtechceu.gtceu.utils.GTUtil; +import com.gregtechceu.gtceu.utils.*; import com.lowdragmc.lowdraglib.gui.editor.Icons; import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup; @@ -37,11 +34,9 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; @@ -174,16 +169,18 @@ public void setWorkingEnabled(boolean isWorkingAllowed) { ////////////////////////////////////// @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - if (hit.getDirection() == getFrontFacing() && !isRemote()) { - // Check to see if the hit is within the glass frame of the chest + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { + if (context.getClickedFace() == getFrontFacing() && !isRemote()) { + var hit = context.getHitResult(); + var aabb = new AABB(hit.getBlockPos()).deflate(0.12); var hitVector = hit.getLocation().relative(getFrontFacing(), -0.5); if (!aabb.contains(hitVector)) return InteractionResult.PASS; - var held = player.getMainHandItem(); - if (!held.isEmpty() && cache.canInsert(held)) { // push + var held = context.getItemInHand(); + var player = context.getPlayer(); + + if (cache.canInsert(held)) { // push var remaining = cache.insertItem(0, held, false); player.setItemInHand(InteractionHand.MAIN_HAND, remaining); return InteractionResult.SUCCESS; @@ -196,8 +193,10 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play } INTERACTION_LOGGER.put(player.getUUID(), System.currentTimeMillis()); return InteractionResult.SUCCESS; + } - return super.onUse(state, world, pos, player, hand, hit); + + return super.onUseWithItem(context); } private static boolean isDoubleHit(UUID uuid) { @@ -205,7 +204,7 @@ private static boolean isDoubleHit(UUID uuid) { } @Override - public boolean onLeftClick(Player player, Level world, InteractionHand hand, BlockPos pos, + public boolean onLeftClick(Player player, InteractionHand hand, @Nullable Direction direction) { if (direction == getFrontFacing() && !isRemote()) { if (GTToolType.WRENCH.matchTags.stream().anyMatch(player.getItemInHand(hand)::is)) return false; @@ -213,12 +212,12 @@ public boolean onLeftClick(Player player, Level world, InteractionHand hand, Blo var drained = cache.extractItem(0, player.isShiftKeyDown() ? stored.getMaxStackSize() : 1, false); if (!drained.isEmpty()) { if (!player.addItem(drained)) { - Block.popResourceFromFace(world, getBlockPos(), getFrontFacing(), drained); + Block.popResourceFromFace(getLevel(), getBlockPos(), getFrontFacing(), drained); } } } } - return super.onLeftClick(player, world, hand, pos, direction); + return super.onLeftClick(player, hand, direction); } public boolean isLocked() { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java index dfaa3c775fb..f1ac0eea8b7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/QuantumTankMachine.java @@ -17,6 +17,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.GTTransferUtils; @@ -27,15 +28,9 @@ import com.lowdragmc.lowdraglib.gui.widget.Widget; import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -152,14 +147,13 @@ public void setWorkingEnabled(boolean isWorkingAllowed) { ////////////////////////////////////// @Override - public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, - BlockHitResult hit) { - if (hit.getDirection() == getFrontFacing() && !isRemote()) { - if (FluidUtil.interactWithFluidHandler(player, hand, cache)) { + public InteractionResult onUseWithItem(ExtendedUseOnContext context) { + if (context.getClickedFace() == getFrontFacing() && !isRemote()) { + if (FluidUtil.interactWithFluidHandler(context.getPlayer(), context.getHand(), cache)) { return InteractionResult.SUCCESS; } } - return super.onUse(state, world, pos, player, hand, hit); + return super.onUseWithItem(context); } public boolean isLocked() { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java index 9079e07333b..45d0b7417f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingBusPartMachine.java @@ -17,16 +17,13 @@ import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAEItemSlot; import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAESlot; import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlotList; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.phys.BlockHitResult; import appeng.api.config.Actionable; import appeng.api.networking.IGrid; @@ -267,15 +264,14 @@ public void attachConfigurators(ConfiguratorPanel configuratorPanel) { } @Override - protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { if (!isRemote()) { setAutoPull(!autoPull); if (autoPull) { - playerIn.sendSystemMessage( + context.getPlayer().sendSystemMessage( Component.translatable("gtceu.machine.me.stocking_auto_pull_enabled")); } else { - playerIn.sendSystemMessage( + context.getPlayer().sendSystemMessage( Component.translatable("gtceu.machine.me.stocking_auto_pull_disabled")); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java index 0cd3764e945..fdf58e578be 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEStockingHatchPartMachine.java @@ -18,15 +18,12 @@ import com.gregtechceu.gtceu.integration.ae2.slot.ExportOnlyAESlot; import com.gregtechceu.gtceu.integration.ae2.slot.IConfigurableSlotList; import com.gregtechceu.gtceu.integration.ae2.utils.AEUtil; +import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.fluids.FluidStack; import appeng.api.config.Actionable; @@ -254,15 +251,14 @@ public void attachConfigurators(ConfiguratorPanel configuratorPanel) { //////////////////////////////// @Override - protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand hand, Direction gridSide, - BlockHitResult hitResult) { + protected InteractionResult onScrewdriverClick(ExtendedUseOnContext context) { if (!isRemote()) { setAutoPull(!autoPull); if (autoPull) { - playerIn.sendSystemMessage( + context.getPlayer().sendSystemMessage( Component.translatable("gtceu.machine.me.stocking_auto_pull_enabled")); } else { - playerIn.sendSystemMessage( + context.getPlayer().sendSystemMessage( Component.translatable("gtceu.machine.me.stocking_auto_pull_disabled")); } } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/ExtendedUseOnContext.java b/src/main/java/com/gregtechceu/gtceu/utils/ExtendedUseOnContext.java new file mode 100644 index 00000000000..6a869bc2fbb --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/utils/ExtendedUseOnContext.java @@ -0,0 +1,37 @@ +package com.gregtechceu.gtceu.utils; + +import com.gregtechceu.gtceu.api.capability.ICoverable; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.item.tool.ToolHelper; + +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.phys.BlockHitResult; + +import lombok.Getter; +import org.jetbrains.annotations.UnknownNullability; +import org.jetbrains.annotations.Unmodifiable; + +import java.util.Set; + +public class ExtendedUseOnContext extends UseOnContext { + + @Getter + private final Direction gridSide; + @Getter + @Unmodifiable + private final Set toolType; + + public ExtendedUseOnContext(Player player, InteractionHand hand, BlockHitResult hitResult) { + super(player, hand, hitResult); + gridSide = ICoverable.determineGridSideHit(hitResult); + toolType = ToolHelper.getToolTypes(getItemInHand()); + } + + @Override + public @UnknownNullability Player getPlayer() { + return super.getPlayer(); + } +} From d1bfccd1a374f306c737d307b8fde9b7f413c436 Mon Sep 17 00:00:00 2001 From: TarLaboratories <159147059+TarLaboratories@users.noreply.github.com> Date: Mon, 2 Mar 2026 21:29:33 +0300 Subject: [PATCH 15/17] Fix #4706 (#4708) --- .../gtceu/common/item/behavior/MachineConfigCopyBehaviour.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java index 64776f5f582..e7eceaf582c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java @@ -12,7 +12,6 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -69,7 +68,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { var blockEntity = context.getLevel().getBlockEntity(context.getClickedPos()); var player = context.getPlayer(); - if (player == null || player instanceof LocalPlayer) return InteractionResult.PASS; + if (!(player instanceof ServerPlayer)) return InteractionResult.PASS; if (blockEntity instanceof MetaMachine mm && !MachineOwner.canOpenOwnerMachine(context.getPlayer(), mm)) return InteractionResult.FAIL; From 6c1ae3bbdd119a7baa27ecce076485b94feb3b1e Mon Sep 17 00:00:00 2001 From: Lapis <45414333+Lapis256@users.noreply.github.com> Date: Wed, 4 Mar 2026 18:25:28 +0900 Subject: [PATCH 16/17] Fix Ender Link Cover memory card copy/paste and required-item handling (#4691) --- .../cover/ender/AbstractEnderLinkCover.java | 19 ++++++++++++++ .../cover/ender/EnderFluidLinkCover.java | 26 +++++++++++++++++++ .../cover/ender/EnderItemLinkCover.java | 26 +++++++++++++++++++ .../behavior/MachineConfigCopyBehaviour.java | 6 ++--- .../gtceu/utils/GTTransferUtils.java | 2 +- 5 files changed, 75 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java index 9532f234cc1..2366d75bd07 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/AbstractEnderLinkCover.java @@ -31,6 +31,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; @@ -241,6 +242,24 @@ protected int getColor() { return VirtualEntry.parseColor(this.colorStr); } + @Override + public CompoundTag copyConfig(CompoundTag tag) { + tag.putString("colorStr", colorStr); + tag.putInt("permission", getPermission().ordinal()); + tag.putInt("io", getIo().ordinal()); + tag.putInt("manualIO", getManualIOMode().ordinal()); + return super.copyConfig(tag); + } + + @Override + public void pasteConfig(ServerPlayer player, CompoundTag tag) { + setChannelName(tag.getString("colorStr")); + setPermission(Permissions.values()[tag.getInt("permission")]); + setIo(IO.values()[tag.getInt("io")]); + setManualIOMode(ManualIOMode.values()[tag.getInt("manualIO")]); + super.pasteConfig(player, tag); + } + protected enum Permissions implements EnumSelectorWidget.SelectableEnum { PUBLIC("cover.ender_fluid_link.private.tooltip.disabled", diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java index 3ad32ee9b38..06a37824d13 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderFluidLinkCover.java @@ -19,6 +19,9 @@ import com.lowdragmc.lowdraglib.gui.widget.*; import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; @@ -26,6 +29,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault @@ -110,6 +115,27 @@ private int doTransferFluids(int platformTransferLimit) { return 0; } + @Override + public CompoundTag copyConfig(CompoundTag tag) { + tag.put("filter", filterHandler.getFilterItem().serializeNBT()); + return super.copyConfig(tag); + } + + @Override + public void pasteConfig(ServerPlayer player, CompoundTag tag) { + filterHandler.setFilterItem(ItemStack.of(tag.getCompound("filter"))); + super.pasteConfig(player, tag); + } + + @Override + public @NotNull List getAdditionalDrops() { + var list = super.getAdditionalDrops(); + if (!filterHandler.getFilterItem().isEmpty()) { + list.add(filterHandler.getFilterItem()); + } + return list; + } + ////////////////////////////////////// // ************ GUI ************ // ////////////////////////////////////// diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderItemLinkCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderItemLinkCover.java index 8338b7e0e40..98f1175a0b1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderItemLinkCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ender/EnderItemLinkCover.java @@ -19,12 +19,17 @@ import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; import net.minecraftforge.items.IItemHandler; import lombok.Getter; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + public class EnderItemLinkCover extends AbstractEnderLinkCover { @Getter @@ -100,6 +105,27 @@ private int doTransferItems(int max) { return coverHolder.getItemHandlerCap(attachedSide, false); } + @Override + public CompoundTag copyConfig(CompoundTag tag) { + tag.put("filter", filterHandler.getFilterItem().serializeNBT()); + return super.copyConfig(tag); + } + + @Override + public void pasteConfig(ServerPlayer player, CompoundTag tag) { + filterHandler.setFilterItem(ItemStack.of(tag.getCompound("filter"))); + super.pasteConfig(player, tag); + } + + @Override + public @NotNull List getAdditionalDrops() { + var list = super.getAdditionalDrops(); + if (!filterHandler.getFilterItem().isEmpty()) { + list.add(filterHandler.getFilterItem()); + } + return list; + } + @Override protected Widget addVirtualEntryWidget(VirtualEntry entry, int x, int y, int width, int height, boolean canClick) { WidgetGroup group = new WidgetGroup(x, y, width, height); diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java index e7eceaf582c..433646b4769 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/MachineConfigCopyBehaviour.java @@ -107,7 +107,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) { if (tag == null) return InteractionResult.FAIL; List items = new ArrayList<>(); - tag.getList("itemsToPaste", CompoundTag.TAG_COMPOUND).forEach(t -> { + tag.getList(ITEMS_TO_PASTE, CompoundTag.TAG_COMPOUND).forEach(t -> { if (t instanceof CompoundTag c) items.add(ItemStack.of(c)); }); @@ -303,9 +303,9 @@ else if (tag.getBoolean(ALLOW_FLUID_IN_FROM_OUT)) if (tag.contains(CIRCUIT)) tooltip.add(Component.translatable("behaviour.setting.tooltip.circuit_config") .append(Component.literal(Integer.toString(tag.getInt(CIRCUIT))).withStyle(ChatFormatting.YELLOW))); - if (tag.contains("itemsToPaste")) { + if (tag.contains(ITEMS_TO_PASTE)) { List items = new ArrayList<>(); - tag.getList("itemsToPaste", CompoundTag.TAG_COMPOUND).forEach(t -> { + tag.getList(ITEMS_TO_PASTE, CompoundTag.TAG_COMPOUND).forEach(t -> { if (t instanceof CompoundTag c) items.add(ItemStack.of(c)); }); diff --git a/src/main/java/com/gregtechceu/gtceu/utils/GTTransferUtils.java b/src/main/java/com/gregtechceu/gtceu/utils/GTTransferUtils.java index 9df9137d39e..643d173da1b 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/GTTransferUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/GTTransferUtils.java @@ -315,7 +315,7 @@ public static boolean extractItemsFromPlayerInv(Player player, List i for (var stack : items) { var found = ContainerHelper.clearOrCountMatchingItems(inventory, (s) -> s.is(stack.getItem()), stack.getCount(), simulate); - if (found != stack.getCount()) return false; + if (found < stack.getCount()) return false; } if (!simulate) player.inventoryMenu.broadcastChanges(); From 114d1c7c2f10ea1fea46d055b130d7c0cc5ce30d Mon Sep 17 00:00:00 2001 From: Mqrius Date: Thu, 5 Mar 2026 11:32:35 +0100 Subject: [PATCH 17/17] Fix validation for item and fluid tags (#4699) --- .../recipe/ingredient/FluidIngredient.java | 7 ++++++ .../kjs/recipe/GTRecipeSchema.java | 20 +++++++++++++++ .../integration/kjs/recipe/KJSHelpers.java | 25 +++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/FluidIngredient.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/FluidIngredient.java index af66ccedd63..a915c6cff67 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/FluidIngredient.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/ingredient/FluidIngredient.java @@ -1,5 +1,8 @@ package com.gregtechceu.gtceu.api.recipe.ingredient; +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.integration.kjs.recipe.KJSHelpers; + import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; @@ -327,6 +330,10 @@ public record TagValue(TagKey tag) implements Value { @Override public Collection getFluids() { + if (GTCEu.Mods.isKubeJSLoaded()) { + var resolved = KJSHelpers.getFluidsDuringLoad(this.tag); + if (resolved != null) return resolved; + } ArrayList list = Lists.newArrayList(); for (Holder holder : BuiltInRegistries.FLUID.getTagOrEmpty(this.tag)) { list.add(holder.value()); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java index 7704d092f7b..74758b76dfb 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/GTRecipeSchema.java @@ -24,6 +24,8 @@ import com.gregtechceu.gtceu.common.item.behavior.IntCircuitBehaviour; import com.gregtechceu.gtceu.common.recipe.condition.*; import com.gregtechceu.gtceu.config.ConfigHolder; +import com.gregtechceu.gtceu.core.mixins.IngredientAccessor; +import com.gregtechceu.gtceu.core.mixins.TagValueAccessor; import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; import com.gregtechceu.gtceu.integration.kjs.recipe.components.CapabilityMap; import com.gregtechceu.gtceu.integration.kjs.recipe.components.ExtendedOutputItem; @@ -792,6 +794,15 @@ private void validateItems(@NotNull String type, InputItem... items) { if (stack == null || stack.isEmpty()) { throw new RecipeExceptionJS(String.format("Invalid or empty %s item (recipe ID: %s)", type, id)); } + if (stack.ingredient.getItems().length == 0) { + String tagInfo = ""; + var values = ((IngredientAccessor) stack.ingredient).getValues(); + if (values.length == 1 && values[0] instanceof Ingredient.TagValue tagValue) { + tagInfo = " (empty or unknown tag: #" + ((TagValueAccessor) tagValue).getTag().location() + ")"; + } + throw new RecipeExceptionJS( + String.format("Invalid or empty %s item (recipe ID: %s)%s", type, id, tagInfo)); + } } } @@ -839,6 +850,15 @@ private void validateFluids(@NotNull String type, GTRecipeComponents.FluidIngred String.format("Invalid or empty %s fluid (recipe ID: %s)", type, id)); } } + if (fluid.ingredient().getStacks().length == 0) { + String tagInfo = ""; + var values = fluid.ingredient().values; + if (values.length == 1 && values[0] instanceof FluidIngredient.TagValue tagValue) { + tagInfo = " (empty or unknown tag: #" + tagValue.tag().location() + ")"; + } + throw new RecipeExceptionJS(String.format( + "Invalid or empty %s fluid (recipe ID: %s)%s", type, id, tagInfo)); + } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/KJSHelpers.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/KJSHelpers.java index 78cc410e131..b21b6d29c43 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/KJSHelpers.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/KJSHelpers.java @@ -3,12 +3,20 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.recipe.ingredient.EnergyStack; +import net.minecraft.core.Holder; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.material.Fluid; + +import com.google.common.collect.Lists; +import dev.latvian.mods.kubejs.item.ingredient.TagContext; +import dev.latvian.mods.kubejs.recipe.RecipesEventJS; import dev.latvian.mods.kubejs.util.MapJS; import dev.latvian.mods.kubejs.util.UtilsJS; import dev.latvian.mods.rhino.Wrapper; import it.unimi.dsi.fastutil.longs.LongLongPair; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; @@ -104,4 +112,21 @@ public static EnergyStack parseEnergyStack(Object o) { } return LongLongPair.of(voltage, amperage); } + + /** + * Resolves a fluid tag using KubeJS's TagContext during recipe (re)loading, since the server registry + * hasn't bound the tags yet. Returns null if a recipe event is not currently active. + * Analogous to KubeJS' TagContext::patchIngredientTags for items. + */ + @Nullable + public static ArrayList getFluidsDuringLoad(TagKey tag) { + if (RecipesEventJS.instance == null) return null; + + var holders = TagContext.INSTANCE.getValue().getTag(tag); + ArrayList list = Lists.newArrayList(); + for (Holder holder : holders) { + list.add(holder.value()); + } + return list; + } }