aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src/main/java/me/shedaniel/rei/plugin/common
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2024-10-26 16:55:52 +0800
committershedaniel <daniel@shedaniel.me>2024-10-26 16:55:57 +0800
commitddb48e2032d1986709cad973067693eec3118504 (patch)
treee7905130008c67767d2ad2a4d72f49ba4df7e6e3 /default-plugin/src/main/java/me/shedaniel/rei/plugin/common
parenteaf9236e3da2adafcea204778ecc0072e70d0aa5 (diff)
downloadRoughlyEnoughItems-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')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/BuiltinPlugin.java16
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/DefaultPlugin.java112
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java51
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/CampfireDisplay.java32
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCampfireDisplay.java48
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultCompostingDisplay.java41
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultFuelDisplay.java35
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultInformationDisplay.java65
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultOxidationScrapingDisplay.java29
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultOxidizingDisplay.java29
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultPathingDisplay.java29
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java118
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultStoneCuttingDisplay.java32
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultStrippingDisplay.java29
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultTillingDisplay.java29
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultWaxScrapingDisplay.java29
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultWaxingDisplay.java29
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java38
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/beacon/DefaultBeaconBaseDisplay.java9
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/beacon/DefaultBeaconDisplay.java20
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/beacon/DefaultBeaconPaymentDisplay.java9
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/brewing/BrewingRecipe.java14
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/brewing/DefaultBrewingDisplay.java70
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/CookingDisplay.java44
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultBlastingDisplay.java16
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultCookingDisplay.java84
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmeltingDisplay.java16
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/DefaultSmokingDisplay.java16
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/CraftingDisplay.java105
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/CraftingRecipeSizeProvider.java82
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCraftingDisplay.java194
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomDisplay.java57
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapedDisplay.java60
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultCustomShapelessDisplay.java54
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapedDisplay.java63
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/DefaultShapelessDisplay.java50
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/tag/DefaultTagDisplay.java9
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/tag/TagNodes.java6
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.