diff options
Diffstat (limited to 'src/main/java/me/shedaniel/rei/plugin')
24 files changed, 391 insertions, 610 deletions
diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java index ef87e78c8..d3993a671 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java @@ -7,17 +7,17 @@ package me.shedaniel.rei.plugin; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import it.unimi.dsi.fastutil.objects.Object2FloatMap; import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.DisplayHelper; -import me.shedaniel.rei.api.Entry; import me.shedaniel.rei.api.EntryRegistry; +import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.api.plugins.REIPluginV0; import me.shedaniel.rei.gui.RecipeViewingScreen; import me.shedaniel.rei.gui.VillagerRecipeViewingScreen; import me.shedaniel.rei.impl.ScreenHelper; -import me.shedaniel.rei.plugin.blasting.DefaultBlastingCategory; import me.shedaniel.rei.plugin.blasting.DefaultBlastingDisplay; import me.shedaniel.rei.plugin.brewing.DefaultBrewingCategory; import me.shedaniel.rei.plugin.brewing.DefaultBrewingDisplay; @@ -25,13 +25,12 @@ import me.shedaniel.rei.plugin.campfire.DefaultCampfireCategory; import me.shedaniel.rei.plugin.campfire.DefaultCampfireDisplay; import me.shedaniel.rei.plugin.composting.DefaultCompostingCategory; import me.shedaniel.rei.plugin.composting.DefaultCompostingDisplay; +import me.shedaniel.rei.plugin.cooking.DefaultCookingCategory; import me.shedaniel.rei.plugin.crafting.DefaultCraftingCategory; import me.shedaniel.rei.plugin.crafting.DefaultCustomDisplay; import me.shedaniel.rei.plugin.crafting.DefaultShapedDisplay; import me.shedaniel.rei.plugin.crafting.DefaultShapelessDisplay; -import me.shedaniel.rei.plugin.smelting.DefaultSmeltingCategory; import me.shedaniel.rei.plugin.smelting.DefaultSmeltingDisplay; -import me.shedaniel.rei.plugin.smoking.DefaultSmokingCategory; import me.shedaniel.rei.plugin.smoking.DefaultSmokingDisplay; import me.shedaniel.rei.plugin.stonecutting.DefaultStoneCuttingCategory; import me.shedaniel.rei.plugin.stonecutting.DefaultStoneCuttingDisplay; @@ -47,6 +46,8 @@ import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.fluid.EmptyFluid; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -97,26 +98,28 @@ public class DefaultPlugin implements REIPluginV0 { if (!RoughlyEnoughItemsCore.getConfigManager().getConfig().isLoadingDefaultPlugin()) { return; } - Registry.ITEM.stream().forEach(item -> { - entryRegistry.registerItemStack(item.getStackForRender()); + for (Item item : Registry.ITEM) { + entryRegistry.registerEntry(EntryStack.create(item)); try { - entryRegistry.registerItemStack(entryRegistry.getAllStacksFromItem(item)); + for (ItemStack stack : entryRegistry.getAllStacksFromItem(item)) { + entryRegistry.registerEntry(EntryStack.create(stack)); + } } catch (Exception e) { } - }); - Registry.ENCHANTMENT.forEach(enchantment -> { + } + for (Enchantment enchantment : Registry.ENCHANTMENT) { for (int i = enchantment.getMinimumLevel(); i <= enchantment.getMaximumLevel(); i++) { Map<Enchantment, Integer> map = new HashMap<>(); map.put(enchantment, i); ItemStack itemStack = new ItemStack(Items.ENCHANTED_BOOK); EnchantmentHelper.set(map, itemStack); - entryRegistry.registerItemStack(Items.ENCHANTED_BOOK, itemStack); + entryRegistry.registerEntriesAfter(EntryStack.create(Items.ENCHANTED_BOOK), EntryStack.create(itemStack)); } - }); - Registry.FLUID.forEach(fluid -> { + } + for (Fluid fluid : Registry.FLUID) { if (!(fluid instanceof EmptyFluid)) - entryRegistry.registerFluid(fluid); - }); + entryRegistry.registerEntry(EntryStack.create(fluid)); + } } @Override @@ -125,9 +128,9 @@ public class DefaultPlugin implements REIPluginV0 { return; } recipeHelper.registerCategory(new DefaultCraftingCategory()); - recipeHelper.registerCategory(new DefaultSmeltingCategory()); - recipeHelper.registerCategory(new DefaultSmokingCategory()); - recipeHelper.registerCategory(new DefaultBlastingCategory()); + recipeHelper.registerCategory(new DefaultCookingCategory(SMELTING, EntryStack.create(Items.FURNACE), "category.rei.smelting")); + recipeHelper.registerCategory(new DefaultCookingCategory(SMOKING, EntryStack.create(Items.SMOKER), "category.rei.smoking")); + recipeHelper.registerCategory(new DefaultCookingCategory(BLASTING, EntryStack.create(Items.BLAST_FURNACE), "category.rei.blasting")); recipeHelper.registerCategory(new DefaultCampfireCategory()); recipeHelper.registerCategory(new DefaultStoneCuttingCategory()); recipeHelper.registerCategory(new DefaultBrewingCategory()); @@ -147,29 +150,32 @@ public class DefaultPlugin implements REIPluginV0 { recipeHelper.registerRecipes(BLASTING, BlastingRecipe.class, DefaultBlastingDisplay::new); recipeHelper.registerRecipes(CAMPFIRE, CampfireCookingRecipe.class, DefaultCampfireDisplay::new); recipeHelper.registerRecipes(STONE_CUTTING, StonecuttingRecipe.class, DefaultStoneCuttingDisplay::new); - BREWING_DISPLAYS.stream().forEachOrdered(display -> recipeHelper.registerDisplay(BREWING, display)); - List<ItemStack> arrowStack = Collections.singletonList(Items.ARROW.getStackForRender()); - RoughlyEnoughItemsCore.getEntryRegistry().getEntryList().stream().filter(stack -> stack.getEntryType() == Entry.Type.ITEM && stack.getItemStack().getItem().equals(Items.LINGERING_POTION)).forEach(entry -> { - List<List<ItemStack>> input = new ArrayList<>(); - for (int i = 0; i < 4; i++) - input.add(arrowStack); - input.add(Collections.singletonList(entry.getItemStack())); - for (int i = 0; i < 4; i++) - input.add(arrowStack); - ItemStack outputStack = new ItemStack(Items.TIPPED_ARROW, 8); - PotionUtil.setPotion(outputStack, PotionUtil.getPotion(entry.getItemStack())); - PotionUtil.setCustomPotionEffects(outputStack, PotionUtil.getCustomPotionEffects(entry.getItemStack())); - List<ItemStack> output = Collections.singletonList(outputStack); - recipeHelper.registerDisplay(CRAFTING, new DefaultCustomDisplay(input, output)); - }); + for (DefaultBrewingDisplay display : BREWING_DISPLAYS) { + recipeHelper.registerDisplay(BREWING, display); + } + List<EntryStack> arrowStack = Collections.singletonList(EntryStack.create(Items.ARROW)); + for (EntryStack entry : RoughlyEnoughItemsCore.getEntryRegistry().getStacksList()) { + if (entry.getItem() == Items.LINGERING_POTION) { + List<List<EntryStack>> input = new ArrayList<>(); + for (int i = 0; i < 4; i++) + input.add(arrowStack); + input.add(Collections.singletonList(EntryStack.create(entry.getItemStack()))); + for (int i = 0; i < 4; i++) + input.add(arrowStack); + ItemStack outputStack = new ItemStack(Items.TIPPED_ARROW, 8); + PotionUtil.setPotion(outputStack, PotionUtil.getPotion(entry.getItemStack())); + PotionUtil.setCustomPotionEffects(outputStack, PotionUtil.getCustomPotionEffects(entry.getItemStack())); + List<EntryStack> output = Collections.singletonList(EntryStack.create(outputStack).addSetting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE)); + recipeHelper.registerDisplay(CRAFTING, new DefaultCustomDisplay(null, input, output)); + } + } Map<ItemConvertible, Float> map = Maps.newLinkedHashMap(); if (ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.isEmpty()) ComposterBlock.registerDefaultCompostableItems(); - ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.keySet().forEach(itemConvertible -> { - float chance = ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.getOrDefault(itemConvertible, 0); - if (chance > 0) - map.put(itemConvertible, chance); - }); + for (Object2FloatMap.Entry<ItemConvertible> entry : ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.object2FloatEntrySet()) { + if (entry.getFloatValue() > 0) + map.put(entry.getKey(), entry.getFloatValue()); + } List<ItemConvertible> stacks = new LinkedList<>(map.keySet()); stacks.sort((first, second) -> { return (int) ((map.get(first) - map.get(second)) * 100); diff --git a/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java b/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java index 5df184dad..11e32fdef 100644 --- a/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java +++ b/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java @@ -10,6 +10,7 @@ import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.rei.RoughlyEnoughItemsNetwork; import me.shedaniel.rei.api.AutoTransferHandler; +import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.TransferRecipeDisplay; import me.shedaniel.rei.listeners.RecipeBookGuiHooks; import me.shedaniel.rei.server.ContainerInfo; @@ -43,7 +44,7 @@ public class DefaultCategoryHandler implements AutoTransferHandler { return Result.createNotApplicable(); if (recipe.getHeight() > containerInfo.getCraftingHeight(container) || recipe.getWidth() > containerInfo.getCraftingWidth(container)) return Result.createFailed(I18n.translate("error.rei.transfer.too_small", containerInfo.getCraftingWidth(container), containerInfo.getCraftingHeight(container))); - List<List<ItemStack>> input = recipe.getOrganisedInput(containerInfo, container); + List<List<EntryStack>> input = recipe.getOrganisedInputEntries(containerInfo, container); IntList intList = hasItems(input); if (!intList.isEmpty()) return Result.createFailed("error.rei.not.enough.materials", intList); @@ -60,10 +61,12 @@ public class DefaultCategoryHandler implements AutoTransferHandler { buf.writeBoolean(Screen.hasShiftDown()); buf.writeInt(input.size()); - for (List<ItemStack> stacks : input) { + for (List<EntryStack> stacks : input) { buf.writeInt(stacks.size()); - for (ItemStack stack : stacks) { - buf.writeItemStack(stack); + for (EntryStack stack : stacks) { + if (stack.getItemStack() != null) + buf.writeItemStack(stack.getItemStack()); + else buf.writeItemStack(ItemStack.EMPTY); } } ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsNetwork.MOVE_ITEMS_PACKET, buf); @@ -79,7 +82,7 @@ public class DefaultCategoryHandler implements AutoTransferHandler { return ClientSidePacketRegistry.INSTANCE.canServerReceive(RoughlyEnoughItemsNetwork.MOVE_ITEMS_PACKET); } - public IntList hasItems(List<List<ItemStack>> inputs) { + public IntList hasItems(List<List<EntryStack>> inputs) { // Create a clone of player's inventory, and count DefaultedList<ItemStack> copyMain = DefaultedList.of(); for (ItemStack stack : MinecraftClient.getInstance().player.inventory.main) { @@ -87,13 +90,14 @@ public class DefaultCategoryHandler implements AutoTransferHandler { } IntList intList = new IntArrayList(); for (int i = 0; i < inputs.size(); i++) { - List<ItemStack> possibleStacks = inputs.get(i); + List<EntryStack> possibleStacks = inputs.get(i); boolean done = possibleStacks.isEmpty(); - for (ItemStack possibleStack : possibleStacks) { + for (EntryStack possibleStack : possibleStacks) { if (!done) { - int invRequiredCount = possibleStack.getCount(); + int invRequiredCount = possibleStack.getAmount(); for (ItemStack stack : copyMain) { - if (ItemStack.areItemsEqualIgnoreDamage(possibleStack, stack)) { + EntryStack entryStack = EntryStack.create(stack); + if (entryStack.equals(possibleStack)) { while (invRequiredCount > 0 && !stack.isEmpty()) { invRequiredCount--; stack.decrement(1); diff --git a/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingCategory.java b/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingCategory.java deleted file mode 100644 index 4c5f3dac3..000000000 --- a/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingCategory.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Roughly Enough Items by Danielshe. - * Licensed under the MIT License. - */ - -package me.shedaniel.rei.plugin.blasting; - -import com.mojang.blaze3d.systems.RenderSystem; -import it.unimi.dsi.fastutil.ints.IntList; -import me.shedaniel.math.api.Point; -import me.shedaniel.math.api.Rectangle; -import me.shedaniel.rei.api.Renderer; -import me.shedaniel.rei.api.TransferRecipeCategory; -import me.shedaniel.rei.gui.renderers.RecipeRenderer; -import me.shedaniel.rei.gui.widget.RecipeArrowWidget; -import me.shedaniel.rei.gui.widget.RecipeBaseWidget; -import me.shedaniel.rei.gui.widget.SlotWidget; -import me.shedaniel.rei.gui.widget.Widget; -import me.shedaniel.rei.plugin.DefaultPlugin; -import net.minecraft.block.Blocks; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.render.GuiLighting; -import net.minecraft.client.resource.language.I18n; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.MathHelper; - -import java.util.Arrays; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.function.Supplier; - -public class DefaultBlastingCategory implements TransferRecipeCategory<DefaultBlastingDisplay> { - - @Override - public Identifier getIdentifier() { - return DefaultPlugin.BLASTING; - } - - @Override - public Renderer getIcon() { - return Renderer.fromItemStack(new ItemStack(Blocks.BLAST_FURNACE)); - } - - @Override - public String getCategoryName() { - return I18n.translate("category.rei.blasting"); - } - - @Override - public RecipeRenderer getSimpleRenderer(DefaultBlastingDisplay recipe) { - return Renderer.fromRecipe(() -> Arrays.asList(recipe.getInput().get(0)), recipe::getOutput); - } - - @Override - public List<Widget> setupDisplay(Supplier<DefaultBlastingDisplay> recipeDisplaySupplier, Rectangle bounds) { - final DefaultBlastingDisplay recipeDisplay = recipeDisplaySupplier.get(); - Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); - List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) { - @Override - public void render(int mouseX, int mouseY, float delta) { - super.render(mouseX, mouseY, delta); - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - GuiLighting.disable(); - MinecraftClient.getInstance().getTextureManager().bindTexture(DefaultPlugin.getDisplayTexture()); - blit(startPoint.x, startPoint.y, 0, 54, 82, 54); - int height = MathHelper.ceil((System.currentTimeMillis() / 250 % 14d) / 1f); - blit(startPoint.x + 2, startPoint.y + 21 + (14 - height), 82, 77 + (14 - height), 14, height); - } - })); - widgets.add(new RecipeArrowWidget(startPoint.x + 24, startPoint.y + 18, true)); - List<List<ItemStack>> input = recipeDisplay.getInput(); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1, Renderer.fromItemStacks(input.get(0)), true, true, true)); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 37, Renderer.fromItemStacks(() -> recipeDisplay.getFuel(), true, stack -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.smelting.fuel"))), true, true, true)); - widgets.add(new SlotWidget(startPoint.x + 61, startPoint.y + 19, Renderer.fromItemStacks(recipeDisplay.getOutput()), false, true, true)); - return widgets; - } - - @Override - public void renderRedSlots(List<Widget> widgets, Rectangle bounds, DefaultBlastingDisplay display, IntList redSlots) { - Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); - RenderSystem.translatef(0, 0, 400); - if (redSlots.contains(0)) { - DrawableHelper.fill(startPoint.x + 1, startPoint.y + 1, startPoint.x + 1 + 16, startPoint.y + 1 + 16, 822018048); - } - RenderSystem.translatef(0, 0, -400); - } - -} diff --git a/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingDisplay.java index 52f521a99..510d5eb96 100644 --- a/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/blasting/DefaultBlastingDisplay.java @@ -5,81 +5,19 @@ package me.shedaniel.rei.plugin.blasting; -import me.shedaniel.rei.api.TransferRecipeDisplay; import me.shedaniel.rei.plugin.DefaultPlugin; -import me.shedaniel.rei.server.ContainerInfo; -import net.minecraft.block.entity.FurnaceBlockEntity; -import net.minecraft.container.Container; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.recipe.AbstractCookingRecipe; +import me.shedaniel.rei.plugin.cooking.DefaultCookingDisplay; import net.minecraft.recipe.BlastingRecipe; import net.minecraft.util.Identifier; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -public class DefaultBlastingDisplay implements TransferRecipeDisplay { - - private BlastingRecipe display; - private List<List<ItemStack>> input; - private List<ItemStack> output; +public class DefaultBlastingDisplay extends DefaultCookingDisplay { public DefaultBlastingDisplay(BlastingRecipe recipe) { - this.display = recipe; - this.input = recipe.getPreviewInputs().stream().map(i -> Arrays.asList(i.getMatchingStacksClient())).collect(Collectors.toList()); - this.input.add(FurnaceBlockEntity.createFuelTimeMap().keySet().stream().map(Item::getStackForRender).collect(Collectors.toList())); - this.output = Collections.singletonList(recipe.getOutput()); - } - - @Override - public Optional<Identifier> getRecipeLocation() { - return Optional.ofNullable(display).map(AbstractCookingRecipe::getId); - } - - @Override - public List<List<ItemStack>> getInput() { - return input; - } - - public List<ItemStack> getFuel() { - return input.get(1); - } - - @Override - public List<ItemStack> getOutput() { - return output; + super(recipe); } @Override public Identifier getRecipeCategory() { return DefaultPlugin.BLASTING; } - - @Override - public List<List<ItemStack>> getRequiredItems() { - return input; - } - - public Optional<BlastingRecipe> getOptionalRecipe() { - return Optional.ofNullable(display); - } - - @Override - public int getWidth() { - return 1; - } - - @Override - public int getHeight() { - return 1; - } - - @Override - public List<List<ItemStack>> getOrganisedInput(ContainerInfo<Container> containerInfo, Container container) { - return display.getPreviewInputs().stream().map(i -> Arrays.asList(i.getMatchingStacksClient())).collect(Collectors.toList()); - } } diff --git a/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingCategory.java b/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingCategory.java index b17c0066d..466ab9c2c 100644 --- a/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingCategory.java @@ -8,24 +8,21 @@ package me.shedaniel.rei.plugin.brewing; import me.shedaniel.math.api.Point; import me.shedaniel.math.api.Rectangle; import com.mojang.blaze3d.systems.RenderSystem; +import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeCategory; -import me.shedaniel.rei.api.Renderer; +import me.shedaniel.rei.gui.widget.EntryWidget; import me.shedaniel.rei.gui.widget.RecipeBaseWidget; -import me.shedaniel.rei.gui.widget.SlotWidget; import me.shedaniel.rei.gui.widget.Widget; import me.shedaniel.rei.plugin.DefaultPlugin; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; -import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import java.util.Arrays; -import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.function.Supplier; @@ -38,8 +35,8 @@ public class DefaultBrewingCategory implements RecipeCategory<DefaultBrewingDisp } @Override - public Renderer getIcon() { - return Renderer.fromItemStack(new ItemStack(Blocks.BREWING_STAND)); + public EntryStack getLogo() { + return EntryStack.create(Blocks.BREWING_STAND); } @Override @@ -63,12 +60,12 @@ public class DefaultBrewingCategory implements RecipeCategory<DefaultBrewingDisp blit(startPoint.x + 44, startPoint.y + 28, 103, 163, width, 4); } })); - widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1, Renderer.fromItemStack(new ItemStack(Items.BLAZE_POWDER)), false, true, true)); - widgets.add(new SlotWidget(startPoint.x + 40, startPoint.y + 1, Renderer.fromItemStacks(() -> recipeDisplay.getInput().get(0), true, stack -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.input"))), false, true, true)); - widgets.add(new SlotWidget(startPoint.x + 63, startPoint.y + 1, Renderer.fromItemStacks(() -> recipeDisplay.getInput().get(1), true, stack -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.reactant"))), false, true, true)); - widgets.add(new SlotWidget(startPoint.x + 40, startPoint.y + 35, Renderer.fromItemStacks(() -> recipeDisplay.getOutput(0), true, stack -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.result"))), false, true, true)); - widgets.add(new SlotWidget(startPoint.x + 63, startPoint.y + 42, Renderer.fromItemStacks(() -> recipeDisplay.getOutput(1), true, stack -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.result"))), false, true, true)); - widgets.add(new SlotWidget(startPoint.x + 86, startPoint.y + 35, Renderer.fromItemStacks(() -> recipeDisplay.getOutput(2), true, stack -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.result"))), false, true, true)); + widgets.add(EntryWidget.create(startPoint.x + 1, startPoint.y + 1).entry(EntryStack.create(Items.BLAZE_POWDER)).noBackground()); + widgets.add(EntryWidget.create(startPoint.x + 40, startPoint.y + 1).entries(recipeDisplay.getInputEntries().get(0)).noBackground()); + widgets.add(EntryWidget.create(startPoint.x + 63, startPoint.y + 1).entries(recipeDisplay.getInputEntries().get(1)).noBackground()); + widgets.add(EntryWidget.create(startPoint.x + 40, startPoint.y + 35).entries(recipeDisplay.getOutput(0)).noBackground()); + widgets.add(EntryWidget.create(startPoint.x + 63, startPoint.y + 42).entries(recipeDisplay.getOutput(1)).noBackground()); + widgets.add(EntryWidget.create(startPoint.x + 86, startPoint.y + 35).entries(recipeDisplay.getOutput(2)).noBackground()); return widgets; } diff --git a/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingDisplay.java index 5a091e42b..3b8023779 100644 --- a/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/brewing/DefaultBrewingDisplay.java @@ -6,36 +6,49 @@ package me.shedaniel.rei.plugin.brewing; import com.google.common.collect.Lists; +import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeDisplay; import me.shedaniel.rei.plugin.DefaultPlugin; -import net.minecraft.block.Blocks; +import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; +import net.minecraft.item.PotionItem; import net.minecraft.recipe.Ingredient; +import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; public class DefaultBrewingDisplay implements RecipeDisplay { - private ItemStack input, output; - private Ingredient reactant; + private EntryStack input, output; + private List<EntryStack> reactant; public DefaultBrewingDisplay(ItemStack input, Ingredient reactant, ItemStack output) { - this.input = input; - this.reactant = reactant; - this.output = output; + this.input = EntryStack.create(input).setting(EntryStack.Settings.TOOLTIP_APPEND_EXTRA, stack -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.input"))); + if (this.input.getItem() instanceof PotionItem) + this.input = this.input.setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE); + this.reactant = new ArrayList<>(); + for (ItemStack stack : reactant.getStackArray()) { + EntryStack entryStack = EntryStack.create(stack); + if (stack.getItem() instanceof PotionItem) + entryStack.setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE); + entryStack.setting(EntryStack.Settings.TOOLTIP_APPEND_EXTRA, s -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.reactant"))); + this.reactant.add(entryStack); + } + this.output = EntryStack.create(output).setting(EntryStack.Settings.TOOLTIP_APPEND_EXTRA, stack -> Collections.singletonList(Formatting.YELLOW.toString() + I18n.translate("category.rei.brewing.result"))); + if (this.output.getItem() instanceof PotionItem) + this.output = this.output.setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE); } @Override - public List<List<ItemStack>> getInput() { - return Lists.newArrayList(Collections.singletonList(input), Arrays.asList(reactant.getMatchingStacksClient())); + public List<List<EntryStack>> getInputEntries() { + return Lists.newArrayList(Collections.singletonList(input), reactant); } @Override - public List<ItemStack> getOutput() { + public List<EntryStack> getOutputEntries() { return Collections.singletonList(output); } @@ -44,17 +57,17 @@ public class DefaultBrewingDisplay implements RecipeDisplay { return DefaultPlugin.BREWING; } - public List<ItemStack> getOutput(int slot) { - List<ItemStack> stack = new ArrayList<>(); + public List<EntryStack> getOutput(int slot) { + List<EntryStack> stack = new ArrayList<>(); for (int i = 0; i < slot * 2; i++) - stack.add(new ItemStack(Blocks.AIR)); + stack.add(EntryStack.empty()); for (int i = 0; i < 6 - slot * 2; i++) - stack.addAll(getOutput()); + stack.addAll(getOutputEntries()); return stack; } @Override - public List<List<ItemStack>> getRequiredItems() { - return Collections.singletonList(Collections.singletonList(ItemStack.EMPTY)); + public List<List<EntryStack>> getRequiredEntries() { + return getInputEntries(); } } diff --git a/src/main/java/me/shedaniel/rei/plugin/campfire/DefaultCampfireCategory.java b/src/main/java/me/shedaniel/rei/plugin/campfire/DefaultCampfireCategory.java index cccf8c688..f6bce7b51 100644 --- a/src/main/java/me/shedaniel/rei/plugin/campfire/DefaultCampfireCategory.java +++ b/src/main/java/me/shedaniel/rei/plugin/campfire/DefaultCampfireCategory.java @@ -8,11 +8,11 @@ package me.shedaniel.rei.plugin.campfire; import me.shedaniel.math.api.Point; import me.shedaniel.math.api.Rectangle; import com.mojang.blaze3d.systems.RenderSystem; +import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeCategory; -import me.shedaniel.rei.api.Renderer; +import me.shedaniel.rei.gui.widget.EntryWidget; import me.shedaniel.rei.gui.widget.RecipeArrowWidget; import me.shedaniel.rei.gui.widget.RecipeBaseWidget; -import me.shedaniel.rei.gui.widget.SlotWidget; import me.shedaniel.rei.gui.widget.Widget; import me.shedaniel.rei.impl.Screen |
