diff --git a/build.gradle b/build.gradle index fd581694..acaf81a6 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { } } dependencies { - classpath 'net.fabricmc:fabric-loom:0.2.6-SNAPSHOT' + classpath 'net.fabricmc:fabric-loom:0.4-SNAPSHOT' } } diff --git a/build.properties b/build.properties index d6811b79..67415b56 100644 --- a/build.properties +++ b/build.properties @@ -9,12 +9,12 @@ mod_file_name = itemscroller-fabric mod_version = 0.15.0-dev # Required malilib version -malilib_version = 0.10.0-dev.20+beta.1 +malilib_version = 0.10.0-dev.21+arne.1 # Minecraft, Fabric and mappings versions -minecraft_version_out = 1.15.2 -minecraft_version = 1.15.2 -mappings_version = 1.15.2+build.12 +minecraft_version_out = 1.16.1 +minecraft_version = 1.16.1 +mappings_version = 1.16.1+build.18 -fabric_loader_version = 0.7.8+build.184 -mod_menu_version = 1.8.5+build.23 +fabric_loader_version = 0.8.8+build.202 +mod_menu_version = 1.12.2+build.17 diff --git a/src/main/java/fi/dy/masa/itemscroller/config/Configs.java b/src/main/java/fi/dy/masa/itemscroller/config/Configs.java index 3057811b..0f8a7a91 100644 --- a/src/main/java/fi/dy/masa/itemscroller/config/Configs.java +++ b/src/main/java/fi/dy/masa/itemscroller/config/Configs.java @@ -16,9 +16,9 @@ import fi.dy.masa.malilib.config.options.ConfigBoolean; import fi.dy.masa.malilib.util.FileUtils; import fi.dy.masa.malilib.util.JsonUtils; -import net.minecraft.client.gui.screen.ingame.CraftingTableScreen; +import net.minecraft.client.gui.screen.ingame.CraftingScreen; import net.minecraft.client.gui.screen.ingame.InventoryScreen; -import net.minecraft.container.CraftingResultSlot; +import net.minecraft.screen.slot.CraftingResultSlot; public class Configs implements IConfigHandler { @@ -109,7 +109,7 @@ public static void loadFromFile() CraftingHandler.clearDefinitions(); // "net.minecraft.client.gui.inventory.GuiCrafting,net.minecraft.inventory.SlotCrafting,0,1-9", // vanilla Crafting Table - CraftingHandler.addCraftingGridDefinition(CraftingTableScreen.class.getName(), CraftingResultSlot.class.getName(), 0, new SlotRange(1, 9)); + CraftingHandler.addCraftingGridDefinition(CraftingScreen.class.getName(), CraftingResultSlot.class.getName(), 0, new SlotRange(1, 9)); //"net.minecraft.client.gui.inventory.PlayerInventoryScreen,net.minecraft.inventory.SlotCrafting,0,1-4", // vanilla player inventory crafting grid CraftingHandler.addCraftingGridDefinition(InventoryScreen.class.getName(), CraftingResultSlot.class.getName(), 0, new SlotRange(1, 4)); } diff --git a/src/main/java/fi/dy/masa/itemscroller/event/InputHandler.java b/src/main/java/fi/dy/masa/itemscroller/event/InputHandler.java index 67585b03..4e492683 100644 --- a/src/main/java/fi/dy/masa/itemscroller/event/InputHandler.java +++ b/src/main/java/fi/dy/masa/itemscroller/event/InputHandler.java @@ -2,9 +2,9 @@ import org.lwjgl.glfw.GLFW; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; -import net.minecraft.container.Slot; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.screen.slot.Slot; import net.minecraft.util.math.MathHelper; import fi.dy.masa.itemscroller.Reference; import fi.dy.masa.itemscroller.config.Configs; @@ -122,11 +122,11 @@ private boolean handleInput(int keyCode, boolean keyState, double dWheel) final int mouseX = fi.dy.masa.malilib.util.InputUtils.getMouseX(); final int mouseY = fi.dy.masa.malilib.util.InputUtils.getMouseY(); - if (GuiUtils.getCurrentScreen() instanceof ContainerScreen && + if (GuiUtils.getCurrentScreen() instanceof HandledScreen && (GuiUtils.getCurrentScreen() instanceof CreativeInventoryScreen) == false && Configs.GUI_BLACKLIST.contains(GuiUtils.getCurrentScreen().getClass().getName()) == false) { - ContainerScreen gui = (ContainerScreen) GuiUtils.getCurrentScreen(); + HandledScreen gui = (HandledScreen) GuiUtils.getCurrentScreen(); RecipeStorage recipes = RecipeStorage.getInstance(); if (dWheel != 0) @@ -204,14 +204,14 @@ public void onMouseMove(int mouseX, int mouseY) if (this.callbacks.functionalityEnabled() && mc.player != null && - GuiUtils.getCurrentScreen() instanceof ContainerScreen && + GuiUtils.getCurrentScreen() instanceof HandledScreen && Configs.GUI_BLACKLIST.contains(GuiUtils.getCurrentScreen().getClass().getName()) == false) { - this.handleDragging((ContainerScreen) GuiUtils.getCurrentScreen(), mc, mouseX, mouseY, false); + this.handleDragging((HandledScreen) GuiUtils.getCurrentScreen(), mc, mouseX, mouseY, false); } } - private boolean handleDragging(ContainerScreen gui, MinecraftClient mc, int mouseX, int mouseY, boolean isClick) + private boolean handleDragging(HandledScreen gui, MinecraftClient mc, int mouseX, int mouseY, boolean isClick) { MoveAction action = InventoryUtils.getActiveMoveAction(); diff --git a/src/main/java/fi/dy/masa/itemscroller/event/KeybindCallbacks.java b/src/main/java/fi/dy/masa/itemscroller/event/KeybindCallbacks.java index fc855560..33b479c5 100644 --- a/src/main/java/fi/dy/masa/itemscroller/event/KeybindCallbacks.java +++ b/src/main/java/fi/dy/masa/itemscroller/event/KeybindCallbacks.java @@ -2,11 +2,11 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.InventoryScreen; -import net.minecraft.container.Slot; import net.minecraft.recipe.CraftingRecipe; +import net.minecraft.screen.slot.Slot; import net.minecraft.sound.SoundEvents; import fi.dy.masa.itemscroller.ItemScroller; import fi.dy.masa.itemscroller.config.Configs; @@ -81,12 +81,12 @@ else if (key == Hotkeys.KEY_OPEN_CONFIG_GUI.getKeybind()) return true; } - if (this.disabled || mc == null || mc.player == null || (GuiUtils.getCurrentScreen() instanceof ContainerScreen) == false) + if (this.disabled || mc == null || mc.player == null || (GuiUtils.getCurrentScreen() instanceof HandledScreen) == false) { return false; } - ContainerScreen gui = (ContainerScreen) GuiUtils.getCurrentScreen(); + HandledScreen gui = (HandledScreen) GuiUtils.getCurrentScreen(); Slot slot = AccessorUtils.getSlotUnderMouse(gui); RecipeStorage recipes = RecipeStorage.getInstance(); MoveAction moveAction = InputUtils.getDragMoveAction(key); @@ -171,13 +171,13 @@ public void onClientTick(MinecraftClient mc) if (this.disabled == false && mc != null && mc.player != null && - GuiUtils.getCurrentScreen() instanceof ContainerScreen && + GuiUtils.getCurrentScreen() instanceof HandledScreen && (GuiUtils.getCurrentScreen() instanceof CreativeInventoryScreen) == false && Configs.GUI_BLACKLIST.contains(GuiUtils.getCurrentScreen().getClass().getName()) == false && Hotkeys.KEY_MASS_CRAFT.getKeybind().isKeybindHeld()) { Screen guiScreen = GuiUtils.getCurrentScreen(); - ContainerScreen gui = (ContainerScreen) guiScreen; + HandledScreen gui = (HandledScreen) guiScreen; Slot outputSlot = CraftingHandler.getFirstCraftingOutputSlotForGui(gui); if (outputSlot != null) @@ -189,7 +189,7 @@ public void onClientTick(MinecraftClient mc) CraftingRecipe bookRecipe = InventoryUtils.getBookRecipeFromPattern(recipe); if (bookRecipe != null && !bookRecipe.isIgnoredInRecipeBook()) { // Use recipe book if possible - mc.interactionManager.clickRecipe(mc.player.container.syncId, bookRecipe, true); + mc.interactionManager.clickRecipe(gui.getScreenHandler().syncId, bookRecipe, true); } else { InventoryUtils.tryMoveItemsToFirstCraftingGrid(recipe, gui, true); } @@ -210,7 +210,7 @@ public void onClientTick(MinecraftClient mc) InventoryUtils.throwAllCraftingResultsToGround(recipe, gui); bookRecipe = InventoryUtils.getBookRecipeFromPattern(recipe); if (bookRecipe != null && !bookRecipe.isIgnoredInRecipeBook()) { // Use recipe book if possible - mc.interactionManager.clickRecipe(mc.player.container.syncId, bookRecipe, true); + mc.interactionManager.clickRecipe(gui.getScreenHandler().syncId, bookRecipe, true); } else { InventoryUtils.tryMoveItemsToFirstCraftingGrid(recipe, gui, true); } diff --git a/src/main/java/fi/dy/masa/itemscroller/event/RenderEventHandler.java b/src/main/java/fi/dy/masa/itemscroller/event/RenderEventHandler.java index 8d7d0507..832efdd4 100644 --- a/src/main/java/fi/dy/masa/itemscroller/event/RenderEventHandler.java +++ b/src/main/java/fi/dy/masa/itemscroller/event/RenderEventHandler.java @@ -6,9 +6,10 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.util.GlAllocationUtils; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.util.math.Vec3d; import fi.dy.masa.itemscroller.config.Configs; @@ -28,6 +29,7 @@ public class RenderEventHandler private static final Vec3d LIGHT0_POS = (new Vec3d( 0.2D, 1.0D, -0.7D)).normalize(); private static final Vec3d LIGHT1_POS = (new Vec3d(-0.2D, 1.0D, 0.7D)).normalize(); private static final FloatBuffer FLOAT_BUFFER = GlAllocationUtils.allocateFloatBuffer(4); + private static final MatrixStack FRESH_MATRIX_STACK = new MatrixStack(); private final MinecraftClient mc = MinecraftClient.getInstance(); private int recipeListX; @@ -45,11 +47,11 @@ public static RenderEventHandler instance() return INSTANCE; } - public void onDrawBackgroundPost() + public void onDrawBackgroundPost(MatrixStack matrixStack) { - if (GuiUtils.getCurrentScreen() instanceof ContainerScreen && InputUtils.isRecipeViewOpen()) + if (GuiUtils.getCurrentScreen() instanceof HandledScreen && InputUtils.isRecipeViewOpen()) { - ContainerScreen gui = (ContainerScreen) GuiUtils.getCurrentScreen(); + HandledScreen gui = (HandledScreen) GuiUtils.getCurrentScreen(); RecipeStorage recipes = RecipeStorage.getInstance(); final int first = recipes.getFirstVisibleRecipeId(); final int countPerPage = recipes.getRecipeCountPerPage(); @@ -62,7 +64,7 @@ public void onDrawBackgroundPost() RenderSystem.scaled(this.scale, this.scale, 1); String str = StringUtils.translate("itemscroller.gui.label.recipe_page", (first / countPerPage) + 1, recipes.getTotalRecipeCount() / countPerPage); - this.mc.textRenderer.draw(str, 16, -12, 0xC0C0C0C0); + this.mc.textRenderer.draw(matrixStack, str, 16, -12, 0xC0C0C0C0); for (int i = 0, recipeId = first; recipeId <= lastOnPage; ++i, ++recipeId) { @@ -71,7 +73,7 @@ public void onDrawBackgroundPost() int row = i % this.recipesPerColumn; int column = i / this.recipesPerColumn; - this.renderStoredRecipeStack(stack, recipeId, row, column, gui, selected); + this.renderStoredRecipeStack(stack, recipeId, row, column, gui, selected, matrixStack); } if (Configs.Generic.CRAFTING_RENDER_RECIPE_ITEMS.getBooleanValue()) @@ -91,9 +93,9 @@ public void onDrawBackgroundPost() public void onDrawScreenPost() { - if (GuiUtils.getCurrentScreen() instanceof ContainerScreen && InputUtils.isRecipeViewOpen()) + if (GuiUtils.getCurrentScreen() instanceof HandledScreen && InputUtils.isRecipeViewOpen()) { - ContainerScreen gui = (ContainerScreen) this.mc.currentScreen; + HandledScreen gui = (HandledScreen) this.mc.currentScreen; RecipeStorage recipes = RecipeStorage.getInstance(); final int mouseX = fi.dy.masa.malilib.util.InputUtils.getMouseX(); @@ -107,7 +109,7 @@ public void onDrawScreenPost() if (recipeId >= 0) { RecipePattern recipe = recipes.getRecipe(recipeId); - this.renderHoverTooltip(mouseX, mouseY, recipe, gui); + this.renderHoverTooltip(mouseX, mouseY, recipe, gui, FRESH_MATRIX_STACK); } else if (Configs.Generic.CRAFTING_RENDER_RECIPE_ITEMS.getBooleanValue()) { @@ -116,7 +118,7 @@ else if (Configs.Generic.CRAFTING_RENDER_RECIPE_ITEMS.getBooleanValue()) if (InventoryUtils.isStackEmpty(stack) == false) { - InventoryOverlay.renderStackToolTip(mouseX, mouseY, stack, this.mc); + InventoryOverlay.renderStackToolTip(mouseX, mouseY, stack, this.mc, FRESH_MATRIX_STACK); } } @@ -124,7 +126,7 @@ else if (Configs.Generic.CRAFTING_RENDER_RECIPE_ITEMS.getBooleanValue()) } } - private void calculateRecipePositions(ContainerScreen gui) + private void calculateRecipePositions(HandledScreen gui) { RecipeStorage recipes = RecipeStorage.getInstance(); final int gapHorizontal = 2; @@ -155,17 +157,17 @@ private void calculateRecipePositions(ContainerScreen gui) this.columnWidth = stackBaseHeight + this.numberTextWidth + this.gapColumn; } - private void renderHoverTooltip(int mouseX, int mouseY, RecipePattern recipe, ContainerScreen gui) + private void renderHoverTooltip(int mouseX, int mouseY, RecipePattern recipe, HandledScreen gui, MatrixStack matrixStack) { ItemStack stack = recipe.getResult(); if (InventoryUtils.isStackEmpty(stack) == false) { - InventoryOverlay.renderStackToolTip(mouseX, mouseY, stack, this.mc); + InventoryOverlay.renderStackToolTip(mouseX, mouseY, stack, this.mc, matrixStack); } } - public int getHoveredRecipeId(int mouseX, int mouseY, RecipeStorage recipes, ContainerScreen gui) + public int getHoveredRecipeId(int mouseX, int mouseY, RecipeStorage recipes, HandledScreen gui) { if (InputUtils.isRecipeViewOpen()) { @@ -194,7 +196,8 @@ public int getHoveredRecipeId(int mouseX, int mouseY, RecipeStorage recipes, Con return -1; } - private void renderStoredRecipeStack(ItemStack stack, int recipeId, int row, int column, ContainerScreen gui, boolean selected) + private void renderStoredRecipeStack(ItemStack stack, int recipeId, int row, int column, HandledScreen gui, + boolean selected, MatrixStack matrixStack) { final TextRenderer font = this.mc.textRenderer; final String indexStr = String.valueOf(recipeId + 1); @@ -204,19 +207,19 @@ private void renderStoredRecipeStack(ItemStack stack, int recipeId, int row, int this.renderStackAt(stack, x, y, selected); double scale = 0.75; - x = x - (int) (font.getStringWidth(indexStr) * scale) - 2; + x = x - (int) (font.getWidth(indexStr) * scale) - 2; y = row * this.entryHeight + this.entryHeight / 2 - font.fontHeight / 2; RenderSystem.pushMatrix(); RenderSystem.translatef(x, y, 0); RenderSystem.scaled(scale, scale, 0); - font.draw(indexStr, 0, 0, 0xC0C0C0); + font.draw(matrixStack, indexStr, 0, 0, 0xC0C0C0); RenderSystem.popMatrix(); } - private void renderRecipeItems(RecipePattern recipe, int recipeCountPerPage, ContainerScreen gui) + private void renderRecipeItems(RecipePattern recipe, int recipeCountPerPage, HandledScreen gui) { ItemStack[] items = recipe.getRecipeItems(); final int recipeDimensions = (int) Math.ceil(Math.sqrt(recipe.getRecipeLength())); @@ -235,7 +238,7 @@ private void renderRecipeItems(RecipePattern recipe, int recipeCountPerPage, Con } } - private ItemStack getHoveredRecipeIngredient(int mouseX, int mouseY, RecipePattern recipe, int recipeCountPerPage, ContainerScreen gui) + private ItemStack getHoveredRecipeIngredient(int mouseX, int mouseY, RecipePattern recipe, int recipeCountPerPage, HandledScreen gui) { final int recipeDimensions = (int) Math.ceil(Math.sqrt(recipe.getRecipeLength())); int scaledStackDimensions = (int) (16 * this.scale); @@ -296,7 +299,7 @@ private void renderStackAt(ItemStack stack, int x, int y, boolean border) stack = stack.copy(); InventoryUtils.setStackSize(stack, 1); this.mc.getItemRenderer().zOffset += 100; - this.mc.getItemRenderer().renderGuiItem(this.mc.player, stack, x, y); + this.mc.getItemRenderer().renderInGui(stack, x, y); this.mc.getItemRenderer().zOffset -= 100; } diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinContainerScreen.java b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinContainerScreen.java deleted file mode 100644 index 3f66aa67..00000000 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinContainerScreen.java +++ /dev/null @@ -1,30 +0,0 @@ -package fi.dy.masa.itemscroller.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(net.minecraft.client.gui.screen.ingame.ContainerScreen.class) -public interface IMixinContainerScreen -{ - @Invoker("getSlotAt") - net.minecraft.container.Slot getSlotAtPositionInvoker(double x, double y); - - @Invoker("onMouseClick") - void handleMouseClickInvoker(net.minecraft.container.Slot slotIn, int slotId, int mouseButton, net.minecraft.container.SlotActionType type); - - @Accessor("focusedSlot") - net.minecraft.container.Slot getHoveredSlot(); - - @Accessor("x") - int getGuiLeft(); - - @Accessor("y") - int getGuiTop(); - - @Accessor("containerWidth") - int getGuiSizeX(); - - @Accessor("containerHeight") - int getGuiSizeY(); -} diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinMerchantScreen.java b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinMerchantScreen.java index b722a8c4..cc11c9e6 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinMerchantScreen.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinMerchantScreen.java @@ -2,9 +2,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -import net.minecraft.client.gui.screen.ingame.MerchantScreen; -@Mixin(MerchantScreen.class) +@Mixin(net.minecraft.client.gui.screen.ingame.MerchantScreen.class) public interface IMixinMerchantScreen { @Accessor("selectedIndex") diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinScreenWithHandler.java b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinScreenWithHandler.java new file mode 100644 index 00000000..e963a407 --- /dev/null +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinScreenWithHandler.java @@ -0,0 +1,30 @@ +package fi.dy.masa.itemscroller.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(net.minecraft.client.gui.screen.ingame.HandledScreen.class) +public interface IMixinScreenWithHandler +{ + @Invoker("getSlotAt") + net.minecraft.screen.slot.Slot getSlotAtPositionInvoker(double x, double y); + + @Invoker("onMouseClick") + void handleMouseClickInvoker(net.minecraft.screen.slot.Slot slotIn, int slotId, int mouseButton, net.minecraft.screen.slot.SlotActionType type); + + @Accessor("focusedSlot") + net.minecraft.screen.slot.Slot getHoveredSlot(); + + @Accessor("x") + int getGuiLeft(); + + @Accessor("y") + int getGuiTop(); + + @Accessor("backgroundWidth") + int getGuiSizeX(); + + @Accessor("backgroundHeight") + int getGuiSizeY(); +} diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinSlot.java b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinSlot.java index dbb8da61..d425e6be 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinSlot.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinSlot.java @@ -2,11 +2,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -import net.minecraft.container.Slot; -@Mixin(Slot.class) +@Mixin(net.minecraft.screen.slot.Slot.class) public interface IMixinSlot { - @Accessor("invSlot") + @Accessor("index") int getSlotIndex(); } diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinAbstractInventoryScreen.java b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinAbstractInventoryScreen.java index 94859731..2192ee64 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinAbstractInventoryScreen.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinAbstractInventoryScreen.java @@ -5,9 +5,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import fi.dy.masa.itemscroller.util.InputUtils; -import net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen; -@Mixin(AbstractInventoryScreen.class) +@Mixin(net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen.class) public abstract class MixinAbstractInventoryScreen { @Inject(method = "drawStatusEffects", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java new file mode 100644 index 00000000..fef3cb17 --- /dev/null +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java @@ -0,0 +1,35 @@ +package fi.dy.masa.itemscroller.mixin; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import fi.dy.masa.itemscroller.util.InventoryUtils; + +@Mixin(net.minecraft.screen.CraftingScreenHandler.class) +public abstract class MixinCraftingScreenHandler +{ + @Shadow @Final private net.minecraft.inventory.CraftingInventory input; + @Shadow @Final private net.minecraft.inventory.CraftingResultInventory result; + @Shadow @Final private net.minecraft.entity.player.PlayerEntity player; + + @Inject(method = "onContentChanged", at = @At("RETURN")) + private void onSlotChangedCraftingGrid(net.minecraft.inventory.Inventory inventory, CallbackInfo ci) + { + InventoryUtils.onSlotChangedCraftingGrid(this.player, this.input, this.result); + } + + @Inject(method = "updateResult", at = @At("RETURN")) + private static void onUpdateResult( + int windowId, + net.minecraft.world.World world, + net.minecraft.entity.player.PlayerEntity player, + net.minecraft.inventory.CraftingInventory craftingInv, + net.minecraft.inventory.CraftingResultInventory resultInv, + CallbackInfo ci) + { + InventoryUtils.onSlotChangedCraftingGrid(player, craftingInv, resultInv); + } +} diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingTableContainer.java b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingTableContainer.java deleted file mode 100644 index fbd59555..00000000 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingTableContainer.java +++ /dev/null @@ -1,36 +0,0 @@ -package fi.dy.masa.itemscroller.mixin; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import fi.dy.masa.itemscroller.util.InventoryUtils; -import net.minecraft.container.CraftingTableContainer; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.inventory.CraftingResultInventory; -import net.minecraft.inventory.Inventory; -import net.minecraft.world.World; - -@Mixin(CraftingTableContainer.class) -public abstract class MixinCraftingTableContainer -{ - @Shadow @Final private CraftingInventory craftingInv; - @Shadow @Final private CraftingResultInventory resultInv; - @Shadow @Final private PlayerEntity player; - - @Inject(method = "onContentChanged", at = @At("RETURN")) - private void onSlotChangedCraftingGrid(Inventory inventory, CallbackInfo ci) - { - InventoryUtils.onSlotChangedCraftingGrid(this.player, this.craftingInv, this.resultInv); - } - - @Inject(method = "updateResult", at = @At("RETURN")) - private static void onUpdateResult(int windowId, World world, PlayerEntity player, - CraftingInventory craftingInv, CraftingResultInventory resultInv, CallbackInfo ci) - { - InventoryUtils.onSlotChangedCraftingGrid(player, craftingInv, resultInv); - } -} diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinGameRenderer.java b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinGameRenderer.java index 39b26c32..e8a0c823 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinGameRenderer.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinGameRenderer.java @@ -6,14 +6,13 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import fi.dy.masa.itemscroller.event.RenderEventHandler; -import net.minecraft.client.render.GameRenderer; -@Mixin(GameRenderer.class) +@Mixin(net.minecraft.client.render.GameRenderer.class) public abstract class MixinGameRenderer { @Inject(method = "render(FJZ)V", at = @At(value = "INVOKE", shift = Shift.AFTER, - target = "Lnet/minecraft/client/gui/screen/Screen;render(IIF)V")) + target = "Lnet/minecraft/client/gui/screen/Screen;render(Lnet/minecraft/client/util/math/MatrixStack;IIF)V")) private void onDrawScreenPost(float partialTicks, long nanoTime, boolean renderWorldIn, CallbackInfo ci) { RenderEventHandler.instance().onDrawScreenPost(); diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinScreen.java b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinScreen.java index fd71dc97..344cb7a6 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinScreen.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinScreen.java @@ -11,9 +11,9 @@ @Mixin(Screen.class) public abstract class MixinScreen extends AbstractParentElement { - @Inject(method = "renderBackground()V", at = @At("RETURN")) - protected void onDrawDefaultBackgroundPost(CallbackInfo ci) + @Inject(method = "renderBackground(Lnet/minecraft/client/util/math/MatrixStack;)V", at = @At("RETURN")) + protected void onDrawDefaultBackgroundPost(net.minecraft.client.util.math.MatrixStack matrixStack, CallbackInfo ci) { - RenderEventHandler.instance().onDrawBackgroundPost(); + RenderEventHandler.instance().onDrawBackgroundPost(matrixStack); } } diff --git a/src/main/java/fi/dy/masa/itemscroller/recipes/CraftingHandler.java b/src/main/java/fi/dy/masa/itemscroller/recipes/CraftingHandler.java index 988fd774..bb077b21 100644 --- a/src/main/java/fi/dy/masa/itemscroller/recipes/CraftingHandler.java +++ b/src/main/java/fi/dy/masa/itemscroller/recipes/CraftingHandler.java @@ -6,15 +6,15 @@ import java.util.Set; import javax.annotation.Nullable; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; -import net.minecraft.container.Container; -import net.minecraft.container.Slot; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; import fi.dy.masa.itemscroller.ItemScroller; public class CraftingHandler { private static final Map CRAFTING_GRID_SLOTS = new HashMap(); - private static final Set>> CRAFTING_GUIS = new HashSet<>(); + private static final Set>> CRAFTING_GUIS = new HashSet<>(); public static void clearDefinitions() { @@ -27,7 +27,7 @@ public static boolean addCraftingGridDefinition(String guiClassName, String slot { try { - Class> guiClass = (Class>) Class.forName(guiClassName); + Class> guiClass = (Class>) Class.forName(guiClassName); Class slotClass = (Class) Class.forName(slotClassName); CRAFTING_GRID_SLOTS.put(new CraftingOutputSlot(guiClass, slotClass, outputSlot), range); @@ -46,7 +46,7 @@ public static boolean addCraftingGridDefinition(String guiClassName, String slot public static boolean isCraftingGui(Screen gui) { - return (gui instanceof ContainerScreen) && CRAFTING_GUIS.contains(((ContainerScreen) gui).getClass()); + return (gui instanceof HandledScreen) && CRAFTING_GUIS.contains(((HandledScreen) gui).getClass()); } /** @@ -56,17 +56,17 @@ public static boolean isCraftingGui(Screen gui) * @return the SlotRange of the crafting grid, or null, if the given slot is not a crafting output slot */ @Nullable - public static SlotRange getCraftingGridSlots(ContainerScreen gui, Slot slot) + public static SlotRange getCraftingGridSlots(HandledScreen gui, Slot slot) { return CRAFTING_GRID_SLOTS.get(CraftingOutputSlot.from(gui, slot)); } @Nullable - public static Slot getFirstCraftingOutputSlotForGui(ContainerScreen gui) + public static Slot getFirstCraftingOutputSlotForGui(HandledScreen gui) { if (CRAFTING_GUIS.contains(gui.getClass())) { - for (Slot slot : gui.getContainer().slots) + for (Slot slot : gui.getScreenHandler().slots) { if (getCraftingGridSlots(gui, slot) != null) { @@ -80,11 +80,11 @@ public static Slot getFirstCraftingOutputSlotForGui(ContainerScreen> guiClass; + private final Class> guiClass; private final Class slotClass; private final int outputSlot; - private CraftingOutputSlot (Class> guiClass, Class slotClass, int outputSlot) + private CraftingOutputSlot (Class> guiClass, Class slotClass, int outputSlot) { this.guiClass = guiClass; this.slotClass = slotClass; @@ -92,12 +92,12 @@ private CraftingOutputSlot (Class> guiClass, Class< } @SuppressWarnings("unchecked") - public static CraftingOutputSlot from(ContainerScreen gui, Slot slot) + public static CraftingOutputSlot from(HandledScreen gui, Slot slot) { - return new CraftingOutputSlot((Class>) gui.getClass(), slot.getClass(), slot.id); + return new CraftingOutputSlot((Class>) gui.getClass(), slot.getClass(), slot.id); } - public Class> getGuiClass() + public Class> getGuiClass() { return this.guiClass; } @@ -112,7 +112,7 @@ public int getSlotNumber() return this.outputSlot; } - public boolean matches(ContainerScreen gui, Slot slot, int outputSlot) + public boolean matches(HandledScreen gui, Slot slot, int outputSlot) { return outputSlot == this.outputSlot && gui.getClass() == this.guiClass && slot.getClass() == this.slotClass; } diff --git a/src/main/java/fi/dy/masa/itemscroller/recipes/RecipePattern.java b/src/main/java/fi/dy/masa/itemscroller/recipes/RecipePattern.java index 431b17eb..a19112bf 100644 --- a/src/main/java/fi/dy/masa/itemscroller/recipes/RecipePattern.java +++ b/src/main/java/fi/dy/masa/itemscroller/recipes/RecipePattern.java @@ -2,14 +2,14 @@ import java.util.HashSet; import javax.annotation.Nonnull; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; -import net.minecraft.container.Container; -import net.minecraft.container.Slot; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.recipe.CraftingRecipe; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; import fi.dy.masa.itemscroller.recipes.CraftingHandler.SlotRange; import fi.dy.masa.itemscroller.util.Constants; import fi.dy.masa.itemscroller.util.InventoryUtils; @@ -60,7 +60,7 @@ public void initializeRecipe() { } } - public void storeCraftingRecipe(Slot slot, ContainerScreen gui, boolean clearIfEmpty) + public void storeCraftingRecipe(Slot slot, HandledScreen gui, boolean clearIfEmpty) { SlotRange range = CraftingHandler.getCraftingGridSlots(gui, slot); @@ -69,13 +69,13 @@ public void storeCraftingRecipe(Slot slot, ContainerScreen if (slot.hasStack()) { int gridSize = range.getSlotCount(); - int numSlots = gui.getContainer().slots.size(); + int numSlots = gui.getScreenHandler().slots.size(); this.ensureRecipeSizeAndClearRecipe(gridSize); for (int i = 0, s = range.getFirst(); i < gridSize && s < numSlots; i++, s++) { - Slot slotTmp = gui.getContainer().getSlot(s); + Slot slotTmp = gui.getScreenHandler().getSlot(s); this.recipe[i] = slotTmp.hasStack() ? slotTmp.getStack().copy() : InventoryUtils.EMPTY_STACK; } diff --git a/src/main/java/fi/dy/masa/itemscroller/recipes/RecipeStorage.java b/src/main/java/fi/dy/masa/itemscroller/recipes/RecipeStorage.java index cede3fde..9e07df67 100644 --- a/src/main/java/fi/dy/masa/itemscroller/recipes/RecipeStorage.java +++ b/src/main/java/fi/dy/masa/itemscroller/recipes/RecipeStorage.java @@ -4,11 +4,11 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import javax.annotation.Nonnull; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; -import net.minecraft.container.Slot; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtIo; +import net.minecraft.screen.slot.Slot; import fi.dy.masa.itemscroller.ItemScroller; import fi.dy.masa.itemscroller.Reference; import fi.dy.masa.itemscroller.config.Configs; @@ -103,12 +103,12 @@ public RecipePattern getSelectedRecipe() return this.getRecipe(this.getSelection()); } - public void storeCraftingRecipeToCurrentSelection(Slot slot, ContainerScreen gui, boolean clearIfEmpty) + public void storeCraftingRecipeToCurrentSelection(Slot slot, HandledScreen gui, boolean clearIfEmpty) { this.storeCraftingRecipe(this.getSelection(), slot, gui, clearIfEmpty); } - public void storeCraftingRecipe(int index, Slot slot, ContainerScreen gui, boolean clearIfEmpty) + public void storeCraftingRecipe(int index, Slot slot, HandledScreen gui, boolean clearIfEmpty) { this.getRecipe(index).storeCraftingRecipe(slot, gui, clearIfEmpty); this.dirty = true; diff --git a/src/main/java/fi/dy/masa/itemscroller/util/AccessorUtils.java b/src/main/java/fi/dy/masa/itemscroller/util/AccessorUtils.java index 7458643e..79cb24c7 100644 --- a/src/main/java/fi/dy/masa/itemscroller/util/AccessorUtils.java +++ b/src/main/java/fi/dy/masa/itemscroller/util/AccessorUtils.java @@ -1,48 +1,48 @@ package fi.dy.masa.itemscroller.util; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.MerchantScreen; -import net.minecraft.container.Slot; -import net.minecraft.container.SlotActionType; -import fi.dy.masa.itemscroller.mixin.IMixinContainerScreen; +import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; +import fi.dy.masa.itemscroller.mixin.IMixinScreenWithHandler; import fi.dy.masa.itemscroller.mixin.IMixinMerchantScreen; import fi.dy.masa.itemscroller.mixin.IMixinSlot; public class AccessorUtils { - public static Slot getSlotUnderMouse(ContainerScreen gui) + public static Slot getSlotUnderMouse(HandledScreen gui) { - return ((IMixinContainerScreen) gui).getHoveredSlot(); + return ((IMixinScreenWithHandler) gui).getHoveredSlot(); } - public static Slot getSlotAtPosition(ContainerScreen gui, int x, int y) + public static Slot getSlotAtPosition(HandledScreen gui, int x, int y) { - return ((IMixinContainerScreen) gui).getSlotAtPositionInvoker(x, y); + return ((IMixinScreenWithHandler) gui).getSlotAtPositionInvoker(x, y); } - public static void handleMouseClick(ContainerScreen gui, Slot slotIn, int slotId, int mouseButton, SlotActionType type) + public static void handleMouseClick(HandledScreen gui, Slot slotIn, int slotId, int mouseButton, SlotActionType type) { - ((IMixinContainerScreen) gui).handleMouseClickInvoker(slotIn, slotId, mouseButton, type); + ((IMixinScreenWithHandler) gui).handleMouseClickInvoker(slotIn, slotId, mouseButton, type); } - public static int getGuiLeft(ContainerScreen gui) + public static int getGuiLeft(HandledScreen gui) { - return ((IMixinContainerScreen) gui).getGuiLeft(); + return ((IMixinScreenWithHandler) gui).getGuiLeft(); } - public static int getGuiTop(ContainerScreen gui) + public static int getGuiTop(HandledScreen gui) { - return ((IMixinContainerScreen) gui).getGuiTop(); + return ((IMixinScreenWithHandler) gui).getGuiTop(); } - public static int getGuiXSize(ContainerScreen gui) + public static int getGuiXSize(HandledScreen gui) { - return ((IMixinContainerScreen) gui).getGuiSizeX(); + return ((IMixinScreenWithHandler) gui).getGuiSizeX(); } - public static int getGuiYSize(ContainerScreen gui) + public static int getGuiYSize(HandledScreen gui) { - return ((IMixinContainerScreen) gui).getGuiSizeY(); + return ((IMixinScreenWithHandler) gui).getGuiSizeY(); } public static int getSelectedMerchantRecipe(MerchantScreen gui) diff --git a/src/main/java/fi/dy/masa/itemscroller/util/InputUtils.java b/src/main/java/fi/dy/masa/itemscroller/util/InputUtils.java index 55999be5..a98f09ef 100644 --- a/src/main/java/fi/dy/masa/itemscroller/util/InputUtils.java +++ b/src/main/java/fi/dy/masa/itemscroller/util/InputUtils.java @@ -1,7 +1,7 @@ package fi.dy.masa.itemscroller.util; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import fi.dy.masa.itemscroller.config.Hotkeys; import fi.dy.masa.itemscroller.event.KeybindCallbacks; import fi.dy.masa.itemscroller.recipes.CraftingHandler; @@ -19,7 +19,7 @@ public static boolean isRecipeViewOpen() CraftingHandler.isCraftingGui(GuiUtils.getCurrentScreen()); } - public static boolean canShiftDropItems(ContainerScreen gui, MinecraftClient mc, int mouseX, int mouseY) + public static boolean canShiftDropItems(HandledScreen gui, MinecraftClient mc, int mouseX, int mouseY) { if (InventoryUtils.isStackEmpty(mc.player.inventory.getCursorStack()) == false) { diff --git a/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java b/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java index 454ad276..dc385423 100644 --- a/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java +++ b/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java @@ -11,22 +11,14 @@ import java.util.Set; import javax.annotation.Nullable; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.ContainerScreen; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; +import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.gui.screen.ingame.MerchantScreen; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.world.ClientWorld; -import net.minecraft.container.Container; -import net.minecraft.container.CraftingContainer; -import net.minecraft.container.CraftingTableContainer; -import net.minecraft.container.Generic3x3Container; -import net.minecraft.container.Slot; -import net.minecraft.container.SlotActionType; -import net.minecraft.container.TradeOutputSlot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.BasicInventory; import net.minecraft.inventory.CraftingInventory; import net.minecraft.inventory.CraftingResultInventory; import net.minecraft.inventory.Inventory; @@ -36,6 +28,11 @@ import net.minecraft.recipe.CraftingRecipe; import net.minecraft.recipe.RecipeManager; import net.minecraft.recipe.RecipeType; +import net.minecraft.screen.Generic3x3ContainerScreenHandler; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.screen.slot.TradeOutputSlot; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.village.TradeOffer; @@ -85,7 +82,7 @@ public static void onSlotChangedCraftingGrid(PlayerEntity player, stack = recipe.craft(craftMatrix); } - inventoryCraftResult.setInvStack(0, stack); + inventoryCraftResult.setStack(0, stack); } } } @@ -105,7 +102,7 @@ public static String getStackString(ItemStack stack) return ""; } - public static void debugPrintSlotInfo(ContainerScreen gui, Slot slot) + public static void debugPrintSlotInfo(HandledScreen gui, Slot slot) { if (slot == null) { @@ -113,7 +110,7 @@ public static void debugPrintSlotInfo(ContainerScreen gui, return; } - boolean hasSlot = gui.getContainer().slots.contains(slot); + boolean hasSlot = gui.getScreenHandler().slots.contains(slot); Object inv = slot.inventory; String stackStr = InventoryUtils.getStackString(slot.getStack()); @@ -121,12 +118,12 @@ public static void debugPrintSlotInfo(ContainerScreen gui, "slot class: %s, inv class: %s, Container's slot list has slot: %s, stack: %s, numSlots: %d", slot.id, AccessorUtils.getSlotIndex(slot), slot.hasStack(), slot.getClass().getName(), inv != null ? inv.getClass().getName() : "", hasSlot ? " true" : "false", stackStr, - gui.getContainer().slots.size())); + gui.getScreenHandler().slots.size())); } - private static boolean isValidSlot(Slot slot, ContainerScreen gui, boolean requireItems) + private static boolean isValidSlot(Slot slot, HandledScreen gui, boolean requireItems) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); return container != null && container.slots != null && slot != null && container.slots.contains(slot) && @@ -134,7 +131,7 @@ private static boolean isValidSlot(Slot slot, ContainerScreen gui, @Nullable Slot slot) + public static boolean isCraftingSlot(HandledScreen gui, @Nullable Slot slot) { return slot != null && CraftingHandler.getCraftingGridSlots(gui, slot) != null; } @@ -142,11 +139,11 @@ public static boolean isCraftingSlot(ContainerScreen gui, @ /** * Checks if there are slots belonging to another inventory on screen above the given slot */ - private static boolean inventoryExistsAbove(Slot slot, Container container) + private static boolean inventoryExistsAbove(Slot slot, ScreenHandler container) { for (Slot slotTmp : container.slots) { - if (slotTmp.yPosition < slot.yPosition && areSlotsInSameInventory(slot, slotTmp) == false) + if (slotTmp.y < slot.y && areSlotsInSameInventory(slot, slotTmp) == false) { return true; } @@ -155,7 +152,7 @@ private static boolean inventoryExistsAbove(Slot slot, Container container) return false; } - public static boolean canShiftPlaceItems(ContainerScreen gui) + public static boolean canShiftPlaceItems(HandledScreen gui) { Slot slot = AccessorUtils.getSlotUnderMouse(gui); MinecraftClient mc = MinecraftClient.getInstance(); @@ -166,7 +163,7 @@ public static boolean canShiftPlaceItems(ContainerScreen gu slot.hasStack() == false && slot.canInsert(stackCursor); } - public static boolean tryMoveItems(ContainerScreen gui, RecipeStorage recipes, boolean scrollingUp) + public static boolean tryMoveItems(HandledScreen gui, RecipeStorage recipes, boolean scrollingUp) { Slot slot = AccessorUtils.getSlotUnderMouse(gui); MinecraftClient mc = MinecraftClient.getInstance(); @@ -188,7 +185,7 @@ public static boolean tryMoveItems(ContainerScreen gui, Rec if (Configs.Generic.SLOT_POSITION_AWARE_SCROLL_DIRECTION.getBooleanValue()) { - boolean above = inventoryExistsAbove(slot, gui.getContainer()); + boolean above = inventoryExistsAbove(slot, gui.getScreenHandler()); // so basically: (above && scrollingUp) || (above == false && scrollingUp == false) moveToOtherInventory = (above == scrollingUp); } @@ -258,7 +255,7 @@ else if (getStackSize(stack) < slot.getMaxStackAmount(stack)) return false; } - public static boolean dragMoveItems(ContainerScreen gui, MinecraftClient mc, MoveAction action, int mouseX, int mouseY, boolean isClick) + public static boolean dragMoveItems(HandledScreen gui, MinecraftClient mc, MoveAction action, int mouseX, int mouseY, boolean isClick) { if (isStackEmpty(mc.player.inventory.getCursorStack()) == false) { @@ -361,7 +358,7 @@ public static void stopDragging() DRAGGED_SLOTS.clear(); } - private static boolean dragMoveFromSlotAtPosition(ContainerScreen gui, int x, int y, MoveAction action) + private static boolean dragMoveFromSlotAtPosition(HandledScreen gui, int x, int y, MoveAction action) { if (gui instanceof CreativeInventoryScreen) { @@ -432,7 +429,7 @@ private static boolean dragMoveFromSlotAtPosition(ContainerScreen gui, int x, int y, MoveAction action) + private static boolean dragMoveFromSlotAtPositionCreative(HandledScreen gui, int x, int y, MoveAction action) { CreativeInventoryScreen guiCreative = (CreativeInventoryScreen) gui; Slot slot = AccessorUtils.getSlotAtPosition(gui, x, y); @@ -475,7 +472,7 @@ private static boolean dragMoveFromSlotAtPositionCreative(ContainerScreen gui, ItemStack stackReference, Slot slotReference, boolean sameInventory) + public static void dropStacks(HandledScreen gui, ItemStack stackReference, Slot slotReference, boolean sameInventory) { if (slotReference != null && isStackEmpty(stackReference) == false) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); stackReference = stackReference.copy(); for (Slot slot : container.slots) @@ -546,11 +543,11 @@ public static void dropStacks(ContainerScreen gui, ItemStac } } - public static void dropMultipleStacks(ContainerScreen gui, HashSet itemSet, Slot slotReference, boolean sameInventory) + public static void dropMultipleStacks(HandledScreen gui, HashSet itemSet, Slot slotReference, boolean sameInventory) { if (slotReference != null) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); for (Slot slot : container.slots) { @@ -565,7 +562,7 @@ public static void dropMultipleStacks(ContainerScreen gui, } } - public static boolean shiftDropItems(ContainerScreen gui) + public static boolean shiftDropItems(HandledScreen gui) { ItemStack stackReference = MinecraftClient.getInstance().player.inventory.getCursorStack(); @@ -583,7 +580,7 @@ public static boolean shiftDropItems(ContainerScreen gui) return false; } - public static boolean shiftPlaceItems(Slot slot, ContainerScreen gui) + public static boolean shiftPlaceItems(Slot slot, HandledScreen gui) { // Left click to place the items from the cursor to the slot leftClickSlot(gui, slot.id); @@ -675,10 +672,10 @@ else if (slot.hasStack()) return false; } - private static boolean tryMoveSingleItemToOtherInventory(Slot slot, ContainerScreen gui) + private static boolean tryMoveSingleItemToOtherInventory(Slot slot, HandledScreen gui) { ItemStack stackOrig = slot.getStack(); - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); MinecraftClient mc = MinecraftClient.getInstance(); if (isStackEmpty(mc.player.inventory.getCursorStack()) == false || slot.canTakeItems(mc.player) == false || @@ -727,7 +724,7 @@ private static boolean tryMoveSingleItemToOtherInventory(Slot slot, ContainerScr return false; } - private static boolean tryMoveAllButOneItemToOtherInventory(Slot slot, ContainerScreen gui) + private static boolean tryMoveAllButOneItemToOtherInventory(Slot slot, HandledScreen gui) { MinecraftClient mc = MinecraftClient.getInstance(); PlayerEntity player = mc.player; @@ -752,7 +749,7 @@ private static boolean tryMoveAllButOneItemToOtherInventory(Slot slot, Container int tempSlotNum = -1; // Find some other slot where to store one of the items temporarily - for (Slot slotTmp : gui.getContainer().slots) + for (Slot slotTmp : gui.getScreenHandler().slots) { if (slotTmp.id != slot.id && areSlotsInSameInventory(slotTmp, slot, true) && @@ -808,11 +805,11 @@ private static boolean tryMoveAllButOneItemToOtherInventory(Slot slot, Container else { boolean treatHotbarAsDifferent = gui.getClass() == InventoryScreen.class; - List slots = getSlotNumbersOfEmptySlots(gui.getContainer(), slot, false, treatHotbarAsDifferent, false); + List slots = getSlotNumbersOfEmptySlots(gui.getScreenHandler(), slot, false, treatHotbarAsDifferent, false); if (slots.isEmpty()) { - slots = getSlotNumbersOfMatchingStacks(gui.getContainer(), slot, false, slot.getStack(), true, treatHotbarAsDifferent, false); + slots = getSlotNumbersOfMatchingStacks(gui.getScreenHandler(), slot, false, slot.getStack(), true, treatHotbarAsDifferent, false); } if (slots.isEmpty() == false) @@ -826,7 +823,7 @@ private static boolean tryMoveAllButOneItemToOtherInventory(Slot slot, Container // Try to place the stack in the cursor to any valid empty or matching slots in a different inventory for (int slotNum : slots) { - Slot slotTmp = gui.getContainer().getSlot(slotNum); + Slot slotTmp = gui.getScreenHandler().getSlot(slotNum); stackInCursor = player.inventory.getCursorStack(); if (isStackEmpty(stackInCursor)) @@ -851,9 +848,9 @@ private static boolean tryMoveAllButOneItemToOtherInventory(Slot slot, Container return false; } - private static boolean tryMoveSingleItemToThisInventory(Slot slot, ContainerScreen gui) + private static boolean tryMoveSingleItemToThisInventory(Slot slot, HandledScreen gui) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); ItemStack stackOrig = slot.getStack(); MinecraftClient mc = MinecraftClient.getInstance(); @@ -900,14 +897,14 @@ private static boolean tryMoveSingleItemToThisInventory(Slot slot, ContainerScre return false; } - public static void tryMoveStacks(Slot slot, ContainerScreen gui, boolean matchingOnly, boolean toOtherInventory, boolean firstOnly) + public static void tryMoveStacks(Slot slot, HandledScreen gui, boolean matchingOnly, boolean toOtherInventory, boolean firstOnly) { tryMoveStacks(slot.getStack(), slot, gui, matchingOnly, toOtherInventory, firstOnly); } - private static void tryMoveStacks(ItemStack stackReference, Slot slot, ContainerScreen gui, boolean matchingOnly, boolean toOtherInventory, boolean firstOnly) + private static void tryMoveStacks(ItemStack stackReference, Slot slot, HandledScreen gui, boolean matchingOnly, boolean toOtherInventory, boolean firstOnly) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); final int maxSlot = container.slots.size() - 1; for (int i = maxSlot; i >= 0; i--) @@ -942,7 +939,7 @@ private static void tryMoveStacks(ItemStack stackReference, Slot slot, Container private static void tryMoveItemsToMerchantBuySlots(MerchantScreen gui, boolean fillStacks) { - TraderOfferList list = gui.getContainer().getRecipes(); + TraderOfferList list = gui.getScreenHandler().getRecipes(); int index = AccessorUtils.getSelectedMerchantRecipe(gui); if (list == null || list.size() <= index) @@ -971,9 +968,9 @@ private static void tryMoveItemsToMerchantBuySlots(MerchantScreen gui, boolean f } } - private static void fillBuySlot(ContainerScreen gui, int slotNum, ItemStack buyStack, boolean fillStacks) + private static void fillBuySlot(HandledScreen gui, int slotNum, ItemStack buyStack, boolean fillStacks) { - Slot slot = gui.getContainer().getSlot(slotNum); + Slot slot = gui.getScreenHandler().getSlot(slotNum); ItemStack existingStack = slot.getStack(); MinecraftClient mc = MinecraftClient.getInstance(); @@ -991,7 +988,7 @@ private static void fillBuySlot(ContainerScreen gui, int sl } } - public static void handleRecipeClick(ContainerScreen gui, MinecraftClient mc, RecipeStorage recipes, int hoveredRecipeId, + public static void handleRecipeClick(HandledScreen gui, MinecraftClient mc, RecipeStorage recipes, int hoveredRecipeId, boolean isLeftClick, boolean isRightClick, boolean isPickBlock, boolean isShiftDown) { if (isLeftClick || isRightClick) @@ -1054,7 +1051,7 @@ else if (isPickBlock) } } - public static void tryMoveItemsToFirstCraftingGrid(RecipePattern recipe, ContainerScreen gui, boolean fillStacks) + public static void tryMoveItemsToFirstCraftingGrid(RecipePattern recipe, HandledScreen gui, boolean fillStacks) { Slot craftingOutputSlot = CraftingHandler.getFirstCraftingOutputSlotForGui(gui); @@ -1064,13 +1061,13 @@ public static void tryMoveItemsToFirstCraftingGrid(RecipePattern recipe, Contain } } - public static void loadRecipeItemsToGridForOutputSlotUnderMouse(RecipePattern recipe, ContainerScreen gui) + public static void loadRecipeItemsToGridForOutputSlotUnderMouse(RecipePattern recipe, HandledScreen gui) { Slot slot = AccessorUtils.getSlotUnderMouse(gui); loadRecipeItemsToGridForOutputSlot(recipe, gui, slot); } - private static void loadRecipeItemsToGridForOutputSlot(RecipePattern recipe, ContainerScreen gui, Slot outputSlot) + private static void loadRecipeItemsToGridForOutputSlot(RecipePattern recipe, HandledScreen gui, Slot outputSlot) { if (outputSlot != null && isCraftingSlot(gui, outputSlot) && isStackEmpty(recipe.getResult()) == false) { @@ -1078,7 +1075,7 @@ private static void loadRecipeItemsToGridForOutputSlot(RecipePattern recipe, Con } } - private static boolean tryMoveItemsCrafting(RecipeStorage recipes, Slot slot, ContainerScreen gui, + private static boolean tryMoveItemsCrafting(RecipeStorage recipes, Slot slot, HandledScreen gui, boolean moveToOtherInventory, boolean moveStacks, boolean moveEverything) { RecipePattern recipe = recipes.getSelectedRecipe(); @@ -1122,7 +1119,7 @@ else if (moveToOtherInventory == false && isStackEmpty(stackRecipeOutput) == fal return false; } - private static void craftAsManyItemsAsPossible(RecipePattern recipe, Slot slot, ContainerScreen gui) + private static void craftAsManyItemsAsPossible(RecipePattern recipe, Slot slot, HandledScreen gui) { ItemStack result = recipe.getResult(); int failSafe = 1024; @@ -1146,7 +1143,7 @@ private static void craftAsManyItemsAsPossible(RecipePattern recipe, Slot slot, } } - public static void clearFirstCraftingGridOfItems(RecipePattern recipe, ContainerScreen gui, boolean clearNonMatchingOnly) + public static void clearFirstCraftingGridOfItems(RecipePattern recipe, HandledScreen gui, boolean clearNonMatchingOnly) { Slot craftingOutputSlot = CraftingHandler.getFirstCraftingOutputSlotForGui(gui); @@ -1157,7 +1154,7 @@ public static void clearFirstCraftingGridOfItems(RecipePattern recipe, Container } } - public static void clearFirstCraftingGridOfAllItems(ContainerScreen gui) + public static void clearFirstCraftingGridOfAllItems(HandledScreen gui) { Slot craftingOutputSlot = CraftingHandler.getFirstCraftingOutputSlotForGui(gui); @@ -1168,16 +1165,16 @@ public static void clearFirstCraftingGridOfAllItems(ContainerScreen gui, SlotRange range, boolean clearNonMatchingOnly) + private static boolean clearCraftingGridOfItems(RecipePattern recipe, HandledScreen gui, SlotRange range, boolean clearNonMatchingOnly) { - final int invSlots = gui.getContainer().slots.size(); + final int invSlots = gui.getScreenHandler().slots.size(); final int rangeSlots = range.getSlotCount(); final int recipeSize = recipe.getRecipeLength(); final int slotCount = Math.min(rangeSlots, recipeSize); for (int i = 0, slotNum = range.getFirst(); i < slotCount && slotNum < invSlots; i++, slotNum++) { - Slot slotTmp = gui.getContainer().getSlot(slotNum); + Slot slotTmp = gui.getScreenHandler().getSlot(slotNum); if (slotTmp != null && slotTmp.hasStack() && (clearNonMatchingOnly == false || areStacksEqual(recipe.getRecipeItems()[i], slotTmp.getStack()) == false)) @@ -1195,15 +1192,15 @@ private static boolean clearCraftingGridOfItems(RecipePattern recipe, ContainerS return true; } - private static boolean clearCraftingGridOfAllItems(ContainerScreen gui, SlotRange range) + private static boolean clearCraftingGridOfAllItems(HandledScreen gui, SlotRange range) { - final int invSlots = gui.getContainer().slots.size(); + final int invSlots = gui.getScreenHandler().slots.size(); final int rangeSlots = range.getSlotCount(); boolean clearedAll = true; for (int i = 0, slotNum = range.getFirst(); i < rangeSlots && slotNum < invSlots; i++, slotNum++) { - Slot slotTmp = gui.getContainer().getSlot(slotNum); + Slot slotTmp = gui.getScreenHandler().getSlot(slotNum); if (slotTmp != null && slotTmp.hasStack()) { @@ -1220,9 +1217,9 @@ private static boolean clearCraftingGridOfAllItems(ContainerScreen gui, boolean fillStacks) + private static boolean tryMoveItemsToCraftingGridSlots(RecipePattern recipe, Slot slot, HandledScreen gui, boolean fillStacks) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); int numSlots = container.slots.size(); SlotRange range = CraftingHandler.getCraftingGridSlots(gui, slot); @@ -1265,9 +1262,9 @@ private static boolean tryMoveItemsToCraftingGridSlots(RecipePattern recipe, Slo return false; } - private static void fillCraftingGrid(ContainerScreen gui, Slot slotGridFirst, ItemStack ingredientReference, List targetSlots) + private static void fillCraftingGrid(HandledScreen gui, Slot slotGridFirst, ItemStack ingredientReference, List targetSlots) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); MinecraftClient mc = MinecraftClient.getInstance(); PlayerEntity player = mc.player; int slotNum = -1; @@ -1347,7 +1344,7 @@ private static void fillCraftingGrid(ContainerScreen gui, S } } - public static void rightClickCraftOneStack(ContainerScreen gui) + public static void rightClickCraftOneStack(HandledScreen gui) { Slot slot = AccessorUtils.getSlotUnderMouse(gui); MinecraftClient mc = MinecraftClient.getInstance(); @@ -1385,14 +1382,14 @@ public static Optional getRecipeFromPattern(RecipePattern recipe // Creates dummy inventories/containers.. probs a better way RecipeManager recipeManager = mc.world.getRecipeManager(); - Container container = new Generic3x3Container(-1, mc.player.inventory); - CraftingInventory search = new CraftingInventory(container, 3, 3); + ScreenHandler screenHandler = new Generic3x3ContainerScreenHandler(-1, mc.player.inventory); + CraftingInventory search = new CraftingInventory(screenHandler, 3, 3); ItemStack[] items = recipe.getRecipeItems(); // Set dummy slots with recipe pattern for (int i = 0; i < items.length; i++) { - search.setInvStack(i, items[i]);; + search.setStack(i, items[i]);; } return recipeManager.getFirstMatch(RecipeType.CRAFTING, search, mc.world); @@ -1417,7 +1414,7 @@ public static CraftingRecipe getBookRecipeFromPattern(RecipePattern recipe) return null; } - public static void craftEverythingPossibleWithCurrentRecipe(RecipePattern recipe, ContainerScreen gui) + public static void craftEverythingPossibleWithCurrentRecipe(RecipePattern recipe, HandledScreen gui) { Slot slot = CraftingHandler.getFirstCraftingOutputSlotForGui(gui); @@ -1432,9 +1429,9 @@ public static void craftEverythingPossibleWithCurrentRecipe(RecipePattern recipe CraftingRecipe bookRecipe = getBookRecipeFromPattern(recipe); if (bookRecipe != null && !bookRecipe.isIgnoredInRecipeBook()) { // Use recipe book if possible MinecraftClient mc = MinecraftClient.getInstance(); - mc.interactionManager.clickRecipe(mc.player.container.syncId, bookRecipe, true); + mc.interactionManager.clickRecipe(gui.getScreenHandler().syncId, bookRecipe, true); } else { - // Clear all items from the grid first, to avoid unbalanced stacks + // Clear all items from the grid first, to avoid unbalanced stacks if (clearCraftingGridOfItems(recipe, gui, range, false) == false) { return; @@ -1451,18 +1448,18 @@ public static void craftEverythingPossibleWithCurrentRecipe(RecipePattern recipe } } - public static void moveAllCraftingResultsToOtherInventory(RecipePattern recipe, ContainerScreen gui) + public static void moveAllCraftingResultsToOtherInventory(RecipePattern recipe, HandledScreen gui) { if (isStackEmpty(recipe.getResult()) == false) { Slot slot = null; ItemStack stackResult = recipe.getResult().copy(); - for (Slot slotTmp : gui.getContainer().slots) + for (Slot slotTmp : gui.getScreenHandler().slots) { // This slot is likely in the player inventory, as there is another inventory above if (areStacksEqual(slotTmp.getStack(), stackResult) && - inventoryExistsAbove(slotTmp, gui.getContainer())) + inventoryExistsAbove(slotTmp, gui.getScreenHandler())) { slot = slotTmp; break; @@ -1473,7 +1470,7 @@ public static void moveAllCraftingResultsToOtherInventory(RecipePattern recipe, { // Get a list of slots with matching items, which are in the same inventory // as the slot that is assumed to be in the player inventory. - List slots = getSlotNumbersOfMatchingStacks(gui.getContainer(), slot, true, stackResult, false, false, false); + List slots = getSlotNumbersOfMatchingStacks(gui.getScreenHandler(), slot, true, stackResult, false, false, false); for (int slotNum : slots) { @@ -1483,7 +1480,7 @@ public static void moveAllCraftingResultsToOtherInventory(RecipePattern recipe, } } - public static void throwAllCraftingResultsToGround(RecipePattern recipe, ContainerScreen gui) + public static void throwAllCraftingResultsToGround(RecipePattern recipe, HandledScreen gui) { Slot slot = CraftingHandler.getFirstCraftingOutputSlotForGui(gui); @@ -1498,7 +1495,7 @@ public static void throwAllCraftingResultsToGround(RecipePattern recipe, Contain } - private static int putSingleItemIntoSlots(ContainerScreen gui, List targetSlots, int startIndex) + private static int putSingleItemIntoSlots(HandledScreen gui, List targetSlots, int startIndex) { MinecraftClient mc = MinecraftClient.getInstance(); ItemStack stackInCursor = mc.player.inventory.getCursorStack(); @@ -1508,7 +1505,7 @@ private static int putSingleItemIntoSlots(ContainerScreen g return 0; } - int numSlots = gui.getContainer().slots.size(); + int numSlots = gui.getScreenHandler().slots.size(); int numItems = getStackSize(stackInCursor); int loops = Math.min(numItems, targetSlots.size() - startIndex); int count = 0; @@ -1529,7 +1526,7 @@ private static int putSingleItemIntoSlots(ContainerScreen g return count; } - public static void moveOneSetOfItemsFromSlotToPlayerInventory(ContainerScreen gui, Slot slot) + public static void moveOneSetOfItemsFromSlotToPlayerInventory(HandledScreen gui, Slot slot) { leftClickSlot(gui, slot.id); @@ -1538,19 +1535,19 @@ public static void moveOneSetOfItemsFromSlotToPlayerInventory(ContainerScreen slots = getSlotNumbersOfMatchingStacks(gui.getContainer(), slot, false, stackCursor, true, true, false); + List slots = getSlotNumbersOfMatchingStacks(gui.getScreenHandler(), slot, false, stackCursor, true, true, false); if (moveItemFromCursorToSlots(gui, slots) == false) { - slots = getSlotNumbersOfEmptySlotsInPlayerInventory(gui.getContainer(), false); + slots = getSlotNumbersOfEmptySlotsInPlayerInventory(gui.getScreenHandler(), false); moveItemFromCursorToSlots(gui, slots); } } } - private static void moveOneRecipeItemIntoCraftingGrid(ContainerScreen gui, Slot slotGridFirst, ItemStack ingredientReference, List targetSlots) + private static void moveOneRecipeItemIntoCraftingGrid(HandledScreen gui, Slot slotGridFirst, ItemStack ingredientReference, List targetSlots) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); MinecraftClient mc = MinecraftClient.getInstance(); int index = 0; int slotNum = -1; @@ -1595,7 +1592,7 @@ private static void moveOneRecipeItemIntoCraftingGrid(ContainerScreen gui, List slotNumbers) + private static boolean moveItemFromCursorToSlots(HandledScreen gui, List slotNumbers) { MinecraftClient mc = MinecraftClient.getInstance(); PlayerInventory inv = mc.player.inventory; @@ -1613,9 +1610,9 @@ private static boolean moveItemFromCursorToSlots(ContainerScreen gui, int slotTo, Inventory invSrc, ItemStack stackTemplate, boolean fillStacks) + private static void moveItemsFromInventory(HandledScreen gui, int slotTo, Inventory invSrc, ItemStack stackTemplate, boolean fillStacks) { - Container container = gui.getContainer(); + ScreenHandler container = gui.getScreenHandler(); for (Slot slot : container.slots) { @@ -1642,7 +1639,7 @@ private static void moveItemsFromInventory(ContainerScreen } } - private static int getSlotNumberOfLargestMatchingStackFromDifferentInventory(Container container, Slot slotReference, ItemStack stackReference) + private static int getSlotNumberOfLargestMatchingStackFromDifferentInventory(ScreenHandler container, Slot slotReference, ItemStack stackReference) { int slotNum = -1; int largest = 0; @@ -1674,7 +1671,7 @@ private static int getSlotNumberOfLargestMatchingStackFromDifferentInventory(Con * @param stackReference * @return */ - private static int getSlotNumberOfSmallestStackFromDifferentInventory(Container container, Slot slotReference, ItemStack stackReference, int idealSize) + private static int getSlotNumberOfSmallestStackFromDifferentInventory(ScreenHandler container, Slot slotReference, ItemStack stackReference, int idealSize) { int slotNum = -1; int smallest = Integer.MAX_VALUE; @@ -1732,7 +1729,7 @@ private static int getSlotNumberOfSmallestStackFromDifferentInventory(Container * @return */ private static List getSlotNumbersOfMatchingStacks( - Container container, Slot slotReference, boolean sameInventory, + ScreenHandler container, Slot slotReference, boolean sameInventory, ItemStack stackReference, boolean preferPartial, boolean treatHotbarAsDifferent, boolean reverse) { List slots = new ArrayList(64); @@ -1761,7 +1758,7 @@ private static List getSlotNumbersOfMatchingStacks( return slots; } - private static List getSlotNumbersOfMatchingStacks(Container container, ItemStack stackReference, boolean preferPartial) + private static List getSlotNumbersOfMatchingStacks(ScreenHandler container, ItemStack stackReference, boolean preferPartial) { List slots = new ArrayList(64); final int maxSlot = container.slots.size() - 1; @@ -1787,7 +1784,7 @@ private static List getSlotNumbersOfMatchingStacks(Container container, } private static List getSlotNumbersOfEmptySlots( - Container container, Slot slotReference, boolean sameInventory, boolean treatHotbarAsDifferent, boolean reverse) + ScreenHandler container, Slot slotReference, boolean sameInventory, boolean treatHotbarAsDifferent, boolean reverse) { List slots = new ArrayList(64); final int maxSlot = container.slots.size() - 1; @@ -1807,7 +1804,7 @@ private static List getSlotNumbersOfEmptySlots( return slots; } - private static List getSlotNumbersOfEmptySlotsInPlayerInventory(Container container, boolean reverse) + private static List getSlotNumbersOfEmptySlotsInPlayerInventory(ScreenHandler container, boolean reverse) { List slots = new ArrayList(64); final int maxSlot = container.slots.size() - 1; @@ -1854,7 +1851,7 @@ private static boolean areSlotsInSameInventory(Slot slot1, Slot slot2, boolean t return false; } - private static ItemStack[] getOriginalStacks(Container container) + private static ItemStack[] getOriginalStacks(ScreenHandler container) { ItemStack[] originalStacks = new ItemStack[container.slots.size()]; @@ -1866,7 +1863,7 @@ private static ItemStack[] getOriginalStacks(Container container) return originalStacks; } - private static void restoreOriginalStacks(Container container, ItemStack[] originalStacks) + private static void restoreOriginalStacks(ScreenHandler container, ItemStack[] originalStacks) { for (int i = 0; i < originalStacks.length; i++) { @@ -1880,7 +1877,7 @@ private static void restoreOriginalStacks(Container container, ItemStack[] origi } } - private static int getTargetSlot(Container container, ItemStack[] originalStacks) + private static int getTargetSlot(ScreenHandler container, ItemStack[] originalStacks) { List slots = container.slots; @@ -1921,7 +1918,7 @@ private void clickSlotsToMoveItems(Slot slot, ContainerScreen gui, boolean toOtherInventory) + private static void clickSlotsToMoveItemsFromSlot(Slot slotFrom, HandledScreen gui, boolean toOtherInventory) { MinecraftClient mc = MinecraftClient.getInstance(); PlayerEntity player = mc.player; @@ -1933,7 +1930,7 @@ private static void clickSlotsToMoveItemsFromSlot(Slot slotFrom, ContainerScreen return; } - for (Slot slotDst : gui.getContainer().slots) + for (Slot slotDst : gui.getScreenHandler().slots) { ItemStack stackDst = slotDst.getStack(); @@ -1957,11 +1954,11 @@ private static void clickSlotsToMoveItemsFromSlot(Slot slotFrom, ContainerScreen } } - private static boolean clickSlotsToMoveSingleItem(ContainerScreen gui, int slotFrom, int slotTo) + private static boolean clickSlotsToMoveSingleItem(HandledScreen gui, int slotFrom, int slotTo) { //System.out.println("clickSlotsToMoveSingleItem(from: " + slotFrom + ", to: " + slotTo + ")"); MinecraftClient mc = MinecraftClient.getInstance(); - ItemStack stack = gui.getContainer().slots.get(slotFrom).getStack(); + ItemStack stack = gui.getScreenHandler().slots.get(slotFrom).getStack(); if (isStackEmpty(stack)) { @@ -1992,10 +1989,10 @@ private static boolean clickSlotsToMoveSingleItem(ContainerScreen gui, int slotFrom) + private static boolean clickSlotsToMoveSingleItemByShiftClick(HandledScreen gui, int slotFrom) { MinecraftClient mc = MinecraftClient.getInstance(); - Slot slot = gui.getContainer().slots.get(slotFrom); + Slot slot = gui.getScreenHandler().slots.get(slotFrom); ItemStack stack = slot.getStack(); if (isStackEmpty(stack)) @@ -2037,7 +2034,7 @@ private static boolean clickSlotsToMoveSingleItemByShiftClick(ContainerScreen gui, int slotFrom, int slotTo) + private static boolean clickSlotsToMoveItems(HandledScreen gui, int slotFrom, int slotTo) { MinecraftClient mc = MinecraftClient.getInstance(); PlayerEntity player = mc.player; @@ -2070,11 +2067,11 @@ private static boolean clickSlotsToMoveItems(ContainerScreen gui, int slotNum) + public static void dropStacksUntilEmpty(HandledScreen gui, int slotNum) { - if (slotNum >= 0 && slotNum < gui.getContainer().slots.size()) + if (slotNum >= 0 && slotNum < gui.getScreenHandler().slots.size()) { - Slot slot = gui.getContainer().getSlot(slotNum); + Slot slot = gui.getScreenHandler().getSlot(slotNum); int failsafe = 64; while (failsafe-- > 0 && slot.hasStack()) @@ -2084,11 +2081,11 @@ public static void dropStacksUntilEmpty(ContainerScreen gui } } - public static void dropStacksWhileHasItem(ContainerScreen gui, int slotNum, ItemStack stackReference) + public static void dropStacksWhileHasItem(HandledScreen gui, int slotNum, ItemStack stackReference) { - if (slotNum >= 0 && slotNum < gui.getContainer().slots.size()) + if (slotNum >= 0 && slotNum < gui.getScreenHandler().slots.size()) { - Slot slot = gui.getContainer().getSlot(slotNum); + Slot slot = gui.getScreenHandler().getSlot(slotNum); int failsafe = 256; while (failsafe-- > 0 && areStacksEqual(slot.getStack(), stackReference)) @@ -2098,9 +2095,9 @@ public static void dropStacksWhileHasItem(ContainerScreen g } } - private static boolean shiftClickSlotWithCheck(ContainerScreen gui, int slotNum) + private static boolean shiftClickSlotWithCheck(HandledScreen gui, int slotNum) { - Slot slot = gui.getContainer().getSlot(slotNum); + Slot slot = gui.getScreenHandler().getSlot(slotNum); if (slot == null || slot.hasStack() == false) { @@ -2113,7 +2110,7 @@ private static boolean shiftClickSlotWithCheck(ContainerScreen gui, Slot slot, boolean moveUp, MoveAmount amount) + public static boolean tryMoveItemsVertically(HandledScreen gui, Slot slot, boolean moveUp, MoveAmount amount) { MinecraftClient mc = MinecraftClient.getInstance(); @@ -2123,7 +2120,7 @@ public static boolean tryMoveItemsVertically(ContainerScreen slots = getVerticallyFurthestSuitableSlotsForStackInSlot(gui.getContainer(), slot, moveUp); + List slots = getVerticallyFurthestSuitableSlotsForStackInSlot(gui.getScreenHandler(), slot, moveUp); if (slots.isEmpty()) { @@ -2150,30 +2147,30 @@ else if (amount == MoveAmount.ALL_MATCHING) return true; } - private static void moveMatchingStacksToSlots(ContainerScreen gui, Slot slot, boolean moveUp) + private static void moveMatchingStacksToSlots(HandledScreen gui, Slot slot, boolean moveUp) { - List matchingSlots = getSlotNumbersOfMatchingStacks(gui.getContainer(), slot, true, slot.getStack(), true, true, false); - List targetSlots = getSlotNumbersOfEmptySlots(gui.getContainer(), slot, false, true, false); - targetSlots.addAll(getSlotNumbersOfEmptySlots(gui.getContainer(), slot, true, true, false)); + List matchingSlots = getSlotNumbersOfMatchingStacks(gui.getScreenHandler(), slot, true, slot.getStack(), true, true, false); + List targetSlots = getSlotNumbersOfEmptySlots(gui.getScreenHandler(), slot, false, true, false); + targetSlots.addAll(getSlotNumbersOfEmptySlots(gui.getScreenHandler(), slot, true, true, false)); targetSlots.addAll(matchingSlots); - Collections.sort(matchingSlots, new SlotVerticalSorterSlotNumbers(gui.getContainer(), ! moveUp)); - Collections.sort(targetSlots, new SlotVerticalSorterSlotNumbers(gui.getContainer(), moveUp)); + Collections.sort(matchingSlots, new SlotVerticalSorterSlotNumbers(gui.getScreenHandler(), ! moveUp)); + Collections.sort(targetSlots, new SlotVerticalSorterSlotNumbers(gui.getScreenHandler(), moveUp)); for (int i = 0; i < matchingSlots.size(); ++i) { int srcSlotNum = matchingSlots.get(i).intValue(); - Slot srcSlot = gui.getContainer().getSlot(srcSlotNum); + Slot srcSlot = gui.getScreenHandler().getSlot(srcSlotNum); Slot lastSlot = moveStackToSlots(gui, srcSlot, targetSlots, false); - if (lastSlot == null || (lastSlot.id == srcSlot.id || (lastSlot.yPosition > srcSlot.yPosition) == moveUp)) + if (lastSlot == null || (lastSlot.id == srcSlot.id || (lastSlot.y > srcSlot.y) == moveUp)) { return; } } } - private static Slot moveStackToSlots(ContainerScreen gui, Slot slotFrom, List slotsTo, boolean leaveOne) + private static Slot moveStackToSlots(HandledScreen gui, Slot slotFrom, List slotsTo, boolean leaveOne) { MinecraftClient mc = MinecraftClient.getInstance(); PlayerInventory inv = mc.player.inventory; @@ -2201,7 +2198,7 @@ private static Slot moveStackToSlots(ContainerScreen gui, S break; } - Slot dstSlot = gui.getContainer().getSlot(slotNum); + Slot dstSlot = gui.getScreenHandler().getSlot(slotNum); if (dstSlot.canInsert(inv.getCursorStack()) && (dstSlot.hasStack() == false || areStacksEqual(dstSlot.getStack(), inv.getCursorStack()))) @@ -2220,7 +2217,7 @@ private static Slot moveStackToSlots(ContainerScreen gui, S return lastSlot; } - private static void moveOneItemToFirstValidSlot(ContainerScreen gui, Slot slotFrom, List slotsTo) + private static void moveOneItemToFirstValidSlot(HandledScreen gui, Slot slotFrom, List slotsTo) { MinecraftClient mc = MinecraftClient.getInstance(); PlayerInventory inv = mc.player.inventory; @@ -2253,7 +2250,7 @@ private static void moveOneItemToFirstValidSlot(ContainerScreen getVerticallyFurthestSuitableSlotsForStackInSlot(Container container, final Slot slotIn, boolean above) + private static List getVerticallyFurthestSuitableSlotsForStackInSlot(ScreenHandler container, final Slot slotIn, boolean above) { if (slotIn == null || slotIn.hasStack() == false) { @@ -2265,9 +2262,9 @@ private static List getVerticallyFurthestSuitableSlotsForStackInSlot(Co for (Slot slotTmp : container.slots) { - if (slotTmp.id != slotIn.id && slotTmp.yPosition != slotIn.yPosition) + if (slotTmp.id != slotIn.id && slotTmp.y != slotIn.y) { - if (above == slotTmp.yPosition < slotIn.yPosition) + if (above == slotTmp.y < slotIn.y) { ItemStack stackTmp = slotTmp.getStack(); @@ -2285,13 +2282,13 @@ private static List getVerticallyFurthestSuitableSlotsForStackInSlot(Co return slotNumbers; } - public static void tryClearCursor(ContainerScreen gui, MinecraftClient mc) + public static void tryClearCursor(HandledScreen gui, MinecraftClient mc) { ItemStack stackCursor = mc.player.inventory.getCursorStack(); if (isStackEmpty(stackCursor) == false) { - List emptySlots = getSlotNumbersOfEmptySlotsInPlayerInventory(gui.getContainer(), false); + List emptySlots = getSlotNumbersOfEmptySlotsInPlayerInventory(gui.getScreenHandler(), false); if (emptySlots.isEmpty() == false) { @@ -2299,13 +2296,13 @@ public static void tryClearCursor(ContainerScreen gui, Mine } else { - List matchingSlots = getSlotNumbersOfMatchingStacks(gui.getContainer(), stackCursor, true); + List matchingSlots = getSlotNumbersOfMatchingStacks(gui.getScreenHandler(), stackCursor, true); if (matchingSlots.isEmpty() == false) { for (int slotNum : matchingSlots) { - Slot slot = gui.getContainer().getSlot(slotNum); + Slot slot = gui.getScreenHandler().getSlot(slotNum); ItemStack stackSlot = slot.getStack(); if (slot == null || areStacksEqual(stackSlot, stackCursor) == false || @@ -2362,10 +2359,10 @@ public int compare(Slot slot1, Slot slot2) private static class SlotVerticalSorterSlotNumbers implements Comparator { - private final Container container; + private final ScreenHandler container; private final boolean topToBottom; - public SlotVerticalSorterSlotNumbers(Container container, boolean topToBottom) + public SlotVerticalSorterSlotNumbers(ScreenHandler container, boolean topToBottom) { this.container = container; this.topToBottom = topToBottom; @@ -2377,20 +2374,20 @@ public int compare(Integer slotNum1, Integer slotNum2) Slot slot1 = this.container.getSlot(slotNum1.intValue()); Slot slot2 = this.container.getSlot(slotNum2.intValue()); - if (slot1.yPosition == slot2.yPosition) + if (slot1.y == slot2.y) { return (slot1.id < slot2.id) == this.topToBottom ? -1 : 1; } - return (slot1.yPosition < slot2.yPosition) == this.topToBottom ? -1 : 1; + return (slot1.y < slot2.y) == this.topToBottom ? -1 : 1; } } - public static void clickSlot(ContainerScreen gui, int slotNum, int mouseButton, SlotActionType type) + public static void clickSlot(HandledScreen gui, int slotNum, int mouseButton, SlotActionType type) { - if (slotNum >= 0 && slotNum < gui.getContainer().slots.size()) + if (slotNum >= 0 && slotNum < gui.getScreenHandler().slots.size()) { - Slot slot = gui.getContainer().getSlot(slotNum); + Slot slot = gui.getScreenHandler().getSlot(slotNum); clickSlot(gui, slot, slotNum, mouseButton, type); } else @@ -2398,7 +2395,7 @@ public static void clickSlot(ContainerScreen gui, int slotN try { MinecraftClient mc = MinecraftClient.getInstance(); - mc.interactionManager.clickSlot(gui.getContainer().syncId, slotNum, mouseButton, type, mc.player); + mc.interactionManager.clickSlot(gui.getScreenHandler().syncId, slotNum, mouseButton, type, mc.player); } catch (Exception e) { @@ -2408,7 +2405,7 @@ public static void clickSlot(ContainerScreen gui, int slotN } } - public static void clickSlot(ContainerScreen gui, Slot slot, int slotNum, int mouseButton, SlotActionType type) + public static void clickSlot(HandledScreen gui, Slot slot, int slotNum, int mouseButton, SlotActionType type) { try { @@ -2421,59 +2418,59 @@ public static void clickSlot(ContainerScreen gui, Slot slot } } - public static void leftClickSlot(ContainerScreen gui, Slot slot, int slotNumber) + public static void leftClickSlot(HandledScreen gui, Slot slot, int slotNumber) { clickSlot(gui, slot, slotNumber, 0, SlotActionType.PICKUP); } - public static void rightClickSlot(ContainerScreen gui, Slot slot, int slotNumber) + public static void rightClickSlot(HandledScreen gui, Slot slot, int slotNumber) { clickSlot(gui, slot, slotNumber, 1, SlotActionType.PICKUP); } - public static void shiftClickSlot(ContainerScreen gui, Slot slot, int slotNumber) + public static void shiftClickSlot(HandledScreen gui, Slot slot, int slotNumber) { clickSlot(gui, slot, slotNumber, 0, SlotActionType.QUICK_MOVE); } - public static void leftClickSlot(ContainerScreen gui, int slotNum) + public static void leftClickSlot(HandledScreen gui, int slotNum) { clickSlot(gui, slotNum, 0, SlotActionType.PICKUP); } - public static void rightClickSlot(ContainerScreen gui, int slotNum) + public static void rightClickSlot(HandledScreen gui, int slotNum) { clickSlot(gui, slotNum, 1, SlotActionType.PICKUP); } - public static void shiftClickSlot(ContainerScreen gui, int slotNum) + public static void shiftClickSlot(HandledScreen gui, int slotNum) { clickSlot(gui, slotNum, 0, SlotActionType.QUICK_MOVE); } - public static void dropItemsFromCursor(ContainerScreen gui) + public static void dropItemsFromCursor(HandledScreen gui) { clickSlot(gui, -999, 0, SlotActionType.PICKUP); } - public static void dropItem(ContainerScreen gui, int slotNum) + public static void dropItem(HandledScreen gui, int slotNum) { clickSlot(gui, slotNum, 0, SlotActionType.THROW); } - public static void dropStack(ContainerScreen gui, int slotNum) + public static void dropStack(HandledScreen gui, int slotNum) { clickSlot(gui, slotNum, 1, SlotActionType.THROW); } - public static void swapSlots(ContainerScreen gui, int slotNum, int otherSlot) + public static void swapSlots(HandledScreen gui, int slotNum, int otherSlot) { clickSlot(gui, slotNum, 0, SlotActionType.SWAP); clickSlot(gui, otherSlot, 0, SlotActionType.SWAP); clickSlot(gui, slotNum, 0, SlotActionType.SWAP); } - private static void dragSplitItemsIntoSlots(ContainerScreen gui, List targetSlots) + private static void dragSplitItemsIntoSlots(HandledScreen gui, List targetSlots) { MinecraftClient mc = MinecraftClient.getInstance(); ItemStack stackInCursor = mc.player.inventory.getCursorStack(); @@ -2489,7 +2486,7 @@ private static void dragSplitItemsIntoSlots(ContainerScreen return; } - int numSlots = gui.getContainer().slots.size(); + int numSlots = gui.getScreenHandler().slots.size(); int loops = targetSlots.size(); // Start the drag diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 960cb6a7..f6b3614c 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -33,7 +33,7 @@ ], "depends": { - "malilib": ">=0.10.0-dev.20" + "malilib": ">=0.10.0-dev.21" }, "custom": { diff --git a/src/main/resources/mixins.itemscroller.json b/src/main/resources/mixins.itemscroller.json index 8bbe3183..98aecaf2 100644 --- a/src/main/resources/mixins.itemscroller.json +++ b/src/main/resources/mixins.itemscroller.json @@ -4,11 +4,11 @@ "compatibilityLevel": "JAVA_8", "minVersion": "0.7", "client": [ - "IMixinContainerScreen", "IMixinMerchantScreen", + "IMixinScreenWithHandler", "IMixinSlot", "MixinAbstractInventoryScreen", - "MixinCraftingTableContainer", + "MixinCraftingScreenHandler", "MixinGameRenderer", "MixinScreen" ],