Skip to content

Commit 70bbe36

Browse files
Update to Create 6.0.7
1 parent 1244c16 commit 70bbe36

14 files changed

Lines changed: 101 additions & 306 deletions

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ minecraft_version=1.21.1
1313
supported_versions=1.21.1, 1.21
1414
mod_version=2101.3.1
1515

16-
neoforge_version=21.1.199
16+
neoforge_version=21.1.200
1717
neoForge.parchment.minecraftVersion=1.21.1
1818
neoForge.parchment.mappingsVersion=2024.11.17
1919
kubejs_version=2101.7.2-build.285
2020

2121
jei_version=19.25.0.322
2222
flywheel_version=1.0.2
23-
create_version=6.0.6-99
24-
ponder_version=1.0.56
23+
create_version=6.0.7-159
24+
ponder_version=1.0.63
2525
registrate_version=MC1.21-1.3.0+62

src/main/java/dev/latvian/mods/kubejs/create/KubeJSCreatePlugin.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,14 @@
22

33
import com.simibubi.create.Create;
44
import com.simibubi.create.content.processing.recipe.ProcessingOutput;
5-
import com.simibubi.create.foundation.fluid.FluidIngredient;
65
import dev.latvian.mods.kubejs.create.events.BoilerHeaterHandlerEvent;
76
import dev.latvian.mods.kubejs.create.events.CreateEvents;
87
import dev.latvian.mods.kubejs.create.events.SpecialFluidHandlerEvent;
98
import dev.latvian.mods.kubejs.create.events.SpecialSpoutHandlerEvent;
109
import dev.latvian.mods.kubejs.create.item.SandpaperItemBuilder;
1110
import dev.latvian.mods.kubejs.create.item.SequencedAssemblyItemBuilder;
12-
import dev.latvian.mods.kubejs.create.recipe.CreateFluidIngredientRecipeComponent;
1311
import dev.latvian.mods.kubejs.create.recipe.CreateRecipeComponents;
1412
import dev.latvian.mods.kubejs.create.recipe.ProcessingOutputRecipeComponent;
15-
import dev.latvian.mods.kubejs.create.wrapper.FluidIngredientWrapper;
1613
import dev.latvian.mods.kubejs.create.wrapper.KubeCreateOutput;
1714
import dev.latvian.mods.kubejs.event.EventGroupRegistry;
1815
import dev.latvian.mods.kubejs.plugin.KubeJSPlugin;
@@ -54,7 +51,6 @@ public void registerBindings(BindingRegistry bindings) {
5451

5552
@Override
5653
public void registerTypeWrappers(TypeWrapperRegistry registry) {
57-
registry.register(FluidIngredient.class, FluidIngredientWrapper::wrap);
5854
registry.register(ProcessingOutput.class, KubeCreateOutput::wrapProcessingOutput);
5955
}
6056

@@ -78,7 +74,7 @@ public void registerRecipeSchemas(RecipeSchemaRegistry registry) {
7874
@Override
7975
public void registerRecipeComponents(RecipeComponentTypeRegistry registry) {
8076
registry.register(ProcessingOutputRecipeComponent.TYPE);
81-
registry.register(CreateFluidIngredientRecipeComponent.TYPE);
77+
registry.register(CreateRecipeComponents.SIZED_FLUID_INGREDIENT);
8278
registry.register(CreateRecipeComponents.HEAT_CONDITION);
8379
}
8480
}

src/main/java/dev/latvian/mods/kubejs/create/core/KubeFluidTagIngredient.java

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package dev.latvian.mods.kubejs.create.core.mixin;
2+
3+
import net.neoforged.neoforge.fluids.FluidStack;
4+
import net.neoforged.neoforge.fluids.crafting.FluidIngredient;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.gen.Invoker;
7+
8+
import java.util.stream.Stream;
9+
10+
@Mixin(FluidIngredient.class)
11+
public interface FluidIngredientStacksInvoker {
12+
@Invoker
13+
Stream<FluidStack> callGenerateStacks();
14+
}

src/main/java/dev/latvian/mods/kubejs/create/core/mixin/FluidTagIngredientMixin.java

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,73 @@
11
package dev.latvian.mods.kubejs.create.events;
22

33
import com.simibubi.create.api.effect.OpenPipeEffectHandler;
4-
import com.simibubi.create.foundation.fluid.FluidIngredient;
5-
import dev.latvian.mods.kubejs.create.wrapper.FluidIngredientWrapper;
4+
import com.simibubi.create.api.registry.SimpleRegistry;
5+
import dev.latvian.mods.kubejs.create.core.mixin.FluidIngredientStacksInvoker;
66
import dev.latvian.mods.kubejs.event.KubeEvent;
77
import net.minecraft.world.level.Level;
8+
import net.minecraft.world.level.material.Fluid;
89
import net.minecraft.world.phys.AABB;
10+
import net.neoforged.neoforge.common.NeoForge;
11+
import net.neoforged.neoforge.event.TagsUpdatedEvent;
912
import net.neoforged.neoforge.fluids.FluidStack;
13+
import net.neoforged.neoforge.fluids.crafting.FluidIngredient;
14+
import org.jetbrains.annotations.Nullable;
15+
16+
import java.util.Set;
17+
import java.util.stream.Collectors;
1018

1119
public class SpecialFluidHandlerEvent implements KubeEvent {
1220
public interface PipeHandler {
1321
void apply(Level level, AABB aabb, FluidStack fluid);
1422
}
1523

1624
public void add(FluidIngredient fluidIngredient, PipeHandler handler) {
17-
OpenPipeEffectHandler.REGISTRY.registerProvider(FluidIngredientWrapper.createEffectHandler(fluidIngredient, handler));
25+
OpenPipeEffectHandler.REGISTRY.registerProvider(createEffectHandler(fluidIngredient, handler));
26+
}
27+
28+
static SimpleRegistry.Provider<Fluid, OpenPipeEffectHandler> createEffectHandler(FluidIngredient fluidIngredient, SpecialFluidHandlerEvent.PipeHandler handler) {
29+
return new SimpleRegistry.Provider<>() {
30+
// hack to make it so people don't need to use Supplier<FluidIngredient> as a param, this sucks
31+
Set<Fluid> validFluids = null;
32+
33+
final OpenPipeEffectHandler internalHandler = (level, aabb, fluid) -> {
34+
if (fluidIngredient.test(fluid)) {
35+
handler.apply(level, aabb, fluid);
36+
}
37+
};
38+
39+
@Override
40+
@Nullable
41+
public OpenPipeEffectHandler get(Fluid fluidIn) {
42+
if (getValidFluids().contains(fluidIn)) {
43+
return internalHandler;
44+
} else {
45+
return null;
46+
}
47+
}
48+
49+
private Set<Fluid> getValidFluids() {
50+
if (validFluids == null) {
51+
// this relies on the stacks returned by the ingredient also being
52+
// exactly all the fluids that are accepted, but that should be true
53+
// for the vast majority
54+
var stacks = ((FluidIngredientStacksInvoker) fluidIngredient).callGenerateStacks();
55+
56+
validFluids = stacks.map(FluidStack::getFluid).collect(Collectors.toSet());
57+
}
58+
59+
return validFluids;
60+
}
61+
62+
@Override
63+
public void onRegister(Runnable invalidate) {
64+
NeoForge.EVENT_BUS.addListener((TagsUpdatedEvent event) -> {
65+
if (event.shouldUpdateStaticData()) {
66+
invalidate.run();
67+
validFluids = null;
68+
}
69+
});
70+
}
71+
};
1872
}
1973
}
Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package dev.latvian.mods.kubejs.create.events;
22

33
import com.simibubi.create.api.behaviour.spouting.BlockSpoutingBehaviour;
4+
import com.simibubi.create.api.registry.SimpleRegistry;
45
import dev.latvian.mods.kubejs.block.state.BlockStatePredicate;
5-
import dev.latvian.mods.kubejs.create.wrapper.FluidIngredientWrapper;
66
import dev.latvian.mods.kubejs.event.KubeEvent;
77
import dev.latvian.mods.kubejs.level.LevelBlock;
88
import net.minecraft.resources.ResourceLocation;
9+
import net.minecraft.world.level.block.Block;
910
import net.neoforged.neoforge.fluids.FluidStack;
1011

1112
public class SpecialSpoutHandlerEvent implements KubeEvent {
@@ -15,6 +16,18 @@ public interface SpoutHandler {
1516
}
1617

1718
public void add(ResourceLocation path, BlockStatePredicate block, SpoutHandler handler) {
18-
BlockSpoutingBehaviour.BY_BLOCK.registerProvider(FluidIngredientWrapper.createSpoutingHandler(block, handler));
19+
BlockSpoutingBehaviour.BY_BLOCK.registerProvider(createSpoutingHandler(block, handler));
20+
}
21+
22+
static SimpleRegistry.Provider<Block, BlockSpoutingBehaviour> createSpoutingHandler(BlockStatePredicate block, SpecialSpoutHandlerEvent.SpoutHandler handler) {
23+
final BlockSpoutingBehaviour internalHandler = (world, pos, spout, availableFluid, simulate) -> {
24+
if (!block.test(world.getBlockState(pos))) {
25+
return 0;
26+
}
27+
28+
return (int) handler.fillBlock(world.kjs$getBlock(pos), availableFluid, simulate);
29+
};
30+
31+
return blockIn -> block.testBlock(blockIn) ? internalHandler : null;
1932
}
2033
}

src/main/java/dev/latvian/mods/kubejs/create/recipe/CreateFluidIngredientRecipeComponent.java

Lines changed: 0 additions & 74 deletions
This file was deleted.

src/main/java/dev/latvian/mods/kubejs/create/recipe/CreateInputFluid.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/main/java/dev/latvian/mods/kubejs/create/recipe/CreateRecipeComponents.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,17 @@
22

33
import com.simibubi.create.Create;
44
import com.simibubi.create.content.processing.recipe.HeatCondition;
5+
import com.simibubi.create.foundation.codec.CreateCodecs;
56
import dev.latvian.mods.kubejs.recipe.component.EnumComponent;
67
import dev.latvian.mods.kubejs.recipe.component.RecipeComponentType;
8+
import dev.latvian.mods.kubejs.recipe.component.SizedFluidIngredientComponent;
9+
import net.neoforged.neoforge.fluids.crafting.SizedFluidIngredient;
710

811
public interface CreateRecipeComponents {
912
RecipeComponentType<HeatCondition> HEAT_CONDITION = EnumComponent.of(Create.asResource("heat_condition"), HeatCondition.class, HeatCondition.CODEC);
13+
14+
// uses create's custom codec for sized ingredients that always serialises the type for... reasons?
15+
RecipeComponentType<SizedFluidIngredient> SIZED_FLUID_INGREDIENT = RecipeComponentType.unit(
16+
Create.asResource("sized_fluid_ingredient"), (type) ->
17+
new SizedFluidIngredientComponent(type, CreateCodecs.FLAT_SIZED_FLUID_INGREDIENT_WITH_TYPE, false));
1018
}

0 commit comments

Comments
 (0)