From 4710c557f449703362665a520bf68b85b2a7cdc1 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 8 Jun 2019 20:30:53 +0800 Subject: We are going to break lots of mods --- .../java/me/shedaniel/rei/api/RecipeDisplay.java | 14 ++- .../java/me/shedaniel/rei/api/RecipeHelper.java | 25 ++--- .../me/shedaniel/rei/api/SpeedCraftFunctional.java | 37 -------- .../me/shedaniel/rei/client/RecipeHelperImpl.java | 16 ---- .../me/shedaniel/rei/gui/RecipeViewingScreen.java | 12 +-- .../rei/gui/VillagerRecipeViewingScreen.java | 5 +- .../shedaniel/rei/gui/credits/CreditsScreen.java | 33 ++++++- .../rei/gui/widget/AutoCraftingButtonWidget.java | 57 ++++++++++++ .../rei/gui/widget/SpeedCraftingButtonWidget.java | 58 ------------ .../rei/plugin/DefaultBlastingDisplay.java | 5 +- .../rei/plugin/DefaultBrewingDisplay.java | 11 +-- .../rei/plugin/DefaultCampfireDisplay.java | 5 +- .../rei/plugin/DefaultCompostingDisplay.java | 6 -- .../shedaniel/rei/plugin/DefaultCustomDisplay.java | 9 +- .../me/shedaniel/rei/plugin/DefaultPlugin.java | 103 +-------------------- .../shedaniel/rei/plugin/DefaultShapedDisplay.java | 5 +- .../rei/plugin/DefaultShapelessDisplay.java | 5 +- .../rei/plugin/DefaultSmeltingDisplay.java | 5 +- .../rei/plugin/DefaultSmokingDisplay.java | 5 +- .../rei/plugin/DefaultStoneCuttingDisplay.java | 5 +- 20 files changed, 145 insertions(+), 276 deletions(-) delete mode 100644 src/main/java/me/shedaniel/rei/api/SpeedCraftFunctional.java create mode 100644 src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java delete mode 100644 src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/shedaniel/rei/api/RecipeDisplay.java b/src/main/java/me/shedaniel/rei/api/RecipeDisplay.java index d77e2c9ab..26739d4cf 100644 --- a/src/main/java/me/shedaniel/rei/api/RecipeDisplay.java +++ b/src/main/java/me/shedaniel/rei/api/RecipeDisplay.java @@ -15,11 +15,6 @@ import java.util.Optional; public interface RecipeDisplay { - /** - * @return the optional recipe - */ - Optional getRecipe(); - /** * @return a list of items */ @@ -46,4 +41,13 @@ public interface RecipeDisplay { */ Identifier getRecipeCategory(); + /** + * Gets the recipe location from datapack + * + * @return the recipe location + */ + default Optional getRecipeLocation() { + return Optional.empty(); + } + } diff --git a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java index ca0202d1f..19d411cfd 100644 --- a/src/main/java/me/shedaniel/rei/api/RecipeHelper.java +++ b/src/main/java/me/shedaniel/rei/api/RecipeHelper.java @@ -126,27 +126,20 @@ public interface RecipeHelper { void registerSpeedCraftButtonArea(Identifier category, ButtonAreaSupplier rectangle); /** - * @param category the category of the button area - * @deprecated Not required anymore - */ - @Deprecated - void registerDefaultSpeedCraftButtonArea(Identifier category); - - /** - * Gets the speed crafting functional from a category + * Removes the speed crafting button * - * @param category the category of the speed crafting functional - * @return the list of speed crafting functionals + * @param category the category of the button */ - List getSpeedCraftFunctional(RecipeCategory category); + default void removeSpeedCraftButton(Identifier category) { + registerSpeedCraftButtonArea(category, bounds -> null); + } /** - * Registers a speed crafting functional - * - * @param category the category of the speed crafting functional - * @param functional the functional to be registered + * @param category the category of the button area + * @deprecated Not required anymore */ - void registerSpeedCraftFunctional(Identifier category, SpeedCraftFunctional functional); + @Deprecated + void registerDefaultSpeedCraftButtonArea(Identifier category); /** * Gets the map of all recipes visible to the player diff --git a/src/main/java/me/shedaniel/rei/api/SpeedCraftFunctional.java b/src/main/java/me/shedaniel/rei/api/SpeedCraftFunctional.java deleted file mode 100644 index 32f67438d..000000000 --- a/src/main/java/me/shedaniel/rei/api/SpeedCraftFunctional.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Roughly Enough Items by Danielshe. - * Licensed under the MIT License. - */ - -package me.shedaniel.rei.api; - -import net.minecraft.client.gui.screen.Screen; - -public interface SpeedCraftFunctional { - - /** - * Gets the classes that it is functioning for - * - * @return the array of classes - */ - Class[] getFunctioningFor(); - - /** - * Performs the auto crafting - * - * @param screen the current screen - * @param recipe the current recipe - * @return whether it worked - */ - boolean performAutoCraft(Screen screen, T recipe); - - /** - * Gets if this functional accepts the auto crafting - * - * @param screen the current screen - * @param recipe the current recipe - * @return whether it is accepted - */ - boolean acceptRecipe(Screen screen, T recipe); - -} diff --git a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java index 83ee91458..64450da02 100644 --- a/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/RecipeHelperImpl.java @@ -43,7 +43,6 @@ public class RecipeHelperImpl implements RecipeHelper { private final Map categoryDisplaySettingsMap = Maps.newHashMap(); private final List categories = Lists.newArrayList(); private final Map speedCraftAreaSupplierMap = Maps.newHashMap(); - private final Map> speedCraftFunctionalMap = Maps.newHashMap(); private final Map>> categoryWorkingStations = Maps.newHashMap(); private final List displayVisibilityHandlers = Lists.newArrayList(); private final List liveRecipeGenerators = Lists.newArrayList(); @@ -211,20 +210,6 @@ public class RecipeHelperImpl implements RecipeHelper { registerSpeedCraftButtonArea(category, bounds -> new Rectangle((int) bounds.getMaxX() - 16, (int) bounds.getMaxY() - 16, 10, 10)); } - @Override - public List getSpeedCraftFunctional(RecipeCategory category) { - if (speedCraftFunctionalMap.get(category.getIdentifier()) == null) - return Lists.newArrayList(); - return speedCraftFunctionalMap.get(category.getIdentifier()); - } - - @Override - public void registerSpeedCraftFunctional(Identifier category, SpeedCraftFunctional functional) { - List list = speedCraftFunctionalMap.containsKey(category) ? new LinkedList<>(speedCraftFunctionalMap.get(category)) : Lists.newLinkedList(); - list.add(functional); - speedCraftFunctionalMap.put(category, list); - } - @SuppressWarnings("deprecation") public void recipesLoaded(RecipeManager recipeManager) { this.recipeCount.set(0); @@ -233,7 +218,6 @@ public class RecipeHelperImpl implements RecipeHelper { this.categories.clear(); this.speedCraftAreaSupplierMap.clear(); this.categoryWorkingStations.clear(); - this.speedCraftFunctionalMap.clear(); this.categoryDisplaySettingsMap.clear(); this.recipeFunctions.clear(); this.displayVisibilityHandlers.clear(); diff --git a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java index 4d0ec388a..6f3649952 100644 --- a/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java @@ -16,7 +16,6 @@ import net.minecraft.ChatFormat; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.sound.PositionedSoundInstance; @@ -70,14 +69,6 @@ public class RecipeViewingScreen extends Screen { this.choosePageActivated = false; } - public static SpeedCraftFunctional getSpeedCraftFunctionalByCategory(AbstractContainerScreen containerScreen, RecipeCategory category) { - for(SpeedCraftFunctional functional : RecipeHelper.getInstance().getSpeedCraftFunctional(category)) - for(Class aClass : functional.getFunctioningFor()) - if (containerScreen.getClass().isAssignableFrom(aClass)) - return functional; - return null; - } - @Override public boolean keyPressed(int int_1, int int_2, int int_3) { if (int_1 == 256 && choosePageActivated) { @@ -280,7 +271,6 @@ public class RecipeViewingScreen extends Screen { } } Optional supplier = RecipeHelper.getInstance().getSpeedCraftButtonArea(selectedCategory); - final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(ScreenHelper.getLastContainerScreen(), selectedCategory); int recipeHeight = selectedCategory.getDisplayHeight(); List currentDisplayed = getCurrentDisplayed(); for(int i = 0; i < currentDisplayed.size(); i++) { @@ -290,7 +280,7 @@ public class RecipeViewingScreen extends Screen { final Rectangle displayBounds = new Rectangle((int) getBounds().getCenterX() - displayWidth / 2, getBounds().y + 40 + recipeHeight * i + 7 * i, displayWidth, recipeHeight); widgets.addAll(selectedCategory.setupDisplay(displaySupplier, displayBounds)); if (supplier.isPresent()) - widgets.add(new SpeedCraftingButtonWidget(supplier.get().get(displayBounds), supplier.get().getButtonText(), functional, displaySupplier)); + widgets.add(new AutoCraftingButtonWidget(supplier.get().get(displayBounds), supplier.get().getButtonText(), displaySupplier)); } if (choosePageActivated) recipeChoosePageWidget = new RecipeChoosePageWidget(this, page, getTotalPages(selectedCategory)); diff --git a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java index 6a39f06d9..f6958c5be 100644 --- a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java @@ -38,8 +38,6 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; -import static me.shedaniel.rei.gui.RecipeViewingScreen.getSpeedCraftFunctionalByCategory; - public class VillagerRecipeViewingScreen extends Screen { private static final int TABS_PER_PAGE = 8; @@ -132,9 +130,8 @@ public class VillagerRecipeViewingScreen extends Screen { Rectangle recipeBounds = new Rectangle(bounds.x + 100 + (guiWidth - 100) / 2 - category.getDisplayWidth(display) / 2, bounds.y + bounds.height / 2 - category.getDisplayHeight() / 2, category.getDisplayWidth(display), category.getDisplayHeight()); this.widgets.addAll(category.setupDisplay(() -> display, recipeBounds)); Optional supplier = RecipeHelper.getInstance().getSpeedCraftButtonArea(category); - final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(ScreenHelper.getLastContainerScreen(), category); if (supplier.isPresent() && supplier.get().get(recipeBounds) != null) - this.widgets.add(new SpeedCraftingButtonWidget(supplier.get().get(recipeBounds), supplier.get().getButtonText(), functional, () -> display)); + this.widgets.add(new AutoCraftingButtonWidget(supplier.get().get(recipeBounds), supplier.get().getButtonText(), () -> display)); int index = 0; for(RecipeDisplay recipeDisplay : categoryMap.get(category)) { diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java index e54a37581..8a5ba8211 100644 --- a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java @@ -5,14 +5,22 @@ package me.shedaniel.rei.gui.credits; +import com.google.common.collect.Lists; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.gui.credits.CreditsEntryListWidget.CreditsItem; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen; import net.minecraft.client.gui.widget.AbstractPressableButtonWidget; import net.minecraft.client.resource.language.I18n; import net.minecraft.network.chat.TextComponent; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + public class CreditsScreen extends Screen { private Screen parent; @@ -39,7 +47,30 @@ public class CreditsScreen extends Screen { protected void init() { children.add(entryListWidget = new CreditsEntryListWidget(minecraft, width, height, 32, height - 32)); entryListWidget.creditsClearEntries(); - for(String line : I18n.translate("text.rei.credit.text").split("\n")) + List translators = Lists.newArrayList(); + FabricLoader.getInstance().getModContainer("roughlyenoughitems").ifPresent(rei -> { + try { + if (rei.getMetadata().containsCustomElement("rei:translators")) { + JsonObject jsonObject = rei.getMetadata().getCustomElement("rei:translators").getAsJsonObject(); + for(Map.Entry entry : jsonObject.entrySet()) { + JsonElement value = entry.getValue(); + String behind = value.isJsonArray() ? Lists.newArrayList(value.getAsJsonArray().iterator()).stream().map(json -> json.getAsString()).sorted(String::compareToIgnoreCase).collect(Collectors.joining(", ")) : value.getAsString(); + translators.add(String.format(" %s - %s", entry.getKey(), behind)); + } + } + translators.sort(String::compareToIgnoreCase); + } catch (Exception e) { + translators.clear(); + translators.add("Failed to get translators: " + e.toString()); + for(StackTraceElement traceElement : e.getStackTrace()) + translators.add(" at " + traceElement); + e.printStackTrace(); + } + }); + List actualTranslators = Lists.newArrayList(); + int i = width - 80 - 6; + translators.forEach(s -> font.wrapStringToWidthAsList(s, i).forEach(actualTranslators::add)); + for(String line : I18n.translate("text.rei.credit.text", FabricLoader.getInstance().getModContainer("roughlyenoughitems").map(mod -> mod.getMetadata().getVersion().getFriendlyString()).orElse("Unknown"), String.join("\n", actualTranslators)).split("\n")) entryListWidget.creditsAddEntry(new CreditsItem(new TextComponent(line))); entryListWidget.creditsAddEntry(new CreditsItem(new TextComponent(""))); children.add(buttonDone = new AbstractPressableButtonWidget(width / 2 - 100, height - 26, 200, 20, I18n.translate("gui.done")) { diff --git a/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java new file mode 100644 index 000000000..d62ac654f --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java @@ -0,0 +1,57 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.gui.widget; + +import me.shedaniel.rei.api.RecipeDisplay; +import me.shedaniel.rei.client.ScreenHelper; +import net.minecraft.ChatFormat; +import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.util.Identifier; + +import java.awt.*; +import java.util.Optional; +import java.util.function.Supplier; + +public class AutoCraftingButtonWidget extends ButtonWidget { + + private final Supplier displaySupplier; + private String extraTooltip; + private AbstractContainerScreen containerScreen; + + public AutoCraftingButtonWidget(Rectangle rectangle, String text, Supplier displaySupplier) { + super(rectangle, text); + this.displaySupplier = displaySupplier; + Optional recipe = displaySupplier.get().getRecipeLocation(); + extraTooltip = recipe.isPresent() ? I18n.translate("text.rei.recipe_id", ChatFormat.GRAY.toString(), recipe.get().toString()) : ""; + this.containerScreen = ScreenHelper.getLastContainerScreen(); + } + + @Override + public void onPressed() { + minecraft.openScreen(containerScreen); + ScreenHelper.getLastOverlay().init(); + } + + @Override + public void render(int mouseX, int mouseY, float delta) { + this.enabled = true; + super.render(mouseX, mouseY, delta); + } + + @Override + public Optional getTooltips() { + if (this.minecraft.options.advancedItemTooltips) + if (enabled) + return Optional.ofNullable(I18n.translate("text.auto_craft.move_items") + extraTooltip); + else + return Optional.ofNullable(I18n.translate("text.auto_craft.failed_move_items") + extraTooltip); + if (enabled) + return Optional.ofNullable(I18n.translate("text.auto_craft.move_items")); + else + return Optional.ofNullable(I18n.translate("text.auto_craft.failed_move_items")); + } +} diff --git a/src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java deleted file mode 100644 index f2049919d..000000000 --- a/src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Roughly Enough Items by Danielshe. - * Licensed under the MIT License. - */ - -package me.shedaniel.rei.gui.widget; - -import me.shedaniel.rei.api.RecipeDisplay; -import me.shedaniel.rei.api.SpeedCraftFunctional; -import me.shedaniel.rei.client.ScreenHelper; -import net.minecraft.ChatFormat; -import net.minecraft.client.resource.language.I18n; -import net.minecraft.recipe.Recipe; - -import java.awt.*; -import java.util.Optional; -import java.util.function.Supplier; - -public class SpeedCraftingButtonWidget extends ButtonWidget { - - private final Supplier displaySupplier; - private final SpeedCraftFunctional functional; - private String extraTooltip; - - public SpeedCraftingButtonWidget(Rectangle rectangle, String text, SpeedCraftFunctional functional, Supplier displaySupplier) { - super(rectangle, text); - this.displaySupplier = displaySupplier; - this.functional = functional; - Optional recipe = displaySupplier.get().getRecipe(); - extraTooltip = recipe.isPresent() ? I18n.translate("text.rei.recipe_id", ChatFormat.GRAY.toString(), recipe.get().getId().toString()) : ""; - } - - @Override - public void onPressed() { - minecraft.openScreen(ScreenHelper.getLastContainerScreen()); - ScreenHelper.getLastOverlay().init(); - functional.performAutoCraft(ScreenHelper.getLastContainerScreen(), displaySupplier.get()); - } - - @Override - public void render(int mouseX, int mouseY, float delta) { - this.enabled = functional != null && functional.acceptRecipe(ScreenHelper.getLastContainerScreen(), displaySupplier.get()); - super.render(mouseX, mouseY, delta); - } - - @Override - public Optional getTooltips() { - if (this.minecraft.options.advancedItemTooltips) - if (enabled) - return Optional.ofNullable(I18n.translate("text.speed_craft.move_items") + extraTooltip); - else - return Optional.ofNullable(I18n.translate("text.speed_craft.failed_move_items") + extraTooltip); - if (enabled) - return Optional.ofNullable(I18n.translate("text.speed_craft.move_items")); - else - return Optional.ofNullable(I18n.translate("text.speed_craft.failed_move_items")); - } -} diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.java index 3adab1d6f..6e490c47c 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBlastingDisplay.java @@ -9,6 +9,7 @@ import me.shedaniel.rei.api.RecipeDisplay; import net.minecraft.block.entity.FurnaceBlockEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.recipe.AbstractCookingRecipe; import net.minecraft.recipe.BlastingRecipe; import net.minecraft.util.Identifier; @@ -32,8 +33,8 @@ public class DefaultBlastingDisplay implements RecipeDisplay { } @Override - public Optional getRecipe() { - return Optional.ofNullable(display); + public Optional getRecipeLocation() { + return Optional.ofNullable(display).map(AbstractCookingRecipe::getId); } @Override diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java index 792b3a78d..80c49b53e 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java @@ -10,10 +10,12 @@ import me.shedaniel.rei.api.RecipeDisplay; import net.minecraft.block.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.Recipe; import net.minecraft.util.Identifier; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; public class DefaultBrewingDisplay implements RecipeDisplay { @@ -26,11 +28,6 @@ public class DefaultBrewingDisplay implements RecipeDisplay { this.output = output; } - @Override - public Optional getRecipe() { - return Optional.empty(); - } - @Override public List> getInput() { return Lists.newArrayList(Collections.singletonList(input), Arrays.asList(reactant.getStackArray())); diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultCampfireDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultCampfireDisplay.java index 4e910be9e..86ab7a26a 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultCampfireDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultCampfireDisplay.java @@ -7,6 +7,7 @@ package me.shedaniel.rei.plugin; import me.shedaniel.rei.api.RecipeDisplay; import net.minecraft.item.ItemStack; +import net.minecraft.recipe.AbstractCookingRecipe; import net.minecraft.recipe.CampfireCookingRecipe; import net.minecraft.recipe.Ingredient; import net.minecraft.util.DefaultedList; @@ -41,8 +42,8 @@ public class DefaultCampfireDisplay implements RecipeDisplay getRecipe() { - return Optional.ofNullable(display); + public Optional getRecipeLocation() { + return Optional.ofNullable(display).map(AbstractCookingRecipe::getId); } @Override diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultCompostingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultCompostingDisplay.java index 235bbcd06..e61e59268 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultCompostingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultCompostingDisplay.java @@ -9,7 +9,6 @@ import me.shedaniel.rei.api.RecipeDisplay; import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; -import net.minecraft.recipe.Recipe; import net.minecraft.util.Identifier; import java.util.*; @@ -34,11 +33,6 @@ public class DefaultCompostingDisplay implements RecipeDisplay { return page; } - @Override - public Optional getRecipe() { - return Optional.empty(); - } - @Override public List> getInput() { List> lists = new ArrayList<>(); diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultCustomDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultCustomDisplay.java index 21c141906..1a434e2f4 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultCustomDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultCustomDisplay.java @@ -8,6 +8,7 @@ package me.shedaniel.rei.plugin; import com.google.common.collect.Lists; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; +import net.minecraft.util.Identifier; import java.util.List; import java.util.Optional; @@ -41,9 +42,13 @@ public class DefaultCustomDisplay implements DefaultCraftingDisplay { this(input, output, null); } + public Recipe getPossibleRecipe() { + return possibleRecipe; + } + @Override - public Optional getRecipe() { - return Optional.ofNullable(possibleRecipe); + public Optional getRecipeLocation() { + return Optional.ofNullable(possibleRecipe).map(Recipe::getId); } @Override diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java index c04aba51a..243a12b89 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java @@ -13,11 +13,10 @@ import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.gui.RecipeViewingScreen; import me.shedaniel.rei.gui.VillagerRecipeViewingScreen; import me.shedaniel.rei.listeners.ContainerScreenHooks; -import me.shedaniel.rei.listeners.RecipeBookGuiHooks; import net.minecraft.block.ComposterBlock; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.*; +import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen; +import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider; import net.minecraft.client.recipe.book.ClientRecipeBook; import net.minecraft.container.CraftingContainer; @@ -134,7 +133,7 @@ public class DefaultPlugin implements REIPluginEntry { 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.get(itemConvertible); + float chance = ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.getOrDefault(itemConvertible, 0); if (chance > 0) map.put(itemConvertible, chance); }); @@ -269,6 +268,7 @@ public class DefaultPlugin implements REIPluginEntry { recipeHelper.registerWorkingStations(STONE_CUTTING, new ItemStack(Items.STONECUTTER)); recipeHelper.registerWorkingStations(COMPOSTING, new ItemStack(Items.COMPOSTER)); recipeHelper.registerSpeedCraftButtonArea(COMPOSTING, bounds -> null); + recipeHelper.registerSpeedCraftButtonArea(DefaultPlugin.CAMPFIRE, bounds -> new Rectangle((int) bounds.getMaxX() - 16, bounds.y + 6, 10, 10)); recipeHelper.registerRecipeVisibilityHandler(new DisplayVisibilityHandler() { @Override public DisplayVisibility handleDisplay(RecipeCategory category, RecipeDisplay display) { @@ -280,101 +280,6 @@ public class DefaultPlugin implements REIPluginEntry { return -1f; } }); - recipeHelper.registerSpeedCraftButtonArea(DefaultPlugin.CAMPFIRE, bounds -> new Rectangle((int) bounds.getMaxX() - 16, bounds.y + 6, 10, 10)); - recipeHelper.registerSpeedCraftFunctional(DefaultPlugin.CRAFTING, new SpeedCraftFunctional() { - @Override - public Class[] getFunctioningFor() { - return new Class[]{InventoryScreen.class, CraftingTableScreen.class}; - } - - @Override - public boolean performAutoCraft(Screen screen, DefaultCraftingDisplay recipe) { - if (!recipe.getRecipe().isPresent()) - return false; - if (screen.getClass().isAssignableFrom(CraftingTableScreen.class)) - ((RecipeBookGuiHooks) (((CraftingTableScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); - else if (screen.getClass().isAssignableFrom(InventoryScreen.class)) - ((RecipeBookGuiHooks) (((InventoryScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); - else - return false; - MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, (Recipe) recipe.getRecipe().get(), Screen.hasShiftDown()); - return true; - } - - @Override - public boolean acceptRecipe(Screen screen, DefaultCraftingDisplay recipe) { - return screen instanceof CraftingTableScreen || (screen instanceof InventoryScreen && recipe.getHeight() < 3 && recipe.getWidth() < 3); - } - }); - recipeHelper.registerSpeedCraftFunctional(DefaultPlugin.SMELTING, new SpeedCraftFunctional() { - @Override - public Class[] getFunctioningFor() { - return new Class[]{FurnaceScreen.class}; - } - - @Override - public boolean performAutoCraft(Screen screen, DefaultSmeltingDisplay recipe) { - if (!recipe.getRecipe().isPresent()) - return false; - if (screen instanceof FurnaceScreen) - ((RecipeBookGuiHooks) (((FurnaceScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); - else - return false; - MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, (Recipe) recipe.getRecipe().get(), Screen.hasShiftDown()); - return true; - } - - @Override - public boolean acceptRecipe(Screen screen, DefaultSmeltingDisplay recipe) { - return screen instanceof FurnaceScreen; - } - }); - recipeHelper.registerSpeedCraftFunctional(DefaultPlugin.SMOKING, new SpeedCraftFunctional() { - @Override - public Class[] getFunctioningFor() { - return new Class[]{SmokerScreen.class}; - } - - @Override - public boolean performAutoCraft(Screen screen, DefaultSmokingDisplay recipe) { - if (!recipe.getRecipe().isPresent()) - return false; - if (screen instanceof SmokerScreen) - ((RecipeBookGuiHooks) (((SmokerScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); - else - return false; - MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, (Recipe) recipe.getRecipe().get(), Screen.hasShiftDown()); - return true; - } - - @Override - public boolean acceptRecipe(Screen screen, DefaultSmokingDisplay recipe) { - return screen instanceof SmokerScreen; - } - }); - recipeHelper.registerSpeedCraftFunctional(DefaultPlugin.BLASTING, new SpeedCraftFunctional() { - @Override - public Class[] getFunctioningFor() { - return new Class[]{BlastFurnaceScreen.class}; - } - - @Override - public boolean acceptRecipe(Screen screen, DefaultBlastingDisplay recipe) { - return screen instanceof BlastFurnaceScreen; - } - - @Override - public boolean performAutoCraft(Screen screen, DefaultBlastingDisplay recipe) { - if (!recipe.getRecipe().isPresent()) - return false; - if (screen instanceof BlastFurnaceScreen) - ((RecipeBookGuiHooks) (((BlastFurnaceScreen) screen).getRecipeBookGui())).rei_getGhostSlots().reset(); - else - return false; - MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, (Recipe) recipe.getRecipe().get(), Screen.hasShiftDown()); - return true; - } - }); } @Override diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java index 29aae3126..7e9a3e075 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultShapedDisplay.java @@ -8,6 +8,7 @@ package me.shedaniel.rei.plugin; import net.minecraft.item.ItemStack; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.ShapedRecipe; +import net.minecraft.util.Identifier; import java.util.Arrays; import java.util.Collections; @@ -28,8 +29,8 @@ public class DefaultShapedDisplay implements DefaultCraftingDisplay getRecipe() { - return Optional.ofNullable(display); + public Optional getRecipeLocation() { + return Optional.ofNullable(display).map(ShapedRecipe::getId); } @Override diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java index b3c4fe323..678fcd675 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultShapelessDisplay.java @@ -7,6 +7,7 @@ package me.shedaniel.rei.plugin; import net.minecraft.item.ItemStack; import net.minecraft.recipe.ShapelessRecipe; +import net.minecraft.util.Identifier; import java.util.Arrays; import java.util.Collections; @@ -27,8 +28,8 @@ public class DefaultShapelessDisplay implements DefaultCraftingDisplay { } @Override - public Optional getRecipe() { - return Optional.ofNullable(display); + public Optional getRecipeLocation() { + return Optional.ofNullable(display).map(ShapelessRecipe::getId); } @Override diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java index e3d50c397..a291b1037 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java @@ -9,6 +9,7 @@ import me.shedaniel.rei.api.RecipeDisplay; import net.minecraft.block.entity.FurnaceBlockEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.recipe.AbstractCookingRecipe; import net.minecraft.recipe.SmeltingRecipe; import net.minecraft.util.Identifier; @@ -32,8 +33,8 @@ public class DefaultSmeltingDisplay implements RecipeDisplay { } @Override - public Optional getRecipe() { - return Optional.ofNullable(display); + public Optional getRecipeLocation() { + return Optional.ofNullable(display).map(AbstractCookingRecipe::getId); } @Override diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.java index a4ea4739c..d85d168f8 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultSmokingDisplay.java @@ -9,6 +9,7 @@ import me.shedaniel.rei.api.RecipeDisplay; import net.minecraft.block.entity.FurnaceBlockEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.recipe.AbstractCookingRecipe; import net.minecraft.recipe.SmokingRecipe; import net.minecraft.util.Identifier; @@ -32,8 +33,8 @@ public class DefaultSmokingDisplay implements RecipeDisplay { } @Override - public Optional getRecipe() { - return Optional.ofNullable(display); + public Optional getRecipeLocation() { + return Optional.ofNullable(display).map(AbstractCookingRecipe::getId); } @Override diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingDisplay.java index 80776a44c..f7d0802f4 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingDisplay.java +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingDisplay.java @@ -7,6 +7,7 @@ package me.shedaniel.rei.plugin; import me.shedaniel.rei.api.RecipeDisplay; import net.minecraft.item.ItemStack; +import net.minecraft.recipe.CuttingRecipe; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.StonecuttingRecipe; import net.minecraft.util.DefaultedList; @@ -35,8 +36,8 @@ public class DefaultStoneCuttingDisplay implements RecipeDisplay getRecipe() { - return Optional.ofNullable(display); + public Optional getRecipeLocation() { + return Optional.ofNullable(display).map(CuttingRecipe::getId); } @Override -- cgit