From a93bb19461c7becbc109e5f8ac69f96b94884e9e Mon Sep 17 00:00:00 2001 From: BlayTheNinth <1933180+BlayTheNinth@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:04:55 +0200 Subject: [PATCH] wip: Port to Minecraft 1.21 --- .../excompressum/CommonLootTableAccessor.java | 7 -- .../mods/excompressum/ExCompressum.java | 6 -- .../api/recipe/CompressedHammerRecipe.java | 3 - .../excompressum/api/recipe/HammerRecipe.java | 3 - .../api/recipe/HeavySieveRecipe.java | 5 -- .../excompressum/api/recipe/SieveRecipe.java | 4 - .../api/sievemesh/CommonMeshType.java | 26 +++++- .../api/sievemesh/SieveMeshRegistryEntry.java | 9 -- .../excompressum/loot/LootTableEntry.java | 6 +- .../excompressum/loot/LootTableUtils.java | 34 ++++---- .../excompressum/mixin/LootItemAccessor.java | 3 +- ...LootItemRandomChanceConditionAccessor.java | 3 +- .../excompressum/mixin/LootPoolAccessor.java | 4 +- .../mixin/LootPoolEntryContainerAccessor.java | 6 +- .../LootPoolSingletonContainerAccessor.java | 4 +- .../excompressum/mixin/LootTableAccessor.java | 12 +-- .../registry/ExCompressumRecipe.java | 20 ----- .../registry/ExCompressumSerializers.java | 23 ++++++ .../excompressum/registry/ModRecipeTypes.java | 12 +-- .../chickenstick/ChickenStickRecipe.java | 51 +++++++++--- .../chickenstick/ChickenStickRegistry.java | 2 +- .../CompressedHammerRecipeImpl.java | 46 ++++++++--- .../registry/hammer/HammerRecipeImpl.java | 46 ++++++++--- .../heavysieve/GeneratedHeavySieveRecipe.java | 63 +++++++++----- .../heavysieve/HeavySieveRecipeImpl.java | 82 +++++++++++-------- .../heavysieve/HeavySieveRegistry.java | 18 ++-- .../registry/sieve/SieveRecipeImpl.java | 46 +++-------- .../registry/sievemesh/SieveMeshRegistry.java | 1 - .../woodencrucible/WoodenCrucibleRecipe.java | 82 ++++++++++++++----- .../WoodenCrucibleRegistry.java | 2 +- .../main/resources/excompressum.mixins.json | 1 - .../fabric/FabricExCompressum.java | 2 - .../datagen/ModBlockLootTableProvider.java | 8 +- .../datagen/ModEntityLootTableProvider.java | 9 -- .../fabric/datagen/ModItemTagProvider.java | 5 +- .../fabric/datagen/ModModelProvider.java | 10 +-- .../fabric/datagen/ModRecipeProvider.java | 11 +-- ...s.json => excompressum.fabric.mixins.json} | 1 - .../excompressum/forge/ForgeExCompressum.java | 3 - .../jei/ExpandedChickenStickRecipe.java | 2 +- .../compat/jei/ExpandedHeavySieveRecipe.java | 16 +--- .../forge/compat/jei/ExpandedSieveRecipe.java | 15 +--- .../forge/compat/jei/JEIAddon.java | 6 +- .../excompressum/mixin/LootTableAccessor.java | 20 ----- .../resources/excompressum.forge.mixins.json | 14 ++++ .../neoforge/mixin/LootTableAccessor.java | 20 ----- 46 files changed, 408 insertions(+), 364 deletions(-) delete mode 100644 common/src/main/java/net/blay09/mods/excompressum/CommonLootTableAccessor.java rename {fabric => common}/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java (51%) create mode 100644 common/src/main/java/net/blay09/mods/excompressum/registry/ExCompressumSerializers.java rename {forge => common}/src/main/resources/excompressum.mixins.json (94%) rename fabric/src/main/resources/{excompressum.mixins.json => excompressum.fabric.mixins.json} (89%) delete mode 100644 forge/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java create mode 100644 forge/src/main/resources/excompressum.forge.mixins.json delete mode 100644 neoforge/src/main/java/net/blay09/mods/excompressum/neoforge/mixin/LootTableAccessor.java diff --git a/common/src/main/java/net/blay09/mods/excompressum/CommonLootTableAccessor.java b/common/src/main/java/net/blay09/mods/excompressum/CommonLootTableAccessor.java deleted file mode 100644 index 62cd93e8..00000000 --- a/common/src/main/java/net/blay09/mods/excompressum/CommonLootTableAccessor.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.blay09.mods.excompressum; - -import net.minecraft.world.level.storage.loot.LootPool; - -public interface CommonLootTableAccessor { - LootPool[] balm_getPools(); -} diff --git a/common/src/main/java/net/blay09/mods/excompressum/ExCompressum.java b/common/src/main/java/net/blay09/mods/excompressum/ExCompressum.java index 709f94e0..d71e52bb 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/ExCompressum.java +++ b/common/src/main/java/net/blay09/mods/excompressum/ExCompressum.java @@ -1,8 +1,5 @@ package net.blay09.mods.excompressum; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.mojang.datafixers.util.Function3; import net.blay09.mods.balm.api.Balm; import net.blay09.mods.balm.api.proxy.SidedProxy; import net.blay09.mods.excompressum.api.ExCompressumAPI; @@ -21,8 +18,6 @@ import net.blay09.mods.excompressum.registry.ExRegistries; import net.blay09.mods.excompressum.registry.ModRecipeTypes; import net.blay09.mods.excompressum.registry.autosieveskin.AutoSieveSkinRegistry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.storage.loot.LootTable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -32,7 +27,6 @@ public class ExCompressum { public static final Logger logger = LogManager.getLogger(MOD_ID); public static SidedProxy proxy = Balm.sidedProxy("net.blay09.mods.excompressum.CommonProxy", "net.blay09.mods.excompressum.client.ClientProxy"); - public static Function3 lootTableLoader; public static void initialize() { ExCompressumAPI.__setupAPI(new InternalMethodsImpl()); diff --git a/common/src/main/java/net/blay09/mods/excompressum/api/recipe/CompressedHammerRecipe.java b/common/src/main/java/net/blay09/mods/excompressum/api/recipe/CompressedHammerRecipe.java index 20d80af6..2994746c 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/api/recipe/CompressedHammerRecipe.java +++ b/common/src/main/java/net/blay09/mods/excompressum/api/recipe/CompressedHammerRecipe.java @@ -1,6 +1,5 @@ package net.blay09.mods.excompressum.api.recipe; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.storage.loot.LootTable; @@ -9,6 +8,4 @@ public interface CompressedHammerRecipe { Ingredient getIngredient(); LootTable getLootTable(); - - ResourceLocation getRecipeId(); } diff --git a/common/src/main/java/net/blay09/mods/excompressum/api/recipe/HammerRecipe.java b/common/src/main/java/net/blay09/mods/excompressum/api/recipe/HammerRecipe.java index 546c6ecc..2c5834ff 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/api/recipe/HammerRecipe.java +++ b/common/src/main/java/net/blay09/mods/excompressum/api/recipe/HammerRecipe.java @@ -1,6 +1,5 @@ package net.blay09.mods.excompressum.api.recipe; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.storage.loot.LootTable; @@ -9,6 +8,4 @@ public interface HammerRecipe { Ingredient getIngredient(); LootTable getLootTable(); - - ResourceLocation getRecipeId(); } diff --git a/common/src/main/java/net/blay09/mods/excompressum/api/recipe/HeavySieveRecipe.java b/common/src/main/java/net/blay09/mods/excompressum/api/recipe/HeavySieveRecipe.java index 527dac48..d9d22869 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/api/recipe/HeavySieveRecipe.java +++ b/common/src/main/java/net/blay09/mods/excompressum/api/recipe/HeavySieveRecipe.java @@ -1,7 +1,6 @@ package net.blay09.mods.excompressum.api.recipe; import net.blay09.mods.excompressum.api.sievemesh.CommonMeshType; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.storage.loot.LootTable; @@ -13,10 +12,6 @@ public interface HeavySieveRecipe { LootTable getLootTable(); - ResourceLocation getRecipeId(); - - CommonMeshType getMinimumMesh(); - Set getMeshes(); boolean isWaterlogged(); diff --git a/common/src/main/java/net/blay09/mods/excompressum/api/recipe/SieveRecipe.java b/common/src/main/java/net/blay09/mods/excompressum/api/recipe/SieveRecipe.java index a015248d..8e45ae53 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/api/recipe/SieveRecipe.java +++ b/common/src/main/java/net/blay09/mods/excompressum/api/recipe/SieveRecipe.java @@ -13,10 +13,6 @@ public interface SieveRecipe { LootTable getLootTable(); - ResourceLocation getRecipeId(); - - CommonMeshType getMinimumMesh(); - Set getMeshes(); boolean isWaterlogged(); diff --git a/common/src/main/java/net/blay09/mods/excompressum/api/sievemesh/CommonMeshType.java b/common/src/main/java/net/blay09/mods/excompressum/api/sievemesh/CommonMeshType.java index 8535183c..9057d972 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/api/sievemesh/CommonMeshType.java +++ b/common/src/main/java/net/blay09/mods/excompressum/api/sievemesh/CommonMeshType.java @@ -1,11 +1,33 @@ package net.blay09.mods.excompressum.api.sievemesh; -public enum CommonMeshType { +import io.netty.buffer.ByteBuf; +import net.minecraft.core.NonNullList; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.util.ByIdMap; +import net.minecraft.util.StringRepresentable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.function.IntFunction; + +public enum CommonMeshType implements StringRepresentable { STRING, FLINT, IRON, GOLD, DIAMOND, EMERALD, - NETHERITE + NETHERITE; + + private static final IntFunction BY_ID = ByIdMap.continuous(CommonMeshType::ordinal, values(), ByIdMap.OutOfBoundsStrategy.ZERO); + public static final StringRepresentable.EnumCodec CODEC = StringRepresentable.fromEnum(CommonMeshType::values); + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.idMapper(BY_ID, CommonMeshType::ordinal); + public static final StreamCodec> LIST_STREAM_CODEC = STREAM_CODEC.apply(ByteBufCodecs.collection(ArrayList::new)); + + @Override + public String getSerializedName() { + return name().toLowerCase(Locale.ROOT); + } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/api/sievemesh/SieveMeshRegistryEntry.java b/common/src/main/java/net/blay09/mods/excompressum/api/sievemesh/SieveMeshRegistryEntry.java index bb15e867..3770b95d 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/api/sievemesh/SieveMeshRegistryEntry.java +++ b/common/src/main/java/net/blay09/mods/excompressum/api/sievemesh/SieveMeshRegistryEntry.java @@ -9,7 +9,6 @@ public class SieveMeshRegistryEntry { private final ItemStack itemStack; private final Object backingMesh; - private int meshLevel; private boolean isHeavy; private String modelName; @@ -23,14 +22,6 @@ public ItemStack getItemStack() { return itemStack; } - public int getMeshLevel() { - return meshLevel; - } - - public void setMeshLevel(int meshLevel) { - this.meshLevel = meshLevel; - } - public boolean isHeavy() { return isHeavy; } diff --git a/common/src/main/java/net/blay09/mods/excompressum/loot/LootTableEntry.java b/common/src/main/java/net/blay09/mods/excompressum/loot/LootTableEntry.java index cf0b5440..dfae132e 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/loot/LootTableEntry.java +++ b/common/src/main/java/net/blay09/mods/excompressum/loot/LootTableEntry.java @@ -6,9 +6,9 @@ public class LootTableEntry { private final ItemStack itemStack; private final NumberProvider countRange; - private final float baseChance; + private final NumberProvider baseChance; - public LootTableEntry(ItemStack itemStack, NumberProvider countRange, float baseChance) { + public LootTableEntry(ItemStack itemStack, NumberProvider countRange, NumberProvider baseChance) { this.itemStack = itemStack; this.countRange = countRange; this.baseChance = baseChance; @@ -22,7 +22,7 @@ public NumberProvider getCountRange() { return countRange; } - public float getBaseChance() { + public NumberProvider getBaseChance() { return baseChance; } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/loot/LootTableUtils.java b/common/src/main/java/net/blay09/mods/excompressum/loot/LootTableUtils.java index 54697891..93eff2e2 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/loot/LootTableUtils.java +++ b/common/src/main/java/net/blay09/mods/excompressum/loot/LootTableUtils.java @@ -3,7 +3,6 @@ import com.google.common.collect.ArrayListMultimap; import net.blay09.mods.balm.api.Balm; import net.blay09.mods.excompressum.ExCompressum; -import net.blay09.mods.excompressum.CommonLootTableAccessor; import net.blay09.mods.excompressum.mixin.*; import net.minecraft.core.component.TypedDataComponent; import net.minecraft.core.registries.BuiltInRegistries; @@ -25,11 +24,13 @@ import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; import org.jetbrains.annotations.Nullable; + import java.util.*; public class LootTableUtils { - private static final LootContextParam SOURCE_STACK = new LootContextParam<>(ResourceLocation.fromNamespaceAndPath(ExCompressum.MOD_ID, "source_stack")); + private static final LootContextParam SOURCE_STACK = new LootContextParam<>(ResourceLocation.fromNamespaceAndPath(ExCompressum.MOD_ID, + "source_stack")); public static boolean isLootTableEmpty(@Nullable LootTable lootTable) { if (lootTable == null) { @@ -45,13 +46,13 @@ public static List getLootTableEntries(@Nullable LootTable lootT } List result = new ArrayList<>(); - LootPool[] pools = ((CommonLootTableAccessor) lootTable).balm_getPools(); - for (LootPool pool : pools) { - float poolBaseChance = getBaseChance(pool); - LootPoolEntryContainer[] entries = ((LootPoolAccessor) pool).getEntries(); + final var pools = ((LootTableAccessor) lootTable).getPools(); + for (final var pool : pools) { + final var poolBaseChance = getBaseChance(pool); + final var entries = ((LootPoolAccessor) pool).getEntries(); for (LootPoolEntryContainer entry : entries) { - float entryBaseChance = getBaseChance(entry); - float baseChance = entryBaseChance > 0 ? entryBaseChance : poolBaseChance; + final var entryBaseChance = getBaseChance(entry); + final var baseChance = entryBaseChance.orElse(poolBaseChance.orElseGet(() -> ConstantValue.exactly(1f))); NumberProvider countRange = getCountRange(entry); if (entry instanceof LootItemAccessor lootItem) { ItemStack itemStack = new ItemStack(lootItem.getItem()); @@ -70,21 +71,22 @@ public static List getLootTableEntries(@Nullable LootTable lootT return result; } - private static float getBaseChance(LootPool pool) { + private static Optional getBaseChance(LootPool pool) { return getBaseChance(((LootPoolAccessor) pool).getConditions()); } - private static float getBaseChance(LootPoolEntryContainer entry) { - return getBaseChance(((LootPoolEntryContainerAccessor) entry).getConditions().clone()); + private static Optional getBaseChance(LootPoolEntryContainer entry) { + return getBaseChance(((LootPoolEntryContainerAccessor) entry).getConditions()); } - private static float getBaseChance(LootItemCondition[] conditions) { - for (LootItemCondition condition : conditions) { + private static Optional getBaseChance(List conditions) { + for (final var condition : conditions) { if (condition instanceof LootItemRandomChanceConditionAccessor chanceCondition) { - return chanceCondition.getProbability(); + return Optional.of(chanceCondition.getChance()); } } - return 1f; + + return Optional.empty(); } private static NumberProvider getCountRange(LootPoolEntryContainer entry) { @@ -144,7 +146,7 @@ public static List mergeLootTableEntries(List mergableEntries = entryMap.get(key); LootTableEntry firstEntry = mergableEntries.getFirst(); - mergableEntries.sort(Comparator.comparing(LootTableEntry::getBaseChance).reversed()); + // TODO mergableEntries.sort(Comparator.comparing(LootTableEntry::getBaseChance).reversed()); result.add(new MergedLootTableEntry(firstEntry.getItemStack(), mergableEntries)); } return result; diff --git a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootItemAccessor.java b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootItemAccessor.java index faeeb737..cef40fb9 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootItemAccessor.java +++ b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootItemAccessor.java @@ -1,5 +1,6 @@ package net.blay09.mods.excompressum.mixin; +import net.minecraft.core.Holder; import net.minecraft.world.item.Item; import net.minecraft.world.level.storage.loot.entries.LootItem; import org.spongepowered.asm.mixin.Mixin; @@ -8,5 +9,5 @@ @Mixin(LootItem.class) public interface LootItemAccessor { @Accessor - Item getItem(); + Holder getItem(); } diff --git a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootItemRandomChanceConditionAccessor.java b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootItemRandomChanceConditionAccessor.java index 46551812..53bb6235 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootItemRandomChanceConditionAccessor.java +++ b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootItemRandomChanceConditionAccessor.java @@ -1,11 +1,12 @@ package net.blay09.mods.excompressum.mixin; import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; +import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(LootItemRandomChanceCondition.class) public interface LootItemRandomChanceConditionAccessor { @Accessor - float getProbability(); + NumberProvider getChance(); } diff --git a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolAccessor.java b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolAccessor.java index 81543e99..fa5f6f39 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolAccessor.java +++ b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolAccessor.java @@ -12,7 +12,7 @@ @Mixin(LootPool.class) public interface LootPoolAccessor { @Accessor - LootItemCondition[] getConditions(); + List getConditions(); @Accessor - LootPoolEntryContainer[] getEntries(); + List getEntries(); } diff --git a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolEntryContainerAccessor.java b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolEntryContainerAccessor.java index 9232fb9a..fdd602c0 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolEntryContainerAccessor.java +++ b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolEntryContainerAccessor.java @@ -1,14 +1,14 @@ package net.blay09.mods.excompressum.mixin; import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; -import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer; -import net.minecraft.world.level.storage.loot.functions.LootItemFunction; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import java.util.List; + @Mixin(LootPoolEntryContainer.class) public interface LootPoolEntryContainerAccessor { @Accessor - LootItemCondition[] getConditions(); + List getConditions(); } diff --git a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolSingletonContainerAccessor.java b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolSingletonContainerAccessor.java index 6fd25553..1f29fe3e 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolSingletonContainerAccessor.java +++ b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootPoolSingletonContainerAccessor.java @@ -5,8 +5,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import java.util.List; + @Mixin(LootPoolSingletonContainer.class) public interface LootPoolSingletonContainerAccessor { @Accessor - LootItemFunction[] getFunctions(); + List getFunctions(); } diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java similarity index 51% rename from fabric/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java rename to common/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java index e07341bc..18c56e37 100644 --- a/fabric/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java +++ b/common/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java @@ -1,18 +1,14 @@ package net.blay09.mods.excompressum.mixin; -import net.blay09.mods.excompressum.CommonLootTableAccessor; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import java.util.List; + @Mixin(LootTable.class) -public abstract class LootTableAccessor implements CommonLootTableAccessor { +public interface LootTableAccessor { @Accessor - protected abstract LootPool[] getPools(); - - @Override - public LootPool[] balm_getPools() { - return getPools(); - } + List getPools(); } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/ExCompressumRecipe.java b/common/src/main/java/net/blay09/mods/excompressum/registry/ExCompressumRecipe.java index 5899afce..f8999cde 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/ExCompressumRecipe.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/ExCompressumRecipe.java @@ -13,14 +13,6 @@ public abstract class ExCompressumRecipe implements Recipe { - private final ResourceLocation id; - private final RecipeType type; - - public ExCompressumRecipe(ResourceLocation id, RecipeType type) { - this.id = id; - this.type = type; - } - @Override public boolean matches(T inv, Level level) { return false; @@ -41,16 +33,4 @@ public boolean canCraftInDimensions(int width, int height) { return false; } - public ResourceLocation getRecipeId() { - return id; - } - - @Override - public abstract RecipeSerializer getSerializer(); - - @Override - public RecipeType getType() { - return type; - } - } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/ExCompressumSerializers.java b/common/src/main/java/net/blay09/mods/excompressum/registry/ExCompressumSerializers.java new file mode 100644 index 00000000..a8fbfee0 --- /dev/null +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/ExCompressumSerializers.java @@ -0,0 +1,23 @@ +package net.blay09.mods.excompressum.registry; + +import net.minecraft.nbt.NbtOps; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.level.storage.loot.LootTable; + +public abstract class ExCompressumSerializers { + + public static StreamCodec LOOT_TABLE_STREAM_CODEC = StreamCodec.of(ExCompressumSerializers::writeLootTable, + ExCompressumSerializers::readLootTable); + + public static LootTable readLootTable(RegistryFriendlyByteBuf buf) { + final var tag = ByteBufCodecs.TAG.decode(buf); + return LootTable.DIRECT_CODEC.decode(NbtOps.INSTANCE, tag).getOrThrow().getFirst(); + } + + public static void writeLootTable(RegistryFriendlyByteBuf buf, LootTable lootTable) { + final var tag = LootTable.DIRECT_CODEC.encodeStart(NbtOps.INSTANCE, lootTable).getOrThrow(); + ByteBufCodecs.TAG.encode(buf, tag); + } +} diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/ModRecipeTypes.java b/common/src/main/java/net/blay09/mods/excompressum/registry/ModRecipeTypes.java index 30568dcb..15f3f8aa 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/ModRecipeTypes.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/ModRecipeTypes.java @@ -41,37 +41,37 @@ public static void initialize(BalmRecipes recipes) { public String toString() { return COMPRESSED_HAMMER.getPath(); } - }, () -> compressedHammerRecipeSerializer = new CompressedHammerRecipeSerializer(), COMPRESSED_HAMMER); + }, () -> compressedHammerRecipeSerializer = new CompressedHammerRecipeImpl.Serializer(), COMPRESSED_HAMMER); recipes.registerRecipeType(() -> chickenStickRecipeType = new RecipeType<>() { @Override public String toString() { return CHICKEN_STICK.getPath(); } - }, () -> chickenStickRecipeSerializer = new ChickenStickRecipeSerializer(), CHICKEN_STICK); + }, () -> chickenStickRecipeSerializer = new ChickenStickRecipe.Serializer(), CHICKEN_STICK); recipes.registerRecipeType(() -> hammerRecipeType = new RecipeType<>() { @Override public String toString() { return HAMMER.getPath(); } - }, () -> hammerRecipeSerializer = new HammerRecipeSerializer(), HAMMER); + }, () -> hammerRecipeSerializer = new HammerRecipeImpl.Serializer(), HAMMER); recipes.registerRecipeType(() -> generatedHeavySieveRecipeType = new RecipeType<>() { @Override public String toString() { return HEAVY_SIEVE_GENERATED.getPath(); } - }, () -> generatedHeavySieveRecipeSerializer = new GeneratedHeavySieveRecipeSerializer(), HEAVY_SIEVE_GENERATED); + }, () -> generatedHeavySieveRecipeSerializer = new GeneratedHeavySieveRecipe.Serializer(), HEAVY_SIEVE_GENERATED); recipes.registerRecipeType(() -> heavySieveRecipeType = new RecipeType<>() { @Override public String toString() { return HEAVY_SIEVE.getPath(); } - }, () -> heavySieveRecipeSerializer = new HeavySieveRecipeSerializer(), HEAVY_SIEVE); + }, () -> heavySieveRecipeSerializer = new HeavySieveRecipeImpl.Serializer(), HEAVY_SIEVE); recipes.registerRecipeType(() -> woodenCrucibleRecipeType = new RecipeType<>() { @Override public String toString() { return WOODEN_CRUCIBLE.getPath(); } - }, () -> woodenCrucibleRecipeSerializer = new WoodenCrucibleRecipeSerializer(), WOODEN_CRUCIBLE); + }, () -> woodenCrucibleRecipeSerializer = new WoodenCrucibleRecipe.Serializer(), WOODEN_CRUCIBLE); } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/chickenstick/ChickenStickRecipe.java b/common/src/main/java/net/blay09/mods/excompressum/registry/chickenstick/ChickenStickRecipe.java index 21228260..27bba4ee 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/chickenstick/ChickenStickRecipe.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/chickenstick/ChickenStickRecipe.java @@ -1,21 +1,26 @@ package net.blay09.mods.excompressum.registry.chickenstick; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.blay09.mods.excompressum.registry.ExCompressumRecipe; +import net.blay09.mods.excompressum.registry.ExCompressumSerializers; import net.blay09.mods.excompressum.registry.ModRecipeTypes; -import net.minecraft.resources.ResourceLocation; +import net.blay09.mods.excompressum.registry.compressedhammer.CompressedHammerRecipeImpl; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.storage.loot.LootTable; public class ChickenStickRecipe extends ExCompressumRecipe { - private Ingredient input; - private LootTable lootTable; + private final Ingredient ingredient; + private final LootTable lootTable; - public ChickenStickRecipe(ResourceLocation id, Ingredient input, LootTable lootTable) { - super(id, ModRecipeTypes.chickenStickRecipeType); - this.input = input; + public ChickenStickRecipe(Ingredient ingredient, LootTable lootTable) { + this.ingredient = ingredient; this.lootTable = lootTable; } @@ -24,19 +29,39 @@ public RecipeSerializer getSerializer() { return ModRecipeTypes.chickenStickRecipeSerializer; } - public Ingredient getInput() { - return input; + @Override + public RecipeType getType() { + return ModRecipeTypes.chickenStickRecipeType; + } + + public Ingredient getIngredient() { + return ingredient; } public LootTable getLootTable() { return lootTable; } - public void setInput(Ingredient input) { - this.input = input; - } + public static class Serializer implements RecipeSerializer { + private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + Ingredient.CODEC.fieldOf("input").forGetter(recipe -> recipe.ingredient), + LootTable.DIRECT_CODEC.fieldOf("lootTable").forGetter(recipe -> recipe.lootTable) + ).apply(instance, ChickenStickRecipe::new)); - public void setLootTable(LootTable lootTable) { - this.lootTable = lootTable; + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, ChickenStickRecipe::getIngredient, + ExCompressumSerializers.LOOT_TABLE_STREAM_CODEC, ChickenStickRecipe::getLootTable, + ChickenStickRecipe::new); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } + } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/chickenstick/ChickenStickRegistry.java b/common/src/main/java/net/blay09/mods/excompressum/registry/chickenstick/ChickenStickRegistry.java index 3f24c28d..5e317fd5 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/chickenstick/ChickenStickRegistry.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/chickenstick/ChickenStickRegistry.java @@ -29,7 +29,7 @@ public static List rollHammerRewards(Level level, LootContext context } private static boolean testRecipe(ItemStack itemStack, ChickenStickRecipe recipe) { - return recipe.getInput().test(itemStack); + return recipe.getIngredient().test(itemStack); } public boolean isHammerable(Level level, ItemStack itemStack) { diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/compressedhammer/CompressedHammerRecipeImpl.java b/common/src/main/java/net/blay09/mods/excompressum/registry/compressedhammer/CompressedHammerRecipeImpl.java index 0d513535..08cc27b9 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/compressedhammer/CompressedHammerRecipeImpl.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/compressedhammer/CompressedHammerRecipeImpl.java @@ -1,25 +1,31 @@ package net.blay09.mods.excompressum.registry.compressedhammer; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.blay09.mods.excompressum.api.recipe.CompressedHammerRecipe; import net.blay09.mods.excompressum.registry.ExCompressumRecipe; +import net.blay09.mods.excompressum.registry.ExCompressumSerializers; import net.blay09.mods.excompressum.registry.ModRecipeTypes; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.RecipeInput; -import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.storage.loot.LootTable; public class CompressedHammerRecipeImpl extends ExCompressumRecipe implements CompressedHammerRecipe { - private Ingredient ingredient; - private LootTable lootTable; + private final Ingredient ingredient; + private final LootTable lootTable; - public CompressedHammerRecipeImpl(ResourceLocation id, Ingredient ingredient, LootTable lootTable) { - super(id, ModRecipeTypes.compressedHammerRecipeType); + public CompressedHammerRecipeImpl(Ingredient ingredient, LootTable lootTable) { this.ingredient = ingredient; this.lootTable = lootTable; } + @Override + public RecipeType getType() { + return ModRecipeTypes.compressedHammerRecipeType; + } + @Override public RecipeSerializer getSerializer() { return ModRecipeTypes.compressedHammerRecipeSerializer; @@ -35,11 +41,25 @@ public LootTable getLootTable() { return lootTable; } - public void setIngredient(Ingredient ingredient) { - this.ingredient = ingredient; - } + public static class Serializer implements RecipeSerializer { + private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + Ingredient.CODEC.fieldOf("input").forGetter(recipe -> recipe.ingredient), + LootTable.DIRECT_CODEC.fieldOf("lootTable").forGetter(recipe -> recipe.lootTable) + ).apply(instance, CompressedHammerRecipeImpl::new)); - public void setLootTable(LootTable lootTable) { - this.lootTable = lootTable; + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, CompressedHammerRecipeImpl::getIngredient, + ExCompressumSerializers.LOOT_TABLE_STREAM_CODEC, CompressedHammerRecipeImpl::getLootTable, + CompressedHammerRecipeImpl::new); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/hammer/HammerRecipeImpl.java b/common/src/main/java/net/blay09/mods/excompressum/registry/hammer/HammerRecipeImpl.java index 4ca72d2a..ad62fea3 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/hammer/HammerRecipeImpl.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/hammer/HammerRecipeImpl.java @@ -1,22 +1,28 @@ package net.blay09.mods.excompressum.registry.hammer; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.blay09.mods.excompressum.api.recipe.HammerRecipe; import net.blay09.mods.excompressum.registry.ExCompressumRecipe; +import net.blay09.mods.excompressum.registry.ExCompressumSerializers; import net.blay09.mods.excompressum.registry.ModRecipeTypes; +import net.blay09.mods.excompressum.registry.chickenstick.ChickenStickRecipe; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.storage.loot.LootTable; public class HammerRecipeImpl extends ExCompressumRecipe implements HammerRecipe { - private Ingredient ingredient; - private LootTable lootTable; + private final Ingredient ingredient; + private final LootTable lootTable; - public HammerRecipeImpl(ResourceLocation id, Ingredient input, LootTable lootTable) { - super(id, ModRecipeTypes.hammerRecipeType); - this.ingredient = input; + public HammerRecipeImpl(Ingredient ingredient, LootTable lootTable) { + this.ingredient = ingredient; this.lootTable = lootTable; } @@ -25,6 +31,11 @@ public RecipeSerializer getSerializer() { return ModRecipeTypes.hammerRecipeSerializer; } + @Override + public RecipeType getType() { + return ModRecipeTypes.hammerRecipeType; + } + @Override public Ingredient getIngredient() { return ingredient; @@ -35,12 +46,25 @@ public LootTable getLootTable() { return lootTable; } - public void setIngredient(Ingredient ingredient) { - this.ingredient = ingredient; - } + public static class Serializer implements RecipeSerializer { + private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + Ingredient.CODEC.fieldOf("input").forGetter(recipe -> recipe.ingredient), + LootTable.DIRECT_CODEC.fieldOf("lootTable").forGetter(recipe -> recipe.lootTable) + ).apply(instance, HammerRecipeImpl::new)); - public void setLootTable(LootTable lootTable) { - this.lootTable = lootTable; - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, HammerRecipeImpl::getIngredient, + ExCompressumSerializers.LOOT_TABLE_STREAM_CODEC, HammerRecipeImpl::getLootTable, + HammerRecipeImpl::new); + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/GeneratedHeavySieveRecipe.java b/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/GeneratedHeavySieveRecipe.java index d653403b..c17824a8 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/GeneratedHeavySieveRecipe.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/GeneratedHeavySieveRecipe.java @@ -1,37 +1,41 @@ package net.blay09.mods.excompressum.registry.heavysieve; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.blay09.mods.excompressum.registry.ExCompressumRecipe; import net.blay09.mods.excompressum.registry.ModRecipeTypes; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.item.crafting.RecipeType; public class GeneratedHeavySieveRecipe extends ExCompressumRecipe { - private Ingredient input; - private ResourceLocation source; - private Integer rolls; + private final Ingredient ingredient; + private final ResourceLocation sourceItem; + private final int rolls; - public GeneratedHeavySieveRecipe(ResourceLocation id, Ingredient input, ResourceLocation source, @Nullable Integer rolls) { - super(id, ModRecipeTypes.generatedHeavySieveRecipeType); - this.input = input; - this.source = source; + public GeneratedHeavySieveRecipe(Ingredient ingredient, ResourceLocation sourceItem, int rolls) { + this.ingredient = ingredient; + this.sourceItem = sourceItem; this.rolls = rolls; } - public Ingredient getInput() { - return input; + public Ingredient getIngredient() { + return ingredient; } - public ResourceLocation getSource() { - return source; + public ResourceLocation getSourceItem() { + return sourceItem; } - @Nullable - public Integer getRolls() { + public int getRolls() { return rolls; } @@ -40,15 +44,32 @@ public RecipeSerializer getSerializer() { return ModRecipeTypes.generatedHeavySieveRecipeSerializer; } - public void setInput(Ingredient input) { - this.input = input; + @Override + public RecipeType getType() { + return ModRecipeTypes.generatedHeavySieveRecipeType; } - public void setSource(ResourceLocation source) { - this.source = source; - } + public static class Serializer implements RecipeSerializer { + private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + Ingredient.CODEC.fieldOf("input").forGetter(recipe -> recipe.ingredient), + ResourceLocation.CODEC.fieldOf("source").forGetter(recipe -> recipe.sourceItem), + Codec.INT.fieldOf("rolls").orElse(-1).forGetter(recipe -> recipe.rolls) + ).apply(instance, GeneratedHeavySieveRecipe::new)); - public void setRolls(Integer rolls) { - this.rolls = rolls; + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, GeneratedHeavySieveRecipe::getIngredient, + ResourceLocation.STREAM_CODEC, GeneratedHeavySieveRecipe::getSourceItem, + ByteBufCodecs.INT, GeneratedHeavySieveRecipe::getRolls, + GeneratedHeavySieveRecipe::new); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRecipeImpl.java b/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRecipeImpl.java index 10753dd9..00a145f6 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRecipeImpl.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRecipeImpl.java @@ -1,33 +1,38 @@ package net.blay09.mods.excompressum.registry.heavysieve; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.blay09.mods.excompressum.api.recipe.HeavySieveRecipe; import net.blay09.mods.excompressum.api.sievemesh.CommonMeshType; import net.blay09.mods.excompressum.registry.ExCompressumRecipe; +import net.blay09.mods.excompressum.registry.ExCompressumSerializers; import net.blay09.mods.excompressum.registry.ModRecipeTypes; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.storage.loot.LootTable; -import org.jetbrains.annotations.Nullable; + +import java.util.List; import java.util.Set; public class HeavySieveRecipeImpl extends ExCompressumRecipe implements HeavySieveRecipe { - private Ingredient ingredient; - private LootTable lootTable; - private boolean waterlogged; - private CommonMeshType minimumMesh; - private Set meshes; + private final Ingredient ingredient; + private final LootTable lootTable; + private final boolean waterlogged; + private final Set meshes; - public HeavySieveRecipeImpl(ResourceLocation id, Ingredient ingredient, LootTable lootTable, boolean waterlogged, @Nullable CommonMeshType minimumMesh, @Nullable Set meshes) { - super(id, ModRecipeTypes.heavySieveRecipeType); + public HeavySieveRecipeImpl(Ingredient ingredient, LootTable lootTable, boolean waterlogged, List meshes) { this.ingredient = ingredient; this.lootTable = lootTable; this.waterlogged = waterlogged; - this.minimumMesh = minimumMesh; - this.meshes = meshes; + this.meshes = Set.copyOf(meshes); } @Override @@ -35,6 +40,11 @@ public RecipeSerializer getSerializer() { return ModRecipeTypes.heavySieveRecipeSerializer; } + @Override + public RecipeType getType() { + return ModRecipeTypes.heavySieveRecipeType; + } + @Override public Ingredient getIngredient() { return ingredient; @@ -45,37 +55,43 @@ public LootTable getLootTable() { return lootTable; } + @Override public boolean isWaterlogged() { return waterlogged; } - @Nullable - public CommonMeshType getMinimumMesh() { - return minimumMesh; - } - - @Nullable + @Override public Set getMeshes() { return meshes; } - public void setIngredient(Ingredient ingredient) { - this.ingredient = ingredient; - } - - public void setLootTable(LootTable lootTable) { - this.lootTable = lootTable; - } - - public void setWaterlogged(boolean waterlogged) { - this.waterlogged = waterlogged; - } - - public void setMinimumMesh(@Nullable CommonMeshType minimumMesh) { - this.minimumMesh = minimumMesh; + public List getMeshesList() { + return List.copyOf(meshes); } - public void setMeshes(@Nullable Set meshes) { - this.meshes = meshes; + public static class Serializer implements RecipeSerializer { + private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + Ingredient.CODEC.fieldOf("input").forGetter(recipe -> recipe.ingredient), + LootTable.DIRECT_CODEC.fieldOf("lootTable").forGetter(recipe -> recipe.lootTable), + Codec.BOOL.fieldOf("waterlogged").forGetter(recipe -> recipe.waterlogged), + CommonMeshType.CODEC.listOf().fieldOf("meshes").forGetter(recipe -> List.copyOf(recipe.meshes)) + ).apply(instance, HeavySieveRecipeImpl::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, HeavySieveRecipeImpl::getIngredient, + ExCompressumSerializers.LOOT_TABLE_STREAM_CODEC, HeavySieveRecipeImpl::getLootTable, + ByteBufCodecs.BOOL, HeavySieveRecipeImpl::isWaterlogged, + CommonMeshType.LIST_STREAM_CODEC, HeavySieveRecipeImpl::getMeshesList, + HeavySieveRecipeImpl::new); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRegistry.java b/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRegistry.java index bc6c2f7d..53abb620 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRegistry.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/heavysieve/HeavySieveRegistry.java @@ -5,7 +5,6 @@ import net.blay09.mods.excompressum.api.sievemesh.SieveMeshRegistryEntry; import net.blay09.mods.excompressum.config.ExCompressumConfig; import net.blay09.mods.excompressum.registry.*; -import net.blay09.mods.excompressum.registry.sievemesh.SieveMeshRegistry; import net.blay09.mods.excompressum.utils.StupidUtils; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; @@ -25,14 +24,7 @@ private static boolean testRecipe(SieveMeshRegistryEntry mesh, ItemStack itemSta return false; } - if (recipe.getMinimumMesh() != null) { - SieveMeshRegistryEntry minimumMesh = SieveMeshRegistry.getEntry(recipe.getMinimumMesh()); - if (minimumMesh != null && mesh.getMeshLevel() < minimumMesh.getMeshLevel()) { - return false; - } - } - - if (recipe.getMeshes() != null && !recipe.getMeshes().contains(mesh.getMeshType())) { + if (!recipe.getMeshes().isEmpty() && !recipe.getMeshes().contains(mesh.getMeshType())) { return false; } @@ -40,8 +32,8 @@ private static boolean testRecipe(SieveMeshRegistryEntry mesh, ItemStack itemSta } private static boolean testGeneratedRecipe(ItemStack itemStack, GeneratedHeavySieveRecipe generatedRecipe, BlockState sieve, SieveMeshRegistryEntry sieveMesh) { - Block sourceBlock = Balm.getRegistries().getBlock(generatedRecipe.getSource()); - return generatedRecipe.getInput().test(itemStack) && ExNihilo.isSiftableWithMesh(sieve, new ItemStack(sourceBlock), sieveMesh); + Block sourceBlock = Balm.getRegistries().getBlock(generatedRecipe.getSourceItem()); + return generatedRecipe.getIngredient().test(itemStack) && ExNihilo.isSiftableWithMesh(sieve, new ItemStack(sourceBlock), sieveMesh); } public static List rollSieveRewards(Level level, LootContext context, BlockState sieve, SieveMeshRegistryEntry mesh, ItemStack itemStack) { @@ -64,7 +56,7 @@ public static List rollSieveRewards(Level level, LootContext context, final var recipe = recipeHolder.value(); if (testGeneratedRecipe(itemStack, recipe, sieve, mesh)) { int rolls = getGeneratedRollCount(recipe); - ItemLike source = Balm.getRegistries().getItem(recipe.getSource()); + ItemLike source = Balm.getRegistries().getItem(recipe.getSourceItem()); LootTable lootTable = ExNihilo.getInstance().generateHeavySieveLootTable(level, sieve, source, rolls, mesh); if (lootTable != null) { lootTable.getRandomItems(context, results::add); @@ -79,7 +71,7 @@ public static List rollSieveRewards(Level level, LootContext context, } public static Integer getGeneratedRollCount(GeneratedHeavySieveRecipe generatedRecipe) { - return generatedRecipe.getRolls() != null ? generatedRecipe.getRolls() : ExCompressumConfig.getActive().general.heavySieveDefaultRolls; + return generatedRecipe.getRolls() > 0 ? generatedRecipe.getRolls() : ExCompressumConfig.getActive().general.heavySieveDefaultRolls; } public boolean isSiftable(Level level, BlockState sieve, ItemStack itemStack, SieveMeshRegistryEntry sieveMesh) { diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/sieve/SieveRecipeImpl.java b/common/src/main/java/net/blay09/mods/excompressum/registry/sieve/SieveRecipeImpl.java index a7029ebc..cd9f5662 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/sieve/SieveRecipeImpl.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/sieve/SieveRecipeImpl.java @@ -1,13 +1,12 @@ package net.blay09.mods.excompressum.registry.sieve; -import net.blay09.mods.excompressum.api.recipe.HeavySieveRecipe; import net.blay09.mods.excompressum.api.recipe.SieveRecipe; import net.blay09.mods.excompressum.api.sievemesh.CommonMeshType; import net.blay09.mods.excompressum.registry.ExCompressumRecipe; import net.blay09.mods.excompressum.registry.ModRecipeTypes; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.storage.loot.LootTable; import org.jetbrains.annotations.Nullable; @@ -15,18 +14,15 @@ public class SieveRecipeImpl extends ExCompressumRecipe implements SieveRecipe { - private Ingredient ingredient; - private LootTable lootTable; - private boolean waterlogged; - private CommonMeshType minimumMesh; - private Set meshes; + private final Ingredient ingredient; + private final LootTable lootTable; + private final boolean waterlogged; + private final Set meshes; - public SieveRecipeImpl(ResourceLocation id, Ingredient ingredient, LootTable lootTable, boolean waterlogged, @Nullable CommonMeshType minimumMesh, @Nullable Set meshes) { - super(id, ModRecipeTypes.heavySieveRecipeType); + public SieveRecipeImpl(Ingredient ingredient, LootTable lootTable, boolean waterlogged, Set meshes) { this.ingredient = ingredient; this.lootTable = lootTable; this.waterlogged = waterlogged; - this.minimumMesh = minimumMesh; this.meshes = meshes; } @@ -35,6 +31,11 @@ public RecipeSerializer getSerializer() { return ModRecipeTypes.heavySieveRecipeSerializer; } + @Override + public RecipeType getType() { + return ModRecipeTypes.heavySieveRecipeType; + } + @Override public Ingredient getIngredient() { return ingredient; @@ -49,33 +50,8 @@ public boolean isWaterlogged() { return waterlogged; } - @Nullable - public CommonMeshType getMinimumMesh() { - return minimumMesh; - } - @Nullable public Set getMeshes() { return meshes; } - - public void setIngredient(Ingredient ingredient) { - this.ingredient = ingredient; - } - - public void setLootTable(LootTable lootTable) { - this.lootTable = lootTable; - } - - public void setWaterlogged(boolean waterlogged) { - this.waterlogged = waterlogged; - } - - public void setMinimumMesh(@Nullable CommonMeshType minimumMesh) { - this.minimumMesh = minimumMesh; - } - - public void setMeshes(@Nullable Set meshes) { - this.meshes = meshes; - } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/sievemesh/SieveMeshRegistry.java b/common/src/main/java/net/blay09/mods/excompressum/registry/sievemesh/SieveMeshRegistry.java index 4d47945d..64b43a7d 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/sievemesh/SieveMeshRegistry.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/sievemesh/SieveMeshRegistry.java @@ -20,7 +20,6 @@ public class SieveMeshRegistry { public static void registerDefaults(@Nullable Object backingMesh) { SieveMeshRegistryEntry ironMesh = new SieveMeshRegistryEntry(CommonMeshType.IRON, new ItemStack(ModItems.ironMesh), backingMesh); ironMesh.setHeavy(true); - ironMesh.setMeshLevel(3); ironMesh.setModelName("iron"); add(ironMesh); } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/woodencrucible/WoodenCrucibleRecipe.java b/common/src/main/java/net/blay09/mods/excompressum/registry/woodencrucible/WoodenCrucibleRecipe.java index 511e65c2..580efbe6 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/woodencrucible/WoodenCrucibleRecipe.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/woodencrucible/WoodenCrucibleRecipe.java @@ -1,59 +1,60 @@ package net.blay09.mods.excompressum.registry.woodencrucible; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.blay09.mods.balm.api.Balm; import net.blay09.mods.excompressum.registry.ExCompressumRecipe; import net.blay09.mods.excompressum.registry.ModRecipeTypes; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.ExtraCodecs; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.storage.loot.LootTable; import java.util.Objects; public class WoodenCrucibleRecipe extends ExCompressumRecipe { - private Ingredient input; - private ResourceLocation fluid; - private int amount; + private final Ingredient ingredient; + private final ResourceLocation fluid; + private final int amount; - public WoodenCrucibleRecipe(ResourceLocation id, Ingredient input, ResourceLocation fluid, int amount) { - super(id, ModRecipeTypes.woodenCrucibleRecipeType); - this.input = input; + public WoodenCrucibleRecipe(Ingredient ingredient, ResourceLocation fluid, Integer amount) { + this.ingredient = ingredient; this.fluid = fluid; this.amount = amount; } - public Ingredient getInput() { - return input; - } - - public void setInput(Ingredient input) { - this.input = input; + public Ingredient getIngredient() { + return ingredient; } public ResourceLocation getFluidId() { return fluid; } - public void setFluidId(ResourceLocation fluid) { - this.fluid = fluid; - } - - public int getAmount() { + public Integer getAmount() { return amount; } - public void setAmount(int amount) { - this.amount = amount; - } - @Override public RecipeSerializer getSerializer() { return ModRecipeTypes.woodenCrucibleRecipeSerializer; } + @Override + public RecipeType getType() { + return ModRecipeTypes.woodenCrucibleRecipeType; + } + public boolean matchesFluid(Fluid fluid) { final var fluidId = Balm.getRegistries().getKey(fluid); return Objects.equals(fluidId, this.fluid); @@ -63,4 +64,43 @@ public Fluid getFluid() { final var fluid = Balm.getRegistries().getFluid(this.fluid); return fluid != null ? fluid : Fluids.EMPTY; } + + public static class Serializer implements RecipeSerializer { + private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + Ingredient.CODEC.fieldOf("input").forGetter(recipe -> recipe.ingredient), + ResourceLocation.CODEC.fieldOf("fluid").forGetter(recipe -> recipe.fluid), + Codec.INT.fieldOf("amount").forGetter(recipe -> recipe.amount) + ).apply(instance, WoodenCrucibleRecipe::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.of(Serializer::encode, Serializer::decode); + + // public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + // Ingredient.CONTENTS_STREAM_CODEC.cast(), WoodenCrucibleRecipe::getIngredient, + // ResourceLocation.STREAM_CODEC.cast(), WoodenCrucibleRecipe::getFluid, + // ByteBufCodecs.INT.cast(), WoodenCrucibleRecipe::getAmount, + // WoodenCrucibleRecipe::new); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + + private static WoodenCrucibleRecipe decode(RegistryFriendlyByteBuf buf) { + final var ingredient = Ingredient.CONTENTS_STREAM_CODEC.decode(buf); + final var fluidId = ResourceLocation.STREAM_CODEC.decode(buf); + final var amount = ByteBufCodecs.INT.decode(buf); + return new WoodenCrucibleRecipe(ingredient, fluidId, amount); + } + + private static void encode(RegistryFriendlyByteBuf buf, WoodenCrucibleRecipe recipe) { + Ingredient.CONTENTS_STREAM_CODEC.encode(buf, recipe.getIngredient()); + ResourceLocation.STREAM_CODEC.encode(buf, recipe.getFluidId()); + ByteBufCodecs.INT.encode(buf, recipe.getAmount()); + } + } } diff --git a/common/src/main/java/net/blay09/mods/excompressum/registry/woodencrucible/WoodenCrucibleRegistry.java b/common/src/main/java/net/blay09/mods/excompressum/registry/woodencrucible/WoodenCrucibleRegistry.java index 38ca2107..20355c00 100644 --- a/common/src/main/java/net/blay09/mods/excompressum/registry/woodencrucible/WoodenCrucibleRegistry.java +++ b/common/src/main/java/net/blay09/mods/excompressum/registry/woodencrucible/WoodenCrucibleRegistry.java @@ -13,7 +13,7 @@ public WoodenCrucibleRecipe getRecipe(Level level, ItemStack itemStack) { final var recipes = level.getRecipeManager().getAllRecipesFor(ModRecipeTypes.woodenCrucibleRecipeType); for (final var recipeHolder : recipes) { final var recipe = recipeHolder.value(); - if (recipe.getInput().test(itemStack)) { + if (recipe.getIngredient().test(itemStack)) { return recipe; } } diff --git a/forge/src/main/resources/excompressum.mixins.json b/common/src/main/resources/excompressum.mixins.json similarity index 94% rename from forge/src/main/resources/excompressum.mixins.json rename to common/src/main/resources/excompressum.mixins.json index 169f6ed0..badc148a 100644 --- a/forge/src/main/resources/excompressum.mixins.json +++ b/common/src/main/resources/excompressum.mixins.json @@ -13,7 +13,6 @@ "LootPoolEntryContainerAccessor", "LootPoolSingletonContainerAccessor", "LootTableAccessor", - "LootTableReferenceAccessor", "SetItemCountFunctionAccessor", "TagEntryAccessor", "UniformGeneratorAccessor" diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/FabricExCompressum.java b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/FabricExCompressum.java index 12c75729..da68e9a2 100644 --- a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/FabricExCompressum.java +++ b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/FabricExCompressum.java @@ -4,12 +4,10 @@ import net.blay09.mods.balm.api.EmptyLoadContext; import net.blay09.mods.excompressum.ExCompressum; import net.fabricmc.api.ModInitializer; -import net.minecraft.world.level.storage.loot.LootTable; public class FabricExCompressum implements ModInitializer { @Override public void onInitialize() { Balm.initialize(ExCompressum.MOD_ID, EmptyLoadContext.INSTANCE, ExCompressum::initialize); - ExCompressum.lootTableLoader = (gson, resourceLocation, jsonElement) -> gson.fromJson(jsonElement, LootTable.class); } } diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModBlockLootTableProvider.java b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModBlockLootTableProvider.java index 99d9a9bb..e5c69d7e 100644 --- a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModBlockLootTableProvider.java +++ b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModBlockLootTableProvider.java @@ -1,12 +1,12 @@ package net.blay09.mods.excompressum.fabric.datagen; -import net.blay09.mods.excompressum.block.AutoSieveBlock; import net.blay09.mods.excompressum.block.ModBlockStateProperties; import net.blay09.mods.excompressum.block.ModBlocks; import net.blay09.mods.excompressum.item.ModItems; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.core.HolderLookup; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; @@ -14,9 +14,11 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +import java.util.concurrent.CompletableFuture; + public class ModBlockLootTableProvider extends FabricBlockLootTableProvider { - protected ModBlockLootTableProvider(FabricDataOutput dataOutput) { - super(dataOutput); + protected ModBlockLootTableProvider(FabricDataOutput dataOutput, CompletableFuture provider) { + super(dataOutput, provider); } @Override diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModEntityLootTableProvider.java b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModEntityLootTableProvider.java index 8f73db63..477348a4 100644 --- a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModEntityLootTableProvider.java +++ b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModEntityLootTableProvider.java @@ -1,30 +1,21 @@ package net.blay09.mods.excompressum.fabric.datagen; import net.blay09.mods.excompressum.ExCompressum; -import net.blay09.mods.excompressum.block.AutoSieveBlock; -import net.blay09.mods.excompressum.block.ModBlocks; import net.blay09.mods.excompressum.item.ModItems; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; -import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider; import net.minecraft.advancements.critereon.EntityFlagsPredicate; import net.minecraft.advancements.critereon.EntityPredicate; -import net.minecraft.advancements.critereon.StatePropertiesPredicate; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Items; -import net.minecraft.world.level.block.Block; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.entries.LootItem; -import net.minecraft.world.level.storage.loot.functions.LootingEnchantFunction; import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; -import net.minecraft.world.level.storage.loot.functions.SetNbtFunction; import net.minecraft.world.level.storage.loot.functions.SmeltItemFunction; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; -import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition; import net.minecraft.world.level.storage.loot.predicates.LootItemEntityPropertyCondition; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModItemTagProvider.java b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModItemTagProvider.java index f88a0961..c1601803 100644 --- a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModItemTagProvider.java +++ b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModItemTagProvider.java @@ -11,7 +11,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; -import org.jetbrains.annotations.NotNull; import java.util.concurrent.CompletableFuture; @@ -149,10 +148,10 @@ protected void addTags(HolderLookup.Provider lookup) { } private static ResourceLocation sequentia(String name) { - return new ResourceLocation(Compat.EXNIHILO_SEQUENTIA, name); + return ResourceLocation.fromNamespaceAndPath(Compat.EXNIHILO_SEQUENTIA, name); } private static ResourceLocation deorum(String name) { - return new ResourceLocation(Compat.EX_DEORUM, name); + return ResourceLocation.fromNamespaceAndPath(Compat.EX_DEORUM, name); } } diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModModelProvider.java b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModModelProvider.java index 004909ad..6918137b 100644 --- a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModModelProvider.java +++ b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModModelProvider.java @@ -4,7 +4,6 @@ import net.blay09.mods.excompressum.item.ModItems; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.models.BlockModelGenerators; import net.minecraft.data.models.ItemModelGenerators; import net.minecraft.data.models.blockstates.MultiVariantGenerator; @@ -13,7 +12,6 @@ import net.minecraft.data.models.blockstates.VariantProperties; import net.minecraft.data.models.model.*; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import java.util.Optional; @@ -41,7 +39,7 @@ public void generateBlockStateModels(BlockModelGenerators generators) { for (final var woodenCrucibleType : WoodenCrucibleType.values()) { final var woodenCrucible = ModBlocks.woodenCrucibles[woodenCrucibleType.ordinal()]; final var model = createSimpleRetexturedModel(generators, woodenCrucible, woodenCrucibleType.getBaseBlock(), - new ResourceLocation("excompressum", "block/wooden_crucible")); + ResourceLocation.fromNamespaceAndPath("excompressum", "block/wooden_crucible")); final var stateGenerator = BlockModelGenerators.createSimpleBlock(woodenCrucible, model); generators.blockStateOutput.accept(stateGenerator); } @@ -49,7 +47,7 @@ public void generateBlockStateModels(BlockModelGenerators generators) { for (final var heavySieveType : HeavySieveType.values()) { final var woodenCrucible = ModBlocks.heavySieves[heavySieveType.ordinal()]; final var model = createSimpleRetexturedModel(generators, woodenCrucible, heavySieveType.getBaseBlock(), - new ResourceLocation("excompressum", "block/heavy_sieve")); + ResourceLocation.fromNamespaceAndPath("excompressum", "block/heavy_sieve")); final var stateGenerator = BlockModelGenerators.createSimpleBlock(woodenCrucible, model); generators.blockStateOutput.accept(stateGenerator); } @@ -83,8 +81,8 @@ public void generateItemModels(ItemModelGenerators itemModelGenerator) { for (Block bait : ModBlocks.baits) { final var modelLocation = ModelLocationUtils.getModelLocation(bait.asItem()); - final var baitTexture = new ResourceLocation("excompressum", "item/bait"); - final var baitOverlayTexture = new ResourceLocation("excompressum", "item/bait_overlay"); + final var baitTexture = ResourceLocation.fromNamespaceAndPath("excompressum", "item/bait"); + final var baitOverlayTexture = ResourceLocation.fromNamespaceAndPath("excompressum", "item/bait_overlay"); itemModelGenerator.generateLayeredItem(modelLocation, baitTexture, baitOverlayTexture); } } diff --git a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModRecipeProvider.java b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModRecipeProvider.java index d5f7f6b0..e8c9a7cf 100644 --- a/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModRecipeProvider.java +++ b/fabric/src/main/java/net/blay09/mods/excompressum/fabric/datagen/ModRecipeProvider.java @@ -5,24 +5,25 @@ import net.blay09.mods.excompressum.tag.ModItemTags; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; -import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.core.HolderLookup; import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Blocks; -import java.util.function.Consumer; +import java.util.concurrent.CompletableFuture; import static net.minecraft.data.recipes.ShapedRecipeBuilder.shaped; import static net.minecraft.data.recipes.ShapelessRecipeBuilder.shapeless; public class ModRecipeProvider extends FabricRecipeProvider { - public ModRecipeProvider(FabricDataOutput output) { - super(output); + public ModRecipeProvider(FabricDataOutput output, CompletableFuture provider) { + super(output, provider); } @Override - public void buildRecipes(Consumer exporter) { + public void buildRecipes(RecipeOutput exporter) { shaped(RecipeCategory.DECORATIONS, ModBlocks.woodenCrucibles[WoodenCrucibleType.ACACIA.ordinal()]) .pattern("P P") .pattern("P P") diff --git a/fabric/src/main/resources/excompressum.mixins.json b/fabric/src/main/resources/excompressum.fabric.mixins.json similarity index 89% rename from fabric/src/main/resources/excompressum.mixins.json rename to fabric/src/main/resources/excompressum.fabric.mixins.json index 658ef4c7..33c4685e 100644 --- a/fabric/src/main/resources/excompressum.mixins.json +++ b/fabric/src/main/resources/excompressum.fabric.mixins.json @@ -4,7 +4,6 @@ "package": "net.blay09.mods.excompressum.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "LootTableAccessor" ], "client": [ ], diff --git a/forge/src/main/java/net/blay09/mods/excompressum/forge/ForgeExCompressum.java b/forge/src/main/java/net/blay09/mods/excompressum/forge/ForgeExCompressum.java index 8cb09c94..8f252487 100644 --- a/forge/src/main/java/net/blay09/mods/excompressum/forge/ForgeExCompressum.java +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/ForgeExCompressum.java @@ -6,7 +6,6 @@ import net.blay09.mods.excompressum.ExCompressum; import net.blay09.mods.excompressum.client.ExCompressumClient; import net.blay09.mods.excompressum.forge.compat.top.TheOneProbeAddon; -import net.minecraft.world.level.storage.loot.LootTable; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.ModList; @@ -22,8 +21,6 @@ public ForgeExCompressum() { DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> BalmClient.initialize(ExCompressum.MOD_ID, EmptyLoadContext.INSTANCE, ExCompressumClient::initialize)); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::imc); - - ExCompressum.lootTableLoader = (gson, resourceLocation, jsonElement) -> gson.fromJson(jsonElement, LootTable.class); } private void imc(InterModEnqueueEvent event) { diff --git a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedChickenStickRecipe.java b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedChickenStickRecipe.java index bdfcd976..f9f0deeb 100644 --- a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedChickenStickRecipe.java +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedChickenStickRecipe.java @@ -17,7 +17,7 @@ public class ExpandedChickenStickRecipe { private final List outputItems; public ExpandedChickenStickRecipe(ChickenStickRecipe recipe) { - ingredient = recipe.getInput(); + ingredient = recipe.getIngredient(); List entries = LootTableUtils.getLootTableEntries(recipe.getLootTable()); outputs = LootTableUtils.mergeLootTableEntries(entries); outputItems = outputs.stream().map(MergedLootTableEntry::getItemStack).collect(Collectors.toList()); diff --git a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedHeavySieveRecipe.java b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedHeavySieveRecipe.java index b317ae3f..4791dcec 100644 --- a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedHeavySieveRecipe.java +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedHeavySieveRecipe.java @@ -25,22 +25,14 @@ public class ExpandedHeavySieveRecipe { public ExpandedHeavySieveRecipe(HeavySieveRecipe recipe) { this.recipe = recipe; meshItems = new ArrayList<>(); - if (recipe.getMinimumMesh() != null) { - SieveMeshRegistryEntry minimumMesh = SieveMeshRegistry.getEntry(recipe.getMinimumMesh()); - for (SieveMeshRegistryEntry mesh : SieveMeshRegistry.getEntries().values()) { - if (mesh.getMeshLevel() >= minimumMesh.getMeshLevel()) { + for (final var meshType : recipe.getMeshes()) { + for (final var mesh : SieveMeshRegistry.getEntries().values()) { + if (mesh.getMeshType() == meshType) { meshItems.add(mesh.getItemStack()); } } - } else if (recipe.getMeshes() != null) { - for (CommonMeshType meshType : recipe.getMeshes()) { - for (SieveMeshRegistryEntry mesh : SieveMeshRegistry.getEntries().values()) { - if (mesh.getMeshType() == meshType) { - meshItems.add(mesh.getItemStack()); - } - } - } } + ingredient = recipe.getIngredient(); List entries = LootTableUtils.getLootTableEntries(recipe.getLootTable()); outputs = LootTableUtils.mergeLootTableEntries(entries); diff --git a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedSieveRecipe.java b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedSieveRecipe.java index 90eb4e16..d57e4bc1 100644 --- a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedSieveRecipe.java +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/ExpandedSieveRecipe.java @@ -27,21 +27,12 @@ public class ExpandedSieveRecipe { public ExpandedSieveRecipe(SieveRecipe recipe) { this.recipe = recipe; meshItems = new ArrayList<>(); - if (recipe.getMinimumMesh() != null) { - SieveMeshRegistryEntry minimumMesh = SieveMeshRegistry.getEntry(recipe.getMinimumMesh()); - for (SieveMeshRegistryEntry mesh : SieveMeshRegistry.getEntries().values()) { - if (mesh.getMeshLevel() >= minimumMesh.getMeshLevel()) { + for (final var meshType : recipe.getMeshes()) { + for (final var mesh : SieveMeshRegistry.getEntries().values()) { + if (mesh.getMeshType() == meshType) { meshItems.add(mesh.getItemStack()); } } - } else if (recipe.getMeshes() != null) { - for (CommonMeshType meshType : recipe.getMeshes()) { - for (SieveMeshRegistryEntry mesh : SieveMeshRegistry.getEntries().values()) { - if (mesh.getMeshType() == meshType) { - meshItems.add(mesh.getItemStack()); - } - } - } } ingredient = recipe.getIngredient(); List entries = LootTableUtils.getLootTableEntries(recipe.getLootTable()); diff --git a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/JEIAddon.java b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/JEIAddon.java index 27c4b3d4..10c19f72 100644 --- a/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/JEIAddon.java +++ b/forge/src/main/java/net/blay09/mods/excompressum/forge/compat/jei/JEIAddon.java @@ -108,7 +108,7 @@ public void registerRecipes(IRecipeRegistration registry) { final var recipes = fluidOutputMap.get(fluidName); List> inputs = new ArrayList<>(); for (final var meltable : recipes) { - for (final var matchingStack : meltable.getInput().getItems()) { + for (final var matchingStack : meltable.getIngredient().getItems()) { inputs.add(Pair.of(meltable, matchingStack)); } } @@ -131,11 +131,11 @@ private void loadGeneratedHeavySieveRecipe(Level level, boolean waterlogged, Gen final var waterLoggedState = ModBlocks.heavySieves[0].defaultBlockState().setValue(HeavySieveBlock.WATERLOGGED, waterlogged); for (final var mesh : SieveMeshRegistry.getEntries().values()) { final var rolls = HeavySieveRegistry.getGeneratedRollCount(generatedRecipe); - final var source = Balm.getRegistries().getItem(generatedRecipe.getSource()); + final var source = Balm.getRegistries().getItem(generatedRecipe.getSourceItem()); final var lootTable = ExNihilo.getInstance().generateHeavySieveLootTable(level, waterLoggedState, source, rolls, mesh); if (!LootTableUtils.isLootTableEmpty(lootTable)) { final var recipe = new HeavySieveRecipeImpl(generatedRecipe.getRecipeId(), - generatedRecipe.getInput(), + generatedRecipe.getIngredient(), lootTable, waterlogged, null, diff --git a/forge/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java b/forge/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java deleted file mode 100644 index 50611e30..00000000 --- a/forge/src/main/java/net/blay09/mods/excompressum/mixin/LootTableAccessor.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.blay09.mods.excompressum.mixin; - -import net.blay09.mods.excompressum.CommonLootTableAccessor; -import net.minecraft.world.level.storage.loot.LootPool; -import net.minecraft.world.level.storage.loot.LootTable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.List; - -@Mixin(LootTable.class) -public abstract class LootTableAccessor implements CommonLootTableAccessor { - @Accessor - protected abstract List getPools(); - - @Override - public LootPool[] balm_getPools() { - return getPools().toArray(LootPool[]::new); - } -} diff --git a/forge/src/main/resources/excompressum.forge.mixins.json b/forge/src/main/resources/excompressum.forge.mixins.json new file mode 100644 index 00000000..e4b3be38 --- /dev/null +++ b/forge/src/main/resources/excompressum.forge.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.blay09.mods.excompressum.mixin", + "compatibilityLevel": "JAVA_17", + "refmap": "excompressum.refmap.json", + "mixins": [ + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/neoforge/src/main/java/net/blay09/mods/excompressum/neoforge/mixin/LootTableAccessor.java b/neoforge/src/main/java/net/blay09/mods/excompressum/neoforge/mixin/LootTableAccessor.java deleted file mode 100644 index 8026d84d..00000000 --- a/neoforge/src/main/java/net/blay09/mods/excompressum/neoforge/mixin/LootTableAccessor.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.blay09.mods.excompressum.neoforge.mixin; - -import net.blay09.mods.excompressum.CommonLootTableAccessor; -import net.minecraft.world.level.storage.loot.LootPool; -import net.minecraft.world.level.storage.loot.LootTable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.List; - -@Mixin(LootTable.class) -public abstract class LootTableAccessor implements CommonLootTableAccessor { - @Accessor - protected abstract List getPools(); - - @Override - public LootPool[] balm_getPools() { - return getPools().toArray(LootPool[]::new); - } -}