Skip to content

Commit 2636637

Browse files
committed
refactor(26.3): Build RecipeMap manually on client, since RecipeMap.create() wants a registry now
1 parent 0ca61f3 commit 2636637

3 files changed

Lines changed: 39 additions & 4 deletions

File tree

fabric/src/main/java/net/blay09/mods/balm/fabric/client/internal/FabricBalmClient.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package net.blay09.mods.balm.fabric.client.internal;
22

3+
import com.google.common.collect.ImmutableMap;
4+
import com.google.common.collect.ImmutableMultimap;
35
import net.blay09.mods.balm.Balm;
6+
import net.blay09.mods.balm.client.BalmClient;
47
import net.blay09.mods.balm.client.platform.internal.BalmClientSafeClientAccess;
58
import net.blay09.mods.balm.fabric.client.internal.platform.runtime.internal.FabricBalmClientRuntime;
9+
import net.blay09.mods.balm.fabric.internal.mixin.RecipeMapAccessor;
610
import net.blay09.mods.balm.fabric.network.internal.FabricBalmNetworking;
7-
import net.blay09.mods.balm.client.BalmClient;
811
import net.blay09.mods.balm.network.internal.RemotePlayerModList;
912
import net.fabricmc.api.ClientModInitializer;
1013
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
1114
import net.fabricmc.fabric.api.client.recipe.v1.sync.ClientRecipeSynchronizedEvent;
12-
import net.minecraft.world.item.crafting.RecipeMap;
15+
import net.minecraft.resources.ResourceKey;
16+
import net.minecraft.world.item.crafting.Recipe;
17+
import net.minecraft.world.item.crafting.RecipeHolder;
18+
import net.minecraft.world.item.crafting.RecipeType;
1319

1420
public class FabricBalmClient implements ClientModInitializer {
1521
@Override
@@ -20,7 +26,15 @@ public void onInitializeClient() {
2026

2127
ClientRecipeSynchronizedEvent.EVENT.register((client, synchronizedRecipes) -> {
2228
if (Balm.safeClientAccess() instanceof BalmClientSafeClientAccess clientProxy) {
23-
clientProxy.setSyncedRecipes(RecipeMap.create(synchronizedRecipes.recipes()));
29+
ImmutableMultimap.Builder<RecipeType<?>, RecipeHolder<?>> byType = ImmutableMultimap.builder();
30+
ImmutableMap.Builder<ResourceKey<Recipe<?>>, RecipeHolder<?>> byKey = ImmutableMap.builder();
31+
synchronizedRecipes.recipes().forEach((recipe) -> {
32+
final var legacyRecipeHolder = new RecipeHolder<>(recipe.id(), recipe.value());
33+
byType.put(recipe.value().getType(), legacyRecipeHolder);
34+
byKey.put(recipe.id(), legacyRecipeHolder);
35+
});
36+
final var recipeMap = RecipeMapAccessor.balm$create(byType.build(), byKey.build());
37+
clientProxy.setSyncedRecipes(recipeMap);
2438
}
2539
});
2640

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package net.blay09.mods.balm.fabric.internal.mixin;
2+
3+
import com.google.common.collect.Multimap;
4+
import net.minecraft.resources.ResourceKey;
5+
import net.minecraft.world.item.crafting.Recipe;
6+
import net.minecraft.world.item.crafting.RecipeHolder;
7+
import net.minecraft.world.item.crafting.RecipeMap;
8+
import net.minecraft.world.item.crafting.RecipeType;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.gen.Invoker;
11+
12+
import java.util.Map;
13+
14+
@Mixin(RecipeMap.class)
15+
public interface RecipeMapAccessor {
16+
@Invoker("<init>")
17+
static RecipeMap balm$create(final Multimap<RecipeType<?>, RecipeHolder<?>> byType, final Map<ResourceKey<Recipe<?>>, RecipeHolder<?>> byKey) {
18+
throw new AssertionError();
19+
}
20+
}

fabric/src/main/resources/balm.fabric.mixins.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"ResultSlotMixin",
1616
"ServerPlayerMixin",
1717
"CommandsMixin",
18-
"PoiTypesAccessor"
18+
"PoiTypesAccessor",
19+
"RecipeMapAccessor"
1920
],
2021
"client": [
2122
"AbstractClientPlayerMixin",

0 commit comments

Comments
 (0)