diff --git a/build.gradle b/build.gradle index 7929aabc8..52505e993 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java-library' id 'maven-publish' - id 'net.neoforged.moddev' version '2.0.99' + id 'net.neoforged.moddev' version '2.0.141' id 'idea' } @@ -191,7 +191,6 @@ dependencies { // For more info: // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html - annotationProcessor "org.spongepowered:mixin:0.8.5:processor" } // This block of code expands all declared replace properties in the specified resource targets. @@ -237,6 +236,9 @@ tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation options.warnings = false } +tasks.named("processResources", ProcessResources) { + duplicatesStrategy = DuplicatesStrategy.WARN +} // IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior. idea { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a793a..19a6bdeb8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/generated/resources/data/c/tags/fluid/ignites.json b/src/generated/resources/data/c/tags/fluid/ignites.json new file mode 100644 index 000000000..e29a81a7e --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/ignites.json @@ -0,0 +1,36 @@ +{ + "values": [ + { + "id": "#c:biofuel", + "required": false + }, + { + "id": "#c:creosote", + "required": false + }, + { + "id": "#c:crude_oil", + "required": false + }, + { + "id": "#c:plantoil", + "required": false + }, + { + "id": "#c:ethanol", + "required": false + }, + { + "id": "#c:gasoline", + "required": false + }, + { + "id": "#c:diesel", + "required": false + }, + { + "id": "#c:biodiesel", + "required": false + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/createaddition/recipe/filling/cake.json b/src/generated/resources/data/createaddition/recipe/filling/cake.json index 322ca0045..cbb40149e 100644 --- a/src/generated/resources/data/createaddition/recipe/filling/cake.json +++ b/src/generated/resources/data/createaddition/recipe/filling/cake.json @@ -5,9 +5,9 @@ "item": "createaddition:cake_base_baked" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:milk" + "tag": "c:milk" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/filling/chocolate_cake.json b/src/generated/resources/data/createaddition/recipe/filling/chocolate_cake.json index a87e49feb..df9b46b70 100644 --- a/src/generated/resources/data/createaddition/recipe/filling/chocolate_cake.json +++ b/src/generated/resources/data/createaddition/recipe/filling/chocolate_cake.json @@ -5,7 +5,7 @@ "item": "createaddition:cake_base_baked" }, { - "type": "fluid_stack", + "type": "neoforge:single", "amount": 500, "fluid": "create:chocolate" } diff --git a/src/generated/resources/data/createaddition/recipe/filling/honey_cake.json b/src/generated/resources/data/createaddition/recipe/filling/honey_cake.json index 6d9e4d5e8..f90c7c3b0 100644 --- a/src/generated/resources/data/createaddition/recipe/filling/honey_cake.json +++ b/src/generated/resources/data/createaddition/recipe/filling/honey_cake.json @@ -5,9 +5,9 @@ "item": "createaddition:cake_base_baked" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 500, - "fluid_tag": "c:honey" + "tag": "c:honey" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/biodiesel.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/biodiesel.json index e35361675..a43d1af15 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/biodiesel.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/biodiesel.json @@ -9,9 +9,9 @@ "burn_time": 24000, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:biodiesel" + "tag": "c:biodiesel" } ], "results": [] diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/biofuel.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/biofuel.json index 44ae60bbd..fed76a68c 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/biofuel.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/biofuel.json @@ -1,13 +1,13 @@ { "type": "createaddition:liquid_burning", - "burn_time": 24000, + "burn_time": 2400, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:biofuel" + "tag": "c:biofuel" } ], "results": [], "superheated": true -} +} \ No newline at end of file diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/creosote.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/creosote.json index 5ba8a2ff8..92377806b 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/creosote.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/creosote.json @@ -9,9 +9,9 @@ "burn_time": 4800, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:creosote" + "tag": "c:creosote" } ], "results": [] diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/crude_oil.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/crude_oil.json index c0356d73a..abb22eb2c 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/crude_oil.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/crude_oil.json @@ -9,9 +9,9 @@ "burn_time": 9600, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:crude_oil" + "tag": "c:crude_oil" } ], "results": [] diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/diesel.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/diesel.json index 7e2500120..4b2ca45fa 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/diesel.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/diesel.json @@ -9,9 +9,9 @@ "burn_time": 24000, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:diesel" + "tag": "c:diesel" } ], "results": [] diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/ethanol.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/ethanol.json index 70b3bd279..06ef496eb 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/ethanol.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/ethanol.json @@ -9,9 +9,9 @@ "burn_time": 8000, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:ethanol" + "tag": "c:ethanol" } ], "results": [] diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/gasoline.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/gasoline.json index be61e3e8b..057925f55 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/gasoline.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/gasoline.json @@ -9,9 +9,9 @@ "burn_time": 24000, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:gasoline" + "tag": "c:gasoline" } ], "results": [] diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/lava.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/lava.json index 72aa69dbe..db123c5d7 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/lava.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/lava.json @@ -3,9 +3,9 @@ "burn_time": 20000, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "minecraft:lava" + "tag": "minecraft:lava" } ], "results": [] diff --git a/src/generated/resources/data/createaddition/recipe/liquid_burning/plantoil.json b/src/generated/resources/data/createaddition/recipe/liquid_burning/plantoil.json index 1a93e3fbe..d4fb6c2a7 100644 --- a/src/generated/resources/data/createaddition/recipe/liquid_burning/plantoil.json +++ b/src/generated/resources/data/createaddition/recipe/liquid_burning/plantoil.json @@ -3,9 +3,9 @@ "burn_time": 4800, "ingredients": [ { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 1000, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [] diff --git a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_crops.json b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_crops.json index e99a5fab3..c04c2509d 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_crops.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_crops.json @@ -9,9 +9,9 @@ "tag": "c:crops" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 100, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_flowers.json b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_flowers.json index 1a56d1773..331da7ad8 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_flowers.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_flowers.json @@ -9,9 +9,9 @@ "tag": "minecraft:flowers" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 100, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_honeycomb.json b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_honeycomb.json index 90a307663..607f930e2 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_honeycomb.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_honeycomb.json @@ -6,9 +6,9 @@ "item": "minecraft:honeycomb" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 100, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_leaves.json b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_leaves.json index d56c4747d..dea910afa 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_leaves.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_leaves.json @@ -12,9 +12,9 @@ "tag": "minecraft:leaves" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 100, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_plant_foods.json b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_plant_foods.json index 435276260..b3380df85 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_plant_foods.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_plant_foods.json @@ -9,9 +9,9 @@ "tag": "createaddition:plant_foods" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 100, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_plants.json b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_plants.json index b77ab4173..db2e838fe 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_plants.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_plants.json @@ -12,9 +12,9 @@ "tag": "createaddition:plants" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 100, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_saplings.json b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_saplings.json index 83c39690f..3d2031a02 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_saplings.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_saplings.json @@ -12,9 +12,9 @@ "tag": "minecraft:saplings" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 100, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_stricks.json b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_stricks.json index a3b39a224..2d78134b4 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_stricks.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/biomass_from_stricks.json @@ -27,9 +27,9 @@ "item": "minecraft:stick" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 100, - "fluid_tag": "c:plantoil" + "tag": "c:plantoil" } ], "results": [ diff --git a/src/generated/resources/data/createaddition/recipe/mixing/netherrack.json b/src/generated/resources/data/createaddition/recipe/mixing/netherrack.json index 8ec139022..7881070d3 100644 --- a/src/generated/resources/data/createaddition/recipe/mixing/netherrack.json +++ b/src/generated/resources/data/createaddition/recipe/mixing/netherrack.json @@ -8,9 +8,9 @@ "item": "create:cinder_flour" }, { - "type": "fluid_tag", + "type": "neoforge:tag", "amount": 25, - "fluid_tag": "minecraft:lava" + "tag": "minecraft:lava" } ], "results": [ diff --git a/src/main/java/com/mrh0/createaddition/datagen/TagProvider/CAFluidTagProvider.java b/src/main/java/com/mrh0/createaddition/datagen/TagProvider/CAFluidTagProvider.java index 05a0c9450..2b85db6c4 100644 --- a/src/main/java/com/mrh0/createaddition/datagen/TagProvider/CAFluidTagProvider.java +++ b/src/main/java/com/mrh0/createaddition/datagen/TagProvider/CAFluidTagProvider.java @@ -5,11 +5,10 @@ import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.data.tags.FluidTagsProvider; -import net.minecraft.tags.FluidTags; -import net.minecraft.world.level.material.Fluid; import net.neoforged.neoforge.common.data.ExistingFileHelper; import org.jetbrains.annotations.Nullable; +import java.util.List; import java.util.concurrent.CompletableFuture; public class CAFluidTagProvider extends FluidTagsProvider { @@ -28,6 +27,18 @@ protected void addTags(HolderLookup.Provider provider) { CAFluids.SEED_OIL.getSource() ); + var ignites = tag(CATagRegister.Fluids.IGNITES); + List.of( + CATagRegister.Fluids.BIOFUEL, + CATagRegister.Fluids.CREOSOTE, + CATagRegister.Fluids.CRUDE_OIL, + CATagRegister.Fluids.PLANTOIL, + CATagRegister.Fluids.ETHANOL, + CATagRegister.Fluids.GASOLINE, + CATagRegister.Fluids.DIESEL, + CATagRegister.Fluids.BIODIESEL + ).forEach(ignites::addOptionalTag); + /* tag(FluidTags.WATER).add( CAFluids.SEED_OIL.get(), diff --git a/src/main/java/com/mrh0/createaddition/datagen/TagProvider/CATagRegister.java b/src/main/java/com/mrh0/createaddition/datagen/TagProvider/CATagRegister.java index fbb442ef8..d627c2402 100644 --- a/src/main/java/com/mrh0/createaddition/datagen/TagProvider/CATagRegister.java +++ b/src/main/java/com/mrh0/createaddition/datagen/TagProvider/CATagRegister.java @@ -115,6 +115,7 @@ public static class Fluids { public static final TagKey GASOLINE = commonTags("gasoline"); public static final TagKey DIESEL = commonTags("diesel"); public static final TagKey BIODIESEL = commonTags("biodiesel"); + public static final TagKey IGNITES = commonTags("ignites"); public static TagKey commonTags(String folder, String name) { return FluidTags.create(ResourceLocation.fromNamespaceAndPath("c", String.format("%s/%s", folder, name))); diff --git a/src/main/java/com/mrh0/createaddition/mixin/BaseFireBlockMixin.java b/src/main/java/com/mrh0/createaddition/mixin/BaseFireBlockMixin.java new file mode 100644 index 000000000..3af644861 --- /dev/null +++ b/src/main/java/com/mrh0/createaddition/mixin/BaseFireBlockMixin.java @@ -0,0 +1,33 @@ +package com.mrh0.createaddition.mixin; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mrh0.createaddition.datagen.TagProvider.CATagRegister; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(BaseFireBlock.class) +public class BaseFireBlockMixin { + + @WrapOperation( + method = "canBePlacedAt(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)Z", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/block/state/BlockState;isAir()Z" + ) + ) + private static boolean canPlaceFire(BlockState state, Operation original) { + boolean isAir = original.call(state); + FluidState fluid = state.getFluidState(); + if (fluid.isEmpty()) { + return isAir; + } + + boolean ignites = fluid.is(CATagRegister.Fluids.IGNITES); + + return isAir || ignites; + } +} diff --git a/src/main/java/com/mrh0/createaddition/mixin/FireBlockInvoker.java b/src/main/java/com/mrh0/createaddition/mixin/FireBlockInvoker.java new file mode 100644 index 000000000..e92a2605d --- /dev/null +++ b/src/main/java/com/mrh0/createaddition/mixin/FireBlockInvoker.java @@ -0,0 +1,14 @@ +package com.mrh0.createaddition.mixin; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.FireBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(FireBlock.class) +public interface FireBlockInvoker { + @Invoker("getStateForPlacement") + BlockState invokeSpreadPlacement(BlockGetter level, BlockPos pos); +} diff --git a/src/main/java/com/mrh0/createaddition/mixin/FireBlockMixin.java b/src/main/java/com/mrh0/createaddition/mixin/FireBlockMixin.java new file mode 100644 index 000000000..f1533ba61 --- /dev/null +++ b/src/main/java/com/mrh0/createaddition/mixin/FireBlockMixin.java @@ -0,0 +1,109 @@ +package com.mrh0.createaddition.mixin; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import com.mrh0.createaddition.datagen.TagProvider.CATagRegister; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.FireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(FireBlock.class) +public class FireBlockMixin { + @WrapOperation( + method = "canCatchFire(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)Z", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/block/state/BlockState;isFlammable(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)Z" + ) + ) + private static boolean igniteFluid(BlockState instance, BlockGetter level, BlockPos blockPos, Direction direction, Operation original) { + boolean isFlammableBlock = original.call(instance, level, blockPos, direction); + if (isFlammableBlock) { + return true; + } + + FluidState fluidState = level.getFluidState(blockPos); + return fluidState.is(CATagRegister.Fluids.IGNITES); + } + + @ModifyExpressionValue( + method = "getIgniteOdds(Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;)I", + at = @At(value = "INVOKE", target = "Ljava/lang/Math;max(II)I") + ) + private int considerFluidFireSpreadSpeed(int igniteOdd, LevelReader level, BlockPos origin, @Local Direction direction) { + BlockPos fluidPos = origin.relative(direction); + + FluidState fluidState = level.getFluidState(fluidPos); + if (fluidState.isEmpty()) { + return igniteOdd; + } + if (!fluidState.is(CATagRegister.Fluids.IGNITES)) { + return igniteOdd; + } + int fireSpeed = 75; + if (level instanceof Level weatherLevel) { + if (weatherLevel.isRainingAt(fluidPos)) { + fireSpeed = 100; + } + } + + return Math.max(igniteOdd, fireSpeed); + } + + @ModifyExpressionValue( + method = "checkBurnOut(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;ILnet/minecraft/util/RandomSource;ILnet/minecraft/core/Direction;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;getFlammability(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)I") + ) + private int considerFluidFlammability(int original, Level level, BlockPos pos) { + FluidState fluidState = level.getFluidState(pos); + if (fluidState.isEmpty()) { + return original; + } + + if (!fluidState.is(CATagRegister.Fluids.IGNITES)) { + return original; + } + + int flammability = 250; + if (level.isRainingAt(pos)) { + flammability = 300; + } + + return Math.max(original, flammability); + } + + @ModifyExpressionValue( + method = "tick(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/util/RandomSource;)V", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;isFireSource(Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)Z") + ) + private boolean keepFire( + boolean original, + @Local(argsOnly = true) ServerLevel level, + @Local(argsOnly = true) BlockPos pos + ) { + if (original) { + return true; + } + + return Direction.Plane.HORIZONTAL.stream().anyMatch(direction -> { + BlockPos fluidPos = pos.relative(direction); + FluidState fluid = level.getFluidState(fluidPos); + + if (fluid.isEmpty()) { + return false; + } + + return fluid.is(CATagRegister.Fluids.IGNITES); + }); + } +} diff --git a/src/main/java/com/mrh0/createaddition/mixin/FlowingFluidMixin.java b/src/main/java/com/mrh0/createaddition/mixin/FlowingFluidMixin.java new file mode 100644 index 000000000..0d4ac085f --- /dev/null +++ b/src/main/java/com/mrh0/createaddition/mixin/FlowingFluidMixin.java @@ -0,0 +1,98 @@ +package com.mrh0.createaddition.mixin; + +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mrh0.createaddition.datagen.TagProvider.CATagRegister; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.FireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(FlowingFluid.class) +public class FlowingFluidMixin { + @WrapMethod( + method = "canSpreadTo(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/material/FluidState;Lnet/minecraft/world/level/material/Fluid;)Z" + ) + private boolean protectFire( + BlockGetter level, + BlockPos fromPos, + BlockState fromBlockState, + Direction direction, + BlockPos toPos, + BlockState toBlockState, + FluidState toFluidState, + Fluid fluid, + Operation original + ) { + boolean canSpreadTo = original.call(level, fromPos, fromBlockState, direction, toPos, toBlockState, toFluidState, fluid); + if (!canSpreadTo) { + return false; + } + + if (direction == Direction.DOWN) { + return true; + } + + boolean ignites = fluid.is(CATagRegister.Fluids.IGNITES); + if (!ignites) { + return true; + } + + return !toBlockState.is(BlockTags.FIRE); + } + + @WrapOperation( + method = "spreadTo(Lnet/minecraft/world/level/LevelAccessor;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/world/level/material/FluidState;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/LevelAccessor;setBlock(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;I)Z" + ) + ) + private boolean spreadFire( + LevelAccessor level, + BlockPos blockPos, + BlockState fluidBlockState, + int i, + Operation original, + LevelAccessor duplicate1, + BlockPos duplicate2, + BlockState toReplace, + Direction flowDirection, + FluidState fluidState + ) { + boolean result = original.call(level, blockPos, fluidBlockState, i); + if (level instanceof Level) { + if (!((Level) level).getGameRules().getBoolean(GameRules.RULE_DOFIRETICK)) { + return result; + } + } + + + if (flowDirection == Direction.DOWN && fluidState.is(CATagRegister.Fluids.IGNITES) && toReplace.is(BlockTags.FIRE)) { + Direction.Plane.HORIZONTAL.stream().forEach(direction -> { + BlockPos side = blockPos.relative(direction); + if (level.isEmptyBlock(side) && toReplace.canSurvive(level, side)) { + BlockState fireState; + if (toReplace.getBlock() instanceof FireBlock fire) { + fireState = ((FireBlockInvoker)fire).invokeSpreadPlacement(level, side); + } else { + fireState = toReplace.getBlock().defaultBlockState(); + } + level.setBlock(side, fireState, 3); + } + }); + } + return result; + } +} diff --git a/src/main/resources/assets/createaddition/lang/en_us.json b/src/main/resources/assets/createaddition/lang/en_us.json index 6304809d0..8f8e24cb1 100644 --- a/src/main/resources/assets/createaddition/lang/en_us.json +++ b/src/main/resources/assets/createaddition/lang/en_us.json @@ -325,5 +325,7 @@ "effect.createaddition.shocking.description": "Causes severely reduced movement speed", "createaddition.subtitle.loud_zap": "Tesla Coil zaps", - "createaddition.subtitle.little_zap": "Tesla Coil sparks" + "createaddition.subtitle.little_zap": "Tesla Coil sparks", + + "tag.fluid.c.ignites": "Ignitable fluids" } diff --git a/src/main/resources/assets/createaddition/lang/ko_kr.json b/src/main/resources/assets/createaddition/lang/ko_kr.json index e7577708b..8facd2e0d 100644 --- a/src/main/resources/assets/createaddition/lang/ko_kr.json +++ b/src/main/resources/assets/createaddition/lang/ko_kr.json @@ -36,7 +36,7 @@ "item.createaddition.diamond_grit": "다이아몬드 그릿", "item.createaddition.diamond_grit_sandpaper": "다이아몬드 그릿 사포", - "item.createaddition.diamond_grit_sandpaper.tooltip": "다이아몬드 그릿 사포", + "item.createaddition.diamond_grit_sandpaper.tooltip.summary": "다이아몬드 그릿 사포", "item.createaddition.zinc_sheet": "아연 판", @@ -109,7 +109,7 @@ "item.createaddition.spool": "빈 전선 타래", "item.createaddition.spool.nbt": "연결 위치를 저장합니다.", - "item.createaddition.spool.tooltip": "전선 타래", + "item.createaddition.spool.tooltip.summary": "전선 타래", "item.createaddition.spool.tooltip.condition1": "연결된 두 단자를 우클릭", "item.createaddition.spool.tooltip.behaviour1": "연결된 전선을 제거합니다. 사용 후 _전선이 감긴 타래_가 남습니다.", @@ -211,7 +211,7 @@ "block.createaddition.liquid_blaze_burner": "빨대를 문 블레이즈 버너", - "itemGroup.createaddition:main":"Create Crafts & Additions", + "itemGroup.createaddition.main":"Create Crafts & Additions", "createaddition.ponder.tag.electric": "전기 기구", "createaddition.ponder.tag.electric.description": "전기를 사용하는 장치입니다.", @@ -287,12 +287,14 @@ "createaddition.schedule.condition.energy_threshold": "에너지 저장소 조건", "createaddition.schedule.condition.threshold.unit": "Kfe", "createaddition.schedule.condition.threshold.energy": "에너지", - - "death.attack.barbed_wire": "%1$s이(가) 철조망을 넘으려 했습니다", - "death.attack.barbed_wire.player": "%1$s이(가) %2$s와(과) 싸우다가 철조망을 넘으려 했습니다", + + "death.attack.createaddition.barbed_wire": "%1$s이(가) 철조망을 넘으려 했습니다", + "death.attack.createaddition.barbed_wire.player": "%1$s이(가) %2$s와(과) 싸우다가 철조망을 넘으려 했습니다", "effect.createaddition.shocking":"쇼크", - "death.attack.tesla_coil": "%1$s이(가) 치명적인 전기 충격을 받았습니다", - "death.attack.tesla_coil.player": "%1$s이(가) %2$s와(과) 싸우다가 치명적인 전기 충격을 받았습니다", - "effect.createaddition.shocking.description": "이동 속도를 심각하게 감소시킵니다" + "death.attack.createaddition.tesla_coil": "%1$s이(가) 치명적인 전기 충격을 받았습니다", + "death.attack.createaddition.tesla_coil.player": "%1$s이(가) %2$s와(과) 싸우다가 치명적인 전기 충격을 받았습니다", + "effect.createaddition.shocking.description": "이동 속도를 심각하게 감소시킵니다", + + "tag.fluid.c.ignites": "점화 가능 액체" } diff --git a/src/main/resources/assets/createaddition/models/block/connector/girder_base.json b/src/main/resources/assets/createaddition/models/block/connector/girder_base.json index cde67163c..2daabcce6 100644 --- a/src/main/resources/assets/createaddition/models/block/connector/girder_base.json +++ b/src/main/resources/assets/createaddition/models/block/connector/girder_base.json @@ -2,7 +2,7 @@ "credit": "Made with Blockbench", "textures": { "0": "create:block/girder", - "particle": "create:block/chute_block" + "particle": "create:block/industrial_iron_block" }, "elements": [ { diff --git a/src/main/resources/createaddition.mixins.json b/src/main/resources/createaddition.mixins.json index b522a45c5..dd370a5c1 100644 --- a/src/main/resources/createaddition.mixins.json +++ b/src/main/resources/createaddition.mixins.json @@ -1,11 +1,15 @@ { - "required": true, - "priority": 1000, - "package": "com.mrh0.createaddition.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - "BlockMovementChecksMixin", - "ContraptionMixin" - ], - "minVersion": "0.8.5" + "required": true, + "priority": 1000, + "package": "com.mrh0.createaddition.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [ + "BaseFireBlockMixin", + "BlockMovementChecksMixin", + "ContraptionMixin", + "FireBlockInvoker", + "FireBlockMixin", + "FlowingFluidMixin" + ], + "minVersion": "0.8.5" }