From 30f1d73bd9d2bcf2e35f742379479bc25b7e124f Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Wed, 5 Feb 2025 12:02:48 -0700 Subject: [PATCH 1/7] mmm fluids --- .../gtceu/api/fluids/FluidBuilder.java | 1 + .../gtceu/api/item/GTBucketItem.java | 90 ++++++++++++------- .../gregtechceu/gtceu/common/CommonProxy.java | 2 +- .../gtceu/common/data/GTFluids.java | 16 ++++ .../UnknownCompositionMaterials.java | 4 +- 5 files changed, 79 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/fluids/FluidBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/fluids/FluidBuilder.java index 510610f8130..956dace103d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/fluids/FluidBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/fluids/FluidBuilder.java @@ -68,6 +68,7 @@ public class FluidBuilder { private boolean hasCustomStill = false; private boolean hasCustomFlowing = false; + @Getter private boolean hasFluidBlock = false; private boolean hasBucket = true; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java index 7f6406bc3a1..b8ffd87d7aa 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.fluids.GTFluid; +import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -94,46 +95,73 @@ public int getBurnTime(ItemStack itemStack, @Nullable RecipeType recipeType) } @Override - public boolean emptyContents(@Nullable Player pPlayer, Level pLevel, BlockPos pPos, - @Nullable BlockHitResult pResult, + public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, + @Nullable BlockHitResult result, @Nullable ItemStack container) { if (!(this.getFluid() instanceof FlowingFluid)) return false; - BlockState blockstate = pLevel.getBlockState(pPos); + BlockState blockstate = level.getBlockState(pos); Block block = blockstate.getBlock(); boolean flag = blockstate.canBeReplaced(this.getFluid()); boolean flag1 = blockstate.isAir() || flag || block instanceof LiquidBlockContainer && - ((LiquidBlockContainer) block).canPlaceLiquid(pLevel, pPos, blockstate, this.getFluid()); - Optional containedFluidStack = Optional - .ofNullable(container).flatMap(FluidUtil::getFluidContained); + ((LiquidBlockContainer) block).canPlaceLiquid(level, pos, blockstate, this.getFluid()); + var fluidType = this.getFluid().getFluidType(); + Optional containedFluidStack = Optional.ofNullable(container).flatMap(FluidUtil::getFluidContained); if (!flag1) { - return pResult != null && this.emptyContents(pPlayer, pLevel, - pResult.getBlockPos().relative(pResult.getDirection()), null, container); - } else if (containedFluidStack.isPresent() && - this.getFluid().getFluidType().isVaporizedOnPlacement(pLevel, pPos, containedFluidStack.get())) { - this.getFluid().getFluidType().onVaporize(pPlayer, pLevel, pPos, containedFluidStack.get()); - return true; - } else - if (pLevel.dimensionType().ultraWarm() && this.getFluid().is(FluidTags.WATER)) { - int i = pPos.getX(); - int j = pPos.getY(); - int k = pPos.getZ(); - pLevel.playSound(pPlayer, pPos, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5F, - 2.6F + (pLevel.random.nextFloat() - pLevel.random.nextFloat()) * 0.8F); - - for (int l = 0; l < 8; ++l) { - pLevel.addParticle(ParticleTypes.LARGE_SMOKE, (double) i + Math.random(), - (double) j + Math.random(), (double) k + Math.random(), 0.0D, 0.0D, 0.0D); - } + return result != null && this.emptyContents(player, level, + result.getBlockPos().relative(result.getDirection()), null, container); + } + if (containedFluidStack.isPresent() && fluidType.isVaporizedOnPlacement(level, pos, containedFluidStack.get())) { + fluidType.onVaporize(player, level, pos, containedFluidStack.get()); + return true; + } + if (doesFluidVaporize(material, level)) { + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + level.playSound(player, pos, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5F, + 2.6F + (level.random.nextFloat() - level.random.nextFloat()) * 0.8F); + + for (int l = 0; l < 8; ++l) { + level.addParticle(ParticleTypes.LARGE_SMOKE, (double) i + Math.random(), + (double) j + Math.random(), (double) k + Math.random(), 0.0D, 0.0D, 0.0D); + } + return true; + } + if (block instanceof LiquidBlockContainer blockContainer && + blockContainer.canPlaceLiquid(level, pos, blockstate, getFluid())) { + blockContainer.placeLiquid(level, pos, blockstate, + ((FlowingFluid) this.getFluid()).getSource(false)); + this.playEmptySound(player, level, pos); + return true; + } else { + if(!level.isClientSide && flag && !blockstate.liquid()) { + level.destroyBlock(pos, true); + } + + var fluidBlockState = material.getFluid().defaultFluidState().createLegacyBlock(); + if(!level.setBlock(pos, fluidBlockState, 11) && blockstate.getFluidState().isSource()) { + return false; + } + this.playEmptySound(player, level, pos); + return true; + } + } + + private boolean doesFluidVaporize(Material mat, Level level) { + if(level.dimensionType().ultraWarm() && this.getFluid().defaultFluidState().is(FluidTags.WATER)) { + return true; // default water in nether behaviour + } + if(material.getFluidBuilder().hasFluidBlock()) { + var fluidStorage = material.getProperty(PropertyKey.FLUID).getStorage(); + if(fluidStorage.getQueuedBuilder(FluidStorageKeys.PLASMA) != null) { // has plasma return true; - } else if (block instanceof LiquidBlockContainer && - ((LiquidBlockContainer) block).canPlaceLiquid(pLevel, pPos, blockstate, getFluid())) { - ((LiquidBlockContainer) block).placeLiquid(pLevel, pPos, blockstate, - ((FlowingFluid) this.getFluid()).getSource(false)); - this.playEmptySound(pPlayer, pLevel, pPos); - return true; - } + } + if (fluidStorage.getQueuedBuilder(FluidStorageKeys.GAS) != null) { // has gas + return true; + } + } return false; } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 32882139d3e..4546cc7163f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -120,9 +120,9 @@ public static void init() { GTSoundEntries.init(); GTDamageTypes.init(); GTCovers.init(); - GTFluids.init(); GTCreativeModeTabs.init(); GTBlocks.init(); + GTFluids.init(); GTEntityTypes.init(); GTBlockEntities.init(); GTRecipeTypes.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java index 11ea09c6394..77e3127be98 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.GTValues; 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.registry.MaterialRegistry; @@ -10,11 +11,14 @@ import com.gregtechceu.gtceu.common.fluid.potion.PotionFluid; import com.gregtechceu.gtceu.data.recipe.CustomTags; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.ForgeMod; import com.tterrag.registrate.util.entry.FluidEntry; +import net.minecraftforge.fluids.FluidInteractionRegistry; import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; @@ -55,6 +59,8 @@ public static void init() { } } } + + initFluidInteractions(); } public static void handleNonMaterialFluids(@NotNull Material material, @NotNull Fluid fluid) { @@ -66,4 +72,14 @@ public static void handleNonMaterialFluids(@NotNull Material material, @NotNull var property = material.getProperty(PropertyKey.FLUID); property.getStorage().store(FluidStorageKeys.LIQUID, fluid, null); } + + public static void initFluidInteractions() { + FluidInteractionRegistry.addInteraction(GTMaterials.Creosote.getFluid().getFluidType(), new FluidInteractionRegistry.InteractionInformation((level, currentPos, relativePos, currentState) -> { + if(level.getBlockState(relativePos).is(BlockTags.PLANKS) && level.getBlockState(relativePos) != GTBlocks.TREATED_WOOD_PLANK.getDefaultState()) { + if(GTValues.RNG.nextFloat() < 0.2f) level.destroyBlock(currentPos, false); + return true; + } + return false; + }, GTBlocks.TREATED_WOOD_PLANK.getDefaultState())); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/materials/UnknownCompositionMaterials.java b/src/main/java/com/gregtechceu/gtceu/common/data/materials/UnknownCompositionMaterials.java index 4ebd2b59088..19f3ad01486 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/materials/UnknownCompositionMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/materials/UnknownCompositionMaterials.java @@ -47,7 +47,7 @@ public static void register() { .buildAndRegister(); Creosote = new Material.Builder(GTCEu.id("creosote")) - .liquid(new FluidBuilder().customStill().burnTime(6400)).color(0x804000) + .liquid(new FluidBuilder().block().customStill().burnTime(6400)).color(0x804000) .flags(STICKY).buildAndRegister(); Diesel = new Material.Builder(GTCEu.id("diesel")) @@ -262,7 +262,7 @@ public static void register() { .color(0xAD5203).flags(FLAMMABLE).buildAndRegister(); LPG = new Material.Builder(GTCEu.id("lpg")) - .liquid(new FluidBuilder().customStill()) + .liquid(new FluidBuilder().block().customStill()) .color(0xFCFCAC).flags(FLAMMABLE, EXPLOSIVE).buildAndRegister(); RawGrowthMedium = new Material.Builder(GTCEu.id("raw_growth_medium")) From 68f52ef4939f877db024a8649420e8c7183ce455 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Mon, 7 Jul 2025 01:44:57 -0600 Subject: [PATCH 2/7] get fluids placable --- .../gtceu/api/item/GTBucketItem.java | 61 +++++++++++-------- .../gtceu/common/data/GTFluids.java | 12 ---- 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java index f3d846d90ef..31748633e84 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java @@ -1,9 +1,11 @@ package com.gregtechceu.gtceu.api.item; +import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.fluids.GTFluid; +import com.gregtechceu.gtceu.api.fluids.store.FluidStorage; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; @@ -97,19 +99,22 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, BlockState blockstate = level.getBlockState(pos); Block block = blockstate.getBlock(); - boolean flag = blockstate.canBeReplaced(this.getFluid()); - boolean flag1 = blockstate.isAir() || flag || block instanceof LiquidBlockContainer && - ((LiquidBlockContainer) block).canPlaceLiquid(level, pos, blockstate, this.getFluid()); - var fluidType = this.getFluid().getFluidType(); - Optional containedFluidStack = Optional.ofNullable(container).flatMap(FluidUtil::getFluidContained); - if (!flag1) { + boolean canReplace = blockstate.canBeReplaced(this.getFluid()); + boolean canPlace = blockstate.isAir() || canReplace || + block instanceof LiquidBlockContainer lbc && lbc.canPlaceLiquid(level, pos, blockstate, this.getFluid()); + + if (!canPlace) { return result != null && this.emptyContents(player, level, result.getBlockPos().relative(result.getDirection()), null, container); } + + var fluidType = this.getFluid().getFluidType(); + Optional containedFluidStack = Optional.ofNullable(container).flatMap(FluidUtil::getFluidContained); if (containedFluidStack.isPresent() && fluidType.isVaporizedOnPlacement(level, pos, containedFluidStack.get())) { fluidType.onVaporize(player, level, pos, containedFluidStack.get()); return true; } + if (doesFluidVaporize(material, level)) { int i = pos.getX(); int j = pos.getY(); @@ -118,44 +123,46 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, 2.6F + (level.random.nextFloat() - level.random.nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) { - level.addParticle(ParticleTypes.LARGE_SMOKE, (double) i + Math.random(), - (double) j + Math.random(), (double) k + Math.random(), 0.0D, 0.0D, 0.0D); + double xi = i + GTValues.RNG.nextDouble(); + double xj = j + GTValues.RNG.nextDouble(); + double xk = k + GTValues.RNG.nextDouble(); + level.addParticle(ParticleTypes.LARGE_SMOKE, xi, xj, xk, 0.0D, 0.0D, 0.0D); } return true; } + if (block instanceof LiquidBlockContainer blockContainer && blockContainer.canPlaceLiquid(level, pos, blockstate, getFluid())) { - blockContainer.placeLiquid(level, pos, blockstate, - ((FlowingFluid) this.getFluid()).getSource(false)); - this.playEmptySound(player, level, pos); - return true; + var flowingFluid = ((FlowingFluid) this.getFluid()); + blockContainer.placeLiquid(level, pos, blockstate, flowingFluid.getSource(false)); } else { - if(!level.isClientSide && flag && !blockstate.liquid()) { + if(!level.isClientSide && canReplace && !blockstate.liquid()) { level.destroyBlock(pos, true); } var fluidBlockState = material.getFluid().defaultFluidState().createLegacyBlock(); - if(!level.setBlock(pos, fluidBlockState, 11) && blockstate.getFluidState().isSource()) { + if (!level.setBlock(pos, fluidBlockState, 11) && blockstate.getFluidState().isSource()) { return false; } - - this.playEmptySound(player, level, pos); - return true; } + this.playEmptySound(player, level, pos); + return true; } private boolean doesFluidVaporize(Material mat, Level level) { - if(level.dimensionType().ultraWarm() && this.getFluid().defaultFluidState().is(FluidTags.WATER)) { - return true; // default water in nether behaviour + // water in nether behavior + if (level.dimensionType().ultraWarm() && this.getFluid().defaultFluidState().is(FluidTags.WATER)) { + return true; } - if(material.getFluidBuilder().hasFluidBlock()) { - var fluidStorage = material.getProperty(PropertyKey.FLUID).getStorage(); - if(fluidStorage.getQueuedBuilder(FluidStorageKeys.PLASMA) != null) { // has plasma - return true; - } - if (fluidStorage.getQueuedBuilder(FluidStorageKeys.GAS) != null) { // has gas - return true; - } + var fluidStorage = mat.getProperty(PropertyKey.FLUID).getStorage(); + var plasmaEntry = fluidStorage.getEntry(FluidStorageKeys.PLASMA); + var gasEntry = fluidStorage.getEntry(FluidStorageKeys.GAS); + if (plasmaEntry != null) { + var plasmaBuilder = plasmaEntry.getBuilder(); + return plasmaBuilder != null && plasmaBuilder.hasFluidBlock(); + } else if (gasEntry != null) { + var gasBuilder = gasEntry.getBuilder(); + return gasBuilder != null && gasBuilder.hasFluidBlock(); } return false; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java index cd1a740a00d..9b2da7f49af 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java @@ -54,8 +54,6 @@ public static void init() { } } } - - initFluidInteractions(); } public static void handleNonMaterialFluids(@NotNull Material material, @NotNull Fluid fluid) { @@ -67,14 +65,4 @@ public static void handleNonMaterialFluids(@NotNull Material material, @NotNull var property = material.getProperty(PropertyKey.FLUID); property.getStorage().store(FluidStorageKeys.LIQUID, fluid, null); } - - public static void initFluidInteractions() { - FluidInteractionRegistry.addInteraction(GTMaterials.Creosote.getFluid().getFluidType(), new FluidInteractionRegistry.InteractionInformation((level, currentPos, relativePos, currentState) -> { - if(level.getBlockState(relativePos).is(BlockTags.PLANKS) && level.getBlockState(relativePos) != GTBlocks.TREATED_WOOD_PLANK.getDefaultState()) { - if(GTValues.RNG.nextFloat() < 0.2f) level.destroyBlock(currentPos, false); - return true; - } - return false; - }, GTBlocks.TREATED_WOOD_PLANK.getDefaultState())); - } } From dc6d0135e9ba0de71be1428ec6ea6e98288ae363 Mon Sep 17 00:00:00 2001 From: Caedis Date: Wed, 23 Jul 2025 02:59:29 -0500 Subject: [PATCH 3/7] Add bucket fill sound --- .../gregtechceu/gtceu/api/fluids/forge/GTFluidImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) 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 index 2f3a2404728..cbc6e009b09 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/fluids/forge/GTFluidImpl.java +++ b/src/main/java/com/gregtechceu/gtceu/api/fluids/forge/GTFluidImpl.java @@ -4,15 +4,18 @@ 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; @@ -35,6 +38,12 @@ 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, From 66dd60ca61c3d37d9e49f0d27c4b76b99154fe7c Mon Sep 17 00:00:00 2001 From: Caedis Date: Wed, 23 Jul 2025 02:59:52 -0500 Subject: [PATCH 4/7] spotless --- .../com/gregtechceu/gtceu/api/item/GTBucketItem.java | 11 ++++++----- .../com/gregtechceu/gtceu/common/data/GTFluids.java | 4 ---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java index 31748633e84..43286e9e9c0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java @@ -4,9 +4,8 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.fluids.GTFluid; - -import com.gregtechceu.gtceu.api.fluids.store.FluidStorage; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; + import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -101,7 +100,8 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, Block block = blockstate.getBlock(); boolean canReplace = blockstate.canBeReplaced(this.getFluid()); boolean canPlace = blockstate.isAir() || canReplace || - block instanceof LiquidBlockContainer lbc && lbc.canPlaceLiquid(level, pos, blockstate, this.getFluid()); + block instanceof LiquidBlockContainer lbc && + lbc.canPlaceLiquid(level, pos, blockstate, this.getFluid()); if (!canPlace) { return result != null && this.emptyContents(player, level, @@ -110,7 +110,8 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, var fluidType = this.getFluid().getFluidType(); Optional containedFluidStack = Optional.ofNullable(container).flatMap(FluidUtil::getFluidContained); - if (containedFluidStack.isPresent() && fluidType.isVaporizedOnPlacement(level, pos, containedFluidStack.get())) { + if (containedFluidStack.isPresent() && + fluidType.isVaporizedOnPlacement(level, pos, containedFluidStack.get())) { fluidType.onVaporize(player, level, pos, containedFluidStack.get()); return true; } @@ -136,7 +137,7 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, var flowingFluid = ((FlowingFluid) this.getFluid()); blockContainer.placeLiquid(level, pos, blockstate, flowingFluid.getSource(false)); } else { - if(!level.isClientSide && canReplace && !blockstate.liquid()) { + if (!level.isClientSide && canReplace && !blockstate.liquid()) { level.destroyBlock(pos, true); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java index 9b2da7f49af..db7b5d1a282 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTFluids.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; -import com.gregtechceu.gtceu.api.GTValues; 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.registry.MaterialRegistry; @@ -11,14 +10,11 @@ import com.gregtechceu.gtceu.common.fluid.potion.PotionFluid; import com.gregtechceu.gtceu.data.recipe.CustomTags; -import net.minecraft.core.BlockPos; -import net.minecraft.tags.BlockTags; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; import net.minecraftforge.common.ForgeMod; import com.tterrag.registrate.util.entry.FluidEntry; -import net.minecraftforge.fluids.FluidInteractionRegistry; import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; From bc431a0bf4e62caa410798f80e7f5c48b46241e9 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sun, 27 Jul 2025 06:17:07 -0600 Subject: [PATCH 5/7] fix buckets voiding non placeable fluids --- .../com/gregtechceu/gtceu/api/item/GTBucketItem.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java index 43286e9e9c0..863505b4ab8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java @@ -136,18 +136,20 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, blockContainer.canPlaceLiquid(level, pos, blockstate, getFluid())) { var flowingFluid = ((FlowingFluid) this.getFluid()); blockContainer.placeLiquid(level, pos, blockstate, flowingFluid.getSource(false)); + this.playEmptySound(player, level, pos); + return true; } else { if (!level.isClientSide && canReplace && !blockstate.liquid()) { level.destroyBlock(pos, true); } var fluidBlockState = material.getFluid().defaultFluidState().createLegacyBlock(); - if (!level.setBlock(pos, fluidBlockState, 11) && blockstate.getFluidState().isSource()) { - return false; + if (level.setBlock(pos, fluidBlockState, 11) && level.getBlockState(pos).getFluidState().isSource()) { + this.playEmptySound(player, level, pos); + return true; } } - this.playEmptySound(player, level, pos); - return true; + return false; } private boolean doesFluidVaporize(Material mat, Level level) { From 3ed49f5807714808eb3906d8cb164d38b3827bea Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sun, 27 Jul 2025 06:42:00 -0600 Subject: [PATCH 6/7] fix non block fluids overwriting existing fluids --- .../gtceu/api/item/GTBucketItem.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java index 863505b4ab8..75ed3d410cd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.fluids.GTFluid; +import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKey; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; import net.minecraft.core.BlockPos; @@ -144,7 +145,8 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, } var fluidBlockState = material.getFluid().defaultFluidState().createLegacyBlock(); - if (level.setBlock(pos, fluidBlockState, 11) && level.getBlockState(pos).getFluidState().isSource()) { + if (hasFluidBlock(material) && level.setBlock(pos, fluidBlockState, 11) && + level.getBlockState(pos).getFluidState().isSource()) { this.playEmptySound(player, level, pos); return true; } @@ -152,6 +154,21 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, return false; } + private static boolean hasFluidBlock(Material mat) { + var fluidStorage = mat.getProperty(PropertyKey.FLUID).getStorage(); + + for (var key : FluidStorageKey.allKeys()) { + var fluidEntry = fluidStorage.getEntry(key); + if (fluidEntry != null) { + var fluidBuilder = fluidEntry.getBuilder(); + if (fluidBuilder != null && fluidBuilder.hasFluidBlock()) { + return true; + } + } + } + return false; + } + private boolean doesFluidVaporize(Material mat, Level level) { // water in nether behavior if (level.dimensionType().ultraWarm() && this.getFluid().defaultFluidState().is(FluidTags.WATER)) { From c82ee7ba8401812461a90c0fa2b064f9ccc4b287 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sat, 13 Sep 2025 23:46:45 -0600 Subject: [PATCH 7/7] add creosote to default placable fluid + update + spotless --- .../resources/assets/gtceu/blockstates/creosote.json | 7 +++++++ src/generated/resources/assets/gtceu/lang/en_ud.json | 4 +++- src/generated/resources/assets/gtceu/lang/en_us.json | 4 +++- .../resources/assets/gtceu/models/block/creosote.json | 5 +++++ .../java/com/gregtechceu/gtceu/api/item/GTBucketItem.java | 4 ++-- .../java/com/gregtechceu/gtceu/data/lang/LangHandler.java | 2 ++ 6 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 src/generated/resources/assets/gtceu/blockstates/creosote.json create mode 100644 src/generated/resources/assets/gtceu/models/block/creosote.json diff --git a/src/generated/resources/assets/gtceu/blockstates/creosote.json b/src/generated/resources/assets/gtceu/blockstates/creosote.json new file mode 100644 index 00000000000..4c8062c4ffa --- /dev/null +++ b/src/generated/resources/assets/gtceu/blockstates/creosote.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "gtceu:block/creosote" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 25ec9b8cc00..0f99e1d01c8 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -171,6 +171,7 @@ "block.gtceu.creative_data_access_hatch": "ɥɔʇɐH ssǝɔɔⱯ ɐʇɐᗡ ǝʌıʇɐǝɹƆ", "block.gtceu.creative_energy": "ʎbɹǝuƎ ǝʌıʇɐǝɹƆ", "block.gtceu.creative_tank": "ʞuɐ⟘ ǝʌıʇɐǝɹƆ", + "block.gtceu.creosote": "ǝʇosoǝɹƆ", "block.gtceu.crushing_wheels": "sןǝǝɥM buıɥsnɹƆ", "block.gtceu.cupronickel_coil_block": "ʞɔoןᗺ ןıoƆ ןǝʞɔıuoɹdnƆ", "block.gtceu.cyan_borderless_lamp": "dɯɐꞀ ssǝןɹǝpɹoᗺ uɐʎƆ", @@ -902,6 +903,7 @@ "block.gtceu.normal_optical_pipe": "ǝןqɐƆ ɹǝqıℲ ןɐɔıʇdO", "block.gtceu.normal_optical_pipe.tooltip": "ㄥ§ɐʇɐᗡ ɥɔɹɐǝsǝᴚɟ§ ɹo ㄥ§uoıʇɐʇndɯoƆɟ§ buıʇʇıɯsuɐɹ⟘ㄥ§", "block.gtceu.object_holder": "ɹǝpןoH ʇɔǝظqO", + "block.gtceu.oil": "ןıO", "block.gtceu.oil_heavy": "ןıO ʎʌɐǝH", "block.gtceu.oil_light": "ןıO ʇɥbıꞀ", "block.gtceu.oil_medium": "ןıO ʍɐᴚ", @@ -1822,7 +1824,7 @@ "config.gtceu.option.machines": "sǝuıɥɔɐɯ", "config.gtceu.option.machinesEmissiveTextures": "sǝɹnʇxǝ⟘ǝʌıssıɯƎsǝuıɥɔɐɯ", "config.gtceu.option.machinesHaveBERsByDefault": "ʇןnɐɟǝᗡʎᗺsᴚƎᗺǝʌɐHsǝuıɥɔɐɯ", - "config.gtceu.option.maintenanceTime": "ǝɯı⟘ǝɔuɐuǝʇuıɐɯ", + "config.gtceu.option.maintenanceCheckRate": "ǝʇɐᴚʞɔǝɥƆǝɔuɐuǝʇuıɐɯ", "config.gtceu.option.meHatchEnergyUsage": "ǝbɐs∩ʎbɹǝuƎɥɔʇɐHǝɯ", "config.gtceu.option.minerSpeed": "pǝǝdSɹǝuıɯ", "config.gtceu.option.minimap": "dɐɯıuıɯ", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 68e5ca61dae..7caccd146f5 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -171,6 +171,7 @@ "block.gtceu.creative_data_access_hatch": "Creative Data Access Hatch", "block.gtceu.creative_energy": "Creative Energy", "block.gtceu.creative_tank": "Creative Tank", + "block.gtceu.creosote": "Creosote", "block.gtceu.crushing_wheels": "Crushing Wheels", "block.gtceu.cupronickel_coil_block": "Cupronickel Coil Block", "block.gtceu.cyan_borderless_lamp": "Cyan Borderless Lamp", @@ -902,6 +903,7 @@ "block.gtceu.normal_optical_pipe": "Optical Fiber Cable", "block.gtceu.normal_optical_pipe.tooltip": "§7Transmitting §fComputation§7 or §fResearch Data§7", "block.gtceu.object_holder": "Object Holder", + "block.gtceu.oil": "Oil", "block.gtceu.oil_heavy": "Heavy Oil", "block.gtceu.oil_light": "Light Oil", "block.gtceu.oil_medium": "Raw Oil", @@ -1822,7 +1824,7 @@ "config.gtceu.option.machines": "machines", "config.gtceu.option.machinesEmissiveTextures": "machinesEmissiveTextures", "config.gtceu.option.machinesHaveBERsByDefault": "machinesHaveBERsByDefault", - "config.gtceu.option.maintenanceTime": "maintenanceTime", + "config.gtceu.option.maintenanceCheckRate": "maintenanceCheckRate", "config.gtceu.option.meHatchEnergyUsage": "meHatchEnergyUsage", "config.gtceu.option.minerSpeed": "minerSpeed", "config.gtceu.option.minimap": "minimap", diff --git a/src/generated/resources/assets/gtceu/models/block/creosote.json b/src/generated/resources/assets/gtceu/models/block/creosote.json new file mode 100644 index 00000000000..0dd52ad4701 --- /dev/null +++ b/src/generated/resources/assets/gtceu/models/block/creosote.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "gtceu:block/fluids/fluid.creosote" + } +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java index 75ed3d410cd..510a7348163 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/GTBucketItem.java @@ -145,8 +145,8 @@ public boolean emptyContents(@Nullable Player player, Level level, BlockPos pos, } var fluidBlockState = material.getFluid().defaultFluidState().createLegacyBlock(); - if (hasFluidBlock(material) && level.setBlock(pos, fluidBlockState, 11) && - level.getBlockState(pos).getFluidState().isSource()) { + if (hasFluidBlock(material) && level.setBlock(pos, fluidBlockState, Block.UPDATE_ALL_IMMEDIATE) && + fluidBlockState.getFluidState().isSource()) { this.playEmptySound(player, level, pos); return true; } diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index e7e81682ab2..0a48a7e2247 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -539,6 +539,8 @@ public static void init(RegistrateLangProvider provider) { replace(provider, "block.gtceu.oil_heavy", "Heavy Oil"); replace(provider, "block.gtceu.oil_light", "Light Oil"); replace(provider, "block.gtceu.oil_medium", "Raw Oil"); + replace(provider, "block.gtceu.oil", "Oil"); + replace(provider, "block.gtceu.creosote", "Creosote"); replace(provider, GTBlocks.BATTERY_EMPTY_TIER_I.get().getDescriptionId(), "Empty Tier I Capacitor"); replace(provider, GTBlocks.BATTERY_LAPOTRONIC_EV.get().getDescriptionId(), "EV Lapotronic Capacitor");