aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java210
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java54
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java110
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchWidget.java25
-rw-r--r--src/main/resources/skyblocker.mixins.json6
8 files changed, 253 insertions, 216 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java
deleted file mode 100644
index 0ed976f3..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package me.xmrvizzy.skyblocker.mixin;
-
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemListWidget;
-import me.xmrvizzy.skyblocker.utils.Utils;
-import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.ingame.HandledScreen;
-import net.minecraft.text.Text;
-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;
-
-@Mixin(HandledScreen.class)
-public abstract class HandledScreenMixin extends Screen {
- protected HandledScreenMixin(Text title) {
- super(title);
- }
-
- @Inject(method = "init()V", at = @At("TAIL"))
- private void init(CallbackInfo ci) {
- if (Utils.isSkyblock && SkyblockerConfig.get().general.itemList.enableItemList) {
- super.addDrawableChild(new ItemListWidget((HandledScreen)(Object)this));
- }
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java
new file mode 100644
index 00000000..c6c892a0
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java
@@ -0,0 +1,22 @@
+package me.xmrvizzy.skyblocker.mixin;
+
+import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemListWidget;
+import net.minecraft.client.gui.screen.ingame.InventoryScreen;
+import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+@Mixin(InventoryScreen.class)
+public class InventoryScreenMixin {
+ @Redirect(
+ method = "",
+ at = @At(
+ value = "NEW",
+ target = "net/minecraft/client/gui/screen/recipebook/RecipeBookWidget"
+ )
+ )
+ RecipeBookWidget constructor() {
+ return new ItemListWidget();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java
new file mode 100644
index 00000000..ef8319a0
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/RecipeBookWidgetAccessor.java
@@ -0,0 +1,16 @@
+package me.xmrvizzy.skyblocker.mixin;
+
+import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget;
+import net.minecraft.client.gui.widget.TextFieldWidget;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+@Mixin(RecipeBookWidget.class)
+public interface RecipeBookWidgetAccessor {
+ @Accessor
+ String getSearchText();
+ @Accessor
+ int getLeftOffset();
+ @Accessor
+ TextFieldWidget getSearchField();
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java
index e01d58a5..7560d43d 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java
@@ -1,194 +1,78 @@
package me.xmrvizzy.skyblocker.skyblock.itemlist;
-import com.google.common.collect.Lists;
import com.mojang.blaze3d.systems.RenderSystem;
+import me.xmrvizzy.skyblocker.mixin.RecipeBookWidgetAccessor;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.AbstractParentElement;
import net.minecraft.client.gui.Drawable;
-import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.Selectable;
-import net.minecraft.client.gui.screen.ingame.HandledScreen;
-import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
+import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;
-import net.minecraft.client.render.item.ItemRenderer;
+import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.item.ItemStack;
+import net.minecraft.screen.AbstractRecipeScreenHandler;
import net.minecraft.text.Text;
-
-import java.util.ArrayList;
-import java.util.List;
+import net.minecraft.text.TranslatableText;
+import net.minecraft.util.Formatting;
@Environment(value= EnvType.CLIENT)
-public class ItemListWidget extends AbstractParentElement implements Drawable, Selectable {
- private static final List<Entry> entries = new ArrayList<>();
- private static String searchString = "";
- private static double scroll = 0.0;
-
- private final int gridX;
- private final int gridY;
- private final int rows;
- private final int cols;
-
- private double maxScroll;
- private boolean isHovered;
-
- private final HandledScreen screen;
- private final MinecraftClient client;
- private final List<Element> children = Lists.newArrayList();
- private final List<Selectable> selectables = Lists.newArrayList();
- private final List<Drawable> drawables = Lists.newArrayList();
-
- public ItemListWidget(HandledScreen screen) {
- this.screen = screen;
- this.client = MinecraftClient.getInstance();
-
- this.cols = (screen.width - 200) / 2 / 16;
- this.rows = (screen.height - 40) / 16;
- this.gridX = 8;
- this.gridY = 40;
-
- this.maxScroll = Math.max(0, entries.size() / this.cols - this.rows + 1);
-
- SearchWidget search = new SearchWidget(this.client.textRenderer, 8, 8, this.cols * 16);
- search.setText(searchString);
- search.setChangedListener(this::setSearch);
- this.addDrawableChild(search);
-
- this.setSearch(searchString);
- }
-
- private void setSearch(String search) {
- searchString = search;
- entries.clear();
- search = search.toLowerCase();
- for (Entry entry : ItemRegistry.registry) {
- String name = entry.itemStack.getName().toString().toLowerCase();
- String lore = entry.itemStack.getNbt().toString().toLowerCase();
- if (name.contains(search) || lore.contains(search))
- entries.add(entry);
- }
- this.maxScroll = Math.max(0, entries.size() / this.cols - this.rows + 1);
- scroll = Math.min(scroll, this.maxScroll);
- }
+public class ItemListWidget extends RecipeBookWidget implements Drawable, Selectable {
+ private int parentWidth;
+ private int parentHeight;
+ private int leftOffset;
+ private TextFieldWidget searchField;
+ private SearchResultsWidget results;
- protected <T extends Element & Drawable & Selectable> T addDrawableChild(T drawableElement) {
- this.drawables.add(drawableElement);
- return this.addSelectableChild(drawableElement);
- }
+ public ItemListWidget() { super(); }
- protected <T extends Drawable> T addDrawable(T drawable) {
- this.drawables.add(drawable);
- return drawable;
+ public void updateSearchResult() {
+ this.results.updateSearchResult(((RecipeBookWidgetAccessor)this).getSearchText());
}
- protected <T extends Element & Selectable> T addSelectableChild(T child) {
- this.children.add(child);
- this.selectables.add(child);
- return child;
+ @Override
+ public void initialize(int parentWidth, int parentHeight, MinecraftClient client, boolean narrow, AbstractRecipeScreenHandler<?> craftingScreenHandler) {
+ super.initialize(parentWidth, parentHeight, client, narrow, craftingScreenHandler);
+ this.parentWidth = parentWidth;
+ this.parentHeight = parentHeight;
+ this.leftOffset = ((RecipeBookWidgetAccessor)this).getLeftOffset();
+ this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField();
+ int x = (this.parentWidth - 147) / 2 - this.leftOffset;
+ int y = (this.parentHeight - 166) / 2;
+ this.results = new SearchResultsWidget(this.client, x , y);
+ this.updateSearchResult();
}
@Override
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
- this.isHovered = this.isMouseOver(mouseX, mouseY);
- ItemRenderer itemRenderer = client.getItemRenderer();
- RenderSystem.disableDepthTest();
- // slot hover
- int mouseOverIndex = getMouseOverIndex(mouseX, mouseY);
- if (mouseOverIndex != -1) {
- int x = this.gridX + mouseOverIndex % this.cols * 16;
- int y = this.gridY + (mouseOverIndex / this.cols - (int)scroll) * 16;
- fill(matrices, x, y, x + 16, y + 16, 0x20ffffff);
- }
- // item list
- for (int i = 0; i < rows; ++i)
- for (int j = 0; j < cols; ++j) {
- int index = (i + (int)scroll) * cols + j;
- if (index < entries.size()) {
- int x = gridX + j * 16;
- int y = gridY + i * 16;
- itemRenderer.renderInGui(entries.get(index).itemStack, x, y);
- }
+ if (this.isOpen()) {
+ matrices.push();
+ matrices.translate(0.0D, 0.0D, 100.0D);
+ RenderSystem.setShader(GameRenderer::getPositionTexShader);
+ RenderSystem.setShaderTexture(0, TEXTURE);
+ RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
+ int i = (this.parentWidth - 147) / 2 - this.leftOffset;
+ int j = (this.parentHeight - 166) / 2;
+ this.drawTexture(matrices, i, j, 1, 1, 147, 166);
+ this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField();
+ if (!this.searchField.isFocused() && this.searchField.getText().isEmpty()) {
+ Text hintText = (new TranslatableText("gui.recipebook.search_hint")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY);
+ drawTextWithShadow(matrices, this.client.textRenderer, hintText, i + 25, j + 14, -1);
+ } else {
+ this.searchField.render(matrices, mouseX, mouseY, delta);
}
- // item tooltip
- if (mouseOverIndex != -1) {
- ItemStack stack = entries.get(mouseOverIndex).itemStack;
- List<Text> tooltip = this.screen.getTooltipFromItem(stack);
- this.screen.renderTooltip(matrices, tooltip, mouseX, mouseY);
- }
- RenderSystem.enableDepthTest();
- // render children
- for (Drawable drawable : this.drawables) {
- drawable.render(matrices, mouseX, mouseY, delta);
- }
- }
-
- private boolean isMouseOverList(double mouseX, double mouseY) {
- return gridX <= mouseX && mouseX < gridX + cols * 16 && gridY <= mouseY && mouseY < gridY + rows * 16;
- }
-
- private int getMouseOverIndex(double mouseX, double mouseY) {
- if (isMouseOverList(mouseX, mouseY)) {
- int i = (int)(mouseY - this.gridY) / 16;
- int j = (int)(mouseX - this.gridX) / 16;
- int index = (i + (int)scroll) * this.cols + j;
- if (index < entries.size()) return index;
+ this.updateSearchResult();
+ this.results.render(matrices, mouseX, mouseY, delta);
+ matrices.pop();
}
- return -1;
- }
-
- @Override
- public boolean isMouseOver(double mouseX, double mouseY) {
- for (Element child : this.children) {
- if (child.isMouseOver(mouseX, mouseY)) return true;
- }
- return this.isMouseOverList(mouseX, mouseY);
- }
-
- @Override
- public boolean mouseScrolled(double mouseX, double mouseY, double amount) {
- if (super.mouseScrolled(mouseX, mouseY, amount)) {
- return true;
- } else if (this.isMouseOverList(mouseX, mouseY)) {
- scroll = Math.min(this.maxScroll, Math.max(0.0, scroll - amount));
- return true;
- }
- return false;
- }
-
- @Override
- public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- if (super.keyPressed(keyCode, scanCode, modifiers)) return true;
- return this.getFocused() instanceof TextFieldWidget && ((TextFieldWidget) this.getFocused()).isFocused() && keyCode != 256;
- }
-
- @Override
- public List<? extends Element> children() {
- return this.children;
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
- if (super.mouseClicked(mouseX, mouseY, button)) return true;
- int index = getMouseOverIndex(mouseX, mouseY);
- if (index != -1 && entries.get(index).clickCommand != null) {
- this.client.player.sendChatMessage(entries.get(index).clickCommand);
- return true;
+ if (this.isOpen() && !this.client.player.isSpectator()) {
+ if (this.searchField.mouseClicked(mouseX, mouseY, button)) return true;
+ if (this.results.mouseClicked(mouseX, mouseY, button)) return true;
}
return false;
}
-
- @Override
- public void appendNarrations(NarrationMessageBuilder builder) {
-
- }
-
- @Override
- public SelectionType getType() {
- for (Selectable selectable : selectables)
- if (selectable.getType().isFocused()) return SelectionType.FOCUSED;
- if (this.isHovered) return SelectionType.HOVERED;
- return SelectionType.NONE;
- }
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java
new file mode 100644
index 00000000..65558ac3
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java
@@ -0,0 +1,54 @@
+package me.xmrvizzy.skyblocker.skyblock.itemlist;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
+import net.minecraft.client.gui.widget.ClickableWidget;
+import net.minecraft.client.render.GameRenderer;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+
+import java.util.List;
+
+public class ResultButtonWidget extends ClickableWidget {
+ private static final Identifier BACKGROUND_TEXTURE = new Identifier("textures/gui/recipe_book.png");
+
+ private ItemStack itemStack = null;
+
+ public ResultButtonWidget(int x, int y) {
+ super(x, y, 25, 25, Text.of(""));
+ }
+
+ protected void setItemStack(ItemStack itemStack) {
+ this.visible = true;
+ this.itemStack = itemStack;
+ }
+
+ protected void clearItemStack() {
+ this.visible = false;
+ this.itemStack = null;
+ }
+
+ @Override
+ public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ RenderSystem.setShader(GameRenderer::getPositionTexShader);
+ RenderSystem.setShaderTexture(0, BACKGROUND_TEXTURE);
+ this.drawTexture(matrices, this.x, this.y, 29, 206, this.width, this.height);
+ client.getItemRenderer().renderInGui(this.itemStack, this.x + 4, this.y + 4);
+ }
+
+ @Override
+ public void renderTooltip(MatrixStack matrices, int mouseX, int mouseY) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ List<Text> tooltip = client.currentScreen.getTooltipFromItem(this.itemStack);
+ client.currentScreen.renderTooltip(matrices, tooltip, mouseX, mouseY);
+ }
+
+ @Override
+ public void appendNarrations(NarrationMessageBuilder builder) {
+
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java
new file mode 100644
index 00000000..59d81f33
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java
@@ -0,0 +1,110 @@
+package me.xmrvizzy.skyblocker.skyblock.itemlist;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.Drawable;
+import net.minecraft.client.gui.widget.ToggleButtonWidget;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.util.Identifier;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SearchResultsWidget implements Drawable {
+ private static final Identifier TEXTURE = new Identifier("textures/gui/recipe_book.png");
+
+ private final MinecraftClient client;
+ private final int parentX;
+ private final int parentY;
+ private final int rows = 4;
+ private final int cols = 5;
+
+ private final List<Entry> searchResults = new ArrayList<>();
+ private String searchText = null;
+ private List<ResultButtonWidget> resultButtons = new ArrayList<>();
+ private ToggleButtonWidget nextPageButton;
+ private ToggleButtonWidget prevPageButton;
+ private int currentPage = 0;
+ private int pageCount = 0;
+
+ public SearchResultsWidget(MinecraftClient client, int parentX, int parentY) {
+ this.client = client;
+ this.parentX = parentX;
+ this.parentY = parentY;
+ int gridX = parentX + 11;
+ int gridY = parentY + 31;
+ for (int i = 0; i < this.rows; ++i)
+ for (int j = 0; j < this.cols; ++j) {
+ int x = gridX + j * 25;
+ int y = gridY + i * 25;
+ resultButtons.add(new ResultButtonWidget(x, y));
+ }
+ this.nextPageButton = new ToggleButtonWidget(parentX + 93, parentY + 137, 12, 17, false);
+ this.nextPageButton.setTextureUV(1, 208, 13, 18, TEXTURE);
+ this.prevPageButton = new ToggleButtonWidget(parentX + 38, parentY + 137, 12, 17, true);
+ this.prevPageButton.setTextureUV(1, 208, 13, 18, TEXTURE);
+ }
+
+ protected void updateSearchResult(String searchText) {
+ if (!searchText.equals(this.searchText)) {
+ this.searchText = searchText;
+ this.searchResults.clear();
+ for (Entry entry : ItemRegistry.registry) {
+ String name = entry.itemStack.getName().toString().toLowerCase();
+ String lore = entry.itemStack.getNbt().toString().toLowerCase();
+ if (name.contains(this.searchText) || lore.contains(this.searchText))
+ this.searchResults.add(entry);
+ }
+ this.currentPage = 0;
+ this.pageCount = (this.searchResults.size() - 1) / resultButtons.size() + 1;
+ this.updateButtons();
+ }
+ }
+
+ private void updateButtons() {
+ for (int i = 0; i < resultButtons.size(); ++i) {
+ int index = this.currentPage * resultButtons.size() + i;
+ if (index < this.searchResults.size()) {
+ resultButtons.get(i).setItemStack(this.searchResults.get(index).itemStack);
+ } else {
+ resultButtons.get(i).clearItemStack();
+ }
+ }
+ this.prevPageButton.active = this.currentPage > 0;
+ this.nextPageButton.active = this.currentPage < this.pageCount - 1;
+ }
+
+ public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
+ RenderSystem.disableDepthTest();
+ for (ResultButtonWidget button : resultButtons)
+ button.render(matrices, mouseX, mouseY, delta);
+ if (this.pageCount > 1) {
+ String string = (this.currentPage + 1) + "/" + this.pageCount;
+ int dx = this.client.textRenderer.getWidth(string) / 2;
+ this.client.textRenderer.draw(matrices, string, this.parentX - dx + 73, this.parentY + 141, -1);
+ }
+ if (this.prevPageButton.active) this.prevPageButton.render(matrices, mouseX, mouseY, delta);
+ if (this.nextPageButton.active) this.nextPageButton.render(matrices, mouseX, mouseY, delta);
+ for (ResultButtonWidget button : resultButtons)
+ if (button.isMouseOver(mouseX, mouseY))
+ button.renderTooltip(matrices, mouseX, mouseY);
+ RenderSystem.enableDepthTest();
+ }
+
+ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
+ for (ResultButtonWidget button : resultButtons)
+ if (button.mouseClicked(mouseX, mouseY, mouseButton)) return true;
+ if (this.prevPageButton.mouseClicked(mouseX, mouseY, mouseButton)) {
+ --this.currentPage;
+ this.updateButtons();
+ return true;
+ }
+ if (this.nextPageButton.mouseClicked(mouseX, mouseY, mouseButton)) {
+ ++this.currentPage;
+ this.updateButtons();
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchWidget.java
deleted file mode 100644
index 4acf91b2..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchWidget.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.itemlist;
-
-import net.minecraft.client.font.TextRenderer;
-import net.minecraft.client.gui.widget.TextFieldWidget;
-import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.text.Text;
-
-public class SearchWidget extends TextFieldWidget {
- protected final int x;
- protected final int y;
- protected final TextRenderer textRenderer;
-
- public SearchWidget(TextRenderer textRenderer, int x, int y, int width) {
- super(textRenderer, x + 1, y + 12, width - 2, 16, Text.of("Search"));
- this.x = x;
- this.y = y;
- this.textRenderer = textRenderer;
- }
-
- @Override
- public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) {
- super.renderButton(matrices, mouseX, mouseY, delta);
- this.textRenderer.drawWithShadow(matrices, "Search", this.x, this.y, 0xff9e9e9e);
- }
-}
diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json
index 6efba1f9..3bf7625e 100644
--- a/src/main/resources/skyblocker.mixins.json
+++ b/src/main/resources/skyblocker.mixins.json
@@ -9,11 +9,13 @@
"InGameHudMixin",
"ItemRendererMixin",
"LeverBlockMixin",
- "MinecraftClientMixin"
+ "MinecraftClientMixin",
"AccessorWorldRenderer",
"GenericContainerScreenMixin",
"GenericContainerScreenHandlerMixin",
- "HandledScreenMixin"
+ "HandledScreenMixin",
+ "InventoryScreenMixin",
+ "RecipeBookWidgetAccessor"
],
"injectors": {
"defaultRequire": 1