Show network amount in Level Emitter slots (#1707)

Co-authored-by: Kogepan229 <73163994+Kogepan229@users.noreply.github.com>
This commit is contained in:
Eldrinn ElanteyandKogepan229 authored and GitHub committed 2026-10-17 15:28:49 +02:00
1 parent c690fbc273
commit 2c45161a84
8 files changed
+83 -2

No files matched your search

@@ -15,6 +15,9 @@ public interface IAdvancedLevelEmitter
void setReportingValue(int slot, long v);
/** Returns the amount of the slot's configured stack currently stored in the network. */
long getStoredAmount(int slot);
boolean isSlotActive(int slot);
void setSlotActive(int slot, boolean active);
@@ -21,6 +21,9 @@ public interface ILevelEmitter
long getReportingValue();
/** Returns the value the emitter currently compares against its threshold. */
long getStoredAmount();
default AEStackTypeFilter getTypeFilters() {
return new AEStackTypeFilter();
}
@@ -1,9 +1,11 @@
package appeng.client.gui.implementations;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.InventoryPlayer;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
import appeng.api.config.RedstoneMode;
import appeng.api.config.Settings;
@@ -14,7 +16,9 @@ import appeng.client.gui.AEBaseGui;
import appeng.client.gui.slots.VirtualMEPhantomSlot;
import appeng.client.gui.widgets.GuiImgButton;
import appeng.client.gui.widgets.MEGuiTextField;
import appeng.client.render.StackSizeRenderer;
import appeng.container.implementations.ContainerAdvancedLevelEmitter;
import appeng.core.AEConfig;
import appeng.core.localization.ColorUtils;
import appeng.core.localization.GuiText;
import appeng.util.calculators.ArithHelper;
@@ -100,7 +104,27 @@ public class GuiAdvancedLevelEmitter extends AEBaseGui {
SLOT_Y + y,
this.container.configSync,
slot,
GuiAdvancedLevelEmitter::acceptType));
GuiAdvancedLevelEmitter::acceptType) {
@Override
public boolean drawStackAndOverlay(final Minecraft mc, final int mouseX, final int mouseY) {
final boolean hovered = super.drawStackAndOverlay(mc, mouseX, mouseY);
if (this.getAEStack() != null) {
// the item icon is rendered with depth, so the text must skip the depth test
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
StackSizeRenderer.drawStackSize(
this.getX(),
this.getY(),
GuiAdvancedLevelEmitter.this.container.getStoredAmount(s),
mc.fontRenderer,
AEConfig.instance.getTerminalFontSize());
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST);
}
return hovered;
}
});
}
}
@@ -13,6 +13,7 @@ package appeng.client.gui.implementations;
import java.util.IdentityHashMap;
import java.util.Map;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.IIcon;
@@ -20,6 +21,7 @@ import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
import appeng.api.config.FuzzyMode;
import appeng.api.config.LevelType;
@@ -35,6 +37,7 @@ import appeng.client.gui.widgets.GuiImgButton;
import appeng.client.gui.widgets.GuiQuantityButton;
import appeng.client.gui.widgets.MEGuiTextField;
import appeng.client.gui.widgets.TypeToggleButton;
import appeng.client.render.StackSizeRenderer;
import appeng.container.implementations.ContainerLevelEmitter;
import appeng.core.AEConfig;
import appeng.core.localization.GuiText;
@@ -80,7 +83,29 @@ public class GuiLevelEmitter extends GuiUpgradeable {
this.container.setTextField(this.amountTextField);
this.validateText();
this.config = new VirtualMEPhantomSlot(17, 42, this.container.configSync, 0, GuiLevelEmitter::acceptType);
this.config = new VirtualMEPhantomSlot(17, 42, this.container.configSync, 0, GuiLevelEmitter::acceptType) {
@Override
public boolean drawStackAndOverlay(final Minecraft mc, final int mouseX, final int mouseY) {
final boolean hovered = super.drawStackAndOverlay(mc, mouseX, mouseY);
// in energy mode or with a crafting card the stored value is not an item amount
if (this.getAEStack() != null && GuiLevelEmitter.this.container.getLevelMode() == LevelType.ITEM_LEVEL
&& GuiLevelEmitter.this.bc.getInstalledUpgrades(Upgrades.CRAFTING) == 0) {
// the item icon is rendered with depth, so the text must skip the depth test
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
StackSizeRenderer.drawStackSize(
this.getX(),
this.getY(),
GuiLevelEmitter.this.container.getStoredAmount(),
mc.fontRenderer,
AEConfig.instance.getTerminalFontSize());
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST);
}
return hovered;
}
};
this.registerVirtualSlots(this.config);
}
@@ -33,6 +33,7 @@ public class ContainerAdvancedLevelEmitter extends AEBaseContainer implements IC
private MEGuiTextField[] textFields;
private final LongSyncHandler[] amountSync = new LongSyncHandler[IAdvancedLevelEmitter.SLOT_COUNT];
private final LongSyncHandler[] storedSync = new LongSyncHandler[IAdvancedLevelEmitter.SLOT_COUNT];
private final BooleanSyncHandler[] activeSync = new BooleanSyncHandler[IAdvancedLevelEmitter.SLOT_COUNT];
private final BooleanSyncHandler[] invertedSync = new BooleanSyncHandler[IAdvancedLevelEmitter.SLOT_COUNT];
private final ConfigEnumSyncHandler<BooleanOperation> logicModeSync;
@@ -55,6 +56,8 @@ public class ContainerAdvancedLevelEmitter extends AEBaseContainer implements IC
}
}).onServerChange((oldValue, newValue) -> this.lvlEmitter.setReportingValue(slot, newValue));
this.storedSync[slot] = sync.longS2C("stored" + slot);
this.activeSync[slot] = sync.booleanSync("active" + slot)
.onServerChange((oldValue, newValue) -> this.lvlEmitter.setSlotActive(slot, newValue));
@@ -92,6 +95,7 @@ public class ContainerAdvancedLevelEmitter extends AEBaseContainer implements IC
if (Platform.isServer()) {
for (int slot = 0; slot < IAdvancedLevelEmitter.SLOT_COUNT; slot++) {
this.amountSync[slot].set(this.lvlEmitter.getReportingValue(slot));
this.storedSync[slot].set(this.lvlEmitter.getStoredAmount(slot));
this.activeSync[slot].set(this.lvlEmitter.isSlotActive(slot));
this.invertedSync[slot].set(this.lvlEmitter.isSlotInverted(slot));
}
@@ -109,6 +113,10 @@ public class ContainerAdvancedLevelEmitter extends AEBaseContainer implements IC
this.amountSync[slot].set(value);
}
public long getStoredAmount(final int slot) {
return this.storedSync[slot].get();
}
public boolean isSlotActive(final int slot) {
return this.activeSync[slot].get();
}
@@ -55,6 +55,7 @@ public class ContainerLevelEmitter extends ContainerUpgradeable implements ICont
private MEGuiTextField textField;
private final LongSyncHandler emitterValueSync;
private final LongSyncHandler storedSync;
private final DeltaObjectSyncHandler<@NotNull AEStackTypeFilter, TypeFilterDelta> typeFiltersSync;
private final ConfigEnumSyncHandler<@NotNull LevelType> levelModeSync;
private final ConfigEnumSyncHandler<@NotNull YesNo> craftingModeSync;
@@ -72,6 +73,8 @@ public class ContainerLevelEmitter extends ContainerUpgradeable implements ICont
}
}).onServerChange((oldValue, newValue) -> this.lvlEmitter.setReportingValue(newValue));
this.storedSync = sync.longS2C("stored");
this.typeFiltersSync = sync
.object("typeFilters", AEStackTypeFilterSyncCodec.INSTANCE, this.lvlEmitter.getTypeFilters())
.onClientChange((oldValue, newValue) -> {
@@ -170,6 +173,7 @@ public class ContainerLevelEmitter extends ContainerUpgradeable implements ICont
if (Platform.isServer()) {
this.emitterValueSync.set(this.lvlEmitter.getReportingValue());
this.storedSync.set(this.lvlEmitter.getStoredAmount());
this.typeFiltersSync.set(this.lvlEmitter.getTypeFilters());
this.craftingModeSync.syncFromConfig();
this.levelModeSync.syncFromConfig();
@@ -185,6 +189,10 @@ public class ContainerLevelEmitter extends ContainerUpgradeable implements ICont
return this.emitterValueSync.get();
}
public long getStoredAmount() {
return this.storedSync.get();
}
public void setLevel(final long l) {
this.emitterValueSync.set(l);
}
@@ -108,6 +108,11 @@ public class PartAdvancedLevelEmitter extends PartUpgradeable implements IAdvanc
this.updateState();
}
@Override
public long getStoredAmount(final int slot) {
return this.lastReportedValue[slot];
}
@Override
public boolean isSlotActive(final int slot) {
return this.slotActive[slot];
@@ -126,6 +126,11 @@ public class PartLevelEmitter extends PartUpgradeable implements ILevelEmitter {
return this.reportingValue;
}
@Override
public long getStoredAmount() {
return this.lastReportedValue;
}
public void setReportingValue(final long v) {
this.reportingValue = v;
this.getHost().markForSave();