diff options
| author | shedaniel <daniel@shedaniel.me> | 2024-10-26 16:55:52 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-10-26 16:55:57 +0800 |
| commit | ddb48e2032d1986709cad973067693eec3118504 (patch) | |
| tree | e7905130008c67767d2ad2a4d72f49ba4df7e6e3 /default-plugin/src/main/java/me/shedaniel/rei/plugin/common | |
| parent | eaf9236e3da2adafcea204778ecc0072e70d0aa5 (diff) | |
| download | RoughlyEnoughItems-ddb48e2032d1986709cad973067693eec3118504.tar.gz RoughlyEnoughItems-ddb48e2032d1986709cad973067693eec3118504.tar.bz2 RoughlyEnoughItems-ddb48e2032d1986709cad973067693eec3118504.zip | |
Update to 1.21.2 (Please read Primer)
https://hackmd.io/@shedaniel/rei17_primer
Diffstat (limited to 'default-plugin/src/main/java/me/shedaniel/rei/plugin/common')
38 files changed, 1143 insertions, 626 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java index a5de54531..5a7b3c4af 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java @@ -29,25 +29,23 @@ import me.shedaniel.rei.plugin.common.displays.anvil.DefaultAnvilDisplay; import me.shedaniel.rei.plugin.common.displays.beacon.DefaultBeaconBaseDisplay; import me.shedaniel.rei.plugin.common.displays.beacon.DefaultBeaconPaymentDisplay; import me.shedaniel.rei.plugin.common.displays.brewing.DefaultBrewingDisplay; -import me.shedaniel.rei.plugin.common.displays.cooking.DefaultBlastingDisplay; -import me.shedaniel.rei.plugin.common.displays.cooking.DefaultSmeltingDisplay; -import me.shedaniel.rei.plugin.common.displays.cooking.DefaultSmokingDisplay; -import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCraftingDisplay; +import me.shedaniel.rei.plugin.common.displays.cooking.CookingDisplay; +import me.shedaniel.rei.plugin.common.displays.crafting.CraftingDisplay; import me.shedaniel.rei.plugin.common.displays.tag.DefaultTagDisplay; import org.jetbrains.annotations.ApiStatus; public interface BuiltinPlugin { - CategoryIdentifier<DefaultCraftingDisplay<?>> CRAFTING = CategoryIdentifier.of("minecraft", "plugins/crafting"); - CategoryIdentifier<DefaultSmeltingDisplay> SMELTING = CategoryIdentifier.of("minecraft", "plugins/smelting"); - CategoryIdentifier<DefaultSmokingDisplay> SMOKING = CategoryIdentifier.of("minecraft", "plugins/smoking"); - CategoryIdentifier<DefaultBlastingDisplay> BLASTING = CategoryIdentifier.of("minecraft", "plugins/blasting"); + CategoryIdentifier<CraftingDisplay> CRAFTING = CategoryIdentifier.of("minecraft", "plugins/crafting"); + CategoryIdentifier<CookingDisplay> SMELTING = CategoryIdentifier.of("minecraft", "plugins/smelting"); + CategoryIdentifier<CookingDisplay> SMOKING = CategoryIdentifier.of("minecraft", "plugins/smoking"); + CategoryIdentifier<CookingDisplay> BLASTING = CategoryIdentifier.of("minecraft", "plugins/blasting"); CategoryIdentifier<DefaultCampfireDisplay> CAMPFIRE = CategoryIdentifier.of("minecraft", "plugins/campfire"); CategoryIdentifier<DefaultStoneCuttingDisplay> STONE_CUTTING = CategoryIdentifier.of("minecraft", "plugins/stone_cutting"); CategoryIdentifier<DefaultStrippingDisplay> STRIPPING = CategoryIdentifier.of("minecraft", "plugins/stripping"); CategoryIdentifier<DefaultBrewingDisplay> BREWING = CategoryIdentifier.of("minecraft", "plugins/brewing"); CategoryIdentifier<DefaultCompostingDisplay> COMPOSTING = CategoryIdentifier.of("minecraft", "plugins/composting"); CategoryIdentifier<DefaultFuelDisplay> FUEL = CategoryIdentifier.of("minecraft", "plugins/fuel"); - CategoryIdentifier<DefaultSmithingDisplay> SMITHING = CategoryIdentifier.of("minecraft", "plugins/smithing"); + CategoryIdentifier<SmithingDisplay> SMITHING = CategoryIdentifier.of("minecraft", "plugins/smithing"); CategoryIdentifier<DefaultAnvilDisplay> ANVIL = CategoryIdentifier.of("minecraft", "plugins/anvil"); CategoryIdentifier<DefaultBeaconBaseDisplay> BEACON_BASE = CategoryIdentifier.of("minecraft", "plugins/beacon_base"); CategoryIdentifier<DefaultBeaconPaymentDisplay> BEACON_PAYMENT = CategoryIdentifier.of("minecraft", "plugins/beacon_payment"); diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java index a98ee1563..5a4a84ce1 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java @@ -29,24 +29,29 @@ import dev.architectury.hooks.fluid.FluidStackHooks; import me.shedaniel.rei.api.common.display.DisplaySerializerRegistry; import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry; import me.shedaniel.rei.api.common.fluid.FluidSupportProvider; -import me.shedaniel.rei.api.common.plugins.REIServerPlugin; +import me.shedaniel.rei.api.common.plugins.REICommonPlugin; +import me.shedaniel.rei.api.common.registry.display.ServerDisplayRegistry; import me.shedaniel.rei.api.common.util.EntryStacks; +import me.shedaniel.rei.plugin.client.categories.crafting.filler.*; +import me.shedaniel.rei.plugin.client.displays.ClientsidedCookingDisplay; +import me.shedaniel.rei.plugin.client.displays.ClientsidedCraftingDisplay; import me.shedaniel.rei.plugin.common.displays.*; +import me.shedaniel.rei.plugin.common.displays.anvil.DefaultAnvilDisplay; import me.shedaniel.rei.plugin.common.displays.beacon.DefaultBeaconBaseDisplay; -import me.shedaniel.rei.plugin.common.displays.beacon.DefaultBeaconDisplay; import me.shedaniel.rei.plugin.common.displays.beacon.DefaultBeaconPaymentDisplay; import me.shedaniel.rei.plugin.common.displays.brewing.DefaultBrewingDisplay; import me.shedaniel.rei.plugin.common.displays.cooking.DefaultBlastingDisplay; -import me.shedaniel.rei.plugin.common.displays.cooking.DefaultCookingDisplay; import me.shedaniel.rei.plugin.common.displays.cooking.DefaultSmeltingDisplay; import me.shedaniel.rei.plugin.common.displays.cooking.DefaultSmokingDisplay; -import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCraftingDisplay; +import me.shedaniel.rei.plugin.common.displays.crafting.*; import me.shedaniel.rei.plugin.common.displays.tag.TagNodes; import net.minecraft.core.component.DataComponents; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.*; import net.minecraft.world.item.enchantment.ItemEnchantments; import net.minecraft.world.level.material.Fluid; import org.jetbrains.annotations.ApiStatus; @@ -56,7 +61,18 @@ import java.util.function.Function; import java.util.stream.Stream; @ApiStatus.Internal -public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin { +public class DefaultPlugin implements BuiltinPlugin, REICommonPlugin { + private static final CraftingRecipeFiller<?>[] CRAFTING_RECIPE_FILLERS = new CraftingRecipeFiller[]{ + new TippedArrowRecipeFiller(), + new BannerDuplicateRecipeFiller(), + new ShieldDecorationRecipeFiller(), + new BookCloningRecipeFiller(), + new FireworkRocketRecipeFiller(), + new ArmorDyeRecipeFiller(), + new MapCloningRecipeFiller(), + new MapExtendingRecipeFiller() + }; + static { TagNodes.init(); } @@ -93,31 +109,77 @@ public class DefaultPlugin implements BuiltinPlugin, REIServerPlugin { } @Override + public void registerDisplays(ServerDisplayRegistry registry) { + registry.beginRecipeFiller(CraftingRecipe.class) + .filterType(RecipeType.CRAFTING) + .fill(DefaultCraftingDisplay::of); + registry.beginRecipeFiller(SmeltingRecipe.class) + .filterType(RecipeType.SMELTING) + .fill(DefaultSmeltingDisplay::new); + registry.beginRecipeFiller(SmokingRecipe.class) + .filterType(RecipeType.SMOKING) + .fill(DefaultSmokingDisplay::new); + registry.beginRecipeFiller(BlastingRecipe.class) + .filterType(RecipeType.BLASTING) + .fill(DefaultBlastingDisplay::new); + registry.beginRecipeFiller(CampfireCookingRecipe.class) + .filterType(RecipeType.CAMPFIRE_COOKING) + .fill(DefaultCampfireDisplay::new); + registry.beginRecipeFiller(StonecutterRecipe.class) + .filterType(RecipeType.STONECUTTING) + .fill(DefaultStoneCuttingDisplay::new); + registry.beginRecipeFiller(SmithingTransformRecipe.class) + .filterType(RecipeType.SMITHING) + .fill(DefaultSmithingDisplay::ofTransforming); + registry.beginRecipeFiller(SmithingTrimRecipe.class) + .filterType(RecipeType.SMITHING) + .fillMultiple(DefaultSmithingDisplay::fromTrimming); + + for (CraftingRecipeFiller<?> filler : CRAFTING_RECIPE_FILLERS) { + filler.registerDisplays(registry); + } + } + + @Override public void registerDisplaySerializer(DisplaySerializerRegistry registry) { - registry.register(CRAFTING, DefaultCraftingDisplay.serializer()); - registry.register(SMELTING, DefaultCookingDisplay.serializer(DefaultSmeltingDisplay::new)); - registry.register(SMOKING, DefaultCookingDisplay.serializer(DefaultSmokingDisplay::new)); - registry.register(BLASTING, DefaultCookingDisplay.serializer(DefaultBlastingDisplay::new)); - registry.register(CAMPFIRE, DefaultCampfireDisplay.serializer()); - registry.register(STONE_CUTTING, DefaultStoneCuttingDisplay.serializer()); - registry.register(STRIPPING, DefaultStrippingDisplay.serializer()); - registry.register(BREWING, DefaultBrewingDisplay.serializer()); - registry.register(COMPOSTING, DefaultCompostingDisplay.serializer()); - registry.register(FUEL, DefaultFuelDisplay.serializer()); - registry.register(SMITHING, DefaultSmithingDisplay.serializer()); - registry.register(BEACON_BASE, DefaultBeaconDisplay.serializer(DefaultBeaconBaseDisplay::new)); - registry.register(BEACON_PAYMENT, DefaultBeaconDisplay.serializer(DefaultBeaconPaymentDisplay::new)); - registry.register(TILLING, DefaultTillingDisplay.serializer()); - registry.register(PATHING, DefaultPathingDisplay.serializer()); - registry.register(WAXING, DefaultWaxingDisplay.serializer()); - registry.register(WAX_SCRAPING, DefaultWaxScrapingDisplay.serializer()); - registry.register(OXIDIZING, DefaultOxidizingDisplay.serializer()); - registry.register(OXIDATION_SCRAPING, DefaultOxidationScrapingDisplay.serializer()); - registry.register(INFO, DefaultInformationDisplay.serializer()); + registry.register(id("client/crafting/shaped"), ClientsidedCraftingDisplay.Shaped.SERIALIZER); + registry.register(id("client/crafting/shapeless"), ClientsidedCraftingDisplay.Shapeless.SERIALIZER); + registry.register(id("client/smelting"), ClientsidedCookingDisplay.Smelting.SERIALIZER); + registry.register(id("client/smoking"), ClientsidedCookingDisplay.Smoking.SERIALIZER); + registry.register(id("client/blasting"), ClientsidedCookingDisplay.Blasting.SERIALIZER); + registry.register(id("default/crafting/shaped"), DefaultShapedDisplay.SERIALIZER); + registry.register(id("default/crafting/shapeless"), DefaultShapelessDisplay.SERIALIZER); + registry.register(id("default/crafting/custom"), DefaultCustomDisplay.SERIALIZER); + registry.register(id("default/crafting/custom_shaped"), DefaultCustomShapedDisplay.SERIALIZER); + registry.register(id("default/crafting/custom_shapeless"), DefaultCustomShapelessDisplay.SERIALIZER); + registry.register(id("default/smelting"), DefaultSmeltingDisplay.SERIALIZER); + registry.register(id("default/smoking"), DefaultSmokingDisplay.SERIALIZER); + registry.register(id("default/blasting"), DefaultBlastingDisplay.SERIALIZER); + registry.register(id("default/campfire"), DefaultCampfireDisplay.SERIALIZER); + registry.register(id("default/stone_cutting"), DefaultStoneCuttingDisplay.SERIALIZER); + registry.register(id("default/stripping"), DefaultStrippingDisplay.SERIALIZER); + registry.register(id("default/brewing"), DefaultBrewingDisplay.SERIALIZER); + registry.register(id("default/composting"), DefaultCompostingDisplay.SERIALIZER); + registry.register(id("default/fuel"), DefaultFuelDisplay.SERIALIZER); + registry.register(id("default/smithing"), DefaultSmithingDisplay.SERIALIZER); + registry.register(id("default/anvil"), DefaultAnvilDisplay.SERIALIZER); + registry.register(id("default/beacon_base"), DefaultBeaconBaseDisplay.SERIALIZER); + registry.register(id("default/beacon_payment"), DefaultBeaconPaymentDisplay.SERIALIZER); + registry.register(id("default/tilling"), DefaultTillingDisplay.SERIALIZER); + registry.register(id("default/pathing"), DefaultPathingDisplay.SERIALIZER); + registry.register(id("default/waxing"), DefaultWaxingDisplay.SERIALIZER); + registry.register(id("default/waxing_scraping"), DefaultWaxScrapingDisplay.SERIALIZER); + registry.register(id("default/oxidizing"), DefaultOxidizingDisplay.SERIALIZER); + registry.register(id("default/oxidizing_scraping"), DefaultOxidationScrapingDisplay.SERIALIZER); + registry.register(id("roughlyenoughitems:default/information"), DefaultInformationDisplay.SERIALIZER); } @Override public double getPriority() { return -100; } + + private static ResourceLocation id(String path) { + return ResourceLocation.parse(path); + } } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java new file mode 100644 index 000000000..919eb561b --- /dev/null +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java @@ -0,0 +1,51 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022, 2023 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.plugin.common; + +import com.mojang.serialization.Codec; +import io.netty.buffer.ByteBuf; +import me.shedaniel.rei.api.common.display.Display; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.util.ByIdMap; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; + +import java.util.function.IntFunction; + +public interface SmithingDisplay extends Display { + @Nullable + SmithingRecipeType type(); + + @ApiStatus.Experimental + enum SmithingRecipeType { + TRIM, + TRANSFORM, + ; + + public static final Codec<SmithingRecipeType> CODEC = Codec.STRING.xmap(SmithingRecipeType::valueOf, SmithingRecipeType::name); + public static final IntFunction<SmithingRecipeType> BY_ID = ByIdMap.continuous(Enum::ordinal, values(), ByIdMap.OutOfBoundsStrategy.ZERO); + public static final StreamCodec<ByteBuf, SmithingRecipeType> STREAM_CODEC = ByteBufCodecs.idMapper(BY_ID, Enum::ordinal); + } +} diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/CampfireDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/CampfireDisplay.java new file mode 100644 index 000000000..9c750d8f7 --- /dev/null +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/CampfireDisplay.java @@ -0,0 +1,32 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022, 2023 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.plugin.common.displays; + +import me.shedaniel.rei.api.common.display.Display; + +import java.util.OptionalDouble; + +public interface CampfireDisplay extends Display { + OptionalDouble cookTime(); +} diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java index c5352b3d2..67f0e69bb 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java @@ -23,26 +23,52 @@ package me.shedaniel.rei.plugin.common.displays; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.display.Display; +import me.shedaniel.rei.api.common.display.DisplaySerializer; import me.shedaniel.rei.api.common.display.basic.BasicDisplay; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.util.EntryIngredients; import me.shedaniel.rei.plugin.common.BuiltinPlugin; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.CampfireCookingRecipe; import net.minecraft.world.item.crafting.RecipeHolder; -import java.util.Collections; import java.util.List; import java.util.Optional; +import java.util.OptionalDouble; -public class DefaultCampfireDisplay extends BasicDisplay { - private double cookTime; +public class DefaultCampfireDisplay extends BasicDisplay implements CampfireDisplay { + public static final DisplaySerializer<DefaultCampfireDisplay> SERIALIZER = DisplaySerializer.of( + RecordCodecBuilder.mapCodec(instance -> instance.group( + EntryIngredient.codec().listOf().fieldOf("inputs").forGetter(DefaultCampfireDisplay::getInputEntries), + EntryIngredient.codec().listOf().fieldOf("outputs").forGetter(DefaultCampfireDisplay::getOutputEntries), + ResourceLocation.CODEC.optionalFieldOf("location").forGetter(DefaultCampfireDisplay::getDisplayLocation), + Codec.DOUBLE.fieldOf("cookTime").forGetter(d -> d.cookTime) + ).apply(instance, DefaultCampfireDisplay::new)), + StreamCodec.composite( + EntryIngredient.streamCodec().apply(ByteBufCodecs.list()), + DefaultCampfireDisplay::getInputEntries, + EntryIngredient.streamCodec().apply(ByteBufCodecs.list()), + DefaultCampfireDisplay::getOutputEntries, + ByteBufCodecs.optional(ResourceLocation.STREAM_CODEC), + DefaultCampfireDisplay::getDisplayLocation, + ByteBufCodecs.DOUBLE, + d -> d.cookTime, + DefaultCampfireDisplay::new + )); + + private final double cookTime; public DefaultCampfireDisplay(RecipeHolder<CampfireCookingRecipe> recipe) { - this(EntryIngredients.ofIngredients(recipe.value().getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.value().getResultItem(BasicDisplay.registryAccess()))), - Optional.ofNullable(recipe.id()), recipe.value().getCookingTime()); + this(List.of(EntryIngredients.ofIngredient(recipe.value().input())), + List.of(EntryIngredients.of(recipe.value().result())), + Optional.of(recipe.id().location()), recipe.value().cookingTime()); } public DefaultCampfireDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, CompoundTag tag) { @@ -54,8 +80,9 @@ public class DefaultCampfireDisplay extends BasicDisplay { this.cookTime = cookTime; } - public double getCookTime() { - return cookTime; + @Override + public OptionalDouble cookTime() { + return OptionalDouble.of(cookTime); } @Override @@ -63,9 +90,8 @@ public class DefaultCampfireDisplay extends BasicDisplay { return BuiltinPlugin.CAMPFIRE; } - public static BasicDisplay.Serializer<DefaultCampfireDisplay> serializer() { - return BasicDisplay.Serializer.of(DefaultCampfireDisplay::new, (display, tag) -> { - tag.putDouble("cookTime", display.cookTime); - }); + @Override + public DisplaySerializer<? extends Display> getSerializer() { + return SERIALIZER; } } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java index 38173d1f9..25b08fbe0 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java @@ -23,13 +23,19 @@ package me.shedaniel.rei.plugin.common.displays; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects. |
