Some more grid gui work
This commit is contained in:
@@ -5,6 +5,8 @@ import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.GridType;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGridNetworkAware;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.render.ElementDrawers;
|
||||
import com.raoulvdberge.refinedstorage.container.GridContainer;
|
||||
@@ -21,15 +23,19 @@ import com.raoulvdberge.refinedstorage.screen.widget.SearchWidget;
|
||||
import com.raoulvdberge.refinedstorage.screen.widget.TabListWidget;
|
||||
import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.*;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.GridTile;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||
import com.raoulvdberge.refinedstorage.util.TimeUtils;
|
||||
import net.minecraft.client.audio.SimpleSound;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraftforge.fml.client.config.GuiCheckBox;
|
||||
|
||||
@@ -81,7 +87,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
|
||||
@Override
|
||||
public void onPostInit(int x, int y) {
|
||||
container.initSlots();
|
||||
this.container.initSlots();
|
||||
|
||||
this.tabs.init(xSize - 32);
|
||||
|
||||
@@ -105,6 +111,8 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
searchField.y = sy;
|
||||
}
|
||||
|
||||
addButton(searchField);
|
||||
|
||||
if (grid.getGridType() != GridType.FLUID && grid.getViewType() != -1) {
|
||||
addSideButton(new SideButtonGridViewType(this, grid));
|
||||
}
|
||||
@@ -116,6 +124,12 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
|
||||
if (grid.getGridType() == GridType.PATTERN) {
|
||||
processingPattern = addCheckBox(x + 7, y + getTopHeight() + (getVisibleRows() * 18) + 60, I18n.format("misc.refinedstorage.processing"), GridTile.PROCESSING_PATTERN.getValue(), btn -> {
|
||||
// Rebuild the inventory slots before the slot change packet arrives.
|
||||
GridTile.PROCESSING_PATTERN.setValue(false, processingPattern.isChecked());
|
||||
((GridNetworkNode) grid).clearMatrix(); // The server does this but let's do it earlier so the client doesn't notice.
|
||||
this.container.initSlots();
|
||||
|
||||
TileDataManager.setParameter(GridTile.PROCESSING_PATTERN, processingPattern.isChecked());
|
||||
});
|
||||
|
||||
boolean showOredict = true;
|
||||
@@ -125,6 +139,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
|
||||
if (showOredict) {
|
||||
oredictPattern = addCheckBox(processingPattern.x + processingPattern.getWidth() + 5, y + getTopHeight() + (getVisibleRows() * 18) + 60, I18n.format("misc.refinedstorage:oredict"), GridTile.OREDICT_PATTERN.getValue(), btn -> {
|
||||
TileDataManager.setParameter(GridTile.OREDICT_PATTERN, oredictPattern.isChecked());
|
||||
});
|
||||
}
|
||||
|
||||
@@ -229,7 +244,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
return slotNumber >= 0;
|
||||
}
|
||||
|
||||
public boolean isOverSlotArea(int mouseX, int mouseY) {
|
||||
public boolean isOverSlotArea(double mouseX, double mouseY) {
|
||||
return RenderUtils.inBounds(7, 19, 162, 18 * getVisibleRows(), mouseX, mouseY);
|
||||
}
|
||||
|
||||
@@ -237,7 +252,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
return slotNumber;
|
||||
}
|
||||
|
||||
private boolean isOverClear(int mouseX, int mouseY) {
|
||||
private boolean isOverClear(double mouseX, double mouseY) {
|
||||
int y = getTopHeight() + (getVisibleRows() * 18) + 4;
|
||||
|
||||
switch (grid.getGridType()) {
|
||||
@@ -254,7 +269,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isOverCreatePattern(int mouseX, int mouseY) {
|
||||
private boolean isOverCreatePattern(double mouseX, double mouseY) {
|
||||
return grid.getGridType() == GridType.PATTERN && RenderUtils.inBounds(172, getTopHeight() + (getVisibleRows() * 18) + 22, 16, 16, mouseX, mouseY) && ((GridNetworkNode) grid).canCreatePattern();
|
||||
}
|
||||
|
||||
@@ -396,51 +411,34 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
RenderUtils.drawTooltipWithSmallText(textLines, smallTextLines, RS.INSTANCE.config.detailedTooltip, stack, mouseX, mouseY, xSize, ySize, font);
|
||||
}
|
||||
|
||||
/* TODO
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) throws IOException {
|
||||
super.actionPerformed(button);
|
||||
|
||||
tabs.actionPerformed(button);
|
||||
|
||||
if (button == oredictPattern) {
|
||||
TileDataManager.setParameter(TileGrid.OREDICT_PATTERN, oredictPattern.isChecked());
|
||||
} else if (button == processingPattern) {
|
||||
// Rebuild the inventory slots before the slot change packet arrives.
|
||||
TileGrid.PROCESSING_PATTERN.setValue(false, processingPattern.isChecked());
|
||||
((NetworkNodeGrid) grid).clearMatrix(); // The server does this but let's do it earlier so the client doesn't notice.
|
||||
((ContainerGrid) this.inventorySlots).initSlots();
|
||||
|
||||
TileDataManager.setParameter(TileGrid.PROCESSING_PATTERN, processingPattern.isChecked());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int mouseX, int mouseY, int clickedButton) throws IOException {
|
||||
super.mouseClicked(mouseX, mouseY, clickedButton);
|
||||
|
||||
tabs.mouseClicked();
|
||||
|
||||
if (searchField != null) {
|
||||
searchField.mouseClicked(mouseX, mouseY, clickedButton);
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int clickedButton) {
|
||||
if (tabs.mouseClicked()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean clickedClear = clickedButton == 0 && isOverClear(mouseX - guiLeft, mouseY - guiTop);
|
||||
boolean clickedCreatePattern = clickedButton == 0 && isOverCreatePattern(mouseX - guiLeft, mouseY - guiTop);
|
||||
|
||||
if (clickedCreatePattern) {
|
||||
BlockPos gridPos = ((NetworkNodeGrid) grid).getPos();
|
||||
BlockPos gridPos = ((GridNetworkNode) grid).getPos();
|
||||
|
||||
RS.INSTANCE.network.sendToServer(new MessageGridPatternCreate(gridPos.getX(), gridPos.getY(), gridPos.getZ()));
|
||||
// @TODO RS.INSTANCE.network.sendToServer(new MessageGridPatternCreate(gridPos.getX(), gridPos.getY(), gridPos.getZ()));
|
||||
|
||||
return true;
|
||||
} else if (grid.isActive()) {
|
||||
if (clickedClear && grid instanceof IGridNetworkAware) {
|
||||
RS.INSTANCE.network.sendToServer(new MessageGridClear());
|
||||
// @TODO RS.INSTANCE.network.sendToServer(new MessageGridClear());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ItemStack held = ((ContainerGrid) this.inventorySlots).getPlayer().inventory.getItemStack();
|
||||
ItemStack held = container.getPlayer().inventory.getItemStack();
|
||||
|
||||
if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !held.isEmpty() && (clickedButton == 0 || clickedButton == 1)) {
|
||||
RS.INSTANCE.network.sendToServer(grid.getGridType() == GridType.FLUID ? new MessageGridFluidInsertHeld() : new MessageGridItemInsertHeld(clickedButton == 1));
|
||||
// @TODO RS.INSTANCE.network.sendToServer(grid.getGridType() == GridType.FLUID ? new MessageGridFluidInsertHeld() : new MessageGridItemInsertHeld(clickedButton == 1));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (isOverSlotWithStack()) {
|
||||
@@ -450,10 +448,10 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
IGridStack stack = view.getStacks().get(slotNumber);
|
||||
|
||||
if (isPulling) {
|
||||
if (stack.isCraftable() && view.canCraft() && (stack.doesDisplayCraftText() || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) {
|
||||
FMLCommonHandler.instance().showGuiScreen(new GuiGridCraftingSettings(this, ((ContainerGrid) this.inventorySlots).getPlayer(), stack));
|
||||
if (stack.isCraftable() && view.canCraft() && (stack.doesDisplayCraftText() || (hasShiftDown() && hasControlDown()))) {
|
||||
// @TODO FMLCommonHandler.instance().showGuiScreen(new GuiGridCraftingSettings(this, ((ContainerGrid) this.inventorySlots).getPlayer(), stack));
|
||||
} else if (grid.getGridType() == GridType.FLUID && held.isEmpty()) {
|
||||
RS.INSTANCE.network.sendToServer(new MessageGridFluidPull(view.getStacks().get(slotNumber).getHash(), GuiScreen.isShiftKeyDown()));
|
||||
// @TODO RS.INSTANCE.network.sendToServer(new MessageGridFluidPull(view.getStacks().get(slotNumber).getHash(), GuiScreen.isShiftKeyDown()));
|
||||
} else if (grid.getGridType() != GridType.FLUID) {
|
||||
int flags = 0;
|
||||
|
||||
@@ -461,7 +459,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
flags |= IItemGridHandler.EXTRACT_HALF;
|
||||
}
|
||||
|
||||
if (GuiScreen.isShiftKeyDown()) {
|
||||
if (hasShiftDown()) {
|
||||
flags |= IItemGridHandler.EXTRACT_SHIFT;
|
||||
}
|
||||
|
||||
@@ -469,28 +467,36 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
flags |= IItemGridHandler.EXTRACT_SINGLE;
|
||||
}
|
||||
|
||||
RS.INSTANCE.network.sendToServer(new MessageGridItemPull(stack.getHash(), flags));
|
||||
// @TODO RS.INSTANCE.network.sendToServer(new MessageGridItemPull(stack.getHash(), flags));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (clickedClear || clickedCreatePattern) {
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
||||
minecraft.getSoundHandler().play(SimpleSound.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.mouseClicked(mouseX, mouseY, clickedButton);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void keyTyped(char character, int keyCode) throws IOException {
|
||||
if (searchField == null) {
|
||||
return;
|
||||
public boolean keyPressed(int key, int scanCode, int modifiers) {
|
||||
if (searchField.keyPressed(key, scanCode, modifiers) || searchField.func_212955_f()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (checkHotbarKeys(keyCode)) {
|
||||
// NO OP
|
||||
} else if (searchField.textboxKeyTyped(character, keyCode)) {
|
||||
keyHandled = true;
|
||||
} else if (keyCode == RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX.getKeyCode()) {
|
||||
return super.keyPressed(key, scanCode, modifiers);
|
||||
}
|
||||
|
||||
/* TODO
|
||||
@Override
|
||||
protected void keyTyped(char character, int keyCode) throws IOException {
|
||||
if (keyCode == RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX.getKeyCode()) {
|
||||
RS.INSTANCE.network.sendToServer(new MessageGridClear());
|
||||
} else {
|
||||
super.keyTyped(character, keyCode);
|
||||
|
@@ -3,6 +3,8 @@ package com.raoulvdberge.refinedstorage.screen.widget;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
||||
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
@@ -55,21 +57,21 @@ public class SearchWidget extends TextFieldWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean charTyped(char typedChar, int keyCode) {
|
||||
// TODO @SuppressWarnings("deprecation") boolean canLoseFocus = ObfuscationReflectionHelper.getPrivateValue(GuiTextField.class, this, 10);
|
||||
public boolean keyPressed(int keyCode, int scanCode, int modifier) {
|
||||
@SuppressWarnings("deprecation") boolean canLoseFocus = ObfuscationReflectionHelper.getPrivateValue(TextFieldWidget.class, this, 6);
|
||||
|
||||
boolean result = super.charTyped(typedChar, keyCode);
|
||||
boolean result = super.keyPressed(keyCode, scanCode, modifier);
|
||||
|
||||
if (isFocused()) {
|
||||
/* TODO if (keyCode == Keyboard.KEY_UP) {
|
||||
if (keyCode == GLFW.GLFW_KEY_UP) {
|
||||
updateSearchHistory(-1);
|
||||
|
||||
result = true;
|
||||
} else if (keyCode == Keyboard.KEY_DOWN) {
|
||||
} else if (keyCode == GLFW.GLFW_KEY_DOWN) {
|
||||
updateSearchHistory(1);
|
||||
|
||||
result = true;
|
||||
} else if (keyCode == Keyboard.KEY_RETURN) {
|
||||
} else if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) {
|
||||
saveHistory();
|
||||
|
||||
if (canLoseFocus) {
|
||||
@@ -77,16 +79,17 @@ public class SearchWidget extends TextFieldWidget {
|
||||
}
|
||||
|
||||
result = true;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
if (/*TODO keyCode == RSKeyBindings.FOCUS_SEARCH_BAR.getKeyCode() && canLoseFocus*/false) {
|
||||
/* TODO
|
||||
if (keyCode == RSKeyBindings.FOCUS_SEARCH_BAR.getKeyCode() && canLoseFocus) {
|
||||
setFocused(!isFocused());
|
||||
|
||||
saveHistory();
|
||||
|
||||
result = true;
|
||||
}
|
||||
}*/
|
||||
|
||||
if (result) {
|
||||
listeners.forEach(Runnable::run);
|
||||
|
@@ -36,8 +36,6 @@ public class TabListWidget {
|
||||
private Button left;
|
||||
private Button right;
|
||||
|
||||
private int width;
|
||||
|
||||
public TabListWidget(BaseScreen gui, ElementDrawers drawers, Supplier<List<IGridTab>> tabs, Supplier<Integer> pages, Supplier<Integer> page, Supplier<Integer> selected, int tabsPerPage) {
|
||||
this.gui = gui;
|
||||
this.drawers = drawers;
|
||||
@@ -49,11 +47,8 @@ public class TabListWidget {
|
||||
}
|
||||
|
||||
public void init(int width) {
|
||||
this.width = width;
|
||||
this.left = gui.addButton(gui.getGuiLeft(), gui.getGuiTop() - 22, 20, 20, "<", true, pages.get() > 0, btn -> {
|
||||
});
|
||||
this.right = gui.addButton(gui.getGuiLeft() + width - 22, gui.getGuiTop() - 22, 20, 20, ">", true, pages.get() > 0, btn -> {
|
||||
});
|
||||
this.left = gui.addButton(gui.getGuiLeft(), gui.getGuiTop() - 22, 20, 20, "<", true, pages.get() > 0, btn -> listeners.forEach(t -> t.onPageChanged(page.get() - 1)));
|
||||
this.right = gui.addButton(gui.getGuiLeft() + width - 22, gui.getGuiTop() - 22, 20, 20, ">", true, pages.get() > 0, btn -> listeners.forEach(t -> t.onPageChanged(page.get() + 1)));
|
||||
}
|
||||
|
||||
public void addListener(ITabListListener listener) {
|
||||
@@ -176,12 +171,4 @@ public class TabListWidget {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void actionPerformed(Button button) {
|
||||
if (button == left) {
|
||||
listeners.forEach(t -> t.onPageChanged(page.get() - 1));
|
||||
} else if (button == right) {
|
||||
listeners.forEach(t -> t.onPageChanged(page.get() + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user