diff --git a/gradle.properties b/gradle.properties index 8a8b692d6..f57fcaa2a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ artifact_basename=appliedenergistics2 minecraft_release=1.16 minecraft_version=1.16.3 mcp_mappings=20200723-1.16.1 -forge_version=34.0.7 +forge_version=34.0.8 ######################################################### # Provided APIs # diff --git a/src/main/java/appeng/client/gui/implementations/MEMonitorableScreen.java b/src/main/java/appeng/client/gui/implementations/MEMonitorableScreen.java index ceedf3e1f..4828ee27a 100644 --- a/src/main/java/appeng/client/gui/implementations/MEMonitorableScreen.java +++ b/src/main/java/appeng/client/gui/implementations/MEMonitorableScreen.java @@ -51,6 +51,7 @@ import appeng.client.gui.widgets.SettingToggleButton; import appeng.client.gui.widgets.TabButton; import appeng.client.me.InternalSlotME; import appeng.client.me.ItemRepo; +import appeng.client.render.StackSizeRenderer; import appeng.container.implementations.CraftingStatusContainer; import appeng.container.implementations.MEMonitorableContainer; import appeng.container.slot.AppEngSlot; @@ -295,6 +296,16 @@ public class MEMonitorableScreen extends AEBas this.currentMouseX = mouseX; this.currentMouseY = mouseY; + + // Show the number of active crafting jobs + if (this.craftingStatusBtn != null && container.activeCraftingJobs != -1) { + // The stack size renderer expects a 16x16 slot, while the button is normally + // bigger + int x = this.craftingStatusBtn.x + (this.craftingStatusBtn.getWidth() - 16) / 2; + int y = this.craftingStatusBtn.y + (this.craftingStatusBtn.getWidth_CLASH() - 16) / 2; + StackSizeRenderer.renderSizeLabel(font, x - this.guiLeft, y - this.guiTop, + String.valueOf(container.activeCraftingJobs)); + } } @Override @@ -359,6 +370,7 @@ public class MEMonitorableScreen extends AEBas if (this.searchField != null) { this.searchField.render(matrixStack, mouseX, mouseY, partialTicks); } + } protected String getBackground() { diff --git a/src/main/java/appeng/container/implementations/MEMonitorableContainer.java b/src/main/java/appeng/container/implementations/MEMonitorableContainer.java index d9316db9b..5bb5967ec 100644 --- a/src/main/java/appeng/container/implementations/MEMonitorableContainer.java +++ b/src/main/java/appeng/container/implementations/MEMonitorableContainer.java @@ -46,6 +46,8 @@ import appeng.api.implementations.tiles.IViewCellStorage; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; +import appeng.api.networking.crafting.ICraftingCPU; +import appeng.api.networking.crafting.ICraftingGrid; import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.energy.IEnergySource; import appeng.api.networking.security.IActionHost; @@ -101,6 +103,13 @@ public class MEMonitorableContainer extends AEBaseContainer public boolean canAccessViewCells = false; @GuiSync(98) public boolean hasPower = false; + /** + * The number of active crafting jobs in the network. -1 means unknown and will + * hide the label on the screen. + */ + @GuiSync(100) + public int activeCraftingJobs = -1; + private IConfigManagerHost gui; private IConfigManager serverCM; private IGridNode networkNode; @@ -189,6 +198,8 @@ public class MEMonitorableContainer extends AEBaseContainer this.setValidContainer(false); } + this.updateActiveCraftingJobs(); + for (final Settings set : this.serverCM.getSettings()) { final Enum sideLocal = this.serverCM.getSetting(set); final Enum sideRemote = this.clientCM.getSetting(set); @@ -286,6 +297,36 @@ public class MEMonitorableContainer extends AEBaseContainer this.queueInventory(c); } + private void updateActiveCraftingJobs() { + IGridNode hostNode = networkNode; + if (hostNode == null) { + // Wireless terminals do not directly expose the target grid (even though they + // have one) + if (host instanceof IActionHost) { + hostNode = ((IActionHost) host).getActionableNode(); + } + } + IGrid grid = null; + if (hostNode != null) { + grid = hostNode.getGrid(); + } + + if (grid == null) { + // No grid to query crafting jobs from + this.activeCraftingJobs = -1; + return; + } + + int activeJobs = 0; + ICraftingGrid craftingGrid = grid.getCache(ICraftingGrid.class); + for (ICraftingCPU cpus : craftingGrid.getCpus()) { + if (cpus.isBusy()) { + activeJobs++; + } + } + this.activeCraftingJobs = activeJobs; + } + private void queueInventory(final IContainerListener c) { if (Platform.isServer() && c instanceof PlayerEntity && this.monitor != null) { try {