use of logisticspipes.network.abstractguis.GuiProvider in project LogisticsPipes by RS485.
the class NewGuiHandler method initialize.
@SuppressWarnings("unchecked")
@SneakyThrows({ IOException.class, InvocationTargetException.class, IllegalAccessException.class, InstantiationException.class })
public static final // Suppression+sneakiness because these shouldn't ever fail, and if they do, it needs to fail.
void initialize() {
final List<ClassInfo> classes = new ArrayList<>(ClassPath.from(NewGuiHandler.class.getClassLoader()).getTopLevelClassesRecursive("logisticspipes.network.guis"));
Collections.sort(classes, (o1, o2) -> o1.getSimpleName().compareTo(o2.getSimpleName()));
NewGuiHandler.guilist = new ArrayList<>(classes.size());
NewGuiHandler.guimap = new HashMap<>(classes.size());
int currentid = 0;
for (ClassInfo c : classes) {
final Class<?> cls = c.load();
final GuiProvider instance = (GuiProvider) cls.getConstructors()[0].newInstance(currentid);
NewGuiHandler.guilist.add(instance);
NewGuiHandler.guimap.put((Class<? extends GuiProvider>) cls, instance);
currentid++;
}
}
use of logisticspipes.network.abstractguis.GuiProvider 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);
}
}
Aggregations