diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java index 92b80b99f..949a2afca 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ClientConfig.java @@ -32,7 +32,7 @@ public class ClientConfig { private final ForgeConfigSpec.IntValue maxRowsStretch; private final ForgeConfigSpec.BooleanValue detailedTooltip; private final ForgeConfigSpec.BooleanValue largeFont; - private final ForgeConfigSpec.BooleanValue sortGrid; + private final ForgeConfigSpec.BooleanValue preventSortingWhileShiftIsDown; public Grid() { builder.push("grid"); @@ -40,7 +40,7 @@ public class ClientConfig { maxRowsStretch = builder.comment("The maximum amount of rows that the Grid can show when stretched").defineInRange("maxRowsStretch", Integer.MAX_VALUE, 3, Integer.MAX_VALUE); detailedTooltip = builder.comment("Whether the Grid should display a detailed tooltip when hovering over an item or fluid").define("detailedTooltip", true); largeFont = builder.comment("Whether the Grid should use a large font for stack quantity display").define("largeFont", false); - sortGrid = builder.comment("Whether the grid should prevent sorting while Shift is held down").define("sortGrid", true); + preventSortingWhileShiftIsDown = builder.comment("Whether the Grid should prevent sorting while the shift key is held down").define("preventSortingWhileShiftIsDown", true); builder.pop(); } @@ -57,8 +57,8 @@ public class ClientConfig { return largeFont.get(); } - public boolean getSortGrid() { - return sortGrid.get(); + public boolean getPreventSortingWhileShiftIsDown() { + return preventSortingWhileShiftIsDown.get(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java index c0256f2db..4d3f58406 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.screen; import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.button.Button; import net.minecraft.client.resources.I18n; @@ -58,7 +59,7 @@ public abstract class AmountSpecifyingScreen extends BaseSc amountField.setEnableBackgroundDrawing(false); amountField.setVisible(true); amountField.setText(String.valueOf(getDefaultAmount())); - amountField.setTextColor(16777215); + amountField.setTextColor(RenderUtils.DEFAULT_COLOR); amountField.setCanLoseFocus(false); amountField.changeFocus(true); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java index 641015f30..84865f55f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java @@ -131,7 +131,7 @@ public abstract class BaseScreen extends ContainerScreen FluidRenderer.INSTANCE.render(guiLeft + slot.xPos, guiTop + slot.yPos, stack); if (((FluidFilterSlot) slot).isSizeAllowed()) { - renderQuantity(guiLeft + slot.xPos, guiTop + slot.yPos, API.instance().getQuantityFormatter().formatInBucketForm(stack.getAmount())); + renderQuantity(guiLeft + slot.xPos, guiTop + slot.yPos, API.instance().getQuantityFormatter().formatInBucketForm(stack.getAmount()), RenderUtils.DEFAULT_COLOR); GL11.glDisable(GL11.GL_LIGHTING); } @@ -272,10 +272,10 @@ public abstract class BaseScreen extends ContainerScreen } public void renderItem(int x, int y, ItemStack stack) { - renderItem(x, y, stack, false, null); + renderItem(x, y, stack, false, null, RenderUtils.DEFAULT_COLOR); } - public void renderItem(int x, int y, ItemStack stack, boolean overlay, @Nullable String text) { + public void renderItem(int x, int y, ItemStack stack, boolean overlay, @Nullable String text, int textColor) { try { itemRenderer.zLevel = 200.0F; @@ -286,7 +286,7 @@ public abstract class BaseScreen extends ContainerScreen } if (text != null) { - renderQuantity(x, y, text); + renderQuantity(x, y, text, textColor); } itemRenderer.zLevel = 0.0F; @@ -295,7 +295,7 @@ public abstract class BaseScreen extends ContainerScreen } } - public void renderQuantity(int x, int y, String qty) { + public void renderQuantity(int x, int y, String qty, int color) { boolean large = minecraft.getForceUnicodeFont() || RS.CLIENT_CONFIG.getGrid().getLargeFont(); GlStateManager.pushMatrix(); @@ -312,7 +312,7 @@ public abstract class BaseScreen extends ContainerScreen GlStateManager.blendFunc(770, 771); GlStateManager.disableDepthTest(); - font.drawStringWithShadow(qty, (large ? 16 : 30) - font.getStringWidth(qty), large ? 8 : 22, 16777215); + font.drawStringWithShadow(qty, (large ? 16 : 30) - font.getStringWidth(qty), large ? 8 : 22, color); GlStateManager.enableDepthTest(); GlStateManager.enableTexture(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/DetectorScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/DetectorScreen.java index c67b6d424..8d1d1ed92 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/DetectorScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/DetectorScreen.java @@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.ExactModeSideBut import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.TypeSideButton; import com.raoulvdberge.refinedstorage.tile.DetectorTile; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; +import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.PlayerInventory; @@ -34,7 +35,7 @@ public class DetectorScreen extends BaseScreen { amountField.setVisible(true); amountField.setCanLoseFocus(true); amountField.setFocused2(false); - amountField.setTextColor(16777215); + amountField.setTextColor(RenderUtils.DEFAULT_COLOR); amountField.func_212954_a(value -> { try { int result = Integer.parseInt(value); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/FilterScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/FilterScreen.java index 3f6d5f56a..ed34afd25 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/FilterScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/FilterScreen.java @@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.container.FilterContainer; import com.raoulvdberge.refinedstorage.item.FilterItem; import com.raoulvdberge.refinedstorage.network.FilterUpdateMessage; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.FilterTypeSideButton; +import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.button.Button; import net.minecraft.client.resources.I18n; @@ -71,7 +72,7 @@ public class FilterScreen extends BaseScreen { nameField.setVisible(true); nameField.setCanLoseFocus(true); nameField.setFocused2(false); - nameField.setTextColor(16777215); + nameField.setTextColor(RenderUtils.DEFAULT_COLOR); nameField.func_212954_a(name -> sendUpdate()); addButton(nameField); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java index bc545a756..2c806378b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java @@ -420,9 +420,11 @@ public class GridScreen extends BaseScreen implements IScreenInfo if (scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { return true; } - if (RS.CLIENT_CONFIG.getGrid().getSortGrid()) { + + if (RS.CLIENT_CONFIG.getGrid().getPreventSortingWhileShiftIsDown()) { doSort = !isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !isOverCraftingOutputArea(mouseX - guiLeft, mouseY - guiTop); } + boolean clickedClear = clickedButton == 0 && isOverClear(mouseX - guiLeft, mouseY - guiTop); boolean clickedCreatePattern = clickedButton == 0 && isOverCreatePattern(mouseX - guiLeft, mouseY - guiTop); @@ -563,6 +565,10 @@ public class GridScreen extends BaseScreen implements IScreenInfo scrollbar.setMaxOffset(getRows() - getVisibleRows()); } + public boolean canSort() { + return doSort || !hasShiftDown(); + } + public static List getSorters() { List sorters = new LinkedList<>(); sorters.add(getDefaultSorter()); @@ -577,8 +583,4 @@ public class GridScreen extends BaseScreen implements IScreenInfo public static IGridSorter getDefaultSorter() { return new NameGridSorter(); } - - public boolean canSort() { - return doSort || !hasShiftDown(); - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java index daf44cadf..738ae0528 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java @@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.api.storage.tracker.StorageTrackerEntry; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.render.FluidRenderer; import com.raoulvdberge.refinedstorage.screen.BaseScreen; +import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.resources.I18n; import net.minecraft.tags.FluidTags; import net.minecraft.util.ResourceLocation; @@ -26,6 +27,7 @@ public class FluidGridStack implements IGridStack { @Nullable private StorageTrackerEntry entry; private boolean craftable; + private boolean zeroed; private Set cachedTags; private String cachedName; @@ -41,6 +43,10 @@ public class FluidGridStack implements IGridStack { this.craftable = craftable; } + public void setZeroed(boolean zeroed) { + this.zeroed = zeroed; + } + public FluidStack getStack() { return stack; } @@ -153,14 +159,18 @@ public class FluidGridStack implements IGridStack { FluidRenderer.INSTANCE.render(x, y, stack); String text; + int color = RenderUtils.DEFAULT_COLOR; - if (isCraftable()) { + if (zeroed) { + text = "0"; + color = 16733525; + } else if (isCraftable()) { text = I18n.format("gui.refinedstorage.grid.craft"); } else { text = API.instance().getQuantityFormatter().formatInBucketFormWithOnlyTrailingDigitsIfZero(getQuantity()); } - gui.renderQuantity(x, y, text); + gui.renderQuantity(x, y, text, color); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java index f0420ee37..e092e4a13 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java @@ -30,6 +30,7 @@ public class ItemGridStack implements IGridStack { private boolean craftable; @Nullable private StorageTrackerEntry entry; + private boolean zeroed; private Set cachedTags; private String cachedName; @@ -49,6 +50,10 @@ public class ItemGridStack implements IGridStack { this.entry = entry; } + public void setZeroed(boolean zeroed) { + this.zeroed = zeroed; + } + @Nullable static String getModNameByModId(String modId) { Optional modContainer = ModList.get().getModContainerById(modId); @@ -164,14 +169,18 @@ public class ItemGridStack implements IGridStack { @Override public void draw(BaseScreen gui, int x, int y) { String text = null; + int color = RenderUtils.DEFAULT_COLOR; - if (craftable) { + if (zeroed) { + text = "0"; + color = 16733525; + } else if (craftable) { text = I18n.format("gui.refinedstorage.grid.craft"); } else if (stack.getCount() > 1) { text = API.instance().getQuantityFormatter().formatWithUnits(getQuantity()); } - gui.renderItem(x, y, stack, true, text); + gui.renderItem(x, y, stack, true, text, color); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java index 546e768f3..f991d6d85 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java @@ -43,6 +43,7 @@ public abstract class BaseGridView implements IGridView { if (!screen.canSort()) { return; } + List stacks = new ArrayList<>(); if (screen.getGrid().isActive()) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java index 9eab73330..df02b8941 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java @@ -43,7 +43,7 @@ public class FluidGridView extends BaseGridView { map.put(stack.getId(), stack); } else { if (existing.getStack().getAmount() + delta <= 0) { - existing.getStack().grow(delta); + existing.setZeroed(true); map.remove(existing.getId()); } else { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java index 627a2f500..762136b1f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java @@ -43,7 +43,7 @@ public class ItemGridView extends BaseGridView { map.put(stack.getId(), stack); } else { if (existing.getStack().getCount() + delta <= 0) { - existing.getStack().grow(delta); + existing.setZeroed(true); map.remove(existing.getId()); } else { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/SearchWidget.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/SearchWidget.java index e74e8d292..805e64dc4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/SearchWidget.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/SearchWidget.java @@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.integration.jei.JeiIntegration; import com.raoulvdberge.refinedstorage.integration.jei.RSJeiPlugin; import com.raoulvdberge.refinedstorage.screen.BaseScreen; +import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.widget.TextFieldWidget; import org.lwjgl.glfw.GLFW; @@ -23,7 +24,7 @@ public class SearchWidget extends TextFieldWidget { this.setEnableBackgroundDrawing(false); this.setVisible(true); - this.setTextColor(16777215); + this.setTextColor(RenderUtils.DEFAULT_COLOR); } public void updateJei() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java index 67733b557..f1e49b974 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Set; public final class RenderUtils { + public static final int DEFAULT_COLOR = 16777215; + private static final VertexFormat ITEM_FORMAT_WITH_LIGHTMAP = new VertexFormat(DefaultVertexFormats.ITEM).addElement(DefaultVertexFormats.TEX_2S); public static String shorten(String text, int length) {