Compare commits

..
Author SHA1 Message Date
slprime a7683b885d Add another bookmark view mode (#261)
* add another bookmark view mode

* enum BookmarkViewMode
2022-06-23 00:03:29 +02:00
8 changed files with 359 additions and 116 deletions

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
# NotEnoughItems Unofficial - By the GTNH Team
A continuation of NotEnoughItems for 1.7.10 by the developers of Gregtech: New Horizons modpack, with features either inspired and/or backported from JustEnoughItems.
A continuation of NotEnoughItems for 1.7.10 by the developers of Gregtech: New Horizons modpack, with features either inspired and/or backported from JustEnoughItems
We've tested this against all of the mods included in GTNH, as well as a limited set of other mods (like Reika's mods). Every effort has been made to maintain backwards compatibility, however the focus is on the mods contained in the GTNH modpack.
+281 -63
View File
@@ -21,12 +21,12 @@ import org.lwjgl.opengl.GL11;
import javax.annotation.Nullable;
import static codechicken.nei.NEIClientUtils.translate;
import static codechicken.lib.gui.GuiDraw.getMousePosition;
import static codechicken.lib.gui.GuiDraw.drawRect;
import java.awt.Point;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
@@ -52,7 +52,7 @@ public class BookmarkPanel extends PanelWidget
public Label namespaceLabel;
protected ArrayList<BookmarkGrid> namespaces = new ArrayList<>();
protected List<BookmarkGrid> namespaces = new ArrayList<>();
protected int activeNamespaceIndex = 0;
@@ -74,10 +74,152 @@ public class BookmarkPanel extends PanelWidget
}
public static enum BookmarkViewMode
{
DEFAULT, TODO_LIST
}
protected static class BookmarkGrid extends ItemsGrid
{
protected List<List<Integer>> gridMask;
protected List<BookmarkStackMeta> metadata = new ArrayList<>();
protected BookmarkViewMode viewMode = BookmarkViewMode.DEFAULT;
protected boolean[] todoSpaces;
protected int todoItemsCount = 0;
public void setViewMode(BookmarkViewMode mode)
{
if (viewMode == mode) {
return;
}
viewMode = mode;
if (mode == BookmarkViewMode.DEFAULT) {
sortIngredients(false);
todoItemsCount = 0;
gridMask = null;
}
onGridChanged();
}
public BookmarkViewMode getViewMode()
{
return viewMode;
}
@Override
public int getNumPages()
{
if (gridMask != null) {
return gridMask.size();
}
return super.getNumPages();
}
@Override
protected List<Integer> getMask()
{
if (gridMask != null) {
return gridMask.size() > page? gridMask.get(page): new ArrayList<>();
}
return super.getMask();
}
private void sortIngredients(final boolean forward)
{
BookmarkStackMeta meta;
int dir = forward? 1: -1;
for (int i = 0; i < realItems.size(); i++) {
meta = metadata.get(i);
if (meta.recipeId != null && !meta.ingredient) {
int shift = 0;
for (int j = i + 1; j < realItems.size(); j++) {
if (meta.recipeId.equals(metadata.get(j).recipeId)) {
if (i + shift + dir != j) {
realItems.add(i + shift + Math.max(dir, 0), realItems.remove(j));
metadata.add(i + shift + Math.max(dir, 0), metadata.remove(j));
}
shift++;
}
}
for (int j = i + shift - 1; j >= 0; j--) {
if (meta.recipeId.equals(metadata.get(j).recipeId)) {
if (i + shift + dir != j) {
realItems.add(i + shift + Math.min(dir, 0), realItems.remove(j));
metadata.add(i + shift + Math.min(dir, 0), metadata.remove(j));
}
shift--;
}
}
i += Math.max(0, shift);
}
}
}
private void generateToDoSpaces()
{
todoItemsCount = 0;
gridMask = new ArrayList<>();
if (rows * columns == 0) {
return;
}
BookmarkStackMeta meta;
int size = size();
int idx = 0;
while (idx < size) {
ArrayList<Integer> pmask = new ArrayList<>();
for (int i = 0, perPage = rows * columns; i < perPage && idx < size; i++) {
if (isInvalidSlot(i)) {
pmask.add(null);
} else {
meta = getMetadata(idx);
if (idx > 0 && ((i % columns) == 0) == (meta.recipeId != null && meta.ingredient && meta.recipeId.equals(getRecipeId(idx - 1)))) {
pmask.add(null);
} else {
pmask.add(idx++);
if ((i % columns) == 0) {
todoItemsCount++;
}
}
}
}
gridMask.add(pmask);
}
}
protected void onGridChanged()
{
super.onGridChanged();
if (getViewMode() == BookmarkViewMode.TODO_LIST) {
sortIngredients(true);
generateToDoSpaces();
}
}
public int indexOf(ItemStack stackA, BookmarkRecipeId recipeId)
{
final boolean useNBT = NEIClientConfig.useNBTInBookmarks();
@@ -101,20 +243,20 @@ public class BookmarkPanel extends PanelWidget
{
realItems.add(stackA);
metadata.add(meta);
refreshBuffer = true;
onGridChanged();
}
public void replaceItem(int idx, ItemStack stack)
{
realItems.set(idx, stack);
refreshBuffer = true;
onGridChanged();
}
public void removeRecipe(int idx, boolean removeFullRecipe)
{
final BookmarkStackMeta meta = getMetadata(idx);
if (removeFullRecipe && meta.recipeId != null) {
if (meta.recipeId != null && (removeFullRecipe || !meta.ingredient)) {
removeRecipe(meta.recipeId);
} else {
removeItem(idx);
@@ -141,7 +283,7 @@ public class BookmarkPanel extends PanelWidget
{
realItems.remove(idx);
metadata.remove(idx);
refreshBuffer = true;
onGridChanged();
return true;
}
@@ -167,23 +309,26 @@ public class BookmarkPanel extends PanelWidget
{
realItems.add(dst, realItems.remove(src));
metadata.add(dst, metadata.remove(src));
refreshBuffer = true;
onGridChanged();
}
private boolean isPartOfFocusedRecipe(ItemPanelSlot focused, int myIdx) {
return (NEIClientUtils.shiftKey()
&& LayoutManager.bookmarkPanel.sortedStackIndex == -1
private boolean isPartOfFocusedRecipe(ItemPanelSlot focused, int myIdx)
{
return NEIClientUtils.shiftKey()
&& focused != null
&& LayoutManager.bookmarkPanel.sortedStackIndex == -1
&& getRecipeId(focused.slotIndex) != null
&& getRecipeId(myIdx) != null
&& getRecipeId(focused.slotIndex).equals(getRecipeId(myIdx)));
&& getRecipeId(focused.slotIndex).equals(getRecipeId(myIdx));
}
@Override
protected void drawSlotOutline(@Nullable ItemPanelSlot focus, int idx, Rectangle4i rect) {
if(LayoutManager.bookmarkPanel.sortedNamespaceIndex == LayoutManager.bookmarkPanel.activeNamespaceIndex && LayoutManager.bookmarkPanel.sortedStackIndex == idx) {
protected void drawSlotOutline(@Nullable ItemPanelSlot focus, int idx, Rectangle4i rect)
{
if (LayoutManager.bookmarkPanel.sortedNamespaceIndex == LayoutManager.bookmarkPanel.activeNamespaceIndex && LayoutManager.bookmarkPanel.sortedStackIndex == idx) {
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);//highlight
} else if(focus != null) {
} else if (focus != null) {
BookmarkStackMeta meta = getMetadata(idx);
if (isPartOfFocusedRecipe(focus, idx)) {
drawRect(rect.x, rect.y, rect.w, rect.h, meta.ingredient? 0x88b3b300: 0x88009933);//highlight recipe
@@ -283,7 +428,13 @@ public class BookmarkPanel extends PanelWidget
@Override
public String getLabelText()
{
return String.format("(%d/%d) [%d]", getPage(), Math.max(1, getNumPages()), grid.size());
int size = grid.size();
if (((BookmarkGrid) grid).getViewMode() == BookmarkViewMode.TODO_LIST) {
size = ((BookmarkGrid) grid).todoItemsCount;
}
return String.format("(%d/%d) [%d]", getPage(), Math.max(1, getNumPages()), size);
}
@@ -325,7 +476,7 @@ public class BookmarkPanel extends PanelWidget
BGrid.removeRecipe(recipeId);
for (PositionedStack stack : ingredients) {
for (PositionedStack stack : ingredients) {
final NBTTagCompound nbTag = StackInfo.itemStackToNBT(stack.item, saveStackSize);
if (unique.get(nbTag) == null) {
@@ -337,7 +488,7 @@ public class BookmarkPanel extends PanelWidget
}
for (NBTTagCompound nbTag : sorted) {
for (NBTTagCompound nbTag : sorted) {
nbTag.setInteger("Count", nbTag.getInteger("Count") * unique.get(nbTag));
BGrid.addItem(StackInfo.loadFromNBT(nbTag), new BookmarkStackMeta(recipeId, (saveStackSize ? 1: -1) * nbTag.getInteger("Count"), true, nbTag.hasKey("gtFluidName")));
}
@@ -346,7 +497,6 @@ public class BookmarkPanel extends PanelWidget
BGrid.addItem(normalizedA, new BookmarkStackMeta(recipeId, (saveStackSize ? 1: -1) * nbTagA.getInteger("Count"), false, nbTagA.hasKey("gtFluidName")));
}
}
@@ -515,9 +665,10 @@ public class BookmarkPanel extends PanelWidget
for (int grpIdx = 0; grpIdx < namespaces.size() - 1; grpIdx++) {
final BookmarkGrid grid = namespaces.get(grpIdx);
if (grpIdx > 0) {
strings.add("");//namespace separator; ignore first namespace
}
JsonObject settings = new JsonObject();
settings.add("viewmode", new JsonPrimitive(grid.getViewMode().toString()));
settings.add("active", new JsonPrimitive(activeNamespaceIndex == grpIdx));
strings.add("; " + NBTJson.toJson(settings));
for (int idx = 0; idx < grid.size(); idx++) {
@@ -579,19 +730,34 @@ public class BookmarkPanel extends PanelWidget
namespaces.clear();
namespaces.add(new BookmarkGrid());
activeNamespaceIndex = 0;
activeNamespaceIndex = -1;
final JsonParser parser = new JsonParser();
int namespaceIndex = 0;
for (String itemStr: itemStrings) {
try {
if (itemStr.isEmpty()) {
itemStr = "; {}";
}
if (namespaces.get(activeNamespaceIndex).size() > 0) {
if (itemStr.startsWith("; ")) {
JsonObject settings = parser.parse(itemStr.substring(2)).getAsJsonObject();
if (namespaces.get(namespaceIndex).size() > 0) {
//do not create empty namespaces
namespaces.add(new BookmarkGrid());
activeNamespaceIndex++;
namespaceIndex++;
}
if (settings.get("viewmode") != null) {
namespaces.get(namespaceIndex).setViewMode(BookmarkViewMode.valueOf(settings.get("viewmode").getAsString()));
}
if (settings.get("active") != null && settings.get("active").getAsBoolean()) {
activeNamespaceIndex = namespaceIndex;
}
continue;
@@ -615,7 +781,7 @@ public class BookmarkPanel extends PanelWidget
if (itemStack != null) {
namespaces.get(activeNamespaceIndex).addItem(itemStack, new BookmarkStackMeta(
namespaces.get(namespaceIndex).addItem(itemStack, new BookmarkStackMeta(
recipeId,
jsonObject.has("factor")? jsonObject.get("factor").getAsInt(): 0,
jsonObject.has("ingredient")? jsonObject.get("ingredient").getAsBoolean(): false,
@@ -630,8 +796,8 @@ public class BookmarkPanel extends PanelWidget
}
}
if (namespaces.get(activeNamespaceIndex).size() == 0) {
activeNamespaceIndex = Math.max(activeNamespaceIndex - 1, 0);
if (activeNamespaceIndex == -1) {
activeNamespaceIndex = namespaceIndex;
}
grid = namespaces.get(activeNamespaceIndex);
@@ -651,7 +817,7 @@ public class BookmarkPanel extends PanelWidget
{
final LayoutStyleMinecraft layout = (LayoutStyleMinecraft) LayoutManager.getLayoutStyle();
final int rows = (int) Math.ceil((double) layout.buttonCount / layout.numButtons);
final int diff = rows * 18 + getMarginTop(gui) - y;
final int diff = rows * BookmarkGrid.SLOT_SIZE + getMarginTop(gui) - y;
if (diff > 0) {
y += diff;
@@ -754,7 +920,7 @@ public class BookmarkPanel extends PanelWidget
return NEIServerUtils.copyStack(stack, amount);
}
@Override
public void mouseDragged(int mousex, int mousey, int button, long heldTime)
{
@@ -768,37 +934,59 @@ public class BookmarkPanel extends PanelWidget
if (stack != null && (mouseOverSlot == null || mouseOverSlot.slotIndex != mouseDownSlot || heldTime > 250)) {
sortedNamespaceIndex = activeNamespaceIndex;
sortedStackIndex = mouseDownSlot;
grid.refreshBuffer = true;
grid.onGridChanged();
}
} else {
if (mouseOverSlot == null && sortedNamespaceIndex != activeNamespaceIndex) {
mouseOverSlot = getNextSlot(mousex, mousey);
}
if (mouseOverSlot != null) {
if (sortedNamespaceIndex != activeNamespaceIndex) {
BookmarkGrid BGrid = namespaces.get(sortedNamespaceIndex);
BookmarkStackMeta meta = BGrid.getMetadata(sortedStackIndex);
ItemStack stack = BGrid.getItem(sortedStackIndex);
BGrid.removeItem(sortedStackIndex);
((BookmarkGrid) grid).addItem(stack, meta);
sortedNamespaceIndex = activeNamespaceIndex;
sortedStackIndex = grid.size() - 1;
if (sortedNamespaceIndex != activeNamespaceIndex) {
final BookmarkGrid hoverGrid = namespaces.get(activeNamespaceIndex);
final BookmarkGrid sortedGrid = namespaces.get(sortedNamespaceIndex);
if (mouseOverSlot == null) {
mouseOverSlot = getNextSlot(mousex, mousey, hoverGrid.getViewMode() == BookmarkViewMode.TODO_LIST);
}
if (mouseOverSlot.slotIndex != sortedStackIndex) {
((BookmarkGrid) grid).moveItem(sortedStackIndex, mouseOverSlot.slotIndex);
sortedStackIndex = mouseOverSlot.slotIndex;
if (mouseOverSlot != null) {
final ItemStack stack = sortedGrid.getItem(sortedStackIndex);
final BookmarkStackMeta meta = sortedGrid.getMetadata(sortedStackIndex);
sortedGrid.removeItem(sortedStackIndex);
hoverGrid.addItem(stack, meta);
sortedNamespaceIndex = activeNamespaceIndex;
sortedStackIndex = hoverGrid.indexOf(stack, meta.recipeId);
}
} else if (mouseOverSlot == null || mouseOverSlot.slotIndex != sortedStackIndex) {
final BookmarkGrid sortedGrid = namespaces.get(sortedNamespaceIndex);
if (mouseOverSlot != null && sortedGrid.getViewMode() == BookmarkViewMode.DEFAULT) {
sortedGrid.moveItem(sortedStackIndex, mouseOverSlot.slotIndex);
sortedStackIndex = mouseOverSlot.slotIndex;
} else if (sortedGrid.getViewMode() == BookmarkViewMode.TODO_LIST) {
final ItemStack stack = sortedGrid.getItem(sortedStackIndex);
final BookmarkStackMeta meta = sortedGrid.getMetadata(sortedStackIndex);
final boolean isIngredient = sortedStackIndex > 0 && meta.recipeId != null && meta.ingredient && meta.recipeId.equals(sortedGrid.getRecipeId(sortedStackIndex - 1));
if (!isIngredient) {
mouseOverSlot = getSlotMouseOver(grid.marginLeft + grid.paddingLeft, mousey);
if (mouseOverSlot != null && sortedStackIndex != mouseOverSlot.slotIndex) {
sortedGrid.moveItem(sortedStackIndex, mouseOverSlot.slotIndex);
sortedStackIndex = sortedGrid.indexOf(stack, meta.recipeId);
}
} else if (mouseOverSlot != null && meta.recipeId != null && sortedGrid.getMetadata(mouseOverSlot.slotIndex).ingredient && meta.recipeId.equals(sortedGrid.getRecipeId(mouseOverSlot.slotIndex))) {
sortedGrid.moveItem(sortedStackIndex, mouseOverSlot.slotIndex);
sortedStackIndex = sortedGrid.indexOf(stack, meta.recipeId);
}
}
}
}
}
return;
}
@@ -806,22 +994,21 @@ public class BookmarkPanel extends PanelWidget
super.mouseDragged(mousex, mousey, button, heldTime);
}
private ItemPanelSlot getNextSlot(int mousex, int mousey)
private ItemPanelSlot getNextSlot(int mousex, int mousey, boolean line)
{
int idx = grid.getPage() * grid.getPerPage() - grid.getPerPage();
int gSize = grid.size();
final List<Integer> mask = grid.getMask();
final int columns = grid.getColumns();
final int perPage = grid.getRows() * columns;
for (int i = 0; i < grid.getRows() * grid.getColumns() && idx <= gSize; i++) {
for (int i = mask.size(); i < perPage; i++) {
if (!grid.isInvalidSlot(i) && (!line || (i % columns) == 0)) {
if (!grid.isInvalidSlot(i)) {
if (idx == gSize && grid.getSlotRect(i).contains(mousex, mousey)) {
return new ItemPanelSlot(idx, null);
if (grid.getSlotRect(i).contains(mousex, mousey)) {
return new ItemPanelSlot(grid.size() - 1, null);
}
idx++;
return null;
}
}
return null;
@@ -840,6 +1027,37 @@ public class BookmarkPanel extends PanelWidget
super.postDraw(mousex, mousey);
}
@Override
public boolean handleClickExt(int mousex, int mousey, int button)
{
if (new Rectangle4i(pagePrev.x + pagePrev.w, pagePrev.y, pageNext.x - (pagePrev.x + pagePrev.w), pagePrev.h).contains(mousex, mousey)) {
final BookmarkGrid BGrid = (BookmarkGrid)grid;
if (BGrid.getViewMode() == BookmarkViewMode.DEFAULT) {
BGrid.setViewMode(BookmarkViewMode.TODO_LIST);
} else {
BGrid.setViewMode(BookmarkViewMode.DEFAULT);
}
saveBookmarks();
return true;
} else {
return super.handleClickExt(mousex, mousey, button);
}
}
@Override
public List<String> handleTooltip(int mx, int my, List<String> tooltip)
{
if (new Rectangle4i(pagePrev.x + pagePrev.w, pagePrev.y, pageNext.x - (pagePrev.x + pagePrev.w), pagePrev.h).contains(mx, my)) {
tooltip.add(translate("bookmark.viewmode.toggle.tip"));
}
return super.handleTooltip(mx, my, tooltip);
}
@Override
public void mouseUp(int mousex, int mousey, int button)
@@ -849,7 +1067,7 @@ public class BookmarkPanel extends PanelWidget
sortedNamespaceIndex = -1;
sortedStackIndex = -1;
mouseDownSlot = -1;
grid.refreshBuffer = true; /* make sure grid redraws the new item */
grid.onGridChanged(); /* make sure grid redraws the new item */
saveBookmarks();
} else {
super.mouseUp(mousex, mousey, button);
@@ -868,6 +1086,7 @@ public class BookmarkPanel extends PanelWidget
nextNamespace();
}
saveBookmarks();
return true;
}
@@ -900,7 +1119,6 @@ public class BookmarkPanel extends PanelWidget
shiftStackSize(slot.slotIndex, shift);
saveBookmarks();
return true;
}
+1 -1
View File
@@ -69,7 +69,7 @@ public class ItemPanel extends PanelWidget
if (newItems != null) {
realItems = newItems;
newItems = null;
refreshBuffer = true;
onGridChanged();
}
super.refresh(gui);
+69 -43
View File
@@ -17,6 +17,7 @@ import org.lwjgl.opengl.GL11;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static codechicken.lib.gui.GuiDraw.drawRect;
@@ -37,13 +38,9 @@ public class ItemsGrid
protected int page;
protected int perPage;
protected int firstIndex;
protected int numPages;
protected int rows;
protected int columns;
protected boolean[] validSlotMap;
protected boolean[] invalidSlotMap;
@Nullable
@@ -89,7 +86,11 @@ public class ItemsGrid
public int getNumPages()
{
return numPages;
if (perPage > 0) {
return (int) Math.ceil((float) realItems.size() / (float) perPage);
}
return 0;
}
public int getRows()
@@ -104,9 +105,6 @@ public class ItemsGrid
public void setGridSize(int mleft, int mtop, int w, int h)
{
if(width != w || height != h || mleft != marginLeft || mtop != marginTop)
refreshBuffer = true;
marginLeft = mleft;
marginTop = mtop;
@@ -122,13 +120,12 @@ public class ItemsGrid
public void shiftPage(int shift)
{
if (perPage == 0) {
numPages = 0;
page = 0;
return;
}
numPages = (int) Math.ceil((float) realItems.size() / (float) perPage);
final int numPages = getNumPages();
final int oldPage = page;
page += shift;
if (page >= numPages) {
@@ -140,8 +137,15 @@ public class ItemsGrid
}
page = Math.max(0, Math.min(page, numPages - 1));
if(shift != 0)
refreshBuffer = true;
if (page != oldPage) {
onGridChanged();
}
}
protected void onGridChanged()
{
refreshBuffer = true;
}
public void refresh(GuiContainer gui)
@@ -150,17 +154,22 @@ public class ItemsGrid
shiftPage(0);
}
private void updateGuiOverlapSlots(GuiContainer gui)
protected void updateGuiOverlapSlots(GuiContainer gui)
{
boolean[] oldSlotMap = invalidSlotMap;
final boolean[] oldSlotMap = invalidSlotMap;
final int oldRows = rows;
final int oldColumns = columns;
invalidSlotMap = new boolean[rows * columns];
perPage = columns * rows;
checkGuiOverlap(gui, 0, columns - 2, 1);
checkGuiOverlap(gui, columns - 1, 1, -1);
if(NEIClientConfig.shouldCacheItemRendering() && !Arrays.equals(oldSlotMap, invalidSlotMap)) {
refreshBuffer = true;
if (oldRows != rows || oldColumns != columns || !Arrays.equals(oldSlotMap, invalidSlotMap)) {
onGridChanged();
}
}
private void checkGuiOverlap(GuiContainer gui, int start, int end, int dir)
@@ -194,29 +203,45 @@ public class ItemsGrid
return new Rectangle4i(marginLeft + paddingLeft + column * SLOT_SIZE, marginTop + row * SLOT_SIZE, SLOT_SIZE, SLOT_SIZE);
}
public boolean isInvalidSlot(int idx)
public boolean isInvalidSlot(int index)
{
return invalidSlotMap[idx];
return invalidSlotMap[index];
}
protected List<Integer> getMask()
{
List<Integer> mask = new ArrayList<>();
int idx = page * perPage;
for (int i = 0; i < rows * columns && idx < size(); i++) {
mask.add(isInvalidSlot(i)? null: idx++);
}
return mask;
}
private void drawSlotOutlines(int mousex, int mousey)
{
ItemPanelSlot focused = getSlotMouseOver(mousex, mousey);
int idx = page * perPage;
for (int i = 0; i < rows * columns && idx < size(); i++) {
if(!invalidSlotMap[i]) {
drawSlotOutline(focused, idx, getSlotRect(i));
idx++;
final List<Integer> mask = getMask();
for (int i = 0; i < mask.size(); i++) {
if (mask.get(i) != null) {
drawSlotOutline(focused, mask.get(i), getSlotRect(i));
}
}
}
protected void drawSlotOutline(@Nullable ItemPanelSlot focused, int slotIdx, Rectangle4i rect)
{
if (focused != null && focused.slotIndex == slotIdx) {
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);//highlight
}
}
protected void drawSlotOutline(@Nullable ItemPanelSlot focused, int slotIdx, Rectangle4i rect) {
if(focused != null && focused.slotIndex == slotIdx)
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);//highlight
}
private void blitExistingBuffer() {
private void blitExistingBuffer()
{
Minecraft minecraft = Minecraft.getMinecraft();
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
@@ -241,7 +266,7 @@ public class ItemsGrid
}
boolean shouldCache = NEIClientConfig.shouldCacheItemRendering() && !PresetsWidget.inEditMode();
if(shouldCache) {
if (shouldCache) {
Minecraft minecraft = Minecraft.getMinecraft();
if (framebuffer == null) {
framebuffer = new Framebuffer(minecraft.displayWidth, minecraft.displayHeight, true);
@@ -269,11 +294,10 @@ public class ItemsGrid
GuiContainerManager.enableMatrixStackLogging();
int idx = page * perPage;
for (int i = 0; i < rows * columns && idx < size(); i++) {
if (!invalidSlotMap[i]) {
drawItem(getSlotRect(i), idx);
idx ++;
final List<Integer> mask = getMask();
for (int i = 0; i < mask.size(); i++) {
if (mask.get(i) != null) {
drawItem(getSlotRect(i), mask.get(i));
}
}
@@ -300,19 +324,21 @@ public class ItemsGrid
final int overRow = (int) ((mousey - marginTop) / SLOT_SIZE);
final int overColumn = (int) ((mousex - marginLeft - paddingLeft) / SLOT_SIZE);
final int slt = columns * overRow + overColumn;
int idx = page * perPage + slt;
if (overRow >= rows || overColumn >= columns) {
return null;
}
for (int i = 0; i < slt; i++) {
if (invalidSlotMap[i]) {
idx--;
}
final List<Integer> mask = getMask();
if (mask.size() > slt && mask.get(slt) != null) {
final int idx = mask.get(slt);
final ItemStack stack = getItem(idx).copy();
return new ItemPanelSlot(idx, stack);
}
return idx < size()? new ItemPanelSlot(idx, realItems.get(idx)): null;
return null;
}
public boolean contains(int px, int py)
@@ -326,7 +352,7 @@ public class ItemsGrid
final int c = (int) ((px - marginLeft - paddingLeft) / SLOT_SIZE);
final int slt = columns * r + c;
return r >= rows || c >= columns || !invalidSlotMap[slt];
return r >= rows || c >= columns || !isInvalidSlot(slt);
}
}
@@ -358,12 +358,14 @@ public abstract class PanelWidget extends Widget
return grid.getSlotMouseOver(mousex, mousey);
}
public int getPage() {
return grid.page + 1;
public int getPage()
{
return grid.getPage();
}
public int getNumPages() {
return grid.numPages;
public int getNumPages()
{
return grid.getNumPages();
}
@Override
@@ -1,6 +1,5 @@
package codechicken.nei.recipe;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.ItemPanels;
import codechicken.nei.LayoutManager;
import codechicken.nei.NEIClientConfig;
@@ -11,7 +10,6 @@ import codechicken.nei.guihook.IContainerInputHandler;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
import java.awt.*;
import java.util.List;
public class RecipeItemInputHandler implements IContainerInputHandler {
@@ -93,7 +93,6 @@ gt.recipe.arcfurnace,GregTech,gregtech:gt.blockmachines:651,,gregtech,TRUE,grega
gt.recipe.assembler,GregTech,gregtech:gt.blockmachines:211,,gregtech,TRUE,gregapi_post,6,145,166,2,,,,,,
gt.recipe.autoclave,GregTech,gregtech:gt.blockmachines:571,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.blastfurnace,GregTech,gregtech:gt.blockmachines:1000,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.plasmaforge,GregTech,gregtech:gt.blockmachines:1004,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.brewer,GregTech,gregtech:gt.blockmachines:491,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.byproductlist,GregTech,gregtech:gt.metaitem.01:2019,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.canner,GregTech,gregtech:gt.blockmachines:231,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
@@ -124,7 +123,6 @@ gt.recipe.fluidheater,GregTech,gregtech:gt.blockmachines:621,,gregtech,TRUE,greg
gt.recipe.fluidnaquadahreactor,GregTech,gregtech:gt.blockmachines:1192,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.fluidsolidifier,GregTech,gregtech:gt.blockmachines:521,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.fusionreactor,GregTech,gregtech:gt.blockmachines:1193,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.complexfusionreactor,GregTech,gregtech:gt.blockmachines:1193,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.gasturbinefuel,GregTech,gregtech:gt.blockmachines:1115,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.hammer,GregTech,gregtech:gt.blockmachines:611,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
gt.recipe.hugenaquadahreactor,GregTech,gregtech:gt.blockmachines:1188,,gregtech,TRUE,gregapi_post,6,135,166,2,,,,,,
1 handler modName itemName nbtInfo modId modRequired excludedModId yShift handlerHeight handlerWidth maxRecipesPerPage imageResource imageX imageY imageWidth imageHeight itemNotes
93 gt.recipe.assembler GregTech gregtech:gt.blockmachines:211 gregtech TRUE gregapi_post 6 145 166 2
94 gt.recipe.autoclave GregTech gregtech:gt.blockmachines:571 gregtech TRUE gregapi_post 6 135 166 2
95 gt.recipe.blastfurnace GregTech gregtech:gt.blockmachines:1000 gregtech TRUE gregapi_post 6 135 166 2
gt.recipe.plasmaforge GregTech gregtech:gt.blockmachines:1004 gregtech TRUE gregapi_post 6 135 166 2
96 gt.recipe.brewer GregTech gregtech:gt.blockmachines:491 gregtech TRUE gregapi_post 6 135 166 2
97 gt.recipe.byproductlist GregTech gregtech:gt.metaitem.01:2019 gregtech TRUE gregapi_post 6 135 166 2
98 gt.recipe.canner GregTech gregtech:gt.blockmachines:231 gregtech TRUE gregapi_post 6 135 166 2
123 gt.recipe.fluidnaquadahreactor GregTech gregtech:gt.blockmachines:1192 gregtech TRUE gregapi_post 6 135 166 2
124 gt.recipe.fluidsolidifier GregTech gregtech:gt.blockmachines:521 gregtech TRUE gregapi_post 6 135 166 2
125 gt.recipe.fusionreactor GregTech gregtech:gt.blockmachines:1193 gregtech TRUE gregapi_post 6 135 166 2
gt.recipe.complexfusionreactor GregTech gregtech:gt.blockmachines:1193 gregtech TRUE gregapi_post 6 135 166 2
126 gt.recipe.gasturbinefuel GregTech gregtech:gt.blockmachines:1115 gregtech TRUE gregapi_post 6 135 166 2
127 gt.recipe.hammer GregTech gregtech:gt.blockmachines:611 gregtech TRUE gregapi_post 6 135 166 2
128 gt.recipe.hugenaquadahreactor GregTech gregtech:gt.blockmachines:1188 gregtech TRUE gregapi_post 6 135 166 2
@@ -8,6 +8,7 @@ nei.key.ctrl.mac=CMD
nei.bookmark.toggle=Bookmarks
nei.bookmark.toggle.tip=Toggle visibility of the Bookmark Panel
nei.bookmark.viewmode.toggle.tip=Toggle Bookmark View Mode
nei.enchant=Enchant
nei.enchant.level=Level