use of logisticspipes.utils.gui.LogisticsBaseGuiScreen in project LogisticsPipes by RS485.
the class LogisticsCraftingOverlayHandler method overlayRecipe.
@Override
public void overlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex, boolean shift) {
TileEntity tile;
LogisticsBaseGuiScreen gui;
if (firstGui instanceof GuiLogisticsCraftingTable) {
tile = ((GuiLogisticsCraftingTable) firstGui)._crafter;
gui = (GuiLogisticsCraftingTable) firstGui;
} else if (firstGui instanceof GuiRequestTable) {
tile = ((GuiRequestTable) firstGui)._table.container;
gui = (GuiRequestTable) firstGui;
} else {
return;
}
ItemStack[] stack = new ItemStack[9];
ItemStack[][] stacks = new ItemStack[9][];
boolean hasCanidates = false;
NEISetCraftingRecipe packet = PacketHandler.getPacket(NEISetCraftingRecipe.class);
for (PositionedStack ps : recipe.getIngredientStacks(recipeIndex)) {
int x = (ps.relx - 25) / 18;
int y = (ps.rely - 6) / 18;
int slot = x + y * 3;
if (x < 0 || x > 2 || y < 0 || y > 2 || slot < 0 || slot > 8) {
FMLClientHandler.instance().getClient().thePlayer.sendChatMessage("Internal Error. This button is broken.");
return;
}
if (slot < 9) {
stack[slot] = ps.items[0];
List<ItemStack> list = new ArrayList<>(Arrays.asList(ps.items));
Iterator<ItemStack> iter = list.iterator();
while (iter.hasNext()) {
ItemStack wildCardCheckStack = iter.next();
if (wildCardCheckStack.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
iter.remove();
wildCardCheckStack.getItem().getSubItems(wildCardCheckStack.getItem(), wildCardCheckStack.getItem().getCreativeTab(), list);
iter = list.iterator();
}
}
stacks[slot] = list.toArray(new ItemStack[0]);
if (stacks[slot].length > 1) {
hasCanidates = true;
} else if (stacks[slot].length == 1) {
stack[slot] = stacks[slot][0];
}
}
}
if (hasCanidates) {
gui.setSubGui(new GuiRecipeImport(tile, stacks));
} else {
MainProxy.sendPacketToServer(packet.setContent(stack).setPosX(tile.xCoord).setPosY(tile.yCoord).setPosZ(tile.zCoord));
}
}
use of logisticspipes.utils.gui.LogisticsBaseGuiScreen in project LogisticsPipes by RS485.
the class NewGuiHandler method openGui.
@SideOnly(Side.CLIENT)
public static void openGui(OpenGUIPacket packet, EntityPlayer player) {
int guiID = packet.getGuiID();
GuiProvider provider = NewGuiHandler.guilist.get(guiID).template();
LPDataIOWrapper.provideData(packet.getGuiData(), provider::readData);
if (provider instanceof PopupGuiProvider && packet.getWindowID() == -2) {
if (FMLClientHandler.instance().getClient().currentScreen instanceof LogisticsBaseGuiScreen) {
LogisticsBaseGuiScreen baseGUI = (LogisticsBaseGuiScreen) FMLClientHandler.instance().getClient().currentScreen;
SubGuiScreen newSub;
try {
newSub = (SubGuiScreen) provider.getClientGui(player);
} catch (TargetNotFoundException e) {
throw e;
} catch (Exception e) {
LogisticsPipes.log.error(packet.getClass().getName());
LogisticsPipes.log.error(packet.toString());
throw new RuntimeException(e);
}
if (newSub != null) {
if (!baseGUI.hasSubGui()) {
baseGUI.setSubGui(newSub);
} else {
SubGuiScreen canidate = baseGUI.getSubGui();
while (canidate.hasSubGui()) {
canidate = canidate.getSubGui();
}
canidate.setSubGui(newSub);
}
}
}
} else {
GuiContainer screen;
try {
screen = (GuiContainer) provider.getClientGui(player);
} catch (TargetNotFoundException e) {
throw e;
} catch (Exception e) {
LogisticsPipes.log.error(packet.getClass().getName());
LogisticsPipes.log.error(packet.toString());
throw new RuntimeException(e);
}
screen.inventorySlots.windowId = packet.getWindowID();
FMLCommonHandler.instance().showGuiScreen(screen);
}
}
use of logisticspipes.utils.gui.LogisticsBaseGuiScreen in project LogisticsPipes by RS485.
the class GuiPacket method getGui.
@SideOnly(Side.CLIENT)
protected <T> T getGui(Class<T> guiClass) {
GuiScreen currentScreen = Minecraft.getMinecraft().currentScreen;
if (currentScreen == null) {
return null;
}
if (guiClass.isAssignableFrom(currentScreen.getClass())) {
return (T) currentScreen;
}
SubGuiScreen subScreen = null;
if (currentScreen instanceof LogisticsBaseGuiScreen) {
subScreen = ((LogisticsBaseGuiScreen) currentScreen).getSubGui();
}
while (subScreen != null) {
if (guiClass.isAssignableFrom(subScreen.getClass())) {
return (T) subScreen;
}
subScreen = subScreen.getSubGui();
}
return null;
}
use of logisticspipes.utils.gui.LogisticsBaseGuiScreen in project LogisticsPipes by RS485.
the class NewGuiHandler method openGui.
@SideOnly(Side.CLIENT)
public static void openGui(GUIPacket packet, EntityPlayer player) {
int guiID = packet.getGuiID();
GuiProvider provider = NewGuiHandler.guilist.get(guiID).template();
LPDataIOWrapper.provideData(packet.getGuiData(), provider::readData);
if (provider instanceof PopupGuiProvider && packet.getWindowID() == -2) {
if (FMLClientHandler.instance().getClient().currentScreen instanceof LogisticsBaseGuiScreen) {
LogisticsBaseGuiScreen baseGUI = (LogisticsBaseGuiScreen) FMLClientHandler.instance().getClient().currentScreen;
SubGuiScreen newSub;
try {
newSub = (SubGuiScreen) provider.getClientGui(player);
} catch (TargetNotFoundException e) {
throw e;
} catch (Exception e) {
LogisticsPipes.log.error(packet.getClass().getName());
LogisticsPipes.log.error(packet.toString());
throw new RuntimeException(e);
}
if (newSub != null) {
if (!baseGUI.hasSubGui()) {
baseGUI.setSubGui(newSub);
} else {
SubGuiScreen canidate = baseGUI.getSubGui();
while (canidate.hasSubGui()) {
canidate = canidate.getSubGui();
}
canidate.setSubGui(newSub);
}
}
}
} else {
GuiContainer screen;
try {
screen = (GuiContainer) provider.getClientGui(player);
} catch (TargetNotFoundException e) {
throw e;
} catch (Exception e) {
LogisticsPipes.log.error(packet.getClass().getName());
LogisticsPipes.log.error(packet.toString());
throw new RuntimeException(e);
}
screen.inventorySlots.windowId = packet.getWindowID();
FMLCommonHandler.instance().showGuiScreen(screen);
}
}
use of logisticspipes.utils.gui.LogisticsBaseGuiScreen in project LogisticsPipes by RS485.
the class MostLikelyRecipeComponentsResponse method processPacket.
@Override
@ClientSideOnlyMethodContent
public void processPacket(EntityPlayer player) {
GuiScreen firstGui = Minecraft.getMinecraft().currentScreen;
LogisticsBaseGuiScreen gui;
if (firstGui instanceof GuiLogisticsCraftingTable) {
gui = (GuiLogisticsCraftingTable) firstGui;
} else if (firstGui instanceof GuiRequestTable) {
gui = (GuiRequestTable) firstGui;
} else {
return;
}
GuiRecipeImport importGui = null;
SubGuiScreen sub = gui.getSubGui();
while (sub != null) {
if (sub instanceof GuiRecipeImport) {
importGui = (GuiRecipeImport) sub;
break;
}
sub = sub.getSubGui();
}
if (importGui == null)
return;
importGui.handleProposePacket(response);
}
Aggregations