diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-12 21:28:36 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-12 21:28:36 +0800 |
| commit | 79249bdf32142a22bab77375c32b4290867c2f76 (patch) | |
| tree | 21550ef69e146b18158be0c49a2a7fcf581bcc90 /src/main/java | |
| parent | e8e82b12ebd8da773ab143715f3fc654c839aa4c (diff) | |
| download | RoughlyEnoughItems-79249bdf32142a22bab77375c32b4290867c2f76.tar.gz RoughlyEnoughItems-79249bdf32142a22bab77375c32b4290867c2f76.tar.bz2 RoughlyEnoughItems-79249bdf32142a22bab77375c32b4290867c2f76.zip | |
Basic Config
Diffstat (limited to 'src/main/java')
15 files changed, 422 insertions, 43 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 157d8bd26..830251a61 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -2,7 +2,7 @@ package me.shedaniel.rei; import me.shedaniel.rei.api.IRecipePlugin; import me.shedaniel.rei.client.ClientHelper; -import me.shedaniel.rei.client.ConfigManager; +import me.shedaniel.rei.client.ConfigHelper; import me.shedaniel.rei.client.RecipeHelper; import me.shedaniel.rei.listeners.IListener; import me.shedaniel.rei.plugin.DefaultPlugin; @@ -27,7 +27,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali public static final Identifier DELETE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "deleteitem"); public static final Identifier CREATE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "createitem"); private static final List<IListener> listeners = new ArrayList<>(); - private static ConfigManager configManager; + private static ConfigHelper configHelper; public static <T> List<T> getListeners(Class<T> listenerClass) { return listeners.stream().filter(listener -> { @@ -37,15 +37,15 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali }).collect(Collectors.toList()); } - public static ConfigManager getConfigManager() { - return configManager; + public static ConfigHelper getConfigHelper() { + return configHelper; } @Override public void onInitializeClient() { registerREIListeners(); registerDefaultPlugin(); - configManager = new ConfigManager(); + configHelper = new ConfigHelper(); } private void registerDefaultPlugin() { diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java index 306ddaa6b..8ca032457 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java @@ -6,6 +6,7 @@ import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.IRecipeCategory; import me.shedaniel.rei.api.IRecipeDisplay; import me.shedaniel.rei.gui.ContainerGuiOverlay; +import me.shedaniel.rei.gui.widget.ConfigWidget; import me.shedaniel.rei.gui.widget.RecipeViewingWidget; import me.shedaniel.rei.listeners.ClientLoaded; import me.shedaniel.rei.listeners.IMixinContainerGui; @@ -15,6 +16,8 @@ import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl; import net.fabricmc.loader.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; +import net.minecraft.client.gui.ContainerGui; +import net.minecraft.client.gui.Gui; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.InputUtil; import net.minecraft.enchantment.Enchantment; @@ -23,6 +26,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.server.network.packet.CustomPayloadServerPacket; +import net.minecraft.util.DefaultedList; import net.minecraft.util.Identifier; import net.minecraft.util.PacketByteBuf; import net.minecraft.util.registry.Registry; @@ -30,6 +34,7 @@ import net.minecraft.util.registry.Registry; import java.awt.*; import java.awt.event.KeyEvent; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -117,9 +122,16 @@ public class ClientHelper implements ClientLoaded, ClientModInitializer { return map.keySet().size() > 0; } + public static void openConfigWindow(Gui parent) { + MinecraftClient.getInstance().openGui(new ConfigWidget(parent)); + } + @Override public void clientLoaded() { - Registry.ITEM.forEach(this::registerItem); + Registry.ITEM.forEach(item -> { + if (!item.equals(Items.ENCHANTED_BOOK)) + registerItem(item); + }); Registry.ENCHANTMENT.forEach(enchantment -> { for(int i = enchantment.getMinimumLevel(); i < enchantment.getMaximumLevel(); i++) { Map<Enchantment, Integer> map = new HashMap<>(); @@ -133,13 +145,23 @@ public class ClientHelper implements ClientLoaded, ClientModInitializer { public void registerItem(Item item) { registerItemStack(item.getDefaultStack()); + DefaultedList<ItemStack> stacks = DefaultedList.create(); + item.addStacksForDisplay(item.getItemGroup(), stacks); + stacks.forEach(this::registerItemStack); } public void registerItemStack(ItemStack stack) { - if (!stack.getItem().equals(Items.AIR)) + if (!stack.getItem().equals(Items.AIR) && !alreadyContain(stack)) itemList.add(stack); } + private boolean alreadyContain(ItemStack stack) { + for(ItemStack itemStack : itemList) + if (ItemStack.areEqual(stack, itemStack)) + return true; + return false; + } + @Override public void onInitializeClient() { this.cheating = false; diff --git a/src/main/java/me/shedaniel/rei/client/ConfigManager.java b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java index 3ff143f44..90c789e4a 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigManager.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigHelper.java @@ -9,13 +9,13 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.file.Files; -public class ConfigManager { +public class ConfigHelper { private final File configFile; private REIConfig config; private boolean craftableOnly; - public ConfigManager() { + public ConfigHelper() { this.configFile = new File(FabricLoader.INSTANCE.getConfigDirectory(), "rei.json"); this.craftableOnly = false; try { @@ -71,4 +71,20 @@ public class ConfigManager { return craftableOnly && config.enableCraftableOnlyButton; } + public boolean showCraftableOnlyButton() { + return config.enableCraftableOnlyButton; + } + + public void setShowCraftableOnlyButton(boolean enableCraftableOnlyButton) { + config.enableCraftableOnlyButton = enableCraftableOnlyButton; + } + + public boolean sideSearchField() { + return config.sideSearchField; + } + + public void setSideSearchField(boolean sideSearchField) { + config.sideSearchField = sideSearchField; + } + } diff --git a/src/main/java/me/shedaniel/rei/client/REIConfig.java b/src/main/java/me/shedaniel/rei/client/REIConfig.java index 2f4060a9f..7c9079245 100644 --- a/src/main/java/me/shedaniel/rei/client/REIConfig.java +++ b/src/main/java/me/shedaniel/rei/client/REIConfig.java @@ -14,5 +14,6 @@ public class REIConfig { public REIItemListOrdering itemListOrdering = REIItemListOrdering.REGISTRY; public boolean isAscending = true; public boolean enableCraftableOnlyButton = true; + public boolean sideSearchField = false; } diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java index a7fde1457..5a5581597 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java @@ -81,6 +81,12 @@ public class ContainerGuiOverlay extends Gui { ClientHelper.setCheating(!ClientHelper.isCheating()); } }); + widgets.add(new ButtonWidget(10, 35, 40, 20, I18n.translate("text.rei.config")) { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + ClientHelper.openConfigWindow(containerGui.getContainerGui()); + } + }); this.widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") { @Override public void draw(int mouseX, int mouseY, float partialTicks) { @@ -89,25 +95,21 @@ public class ContainerGuiOverlay extends Gui { super.draw(mouseX, mouseY, partialTicks); } }); -// Rectangle textFieldArea = getTextFieldArea(); -// this.widgets.add(searchField = new TextFieldWidget(-1, MinecraftClient.getInstance().fontRenderer, -// (int) textFieldArea.getX(), (int) textFieldArea.getY(), (int) textFieldArea.getWidth(), (int) textFieldArea.getHeight()) { -// @Override -// public void addText(String string_1) { -// super.addText(string_1); -// searchTerm = this.getText(); -// itemListOverlay.updateList(page, searchTerm); -// } -// }); if (GuiHelper.searchField == null) GuiHelper.searchField = new TextFieldWidget(0, 0, 0, 0) { @Override - public void addText(String string_1) { - super.addText(string_1); - searchTerm = this.getText(); - itemListOverlay.updateList(page, searchTerm); + public boolean mouseClicked(double double_1, double double_2, int int_1) { + if (isVisible() && getBounds().contains(double_1, double_2) && int_1 == 1) { + setText(""); + return true; + } + return super.mouseClicked(double_1, double_2, int_1); } }; + GuiHelper.searchField.setChangedListener(s -> { + searchTerm = s; + itemListOverlay.updateList(page, searchTerm); + }); GuiHelper.searchField.setBounds(getTextFieldArea()); this.widgets.add(GuiHelper.searchField); GuiHelper.searchField.setText(searchTerm); @@ -116,6 +118,8 @@ public class ContainerGuiOverlay extends Gui { } private Rectangle getTextFieldArea() { + if (RoughlyEnoughItemsCore.getConfigHelper().sideSearchField()) + return new Rectangle(rectangle.x + 2, window.getScaledHeight() - 22, rectangle.width - 6, 18); if (MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) { RecipeViewingWidget widget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui; return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width, 18); @@ -128,7 +132,7 @@ public class ContainerGuiOverlay extends Gui { } private Rectangle getItemListArea() { - return new Rectangle(rectangle.x + 2, rectangle.y + 24, rectangle.width - 4, rectangle.height - 27); + return new Rectangle(rectangle.x + 2, rectangle.y + 24, rectangle.width - 4, rectangle.height - (RoughlyEnoughItemsCore.getConfigHelper().sideSearchField() ? 27 + 22 : 27)); } public Rectangle getRectangle() { diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java index 2a69df8ff..238efc2e3 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java @@ -28,17 +28,17 @@ public abstract class ButtonWidget extends Drawable implements IWidget { private boolean pressed; private Rectangle bounds; - public ButtonWidget(int int_2, int int_3, int int_4, int int_5, String string_1) { + public ButtonWidget(int x, int y, int width, int height, String text) { this.width = 200; this.height = 20; this.enabled = true; this.visible = true; - this.x = int_2; - this.y = int_3; - this.width = int_4; - this.height = int_5; - this.text = string_1; - this.bounds = new Rectangle(x, y, width, height); + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.text = text; + this.bounds = new Rectangle(x, this.y, this.width, this.height); } public Rectangle getBounds() { diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java new file mode 100644 index 000000000..d0a094b49 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java @@ -0,0 +1,108 @@ +package me.shedaniel.rei.gui.widget; + +import com.google.common.collect.Lists; +import me.shedaniel.rei.RoughlyEnoughItemsCore; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiEventListener; +import net.minecraft.client.render.GuiLighting; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.util.Window; + +import java.io.IOException; +import java.util.List; + +public class ConfigWidget extends Gui { + + private List<IWidget> widgets; + private Gui parent; + + public ConfigWidget(Gui parent) { + this.parent = parent; + this.widgets = Lists.newArrayList(); + } + + @Override + public boolean keyPressed(int int_1, int int_2, int int_3) { + if (int_1 == 256 && this.doesEscapeKeyClose()) { + MinecraftClient.getInstance().openGui(parent); + return true; + } else { + return super.keyPressed(int_1, int_2, int_3); + } + } + + @Override + protected void onInitialized() { + super.onInitialized(); + widgets.clear(); + Window window = MinecraftClient.getInstance().window; + widgets.add(new ButtonWidget(window.getScaledWidth() / 2 - 20, 30, 40, 20, "") { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + if (button == 0) + RoughlyEnoughItemsCore.getConfigHelper().setSideSearchField(!RoughlyEnoughItemsCore.getConfigHelper().sideSearchField()); + try { + RoughlyEnoughItemsCore.getConfigHelper().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + text = getTrueFalseText(RoughlyEnoughItemsCore.getConfigHelper().sideSearchField()); + String t = I18n.translate("text.rei.centre_searchbox"); + int width = fontRenderer.getStringWidth(t); + fontRenderer.drawWithShadow(t, this.x - width - 10, this.y + (this.height - 8) / 2, -1); + super.draw(mouseX, mouseY, partialTicks); + } + }); + widgets.add(new ButtonWidget(window.getScaledWidth() / 2 - 20, 60, 40, 20, "") { + @Override + public void onPressed(int button, double mouseX, double mouseY) { + if (button == 0) + RoughlyEnoughItemsCore.getConfigHelper().setShowCraftableOnlyButton(!RoughlyEnoughItemsCore.getConfigHelper().showCraftableOnlyButton()); + try { + RoughlyEnoughItemsCore.getConfigHelper().saveConfig(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + text = getTrueFalseText(RoughlyEnoughItemsCore.getConfigHelper().showCraftableOnlyButton()); + String t = I18n.translate("text.rei.enable_craftable_only"); + int width = fontRenderer.getStringWidth(t); + fontRenderer.drawWithShadow(t, this.x - width - 10, this.y + (this.height - 8) / 2, -1); + super.draw(mouseX, mouseY, partialTicks); + } + }); + } + + private String getTrueFalseText(boolean showCraftableOnlyButton) { + return String.format("%s%b", showCraftableOnlyButton ? "§a" : "§c", showCraftableOnlyButton); + } + + @Override + public void draw(int int_1, int int_2, float float_1) { + drawBackground(0); + super.draw(int_1, int_2, float_1); + widgets.forEach(widget -> { + GuiLighting.disable(); + widget.draw(int_1, int_2, float_1); + }); + } + + @Override + public boolean isPauseScreen() { + return false; + } + + @Override + public List<? extends GuiEventListener> getEntries() { + return widgets; + } + +} diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java index a87775c7d..f515a6ede 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java @@ -106,7 +106,7 @@ public class ItemListOverlay extends Drawable implements IWidget { List<ItemStack> os = new LinkedList<>(ol), stacks = Lists.newArrayList(), finalStacks = Lists.newArrayList(); List<ItemGroup> itemGroups = new LinkedList<>(Arrays.asList(ItemGroup.GROUPS)); itemGroups.add(null); - REIItemListOrdering ordering = RoughlyEnoughItemsCore.getConfigManager().getItemListOrdering(); + REIItemListOrdering ordering = RoughlyEnoughItemsCore.getConfigHelper().getItemListOrdering(); if (ordering != REIItemListOrdering.REGISTRY) Collections.sort(os, (itemStack, t1) -> { if (ordering.equals(REIItemListOrdering.NAME)) @@ -115,7 +115,7 @@ public class ItemListOverlay extends Drawable implements IWidget { return itemGroups.indexOf(itemStack.getItem().getItemGroup()) - itemGroups.indexOf(t1.getItem().getItemGroup()); return 0; }); - if (!RoughlyEnoughItemsCore.getConfigManager().isAscending()) + if (!RoughlyEnoughItemsCore.getConfigHelper().isAscending()) Collections.reverse(os); Arrays.stream(searchTerm.split("\\|")).forEachOrdered(s -> { List<SearchArgument> arguments = new ArrayList<>(); @@ -135,14 +135,14 @@ public class ItemListOverlay extends Drawable implements IWidget { arguments.add(new SearchArgument(SearchArgument.ArgumentType.TEXT, s, true)); os.stream().filter(itemStack -> filterItem(itemStack, arguments)).forEachOrdered(stacks::add); }); - List<ItemStack> workingItems = RoughlyEnoughItemsCore.getConfigManager().craftableOnly() && inventoryItems.size() > 0 ? new ArrayList<>() : new LinkedList<>(ol); - if (RoughlyEnoughItemsCore.getConfigManager().craftableOnly()) { + List<ItemStack> workingItems = RoughlyEnoughItemsCore.getConfigHelper().craftableOnly() && inventoryItems.size() > 0 ? new ArrayList<>() : new LinkedList<>(ol); + if (RoughlyEnoughItemsCore.getConfigHelper().craftableOnly()) { RecipeHelper.findCraftableByItems(inventoryItems).forEach(workingItems::add); workingItems.addAll(inventoryItems); } final List<ItemStack> finalWorkingItems = workingItems; finalStacks.addAll(stacks.stream().filter(itemStack -> { - if (!RoughlyEnoughItemsCore.getConfigManager().craftableOnly()) + if (!RoughlyEnoughItemsCore.getConfigHelper().craftableOnly()) return true; for(ItemStack workingItem : finalWorkingItems) if (itemStack.isEqualIgnoreTags(workingItem)) diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java index 365ed3cdd..777106f93 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java @@ -74,6 +74,11 @@ public class RecipeViewingWidget extends Gui { } @Override + public boolean isPauseScreen() { + return false; + } + + @Override public void onClosed() { GuiHelper.resetOverlay(); } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java index e735293be..d6b0dbfba 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java @@ -49,13 +49,6 @@ public class TextFieldWidget extends Drawable implements IWidget { this(rectangle.x, rectangle.y, rectangle.width, rectangle.height); } - public void setBounds(Rectangle rectangle) { - this.x = rectangle.x; - this.y = rectangle.y; - this.width = rectangle.width; - this.height = rectangle.height; - } - public TextFieldWidget(int x, int y, int width, int height) { this.text = ""; this.maxLength = 32; @@ -76,6 +69,17 @@ public class TextFieldWidget extends Drawable implements IWidget { this.height = height; } + public Rectangle getBounds() { + return new Rectangle(x, y, width, height); + } + + public void setBounds(Rectangle rectangle) { + this.x = rectangle.x; + this.y = rectangle.y; + this.width = rectangle.width; + this.height = rectangle.height; + } + public void setChangedListener(Consumer<String> biConsumer_1) { this.changedListener = biConsumer_1; } diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinBrewingRecipeRegistry.java b/src/main/java/me/shedaniel/rei/mixin/MixinBrewingRecipeRegistry.java new file mode 100644 index 000000000..5813a42b3 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/mixin/MixinBrewingRecipeRegistry.java @@ -0,0 +1,68 @@ +package me.shedaniel.rei.mixin; + +import com.google.common.collect.Lists; +import me.shedaniel.rei.plugin.BrewingRecipe; +import me.shedaniel.rei.plugin.DefaultBrewingDisplay; +import me.shedaniel.rei.plugin.DefaultPlugin; +import net.minecraft.item.Item; +import net.minecraft.item.ItemProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.item.PotionItem; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionUtil; +import net.minecraft.recipe.BrewingRecipeRegistry; +import net.minecraft.recipe.Ingredient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.List; + +@Mixin(BrewingRecipeRegistry.class) +public class MixinBrewingRecipeRegistry { + + private static final List<BrewingRecipe> ITEM_RECIPES = Lists.newArrayList(); + private static final List<Potion> REGISTERED_POTION_TYPES = Lists.newArrayList(); + private static final List<Ingredient> POTION_TYPES = Lists.newArrayList(); + + @Inject(method = "method_8080", at = @At("RETURN")) + private static void method_8080(Item item_1, CallbackInfo ci) { + if (!(item_1 instanceof PotionItem)) { + } else { + POTION_TYPES.add(Ingredient.ofItems(new ItemProvider[]{item_1})); + } + } + + @Inject(method = "method_8071", at = @At("RETURN")) + private static void method_8071(Item item_1, Item item_2, Item item_3, CallbackInfo ci) { + if (!(item_1 instanceof PotionItem)) { + } else if (!(item_3 instanceof PotionItem)) { + } else { + ITEM_RECIPES.add(new BrewingRecipe(item_1, Ingredient.ofItems(new ItemProvider[]{item_2}), item_3)); + } + } + + @Inject(method = "registerPotionRecipe", at = @At("RETURN")) + private static void registerPotionRecipe(Potion potion_1, Item item_1, Potion potion_2, CallbackInfo ci) { + if (!REGISTERED_POTION_TYPES.contains(potion_1)) + registerPotionType(potion_1); + if (!REGISTERED_POTION_TYPES.contains(potion_2)) + registerPotionType(potion_2); + POTION_TYPES.forEach(ingredient -> { + for(ItemStack stack : ingredient.getStackArray()) { + DefaultPlugin.registerBrewingDisplay(new DefaultBrewingDisplay(PotionUtil.setPotion(stack.copy(), potion_1), Ingredient.ofItems(new ItemProvider[]{item_1}), + PotionUtil.setPotion(stack.copy(), potion_2))); + } + }); + } + + private static void registerPotionType(Potion potion) { + REGISTERED_POTION_TYPES.add(potion); + ITEM_RECIPES.forEach(recipe -> { + DefaultPlugin.registerBrewingDisplay(new DefaultBrewingDisplay(PotionUtil.setPotion(recipe.input.getDefaultStack(), potion), recipe.ingredient, + PotionUtil.setPotion(recipe.output.getDefaultStack(), potion))); + }); + } + +} diff --git a/src/main/java/me/shedaniel/rei/plugin/BrewingRecipe.java b/src/main/java/me/shedaniel/rei/plugin/BrewingRecipe.java new file mode 100644 index 000000000..b4bcdb39a --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/BrewingRecipe.java @@ -0,0 +1,17 @@ +package me.shedaniel.rei.plugin; + +import net.minecraft.item.Item; +import net.minecraft.recipe.Ingredient; + +public class BrewingRecipe { + + public final Item input; + public final Ingredient ingredient; + public final Item output; + + public BrewingRecipe(Item object_1, Ingredient ingredient_1, Item object_2) { + this.input = object_1; + this.ingredient = ingredient_1; + this.output = object_2; + } +}
\ No newline at end of file diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java new file mode 100644 index 000000000..1f28e1ce1 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java @@ -0,0 +1,66 @@ +package me.shedaniel.rei.plugin; + +import com.mojang.blaze3d.platform.GlStateManager; +import me.shedaniel.rei.api.IRecipeCategory; +import me.shedaniel.rei.gui.widget.IWidget; +import me.shedaniel.rei.gui.widget.ItemSlotWidget; +import me.shedaniel.rei.gui.widget.RecipeBaseWidget; +import me.shedaniel.rei.listeners.IMixinContainerGui; +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.Identifier; +import net.minecraft.util.math.MathHelper; + +import java.awt.*; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +public class DefaultBrewingCategory implements IRecipeCategory<DefaultBrewingDisplay> { + + private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png"); + + @Override + public Identifier getIdentifier() { + return DefaultPlugin.BREWING; + } + + @Override + public ItemStack getCategoryIcon() { + return new ItemStack(Blocks.BREWING_STAND); + } + + @Override + public String getCategoryName() { + return I18n.translate("category.rei.brewing"); + } + + @Override + public List<IWidget> setupDisplay(IMixinContainerGui containerGui, DefaultBrewingDisplay recipeDisplay, Rectangle bounds) { + Point startPoint = new Point((int) bounds.getCenterX() - 52, (int) bounds.getCenterY() - 29); + List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) { + @Override + public void draw(int mouseX, int mouseY, float partialTicks) { + super.draw(mouseX, mouseY, partialTicks); + GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiLighting.disable(); + MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE); + drawTexturedRect(startPoint.x, startPoint.y, 0, 108, 103, 59); + int width = MathHelper.ceil((System.currentTimeMillis() / 250 % 18d) / 1f); + drawTexturedRect(startPoint.x + 44, startPoint.y + 28, 103, 163, width, 4); + } + })); + widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 1, Arrays.asList(new ItemStack(Items.BLAZE_POWDER)), false, true, containerGui, true)); + widgets.add(new ItemSlotWidget(startPoint.x + 63, startPoint.y + 1, recipeDisplay.getInput().get(0), false, true, containerGui, true)); + widgets.add(new ItemSlotWidget(startPoint.x + 40, startPoint.y + 1, recipeDisplay.getInput().get(1), false, true, containerGui, true)); + widgets.add(new ItemSlotWidget(startPoint.x + 40, startPoint.y + 35, recipeDisplay.getOutput(0), false, true, containerGui, true)); + widgets.add(new ItemSlotWidget(startPoint.x + 63, startPoint.y + 42, recipeDisplay.getOutput(1), false, true, containerGui, true)); + widgets.add(new ItemSlotWidget(startPoint.x + 86, startPoint.y + 35, recipeDisplay.getOutput(2), false, true, containerGui, true)); + return widgets; + } + +} diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java new file mode 100644 index 000000000..1b0057e11 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/plugin/DefaultBrewingDisplay.java @@ -0,0 +1,54 @@ +package me.shedaniel.rei.plugin; + +import me.shedaniel.rei.api.IRecipeDisplay; +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.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class DefaultBrewingDisplay implements IRecipeDisplay { + + private ItemStack input, output; + private Ingredient reactant; + + public DefaultBrewingDisplay(ItemStack input, Ingredient reactant, ItemStack output) { + this.input = input; + this.reactant = reactant; + this.output = output; + } + |
