From ddb48e2032d1986709cad973067693eec3118504 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 26 Oct 2024 16:55:52 +0800 Subject: Update to 1.21.2 (Please read Primer) https://hackmd.io/@shedaniel/rei17_primer --- .../InventoryCraftingTransferHandler.java | 6 +- .../recipebook/DefaultRecipeBookHandler.java | 44 ++--- .../rei/plugin/client/BuiltinClientPlugin.java | 8 +- .../rei/plugin/client/DefaultClientPlugin.java | 197 ++++++++++----------- .../client/categories/DefaultBrewingCategory.java | 5 +- .../client/categories/DefaultCampfireCategory.java | 17 +- .../categories/DefaultInformationCategory.java | 20 +-- .../client/categories/DefaultSmithingCategory.java | 11 +- .../beacon/DefaultBeaconBaseCategory.java | 2 +- .../beacon/DefaultBeaconPaymentCategory.java | 2 +- .../categories/cooking/DefaultCookingCategory.java | 25 +-- .../crafting/DefaultCraftingCategory.java | 14 +- .../crafting/filler/ArmorDyeRecipeFiller.java | 15 +- .../filler/BannerDuplicateRecipeFiller.java | 5 +- .../crafting/filler/BookCloningRecipeFiller.java | 5 +- .../crafting/filler/CraftingRecipeFiller.java | 60 +------ .../filler/FireworkRocketRecipeFiller.java | 15 +- .../crafting/filler/MapCloningRecipeFiller.java | 6 +- .../crafting/filler/MapExtendingRecipeFiller.java | 6 +- .../filler/ShieldDecorationRecipeFiller.java | 9 +- .../crafting/filler/ShulkerBoxColoringFiller.java | 61 ------- .../filler/SuspiciousStewRecipeFiller.java | 64 ------- .../crafting/filler/TippedArrowRecipeFiller.java | 2 +- .../categories/tag/ReferenceTagNodeWidget.java | 13 +- .../client/displays/ClientsidedCookingDisplay.java | 161 +++++++++++++++++ .../displays/ClientsidedCraftingDisplay.java | 181 +++++++++++++++++++ .../displays/ClientsidedRecipeBookDisplay.java | 32 ++++ .../DefaultPotionEffectExclusionZones.java | 8 +- .../DefaultRecipeBookExclusionZones.java | 8 +- .../plugin/client/favorites/TimeFavoriteEntry.java | 3 +- .../client/favorites/WeatherFavoriteEntry.java | 3 +- .../shedaniel/rei/plugin/common/BuiltinPlugin.java | 16 +- .../shedaniel/rei/plugin/common/DefaultPlugin.java | 112 +++++++++--- .../rei/plugin/common/SmithingDisplay.java | 51 ++++++ .../plugin/common/displays/CampfireDisplay.java | 32 ++++ .../common/displays/DefaultCampfireDisplay.java | 48 +++-- .../common/displays/DefaultCompostingDisplay.java | 41 +++-- .../plugin/common/displays/DefaultFuelDisplay.java | 35 +++- .../common/displays/DefaultInformationDisplay.java | 65 ++++--- .../displays/DefaultOxidationScrapingDisplay.java | 29 ++- .../common/displays/DefaultOxidizingDisplay.java | 29 ++- .../common/displays/DefaultPathingDisplay.java | 29 ++- .../common/displays/DefaultSmithingDisplay.java | 118 +++++++----- .../displays/DefaultStoneCuttingDisplay.java | 32 +++- .../common/displays/DefaultStrippingDisplay.java | 29 ++- .../common/displays/DefaultTillingDisplay.java | 29 ++- .../common/displays/DefaultWaxScrapingDisplay.java | 29 ++- .../common/displays/DefaultWaxingDisplay.java | 29 ++- .../common/displays/anvil/DefaultAnvilDisplay.java | 38 +++- .../displays/beacon/DefaultBeaconBaseDisplay.java | 9 + .../displays/beacon/DefaultBeaconDisplay.java | 20 ++- .../beacon/DefaultBeaconPaymentDisplay.java | 9 + .../common/displays/brewing/BrewingRecipe.java | 14 +- .../displays/brewing/DefaultBrewingDisplay.java | 70 ++++---- .../common/displays/cooking/CookingDisplay.java | 44 +++++ .../displays/cooking/DefaultBlastingDisplay.java | 16 +- .../displays/cooking/DefaultCookingDisplay.java | 84 +++++---- .../displays/cooking/DefaultSmeltingDisplay.java | 16 +- .../displays/cooking/DefaultSmokingDisplay.java | 16 +- .../common/displays/crafting/CraftingDisplay.java | 105 +++++++++++ .../crafting/CraftingRecipeSizeProvider.java | 82 --------- .../displays/crafting/DefaultCraftingDisplay.java | 194 ++------------------ .../displays/crafting/DefaultCustomDisplay.java | 57 +++--- .../crafting/DefaultCustomShapedDisplay.java | 60 +++++-- .../crafting/DefaultCustomShapelessDisplay.java | 54 +++--- .../displays/crafting/DefaultShapedDisplay.java | 63 +++++-- .../displays/crafting/DefaultShapelessDisplay.java | 50 ++++-- .../common/displays/tag/DefaultTagDisplay.java | 9 +- .../rei/plugin/common/displays/tag/TagNodes.java | 6 +- 69 files changed, 1739 insertions(+), 1038 deletions(-) delete mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/ShulkerBoxColoringFiller.java delete mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/SuspiciousStewRecipeFiller.java create mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/client/displays/ClientsidedCookingDisplay.java create mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/client/displays/ClientsidedCraftingDisplay.java create mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/client/displays/ClientsidedRecipeBookDisplay.java create mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/common/SmithingDisplay.java create mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/CampfireDisplay.java create mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/cooking/CookingDisplay.java create mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/CraftingDisplay.java delete mode 100644 default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/crafting/CraftingRecipeSizeProvider.java (limited to 'default-plugin') diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/InventoryCraftingTransferHandler.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/InventoryCraftingTransferHandler.java index d57fc1bb6..cf68ef1d4 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/InventoryCraftingTransferHandler.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/InventoryCraftingTransferHandler.java @@ -30,7 +30,7 @@ import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.entry.InputIngredient; import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; import me.shedaniel.rei.api.common.util.CollectionUtils; -import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCraftingDisplay; +import me.shedaniel.rei.plugin.common.displays.crafting.CraftingDisplay; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; @@ -48,7 +48,7 @@ public class InventoryCraftingTransferHandler implements TransferHandler, Transf ApplicabilityResult applicable = parent.checkApplicable(context); if (!applicable.isApplicable()) return applicable; - DefaultCraftingDisplay display = (DefaultCraftingDisplay) context.getDisplay(); + CraftingDisplay display = (CraftingDisplay) context.getDisplay(); if (display != null && (display.getWidth() > 2 || display.getHeight() > 2)) { return ApplicabilityResult.createApplicableWithError(Component.translatable("error.rei.transfer.too_small", 2, 2)); } @@ -58,7 +58,7 @@ public class InventoryCraftingTransferHandler implements TransferHandler, Transf @Override public Result handle(Context context) { - List>> inputs = ((DefaultCraftingDisplay) context.getDisplay()).getInputIngredients(2, 2); + List>> inputs = ((CraftingDisplay) context.getDisplay()).getInputIngredients(2, 2); return parent.handleSimpleTransfer(context, parent.getMissingInputRenderer(), CollectionUtils.map(inputs, entry -> InputIngredient.withType(entry, VanillaEntryTypes.ITEM)), parent.getInputSlots(context), parent.getInventorySlots(context)); diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java index 5f42f0303..107ec319e 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/autocrafting/recipebook/DefaultRecipeBookHandler.java @@ -27,20 +27,16 @@ import me.shedaniel.rei.api.client.ClientHelper; import me.shedaniel.rei.api.client.registry.transfer.TransferHandler; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay; -import me.shedaniel.rei.api.common.transfer.info.MenuTransferException; -import me.shedaniel.rei.plugin.common.displays.cooking.DefaultCookingDisplay; -import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCraftingDisplay; +import me.shedaniel.rei.plugin.client.displays.ClientsidedCraftingDisplay; +import me.shedaniel.rei.plugin.client.displays.ClientsidedRecipeBookDisplay; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.gui.screens.recipebook.RecipeUpdateListener; +import net.minecraft.client.gui.screens.inventory.AbstractRecipeBookScreen; import net.minecraft.network.chat.Component; import net.minecraft.world.inventory.CraftingMenu; import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.inventory.RecipeBookMenu; -import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.item.crafting.RecipeHolder; - -import java.util.Optional; +import net.minecraft.world.item.crafting.display.RecipeDisplayId; @Environment(EnvType.CLIENT) public class DefaultRecipeBookHandler implements TransferHandler { @@ -49,7 +45,7 @@ public class DefaultRecipeBookHandler implements TransferHandler { if (context.getDisplay() instanceof SimpleGridMenuDisplay && ClientHelper.getInstance().canUseMovePackets()) return ApplicabilityResult.createNotApplicable(); Display display = context.getDisplay(); - if (!(context.getMenu() instanceof RecipeBookMenu container)) + if (!(context.getMenu() instanceof RecipeBookMenu container)) return ApplicabilityResult.createNotApplicable(); if (container == null) return ApplicabilityResult.createNotApplicable(); @@ -58,10 +54,10 @@ public class DefaultRecipeBookHandler implements TransferHandler { @Override public Result handle(Context context) { - RecipeBookMenu container = (RecipeBookMenu) context.getMenu(); + RecipeBookMenu container = (RecipeBookMenu) context.getMenu(); Display display = context.getDisplay(); - if (display instanceof DefaultCraftingDisplay craftingDisplay) { - if (craftingDisplay.getOptionalRecipe().isPresent()) { + if (display instanceof ClientsidedCraftingDisplay craftingDisplay) { + if (craftingDisplay.recipeDisplayId().isPresent()) { int h = -1, w = -1; if (container instanceof CraftingMenu) { h = 3; @@ -72,30 +68,26 @@ public class DefaultRecipeBookHandler implements TransferHandler { } if (h == -1 || w == -1) return Result.createNotApplicable(); - RecipeHolder recipe = craftingDisplay.getOptionalRecipe().get(); + RecipeDisplayId id = craftingDisplay.recipeDisplayId().get(); if (craftingDisplay.getHeight() > h || craftingDisplay.getWidth() > w) return Result.createFailed(Component.translatable("error.rei.transfer.too_small", h, w)); - if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) - return Result.createNotApplicable(); if (!context.isActuallyCrafting()) return Result.createSuccessful(); context.getMinecraft().setScreen(context.getContainerScreen()); - if (context.getContainerScreen() instanceof RecipeUpdateListener) - ((RecipeUpdateListener) context.getContainerScreen()).getRecipeBookComponent().ghostRecipe.clear(); - context.getMinecraft().gameMode.handlePlaceRecipe(container.containerId, recipe, context.isStackedCrafting()); + if (context.getContainerScreen() instanceof AbstractRecipeBookScreen screen) + screen.recipeBookComponent.ghostSlots.clear(); + context.getMinecraft().gameMode.handlePlaceRecipe(container.containerId, id, context.isStackedCrafting()); return Result.createSuccessful(); } - } else if (display instanceof DefaultCookingDisplay defaultDisplay) { - if (defaultDisplay.getOptionalRecipe().isPresent()) { - RecipeHolder recipe = (defaultDisplay).getOptionalRecipe().get(); - if (!context.getMinecraft().player.getRecipeBook().contains(recipe)) - return Result.createNotApplicable(); + } else if (display instanceof ClientsidedRecipeBookDisplay defaultDisplay) { + if (defaultDisplay.recipeDisplayId().isPresent()) { + RecipeDisplayId id = defaultDisplay.recipeDisplayId().get(); if (!context.isActuallyCrafting()) return Result.createSuccessful(); context.getMinecraft().setScreen(context.getContainerScreen()); - if (context.getContainerScreen() instanceof RecipeUpdateListener) - ((RecipeUpdateListener) context.getContainerScreen()).getRecipeBookComponent().ghostRecipe.clear(); - context.getMinecraft().gameMode.handlePlaceRecipe(container.containerId, recipe, context.isStackedCrafting()); + if (context.getContainerScreen() instanceof AbstractRecipeBookScreen screen) + screen.recipeBookComponent.ghostSlots.clear(); + context.getMinecraft().gameMode.handlePlaceRecipe(container.containerId, id, context.isStackedCrafting()); return Result.createSuccessful(); } } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/BuiltinClientPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/BuiltinClientPlugin.java index d87b56eeb..7b3bad53a 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/BuiltinClientPlugin.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/BuiltinClientPlugin.java @@ -28,8 +28,6 @@ import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.impl.ClientInternals; import me.shedaniel.rei.plugin.common.BuiltinPlugin; import net.minecraft.network.chat.Component; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; import java.util.List; import java.util.function.UnaryOperator; @@ -39,11 +37,7 @@ public interface BuiltinClientPlugin extends BuiltinPlugin { return (BuiltinClientPlugin) ClientInternals.getBuiltinPlugin(); } - default void registerBrewingRecipe(ItemStack input, Ingredient ingredient, ItemStack output) { - registerBrewingRecipe(Ingredient.of(input), ingredient, output); - } - - void registerBrewingRecipe(Ingredient input, Ingredient ingredient, ItemStack output); + void registerBrewingRecipe(EntryIngredient input, EntryIngredient ingredient, EntryIngredient output); void registerInformation(EntryIngredient ingredient, Component name, UnaryOperator> textBuilder); diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java index 84629be4d..6c93af751 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java @@ -56,8 +56,9 @@ import me.shedaniel.rei.plugin.client.categories.beacon.DefaultBeaconBaseCategor import me.shedaniel.rei.plugin.client.categories.beacon.DefaultBeaconPaymentCategory; import me.shedaniel.rei.plugin.client.categories.cooking.DefaultCookingCategory; import me.shedaniel.rei.plugin.client.categories.crafting.DefaultCraftingCategory; -import me.shedaniel.rei.plugin.client.categories.crafting.filler.*; import me.shedaniel.rei.plugin.client.categories.tag.DefaultTagCategory; +import me.shedaniel.rei.plugin.client.displays.ClientsidedCookingDisplay; +import me.shedaniel.rei.plugin.client.displays.ClientsidedCraftingDisplay; import me.shedaniel.rei.plugin.client.exclusionzones.DefaultPotionEffectExclusionZones; import me.shedaniel.rei.plugin.client.exclusionzones.DefaultRecipeBookExclusionZones; import me.shedaniel.rei.plugin.client.favorites.GameModeFavoriteEntry; @@ -71,10 +72,6 @@ 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.BrewingRecipe; 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.tag.DefaultTagDisplay; import me.shedaniel.rei.plugin.common.displays.tag.TagNodes; import net.fabricmc.api.EnvType; @@ -83,6 +80,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.inventory.*; import net.minecraft.client.gui.screens.recipebook.RecipeUpdateListener; import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; import net.minecraft.core.Registry; import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; @@ -97,14 +95,18 @@ import net.minecraft.world.item.*; import net.minecraft.world.item.alchemy.Potion; import net.minecraft.world.item.alchemy.PotionBrewing; import net.minecraft.world.item.alchemy.PotionContents; -import net.minecraft.world.item.crafting.*; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.display.FurnaceRecipeDisplay; +import net.minecraft.world.item.crafting.display.ShapedCraftingRecipeDisplay; +import net.minecraft.world.item.crafting.display.ShapelessCraftingRecipeDisplay; import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentInstance; +import net.minecraft.world.item.enchantment.Repairable; import net.minecraft.world.level.GameType; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.WeatheringCopper; -import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; @@ -121,25 +123,12 @@ import java.util.stream.Stream; @Environment(EnvType.CLIENT) @ApiStatus.Internal public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin { - private static final CraftingRecipeFiller[] CRAFTING_RECIPE_FILLERS = new CraftingRecipeFiller[]{ - new TippedArrowRecipeFiller(), - new ShulkerBoxColoringFiller(), - new BannerDuplicateRecipeFiller(), - new ShieldDecorationRecipeFiller(), - new SuspiciousStewRecipeFiller(), - new BookCloningRecipeFiller(), - new FireworkRocketRecipeFiller(), - new ArmorDyeRecipeFiller(), - new MapCloningRecipeFiller(), - new MapExtendingRecipeFiller() - }; - public DefaultClientPlugin() { ClientInternals.attachInstance((Supplier) () -> this, "builtinClientPlugin"); } @Override - public void registerBrewingRecipe(Ingredient input, Ingredient ingredient, ItemStack output) { + public void registerBrewingRecipe(EntryIngredient input, EntryIngredient ingredient, EntryIngredient output) { DisplayRegistry.getInstance().add(new BrewingRecipe(input, ingredient, output)); } @@ -220,9 +209,9 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin public void registerCategories(CategoryRegistry registry) { registry.add( new DefaultCraftingCategory(), - new DefaultCookingCategory(SMELTING, EntryStacks.of(Items.FURNACE), "category.rei.smelting"), - new DefaultCookingCategory(SMOKING, EntryStacks.of(Items.SMOKER), "category.rei.smoking"), - new DefaultCookingCategory(BLASTING, EntryStacks.of(Items.BLAST_FURNACE), "category.rei.blasting"), + new DefaultCookingCategory(SMELTING, EntryStacks.of(Items.FURNACE), "category.rei.smelting", 200), + new DefaultCookingCategory(SMOKING, EntryStacks.of(Items.SMOKER), "category.rei.smoking", 100), + new DefaultCookingCategory(BLASTING, EntryStacks.of(Items.BLAST_FURNACE), "category.rei.blasting", 100), new DefaultCampfireCategory(), new DefaultStoneCuttingCategory(), new DefaultFuelCategory(), @@ -267,10 +256,6 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin return EventResult.pass(); }); - for (CraftingRecipeFiller filler : CRAFTING_RECIPE_FILLERS) { - filler.registerCategories(registry); - } - Set axes = Sets.newHashSet(), hoes = Sets.newHashSet(), shovels = Sets.newHashSet(); EntryRegistry.getInstance().getEntryStacks().filter(stack -> stack.getValueType() == ItemStack.class).map(stack -> ((ItemStack) stack.getValue()).getItem()).forEach(item -> { if (item instanceof AxeItem && axes.add(item)) { @@ -308,33 +293,44 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin public void registerDisplays(DisplayRegistry registry) { CategoryRegistry.getInstance().add(new DefaultInformationCategory(), new DefaultTagCategory()); - registry.registerRecipeFiller(CraftingRecipe.class, RecipeType.CRAFTING, DefaultCraftingDisplay::of); - registry.registerRecipeFiller(SmeltingRecipe.class, RecipeType.SMELTING, DefaultSmeltingDisplay::new); - registry.registerRecipeFiller(SmokingRecipe.class, RecipeType.SMOKING, DefaultSmokingDisplay::new); - registry.registerRecipeFiller(BlastingRecipe.class, RecipeType.BLASTING, DefaultBlastingDisplay::new); - registry.registerRecipeFiller(CampfireCookingRecipe.class, RecipeType.CAMPFIRE_COOKING, DefaultCampfireDisplay::new); - registry.registerRecipeFiller(StonecutterRecipe.class, RecipeType.STONECUTTING, DefaultStoneCuttingDisplay::new); - registry.registerRecipeFiller(SmithingTransformRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::ofTransforming); - registry.registerRecipesFiller(SmithingTrimRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::fromTrimming); - registry.registerFiller(AnvilRecipe.class, DefaultAnvilDisplay::new); - registry.registerFiller(BrewingRecipe.class, DefaultBrewingDisplay::new); - registry.registerFiller(TagKey.class, tagKey -> { - if (tagKey.isFor(Registries.ITEM)) { - return DefaultTagDisplay.ofItems(tagKey); - } else if (tagKey.isFor(Registries.BLOCK)) { - return DefaultTagDisplay.ofItems(tagKey); - } else if (tagKey.isFor(Registries.FLUID)) { - return DefaultTagDisplay.ofFluids(tagKey); - } - - return null; - }); - for (Map.Entry entry : AbstractFurnaceBlockEntity.getFuel().entrySet()) { - registry.add(new DefaultFuelDisplay(Collections.singletonList(EntryIngredients.of(entry.getKey())), Collections.emptyList(), entry.getValue())); - } - for (CraftingRecipeFiller filler : CRAFTING_RECIPE_FILLERS) { - filler.registerDisplays(registry); - } + registry.beginRecipeFiller(ShapedCraftingRecipeDisplay.class) + .filterType(ShapedCraftingRecipeDisplay.TYPE) + .fill(ClientsidedCraftingDisplay.Shaped::new); + registry.beginRecipeFiller(ShapelessCraftingRecipeDisplay.class) + .filterType(ShapelessCraftingRecipeDisplay.TYPE) + .fill(ClientsidedCraftingDisplay.Shapeless::new); + registry.beginRecipeFiller(FurnaceRecipeDisplay.class) + .filterType(FurnaceRecipeDisplay.TYPE) + .filter((display, r) -> EntryIngredients.ofSlotDisplay(display.craftingStation()).contains(EntryStacks.of(Items.FURNACE))) + .fill(ClientsidedCookingDisplay.Smelting::new); + registry.beginRecipeFiller(FurnaceRecipeDisplay.class) + .filterType(FurnaceRecipeDisplay.TYPE) + .filter((display, r) -> EntryIngredients.ofSlotDisplay(display.craftingStation()).contains(EntryStacks.of(Items.SMOKER))) + .fill(ClientsidedCookingDisplay.Smoking::new); + registry.beginRecipeFiller(FurnaceRecipeDisplay.class) + .filterType(FurnaceRecipeDisplay.TYPE) + .filter((display, r) -> EntryIngredients.ofSlotDisplay(display.craftingStation()).contains(EntryStacks.of(Items.BLAST_FURNACE))) + .fill(ClientsidedCookingDisplay.Blasting::new); + registry.beginFiller(AnvilRecipe.class) + .fill(DefaultAnvilDisplay::new); + registry.beginFiller(BrewingRecipe.class) + .fill(DefaultBrewingDisplay::new); + registry.beginFiller(TagKey.class) + .fill(tagKey -> { + if (tagKey.isFor(Registries.ITEM)) { + return DefaultTagDisplay.ofItems(tagKey); + } else if (tagKey.isFor(Registries.BLOCK)) { + return DefaultTagDisplay.ofItems(tagKey); + } else if (tagKey.isFor(Registries.FLUID)) { + return DefaultTagDisplay.ofFluids(tagKey); + } + + return null; + }); + // TODO: Fuel +// for (Map.Entry entry : AbstractFurnaceBlockEntity.getFuel().entrySet()) { +// registry.add(new DefaultFuelDisplay(Collections.singletonList(EntryIngredients.of(entry.getKey())), Collections.emptyList(), entry.getValue())); +// } if (ComposterBlock.COMPOSTABLES.isEmpty()) { ComposterBlock.bootStrap(); } @@ -371,14 +367,19 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin Holder from = mix.from(); Ingredient ingredient = mix.ingredient(); Holder to = mix.to(); - Ingredient base = Ingredient.of(Arrays.stream(container.getItems()) - .map(ItemStack::copy) - .peek(stack -> stack.set(DataComponents.POTION_CONTENTS, new PotionContents(from)))); - ItemStack output = Arrays.stream(container.getItems()) - .map(ItemStack::copy) - .peek(stack -> stack.set(DataComponents.POTION_CONTENTS, new PotionContents(to))) - .findFirst().orElse(ItemStack.EMPTY); - registerBrewingRecipe(base, ingredient, output); + EntryIngredient base = EntryIngredients.ofIngredient(container) + .map(stack -> { + EntryStack copied = stack.copy(); + copied.castValue().set(DataComponents.POTION_CONTENTS, new PotionContents(from)); + return copied; + }); + EntryIngredient output = EntryIngredients.ofIngredient(container) + .map(stack -> { + EntryStack copied = stack.copy(); + copied.castValue().set(DataComponents.POTION_CONTENTS, new PotionContents(to)); + return copied; + }); + registerBrewingRecipe(base, EntryIngredients.ofIngredient(ingredient), output); potions.add(from); potions.add(to); } @@ -390,10 +391,10 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin Holder to = mix.to(); ItemStack baseStack = new ItemStack(from); baseStack.set(DataComponents.POTION_CONTENTS, new PotionContents(potion)); - Ingredient base = Ingredient.of(baseStack); + EntryIngredient base = EntryIngredients.of(baseStack); ItemStack output = new ItemStack(to); output.set(DataComponents.POTION_CONTENTS, new PotionContents(potion)); - registerBrewingRecipe(base, ingredient, output); + registerBrewingRecipe(base, EntryIngredients.ofIngredient(ingredient), EntryIngredients.of(output)); } } } else { @@ -403,39 +404,30 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin for (Item item : BuiltInRegistries.ITEM) { ItemStack stack = item.getDefaultInstance(); if (!stack.isDamageableItem()) continue; - EntryIngredient repairMaterialBase = null; - if (item instanceof TieredItem tieredItem) { - Tier tier = tieredItem.getTier(); - repairMaterialBase = EntryIngredients.ofIngredient(tier.getRepairIngredient()); - } else if (item instanceof ArmorItem armorItem) { - Holder material = armorItem.getMaterial(); - repairMaterialBase = EntryIngredients.ofIngredient(material.value().repairIngredient().get()); - } else if (item instanceof ShieldItem shieldItem) { - repairMaterialBase = EntryIngredients.ofItemTag(ItemTags.PLANKS); - repairMaterialBase.filter(s -> shieldItem.isValidRepairItem(stack, s.castValue())); - } else if (item instanceof ElytraItem elytraItem) { - repairMaterialBase = EntryIngredients.of(Items.PHANTOM_MEMBRANE); - repairMaterialBase.filter(s -> elytraItem.isValidRepairItem(stack, s.castValue())); - } - if (repairMaterialBase == null || repairMaterialBase.isEmpty()) continue; - for (int[] i = {1}; i[0] <= 4; i[0]++) { - ItemStack baseStack = item.getDefaultInstance(); - int toRepair = i[0] == 4 ? baseStack.getMaxDamage() : baseStack.getMaxDamage() / 4 * i[0]; - baseStack.setDamageValue(toRepair); - EntryIngredient repairMaterial = repairMaterialBase.map(s -> { - EntryStack newStack = s.copy(); - newStack.castValue().setCount(i[0]); - return newStack; - }); - Optional> output = DefaultAnvilDisplay.calculateOutput(baseStack, repairMaterial.get(0).castValue()); - if (output.isEmpty()) continue; - registry.add(new DefaultAnvilDisplay(List.of(EntryIngredients.of(baseStack), repairMaterial), - Collections.singletonList(EntryIngredients.of(output.get().getLeft())), Optional.empty(), OptionalInt.of(output.get().getRight()))); + if (item.components().has(DataComponents.REPAIRABLE)) { + Repairable repairable = item.components().get(DataComponents.REPAIRABLE); + EntryIngredient repairMaterialBase = EntryIngredients.ofItemsHolderSet(repairable.items()); + if (repairMaterialBase.isEmpty()) continue; + + for (int[] i = {1}; i[0] <= 4; i[0]++) { + ItemStack baseStack = item.getDefaultInstance(); + int toRepair = i[0] == 4 ? baseStack.getMaxDamage() : baseStack.getMaxDamage() / 4 * i[0]; + baseStack.setDamageValue(toRepair); + EntryIngredient repairMaterial = repairMaterialBase.map(s -> { + EntryStack newStack = s.copy(); + newStack.castValue().setCount(i[0]); + return newStack; + }); + Optional> output = DefaultAnvilDisplay.calculateOutput(baseStack, repairMaterial.get(0).castValue()); + if (output.isEmpty()) continue; + registry.add(new DefaultAnvilDisplay(List.of(EntryIngredients.of(baseStack), repairMaterial), + Collections.singletonList(EntryIngredients.of(output.get().getLeft())), Optional.empty(), OptionalInt.of(output.get().getRight()))); + } } } - List> enchantmentBooks = BasicDisplay.registryAccess().registry(Registries.ENCHANTMENT) + List> enchantmentBooks = BasicDisplay.registryAccess().lookup(Registries.ENCHANTMENT) .stream() - .flatMap(Registry::holders) + .flatMap(HolderLookup::listElements) .flatMap(holder -> { if (!holder.isBound()) return Stream.empty(); Enchantment enchantment = holder.value(); @@ -448,7 +440,7 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin } }) .map(instance -> { - return Pair.of(instance, EnchantedBookItem.createForEnchantment(instance)); + return Pair.of(instance, EnchantmentHelper.createBook(instance)); }) .toList(); EntryRegistry.getInstance().getEntryStacks().forEach(stack -> { @@ -465,7 +457,7 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin }); for (Registry reg : BuiltInRegistries.REGISTRY) { - reg.getTags().forEach(tagPair -> registry.add(tagPair.getFirst())); + reg.getTags().forEach(tagPair -> tagPair.unwrap().ifLeft(registry::add)); } } @@ -475,7 +467,8 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin @Override public void registerExclusionZones(ExclusionZones zones) { - zones.register(EffectRenderingInventoryScreen.class, new DefaultPotionEffectExclusionZones()); + zones.register(InventoryScreen.class, new DefaultPotionEffectExclusionZones<>()); + zones.register(CreativeModeInventoryScreen.class, new DefaultPotionEffectExclusionZones<>()); zones.register(RecipeUpdateListener.class, new DefaultRecipeBookExclusionZones()); } @@ -533,8 +526,8 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin } public static class DummyShovelItem extends ShovelItem { - public DummyShovelItem(Tier tier, Properties properties) { - super(tier, properties); + public DummyShovelItem(ToolMaterial material, float damage, float speed, Properties properties) { + super(material, damage, speed, properties); } public static Map getPathBlocksMap() { @@ -543,8 +536,8 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin } public static class DummyAxeItem extends AxeItem { - public DummyAxeItem(Tier tier, Properties properties) { - super(tier, properties); + public DummyAxeItem(ToolMaterial material, float damage, float speed, Properties properties) { + super(material, damage, speed, properties); } public static Map getStrippedBlocksMap() { diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultBrewingCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultBrewingCategory.java index e44fc7126..a770553c4 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultBrewingCategory.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultBrewingCategory.java @@ -37,6 +37,7 @@ import me.shedaniel.rei.plugin.common.BuiltinPlugin; import me.shedaniel.rei.plugin.common.displays.brewing.DefaultBrewingDisplay; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.renderer.RenderType; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -69,9 +70,9 @@ public class DefaultBrewingCategory implements DisplayCategory { ResourceLocation texture = REIRuntime.getInstance().getDefaultDisplayTexture(); - graphics.blit(texture, startPoint.x, startPoint.y, 0, 108, 103, 59); + graphics.blit(RenderType::guiTextured, texture, startPoint.x, startPoint.y, 0, 108, 103, 59, 256, 256); int width = Mth.ceil(System.currentTimeMillis() / 250d % 18d); - graphics.blit(texture, startPoint.x + 44, startPoint.y + 28, 103, 163, width, 4); + graphics.blit(RenderType::guiTextured, texture, startPoint.x + 44, startPoint.y + 28, 103, 163, width, 4, 256, 256); })); widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entry(EntryStacks.of(Items.BLAZE_POWDER)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(startPoint.x + 40, startPoint.y + 1)).entries(display.getInputEntries().get(0)).disableBackground().markInput()); diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultCampfireCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultCampfireCategory.java index 5d5dd1421..b39099ba6 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultCampfireCategory.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultCampfireCategory.java @@ -33,16 +33,16 @@ import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.plugin.common.BuiltinPlugin; -import me.shedaniel.rei.plugin.common.displays.DefaultCampfireDisplay; +import me.shedaniel.rei.plugin.common.displays.CampfireDisplay; import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.Blocks; import java.text.DecimalFormat; import java.util.List; -public class DefaultCampfireCategory implements DisplayCategory { +public class DefaultCampfireCategory implements DisplayCategory { @Override - public CategoryIdentifier getCategoryIdentifier() { + public CategoryIdentifier getCategoryIdentifier() { return BuiltinPlugin.CAMPFIRE; } @@ -57,17 +57,18 @@ public class DefaultCampfireCategory implements DisplayCategory setupDisplay(DefaultCampfireDisplay display, Rectangle bounds) { + public List setupDisplay(CampfireDisplay display, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); - final double cookingTime = display.getCookTime(); DecimalFormat df = new DecimalFormat("###.##"); List widgets = Lists.newArrayList(); widgets.add(Widgets.createRecipeBase(bounds)); widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 9))); widgets.add(Widgets.createBurningFire(new Point(startPoint.x + 1, startPoint.y + 20)).animationDurationMS(10000)); - widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5), - Component.translatable("category.rei.campfire.time", df.format(cookingTime / 20d))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); - widgets.add(Widgets.createArrow(new Point(startPoint.x + 24, startPoint.y + 8)).animationDurationTicks(cookingTime)); + if (display.cookTime().isPresent()) { + widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5), + Component.translatable("category.rei.campfire.time", df.format(display.cookTime().getAsDouble() / 20d))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); + } + widgets.add(Widgets.createArrow(new Point(startPoint.x + 24, startPoint.y + 8)).animationDurationTicks(display.cookTime().orElse(600))); widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(display.getInputEntries().get(0)).markInput()); widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)).entries(display.getOutputEntries().get(0)).disableBackground().markOutput()); return widgets; diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java index 975491953..7d1e9455c 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/DefaultInformationCategory.java @@ -25,7 +25,7 @@ package me.shedaniel.rei.plugin.client.categories; import com.google.common.collect.Lists; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.*; +import com.mojang.blaze3d.vertex.VertexConsumer; import me.shedaniel.clothconfig2.ClothConfigInitializer; import me.shedaniel.clothconfig2.api.scroll.ScrollingContainer; import me.shedaniel.math.Point; @@ -46,7 +46,7 @@ import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.events.GuiEventListener; -import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.RenderType; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; import net.minecraft.util.FormattedCharSequence; @@ -59,13 +59,13 @@ import java.util.Objects; @Environment(EnvType.CLIENT) public class DefaultInformationCategory implements DisplayCategory { protected static void innerBlit(GuiGraphics graphics, Matrix4f matrix4f, int xStart, int xEnd, int yStart, int yEnd, int z, float uStart, float uEnd, float vStart, float vEnd) { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - BufferBuilder bufferBuilder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - bufferBuilder.addVertex(matrix4f, xStart, yEnd, z).setUv(uStart, vEnd); - bufferBuilder.addVertex(matrix4f, xEnd, yEnd, z).setUv(uEnd, vEnd); - bufferBuilder.addVertex(matrix4f, xEnd, yStart, z).setUv(uEnd, vStart); - bufferBuilder.addVertex(matrix4f, xStart, yStart, z).setUv(uStart, vStart); - BufferUploader.drawWithShader(bufferBuilder.buildOrThrow()); + graphics.drawSpecial(source -> { + VertexConsumer buffer = source.getBuffer(RenderType.guiTextured(REIRuntime.getInstance().getDefaultDisplayTexture())); + buffer.addVertex(matrix4f, xStart, yEnd, z).setUv(uStart, vEnd).setColor(0xFFFFFFFF); + buffer.addVertex(matrix4f, xEnd, yEnd, z).setUv(uEnd, vEnd).setColor(0xFFFFFFFF); + buffer.addVertex(matrix4f, xEnd, yStart, z).setUv(uEnd, vStart).setColor(0xFFFFFFFF); + buffer.addVertex(matrix4f, xStart, yStart, z).setUv(uStart, vStart).setColor(0xFFFFFFFF); + }); } @Override @@ -209,7 +209,7 @@ public class DefaultInformationCategory implements DisplayCategory { +public class DefaultSmithingCategory implements DisplayCategory { @Override - public CategoryIdentifier getCategoryIdentifier() { + public CategoryIdentifier getCategoryIdentifier() { return BuiltinPlugin.SMITHING; } @@ -63,7 +64,7 @@ public class DefaultSmithingCategory implements DisplayCategory setupDisplay(DefaultSmithingDisplay display, Rectangle bounds) { + public List setupDisplay(SmithingDisplay display, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 31, bounds.getCenterY() - 13); List widgets = Lists.newArrayList(); widgets.add(Widgets.createRecipeBase(bounds)); @@ -98,8 +99,8 @@ public class DefaultSmithingCategory implements DisplayCategory template, EntryStack base, EntryStack addition) { - if (display.getType() == DefaultSmithingDisplay.SmithingRecipeType.TRIM) { + private static EntryIngredient getOutput(SmithingDisplay display, RegistryAccess registryAccess, EntryStack template, EntryStack base, EntryStack addition) { + if (display.type() == SmithingDisplay.SmithingRecipeType.TRIM) { EntryIngredient output = DefaultSmithingDisplay.getTrimmingOutput(registryAccess, template, base, addition); if (!output.isEmpty()) return output; } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/beacon/DefaultBeaconBaseCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/beacon/DefaultBeaconBaseCategory.java index 78b683e79..7479fe72c 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/beacon/DefaultBeaconBaseCategory.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/beacon/DefaultBeaconBaseCategory.java @@ -166,7 +166,7 @@ public class DefaultBeaconBaseCategory implements DisplayCategory { - private CategoryIdentifier identifier; +public class DefaultCookingCategory implements DisplayCategory { + private CategoryIdentifier identifier; private EntryStack logo; private String categoryName; + private double defaultCookingTime; - public DefaultCookingCategory(CategoryIdentifier identifier, EntryStack logo, String categoryName) { + public DefaultCookingCategory(CategoryIdentifier identifier, EntryStack logo, String categoryName, double defaultCookingTime) { this.identifier = identifier; this.logo = logo; this.categoryName = categoryName; + this.defaultCookingTime = defaultCookingTime; } @Override - public List setupDisplay(DefaultCookingDisplay display, Rectangle bounds) { + public List setupDisplay(CookingDisplay display, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); - double cookingTime = display.getCookingTime(); DecimalFormat df = new DecimalFormat("###.##"); List widgets = Lists.newArrayList(); widgets.add(Widgets.createRecipeBase(bounds)); widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 9))); widgets.add(Widgets.createBurningFire(new Point(startPoint.x + 1, startPoint.y + 20)) .animationDurationMS(10000)); - widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5), - Component.translatable("category.rei.cooking.time&xp", df.format(display.getXp()), df.format(cookingTime / 20d))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); + if (display.cookTime().isPresent() && display.xp().isPresent()) { + widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5), + Component.translatable("category.rei.cooking.time&xp", df.format(display.xp().getAsDouble()), df.format(display.cookTime().getAsDouble() / 20d))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); + } widgets.add(Widgets.createArrow(new Point(startPoint.x + 24, startPoint.y + 8)) - .animationDurationTicks(cookingTime)); + .animationDurationTicks(display.cookTime().orElse(defaultCookingTime))); widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)) .entries(display.getOutputEntries().get(0)) .disableBackground() @@ -80,7 +83,7 @@ public class DefaultCookingCategory implements DisplayCategory getCategoryIdentifier() { + public CategoryIdentifier getCategoryIdentifier() { return identifier; } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java index 3f91ad76b..aac9b9b6f 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/DefaultCraftingCategory.java @@ -38,7 +38,7 @@ import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.api.common.entry.InputIngredient; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.plugin.common.BuiltinPlugin; -import me.shedaniel.rei.plugin.common.displays.crafting.DefaultCraftingDisplay; +import me.shedaniel.rei.plugin.common.displays.crafting.CraftingDisplay; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.network.chat.Component; @@ -49,9 +49,9 @@ import java.util.Iterator; import java.util.List; @Environment(EnvType.CLIENT) -public class DefaultCraftingCategory implements DisplayCategory> { +public class DefaultCraftingCategory implements DisplayCategory { @Override - public CategoryIdentifier> getCategoryIdentifier() { + public CategoryIdentifier getCategoryIdentifier() { return BuiltinPlugin.CRAFTING; } @@ -66,7 +66,7 @@ public class DefaultCraftingCategory implements DisplayCategory setupDisplay(DefaultCraftingDisplay display, Rectangle bounds) { + public List setupDisplay(CraftingDisplay display, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 58, bounds.getCenterY() - 27); List widgets = Lists.newArrayList(); widgets.add(Widgets.createRecipeBase(bounds)); @@ -90,10 +90,10 @@ public class DefaultCraftingCategory implements DisplayCategory> getDisplayMerger() { + public DisplayMerger getDisplayMerger() { return new DisplayMerger<>() { @Override - public boolean canMerge(DefaultCraftingDisplay first, DefaultCraftingDisplay second) { + public boolean canMerge(CraftingDisplay first, CraftingDisplay second) { if (!first.getCategoryIdentifier().equals(second.getCategoryIdentifier())) return false; if (!equals(first.getOrganisedInputEntries(3, 3), second.getOrganisedInputEntries(3, 3))) return false; if (!equals(first.getOutputEntries(), second.getOutputEntries())) return false; @@ -104,7 +104,7 @@ public class DefaultCraftingCategory implements DisplayCategory display) { + public int hashOf(CraftingDisplay display) { return display.getCategoryIdentifier().hashCode() * 31 * 31 * 31 + display.getOrganisedInputEntries(3, 3).hashCode() * 31 * 31 + display.getOutputEntries().hashCode(); } diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/ArmorDyeRecipeFiller.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/ArmorDyeRecipeFiller.java index 39315bab8..6f7a668d3 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/ArmorDyeRecipeFiller.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/ArmorDyeRecipeFiller.java @@ -37,10 +37,7 @@ import net.minecraft.world.item.component.DyedItemColor; import net.minecraft.world.item.crafting.ArmorDyeRecipe; import net.minecraft.world.item.crafting.RecipeHolder; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Random; +import java.util.*; public class ArmorDyeRecipeFiller implements CraftingRecipeFiller { @Override @@ -55,10 +52,11 @@ public class ArmorDyeRecipeFiller implements CraftingRecipeFiller inputsSecond = pair.getSecond(); EntryIngredient.unifyFocuses(inputsFirst); - displays.add(new DefaultCustomShapelessDisplay(recipe, + displays.add(new DefaultCustomShapelessDisplay( List.of(inputsFirst, EntryIngredient.of(inputsSecond)), - List.of(inputsFirst))); + List.of(inputsFirst), + Optional.of(recipe.id().location()))); } return displays; diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/BookCloningRecipeFiller.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/BookCloningRecipeFiller.java index 4a58cf71f..8ea21225d 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/BookCloningRecipeFiller.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/crafting/filler/BookCloningRecipeFiller.java @@ -79,9 +79,10 @@ public class BookCloningRecipeFiller implements CraftingRecipeFiller