From 8c82d0fa4113ac0441212b61c105f924a28ce0c8 Mon Sep 17 00:00:00 2001 From: Skiftcha Date: Tue, 24 Nov 2020 08:06:51 +0300 Subject: [PATCH 1/6] local scrolling --- .../team/chisel/client/gui/GuiChisel.java | 241 +++++++++++------- .../team/chisel/client/gui/GuiScrollbar.java | 92 +++++++ .../inventory/InventoryChiselSelection.java | 39 ++- .../chisel/inventory/SlotChiselInput.java | 1 + 4 files changed, 267 insertions(+), 106 deletions(-) create mode 100644 src/main/java/team/chisel/client/gui/GuiScrollbar.java diff --git a/src/main/java/team/chisel/client/gui/GuiChisel.java b/src/main/java/team/chisel/client/gui/GuiChisel.java index 550ebe14..017b755d 100644 --- a/src/main/java/team/chisel/client/gui/GuiChisel.java +++ b/src/main/java/team/chisel/client/gui/GuiChisel.java @@ -13,6 +13,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import team.chisel.client.gui.widgets.GuiButtonChiselMode; import team.chisel.inventory.ContainerChisel; @@ -28,116 +29,164 @@ import static team.chisel.Chisel.MOD_ID; @SideOnly(Side.CLIENT) public class GuiChisel extends GuiContainer { - public static final ResourceLocation TEXTURE_RESOURCE_LOCATION = new ResourceLocation(MOD_ID, "textures/chisel2GuiScroll.png"); - public static final int TEXTURE_WIDTH = 266; - public static final int TEXTURE_HEIGHT = 250; - public static final int GUI_WIDTH = 266; - public static final int GUI_HEIGHT = 202; - public static final int CHISEL_INPUT_SIZE = 48; - private EntityPlayer player; - private ContainerChisel container; - private IChiselMode currentMode; + public static final ResourceLocation TEXTURE_RESOURCE_LOCATION = new ResourceLocation(MOD_ID, "textures/chisel2GuiScroll.png"); + public static final int TEXTURE_WIDTH = 266; + public static final int TEXTURE_HEIGHT = 250; + public static final int GUI_WIDTH = 266; + public static final int GUI_HEIGHT = 202; + public static final int CHISEL_INPUT_SIZE = 48; + private EntityPlayer player; + private ContainerChisel container; + private IChiselMode currentMode; + private GuiScrollbar scrollBar; + private InventoryChiselSelection menu; - public GuiChisel(InventoryPlayer iinventory, InventoryChiselSelection menu) { - super(new ContainerChisel(iinventory, menu)); - player = iinventory.player; - xSize = GUI_WIDTH; - ySize = GUI_HEIGHT; + public GuiChisel(InventoryPlayer iinventory, InventoryChiselSelection menu) { + super(new ContainerChisel(iinventory, menu)); + scrollBar = new GuiScrollbar(); + this.menu = menu; + player = iinventory.player; + xSize = GUI_WIDTH; + ySize = GUI_HEIGHT; - container = (ContainerChisel) inventorySlots; - } + container = (ContainerChisel) inventorySlots; + scrollBar.setContainerChisel(container); + } - @Override - public void onGuiClosed() { - super.onGuiClosed(); - inventorySlots.onContainerClosed(player); - } + @Override + public void onGuiClosed() { + super.onGuiClosed(); + inventorySlots.onContainerClosed(player); + } - @Override - @SuppressWarnings("unchecked") - public void initGui() { - super.initGui(); - currentMode = General.getChiselMode(container.chisel); + @Override + @SuppressWarnings("unchecked") + public void initGui() { + super.initGui(); + currentMode = General.getChiselMode(container.chisel); - if (showMode()) { - buttonList.add(new GuiButtonChiselMode(0, guiLeft + 12, guiTop + 132, this)); - } - } + if (showMode()) { + buttonList.add(new GuiButtonChiselMode(0, guiLeft + 12, guiTop + 132, this)); + } - @Override - public void updateScreen() { - super.updateScreen(); - final ItemStack held = player.getCurrentEquippedItem(); - if (held == null || !(held.getItem() instanceof IChiselItem)) { - mc.displayGuiScreen(null); - } - } + scrollBar.setLeft(246); + scrollBar.setTop(8); + scrollBar.setScrollHeight(106); + } - private boolean showMode() { - return container.chisel != null - && container.chisel.getItem() instanceof IChiselItem - && ((IChiselItem) container.chisel.getItem()).hasModes(container.chisel); - } + @Override + public void updateScreen() { + super.updateScreen(); + final ItemStack held = player.getCurrentEquippedItem(); + if (held == null || !(held.getItem() instanceof IChiselItem)) { + mc.displayGuiScreen(null); + } + } - @Override - protected void drawGuiContainerForegroundLayer(final int mouseX, final int mouseY) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + private boolean showMode() { + return container.chisel != null + && container.chisel.getItem() instanceof IChiselItem + && ((IChiselItem) container.chisel.getItem()).hasModes(container.chisel); + } - final String titleText = I18n.format(container.inventory.getInventoryName() + ".title"); - fontRendererObj.drawSplitString(titleText, 50 - fontRendererObj.getStringWidth(titleText) / 2, 60, 40, 0x404040); + @Override + protected void drawGuiContainerForegroundLayer(final int mouseX, final int mouseY) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - if (showMode()) { - final String modeText = I18n.format(container.inventory.getInventoryName() + ".mode"); - fontRendererObj.drawString(modeText, 12 + (GuiButtonChiselMode.BUTTON_WIDTH - fontRendererObj.getStringWidth(modeText)) / 2, 122, 0x404040); - } - } + final String titleText = I18n.format(container.inventory.getInventoryName() + ".title"); + fontRendererObj.drawSplitString(titleText, 50 - fontRendererObj.getStringWidth(titleText) / 2, 60, 40, 0x404040); - @Override - protected void drawGuiContainerBackgroundLayer(final float partialTicks, final int mouseX, final int mouseY) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glDisable(GL11.GL_LIGHTING); + if (showMode()) { + final String modeText = I18n.format(container.inventory.getInventoryName() + ".mode"); + fontRendererObj.drawString(modeText, 12 + (GuiButtonChiselMode.BUTTON_WIDTH - fontRendererObj.getStringWidth(modeText)) / 2, 122, 0x404040); + } - mc.getTextureManager().bindTexture(TEXTURE_RESOURCE_LOCATION); - // drawModalRectWithCustomSizedTexture: x, y, u, v, width, height, textureWidth, textureHeight - func_146110_a(guiLeft, guiTop, 0, 0, xSize, ySize, TEXTURE_WIDTH, TEXTURE_HEIGHT); + scrollBar.draw(this); + } - Slot main = (Slot) container.inventorySlots.get(InventoryChiselSelection.normalSlots); - if (main.getStack() == null) { - func_146110_a(guiLeft + 8, guiTop + 8, 0, GUI_HEIGHT, CHISEL_INPUT_SIZE, CHISEL_INPUT_SIZE, TEXTURE_WIDTH, TEXTURE_HEIGHT); - } - } + @Override + protected void drawGuiContainerBackgroundLayer(final float partialTicks, final int mouseX, final int mouseY) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); - @Override - protected void actionPerformed(final GuiButton button) { - if (button.id == 0) { - if (container.chisel != null && container.chisel.getItem() instanceof IAdvancedChisel) { - final IAdvancedChisel item = (IAdvancedChisel) container.chisel.getItem(); - currentMode = item.getNextMode(container.chisel, currentMode); - } else { - currentMode = ChiselMode.next(currentMode); - } - PacketHandler.INSTANCE.sendToServer(new MessageChiselMode(currentMode)); - } - super.actionPerformed(button); - } + mc.getTextureManager().bindTexture(TEXTURE_RESOURCE_LOCATION); + // drawModalRectWithCustomSizedTexture: x, y, u, v, width, height, textureWidth, textureHeight + func_146110_a(guiLeft, guiTop, 0, 0, xSize, ySize, TEXTURE_WIDTH, TEXTURE_HEIGHT); - @Override - protected void func_146977_a(final Slot slot) { - if (slot instanceof SlotChiselInput) { - GL11.glPushMatrix(); - GL11.glScalef(2, 2, 2); - slot.xDisplayPosition -= 16; - slot.yDisplayPosition -= 16; - super.func_146977_a(slot); - slot.xDisplayPosition += 16; - slot.yDisplayPosition += 16; - GL11.glPopMatrix(); - } else { - super.func_146977_a(slot); - } - } + Slot main = (Slot) container.inventorySlots.get(InventoryChiselSelection.normalSlots); + if (main.getStack() == null) { + func_146110_a(guiLeft + 8, guiTop + 8, 0, GUI_HEIGHT, CHISEL_INPUT_SIZE, CHISEL_INPUT_SIZE, TEXTURE_WIDTH, TEXTURE_HEIGHT); + } + } - public IChiselMode getCurrentMode() { - return currentMode; - } + @Override + protected void actionPerformed(final GuiButton button) { + if (button.id == 0) { + if (container.chisel != null && container.chisel.getItem() instanceof IAdvancedChisel) { + final IAdvancedChisel item = (IAdvancedChisel) container.chisel.getItem(); + currentMode = item.getNextMode(container.chisel, currentMode); + } else { + currentMode = ChiselMode.next(currentMode); + } + PacketHandler.INSTANCE.sendToServer(new MessageChiselMode(currentMode)); + } + super.actionPerformed(button); + } + + @Override + protected void func_146977_a(final Slot slot) { + if (slot instanceof SlotChiselInput) { + GL11.glPushMatrix(); + GL11.glScalef(2, 2, 2); + slot.xDisplayPosition -= 16; + slot.yDisplayPosition -= 16; + super.func_146977_a(slot); + slot.xDisplayPosition += 16; + slot.yDisplayPosition += 16; + GL11.glPopMatrix(); + } else { + super.func_146977_a(slot); + } + } + @Override + protected void mouseClickMove(int x, int y, int c, long d) { + if (scrollBar != null) { + int currentScroll = scrollBar.getCurrentScroll(); + scrollBar.click(x - guiLeft, y - guiTop); + if (currentScroll != scrollBar.getCurrentScroll()) { + menu.updateItems(); + } + } + super.mouseClickMove(x, y, c, d ); + } + + @Override + protected void mouseClicked(int xCoord, int yCoord, int btn) { + if (scrollBar != null) { + int currentScroll = scrollBar.getCurrentScroll(); + scrollBar.click(xCoord - guiLeft, yCoord - guiTop); + if (currentScroll != scrollBar.getCurrentScroll()) { + menu.updateItems(); + } + } + super.mouseClicked(xCoord, yCoord, btn); + } + + @Override + public void handleMouseInput() { + super.handleMouseInput(); + + int i = Mouse.getEventDWheel(); + if (i != 0 && scrollBar != null) { + int currentScroll = scrollBar.getCurrentScroll(); + scrollBar.wheel(i); + if (currentScroll != scrollBar.getCurrentScroll()) { + menu.updateItems(); + } + } + } + + public IChiselMode getCurrentMode() { + return currentMode; + } } diff --git a/src/main/java/team/chisel/client/gui/GuiScrollbar.java b/src/main/java/team/chisel/client/gui/GuiScrollbar.java new file mode 100644 index 00000000..821b5030 --- /dev/null +++ b/src/main/java/team/chisel/client/gui/GuiScrollbar.java @@ -0,0 +1,92 @@ +package team.chisel.client.gui; + +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import team.chisel.inventory.ContainerChisel; + +public class GuiScrollbar { + public static final ResourceLocation TEXTURE_RESOURCE_LOCATION = new ResourceLocation("minecraft", "textures/gui/container/creative_inventory/tabs.png"); + + private int displayX = 0; + private int displayY = 0; + private int width = 12; + private int height = 15; + + private int rowSize = 10; + private int rowsOnPage = 6; + + private int scrollHeight = height; + private ContainerChisel container; + + public void draw(GuiChisel g) { + // chisel2GuiScroll scroll button texture coordinates work strange (maybe because of alignment) so taking vanilla one + g.mc.getTextureManager().bindTexture(TEXTURE_RESOURCE_LOCATION); + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + if (getMaxScroll() == 0) { + g.drawTexturedModalRect(displayX, displayY, 232 + width, 0, width, height); + } else { + int offset = getCurrentScroll() * (scrollHeight - height) / getMaxScroll(); + g.drawTexturedModalRect(displayX, offset + displayY, 232, 0, width, height); + } + } + + public GuiScrollbar setScrollHeight(int scrollHeight) { + this.scrollHeight = scrollHeight; + return this; + } + + public GuiScrollbar setLeft(int displayX) { + this.displayX = displayX; + return this; + } + + public GuiScrollbar setTop(int displayY) { + this.displayY = displayY; + return this; + } + + private int getMaxScroll() { + int maxScroll = (container.inventory.getMaxScroll() + rowSize - 1) / rowSize - rowsOnPage; + + if (maxScroll <= 0) { + maxScroll = 0; + } + + return maxScroll; + } + + public int getCurrentScroll() { + return container.inventory.getCurrentScroll() / rowSize; + } + + private void setCurrentScroll(int scroll) { + container.inventory.setCurrentScroll(scroll * rowSize); + } + + private int applyRange(int scroll) { + return Math.max(Math.min(scroll, getMaxScroll()), 0); + } + + void click(int x, int y) { + if (getMaxScroll() == 0) { + return; + } + + if (x > displayX && x <= displayX + width) { + if (y > displayY && y <= displayY + scrollHeight) { + int currentScroll = (y - displayY); + currentScroll = Math.round(1.0f * currentScroll / scrollHeight) * getMaxScroll(); + setCurrentScroll(applyRange(currentScroll)); + } + } + } + + void wheel(int delta) { + setCurrentScroll(applyRange(getCurrentScroll() + Math.max(Math.min(-delta, 1), -1))); + } + + public void setContainerChisel(ContainerChisel container) { + this.container = container; + } +} diff --git a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java index a5c9c115..f205eaa3 100644 --- a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java +++ b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java @@ -1,5 +1,6 @@ package team.chisel.inventory; +import java.util.ArrayList; import java.util.List; import com.cricketcraft.chisel.api.IChiselItem; @@ -15,11 +16,12 @@ import net.minecraft.item.ItemTool; public class InventoryChiselSelection implements IInventory { - ItemStack chisel = null; + ItemStack chisel; public final static int normalSlots = 60; - public int activeVariations = 0; ContainerChisel container; ItemStack[] inventory; + private int currentScroll = 0; + private int maxScroll = 0; public InventoryChiselSelection(ItemStack c) { super(); @@ -28,6 +30,18 @@ public class InventoryChiselSelection implements IInventory { chisel = c; } + public void setCurrentScroll(int currentScroll) { + this.currentScroll = currentScroll; + } + + public int getCurrentScroll() { + return currentScroll; + } + + public int getMaxScroll() { + return maxScroll; + } + public void onInventoryUpdate(int slot) { } @@ -95,10 +109,10 @@ public class InventoryChiselSelection implements IInventory { } public void clearItems() { - activeVariations = 0; for (int i = 0; i < normalSlots; i++) { inventory[i] = null; } + maxScroll = 0; } public ItemStack getStackInSpecialSlot() { @@ -124,12 +138,18 @@ public class InventoryChiselSelection implements IInventory { if (!((IChiselItem) chisel.getItem()).canChisel(container.playerInventory.player.worldObj, chisel, General.getVariation(chiseledItem))) return; - List list = container.carving.getItemsForChiseling(chiseledItem); - - activeVariations = 0; - while (activeVariations < normalSlots && activeVariations < list.size()) { - if (Block.blockRegistry.getNameForObject(Block.getBlockFromItem(list.get(activeVariations).getItem())) != null) { - inventory[activeVariations] = list.get(activeVariations); + List list2 = container.carving.getItemsForChiseling(chiseledItem); + // DEBUG! REMOVE: + List list = new ArrayList<>(list2); + list.addAll(list2); + if (list.size() > 61) { + list = list.subList(0, 61); + } + maxScroll = list.size(); + int activeVariations = 0; + while (activeVariations < normalSlots && activeVariations + currentScroll < list.size()) { + if (Block.blockRegistry.getNameForObject(Block.getBlockFromItem(list.get(activeVariations + currentScroll).getItem())) != null) { + inventory[activeVariations] = list.get(activeVariations + currentScroll); activeVariations++; } } @@ -172,5 +192,4 @@ public class InventoryChiselSelection implements IInventory { return !(stack != null && (stack.getItem() instanceof ItemChisel)) && i == normalSlots; } - } diff --git a/src/main/java/team/chisel/inventory/SlotChiselInput.java b/src/main/java/team/chisel/inventory/SlotChiselInput.java index 24aaedc6..72a10897 100644 --- a/src/main/java/team/chisel/inventory/SlotChiselInput.java +++ b/src/main/java/team/chisel/inventory/SlotChiselInput.java @@ -30,6 +30,7 @@ public class SlotChiselInput extends Slot { return; super.onSlotChanged(); + selInventory.setCurrentScroll(0); selInventory.updateItems(); } From 3ae21285646b227a3c61fe2fef003682db2d9bd7 Mon Sep 17 00:00:00 2001 From: Skiftcha Date: Tue, 24 Nov 2020 08:21:52 +0300 Subject: [PATCH 2/6] sync with server --- .../team/chisel/client/gui/GuiChisel.java | 8 ---- .../team/chisel/client/gui/GuiScrollbar.java | 3 ++ .../inventory/InventoryChiselSelection.java | 5 ++- .../team/chisel/network/PacketHandler.java | 2 + .../network/message/MessageScrollUpdate.java | 42 +++++++++++++++++++ 5 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 src/main/java/team/chisel/network/message/MessageScrollUpdate.java diff --git a/src/main/java/team/chisel/client/gui/GuiChisel.java b/src/main/java/team/chisel/client/gui/GuiChisel.java index 017b755d..12b0c061 100644 --- a/src/main/java/team/chisel/client/gui/GuiChisel.java +++ b/src/main/java/team/chisel/client/gui/GuiChisel.java @@ -163,11 +163,7 @@ public class GuiChisel extends GuiContainer { @Override protected void mouseClicked(int xCoord, int yCoord, int btn) { if (scrollBar != null) { - int currentScroll = scrollBar.getCurrentScroll(); scrollBar.click(xCoord - guiLeft, yCoord - guiTop); - if (currentScroll != scrollBar.getCurrentScroll()) { - menu.updateItems(); - } } super.mouseClicked(xCoord, yCoord, btn); } @@ -178,11 +174,7 @@ public class GuiChisel extends GuiContainer { int i = Mouse.getEventDWheel(); if (i != 0 && scrollBar != null) { - int currentScroll = scrollBar.getCurrentScroll(); scrollBar.wheel(i); - if (currentScroll != scrollBar.getCurrentScroll()) { - menu.updateItems(); - } } } diff --git a/src/main/java/team/chisel/client/gui/GuiScrollbar.java b/src/main/java/team/chisel/client/gui/GuiScrollbar.java index 821b5030..87cb0a21 100644 --- a/src/main/java/team/chisel/client/gui/GuiScrollbar.java +++ b/src/main/java/team/chisel/client/gui/GuiScrollbar.java @@ -3,6 +3,8 @@ package team.chisel.client.gui; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import team.chisel.inventory.ContainerChisel; +import team.chisel.network.PacketHandler; +import team.chisel.network.message.MessageScrollUpdate; public class GuiScrollbar { public static final ResourceLocation TEXTURE_RESOURCE_LOCATION = new ResourceLocation("minecraft", "textures/gui/container/creative_inventory/tabs.png"); @@ -62,6 +64,7 @@ public class GuiScrollbar { private void setCurrentScroll(int scroll) { container.inventory.setCurrentScroll(scroll * rowSize); + PacketHandler.INSTANCE.sendToServer(new MessageScrollUpdate(scroll * rowSize)); } private int applyRange(int scroll) { diff --git a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java index f205eaa3..80946745 100644 --- a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java +++ b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java @@ -31,7 +31,10 @@ public class InventoryChiselSelection implements IInventory { } public void setCurrentScroll(int currentScroll) { - this.currentScroll = currentScroll; + if (this.currentScroll != currentScroll) { + this.currentScroll = currentScroll; + updateItems(); + } } public int getCurrentScroll() { diff --git a/src/main/java/team/chisel/network/PacketHandler.java b/src/main/java/team/chisel/network/PacketHandler.java index b95ebe31..52e415ef 100644 --- a/src/main/java/team/chisel/network/PacketHandler.java +++ b/src/main/java/team/chisel/network/PacketHandler.java @@ -5,6 +5,7 @@ import team.chisel.network.message.MessageAutoChisel; import team.chisel.network.message.MessageChiselMode; import team.chisel.network.message.MessageChiselSound; import team.chisel.network.message.MessagePresentConnect; +import team.chisel.network.message.MessageScrollUpdate; import team.chisel.network.message.MessageSlotUpdate; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.relauncher.Side; @@ -21,5 +22,6 @@ public class PacketHandler { INSTANCE.registerMessage(MessageAutoChisel.Handler.class, MessageAutoChisel.class, id++, Side.CLIENT); INSTANCE.registerMessage(MessageChiselMode.Handler.class, MessageChiselMode.class, id++, Side.SERVER); INSTANCE.registerMessage(MessagePresentConnect.Handler.class, MessagePresentConnect.class, id++, Side.CLIENT); + INSTANCE.registerMessage(MessageScrollUpdate.Handler.class, MessageScrollUpdate.class, id++, Side.SERVER); } } \ No newline at end of file diff --git a/src/main/java/team/chisel/network/message/MessageScrollUpdate.java b/src/main/java/team/chisel/network/message/MessageScrollUpdate.java new file mode 100644 index 00000000..f565541a --- /dev/null +++ b/src/main/java/team/chisel/network/message/MessageScrollUpdate.java @@ -0,0 +1,42 @@ +package team.chisel.network.message; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; +import net.minecraft.inventory.Container; +import team.chisel.inventory.ContainerChisel; + +public class MessageScrollUpdate implements IMessage { + + private int currentScroll; + + public MessageScrollUpdate() { + } + + public MessageScrollUpdate(int scroll) { + currentScroll = scroll; + } + + @Override + public void fromBytes(ByteBuf buf) { + currentScroll = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(currentScroll); + } + + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(MessageScrollUpdate message, MessageContext ctx) { + Container container = ctx.getServerHandler().playerEntity.openContainer; + if (container instanceof ContainerChisel) { + ((ContainerChisel) container).inventory.setCurrentScroll(message.currentScroll); + } + return null; + } + } +} From 587afa8e1d86891a346da3137af8e379228e2c45 Mon Sep 17 00:00:00 2001 From: Skiftcha Date: Tue, 24 Nov 2020 09:10:48 +0300 Subject: [PATCH 3/6] adjust scrolling --- src/main/java/team/chisel/client/gui/GuiScrollbar.java | 4 ++-- .../team/chisel/inventory/InventoryChiselSelection.java | 8 +------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/java/team/chisel/client/gui/GuiScrollbar.java b/src/main/java/team/chisel/client/gui/GuiScrollbar.java index 87cb0a21..7854f983 100644 --- a/src/main/java/team/chisel/client/gui/GuiScrollbar.java +++ b/src/main/java/team/chisel/client/gui/GuiScrollbar.java @@ -78,8 +78,8 @@ public class GuiScrollbar { if (x > displayX && x <= displayX + width) { if (y > displayY && y <= displayY + scrollHeight) { - int currentScroll = (y - displayY); - currentScroll = Math.round(1.0f * currentScroll / scrollHeight) * getMaxScroll(); + int currentScroll = (y - displayY - height / 2); + currentScroll = Math.round(1.0f * currentScroll * getMaxScroll() / (scrollHeight - height)); setCurrentScroll(applyRange(currentScroll)); } } diff --git a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java index 80946745..adab8d9f 100644 --- a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java +++ b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java @@ -141,13 +141,7 @@ public class InventoryChiselSelection implements IInventory { if (!((IChiselItem) chisel.getItem()).canChisel(container.playerInventory.player.worldObj, chisel, General.getVariation(chiseledItem))) return; - List list2 = container.carving.getItemsForChiseling(chiseledItem); - // DEBUG! REMOVE: - List list = new ArrayList<>(list2); - list.addAll(list2); - if (list.size() > 61) { - list = list.subList(0, 61); - } + List list = container.carving.getItemsForChiseling(chiseledItem); maxScroll = list.size(); int activeVariations = 0; while (activeVariations < normalSlots && activeVariations + currentScroll < list.size()) { From 346a818a5ac64319a67e2dc055c034c1611ad90a Mon Sep 17 00:00:00 2001 From: Skiftcha Date: Tue, 24 Nov 2020 09:26:33 +0300 Subject: [PATCH 4/6] small cleanup --- .../java/team/chisel/client/gui/GuiChisel.java | 15 ++++----------- .../inventory/InventoryChiselSelection.java | 1 - .../java/team/chisel/network/PacketHandler.java | 2 +- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/main/java/team/chisel/client/gui/GuiChisel.java b/src/main/java/team/chisel/client/gui/GuiChisel.java index 12b0c061..bc7dc54f 100644 --- a/src/main/java/team/chisel/client/gui/GuiChisel.java +++ b/src/main/java/team/chisel/client/gui/GuiChisel.java @@ -148,23 +148,16 @@ public class GuiChisel extends GuiContainer { super.func_146977_a(slot); } } + @Override protected void mouseClickMove(int x, int y, int c, long d) { - if (scrollBar != null) { - int currentScroll = scrollBar.getCurrentScroll(); - scrollBar.click(x - guiLeft, y - guiTop); - if (currentScroll != scrollBar.getCurrentScroll()) { - menu.updateItems(); - } - } - super.mouseClickMove(x, y, c, d ); + scrollBar.click(x - guiLeft, y - guiTop); + super.mouseClickMove(x, y, c, d); } @Override protected void mouseClicked(int xCoord, int yCoord, int btn) { - if (scrollBar != null) { - scrollBar.click(xCoord - guiLeft, yCoord - guiTop); - } + scrollBar.click(xCoord - guiLeft, yCoord - guiTop); super.mouseClicked(xCoord, yCoord, btn); } diff --git a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java index adab8d9f..ac67c85e 100644 --- a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java +++ b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java @@ -1,6 +1,5 @@ package team.chisel.inventory; -import java.util.ArrayList; import java.util.List; import com.cricketcraft.chisel.api.IChiselItem; diff --git a/src/main/java/team/chisel/network/PacketHandler.java b/src/main/java/team/chisel/network/PacketHandler.java index 52e415ef..19e69852 100644 --- a/src/main/java/team/chisel/network/PacketHandler.java +++ b/src/main/java/team/chisel/network/PacketHandler.java @@ -24,4 +24,4 @@ public class PacketHandler { INSTANCE.registerMessage(MessagePresentConnect.Handler.class, MessagePresentConnect.class, id++, Side.CLIENT); INSTANCE.registerMessage(MessageScrollUpdate.Handler.class, MessageScrollUpdate.class, id++, Side.SERVER); } -} \ No newline at end of file +} From 48f5e6fec2e303533c93f98d430cc2160dc3aa1c Mon Sep 17 00:00:00 2001 From: Skiftcha Date: Tue, 24 Nov 2020 17:28:56 +0300 Subject: [PATCH 5/6] disable chiseling by scrolling over itemstack --- src/main/java/team/chisel/compat/Compatibility.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/team/chisel/compat/Compatibility.java b/src/main/java/team/chisel/compat/Compatibility.java index 509e47c4..ef44d114 100644 --- a/src/main/java/team/chisel/compat/Compatibility.java +++ b/src/main/java/team/chisel/compat/Compatibility.java @@ -5,9 +5,11 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import codechicken.nei.api.GuiInfo; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import team.chisel.carving.Carving; +import team.chisel.client.gui.GuiChisel; import team.chisel.utils.RecipeUtil; import com.cricketcraft.chisel.api.carving.ICarvingGroup; @@ -86,6 +88,10 @@ public class Compatibility { if (Loader.isModLoaded("EE3")) { loadEE3Values(); } + if (Loader.isModLoaded("NotEnoughItems")) { + // disable chiseling by scrolling over itemstack + GuiInfo.customSlotGuis.add(GuiChisel.class); + } } From f728eb1a15361454675869fb02a77b048f63df53 Mon Sep 17 00:00:00 2001 From: Skiftcha Date: Tue, 24 Nov 2020 17:29:26 +0300 Subject: [PATCH 6/6] fix scrolling issues due to container updates from server --- .../team/chisel/inventory/InventoryChiselSelection.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java index ac67c85e..709f6899 100644 --- a/src/main/java/team/chisel/inventory/InventoryChiselSelection.java +++ b/src/main/java/team/chisel/inventory/InventoryChiselSelection.java @@ -167,8 +167,11 @@ public class InventoryChiselSelection implements IInventory { @Override public void setInventorySlotContents(int slot, ItemStack stack) { - inventory[slot] = stack; - updateInventoryState(slot); + // we do not want external chisel variant updates + if (slot == normalSlots) { + inventory[slot] = stack; + updateInventoryState(slot); + } } @Override