use of gregtech.api.terminal.app.AbstractApplication in project GregTech by GregTechCEu.
the class WorldProspectorARApp method initApp.
@Override
public AbstractApplication initApp() {
addWidget(new ImageWidget(10, 10, 313, 212, new ColorRectTexture(TerminalTheme.COLOR_B_2.getColor())));
addWidget(new LabelWidget(15 + 150 / 2, 232 / 2, "terminal.world_prospector.radius", -1, new Object[] { getMaxRadius() }).setShadow(true).setYCentered(true).setXCentered(true));
int slotSize = (int) Math.pow(2, getAppTier());
int x = 250 - slotSize * 12;
int y = 232 / 2 - 18;
handlers = new SingleItemStackHandler[slotSize];
colors = new int[slotSize];
for (int i = 0; i < slotSize; i++) {
int index = i;
Tuple<ItemStack, Integer> stack = getSlotStack(i);
if (stack == null) {
handlers[i] = new SingleItemStackHandler(ItemStack.EMPTY);
colors[i] = 0;
} else {
handlers[i] = new SingleItemStackHandler(stack.getFirst());
colors[i] = stack.getSecond();
}
RectButtonWidget buttonWidget = new RectButtonWidget(x + i * 24, y + 18, 18, 18, 1);
addWidget(new PhantomSlotWidget(handlers[i], 0, x + i * 24, y) {
@Override
public boolean mouseClicked(int mouseX, int mouseY, int button) {
if (handlers[index].getStackInSlot(0).isEmpty() && isMouseOverElement(mouseX, mouseY)) {
writeClientAction(-1, buffer -> {
});
selectReference(index, buttonWidget);
return true;
}
return super.mouseClicked(mouseX, mouseY, button);
}
@Override
public void handleClientAction(int id, PacketBuffer buffer) {
if (id == -1) {
selectReference(index, buttonWidget);
} else {
super.handleClientAction(id, buffer);
}
}
}.setBackgroundTexture(new ColorRectTexture(0x4fffffff)));
addWidget(buttonWidget.setHoverText("terminal.world_prospector.color").setColors(0x4fffffff, -1, colors[i]).setClickListener(cd -> TerminalDialogWidget.showColorDialog(getOs(), "terminal.world_prospector.color", res -> {
if (res != null) {
buttonWidget.setFill(res | 0xff000000);
colors[index] = res | 0xff000000;
}
}, colors[index]).open()));
}
addWidget(new CircleButtonWidget(333 / 2, 200).setClickListener(cd -> openAR()).setHoverText("terminal.ar.open").setColors(0, -1, TerminalTheme.COLOR_B_3.getColor()).setIcon(new ItemStackTexture(MetaItems.CAMERA.getStackForm())));
return this;
}
use of gregtech.api.terminal.app.AbstractApplication in project GregTech by GregTechCEu.
the class HardwareManagerApp method initApp.
@Override
public AbstractApplication initApp() {
apps = new WidgetGroup();
this.addWidget(apps);
int x = 10;
int y = 65;
for (Hardware hardware : os.hardwareProvider.getProviders().values()) {
HardwareSlotWidget hardwareSlotWidget = new HardwareSlotWidget(x, y, os, hardware);
this.addWidget(hardwareSlotWidget);
hardwareSlotWidget.setOnSelected(() -> {
selected = hardwareSlotWidget;
apps.clearAllWidgets();
AtomicInteger index = new AtomicInteger(0);
for (AbstractApplication installed : getOs().installedApps) {
TerminalRegistry.getAppHardwareDemand(installed.getRegistryName(), getOs().tabletNBT.getCompoundTag(installed.getRegistryName()).getInteger("_tier")).stream().filter(hardware::isHardwareAdequate).findFirst().ifPresent(X -> {
apps.addWidget(new RectButtonWidget(162 + (index.get() % 4) * 25, 122 + (index.get() / 4) * 30, 20, 20, 2).setIcon(installed.getIcon()).setHoverText(installed.getUnlocalizedName()).setColors(0, TerminalTheme.COLOR_7.getColor(), 0));
index.getAndIncrement();
});
}
});
x += 25;
}
return this;
}
use of gregtech.api.terminal.app.AbstractApplication in project GregTech by GregTechCEu.
the class TerminalOSWidget method handleClientAction.
@Override
public void handleClientAction(int id, PacketBuffer buffer) {
if (id == -1) {
// shutdown
NBTTagCompound nbt = null;
try {
nbt = buffer.readCompoundTag();
} catch (IOException e) {
e.printStackTrace();
}
for (AbstractApplication openedApp : openedApps) {
String appName = openedApp.getRegistryName();
NBTTagCompound data = openedApp.closeApp();
if (data != null && !data.isEmpty()) {
tabletNBT.setTag(appName, data);
} else if (nbt != null && openedApp.isClientSideApp() && nbt.hasKey(appName)) {
tabletNBT.setTag(appName, nbt.getCompoundTag(appName));
}
}
// must close tablet from server side.
this.getModularUI().entityPlayer.closeScreen();
} else if (id == -2) {
// closeApp sync
String appName = buffer.readString(32767);
NBTTagCompound nbt = null;
try {
nbt = buffer.readCompoundTag();
} catch (IOException e) {
e.printStackTrace();
}
if (nbt != null) {
tabletNBT.setTag(appName, nbt);
}
} else {
super.handleClientAction(id, buffer);
}
}
use of gregtech.api.terminal.app.AbstractApplication in project GregTech by GregTechCEu.
the class TerminalOSWidget method disCharge.
private long disCharge() {
IElectricItem electricItem = hardwareProvider.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null);
if (electricItem != null && !TerminalBehaviour.isCreative(itemStack)) {
AtomicLong costs = new AtomicLong(0);
List<AbstractApplication> charged = new ArrayList<>();
for (AbstractApplication openedApp : openedApps) {
TerminalRegistry.getAppHardwareDemand(openedApp.getRegistryName(), openedApp.getAppTier()).stream().filter(i -> i instanceof BatteryHardware).findFirst().ifPresent(battery -> {
costs.addAndGet(((BatteryHardware) battery).getCharge());
charged.add(openedApp);
});
}
for (DeviceHardware hardware : getHardware(DeviceHardware.class)) {
if (hardware.getDevice() == DeviceHardware.DEVICE.SOLAR_LV) {
costs.addAndGet(-200);
}
}
if (costs.get() > 0 && electricItem.discharge(costs.get(), 999, true, false, false) != costs.get()) {
charged.forEach(app -> closeApplication(app, false));
} else if (costs.get() < 0) {
electricItem.charge(-costs.get(), 999, true, false);
}
return electricItem.getCharge();
}
return lastCharge;
}
use of gregtech.api.terminal.app.AbstractApplication in project GregTech by GregTechCEu.
the class TerminalOSWidget method shutdown.
public void shutdown(boolean isClient) {
if (isClient) {
NBTTagCompound nbt = new NBTTagCompound();
for (AbstractApplication openedApp : openedApps) {
String appName = openedApp.getRegistryName();
NBTTagCompound synced = openedApp.closeApp();
if (synced != null && !synced.isEmpty()) {
tabletNBT.setTag(appName, synced);
if (openedApp.isClientSideApp()) {
// if its a clientSideApp and the nbt not null, meaning this nbt should be synced to the server side.
nbt.setTag(appName, synced);
}
}
}
writeClientAction(-1, buffer -> buffer.writeCompoundTag(nbt));
} else {
// request shutdown from the server side
writeUpdateInfo(-2, packetBuffer -> {
});
}
}
Aggregations