Added HWYLA

This commit is contained in:
Sebastian Hartte
2020-07-05 16:50:39 +02:00
parent 1478e4c378
commit 9220ca0048
97 changed files with 2123 additions and 613 deletions
+8 -2
View File
@@ -34,6 +34,10 @@ repositories {
name = "BuildCraft" name = "BuildCraft"
url = "https://mod-buildcraft.com/maven" url = "https://mod-buildcraft.com/maven"
} }
maven {
name = "HYWLA"
url = "https://maven.tehnut.info/"
}
} }
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8
@@ -90,9 +94,11 @@ dependencies {
modImplementation "net.fabricmc:fabric-language-kotlin:${project.fabric_kotlin_version}" modImplementation "net.fabricmc:fabric-language-kotlin:${project.fabric_kotlin_version}"
modCompile "alexiil.mc.lib:libblockattributes-all:0.7.0" modImplementation "alexiil.mc.lib:libblockattributes-all:0.7.0"
modImplementation "me.shedaniel:RoughlyEnoughItems:4.6.6"
modImplementation "mcp.mobius.waila:Hwyla:1.16.1-1.9.22-75"
compile 'com.google.code.findbugs:jsr305:3.0.2' implementation 'com.google.code.findbugs:jsr305:3.0.2'
// unit test dependencies // unit test dependencies
testCompile "junit:junit:4.13" testCompile "junit:junit:4.13"
@@ -23,6 +23,9 @@
package appeng.api.config; package appeng.api.config;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
/** /**
* Represent the security systems basic permissions, these are not for * Represent the security systems basic permissions, these are not for
* anti-griefing, they are part of the mod as a gameplay feature. * anti-griefing, they are part of the mod as a gameplay feature.
@@ -64,7 +67,17 @@ public enum SecurityPermissions {
return this.translationKey + ".name"; return this.translationKey + ".name";
} }
public Text nameText() {
return new TranslatableText(getTranslatedName());
}
public String getTranslatedTip() { public String getTranslatedTip() {
return this.translationKey + ".tip"; return this.translationKey + ".tip";
} }
public Text tooltipText() {
return new TranslatableText(getTranslatedTip());
}
} }
@@ -73,7 +73,7 @@ public class AEBaseBlockItemChargeable extends AEBaseBlockItem implements IAEIte
final double percent = internalCurrentPower / internalMaxPower; final double percent = internalCurrentPower / internalMaxPower;
lines.add(GuiText.StoredEnergy.textComponent() lines.add(GuiText.StoredEnergy.text()
.copy() .copy()
.append(':' + MessageFormat.format(" {0,number,#} ", internalCurrentPower)) .append(':' + MessageFormat.format(" {0,number,#} ", internalCurrentPower))
.append(new TranslatableText(PowerUnits.AE.unlocalizedName)) .append(new TranslatableText(PowerUnits.AE.unlocalizedName))
@@ -88,7 +88,6 @@ public class ChestBlock extends AEBaseTileBlock<ChestBlockEntity> {
} else { } else {
ContainerOpener.openContainer(ChestContainer.TYPE, p, ContainerOpener.openContainer(ChestContainer.TYPE, p,
ContainerLocator.forTileEntitySide(tg, hit.getSide())); ContainerLocator.forTileEntitySide(tg, hit.getSide()));
throw new IllegalStateException();
} }
return ActionResult.SUCCESS; return ActionResult.SUCCESS;
@@ -20,6 +20,7 @@ package appeng.bootstrap;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import appeng.client.render.model.AutoRotatingBakedModel;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
@@ -77,7 +78,7 @@ class BlockRendering implements IBlockRendering {
// This is a default rotating model if the base-block uses an AE block entity // This is a default rotating model if the base-block uses an AE block entity
// which exposes UP/FRONT as // which exposes UP/FRONT as
// extended props // extended props
// FIXME FABRIC factory.addModelOverride(id.getPath(), (l, m) -> new AutoRotatingBakedModel(m)); factory.addModelOverride(id.getPath(), (l, m) -> new AutoRotatingBakedModel(m));
} }
if (this.blockColor != null) { if (this.blockColor != null) {
+50 -41
View File
@@ -5,7 +5,6 @@ import appeng.bootstrap.ModelsReloadCallback;
import appeng.bootstrap.components.IClientSetupComponent; import appeng.bootstrap.components.IClientSetupComponent;
import appeng.bootstrap.components.IItemColorRegistrationComponent; import appeng.bootstrap.components.IItemColorRegistrationComponent;
import appeng.bootstrap.components.IModelBakeComponent; import appeng.bootstrap.components.IModelBakeComponent;
import appeng.bootstrap.components.ITileEntityRegistrationComponent;
import appeng.client.gui.implementations.*; import appeng.client.gui.implementations.*;
import appeng.client.render.cablebus.CableBusModelLoader; import appeng.client.render.cablebus.CableBusModelLoader;
import appeng.client.render.effects.*; import appeng.client.render.effects.*;
@@ -20,22 +19,23 @@ import appeng.core.features.registries.PartModels;
import appeng.core.sync.network.ClientNetworkHandler; import appeng.core.sync.network.ClientNetworkHandler;
import appeng.core.worlddata.WorldData; import appeng.core.worlddata.WorldData;
import appeng.entity.*; import appeng.entity.*;
import appeng.fluids.client.gui.*;
import appeng.fluids.container.*;
import appeng.hooks.ClientTickHandler; import appeng.hooks.ClientTickHandler;
import appeng.util.Platform; import appeng.util.Platform;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry;
import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry;
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry;
import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry;
import net.fabricmc.fabric.api.event.client.ClientSpriteRegistryCallback; import net.fabricmc.fabric.api.event.client.ClientSpriteRegistryCallback;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.options.KeyBinding; import net.minecraft.client.options.KeyBinding;
import net.minecraft.client.render.entity.ItemEntityRenderer; import net.minecraft.client.render.entity.ItemEntityRenderer;
import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.util.InputUtil;
import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.client.util.SpriteIdentifier;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@@ -52,13 +52,15 @@ import java.util.stream.Stream;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public final class AppEngClient extends AppEngBase { public final class AppEngClient extends AppEngBase {
private final static String KEY_CATEGORY = "key.appliedenergistics2.category";
private final MinecraftClient client; private final MinecraftClient client;
private final ClientNetworkHandler networkHandler; private final ClientNetworkHandler networkHandler;
private final ClientTickHandler tickHandler; private final ClientTickHandler tickHandler;
private final EnumMap<ActionKey, KeyBinding> bindings = new EnumMap<>(ActionKey.class); private final EnumMap<ActionKey, KeyBinding> bindings;
public static AppEngClient instance() { public static AppEngClient instance() {
return (AppEngClient) AppEng.instance(); return (AppEngClient) AppEng.instance();
@@ -87,6 +89,13 @@ public final class AppEngClient extends AppEngBase {
ServerLifecycleEvents.SERVER_STARTED.register(WorldData::onServerStarting); ServerLifecycleEvents.SERVER_STARTED.register(WorldData::onServerStarting);
ServerLifecycleEvents.SERVER_STOPPING.register(server -> WorldData.instance().onServerStopping()); ServerLifecycleEvents.SERVER_STOPPING.register(server -> WorldData.instance().onServerStopping());
ServerLifecycleEvents.SERVER_STOPPED.register(server -> WorldData.instance().onServerStoppped()); ServerLifecycleEvents.SERVER_STOPPED.register(server -> WorldData.instance().onServerStoppped());
this.bindings = new EnumMap<>(ActionKey.class);
for (ActionKey key : ActionKey.values()) {
final KeyBinding binding = new KeyBinding(key.getTranslationKey(), key.getDefaultKey(), KEY_CATEGORY);
KeyBindingHelper.registerKeyBinding(binding);
this.bindings.put(key, binding);
}
} }
@Override @Override
@@ -253,43 +262,43 @@ public final class AppEngClient extends AppEngBase {
ScreenRegistry.register(SkyChestContainer.TYPE, SkyChestScreen::new); ScreenRegistry.register(SkyChestContainer.TYPE, SkyChestScreen::new);
ScreenRegistry.register(ChestContainer.TYPE, ChestScreen::new); ScreenRegistry.register(ChestContainer.TYPE, ChestScreen::new);
ScreenRegistry.register(WirelessContainer.TYPE, WirelessScreen::new); ScreenRegistry.register(WirelessContainer.TYPE, WirelessScreen::new);
// FIXME FABRIC ScreenRegistry.<MEMonitorableContainer, MEMonitorableScreen<MEMonitorableContainer>>register( ScreenRegistry.<MEMonitorableContainer, MEMonitorableScreen<MEMonitorableContainer>>register(
// FIXME FABRIC MEMonitorableContainer.TYPE, MEMonitorableScreen::new); MEMonitorableContainer.TYPE, MEMonitorableScreen::new);
// FIXME FABRIC ScreenRegistry.register(MEPortableCellContainer.TYPE, MEPortableCellScreen::new); ScreenRegistry.register(MEPortableCellContainer.TYPE, MEPortableCellScreen::new);
// FIXME FABRIC ScreenRegistry.register(WirelessTermContainer.TYPE, WirelessTermScreen::new); ScreenRegistry.register(WirelessTermContainer.TYPE, WirelessTermScreen::new);
// FIXME FABRIC ScreenRegistry.register(NetworkStatusContainer.TYPE, NetworkStatusScreen::new); ScreenRegistry.register(NetworkStatusContainer.TYPE, NetworkStatusScreen::new);
// FIXME FABRIC ScreenRegistry.<CraftingCPUContainer, CraftingCPUScreen<CraftingCPUContainer>>register( ScreenRegistry.<CraftingCPUContainer, CraftingCPUScreen<CraftingCPUContainer>>register(
// FIXME FABRIC CraftingCPUContainer.TYPE, CraftingCPUScreen::new); CraftingCPUContainer.TYPE, CraftingCPUScreen::new);
// FIXME FABRIC ScreenRegistry.register(NetworkToolContainer.TYPE, NetworkToolScreen::new); ScreenRegistry.register(NetworkToolContainer.TYPE, NetworkToolScreen::new);
// FIXME FABRIC ScreenRegistry.register(QuartzKnifeContainer.TYPE, QuartzKnifeScreen::new); ScreenRegistry.register(QuartzKnifeContainer.TYPE, QuartzKnifeScreen::new);
// FIXME FABRIC ScreenRegistry.register(DriveContainer.TYPE, DriveScreen::new); ScreenRegistry.register(DriveContainer.TYPE, DriveScreen::new);
// FIXME FABRIC ScreenRegistry.register(VibrationChamberContainer.TYPE, VibrationChamberScreen::new); ScreenRegistry.register(VibrationChamberContainer.TYPE, VibrationChamberScreen::new);
// FIXME FABRIC ScreenRegistry.register(CondenserContainer.TYPE, CondenserScreen::new); ScreenRegistry.register(CondenserContainer.TYPE, CondenserScreen::new);
// FIXME FABRIC ScreenRegistry.register(InterfaceContainer.TYPE, InterfaceScreen::new); ScreenRegistry.register(InterfaceContainer.TYPE, InterfaceScreen::new);
// FIXME FABRIC ScreenRegistry.register(FluidInterfaceContainer.TYPE, FluidInterfaceScreen::new); ScreenRegistry.register(FluidInterfaceContainer.TYPE, FluidInterfaceScreen::new);
// FIXME FABRIC ScreenRegistry.<UpgradeableContainer, UpgradeableScreen<UpgradeableContainer>>register( ScreenRegistry.<UpgradeableContainer, UpgradeableScreen<UpgradeableContainer>>register(
// FIXME FABRIC UpgradeableContainer.TYPE, UpgradeableScreen::new); UpgradeableContainer.TYPE, UpgradeableScreen::new);
// FIXME FABRIC ScreenRegistry.register(FluidIOContainer.TYPE, FluidIOScreen::new); ScreenRegistry.register(FluidIOContainer.TYPE, FluidIOScreen::new);
// FIXME FABRIC ScreenRegistry.register(IOPortContainer.TYPE, IOPortScreen::new); ScreenRegistry.register(IOPortContainer.TYPE, IOPortScreen::new);
// FIXME FABRIC ScreenRegistry.register(StorageBusContainer.TYPE, StorageBusScreen::new); ScreenRegistry.register(StorageBusContainer.TYPE, StorageBusScreen::new);
// FIXME FABRIC ScreenRegistry.register(FluidStorageBusContainer.TYPE, FluidStorageBusScreen::new); ScreenRegistry.register(FluidStorageBusContainer.TYPE, FluidStorageBusScreen::new);
// FIXME FABRIC ScreenRegistry.register(FormationPlaneContainer.TYPE, FormationPlaneScreen::new); ScreenRegistry.register(FormationPlaneContainer.TYPE, FormationPlaneScreen::new);
// FIXME FABRIC ScreenRegistry.register(FluidFormationPlaneContainer.TYPE, FluidFormationPlaneScreen::new); ScreenRegistry.register(FluidFormationPlaneContainer.TYPE, FluidFormationPlaneScreen::new);
// FIXME FABRIC ScreenRegistry.register(PriorityContainer.TYPE, PriorityScreen::new); ScreenRegistry.register(PriorityContainer.TYPE, PriorityScreen::new);
// FIXME FABRIC ScreenRegistry.register(SecurityStationContainer.TYPE, SecurityStationScreen::new); ScreenRegistry.register(SecurityStationContainer.TYPE, SecurityStationScreen::new);
// FIXME FABRIC ScreenRegistry.register(CraftingTermContainer.TYPE, CraftingTermScreen::new); ScreenRegistry.register(CraftingTermContainer.TYPE, CraftingTermScreen::new);
// FIXME FABRIC ScreenRegistry.register(PatternTermContainer.TYPE, PatternTermScreen::new); ScreenRegistry.register(PatternTermContainer.TYPE, PatternTermScreen::new);
// FIXME FABRIC ScreenRegistry.register(FluidTerminalContainer.TYPE, FluidTerminalScreen::new); ScreenRegistry.register(FluidTerminalContainer.TYPE, FluidTerminalScreen::new);
// FIXME FABRIC ScreenRegistry.register(LevelEmitterContainer.TYPE, LevelEmitterScreen::new); ScreenRegistry.register(LevelEmitterContainer.TYPE, LevelEmitterScreen::new);
// FIXME FABRIC ScreenRegistry.register(FluidLevelEmitterContainer.TYPE, FluidLevelEmitterScreen::new); ScreenRegistry.register(FluidLevelEmitterContainer.TYPE, FluidLevelEmitterScreen::new);
// FIXME FABRIC ScreenRegistry.register(SpatialIOPortContainer.TYPE, SpatialIOPortScreen::new); ScreenRegistry.register(SpatialIOPortContainer.TYPE, SpatialIOPortScreen::new);
// FIXME FABRIC ScreenRegistry.register(InscriberContainer.TYPE, InscriberScreen::new); ScreenRegistry.register(InscriberContainer.TYPE, InscriberScreen::new);
// FIXME FABRIC ScreenRegistry.register(CellWorkbenchContainer.TYPE, CellWorkbenchScreen::new); ScreenRegistry.register(CellWorkbenchContainer.TYPE, CellWorkbenchScreen::new);
// FIXME FABRIC ScreenRegistry.register(MolecularAssemblerContainer.TYPE, MolecularAssemblerScreen::new); ScreenRegistry.register(MolecularAssemblerContainer.TYPE, MolecularAssemblerScreen::new);
// FIXME FABRIC ScreenRegistry.register(CraftAmountContainer.TYPE, CraftAmountScreen::new); ScreenRegistry.register(CraftAmountContainer.TYPE, CraftAmountScreen::new);
// FIXME FABRIC ScreenRegistry.register(CraftConfirmContainer.TYPE, CraftConfirmScreen::new); ScreenRegistry.register(CraftConfirmContainer.TYPE, CraftConfirmScreen::new);
// FIXME FABRIC ScreenRegistry.register(InterfaceTerminalContainer.TYPE, InterfaceTerminalScreen::new); ScreenRegistry.register(InterfaceTerminalContainer.TYPE, InterfaceTerminalScreen::new);
// FIXME FABRIC ScreenRegistry.register(CraftingStatusContainer.TYPE, CraftingStatusScreen::new); ScreenRegistry.register(CraftingStatusContainer.TYPE, CraftingStatusScreen::new);
} }
} }
@@ -24,6 +24,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import appeng.mixins.SlotMixin; import appeng.mixins.SlotMixin;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
@@ -40,7 +41,7 @@ import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.Slot;
import net.minecraft.text.StringRenderable; import net.minecraft.text.LiteralText;
import net.minecraft.text.Style; import net.minecraft.text.Style;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
@@ -175,8 +176,8 @@ public abstract class AEBaseScreen<T extends AEBaseContainer> extends HandledScr
} }
private void drawTooltip(MatrixStack matrices, ITooltip tooltip, int mouseX, int mouseY) { private void drawTooltip(MatrixStack matrices, ITooltip tooltip, int mouseX, int mouseY) {
final int x = tooltip.xPos(); // ((GuiImgButton) c).x; final int x = tooltip.xPos();
int y = tooltip.yPos(); // ((GuiImgButton) c).y; int y = tooltip.yPos();
if (x < mouseX && x + tooltip.getWidth() > mouseX && tooltip.isVisible()) { if (x < mouseX && x + tooltip.getWidth() > mouseX && tooltip.isVisible()) {
if (y < mouseY && y + tooltip.getHeight() > mouseY) { if (y < mouseY && y + tooltip.getHeight() > mouseY) {
@@ -194,28 +195,28 @@ public abstract class AEBaseScreen<T extends AEBaseContainer> extends HandledScr
protected void drawTooltip(MatrixStack matrices, int x, int y, Text message) { protected void drawTooltip(MatrixStack matrices, int x, int y, Text message) {
String[] lines = message.getString().split("\n"); // FIXME FABRIC String[] lines = message.getString().split("\n"); // FIXME FABRIC
this.drawTooltip(matrices, x, y, Arrays.asList(lines)); List<Text> textLines = Arrays.stream(lines).map(LiteralText::new).collect(Collectors.toList());
this.drawTooltip(matrices, x, y, textLines);
} }
// FIXME FABRIC: move out to json (?) // FIXME FABRIC: move out to json (?)
private static final Style TOOLTIP_HEADER = Style.EMPTY.withColor(Formatting.WHITE); private static final Style TOOLTIP_HEADER = Style.EMPTY.withColor(Formatting.WHITE);
private static final Style TOOLTIP_BODY = Style.EMPTY.withColor(Formatting.GRAY); private static final Style TOOLTIP_BODY = Style.EMPTY.withColor(Formatting.GRAY);
protected void drawTooltip(MatrixStack matrices, int x, int y, List<String> lines) { protected void drawTooltip(MatrixStack matrices, int x, int y, List<Text> lines) {
if (lines.isEmpty()) { if (lines.isEmpty()) {
return; return;
} }
List<StringRenderable> renderableLines = new ArrayList<>(lines.size());
// Make the first line white // Make the first line white
// All lines after the first are colored gray // All lines after the first are colored gray
List<Text> styledLines = new ArrayList<>(lines.size());
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
Style style = (i == 0) ? TOOLTIP_HEADER : TOOLTIP_BODY; Style style = (i == 0) ? TOOLTIP_HEADER : TOOLTIP_BODY;
renderableLines.add(StringRenderable.styled(lines.get(0), style)); styledLines.add(lines.get(i).copy().styled(s -> style));
} }
this.renderTooltip(matrices, renderableLines, x, y); this.renderTooltip(matrices, styledLines, x, y);
} }
@Override @Override
@@ -261,7 +262,7 @@ public abstract class AEBaseScreen<T extends AEBaseContainer> extends HandledScr
} }
for (final CustomSlotWidget slot : this.guiSlots) { for (final CustomSlotWidget slot : this.guiSlots) {
slot.drawBackground(ox, oy, getZOffset()); slot.drawBackground(matrices, ox, oy, getZOffset());
} }
} }
@@ -608,8 +609,8 @@ public abstract class AEBaseScreen<T extends AEBaseContainer> extends HandledScr
this.itemRenderer.zOffset = 0.0F; this.itemRenderer.zOffset = 0.0F;
} }
protected String getGuiDisplayName(final String in) { protected Text getGuiDisplayName(final Text in) {
return this.hasCustomInventoryName() ? this.getInventoryName() : in; return this.hasCustomInventoryName() ? new LiteralText(this.getInventoryName()) : in;
} }
private boolean hasCustomInventoryName() { private boolean hasCustomInventoryName() {
@@ -57,7 +57,7 @@ public class CellWorkbenchScreen extends UpgradeableScreen<CellWorkbenchContaine
new ActionButton(this.x - 18, this.y + 28, ActionItems.WRENCH, act1 -> action("Partition"))); new ActionButton(this.x - 18, this.y + 28, ActionItems.WRENCH, act1 -> action("Partition")));
this.addButton(new ActionButton(this.x - 18, this.y + 8, ActionItems.CLOSE, act -> action("Clear"))); this.addButton(new ActionButton(this.x - 18, this.y + 8, ActionItems.CLOSE, act -> action("Clear")));
this.copyMode = this.addButton(new ToggleButton(this.x - 18, this.y + 48, 11 * 16 + 5, 12 * 16 + 5, this.copyMode = this.addButton(new ToggleButton(this.x - 18, this.y + 48, 11 * 16 + 5, 12 * 16 + 5,
GuiText.CopyMode.getLocal(), GuiText.CopyModeDesc.getLocal(), act -> action("CopyMode"))); GuiText.CopyMode.text(), GuiText.CopyModeDesc.text(), act -> action("CopyMode")));
} }
@Override @Override
@@ -69,9 +69,9 @@ public class CellWorkbenchScreen extends UpgradeableScreen<CellWorkbenchContaine
if (this.drawUpgrades()) { if (this.drawUpgrades()) {
if (this.handler.availableUpgrades() <= 8) { if (this.handler.availableUpgrades() <= 8) {
drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35,
7 + this.handler.availableUpgrades() * 18, getZOffset()); 7 + this.handler.availableUpgrades() * 18);
drawTexture(matrices, offsetX + 177, offsetY + (7 + (this.handler.availableUpgrades()) * 18), drawTexture(matrices, offsetX + 177, offsetY + (7 + (this.handler.availableUpgrades()) * 18),
177, 151, 35, 7, getZOffset()); 177, 151, 35, 7);
} else if (this.handler.availableUpgrades() <= 16) { } else if (this.handler.availableUpgrades() <= 16) {
drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, 7 + 8 * 18); drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, 7 + 8 * 18);
drawTexture(matrices, offsetX + 177, offsetY + (7 + (8) * 18), 177, 151, 35, 7); drawTexture(matrices, offsetX + 177, offsetY + (7 + (8) * 18), 177, 151, 35, 7);
@@ -82,7 +82,7 @@ public class CellWorkbenchScreen extends UpgradeableScreen<CellWorkbenchContaine
drawTexture(matrices, offsetX + 177 + 27, offsetY + (7 + (dx) * 18), 186, 151, 35 - 8, 7); drawTexture(matrices, offsetX + 177 + 27, offsetY + (7 + (dx) * 18), 186, 151, 35 - 8, 7);
} else { } else {
drawTexture(matrices, offsetX + 177 + 27 + 4, offsetY + (7 + (dx) * 18), 186 + 4, 151, drawTexture(matrices, offsetX + 177 + 27 + 4, offsetY + (7 + (dx) * 18), 186 + 4, 151,
35 - 8, 7, getZOffset()); 35 - 8, 7);
} }
} else { } else {
drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, 7 + 8 * 18); drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, 7 + 8 * 18);
@@ -95,10 +95,10 @@ public class CellWorkbenchScreen extends UpgradeableScreen<CellWorkbenchContaine
drawTexture(matrices, offsetX + 177 + 27 + 18, offsetY, 186, 0, 35 - 8, 7 + dx * 18); drawTexture(matrices, offsetX + 177 + 27 + 18, offsetY, 186, 0, 35 - 8, 7 + dx * 18);
if (dx == 8) { if (dx == 8) {
drawTexture(matrices, offsetX + 177 + 27 + 18, offsetY + (7 + (dx) * 18), 186, 151, 35 - 8, drawTexture(matrices, offsetX + 177 + 27 + 18, offsetY + (7 + (dx) * 18), 186, 151, 35 - 8,
7, getZOffset()); 7);
} else { } else {
drawTexture(matrices, offsetX + 177 + 27 + 18 + 4, offsetY + (7 + (dx) * 18), 186 + 4, 151, drawTexture(matrices, offsetX + 177 + 27 + 18 + 4, offsetY + (7 + (dx) * 18), 186 + 4, 151,
35 - 8, 7, getZOffset()); 35 - 8, 7);
} }
} }
} }
@@ -42,7 +42,7 @@ public class ChestScreen extends AEBaseScreen<ChestContainer> {
public void init() { public void init() {
super.init(); super.init();
this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.textComponent(), this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.text(),
this.itemRenderer, btn -> openPriority())); this.itemRenderer, btn -> openPriority()));
} }
@@ -52,8 +52,8 @@ public class ChestScreen extends AEBaseScreen<ChestContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Chest.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Chest.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@Override @Override
@@ -50,14 +50,14 @@ public class CondenserScreen extends AEBaseScreen<CondenserContainer> {
this.handler.getOutput()); this.handler.getOutput());
this.addButton(new ProgressBar(this.handler, "guis/condenser.png", 120 + this.x, 25 + this.y, 178, this.addButton(new ProgressBar(this.handler, "guis/condenser.png", 120 + this.x, 25 + this.y, 178,
25, 6, 18, Direction.VERTICAL, GuiText.StoredEnergy.getLocal())); 25, 6, 18, Direction.VERTICAL, GuiText.StoredEnergy.text()));
this.addButton(this.mode); this.addButton(this.mode);
} }
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Condenser.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Condenser.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
this.mode.set(this.handler.getOutput()); this.mode.set(this.handler.getOutput());
this.mode.setFillVar(String.valueOf(this.handler.getOutput().requiredPower)); this.mode.setFillVar(String.valueOf(this.handler.getOutput().requiredPower));
@@ -21,6 +21,7 @@ package appeng.client.gui.implementations;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -53,22 +54,22 @@ public class CraftAmountScreen extends AEBaseScreen<CraftAmountContainer> {
final int c = AEConfig.instance().craftItemsByStackAmounts(2); final int c = AEConfig.instance().craftItemsByStackAmounts(2);
final int d = AEConfig.instance().craftItemsByStackAmounts(3); final int d = AEConfig.instance().craftItemsByStackAmounts(3);
this.addButton(new ButtonWidget(this.x + 20, this.y + 26, 22, 20, "+" + a, btn -> addQty(a))); this.addButton(new ButtonWidget(this.x + 20, this.y + 26, 22, 20, new LiteralText("+" + a), btn -> addQty(a)));
this.addButton(new ButtonWidget(this.x + 48, this.y + 26, 28, 20, "+" + b, btn -> addQty(b))); this.addButton(new ButtonWidget(this.x + 48, this.y + 26, 28, 20, new LiteralText("+" + b), btn -> addQty(b)));
this.addButton(new ButtonWidget(this.x + 82, this.y + 26, 32, 20, "+" + c, btn -> addQty(c))); this.addButton(new ButtonWidget(this.x + 82, this.y + 26, 32, 20, new LiteralText("+" + c), btn -> addQty(c)));
this.addButton(new ButtonWidget(this.x + 120, this.y + 26, 38, 20, "+" + d, btn -> addQty(d))); this.addButton(new ButtonWidget(this.x + 120, this.y + 26, 38, 20, new LiteralText("+" + d), btn -> addQty(d)));
this.addButton(new ButtonWidget(this.x + 20, this.y + 75, 22, 20, "-" + a, btn -> addQty(-a))); this.addButton(new ButtonWidget(this.x + 20, this.y + 75, 22, 20, new LiteralText("-" + a), btn -> addQty(-a)));
this.addButton(new ButtonWidget(this.x + 48, this.y + 75, 28, 20, "-" + b, btn -> addQty(-b))); this.addButton(new ButtonWidget(this.x + 48, this.y + 75, 28, 20, new LiteralText("-" + b), btn -> addQty(-b)));
this.addButton(new ButtonWidget(this.x + 82, this.y + 75, 32, 20, "-" + c, btn -> addQty(-c))); this.addButton(new ButtonWidget(this.x + 82, this.y + 75, 32, 20, new LiteralText("-" + c), btn -> addQty(-c)));
this.addButton(new ButtonWidget(this.x + 120, this.y + 75, 38, 20, "-" + d, btn -> addQty(-d))); this.addButton(new ButtonWidget(this.x + 120, this.y + 75, 38, 20, new LiteralText("-" + d), btn -> addQty(-d)));
this.next = this.addButton( this.next = this.addButton(
new ButtonWidget(this.x + 128, this.y + 51, 38, 20, GuiText.Next.getLocal(), this::confirm)); new ButtonWidget(this.x + 128, this.y + 51, 38, 20, GuiText.Next.text(), this::confirm));
subGui.addBackButton(this::addButton, 154, 0); subGui.addBackButton(this::addButton, 154, 0);
this.amountToCraft = new NumberBox(this.textRenderer, this.x + 62, this.y + 57, 59, this.textRenderer.FONT_HEIGHT, this.amountToCraft = new NumberBox(this.textRenderer, this.x + 62, this.y + 57, 59, this.textRenderer.fontHeight,
Integer.class); Integer.class);
this.amountToCraft.setHasBorder(false); this.amountToCraft.setHasBorder(false);
this.amountToCraft.setMaxLength(16); this.amountToCraft.setMaxLength(16);
@@ -85,12 +86,12 @@ public class CraftAmountScreen extends AEBaseScreen<CraftAmountContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, GuiText.SelectAmount.getLocal(), 8, 6, 4210752); this.textRenderer.draw(matrices, GuiText.SelectAmount.text(), 8, 6, 4210752);
} }
@Override @Override
public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) {
this.next.setMessage(hasShiftDown() ? GuiText.Start.getLocal() : GuiText.Next.getLocal()); this.next.setMessage(hasShiftDown() ? GuiText.Start.text() : GuiText.Next.text());
this.bindTexture("guis/craft_amt.png"); this.bindTexture("guis/craft_amt.png");
drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight);
@@ -102,7 +103,7 @@ public class CraftAmountScreen extends AEBaseScreen<CraftAmountContainer> {
this.next.active = false; this.next.active = false;
} }
this.amountToCraft.render(offsetX, offsetY, partialTicks); this.amountToCraft.render(matrices, offsetX, offsetY, partialTicks);
} }
@Override @Override
@@ -30,6 +30,7 @@ import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -82,17 +83,17 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
public void init() { public void init() {
super.init(); super.init();
this.start = new ButtonWidget(this.x + 162, this.y + this.backgroundHeight - 25, 50, 20, GuiText.Start.getLocal(), this.start = new ButtonWidget(this.x + 162, this.y + this.backgroundHeight - 25, 50, 20, GuiText.Start.text(),
btn -> start()); btn -> start());
this.start.active = false; this.start.active = false;
this.addButton(this.start); this.addButton(this.start);
this.selectCPU = new ButtonWidget(this.x + (219 - 180) / 2, this.y + this.backgroundHeight - 68, 180, 20, this.selectCPU = new ButtonWidget(this.x + (219 - 180) / 2, this.y + this.backgroundHeight - 68, 180, 20,
GuiText.CraftingCPU.getLocal() + ": " + GuiText.Automatic, btn -> selectNextCpu()); GuiText.CraftingCPU.withSuffix(": ").append(GuiText.Automatic.text()), btn -> selectNextCpu());
this.selectCPU.active = false; this.selectCPU.active = false;
this.addButton(this.selectCPU); this.addButton(this.selectCPU);
addButton(new ButtonWidget(this.x + 6, this.y + this.backgroundHeight - 25, 50, 20, GuiText.Cancel.getLocal(), addButton(new ButtonWidget(this.x + 6, this.y + this.backgroundHeight - 25, 50, 20, GuiText.Cancel.text(),
btn -> subGui.goBack())); btn -> subGui.goBack()));
} }
@@ -134,19 +135,19 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
} }
private void updateCPUButtonText() { private void updateCPUButtonText() {
String btnTextText = GuiText.CraftingCPU.getLocal() + ": " + GuiText.Automatic.getLocal(); Text btnTextText = GuiText.CraftingCPU.withSuffix(": ").append(GuiText.Automatic.text());
if (this.handler.getSelectedCpu() >= 0)// && status.selectedCpu < status.cpus.size() ) if (this.handler.getSelectedCpu() >= 0)// && status.selectedCpu < status.cpus.size() )
{ {
if (this.handler.getName() != null) { if (this.handler.getName() != null) {
final String name = this.handler.getName().getStringTruncated(20); final String name = this.handler.getName().asTruncatedString(20);
btnTextText = GuiText.CraftingCPU.getLocal() + ": " + name; btnTextText = GuiText.CraftingCPU.withSuffix(": " + name);
} else { } else {
btnTextText = GuiText.CraftingCPU.getLocal() + ": #" + this.handler.getSelectedCpu(); btnTextText = GuiText.CraftingCPU.withSuffix(": #" + this.handler.getSelectedCpu());
} }
} }
if (this.handler.hasNoCPU()) { if (this.handler.hasNoCPU()) {
btnTextText = GuiText.NoCraftingCPUs.getLocal(); btnTextText = GuiText.NoCraftingCPUs.text();
} }
this.selectCPU.setMessage(btnTextText); this.selectCPU.setMessage(btnTextText);
@@ -160,19 +161,19 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
final long BytesUsed = this.handler.getUsedBytes(); final long BytesUsed = this.handler.getUsedBytes();
final String byteUsed = NumberFormat.getInstance().format(BytesUsed); final String byteUsed = NumberFormat.getInstance().format(BytesUsed);
final String Add = BytesUsed > 0 ? (byteUsed + ' ' + GuiText.BytesUsed.getLocal()) final Text Add = BytesUsed > 0 ? new LiteralText(byteUsed + " ").append(GuiText.BytesUsed.text())
: GuiText.CalculatingWait.getLocal(); : GuiText.CalculatingWait.text();
this.textRenderer.draw(matrices, GuiText.CraftingPlan.getLocal() + " - " + Add, 8, 7, 4210752); this.textRenderer.draw(matrices, GuiText.CraftingPlan.withSuffix(" - ").append(Add), 8, 7, 4210752);
String dsp = null; Text dsp;
if (this.isSimulation()) { if (this.isSimulation()) {
dsp = GuiText.Simulation.getLocal(); dsp = GuiText.Simulation.text();
} else { } else {
dsp = this.handler.getCpuAvailableBytes() > 0 dsp = this.handler.getCpuAvailableBytes() > 0
? (GuiText.Bytes.getLocal() + ": " + this.handler.getCpuAvailableBytes() + " : " ? (GuiText.Bytes.withSuffix(": " + this.handler.getCpuAvailableBytes() + " : ").append(
+ GuiText.CoProcessors.getLocal() + ": " + this.handler.getCpuCoProcessors()) GuiText.CoProcessors.text()).append(": " + this.handler.getCpuCoProcessors()))
: GuiText.Bytes.getLocal() + ": N/A : " + GuiText.CoProcessors.getLocal() + ": N/A"; : GuiText.Bytes.withSuffix(": N/A : ").append(GuiText.CoProcessors.text()).append(": N/A");
} }
final int offset = (219 - this.textRenderer.getWidth(dsp)) / 2; final int offset = (219 - this.textRenderer.getWidth(dsp)) / 2;
@@ -187,8 +188,8 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
final int viewStart = this.getScrollBar().getCurrentScroll() * 3; final int viewStart = this.getScrollBar().getCurrentScroll() * 3;
final int viewEnd = viewStart + 3 * this.rows; final int viewEnd = viewStart + 3 * this.rows;
String dspToolTip = ""; List<Text> dspToolTip = new ArrayList<>();
final List<String> lineList = new ArrayList<>(); final List<Text> lineList = new ArrayList<>();
int toolPosX = 0; int toolPosX = 0;
int toolPosY = 0; int toolPosY = 0;
@@ -228,14 +229,14 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
str = Long.toString(stored.getStackSize() / 1000000) + 'm'; str = Long.toString(stored.getStackSize() / 1000000) + 'm';
} }
str = GuiText.FromStorage.getLocal() + ": " + str; str = GuiText.FromStorage.text() + ": " + str;
final int w = 4 + this.textRenderer.getWidth(str); final int w = 4 + this.textRenderer.getWidth(str);
this.textRenderer.draw(matrices, str, this.textRenderer.draw(matrices, str,
(int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2), (int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2),
(y * offY + yo + 6 - negY + downY) * 2, 4210752); (y * offY + yo + 6 - negY + downY) * 2, 4210752);
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
lineList.add(GuiText.FromStorage.getLocal() + ": " + Long.toString(stored.getStackSize())); lineList.add(GuiText.FromStorage.withSuffix(": " + stored.getStackSize()));
} }
downY += 5; downY += 5;
@@ -251,14 +252,14 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
str = Long.toString(missingStack.getStackSize() / 1000000) + 'm'; str = Long.toString(missingStack.getStackSize() / 1000000) + 'm';
} }
str = GuiText.Missing.getLocal() + ": " + str; str = GuiText.Missing.text() + ": " + str;
final int w = 4 + this.textRenderer.getWidth(str); final int w = 4 + this.textRenderer.getWidth(str);
this.textRenderer.draw(matrices, str, this.textRenderer.draw(matrices, str,
(int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2), (int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2),
(y * offY + yo + 6 - negY + downY) * 2, 4210752); (y * offY + yo + 6 - negY + downY) * 2, 4210752);
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
lineList.add(GuiText.Missing.getLocal() + ": " + Long.toString(missingStack.getStackSize())); lineList.add(GuiText.Missing.withSuffix(": " + missingStack.getStackSize()));
} }
red = true; red = true;
@@ -274,14 +275,14 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
str = Long.toString(pendingStack.getStackSize() / 1000000) + 'm'; str = Long.toString(pendingStack.getStackSize() / 1000000) + 'm';
} }
str = GuiText.ToCraft.getLocal() + ": " + str; str = GuiText.ToCraft.text() + ": " + str;
final int w = 4 + this.textRenderer.getWidth(str); final int w = 4 + this.textRenderer.getWidth(str);
this.textRenderer.draw(matrices, str, this.textRenderer.draw(matrices, str,
(int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2), (int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2),
(y * offY + yo + 6 - negY + downY) * 2, 4210752); (y * offY + yo + 6 - negY + downY) * 2, 4210752);
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
lineList.add(GuiText.ToCraft.getLocal() + ": " + Long.toString(pendingStack.getStackSize())); lineList.add(GuiText.ToCraft.withSuffix(": " + pendingStack.getStackSize()));
} }
} }
@@ -292,10 +293,10 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
final ItemStack is = refStack.asItemStackRepresentation(); final ItemStack is = refStack.asItemStackRepresentation();
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
dspToolTip = Platform.getItemDisplayName(refStack).getFormattedText(); dspToolTip.add(Platform.getItemDisplayName(refStack));
if (lineList.size() > 0) { if (lineList.size() > 0) {
dspToolTip = dspToolTip + '\n' + Joiner.on("\n").join(lineList); dspToolTip.addAll(lineList);
} }
toolPosX = x * (1 + sectionLength) + xo + sectionLength - 8; toolPosX = x * (1 + sectionLength) + xo + sectionLength - 8;
@@ -307,7 +308,7 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
if (red) { if (red) {
final int startX = x * (1 + sectionLength) + xo; final int startX = x * (1 + sectionLength) + xo;
final int startY = posY - 4; final int startY = posY - 4;
fill(startX, startY, startX + sectionLength, startY + offY, 0x1AFF0000); fill(matrices, startX, startY, startX + sectionLength, startY + offY, 0x1AFF0000);
} }
x++; x++;
@@ -320,7 +321,7 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
} }
if (this.tooltip >= 0 && !dspToolTip.isEmpty()) { if (this.tooltip >= 0 && !dspToolTip.isEmpty()) {
this.drawTooltip(, toolPosX, toolPosY + 10, dspToolTip); this.drawTooltip(matrices, toolPosX, toolPosY + 10, dspToolTip);
} }
} }
@@ -449,7 +450,7 @@ public class CraftConfirmScreen extends AEBaseScreen<CraftConfirmContainer> {
} }
private void selectNextCpu() { private void selectNextCpu() {
final boolean backwards = minecraft.mouse.wasRightButtonClicked(); final boolean backwards = getClient().mouse.wasRightButtonClicked();
NetworkHandler.instance().sendToServer(new ConfigValuePacket("Terminal.Cpu", backwards ? "Prev" : "Next")); NetworkHandler.instance().sendToServer(new ConfigValuePacket("Terminal.Cpu", backwards ? "Prev" : "Next"));
} }
@@ -116,7 +116,7 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
super.init(); super.init();
this.setScrollBar(); this.setScrollBar();
this.cancel = new ButtonWidget(this.x + CANCEL_LEFT_OFFSET, this.y + this.backgroundHeight - CANCEL_TOP_OFFSET, this.cancel = new ButtonWidget(this.x + CANCEL_LEFT_OFFSET, this.y + this.backgroundHeight - CANCEL_TOP_OFFSET,
CANCEL_WIDTH, CANCEL_HEIGHT, GuiText.Cancel.getLocal(), btn -> cancel()); CANCEL_WIDTH, CANCEL_HEIGHT, GuiText.Cancel.text(), btn -> cancel());
this.addButton(this.cancel); this.addButton(this.cancel);
} }
@@ -163,14 +163,14 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
String title = this.getGuiDisplayName(GuiText.CraftingStatus.getLocal()); Text title = this.getGuiDisplayName(GuiText.CraftingStatus.text());
if (this.handler.getEstimatedTime() > 0 && !this.visual.isEmpty()) { if (this.handler.getEstimatedTime() > 0 && !this.visual.isEmpty()) {
final long etaInMilliseconds = TimeUnit.MILLISECONDS.convert(this.handler.getEstimatedTime(), final long etaInMilliseconds = TimeUnit.MILLISECONDS.convert(this.handler.getEstimatedTime(),
TimeUnit.NANOSECONDS); TimeUnit.NANOSECONDS);
final String etaTimeText = DurationFormatUtils.formatDuration(etaInMilliseconds, final String etaTimeText = DurationFormatUtils.formatDuration(etaInMilliseconds,
GuiText.ETAFormat.getLocal()); GuiText.ETAFormat.text().getString());
title += " - " + etaTimeText; title = title.copy().append(" - " + etaTimeText);
} }
this.textRenderer.draw(matrices, title, TITLE_LEFT_OFFSET, TITLE_TOP_OFFSET, TEXT_COLOR); this.textRenderer.draw(matrices, title, TITLE_LEFT_OFFSET, TITLE_TOP_OFFSET, TEXT_COLOR);
@@ -180,8 +180,8 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
final int viewStart = this.getScrollBar().getCurrentScroll() * 3; final int viewStart = this.getScrollBar().getCurrentScroll() * 3;
final int viewEnd = viewStart + 3 * 6; final int viewEnd = viewStart + 3 * 6;
String dspToolTip = ""; List<Text> dspToolTip = new ArrayList<>();
final List<String> lineList = new ArrayList<>(); final List<Text> lineList = new ArrayList<>();
int toolPosX = 0; int toolPosX = 0;
int toolPosY = 0; int toolPosY = 0;
@@ -219,14 +219,14 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
| BACKGROUND_ALPHA; | BACKGROUND_ALPHA;
final int startX = (x * (1 + SECTION_LENGTH) + ITEMSTACK_LEFT_OFFSET) * 2; final int startX = (x * (1 + SECTION_LENGTH) + ITEMSTACK_LEFT_OFFSET) * 2;
final int startY = ((y * offY + ITEMSTACK_TOP_OFFSET) - 3) * 2; final int startY = ((y * offY + ITEMSTACK_TOP_OFFSET) - 3) * 2;
fill(startX, startY, startX + (SECTION_LENGTH * 2), startY + (offY * 2) - 2, bgColor); fill(matrices, startX, startY, startX + (SECTION_LENGTH * 2), startY + (offY * 2) - 2, bgColor);
} }
final int negY = ((lines - 1) * 5) / 2; final int negY = ((lines - 1) * 5) / 2;
int downY = 0; int downY = 0;
if (stored != null && stored.getStackSize() > 0) { if (stored != null && stored.getStackSize() > 0) {
final String str = GuiText.Stored.getLocal() + ": " final String str = GuiText.Stored.text() + ": "
+ converter.toWideReadableForm(stored.getStackSize()); + converter.toWideReadableForm(stored.getStackSize());
final int w = 4 + this.textRenderer.getWidth(str); final int w = 4 + this.textRenderer.getWidth(str);
this.textRenderer.draw(matrices, str, this.textRenderer.draw(matrices, str,
@@ -235,14 +235,14 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
(y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR); (y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR);
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
lineList.add(GuiText.Stored.getLocal() + ": " + Long.toString(stored.getStackSize())); lineList.add(GuiText.Stored.withSuffix(": " + stored.getStackSize()));
} }
downY += 5; downY += 5;
} }
if (activeStack != null && activeStack.getStackSize() > 0) { if (activeStack != null && activeStack.getStackSize() > 0) {
final String str = GuiText.Crafting.getLocal() + ": " final String str = GuiText.Crafting.text() + ": "
+ converter.toWideReadableForm(activeStack.getStackSize()); + converter.toWideReadableForm(activeStack.getStackSize());
final int w = 4 + this.textRenderer.getWidth(str); final int w = 4 + this.textRenderer.getWidth(str);
@@ -252,14 +252,14 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
(y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR); (y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR);
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
lineList.add(GuiText.Crafting.getLocal() + ": " + Long.toString(activeStack.getStackSize())); lineList.add(GuiText.Crafting.withSuffix(": " + activeStack.getStackSize()));
} }
downY += 5; downY += 5;
} }
if (pendingStack != null && pendingStack.getStackSize() > 0) { if (pendingStack != null && pendingStack.getStackSize() > 0) {
final String str = GuiText.Scheduled.getLocal() + ": " final String str = GuiText.Scheduled.text() + ": "
+ converter.toWideReadableForm(pendingStack.getStackSize()); + converter.toWideReadableForm(pendingStack.getStackSize());
final int w = 4 + this.textRenderer.getWidth(str); final int w = 4 + this.textRenderer.getWidth(str);
@@ -269,7 +269,7 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
(y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR); (y * offY + ITEMSTACK_TOP_OFFSET + 6 - negY + downY) * 2, TEXT_COLOR);
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
lineList.add(GuiText.Scheduled.getLocal() + ": " + Long.toString(pendingStack.getStackSize())); lineList.add(GuiText.Scheduled.withSuffix(": " + pendingStack.getStackSize()));
} }
} }
@@ -280,10 +280,10 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
final ItemStack is = refStack.asItemStackRepresentation(); final ItemStack is = refStack.asItemStackRepresentation();
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
dspToolTip = Platform.getItemDisplayName(refStack).getFormattedText(); dspToolTip.add(Platform.getItemDisplayName(refStack));
if (lineList.size() > 0) { if (lineList.size() > 0) {
dspToolTip = dspToolTip + '\n' + Joiner.on("\n").join(lineList); dspToolTip.addAll(lineList);
} }
toolPosX = x * (1 + SECTION_LENGTH) + ITEMSTACK_LEFT_OFFSET + SECTION_LENGTH - 8; toolPosX = x * (1 + SECTION_LENGTH) + ITEMSTACK_LEFT_OFFSET + SECTION_LENGTH - 8;
@@ -302,7 +302,7 @@ public class CraftingCPUScreen<T extends CraftingCPUContainer> extends AEBaseScr
} }
if (this.tooltip >= 0 && !dspToolTip.isEmpty()) { if (this.tooltip >= 0 && !dspToolTip.isEmpty()) {
this.drawTooltip(, toolPosX, toolPosY + 10, dspToolTip); this.drawTooltip(matrices, toolPosX, toolPosY + 10, dspToolTip);
} }
} }
@@ -49,7 +49,7 @@ public class CraftingStatusScreen extends CraftingCPUScreen<CraftingStatusContai
super.init(); super.init();
this.selectCPU = new ButtonWidget(this.x + 8, this.y + this.backgroundHeight - 25, 150, 20, this.selectCPU = new ButtonWidget(this.x + 8, this.y + this.backgroundHeight - 25, 150, 20,
GuiText.CraftingCPU.getLocal() + ": " + GuiText.NoCraftingCPUs, btn -> selectNextCpu()); GuiText.CraftingCPU.withSuffix(": ").append(GuiText.NoCraftingCPUs.text()), btn -> selectNextCpu());
this.addButton(this.selectCPU); this.addButton(this.selectCPU);
subGui.addBackButton(btn -> { subGui.addBackButton(btn -> {
@@ -65,33 +65,33 @@ public class CraftingStatusScreen extends CraftingCPUScreen<CraftingStatusContai
} }
private void updateCPUButtonText() { private void updateCPUButtonText() {
String btnTextText = GuiText.NoCraftingJobs.getLocal(); Text btnTextText = GuiText.NoCraftingJobs.text();
if (this.handler.selectedCpu >= 0)// && status.selectedCpu < status.cpus.size() ) if (this.handler.selectedCpu >= 0)// && status.selectedCpu < status.cpus.size() )
{ {
if (this.handler.myName != null) { if (this.handler.myName != null) {
final String name = this.handler.myName.getStringTruncated(20); final String name = this.handler.myName.asTruncatedString(20);
btnTextText = GuiText.CPUs.getLocal() + ": " + name; btnTextText = GuiText.CPUs.withSuffix(": " + name);
} else { } else {
btnTextText = GuiText.CPUs.getLocal() + ": #" + this.handler.selectedCpu; btnTextText = GuiText.CPUs.withSuffix(": #" + this.handler.selectedCpu);
} }
} }
if (this.handler.noCPU) { if (this.handler.noCPU) {
btnTextText = GuiText.NoCraftingJobs.getLocal(); btnTextText = GuiText.NoCraftingJobs.text();
} }
this.selectCPU.setMessage(btnTextText); this.selectCPU.setMessage(btnTextText);
} }
@Override @Override
protected String getGuiDisplayName(final String in) { protected Text getGuiDisplayName(final Text in) {
return in; // the cup name is on the button return in; // the cup name is on the button
} }
// FIXME: Extract to separate class? Shared with GuiCraftConfirm // FIXME: Extract to separate class? Shared with GuiCraftConfirm
private void selectNextCpu() { private void selectNextCpu() {
final boolean backwards = minecraft.mouse.wasRightButtonClicked(); final boolean backwards = client.mouse.wasRightButtonClicked();
NetworkHandler.instance().sendToServer(new ConfigValuePacket("Terminal.Cpu", backwards ? "Prev" : "Next")); NetworkHandler.instance().sendToServer(new ConfigValuePacket("Terminal.Cpu", backwards ? "Prev" : "Next"));
} }
@@ -64,7 +64,7 @@ public class CraftingTermScreen extends MEMonitorableScreen<CraftingTermContaine
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY);
this.textRenderer.draw(matrices, GuiText.CraftingTerminal.getLocal(), 8, this.backgroundHeight - 96 + 1 - this.getReservedSpace(), this.textRenderer.draw(matrices, GuiText.CraftingTerminal.text(), 8, this.backgroundHeight - 96 + 1 - this.getReservedSpace(),
4210752); 4210752);
} }
@@ -42,7 +42,7 @@ public class DriveScreen extends AEBaseScreen<DriveContainer> {
public void init() { public void init() {
super.init(); super.init();
this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.text(),
this.itemRenderer, btn -> openPriorityGui())); this.itemRenderer, btn -> openPriorityGui()));
} }
@@ -52,8 +52,8 @@ public class DriveScreen extends AEBaseScreen<DriveContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Drive.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Drive.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@Override @Override
@@ -51,7 +51,7 @@ public class FormationPlaneScreen extends UpgradeableScreen<FormationPlaneContai
this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 48, Settings.FUZZY_MODE, this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 48, Settings.FUZZY_MODE,
FuzzyMode.IGNORE_ALL); FuzzyMode.IGNORE_ALL);
this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.text(),
this.itemRenderer, btn -> openPriorityGui())); this.itemRenderer, btn -> openPriorityGui()));
this.addButton(this.placeMode); this.addButton(this.placeMode);
@@ -60,8 +60,8 @@ public class FormationPlaneScreen extends UpgradeableScreen<FormationPlaneContai
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.FormationPlane.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.FormationPlane.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
if (this.fuzzyMode != null) { if (this.fuzzyMode != null) {
this.fuzzyMode.set(this.cvb.getFuzzyMode()); this.fuzzyMode.set(this.cvb.getFuzzyMode());
@@ -36,8 +36,8 @@ public class GrinderScreen extends AEBaseScreen<GrinderContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.GrindStone.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.GrindStone.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@Override @Override
@@ -59,8 +59,8 @@ public class IOPortScreen extends UpgradeableScreen<IOPortContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.IOPort.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.IOPort.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
if (this.redstoneMode != null) { if (this.redstoneMode != null) {
this.redstoneMode.set(this.cvb.getRedStoneMode()); this.redstoneMode.set(this.cvb.getRedStoneMode());
@@ -20,6 +20,7 @@ package appeng.client.gui.implementations;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -53,10 +54,10 @@ public class InscriberScreen extends AEBaseScreen<InscriberContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.pb.setFullMsg(this.handler.getCurrentProgress() * 100 / this.handler.getMaxProgress() + "%"); this.pb.setFullMsg(new LiteralText(this.handler.getCurrentProgress() * 100 / this.handler.getMaxProgress() + "%"));
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Inscriber.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Inscriber.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@Override @Override
@@ -69,7 +70,7 @@ public class InscriberScreen extends AEBaseScreen<InscriberContainer> {
if (this.drawUpgrades()) { if (this.drawUpgrades()) {
drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35, drawTexture(matrices, offsetX + 177, offsetY, 177, 0, 35,
14 + this.handler.availableUpgrades() * 18, getZOffset()); 14 + this.handler.availableUpgrades() * 18);
} }
if (this.hasToolbox()) { if (this.hasToolbox()) {
drawTexture(matrices, offsetX + 178, offsetY + this.backgroundHeight - 90, 178, this.backgroundHeight - 90, 68, 68); drawTexture(matrices, offsetX + 178, offsetY + this.backgroundHeight - 90, 178, this.backgroundHeight - 90, 68, 68);
@@ -47,14 +47,14 @@ public class InterfaceScreen extends UpgradeableScreen<InterfaceContainer> {
@Override @Override
protected void addButtons() { protected void addButtons() {
this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.text(),
this.itemRenderer, btn -> openPriorityGui())); this.itemRenderer, btn -> openPriorityGui()));
this.blockMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 8, Settings.BLOCK, YesNo.NO); this.blockMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 8, Settings.BLOCK, YesNo.NO);
this.addButton(this.blockMode); this.addButton(this.blockMode);
this.interfaceMode = new ToggleButton(this.x - 18, this.y + 26, 84, 85, this.interfaceMode = new ToggleButton(this.x - 18, this.y + 26, 84, 85,
GuiText.InterfaceTerminal.getLocal(), GuiText.InterfaceTerminalHint.getLocal(), GuiText.InterfaceTerminal.text(), GuiText.InterfaceTerminalHint.text(),
btn -> selectNextInterfaceMode()); btn -> selectNextInterfaceMode());
this.addButton(this.interfaceMode); this.addButton(this.interfaceMode);
} }
@@ -69,13 +69,13 @@ public class InterfaceScreen extends UpgradeableScreen<InterfaceContainer> {
this.interfaceMode.setState(((InterfaceContainer) this.cvb).getInterfaceTerminalMode() == YesNo.YES); this.interfaceMode.setState(((InterfaceContainer) this.cvb).getInterfaceTerminalMode() == YesNo.YES);
} }
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Interface.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Interface.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.Config.getLocal(), 8, 6 + 11 + 7, 4210752); this.textRenderer.draw(matrices, GuiText.Config.text(), 8, 6 + 11 + 7, 4210752);
this.textRenderer.draw(matrices, GuiText.StoredItems.getLocal(), 8, 6 + 60 + 7, 4210752); this.textRenderer.draw(matrices, GuiText.StoredItems.text(), 8, 6 + 60 + 7, 4210752);
this.textRenderer.draw(matrices, GuiText.Patterns.getLocal(), 8, 6 + 73 + 7, 4210752); this.textRenderer.draw(matrices, GuiText.Patterns.text(), 8, 6 + 73 + 7, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@Override @Override
@@ -27,6 +27,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import alexiil.mc.lib.attributes.Simulation;
import com.google.common.collect.HashMultimap; import com.google.common.collect.HashMultimap;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
@@ -95,8 +96,8 @@ public class InterfaceTerminalScreen extends AEBaseScreen<InterfaceTerminalConta
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.InterfaceTerminal.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.InterfaceTerminal.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
final int ex = this.getScrollBar().getCurrentScroll(); final int ex = this.getScrollBar().getCurrentScroll();
@@ -161,7 +162,7 @@ public class InterfaceTerminalScreen extends AEBaseScreen<InterfaceTerminalConta
} }
if (this.searchField != null) { if (this.searchField != null) {
this.searchField.render(mouseX, mouseY, partialTicks); this.searchField.render(matrices, mouseX, mouseY, partialTicks);
} }
} }
@@ -222,7 +223,7 @@ public class InterfaceTerminalScreen extends AEBaseScreen<InterfaceTerminalConta
for (int x = 0; x < current.getInventory().getSlotCount(); x++) { for (int x = 0; x < current.getInventory().getSlotCount(); x++) {
final String which = Integer.toString(x); final String which = Integer.toString(x);
if (invData.contains(which)) { if (invData.contains(which)) {
current.getInventory().setInvStack(x, ItemStack.fromTag(invData.getCompound(which))); current.getInventory().setInvStack(x, ItemStack.fromTag(invData.getCompound(which)), Simulation.ACTION);
} }
} }
} catch (final NumberFormatException ignored) { } catch (final NumberFormatException ignored) {
@@ -21,6 +21,7 @@ package appeng.client.gui.implementations;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import appeng.api.config.FuzzyMode; import appeng.api.config.FuzzyMode;
@@ -62,14 +63,14 @@ public class LevelEmitterScreen extends UpgradeableScreen<LevelEmitterContainer>
public void init() { public void init() {
super.init(); super.init();
this.level = new NumberBox(this.textRenderer, this.x + 24, this.y + 43, 79, this.textRenderer.FONT_HEIGHT, this.level = new NumberBox(this.textRenderer, this.x + 24, this.y + 43, 79, this.textRenderer.fontHeight,
Long.class); Long.class);
this.level.setHasBorder(false); this.level.setHasBorder(false);
this.level.setMaxLength(16); this.level.setMaxLength(16);
this.level.setEditableColor(0xFFFFFF); this.level.setEditableColor(0xFFFFFF);
this.level.setVisible(true); this.level.setVisible(true);
this.level.setFocused(true); this.level.setFocused(true);
container.setTextField(this.level); handler.setTextField(this.level);
} }
@Override @Override
@@ -88,22 +89,22 @@ public class LevelEmitterScreen extends UpgradeableScreen<LevelEmitterContainer>
final int c = AEConfig.instance().levelByStackAmounts(2); final int c = AEConfig.instance().levelByStackAmounts(2);
final int d = AEConfig.instance().levelByStackAmounts(3); final int d = AEConfig.instance().levelByStackAmounts(3);
this.addButton(this.plus1 = new ButtonWidget(this.x + 20, this.y + 17, 22, 20, "+" + a, btn -> addQty(a))); this.addButton(this.plus1 = new ButtonWidget(this.x + 20, this.y + 17, 22, 20, new LiteralText("+" + a), btn -> addQty(a)));
this.addButton( this.addButton(
this.plus10 = new ButtonWidget(this.x + 48, this.y + 17, 28, 20, "+" + b, btn -> addQty(b))); this.plus10 = new ButtonWidget(this.x + 48, this.y + 17, 28, 20, new LiteralText("+" + b), btn -> addQty(b)));
this.addButton( this.addButton(
this.plus100 = new ButtonWidget(this.x + 82, this.y + 17, 32, 20, "+" + c, btn -> addQty(c))); this.plus100 = new ButtonWidget(this.x + 82, this.y + 17, 32, 20, new LiteralText("+" + c), btn -> addQty(c)));
this.addButton( this.addButton(
this.plus1000 = new ButtonWidget(this.x + 120, this.y + 17, 38, 20, "+" + d, btn -> addQty(d))); this.plus1000 = new ButtonWidget(this.x + 120, this.y + 17, 38, 20, new LiteralText("+" + d), btn -> addQty(d)));
this.addButton( this.addButton(
this.minus1 = new ButtonWidget(this.x + 20, this.y + 59, 22, 20, "-" + a, btn -> addQty(-a))); this.minus1 = new ButtonWidget(this.x + 20, this.y + 59, 22, 20, new LiteralText("-" + a), btn -> addQty(-a)));
this.addButton( this.addButton(
this.minus10 = new ButtonWidget(this.x + 48, this.y + 59, 28, 20, "-" + b, btn -> addQty(-b))); this.minus10 = new ButtonWidget(this.x + 48, this.y + 59, 28, 20, new LiteralText("-" + b), btn -> addQty(-b)));
this.addButton( this.addButton(
this.minus100 = new ButtonWidget(this.x + 82, this.y + 59, 32, 20, "-" + c, btn -> addQty(-c))); this.minus100 = new ButtonWidget(this.x + 82, this.y + 59, 32, 20, new LiteralText("-" + c), btn -> addQty(-c)));
this.addButton( this.addButton(
this.minus1000 = new ButtonWidget(this.x + 120, this.y + 59, 38, 20, "-" + d, btn -> addQty(-d))); this.minus1000 = new ButtonWidget(this.x + 120, this.y + 59, 38, 20, new LiteralText("-" + d), btn -> addQty(-d)));
this.addButton(this.levelMode); this.addButton(this.levelMode);
this.addButton(this.redstoneMode); this.addButton(this.redstoneMode);
@@ -115,7 +116,7 @@ public class LevelEmitterScreen extends UpgradeableScreen<LevelEmitterContainer>
final boolean notCraftingMode = this.bc.getInstalledUpgrades(Upgrades.CRAFTING) == 0; final boolean notCraftingMode = this.bc.getInstalledUpgrades(Upgrades.CRAFTING) == 0;
// configure enabled status... // configure enabled status...
this.level.setEnabled(notCraftingMode); this.level.active = notCraftingMode;
this.plus1.active = notCraftingMode; this.plus1.active = notCraftingMode;
this.plus10.active = notCraftingMode; this.plus10.active = notCraftingMode;
this.plus100.active = notCraftingMode; this.plus100.active = notCraftingMode;
@@ -141,7 +142,7 @@ public class LevelEmitterScreen extends UpgradeableScreen<LevelEmitterContainer>
@Override @Override
public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) {
super.drawBG(matrices, offsetX, offsetY, mouseX, mouseY, partialTicks); super.drawBG(matrices, offsetX, offsetY, mouseX, mouseY, partialTicks);
this.level.render(mouseX, mouseY, partialTicks); this.level.render(matrices, mouseX, mouseY, partialTicks);
} }
@Override @Override
@@ -20,6 +20,7 @@ package appeng.client.gui.implementations;
import java.util.List; import java.util.List;
import appeng.mixins.SlotMixin;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
@@ -147,7 +148,7 @@ public class MEMonitorableScreen<T extends MEMonitorableContainer> extends AEBas
@Override @Override
public void init() { public void init() {
getClient().keyboardListener.enableRepeatEvents(true); getClient().keyboard.enableRepeatEvents(true);
this.maxRows = this.getMaxRows(); this.maxRows = this.getMaxRows();
TerminalStyle terminalStyle = AEConfig.instance().getTerminalStyle(); TerminalStyle terminalStyle = AEConfig.instance().getTerminalStyle();
@@ -226,7 +227,7 @@ public class MEMonitorableScreen<T extends MEMonitorableContainer> extends AEBas
if (this.viewCell || this instanceof WirelessTermScreen) { if (this.viewCell || this instanceof WirelessTermScreen) {
this.craftingStatusBtn = this.addButton(new TabButton(this.x + 170, this.y - 4, 2 + 11 * 16, this.craftingStatusBtn = this.addButton(new TabButton(this.x + 170, this.y - 4, 2 + 11 * 16,
GuiText.CraftingStatus.getLocal(), this.itemRenderer, btn -> showCraftingStatus())); GuiText.CraftingStatus.text(), this.itemRenderer, btn -> showCraftingStatus()));
this.craftingStatusBtn.setHideEdge(13); this.craftingStatusBtn.setHideEdge(13);
} }
@@ -277,8 +278,8 @@ public class MEMonitorableScreen<T extends MEMonitorableContainer> extends AEBas
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(this.myName.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(this.myName.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
this.currentMouseX = mouseX; this.currentMouseX = mouseX;
this.currentMouseY = mouseY; this.currentMouseY = mouseY;
@@ -302,7 +303,7 @@ public class MEMonitorableScreen<T extends MEMonitorableContainer> extends AEBas
@Override @Override
public void removed() { public void removed() {
super.removed(); super.removed();
getClient().keyboardListener.enableRepeatEvents(false); getClient().keyboard.enableRepeatEvents(false);
memoryText = this.searchField.getText(); memoryText = this.searchField.getText();
} }
@@ -358,7 +359,7 @@ public class MEMonitorableScreen<T extends MEMonitorableContainer> extends AEBas
} }
protected void repositionSlot(final AppEngSlot s) { protected void repositionSlot(final AppEngSlot s) {
s.y = s.getY() + this.backgroundHeight - 78 - 5; ((SlotMixin) s).setY(s.getY() + this.backgroundHeight - 78 - 5);
} }
@Override @Override
@@ -20,6 +20,7 @@ package appeng.client.gui.implementations;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import appeng.api.config.RedstoneMode; import appeng.api.config.RedstoneMode;
@@ -58,7 +59,7 @@ public class MolecularAssemblerScreen extends UpgradeableScreen<MolecularAssembl
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.pb.setFullMsg(this.handler.getCurrentProgress() + "%"); this.pb.setFullMsg(new LiteralText(this.handler.getCurrentProgress() + "%"));
super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY);
} }
@@ -18,6 +18,7 @@
package appeng.client.gui.implementations; package appeng.client.gui.implementations;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
@@ -102,19 +103,19 @@ public class NetworkStatusScreen extends AEBaseScreen<NetworkStatusContainer> im
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, GuiText.NetworkDetails.getLocal(), 8, 6, 4210752); this.textRenderer.draw(matrices, GuiText.NetworkDetails.text(), 8, 6, 4210752);
this.textRenderer.draw(matrices, this.textRenderer.draw(matrices,
GuiText.StoredPower.getLocal() + ": " + Platform.formatPowerLong(container.getCurrentPower(), false), GuiText.StoredPower.text() + ": " + Platform.formatPowerLong(handler.getCurrentPower(), false),
13, 16, 4210752); 13, 16, 4210752);
this.textRenderer.draw(matrices, this.textRenderer.draw(matrices,
GuiText.MaxPower.getLocal() + ": " + Platform.formatPowerLong(container.getMaxPower(), false), 13, 26, GuiText.MaxPower.text() + ": " + Platform.formatPowerLong(handler.getMaxPower(), false), 13, 26,
4210752); 4210752);
this.textRenderer.draw(matrices, GuiText.PowerInputRate.getLocal() + ": " this.textRenderer.draw(matrices, GuiText.PowerInputRate.text() + ": "
+ Platform.formatPowerLong(container.getAverageAddition(), true), 13, 143 - 10, 4210752); + Platform.formatPowerLong(handler.getAverageAddition(), true), 13, 143 - 10, 4210752);
this.textRenderer.draw(matrices, this.textRenderer.draw(matrices,
GuiText.PowerUsageRate.getLocal() + ": " + Platform.formatPowerLong(container.getPowerUsage(), true), GuiText.PowerUsageRate.text() + ": " + Platform.formatPowerLong(handler.getPowerUsage(), true),
13, 143 - 20, 4210752); 13, 143 - 20, 4210752);
final int sectionLength = 30; final int sectionLength = 30;
@@ -123,10 +124,10 @@ public class NetworkStatusScreen extends AEBaseScreen<NetworkStatusContainer> im
int y = 0; int y = 0;
final int xo = 12; final int xo = 12;
final int yo = 42; final int yo = 42;
final int viewStart = 0;// myScrollBar.getCurrentScroll() * 5; final int viewStart = 0;
final int viewEnd = viewStart + 5 * 4; final int viewEnd = viewStart + 5 * 4;
String toolTip = ""; List<Text> toolTip = new ArrayList<>();
int toolPosX = 0; int toolPosX = 0;
int toolPosY = 0; int toolPosY = 0;
@@ -150,12 +151,12 @@ public class NetworkStatusScreen extends AEBaseScreen<NetworkStatusContainer> im
final int posY = y * 18 + yo; final int posY = y * 18 + yo;
if (this.tooltip == z - viewStart) { if (this.tooltip == z - viewStart) {
toolTip = Platform.getItemDisplayName(refStack).getFormattedText(); toolTip.add(Platform.getItemDisplayName(refStack));
toolTip += ('\n' + GuiText.Installed.getLocal() + ": " + (refStack.getStackSize())); toolTip.add(GuiText.Installed.withSuffix(": " + (refStack.getStackSize())));
if (refStack.getCountRequestable() > 0) { if (refStack.getCountRequestable() > 0) {
toolTip += ('\n' + GuiText.EnergyDrain.getLocal() + ": " toolTip.add(GuiText.EnergyDrain.withSuffix(": "
+ Platform.formatPowerLong(refStack.getCountRequestable(), true)); + Platform.formatPowerLong(refStack.getCountRequestable(), true)));
} }
toolPosX = x * sectionLength + xo + sectionLength - 8; toolPosX = x * sectionLength + xo + sectionLength - 8;
@@ -173,8 +174,8 @@ public class NetworkStatusScreen extends AEBaseScreen<NetworkStatusContainer> im
} }
} }
if (this.tooltip >= 0 && toolTip.length() > 0) { if (this.tooltip >= 0 && toolTip.isEmpty()) {
this.drawTooltip(, toolPosX, toolPosY + 10, toolTip); this.drawTooltip(matrices, toolPosX, toolPosY + 10, toolTip);
} }
} }
@@ -202,7 +203,7 @@ public class NetworkStatusScreen extends AEBaseScreen<NetworkStatusContainer> im
} }
@Override @Override
protected void renderTooltip(final ItemStack stack, final int x, final int y) { protected void renderTooltip(MatrixStack matrices, final ItemStack stack, final int x, final int y) {
final Slot s = this.getSlot(x, y); final Slot s = this.getSlot(x, y);
if (s instanceof SlotME && !stack.isEmpty()) { if (s instanceof SlotME && !stack.isEmpty()) {
@@ -215,21 +216,21 @@ public class NetworkStatusScreen extends AEBaseScreen<NetworkStatusContainer> im
} }
if (myStack != null) { if (myStack != null) {
List<String> currentToolTip = getTooltipFromItem(stack); List<Text> currentToolTip = getTooltipFromItem(stack);
while (currentToolTip.size() > 1) { while (currentToolTip.size() > 1) {
currentToolTip.remove(1); currentToolTip.remove(1);
} }
currentToolTip.add(GuiText.Installed.getLocal() + ": " + (myStack.getStackSize())); currentToolTip.add(GuiText.Installed.withSuffix(": " + myStack.getStackSize()));
currentToolTip.add(GuiText.EnergyDrain.getLocal() + ": " currentToolTip.add(GuiText.EnergyDrain.withSuffix(": "
+ Platform.formatPowerLong(myStack.getCountRequestable(), true)); + Platform.formatPowerLong(myStack.getCountRequestable(), true)));
this.drawTooltip(, x, y, currentToolTip); this.drawTooltip(matrices, x, y, currentToolTip);
} }
} }
super.renderTooltip(stack, x, y); super.renderTooltip(matrices, stack, x, y);
} }
@Override @Override
@@ -44,7 +44,7 @@ public class NetworkToolScreen extends AEBaseScreen<NetworkToolContainer> {
super.init(); super.init();
this.tFacades = new ToggleButton(this.x - 18, this.y + 8, 23, 22, this.tFacades = new ToggleButton(this.x - 18, this.y + 8, 23, 22,
GuiText.TransparentFacades.getLocal(), GuiText.TransparentFacadesHint.getLocal(), GuiText.TransparentFacades.text(), GuiText.TransparentFacadesHint.text(),
btn -> toggleFacades()); btn -> toggleFacades());
this.addButton(this.tFacades); this.addButton(this.tFacades);
@@ -57,11 +57,11 @@ public class NetworkToolScreen extends AEBaseScreen<NetworkToolContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
if (this.tFacades != null) { if (this.tFacades != null) {
this.tFacades.setState(container.isFacadeMode()); this.tFacades.setState(handler.isFacadeMode());
} }
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.NetworkTool.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.NetworkTool.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@Override @Override
@@ -18,6 +18,7 @@
package appeng.client.gui.implementations; package appeng.client.gui.implementations;
import appeng.mixins.SlotMixin;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
@@ -59,12 +60,12 @@ public class PatternTermScreen extends MEMonitorableScreen<PatternTermContainer>
super.init(); super.init();
this.tabCraftButton = new TabButton(this.x + 173, this.y + this.backgroundHeight - 177, this.tabCraftButton = new TabButton(this.x + 173, this.y + this.backgroundHeight - 177,
new ItemStack(Blocks.CRAFTING_TABLE), GuiText.CraftingPattern.getLocal(), this.itemRenderer, new ItemStack(Blocks.CRAFTING_TABLE), GuiText.CraftingPattern.text(), this.itemRenderer,
btn -> toggleCraftMode(CRAFTMODE_PROCESSING)); btn -> toggleCraftMode(CRAFTMODE_PROCESSING));
this.addButton(this.tabCraftButton); this.addButton(this.tabCraftButton);
this.tabProcessButton = new TabButton(this.x + 173, this.y + this.backgroundHeight - 177, this.tabProcessButton = new TabButton(this.x + 173, this.y + this.backgroundHeight - 177,
new ItemStack(Blocks.FURNACE), GuiText.ProcessingPattern.getLocal(), this.itemRenderer, new ItemStack(Blocks.FURNACE), GuiText.ProcessingPattern.text(), this.itemRenderer,
btn -> toggleCraftMode(CRAFTMODE_CRFTING)); btn -> toggleCraftMode(CRAFTMODE_CRFTING));
this.addButton(this.tabProcessButton); this.addButton(this.tabProcessButton);
@@ -125,7 +126,7 @@ public class PatternTermScreen extends MEMonitorableScreen<PatternTermContainer>
} }
super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY);
this.textRenderer.draw(matrices, GuiText.PatternTerminal.getLocal(), 8, this.backgroundHeight - 96 + 2 - this.getReservedSpace(), this.textRenderer.draw(matrices, GuiText.PatternTerminal.text(), 8, this.backgroundHeight - 96 + 2 - this.getReservedSpace(),
4210752); 4210752);
} }
@@ -142,7 +143,7 @@ public class PatternTermScreen extends MEMonitorableScreen<PatternTermContainer>
protected void repositionSlot(final AppEngSlot s) { protected void repositionSlot(final AppEngSlot s) {
final int offsetPlayerSide = s.isPlayerSide() ? 5 : 3; final int offsetPlayerSide = s.isPlayerSide() ? 5 : 3;
s.y = s.getY() + this.backgroundHeight - 78 - offsetPlayerSide; ((SlotMixin) s).setY(s.getY() + this.backgroundHeight - 78 - offsetPlayerSide);
} }
} }
@@ -21,6 +21,7 @@ package appeng.client.gui.implementations;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import appeng.client.gui.AEBaseScreen; import appeng.client.gui.AEBaseScreen;
@@ -51,31 +52,31 @@ public class PriorityScreen extends AEBaseScreen<PriorityContainer> {
final int c = AEConfig.instance().priorityByStacksAmounts(2); final int c = AEConfig.instance().priorityByStacksAmounts(2);
final int d = AEConfig.instance().priorityByStacksAmounts(3); final int d = AEConfig.instance().priorityByStacksAmounts(3);
this.addButton(new ButtonWidget(this.x + 20, this.y + 32, 22, 20, "+" + a, btn -> addQty(a))); this.addButton(new ButtonWidget(this.x + 20, this.y + 32, 22, 20, new LiteralText("+" + a), btn -> addQty(a)));
this.addButton(new ButtonWidget(this.x + 48, this.y + 32, 28, 20, "+" + b, btn -> addQty(b))); this.addButton(new ButtonWidget(this.x + 48, this.y + 32, 28, 20, new LiteralText("+" + b), btn -> addQty(b)));
this.addButton(new ButtonWidget(this.x + 82, this.y + 32, 32, 20, "+" + c, btn -> addQty(c))); this.addButton(new ButtonWidget(this.x + 82, this.y + 32, 32, 20, new LiteralText("+" + c), btn -> addQty(c)));
this.addButton(new ButtonWidget(this.x + 120, this.y + 32, 38, 20, "+" + d, btn -> addQty(d))); this.addButton(new ButtonWidget(this.x + 120, this.y + 32, 38, 20, new LiteralText("+" + d), btn -> addQty(d)));
this.addButton(new ButtonWidget(this.x + 20, this.y + 69, 22, 20, "-" + a, btn -> addQty(-a))); this.addButton(new ButtonWidget(this.x + 20, this.y + 69, 22, 20, new LiteralText("-" + a), btn -> addQty(-a)));
this.addButton(new ButtonWidget(this.x + 48, this.y + 69, 28, 20, "-" + b, btn -> addQty(-b))); this.addButton(new ButtonWidget(this.x + 48, this.y + 69, 28, 20, new LiteralText("-" + b), btn -> addQty(-b)));
this.addButton(new ButtonWidget(this.x + 82, this.y + 69, 32, 20, "-" + c, btn -> addQty(-c))); this.addButton(new ButtonWidget(this.x + 82, this.y + 69, 32, 20, new LiteralText("-" + c), btn -> addQty(-c)));
this.addButton(new ButtonWidget(this.x + 120, this.y + 69, 38, 20, "-" + d, btn -> addQty(-d))); this.addButton(new ButtonWidget(this.x + 120, this.y + 69, 38, 20, new LiteralText("-" + d), btn -> addQty(-d)));
this.subGui.addBackButton(this::addButton, 154, 0); this.subGui.addBackButton(this::addButton, 154, 0);
this.priority = new NumberBox(this.textRenderer, this.x + 62, this.y + 57, 59, this.textRenderer.FONT_HEIGHT, this.priority = new NumberBox(this.textRenderer, this.x + 62, this.y + 57, 59, this.textRenderer.fontHeight,
Long.class); Long.class);
this.priority.setHasBorder(false); this.priority.setHasBorder(false);
this.priority.setMaxLength(16); this.priority.setMaxLength(16);
this.priority.setEditableColor(0xFFFFFF); this.priority.setEditableColor(0xFFFFFF);
this.priority.setVisible(true); this.priority.setVisible(true);
this.priority.setFocused(true); this.priority.setFocused(true);
container.setTextField(this.priority); handler.setTextField(this.priority);
} }
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, GuiText.Priority.getLocal(), 8, 6, 4210752); this.textRenderer.draw(matrices, GuiText.Priority.text(), 8, 6, 4210752);
} }
@Override @Override
@@ -83,7 +84,7 @@ public class PriorityScreen extends AEBaseScreen<PriorityContainer> {
this.bindTexture(getBackground()); this.bindTexture(getBackground());
drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight);
this.priority.render(mouseX, mouseY, partialTicks); this.priority.render(matrices, mouseX, mouseY, partialTicks);
} }
private void addQty(final int i) { private void addQty(final int i) {
@@ -36,8 +36,8 @@ public class QNBScreen extends AEBaseScreen<QNBContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.QuantumLinkChamber.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.QuantumLinkChamber.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@Override @Override
@@ -20,6 +20,7 @@ package appeng.client.gui.implementations;
import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.InputUtil;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.LiteralText;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.TextFieldWidget;
@@ -48,32 +49,32 @@ public class QuartzKnifeScreen extends AEBaseScreen<QuartzKnifeContainer> {
public void init() { public void init() {
super.init(); super.init();
this.name = new TextFieldWidget(this.textRenderer, this.x + 24, this.y + 32, 79, this.textRenderer.FONT_HEIGHT, ""); this.name = new TextFieldWidget(this.textRenderer, this.x + 24, this.y + 32, 79, this.textRenderer.fontHeight, LiteralText.EMPTY);
this.name.setHasBorder(false); this.name.setHasBorder(false);
this.name.setMaxLength(32); this.name.setMaxLength(32);
this.name.setEditableColor(0xFFFFFF); this.name.setEditableColor(0xFFFFFF);
this.name.setVisible(true); this.name.setVisible(true);
this.name.setFocused(true); this.name.setSelected(true);
} }
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.QuartzCuttingKnife.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.QuartzCuttingKnife.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@Override @Override
public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) {
this.bindTexture("guis/quartzknife.png"); this.bindTexture("guis/quartzknife.png");
drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight); drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight);
this.name.render(mouseX, mouseY, partialTicks); this.name.render(matrices, mouseX, mouseY, partialTicks);
} }
@Override @Override
public boolean charTyped(char character, int key) { public boolean charTyped(char character, int key) {
if (this.name.isFocused() && this.name.charTyped(character, key)) { if (this.name.isFocused() && this.name.charTyped(character, key)) {
final String Out = this.name.getText(); final String Out = this.name.getText();
container.setName(Out); handler.setName(Out);
NetworkHandler.instance().sendToServer(new ConfigValuePacket("QuartzKnife.Name", Out)); NetworkHandler.instance().sendToServer(new ConfigValuePacket("QuartzKnife.Name", Out));
return true; return true;
} }
@@ -86,19 +87,19 @@ public class QuartzKnifeScreen extends AEBaseScreen<QuartzKnifeContainer> {
if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(keyCode, scanCode)) { if (keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(keyCode, scanCode)) {
if (AppEng.instance().isActionKey(ActionKey.TOGGLE_FOCUS, keyCode, scanCode)) { if (AppEng.instance().isActionKey(ActionKey.TOGGLE_FOCUS, keyCode, scanCode)) {
this.name.setFocused(!this.name.isFocused()); this.name.setSelected(!this.name.isFocused());
return true; return true;
} }
if (this.name.isFocused()) { if (this.name.isFocused()) {
if (keyCode == GLFW.GLFW_KEY_ENTER) { if (keyCode == GLFW.GLFW_KEY_ENTER) {
this.name.setFocused(false); this.name.setSelected(false);
return true; return true;
} }
if (this.name.keyPressed(keyCode, scanCode, p_keyPressed_3_)) { if (this.name.keyPressed(keyCode, scanCode, p_keyPressed_3_)) {
final String Out = this.name.getText(); final String Out = this.name.getText();
container.setName(Out); handler.setName(Out);
NetworkHandler.instance().sendToServer(new ConfigValuePacket("QuartzKnife.Name", Out)); NetworkHandler.instance().sendToServer(new ConfigValuePacket("QuartzKnife.Name", Out));
return true; return true;
} }
@@ -60,40 +60,40 @@ public class SecurityStationScreen extends MEMonitorableScreen<SecurityStationCo
final int top = this.y + this.backgroundHeight - 116; final int top = this.y + this.backgroundHeight - 116;
this.inject = this.addButton(new ToggleButton(this.x + 56, top, 11 * 16, 12 * 16, this.inject = this.addButton(new ToggleButton(this.x + 56, top, 11 * 16, 12 * 16,
SecurityPermissions.INJECT.getTranslatedName(), SecurityPermissions.INJECT.getTranslatedTip(), SecurityPermissions.INJECT.nameText(), SecurityPermissions.INJECT.tooltipText(),
btn -> toggleOption(SecurityPermissions.INJECT))); btn -> toggleOption(SecurityPermissions.INJECT)));
this.extract = this.addButton(new ToggleButton(this.x + 56 + 18, top, 11 * 16 + 1, 12 * 16 + 1, this.extract = this.addButton(new ToggleButton(this.x + 56 + 18, top, 11 * 16 + 1, 12 * 16 + 1,
SecurityPermissions.EXTRACT.getTranslatedName(), SecurityPermissions.EXTRACT.getTranslatedTip(), SecurityPermissions.EXTRACT.nameText(), SecurityPermissions.EXTRACT.tooltipText(),
btn -> toggleOption(SecurityPermissions.EXTRACT))); btn -> toggleOption(SecurityPermissions.EXTRACT)));
this.craft = this.addButton(new ToggleButton(this.x + 56 + 18 * 2, top, 11 * 16 + 2, 12 * 16 + 2, this.craft = this.addButton(new ToggleButton(this.x + 56 + 18 * 2, top, 11 * 16 + 2, 12 * 16 + 2,
SecurityPermissions.CRAFT.getTranslatedName(), SecurityPermissions.CRAFT.getTranslatedTip(), SecurityPermissions.CRAFT.nameText(), SecurityPermissions.CRAFT.tooltipText(),
btn -> toggleOption(SecurityPermissions.CRAFT))); btn -> toggleOption(SecurityPermissions.CRAFT)));
this.build = this.addButton(new ToggleButton(this.x + 56 + 18 * 3, top, 11 * 16 + 3, 12 * 16 + 3, this.build = this.addButton(new ToggleButton(this.x + 56 + 18 * 3, top, 11 * 16 + 3, 12 * 16 + 3,
SecurityPermissions.BUILD.getTranslatedName(), SecurityPermissions.BUILD.getTranslatedTip(), SecurityPermissions.BUILD.nameText(), SecurityPermissions.BUILD.tooltipText(),
btn -> toggleOption(SecurityPermissions.BUILD))); btn -> toggleOption(SecurityPermissions.BUILD)));
this.security = this.addButton(new ToggleButton(this.x + 56 + 18 * 4, top, 11 * 16 + 4, 12 * 16 + 4, this.security = this.addButton(new ToggleButton(this.x + 56 + 18 * 4, top, 11 * 16 + 4, 12 * 16 + 4,
SecurityPermissions.SECURITY.getTranslatedName(), SecurityPermissions.SECURITY.getTranslatedTip(), SecurityPermissions.SECURITY.nameText(), SecurityPermissions.SECURITY.tooltipText(),
btn -> toggleOption(SecurityPermissions.SECURITY))); btn -> toggleOption(SecurityPermissions.SECURITY)));
} }
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY); super.drawFG(matrices, offsetX, offsetY, mouseX, mouseY);
this.textRenderer.draw(matrices, GuiText.SecurityCardEditor.getLocal(), 8, this.backgroundHeight - 96 + 1 - this.getReservedSpace(), this.textRenderer.draw(matrices, GuiText.SecurityCardEditor.text(), 8, this.backgroundHeight - 96 + 1 - this.getReservedSpace(),
4210752); 4210752);
} }
@Override @Override
protected String getBackground() { protected String getBackground() {
this.inject.setState((container.getPermissionMode() & (1 << SecurityPermissions.INJECT.ordinal())) > 0); this.inject.setState((handler.getPermissionMode() & (1 << SecurityPermissions.INJECT.ordinal())) > 0);
this.extract.setState((container.getPermissionMode() & (1 << SecurityPermissions.EXTRACT.ordinal())) > 0); this.extract.setState((handler.getPermissionMode() & (1 << SecurityPermissions.EXTRACT.ordinal())) > 0);
this.craft.setState((container.getPermissionMode() & (1 << SecurityPermissions.CRAFT.ordinal())) > 0); this.craft.setState((handler.getPermissionMode() & (1 << SecurityPermissions.CRAFT.ordinal())) > 0);
this.build.setState((container.getPermissionMode() & (1 << SecurityPermissions.BUILD.ordinal())) > 0); this.build.setState((handler.getPermissionMode() & (1 << SecurityPermissions.BUILD.ordinal())) > 0);
this.security.setState((container.getPermissionMode() & (1 << SecurityPermissions.SECURITY.ordinal())) > 0); this.security.setState((handler.getPermissionMode() & (1 << SecurityPermissions.SECURITY.ordinal())) > 0);
return "guis/security_station.png"; return "guis/security_station.png";
} }
@@ -40,8 +40,8 @@ public class SkyChestScreen extends AEBaseScreen<SkyChestContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.SkyChest.getLocal()), 8, 8, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.SkyChest.text()), 8, 8, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 2, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 2, 4210752);
} }
@Override @Override
@@ -45,26 +45,26 @@ public class SpatialIOPortScreen extends AEBaseScreen<SpatialIOPortContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, GuiText.StoredPower.getLocal() + ": " this.textRenderer.draw(matrices, GuiText.StoredPower.text() + ": "
+ Platform.formatPowerLong(this.handler.getCurrentPower(), false), 13, 21, 4210752); + Platform.formatPowerLong(this.handler.getCurrentPower(), false), 13, 21, 4210752);
this.textRenderer.draw(matrices, this.textRenderer.draw(matrices,
GuiText.MaxPower.getLocal() + ": " + Platform.formatPowerLong(this.handler.getMaxPower(), false), 13, GuiText.MaxPower.text() + ": " + Platform.formatPowerLong(this.handler.getMaxPower(), false), 13,
31, 4210752); 31, 4210752);
this.textRenderer.draw(matrices, GuiText.RequiredPower.getLocal() + ": " this.textRenderer.draw(matrices, GuiText.RequiredPower.text() + ": "
+ Platform.formatPowerLong(this.handler.getRequiredPower(), false), 13, 73, 4210752); + Platform.formatPowerLong(this.handler.getRequiredPower(), false), 13, 73, 4210752);
this.textRenderer.draw(matrices, this.textRenderer.draw(matrices,
GuiText.Efficiency.getLocal() + ": " + (((float) this.handler.getEfficency()) / 100) + '%', 13, 83, GuiText.Efficiency.text() + ": " + (((float) this.handler.getEfficency()) / 100) + '%', 13, 83,
4210752); 4210752);
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.SpatialIOPort.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.SpatialIOPort.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96, 4210752);
if (this.handler.xSize != 0 && this.handler.ySize != 0 && this.handler.zSize != 0) { if (this.handler.xSize != 0 && this.handler.ySize != 0 && this.handler.zSize != 0) {
final String text = GuiText.SCSSize.getLocal() + ": " + this.handler.xSize + "x" + this.handler.ySize final String text = GuiText.SCSSize.text() + ": " + this.handler.xSize + "x" + this.handler.ySize
+ "x" + this.handler.zSize; + "x" + this.handler.zSize;
this.textRenderer.draw(matrices, text, 13, 93, 4210752); this.textRenderer.draw(matrices, text, 13, 93, 4210752);
} else { } else {
this.textRenderer.draw(matrices, GuiText.SCSSize.getLocal() + ": " + GuiText.SCSInvalid.getLocal(), 13, 93, 4210752); this.textRenderer.draw(matrices, GuiText.SCSSize.text() + ": " + GuiText.SCSInvalid.text(), 13, 93, 4210752);
} }
} }
@@ -59,7 +59,7 @@ public class StorageBusScreen extends UpgradeableScreen<StorageBusContainer> {
this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 88, Settings.FUZZY_MODE, this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 88, Settings.FUZZY_MODE,
FuzzyMode.IGNORE_ALL); FuzzyMode.IGNORE_ALL);
this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.text(),
this.itemRenderer, btn -> openPriorityGui())); this.itemRenderer, btn -> openPriorityGui()));
this.addButton(this.storageFilter); this.addButton(this.storageFilter);
@@ -69,8 +69,8 @@ public class StorageBusScreen extends UpgradeableScreen<StorageBusContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.StorageBus.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.StorageBus.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
if (this.fuzzyMode != null) { if (this.fuzzyMode != null) {
this.fuzzyMode.set(this.cvb.getFuzzyMode()); this.fuzzyMode.set(this.cvb.getFuzzyMode());
@@ -84,8 +84,8 @@ public class UpgradeableScreen<T extends UpgradeableContainer> extends AEBaseScr
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(this.getName().getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(this.getName().text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
if (this.redstoneMode != null) { if (this.redstoneMode != null) {
this.redstoneMode.set(this.cvb.getRedStoneMode()); this.redstoneMode.set(this.cvb.getRedStoneMode());
@@ -22,6 +22,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -52,11 +53,11 @@ public class VibrationChamberScreen extends AEBaseScreen<VibrationChamberContain
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.VibrationChamber.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.VibrationChamber.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
this.pb.setFullMsg(VibrationChamberBlockEntity.POWER_PER_TICK * this.handler.getCurrentProgress() this.pb.setFullMsg(new LiteralText(VibrationChamberBlockEntity.POWER_PER_TICK * this.handler.getCurrentProgress()
/ VibrationChamberBlockEntity.DILATION_SCALING + " AE/t"); / VibrationChamberBlockEntity.DILATION_SCALING + " AE/t"));
if (this.handler.getRemainingBurnTime() > 0) { if (this.handler.getRemainingBurnTime() > 0) {
final int i1 = this.handler.getRemainingBurnTime() * 12 / 100; final int i1 = this.handler.getRemainingBurnTime() * 12 / 100;
@@ -45,12 +45,12 @@ public class WirelessScreen extends AEBaseScreen<WirelessContainer> {
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Wireless.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.Wireless.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.text(), 8, this.backgroundHeight - 96 + 3, 4210752);
if (handler.getRange() > 0) { if (handler.getRange() > 0) {
final String firstMessage = GuiText.Range.getLocal() + ": " + (handler.getRange() / 10.0) + " m"; final String firstMessage = GuiText.Range.text() + ": " + (handler.getRange() / 10.0) + " m";
final String secondMessage = GuiText.PowerUsageRate.getLocal() + ": " final String secondMessage = GuiText.PowerUsageRate.text() + ": "
+ Platform.formatPowerLong(handler.getDrain(), true); + Platform.formatPowerLong(handler.getDrain(), true);
final int strWidth = Math.max(this.textRenderer.getWidth(firstMessage), final int strWidth = Math.max(this.textRenderer.getWidth(firstMessage),
@@ -3,6 +3,7 @@ package appeng.client.gui.widgets;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@@ -31,7 +32,7 @@ public abstract class CustomSlotWidget extends DrawableHelper implements IToolti
public abstract void drawContent(final MinecraftClient mc, final int mouseX, final int mouseY, final float partialTicks); public abstract void drawContent(final MinecraftClient mc, final int mouseX, final int mouseY, final float partialTicks);
public void drawBackground(int guileft, int guitop, int currentZIndex) { public void drawBackground(MatrixStack matrices, int guileft, int guitop, int currentZIndex) {
} }
@Override @Override
@@ -25,10 +25,10 @@ import net.minecraft.text.LiteralText;
// FIXME: Fix this piece of crap (i.e. onChange listener) // FIXME: Fix this piece of crap (i.e. onChange listener)
public class NumberBox extends TextFieldWidget { public class NumberBox extends TextFieldWidget {
private final Class type; private final Class<?> type;
public NumberBox(final TextRenderer fontRenderer, final int x, final int y, final int width, final int height, public NumberBox(final TextRenderer fontRenderer, final int x, final int y, final int width, final int height,
final Class type) { final Class<?> type) {
super(fontRenderer, x, y, width, height, new LiteralText("0")); super(fontRenderer, x, y, width, height, new LiteralText("0"));
this.type = type; this.type = type;
} }
@@ -50,4 +50,10 @@ public class NumberBox extends TextFieldWidget {
this.setText(original); this.setText(original);
} }
} }
@Override
public void setFocused(boolean focused) {
super.setFocused(focused);
}
} }
@@ -84,7 +84,7 @@ public class ProgressBar extends AbstractButtonWidget implements ITooltip {
Text text = this.titleName != null ? this.titleName : LiteralText.EMPTY; Text text = this.titleName != null ? this.titleName : LiteralText.EMPTY;
return text.copy().append("\n" + this.source.getCurrentProgress() + " ") return text.copy().append("\n" + this.source.getCurrentProgress() + " ")
.append(GuiText.Of.textComponent()) .append(GuiText.Of.text())
.append(" " + this.source.getMaxProgress()); .append(" " + this.source.getMaxProgress());
} }
@@ -63,7 +63,7 @@ public enum FacingToRotation implements StringIdentifiable {
private final Quaternion combinedRotation; private final Quaternion combinedRotation;
private final Matrix4f mat; private final Matrix4f mat;
private FacingToRotation(Vector3f rot) { FacingToRotation(Vector3f rot) {
this.rot = rot; this.rot = rot;
this.mat = new Matrix4f(); this.mat = new Matrix4f();
this.mat.loadIdentity(); this.mat.loadIdentity();
@@ -24,10 +24,7 @@ import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView; import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.util.math.Vector3f; import net.minecraft.client.util.math.Vector3f;
import net.minecraft.client.util.math.Vector4f;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Matrix3f;
import net.minecraft.util.math.Matrix4f;
import net.minecraft.util.math.Quaternion; import net.minecraft.util.math.Quaternion;
import java.util.EnumMap; import java.util.EnumMap;
@@ -39,7 +36,7 @@ import java.util.EnumMap;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class QuadRotator implements RenderContext.QuadTransform { public class QuadRotator implements RenderContext.QuadTransform {
private static final RenderContext.QuadTransform NULL_TRANSFORM = quad -> true; public static final RenderContext.QuadTransform NULL_TRANSFORM = quad -> true;
private static final EnumMap<FacingToRotation, RenderContext.QuadTransform> TRANSFORMS private static final EnumMap<FacingToRotation, RenderContext.QuadTransform> TRANSFORMS
= new EnumMap<>(FacingToRotation.class); = new EnumMap<>(FacingToRotation.class);
@@ -58,16 +55,20 @@ public class QuadRotator implements RenderContext.QuadTransform {
private final Quaternion quaternion; private final Quaternion quaternion;
public QuadRotator(FacingToRotation rotation) { private QuadRotator(FacingToRotation rotation) {
this.rotation = rotation; this.rotation = rotation;
this.quaternion = rotation.getRot(); this.quaternion = rotation.getRot();
} }
public static RenderContext.QuadTransform get(Direction newForward, Direction newUp) { public static RenderContext.QuadTransform get(Direction newForward, Direction newUp) {
if (newForward == Direction.NORTH && newUp == Direction.UP) { return get(getRotation(newForward, newUp));
}
public static RenderContext.QuadTransform get(FacingToRotation rotation) {
if (rotation.isRedundant()) {
return NULL_TRANSFORM; // This is the default orientation return NULL_TRANSFORM; // This is the default orientation
} }
return TRANSFORMS.get(getRotation(newForward, newUp)); return TRANSFORMS.get(rotation);
} }
@Override @Override
@@ -85,12 +86,17 @@ public class QuadRotator implements RenderContext.QuadTransform {
// Transform the normal // Transform the normal
quad.copyNormal(i, tmp); quad.copyNormal(i, tmp);
tmp.rotate(rotation.getRot()); tmp.rotate(quaternion);
quad.normal(i, tmp); quad.normal(i, tmp);
// Transform the nominal face
quad.nominalFace(rotation.rotate(quad.nominalFace()));
} }
// Transform the nominal face
quad.nominalFace(rotation.rotate(quad.nominalFace()));
Direction cullFace = quad.cullFace();
if (cullFace != null) {
quad.cullFace(rotation.rotate(cullFace));
}
return true; return true;
} }
@@ -0,0 +1,69 @@
package appeng.client.render.model;
import appeng.client.render.cablebus.QuadRotator;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.fabricmc.fabric.api.rendering.data.v1.RenderAttachedBlockView;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.BlockRenderView;
import java.util.Random;
import java.util.function.Supplier;
@Environment(EnvType.CLIENT)
public class AutoRotatingBakedModel extends ForwardingBakedModel implements FabricBakedModel {
public AutoRotatingBakedModel(BakedModel wrapped) {
this.wrapped = wrapped;
}
@Override
public boolean isVanillaAdapter() {
return false;
}
@Override
public void emitBlockQuads(BlockRenderView blockView, BlockState state, BlockPos pos, Supplier<Random> randomSupplier, RenderContext context) {
RenderContext.QuadTransform transform = getTransform(blockView, pos);
if (transform != null) {
context.pushTransform(transform);
}
super.emitBlockQuads(blockView, state, pos, randomSupplier, context);
if (transform != null) {
context.popTransform();
}
}
@Override
public void emitItemQuads(ItemStack stack, Supplier<Random> randomSupplier, RenderContext context) {
super.emitItemQuads(stack, randomSupplier, context);
}
private RenderContext.QuadTransform getTransform(BlockRenderView view, BlockPos pos) {
if (!(view instanceof RenderAttachedBlockView)) {
return null;
}
Object data = ((RenderAttachedBlockView) view).getBlockEntityRenderAttachment(pos);
if (!(data instanceof AEModelData)) {
return null;
}
AEModelData aeModelData = (AEModelData) data;
RenderContext.QuadTransform transform = QuadRotator.get(aeModelData.getForward(), aeModelData.getUp());
if (transform == QuadRotator.NULL_TRANSFORM) {
return null;
}
return transform;
}
}
@@ -84,10 +84,9 @@ public final class ContainerHelper<C extends AEBaseContainer, I> {
return false; return false;
} }
// FIXME FABRIC The containers usually handle this themselves...
Text title = findContainerTitle(player.world, locator, accessInterface); Text title = findContainerTitle(player.world, locator, accessInterface);
player.openHandledScreen(new HandlerFactory(locator, accessInterface)); player.openHandledScreen(new HandlerFactory(locator, title, accessInterface));
return true; return true;
} }
@@ -98,8 +97,11 @@ public final class ContainerHelper<C extends AEBaseContainer, I> {
private final I accessInterface; private final I accessInterface;
public HandlerFactory(ContainerLocator locator, I accessInterface) { private final Text title;
public HandlerFactory(ContainerLocator locator, Text title, I accessInterface) {
this.locator = locator; this.locator = locator;
this.title = title;
this.accessInterface = accessInterface; this.accessInterface = accessInterface;
} }
@@ -110,7 +112,7 @@ public final class ContainerHelper<C extends AEBaseContainer, I> {
@Override @Override
public Text getDisplayName() { public Text getDisplayName() {
return null; return title;
} }
@Nullable @Nullable
+29 -22
View File
@@ -2,9 +2,11 @@ package appeng.core;
import appeng.api.features.IRegistryContainer; import appeng.api.features.IRegistryContainer;
import appeng.api.networking.IGridCacheRegistry; import appeng.api.networking.IGridCacheRegistry;
import appeng.api.networking.crafting.ICraftingGrid;
import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.pathing.IPathingGrid; import appeng.api.networking.pathing.IPathingGrid;
import appeng.api.networking.security.ISecurityGrid; import appeng.api.networking.security.ISecurityGrid;
import appeng.api.networking.spatial.ISpatialCache;
import appeng.api.networking.storage.IStorageGrid; import appeng.api.networking.storage.IStorageGrid;
import appeng.api.networking.ticking.ITickManager; import appeng.api.networking.ticking.ITickManager;
import appeng.api.parts.CableRenderMode; import appeng.api.parts.CableRenderMode;
@@ -22,7 +24,11 @@ import appeng.core.stats.AeStats;
import appeng.core.sync.BasePacket; import appeng.core.sync.BasePacket;
import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.network.TargetPoint; import appeng.core.sync.network.TargetPoint;
import appeng.fluids.container.*;
import appeng.fluids.registries.BasicFluidCellGuiHandler;
import appeng.hooks.ToolItemHook; import appeng.hooks.ToolItemHook;
import appeng.items.parts.FacadeItem;
import appeng.items.tools.NetworkToolItem;
import appeng.me.cache.*; import appeng.me.cache.*;
import appeng.mixins.CriteriaRegisterMixin; import appeng.mixins.CriteriaRegisterMixin;
import appeng.recipes.handlers.*; import appeng.recipes.handlers.*;
@@ -31,6 +37,7 @@ import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.recipe.Recipe; import net.minecraft.recipe.Recipe;
import net.minecraft.recipe.RecipeType; import net.minecraft.recipe.RecipeType;
import net.minecraft.screen.ScreenHandlerType; import net.minecraft.screen.ScreenHandlerType;
@@ -84,15 +91,15 @@ public abstract class AppEngBase implements AppEng {
gcr.registerGridCache(IEnergyGrid.class, EnergyGridCache::new); gcr.registerGridCache(IEnergyGrid.class, EnergyGridCache::new);
gcr.registerGridCache(IPathingGrid.class, PathGridCache::new); gcr.registerGridCache(IPathingGrid.class, PathGridCache::new);
gcr.registerGridCache(IStorageGrid.class, GridStorageCache::new); gcr.registerGridCache(IStorageGrid.class, GridStorageCache::new);
// FIXME FABRIC gcr.registerGridCache(P2PCache.class, P2PCache.class); gcr.registerGridCache(P2PCache.class, P2PCache::new);
// FIXME FABRIC gcr.registerGridCache(ISpatialCache.class, SpatialPylonCache.class); gcr.registerGridCache(ISpatialCache.class, SpatialPylonCache::new);
gcr.registerGridCache(ISecurityGrid.class, SecurityCache::new); gcr.registerGridCache(ISecurityGrid.class, SecurityCache::new);
// FIXME FABRIC gcr.registerGridCache(ICraftingGrid.class, CraftingGridCache.class); gcr.registerGridCache(ICraftingGrid.class, CraftingGridCache::new);
registries.cell().addCellHandler(new BasicCellHandler()); registries.cell().addCellHandler(new BasicCellHandler());
registries.cell().addCellHandler(new CreativeCellHandler()); registries.cell().addCellHandler(new CreativeCellHandler());
registries.cell().addCellGuiHandler(new BasicItemCellGuiHandler()); registries.cell().addCellGuiHandler(new BasicItemCellGuiHandler());
// FIXME FABRIC registries.cell().addCellGuiHandler(new BasicFluidCellGuiHandler()); registries.cell().addCellGuiHandler(new BasicFluidCellGuiHandler());
registries.matterCannon().registerAmmoItem(api.definitions().materials().matterBall().item(), 32); registries.matterCannon().registerAmmoItem(api.definitions().materials().matterBall().item(), 32);
} }
@@ -175,12 +182,12 @@ public abstract class AppEngBase implements AppEng {
for (int x = 0; x < PlayerInventory.getHotbarSize(); x++) { for (int x = 0; x < PlayerInventory.getHotbarSize(); x++) {
final ItemStack is = player.inventory.getStack(x); final ItemStack is = player.inventory.getStack(x);
// FIXME FABRIC if (!is.isEmpty() && is.getItem() instanceof NetworkToolItem) { if (!is.isEmpty() && is.getItem() instanceof NetworkToolItem) {
// FIXME FABRIC final CompoundTag c = is.getTag(); final CompoundTag c = is.getTag();
// FIXME FABRIC if (c != null && c.getBoolean("hideFacades")) { if (c != null && c.getBoolean("hideFacades")) {
// FIXME FABRIC return CableRenderMode.CABLE_VIEW; return CableRenderMode.CABLE_VIEW;
// FIXME FABRIC } }
// FIXME FABRIC } }
} }
} }
@@ -253,18 +260,18 @@ public abstract class AppEngBase implements AppEng {
WirelessTermContainer.TYPE = registerScreenHandler("wirelessterm", WirelessTermContainer::fromNetwork, WirelessTermContainer.TYPE = registerScreenHandler("wirelessterm", WirelessTermContainer::fromNetwork,
WirelessTermContainer::open); WirelessTermContainer::open);
// FIXME FABRIC FluidFormationPlaneContainer.TYPE = registerScreenHandler("fluid_formation_plane", FluidFormationPlaneContainer.TYPE = registerScreenHandler("fluid_formation_plane",
// FIXME FABRIC FluidFormationPlaneContainer::fromNetwork, FluidFormationPlaneContainer::open); FluidFormationPlaneContainer::fromNetwork, FluidFormationPlaneContainer::open);
// FIXME FABRIC FluidIOContainer.TYPE = registerScreenHandler("fluid_io", FluidIOContainer::fromNetwork, FluidIOContainer.TYPE = registerScreenHandler("fluid_io", FluidIOContainer::fromNetwork,
// FIXME FABRIC FluidIOContainer::open); FluidIOContainer::open);
// FIXME FABRIC FluidInterfaceContainer.TYPE = registerScreenHandler("fluid_interface", FluidInterfaceContainer.TYPE = registerScreenHandler("fluid_interface",
// FIXME FABRIC FluidInterfaceContainer::fromNetwork, FluidInterfaceContainer::open); FluidInterfaceContainer::fromNetwork, FluidInterfaceContainer::open);
// FIXME FABRIC FluidLevelEmitterContainer.TYPE = registerScreenHandler("fluid_level_emitter", FluidLevelEmitterContainer.TYPE = registerScreenHandler("fluid_level_emitter",
// FIXME FABRIC FluidLevelEmitterContainer::fromNetwork, FluidLevelEmitterContainer::open); FluidLevelEmitterContainer::fromNetwork, FluidLevelEmitterContainer::open);
// FIXME FABRIC FluidStorageBusContainer.TYPE = registerScreenHandler("fluid_storage_bus", FluidStorageBusContainer.TYPE = registerScreenHandler("fluid_storage_bus",
// FIXME FABRIC FluidStorageBusContainer::fromNetwork, FluidStorageBusContainer::open); FluidStorageBusContainer::fromNetwork, FluidStorageBusContainer::open);
// FIXME FABRIC FluidTerminalContainer.TYPE = registerScreenHandler("fluid_terminal", FluidTerminalContainer::fromNetwork, FluidTerminalContainer.TYPE = registerScreenHandler("fluid_terminal", FluidTerminalContainer::fromNetwork,
// FIXME FABRIC FluidTerminalContainer::open); FluidTerminalContainer::open);
} }
@@ -42,12 +42,12 @@ public class ApiClientHelper implements IClientHelper {
if (cellInventory != null) { if (cellInventory != null) {
lines.add(new LiteralText(cellInventory.getUsedBytes() + " ") lines.add(new LiteralText(cellInventory.getUsedBytes() + " ")
.append(GuiText.Of.textComponent()).append(" " + cellInventory.getTotalBytes() + " ") .append(GuiText.Of.text()).append(" " + cellInventory.getTotalBytes() + " ")
.append(GuiText.BytesUsed.textComponent())); .append(GuiText.BytesUsed.text()));
lines.add(new LiteralText(cellInventory.getStoredItemTypes() + " ") lines.add(new LiteralText(cellInventory.getStoredItemTypes() + " ")
.append(GuiText.Of.textComponent()).append(" " + cellInventory.getTotalItemTypes() + " ") .append(GuiText.Of.text()).append(" " + cellInventory.getTotalItemTypes() + " ")
.append(GuiText.Types.textComponent())); .append(GuiText.Types.text()));
} }
if (handler.isPreformatted()) { if (handler.isPreformatted()) {
@@ -55,11 +55,11 @@ public class ApiClientHelper implements IClientHelper {
: GuiText.Excluded).getLocal(); : GuiText.Excluded).getLocal();
if (handler.isFuzzy()) { if (handler.isFuzzy()) {
lines.add(GuiText.Partitioned.textComponent().copy().append(" - " + list + " ") lines.add(GuiText.Partitioned.text().copy().append(" - " + list + " ")
.append(GuiText.Fuzzy.textComponent())); .append(GuiText.Fuzzy.text()));
} else { } else {
lines.add(GuiText.Partitioned.textComponent().copy().append(" - " + list + " ") lines.add(GuiText.Partitioned.text().copy().append(" - " + list + " ")
.append(GuiText.Precise.textComponent())); .append(GuiText.Precise.text()));
} }
} }
@@ -43,6 +43,7 @@ import static appeng.block.crafting.AbstractCraftingUnitBlock.CraftingUnitType;
import appeng.bootstrap.components.IInitComponent; import appeng.bootstrap.components.IInitComponent;
import appeng.bootstrap.definitions.TileEntityDefinition; import appeng.bootstrap.definitions.TileEntityDefinition;
import appeng.client.render.crafting.CraftingCubeRendering; import appeng.client.render.crafting.CraftingCubeRendering;
import appeng.client.render.model.AutoRotatingBakedModel;
import appeng.client.render.spatial.SpatialPylonRendering; import appeng.client.render.spatial.SpatialPylonRendering;
import appeng.client.render.tesr.CrankTESR; import appeng.client.render.tesr.CrankTESR;
import appeng.client.render.tesr.DriveLedTileEntityRenderer; import appeng.client.render.tesr.DriveLedTileEntityRenderer;
@@ -51,6 +52,8 @@ import appeng.decorative.AEDecorativeBlock;
import appeng.decorative.solid.*; import appeng.decorative.solid.*;
import appeng.decorative.solid.SkyStoneBlock.SkystoneType; import appeng.decorative.solid.SkyStoneBlock.SkystoneType;
import appeng.entity.TinyTNTPrimedEntity; import appeng.entity.TinyTNTPrimedEntity;
import appeng.fluids.block.FluidInterfaceBlock;
import appeng.fluids.tile.FluidInterfaceBlockEntity;
import appeng.hooks.TinyTNTDispenseItemBehavior; import appeng.hooks.TinyTNTDispenseItemBehavior;
import appeng.tile.crafting.*; import appeng.tile.crafting.*;
import appeng.tile.grindstone.CrankBlockEntity; import appeng.tile.grindstone.CrankBlockEntity;
@@ -365,12 +368,12 @@ public final class ApiBlocks implements IBlocks {
.tileEntity( .tileEntity(
registry.tileEntity("interface", InterfaceBlockEntity.class, InterfaceBlockEntity::new).build()) registry.tileEntity("interface", InterfaceBlockEntity.class, InterfaceBlockEntity::new).build())
.build(); .build();
// FIXME this.fluidIface = registry.block("fluid_interface", FluidInterfaceBlock::new) this.fluidIface = registry.block("fluid_interface", FluidInterfaceBlock::new)
// FIXME .features(AEFeature.FLUID_INTERFACE) .features(AEFeature.FLUID_INTERFACE)
// FIXME .tileEntity(registry .tileEntity(registry
// FIXME .tileEntity("fluid_interface", FluidInterfaceBlockEntity.class, FluidInterfaceBlockEntity::new) .tileEntity("fluid_interface", FluidInterfaceBlockEntity.class, FluidInterfaceBlockEntity::new)
// FIXME .build()) .build())
// FIXME .build(); .build();
this.cellWorkbench = registry.block("cell_workbench", CellWorkbenchBlock::new).features(AEFeature.STORAGE_CELLS) this.cellWorkbench = registry.block("cell_workbench", CellWorkbenchBlock::new).features(AEFeature.STORAGE_CELLS)
.tileEntity(registry .tileEntity(registry
.tileEntity("cell_workbench", CellWorkbenchBlockEntity.class, CellWorkbenchBlockEntity::new) .tileEntity("cell_workbench", CellWorkbenchBlockEntity.class, CellWorkbenchBlockEntity::new)
@@ -462,13 +465,13 @@ public final class ApiBlocks implements IBlocks {
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public void customize(IBlockRendering rendering, IItemRendering itemRendering) { public void customize(IBlockRendering rendering, IItemRendering itemRendering) {
rendering.renderType(RenderLayer.getCutout()); rendering.renderType(RenderLayer.getCutout());
// FIXME FABRIC rendering.modelCustomizer((path, model) -> { rendering.modelCustomizer((path, model) -> {
// FIXME FABRIC // The formed model handles rotations itself, the unformed one does not // The formed model handles rotations itself, the unformed one does not
// FIXME FABRIC if (model instanceof MonitorBakedModel) { // FIXME FABRIC if (model instanceof MonitorBakedModel) {
// FIXME FABRIC return model; // FIXME FABRIC return model;
// FIXME FABRIC } // FIXME FABRIC }
// FIXME FABRIC return new AutoRotatingBakedModel(model); return new AutoRotatingBakedModel(model);
// FIXME FABRIC }); });
} }
}).build(); }).build();
@@ -1,6 +1,9 @@
package appeng.core.features.registries.cell; package appeng.core.features.registries.cell;
import appeng.container.ContainerLocator;
import appeng.container.ContainerOpener;
import appeng.container.implementations.MEMonitorableContainer;
import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -23,7 +26,7 @@ public class BasicItemCellGuiHandler implements ICellGuiHandler {
@Override @Override
public void openChestGui(final PlayerEntity player, final IChestOrDrive chest, final ICellHandler cellHandler, public void openChestGui(final PlayerEntity player, final IChestOrDrive chest, final ICellHandler cellHandler,
final IMEInventoryHandler inv, final ItemStack is, final IStorageChannel chan) { final IMEInventoryHandler inv, final ItemStack is, final IStorageChannel chan) {
// FIXME FABRIC ContainerOpener.openContainer(MEMonitorableContainer.TYPE, player, ContainerOpener.openContainer(MEMonitorableContainer.TYPE, player,
// FIXME FABRIC ContainerLocator.forTileEntitySide((BlockEntity) chest, chest.getUp())); ContainerLocator.forTileEntitySide((BlockEntity) chest, chest.getUp()));
} }
} }
@@ -18,6 +18,7 @@
package appeng.core.localization; package appeng.core.localization;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText; import net.minecraft.text.TranslatableText;
@@ -85,14 +86,16 @@ public enum GuiText {
private final String root; private final String root;
private final Text text = new TranslatableText(getTranslationKey()); private final Text text;
GuiText() { GuiText() {
this.root = "gui.appliedenergistics2"; this.root = "gui.appliedenergistics2";
this.text = new TranslatableText(getTranslationKey());
} }
GuiText(final String r) { GuiText(final String r) {
this.root = r; this.root = r;
this.text = new TranslatableText(getTranslationKey());
} }
public String getLocal() { public String getLocal() {
@@ -103,11 +106,19 @@ public enum GuiText {
return this.root + '.' + this.toString(); return this.root + '.' + this.toString();
} }
public Text textComponent() { public Text text() {
return text; return text;
} }
public Text textComponent(Object... args) { public MutableText withSuffix(String text) {
return text().copy().append(text);
}
public MutableText withSuffix(Text text) {
return text().copy().append(text);
}
public MutableText text(Object... args) {
return new TranslatableText(getTranslationKey(), args); return new TranslatableText(getTranslationKey(), args);
} }
@@ -18,6 +18,7 @@
package appeng.core.localization; package appeng.core.localization;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText; import net.minecraft.text.TranslatableText;
@@ -43,18 +44,18 @@ public enum WailaText {
} }
public String getLocal() { public String getLocal() {
return textComponent().getString(); return text().getString();
} }
public String getTranslationKey() { public String getTranslationKey() {
return this.root + '.' + this.toString(); return this.root + '.' + this.toString();
} }
public Text textComponent() { public Text text() {
return new TranslatableText(this.root + '.' + this.toString()); return new TranslatableText(this.root + '.' + this.toString());
} }
public Text textComponent(Object... args) { public MutableText text(Object... args) {
return new TranslatableText(this.root + '.' + this.toString(), args); return new TranslatableText(this.root + '.' + this.toString(), args);
} }
@@ -26,6 +26,7 @@ import java.io.OutputStream;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
import appeng.client.gui.implementations.InterfaceTerminalScreen;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
@@ -97,9 +98,8 @@ public class CompressedNBTPacket extends BasePacket {
public void clientPacketData(final INetworkInfo network, final PlayerEntity player) { public void clientPacketData(final INetworkInfo network, final PlayerEntity player) {
final Screen gs = MinecraftClient.getInstance().currentScreen; final Screen gs = MinecraftClient.getInstance().currentScreen;
throw new IllegalStateException(); if (gs instanceof InterfaceTerminalScreen) {
// FIXME FABRIC if (gs instanceof InterfaceTerminalScreen) { ((InterfaceTerminalScreen) gs).postUpdate(this.in);
// FIXME FABRIC ((InterfaceTerminalScreen) gs).postUpdate(this.in); }
// FIXME FABRIC }
} }
} }
@@ -22,12 +22,13 @@ import appeng.api.config.FuzzyMode;
import appeng.api.config.Settings; import appeng.api.config.Settings;
import appeng.api.util.IConfigManager; import appeng.api.util.IConfigManager;
import appeng.api.util.IConfigurableObject; import appeng.api.util.IConfigurableObject;
import appeng.client.gui.implementations.CraftingCPUScreen;
import appeng.container.AEBaseContainer; import appeng.container.AEBaseContainer;
import appeng.container.implementations.CellWorkbenchContainer; import appeng.container.implementations.*;
import appeng.container.implementations.NetworkToolContainer;
import appeng.container.implementations.PatternTermContainer;
import appeng.core.sync.BasePacket; import appeng.core.sync.BasePacket;
import appeng.core.sync.network.INetworkInfo; import appeng.core.sync.network.INetworkInfo;
import appeng.fluids.container.FluidLevelEmitterContainer;
import appeng.fluids.container.FluidStorageBusContainer;
import appeng.helpers.IMouseWheelItem; import appeng.helpers.IMouseWheelItem;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
@@ -84,33 +85,33 @@ public class ConfigValuePacket extends BasePacket {
final ItemStack is = player.getStackInHand(hand); final ItemStack is = player.getStackInHand(hand);
final IMouseWheelItem si = (IMouseWheelItem) is.getItem(); final IMouseWheelItem si = (IMouseWheelItem) is.getItem();
si.onWheel(is, this.Value.equals("WheelUp")); si.onWheel(is, this.Value.equals("WheelUp"));
// FIXME FABRIC } else if (this.Name.equals("Terminal.Cpu") && c instanceof CraftingStatusContainer) { } else if (this.Name.equals("Terminal.Cpu") && c instanceof CraftingStatusContainer) {
// FIXME FABRIC final CraftingStatusContainer qk = (CraftingStatusContainer) c; final CraftingStatusContainer qk = (CraftingStatusContainer) c;
// FIXME FABRIC qk.cycleCpu(this.Value.equals("Next")); qk.cycleCpu(this.Value.equals("Next"));
// FIXME FABRIC } else if (this.Name.equals("Terminal.Cpu") && c instanceof CraftConfirmContainer) { } else if (this.Name.equals("Terminal.Cpu") && c instanceof CraftConfirmContainer) {
// FIXME FABRIC final CraftConfirmContainer qk = (CraftConfirmContainer) c; final CraftConfirmContainer qk = (CraftConfirmContainer) c;
// FIXME FABRIC qk.cycleCpu(this.Value.equals("Next")); qk.cycleCpu(this.Value.equals("Next"));
// FIXME FABRIC } else if (this.Name.equals("Terminal.Start") && c instanceof CraftConfirmContainer) { } else if (this.Name.equals("Terminal.Start") && c instanceof CraftConfirmContainer) {
// FIXME FABRIC final CraftConfirmContainer qk = (CraftConfirmContainer) c; final CraftConfirmContainer qk = (CraftConfirmContainer) c;
// FIXME FABRIC qk.startJob(); qk.startJob();
// FIXME FABRIC } else if (this.Name.equals("TileCrafting.Cancel") && c instanceof CraftingCPUContainer) { } else if (this.Name.equals("TileCrafting.Cancel") && c instanceof CraftingCPUContainer) {
// FIXME FABRIC final CraftingCPUContainer qk = (CraftingCPUContainer) c; final CraftingCPUContainer qk = (CraftingCPUContainer) c;
// FIXME FABRIC qk.cancelCrafting(); qk.cancelCrafting();
// FIXME FABRIC } else if (this.Name.equals("QuartzKnife.Name") && c instanceof QuartzKnifeContainer) { } else if (this.Name.equals("QuartzKnife.Name") && c instanceof QuartzKnifeContainer) {
// FIXME FABRIC final QuartzKnifeContainer qk = (QuartzKnifeContainer) c; final QuartzKnifeContainer qk = (QuartzKnifeContainer) c;
// FIXME FABRIC qk.setName(this.Value); qk.setName(this.Value);
// FIXME FABRIC } else if (this.Name.equals("TileSecurityStation.ToggleOption") && c instanceof SecurityStationContainer) { } else if (this.Name.equals("TileSecurityStation.ToggleOption") && c instanceof SecurityStationContainer) {
// FIXME FABRIC final SecurityStationContainer sc = (SecurityStationContainer) c; final SecurityStationContainer sc = (SecurityStationContainer) c;
// FIXME FABRIC sc.toggleSetting(this.Value, player); sc.toggleSetting(this.Value, player);
// FIXME FABRIC } else if (this.Name.equals("PriorityHost.Priority") && c instanceof PriorityContainer) { } else if (this.Name.equals("PriorityHost.Priority") && c instanceof PriorityContainer) {
// FIXME FABRIC final PriorityContainer pc = (PriorityContainer) c; final PriorityContainer pc = (PriorityContainer) c;
// FIXME FABRIC pc.setPriority(Integer.parseInt(this.Value), player); pc.setPriority(Integer.parseInt(this.Value), player);
// FIXME FABRIC } else if (this.Name.equals("LevelEmitter.Value") && c instanceof LevelEmitterContainer) { } else if (this.Name.equals("LevelEmitter.Value") && c instanceof LevelEmitterContainer) {
// FIXME FABRIC final LevelEmitterContainer lvc = (LevelEmitterContainer) c; final LevelEmitterContainer lvc = (LevelEmitterContainer) c;
// FIXME FABRIC lvc.setLevel(Long.parseLong(this.Value), player); lvc.setLevel(Long.parseLong(this.Value), player);
// FIXME FABRIC } else if (this.Name.equals("FluidLevelEmitter.Value") && c instanceof FluidLevelEmitterContainer) { } else if (this.Name.equals("FluidLevelEmitter.Value") && c instanceof FluidLevelEmitterContainer) {
// FIXME FABRIC final FluidLevelEmitterContainer lvc = (FluidLevelEmitterContainer) c; final FluidLevelEmitterContainer lvc = (FluidLevelEmitterContainer) c;
// FIXME FABRIC lvc.setLevel(Long.parseLong(this.Value), player); lvc.setLevel(Long.parseLong(this.Value), player);
} else if (this.Name.startsWith("PatternTerminal.") && c instanceof PatternTermContainer) { } else if (this.Name.startsWith("PatternTerminal.") && c instanceof PatternTermContainer) {
final PatternTermContainer cpt = (PatternTermContainer) c; final PatternTermContainer cpt = (PatternTermContainer) c;
if (this.Name.equals("PatternTerminal.CraftMode")) { if (this.Name.equals("PatternTerminal.CraftMode")) {
@@ -122,22 +123,22 @@ public class ConfigValuePacket extends BasePacket {
} else if (this.Name.equals("PatternTerminal.Substitute")) { } else if (this.Name.equals("PatternTerminal.Substitute")) {
cpt.getPatternTerminal().setSubstitution(this.Value.equals("1")); cpt.getPatternTerminal().setSubstitution(this.Value.equals("1"));
} }
// FIXME FABRIC } else if (this.Name.startsWith("StorageBus.")) { } else if (this.Name.startsWith("StorageBus.")) {
// FIXME FABRIC if (this.Name.equals("StorageBus.Action")) { if (this.Name.equals("StorageBus.Action")) {
// FIXME FABRIC if (this.Value.equals("Partition")) { if (this.Value.equals("Partition")) {
// FIXME FABRIC if (c instanceof StorageBusContainer) { if (c instanceof StorageBusContainer) {
// FIXME FABRIC ((StorageBusContainer) c).partition(); ((StorageBusContainer) c).partition();
// FIXME FABRIC } else if (c instanceof FluidStorageBusContainer) { } else if (c instanceof FluidStorageBusContainer) {
// FIXME FABRIC ((FluidStorageBusContainer) c).partition(); ((FluidStorageBusContainer) c).partition();
// FIXME FABRIC } }
// FIXME FABRIC } else if (this.Value.equals("Clear")) { } else if (this.Value.equals("Clear")) {
// FIXME FABRIC if (c instanceof StorageBusContainer) { if (c instanceof StorageBusContainer) {
// FIXME FABRIC ((StorageBusContainer) c).clear(); ((StorageBusContainer) c).clear();
// FIXME FABRIC } else if (c instanceof FluidStorageBusContainer) { } else if (c instanceof FluidStorageBusContainer) {
// FIXME FABRIC ((FluidStorageBusContainer) c).clear(); ((FluidStorageBusContainer) c).clear();
// FIXME FABRIC } }
// FIXME FABRIC } }
// FIXME FABRIC } }
} else if (this.Name.startsWith("CellWorkbench.") && c instanceof CellWorkbenchContainer) { } else if (this.Name.startsWith("CellWorkbench.") && c instanceof CellWorkbenchContainer) {
final CellWorkbenchContainer ccw = (CellWorkbenchContainer) c; final CellWorkbenchContainer ccw = (CellWorkbenchContainer) c;
if (this.Name.equals("CellWorkbench.Action")) { if (this.Name.equals("CellWorkbench.Action")) {
@@ -172,7 +173,6 @@ public class ConfigValuePacket extends BasePacket {
} }
} }
} }
throw new IllegalStateException();
} }
@Override @Override
@@ -185,10 +185,9 @@ public class ConfigValuePacket extends BasePacket {
((AEBaseContainer) c).stringSync(Integer.parseInt(this.Name.substring(8)), this.Value); ((AEBaseContainer) c).stringSync(Integer.parseInt(this.Name.substring(8)), this.Value);
} else if (this.Name.equals("CraftingStatus") && this.Value.equals("Clear")) { } else if (this.Name.equals("CraftingStatus") && this.Value.equals("Clear")) {
final Screen gs = MinecraftClient.getInstance().currentScreen; final Screen gs = MinecraftClient.getInstance().currentScreen;
// FIXME FABRIC if (gs instanceof CraftingCPUScreen) { if (gs instanceof CraftingCPUScreen) {
// FIXME FABRIC ((CraftingCPUScreen<?>) gs).clearItems(); ((CraftingCPUScreen<?>) gs).clearItems();
// FIXME FABRIC } }
throw new IllegalStateException();
} else if (c instanceof IConfigurableObject) { } else if (c instanceof IConfigurableObject) {
final IConfigManager cm = ((IConfigurableObject) c).getConfigManager(); final IConfigManager cm = ((IConfigurableObject) c).getConfigManager();
@@ -29,6 +29,10 @@ import java.util.zip.GZIPOutputStream;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import appeng.client.gui.implementations.CraftConfirmScreen;
import appeng.client.gui.implementations.CraftingCPUScreen;
import appeng.client.gui.implementations.MEMonitorableScreen;
import appeng.client.gui.implementations.NetworkStatusScreen;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
@@ -132,22 +136,21 @@ public class MEInventoryUpdatePacket extends BasePacket {
public void clientPacketData(final INetworkInfo network, final PlayerEntity player) { public void clientPacketData(final INetworkInfo network, final PlayerEntity player) {
final Screen gs = MinecraftClient.getInstance().currentScreen; final Screen gs = MinecraftClient.getInstance().currentScreen;
throw new IllegalStateException(); if (gs instanceof CraftConfirmScreen) {
// FIXME FABRIC if (gs instanceof CraftConfirmScreen) { ((CraftConfirmScreen) gs).postUpdate(this.list, this.ref);
// FIXME FABRIC ((CraftConfirmScreen) gs).postUpdate(this.list, this.ref); }
// FIXME FABRIC }
// FIXME FABRIC if (gs instanceof CraftingCPUScreen) {
// FIXME FABRIC if (gs instanceof CraftingCPUScreen) { ((CraftingCPUScreen<?>) gs).postUpdate(this.list, this.ref);
// FIXME FABRIC ((CraftingCPUScreen<?>) gs).postUpdate(this.list, this.ref); }
// FIXME FABRIC }
// FIXME FABRIC if (gs instanceof MEMonitorableScreen) {
// FIXME FABRIC if (gs instanceof MEMonitorableScreen) { ((MEMonitorableScreen<?>) gs).postUpdate(this.list);
// FIXME FABRIC ((MEMonitorableScreen<?>) gs).postUpdate(this.list); }
// FIXME FABRIC }
// FIXME FABRIC if (gs instanceof NetworkStatusScreen) {
// FIXME FABRIC if (gs instanceof NetworkStatusScreen) { ((NetworkStatusScreen) gs).postUpdate(this.list);
// FIXME FABRIC ((NetworkStatusScreen) gs).postUpdate(this.list); }
// FIXME FABRIC }
} }
@Nullable @Nullable
@@ -29,7 +29,7 @@ public class FluidFormationPlaneScreen extends UpgradeableScreen<FluidFormationP
final int xo = 8; final int xo = 8;
final int yo = 23 + 6; final int yo = 23 + 6;
final IAEFluidTank config = container.getFluidConfigInventory(); final IAEFluidTank config = handler.getFluidConfigInventory();
for (int y = 0; y < 7; y++) { for (int y = 0; y < 7; y++) {
for (int x = 0; x < 9; x++) { for (int x = 0; x < 9; x++) {
@@ -37,7 +37,7 @@ public class FluidFormationPlaneScreen extends UpgradeableScreen<FluidFormationP
if (y < 2) { if (y < 2) {
this.guiSlots.add(new FluidSlotWidget(config, idx, idx, xo + x * 18, yo + y * 18)); this.guiSlots.add(new FluidSlotWidget(config, idx, idx, xo + x * 18, yo + y * 18));
} else { } else {
this.guiSlots.add(new OptionalFluidSlotWidget(config, container, idx, idx, y - 2, xo, yo, x, y)); this.guiSlots.add(new OptionalFluidSlotWidget(config, handler, idx, idx, y - 2, xo, yo, x, y));
} }
} }
} }
@@ -45,7 +45,7 @@ public class FluidFormationPlaneScreen extends UpgradeableScreen<FluidFormationP
@Override @Override
protected void addButtons() { protected void addButtons() {
this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.text(),
this.itemRenderer, btn -> openPriorityGui())); this.itemRenderer, btn -> openPriorityGui()));
} }
@@ -49,15 +49,15 @@ public class FluidIOScreen extends UpgradeableScreen<FluidIOContainer> {
final int x = 80; final int x = 80;
this.guiSlots.add(new FluidSlotWidget(inv, 0, 0, x, y)); this.guiSlots.add(new FluidSlotWidget(inv, 0, 0, x, y));
this.guiSlots.add(new OptionalFluidSlotWidget(inv, container, 1, 1, 1, x, y, -1, 0)); this.guiSlots.add(new OptionalFluidSlotWidget(inv, handler, 1, 1, 1, x, y, -1, 0));
this.guiSlots.add(new OptionalFluidSlotWidget(inv, container, 2, 2, 1, x, y, 1, 0)); this.guiSlots.add(new OptionalFluidSlotWidget(inv, handler, 2, 2, 1, x, y, 1, 0));
this.guiSlots.add(new OptionalFluidSlotWidget(inv, container, 3, 3, 1, x, y, 0, -1)); this.guiSlots.add(new OptionalFluidSlotWidget(inv, handler, 3, 3, 1, x, y, 0, -1));
this.guiSlots.add(new OptionalFluidSlotWidget(inv, container, 4, 4, 1, x, y, 0, 1)); this.guiSlots.add(new OptionalFluidSlotWidget(inv, handler, 4, 4, 1, x, y, 0, 1));
this.guiSlots.add(new OptionalFluidSlotWidget(inv, container, 5, 5, 2, x, y, -1, -1)); this.guiSlots.add(new OptionalFluidSlotWidget(inv, handler, 5, 5, 2, x, y, -1, -1));
this.guiSlots.add(new OptionalFluidSlotWidget(inv, container, 6, 6, 2, x, y, 1, -1)); this.guiSlots.add(new OptionalFluidSlotWidget(inv, handler, 6, 6, 2, x, y, 1, -1));
this.guiSlots.add(new OptionalFluidSlotWidget(inv, container, 7, 7, 2, x, y, -1, 1)); this.guiSlots.add(new OptionalFluidSlotWidget(inv, handler, 7, 7, 2, x, y, -1, 1));
this.guiSlots.add(new OptionalFluidSlotWidget(inv, container, 8, 8, 2, x, y, 1, 1)); this.guiSlots.add(new OptionalFluidSlotWidget(inv, handler, 8, 8, 2, x, y, 1, 1));
} }
@Override @Override
@@ -50,13 +50,13 @@ public class FluidInterfaceScreen extends UpgradeableScreen<FluidInterfaceContai
final IAEFluidTank fluidTank = this.handler.getTanks(); final IAEFluidTank fluidTank = this.handler.getTanks();
for (int i = 0; i < DualityFluidInterface.NUMBER_OF_TANKS; ++i) { for (int i = 0; i < DualityFluidInterface.NUMBER_OF_TANKS; ++i) {
final FluidTankWidget guiTank = new FluidTankWidget(fluidTank, i, this.getGuiLeft() + 35 + 18 * i, final FluidTankWidget guiTank = new FluidTankWidget(fluidTank, i, this.getX() + 35 + 18 * i,
this.getGuiTop() + 53, 16, 68); this.getY() + 53, 16, 68);
this.addButton(guiTank); this.addButton(guiTank);
this.guiSlots.add(new FluidSlotWidget(configFluids, i, i, 35 + 18 * i, 35)); this.guiSlots.add(new FluidSlotWidget(configFluids, i, i, 35 + 18 * i, 35));
} }
this.addButton(new TabButton(this.getGuiLeft() + 154, this.getGuiTop(), 2 + 4 * 16, GuiText.Priority.getLocal(), this.addButton(new TabButton(this.getX() + 154, this.getY(), 2 + 4 * 16, GuiText.Priority.text(),
this.itemRenderer, btn -> openPriorityGui())); this.itemRenderer, btn -> openPriorityGui()));
} }
@@ -66,7 +66,7 @@ public class FluidInterfaceScreen extends UpgradeableScreen<FluidInterfaceContai
@Override @Override
public void drawFG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY) { public void drawFG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.FluidInterface.getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(GuiText.FluidInterface.text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.Config.getLocal(), 35, 6 + 11 + 7, 4210752); this.textRenderer.draw(matrices, GuiText.Config.getLocal(), 35, 6 + 11 + 7, 4210752);
this.textRenderer.draw(matrices, GuiText.StoredFluids.getLocal(), 35, 6 + 112 + 7, 4210752); this.textRenderer.draw(matrices, GuiText.StoredFluids.getLocal(), 35, 6 + 112 + 7, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752);
@@ -75,7 +75,7 @@ public class FluidInterfaceScreen extends UpgradeableScreen<FluidInterfaceContai
@Override @Override
public void drawBG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY, float partialTicks) { public void drawBG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY, float partialTicks) {
this.bindTexture("guis/interfacefluid.png"); this.bindTexture("guis/interfacefluid.png");
drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight, 0 /* FIXME ZINDEX */ ); drawTexture(matrices, offsetX, offsetY, 0, 0, this.backgroundWidth, this.backgroundHeight);
} }
private void openPriorityGui() { private void openPriorityGui() {
@@ -4,6 +4,7 @@ package appeng.fluids.client.gui;
import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import appeng.api.config.RedstoneMode; import appeng.api.config.RedstoneMode;
@@ -30,14 +31,14 @@ public class FluidLevelEmitterScreen extends UpgradeableScreen<FluidLevelEmitter
public void init() { public void init() {
super.init(); super.init();
this.level = new NumberBox(this.textRenderer, this.x + 24, this.y + 43, 79, this.textRenderer.FONT_HEIGHT, this.level = new NumberBox(this.textRenderer, this.x + 24, this.y + 43, 79, this.textRenderer.fontHeight,
Long.class); Long.class);
this.level.setHasBorder(false); this.level.setHasBorder(false);
this.level.setMaxLength(16); this.level.setMaxLength(16);
this.level.setEditableColor(0xFFFFFF); this.level.setEditableColor(0xFFFFFF);
this.level.setVisible(true); this.level.setVisible(true);
this.level.changeFocus(true); this.level.changeFocus(true);
container.setTextField(this.level); handler.setTextField(this.level);
final int y = 40; final int y = 40;
final int x = 80 + 44; final int x = 80 + 44;
@@ -54,15 +55,15 @@ public class FluidLevelEmitterScreen extends UpgradeableScreen<FluidLevelEmitter
final int c = AEConfig.instance().levelByMillyBuckets(2); final int c = AEConfig.instance().levelByMillyBuckets(2);
final int d = AEConfig.instance().levelByMillyBuckets(3); final int d = AEConfig.instance().levelByMillyBuckets(3);
this.addButton(new ButtonWidget(this.x + 20, this.y + 17, 22, 20, "+" + a, btn -> addQty(a))); this.addButton(new ButtonWidget(this.x + 20, this.y + 17, 22, 20, new LiteralText("+" + a), btn -> addQty(a)));
this.addButton(new ButtonWidget(this.x + 48, this.y + 17, 28, 20, "+" + b, btn -> addQty(b))); this.addButton(new ButtonWidget(this.x + 48, this.y + 17, 28, 20, new LiteralText("+" + b), btn -> addQty(b)));
this.addButton(new ButtonWidget(this.x + 82, this.y + 17, 32, 20, "+" + c, btn -> addQty(c))); this.addButton(new ButtonWidget(this.x + 82, this.y + 17, 32, 20, new LiteralText("+" + c), btn -> addQty(c)));
this.addButton(new ButtonWidget(this.x + 120, this.y + 17, 38, 20, "+" + d, btn -> addQty(d))); this.addButton(new ButtonWidget(this.x + 120, this.y + 17, 38, 20, new LiteralText("+" + d), btn -> addQty(d)));
this.addButton(new ButtonWidget(this.x + 20, this.y + 59, 22, 20, "-" + a, btn -> addQty(-a))); this.addButton(new ButtonWidget(this.x + 20, this.y + 59, 22, 20, new LiteralText("-" + a), btn -> addQty(-a)));
this.addButton(new ButtonWidget(this.x + 48, this.y + 59, 28, 20, "-" + b, btn -> addQty(-b))); this.addButton(new ButtonWidget(this.x + 48, this.y + 59, 28, 20, new LiteralText("-" + b), btn -> addQty(-b)));
this.addButton(new ButtonWidget(this.x + 82, this.y + 59, 32, 20, "-" + c, btn -> addQty(-c))); this.addButton(new ButtonWidget(this.x + 82, this.y + 59, 32, 20, new LiteralText("-" + c), btn -> addQty(-c)));
this.addButton(new ButtonWidget(this.x + 120, this.y + 59, 38, 20, "-" + d, btn -> addQty(-d))); this.addButton(new ButtonWidget(this.x + 120, this.y + 59, 38, 20, new LiteralText("-" + d), btn -> addQty(-d)));
this.addButton(this.redstoneMode); this.addButton(this.redstoneMode);
} }
@@ -70,7 +71,7 @@ public class FluidLevelEmitterScreen extends UpgradeableScreen<FluidLevelEmitter
@Override @Override
public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) { public void drawBG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) {
super.drawBG(matrices, offsetX, offsetY, mouseX, mouseY, partialTicks); super.drawBG(matrices, offsetX, offsetY, mouseX, mouseY, partialTicks);
this.level.render(mouseX, mouseY, partialTicks); this.level.render(matrices, mouseX, mouseY, partialTicks);
} }
@Override @Override
@@ -72,7 +72,7 @@ public class FluidStorageBusScreen extends UpgradeableScreen<FluidStorageBusCont
if (y < 2) { if (y < 2) {
this.guiSlots.add(new FluidSlotWidget(config, idx, idx, xo + x * 18, yo + y * 18)); this.guiSlots.add(new FluidSlotWidget(config, idx, idx, xo + x * 18, yo + y * 18));
} else { } else {
this.guiSlots.add(new OptionalFluidSlotWidget(config, container, idx, idx, y - 2, xo, yo, x, y)); this.guiSlots.add(new OptionalFluidSlotWidget(config, handler, idx, idx, y - 2, xo, yo, x, y));
} }
} }
} }
@@ -89,7 +89,7 @@ public class FluidStorageBusScreen extends UpgradeableScreen<FluidStorageBusCont
this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 88, Settings.FUZZY_MODE, this.fuzzyMode = new ServerSettingToggleButton<>(this.x - 18, this.y + 88, Settings.FUZZY_MODE,
FuzzyMode.IGNORE_ALL); FuzzyMode.IGNORE_ALL);
addButton(this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.getLocal(), addButton(this.addButton(new TabButton(this.x + 154, this.y, 2 + 4 * 16, GuiText.Priority.text(),
this.itemRenderer, btn -> openPriorityGui()))); this.itemRenderer, btn -> openPriorityGui())));
this.addButton(this.storageFilter); this.addButton(this.storageFilter);
@@ -99,7 +99,7 @@ public class FluidStorageBusScreen extends UpgradeableScreen<FluidStorageBusCont
@Override @Override
public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) { public void drawFG(MatrixStack matrices, final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName(this.getName().getLocal()), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(this.getName().text()), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752);
if (this.fuzzyMode != null) { if (this.fuzzyMode != null) {
@@ -127,7 +127,7 @@ public class FluidTerminalScreen extends AEBaseMEScreen<FluidTerminalContainer>
@Override @Override
public void drawFG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY) { public void drawFG(MatrixStack matrices, int offsetX, int offsetY, int mouseX, int mouseY) {
this.textRenderer.draw(matrices, this.getGuiDisplayName("Fluid Terminal"), 8, 6, 4210752); this.textRenderer.draw(matrices, this.getGuiDisplayName(new LiteralText("Fluid Terminal")), 8, 6, 4210752);
this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752); this.textRenderer.draw(matrices, GuiText.inventory.getLocal(), 8, this.backgroundHeight - 96 + 3, 4210752);
} }
@@ -1,22 +1,17 @@
package appeng.fluids.client.gui.widgets; package appeng.fluids.client.gui.widgets;
import java.math.RoundingMode;
import java.util.Collections; import java.util.Collections;
import com.mojang.blaze3d.systems.RenderSystem; import alexiil.mc.lib.attributes.Simulation;
import alexiil.mc.lib.attributes.fluid.FluidAttributes;
import alexiil.mc.lib.attributes.fluid.FluidExtractable;
import alexiil.mc.lib.attributes.fluid.amount.FluidAmount;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.texture.SpriteAtlasTexture;
import net.minecraft.client.texture.Sprite;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.Fluid;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.FluidAttributes;
import alexiil.mc.lib.attributes.fluid.volume.FluidVolume; import alexiil.mc.lib.attributes.fluid.volume.FluidVolume;
import net.minecraftforge.fluids.FluidUtil;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEFluidStack;
import appeng.client.gui.widgets.CustomSlotWidget; import appeng.client.gui.widgets.CustomSlotWidget;
@@ -39,21 +34,7 @@ public class FluidSlotWidget extends CustomSlotWidget {
public void drawContent(final MinecraftClient mc, final int mouseX, final int mouseY, final float partialTicks) { public void drawContent(final MinecraftClient mc, final int mouseX, final int mouseY, final float partialTicks) {
final IAEFluidStack fs = this.getFluidStack(); final IAEFluidStack fs = this.getFluidStack();
if (fs != null) { if (fs != null) {
RenderSystem.disableBlend(); fs.getFluidStack().renderGuiRect(xPos(), yPos(), xPos() + getWidth(), yPos() + getHeight());
final Fluid fluid = fs.getFluid();
final FluidAttributes attributes = fluid.getAttributes();
mc.getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX);
final Sprite sprite = mc.getAtlasSpriteGetter(SpriteAtlasTexture.BLOCK_ATLAS_TEX)
.apply(attributes.getStillTexture(fs.getFluidStack()));
// Set color for dynamic fluids
// Convert int color to RGB
final float red = (attributes.getColor() >> 16 & 255) / 255.0F;
final float green = (attributes.getColor() >> 8 & 255) / 255.0F;
final float blue = (attributes.getColor() & 255) / 255.0F;
RenderSystem.color3f(red, green, blue);
drawTexture(matrices, xPos(), yPos(), this.getZOffset(), getWidth(), getHeight(), sprite);
} }
} }
@@ -61,7 +42,7 @@ public class FluidSlotWidget extends CustomSlotWidget {
public boolean canClick(final PlayerEntity player) { public boolean canClick(final PlayerEntity player) {
final ItemStack mouseStack = player.inventory.getCursorStack(); final ItemStack mouseStack = player.inventory.getCursorStack();
return mouseStack.isEmpty() return mouseStack.isEmpty()
|| mouseStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent(); || FluidAttributes.EXTRACTABLE.getFirstOrNull(mouseStack) != null;
} }
@Override @Override
@@ -69,10 +50,11 @@ public class FluidSlotWidget extends CustomSlotWidget {
if (clickStack.isEmpty() || mouseButton == 1) { if (clickStack.isEmpty() || mouseButton == 1) {
this.setFluidStack(null); this.setFluidStack(null);
} else if (mouseButton == 0) { } else if (mouseButton == 0) {
final LazyOptional<FluidVolume> fluidOpt = FluidUtil.getFluidContained(clickStack); FluidExtractable extractable = FluidAttributes.EXTRACTABLE.getFirstOrNull(clickStack);
fluidOpt.ifPresent(fluid -> { if (extractable != null && extractable.couldExtractAnything()) {
this.setFluidStack(AEFluidStack.fromFluidVolume(fluid)); FluidVolume volume = extractable.attemptAnyExtraction(FluidAmount.MAX_VALUE, Simulation.ACTION);
}); this.setFluidStack(AEFluidStack.fromFluidVolume(volume, RoundingMode.DOWN));
}
} }
} }
@@ -80,7 +62,7 @@ public class FluidSlotWidget extends CustomSlotWidget {
public Text getMessage() { public Text getMessage() {
final IAEFluidStack fluid = this.getFluidStack(); final IAEFluidStack fluid = this.getFluidStack();
if (fluid != null) { if (fluid != null) {
return I18n.format(fluid.getFluidStack().getTranslationKey()); return fluid.getFluidStack().getName();
} }
return null; return null;
} }
@@ -18,23 +18,18 @@
package appeng.fluids.client.gui.widgets; package appeng.fluids.client.gui.widgets;
import com.mojang.blaze3d.systems.RenderSystem; import alexiil.mc.lib.attributes.fluid.amount.FluidAmount;
import alexiil.mc.lib.attributes.fluid.volume.FluidVolume;
import net.fabricmc.api.EnvType;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.texture.SpriteAtlasTexture;
import net.minecraft.client.texture.Sprite;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.fluid.Fluid;
import net.fabricmc.api.Environment;
import net.minecraft.text.Text;
import net.minecraftforge.fluids.FluidAttributes;
import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEFluidStack;
import appeng.api.util.AEColor; import appeng.api.util.AEColor;
import appeng.client.gui.widgets.ITooltip; import appeng.client.gui.widgets.ITooltip;
import appeng.fluids.util.IAEFluidTank; import appeng.fluids.util.IAEFluidTank;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class FluidTankWidget extends AbstractButtonWidget implements ITooltip { public class FluidTankWidget extends AbstractButtonWidget implements ITooltip {
@@ -42,7 +37,7 @@ public class FluidTankWidget extends AbstractButtonWidget implements ITooltip {
private final int slot; private final int slot;
public FluidTankWidget(IAEFluidTank tank, int slot, int x, int y, int w, int h) { public FluidTankWidget(IAEFluidTank tank, int slot, int x, int y, int w, int h) {
super(x, y, w, h, ""); super(x, y, w, h, LiteralText.EMPTY);
this.tank = tank; this.tank = tank;
this.slot = slot; this.slot = slot;
} }
@@ -50,36 +45,34 @@ public class FluidTankWidget extends AbstractButtonWidget implements ITooltip {
@Override @Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) { public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) {
if (this.visible) { if (this.visible) {
RenderSystem.disableBlend(); fill(matrices, this.x, this.y, this.x + this.width, this.y + this.height, AEColor.GRAY.blackVariant | 0xFF000000);
fill(this.x, this.y, this.x + this.width, this.y + this.height, AEColor.GRAY.blackVariant | 0xFF000000);
final IAEFluidStack fluidStack = this.tank.getFluidInSlot(this.slot); final IAEFluidStack fluidStack = this.tank.getFluidInSlot(this.slot);
if (fluidStack != null && fluidStack.getStackSize() > 0) { if (fluidStack != null && fluidStack.getStackSize() > 0) {
Fluid fluid = fluidStack.getFluid();
FluidAttributes attributes = fluid.getAttributes();
float red = (attributes.getColor() >> 16 & 255) / 255.0F; FluidVolume volume = fluidStack.getFluidStack();
float green = (attributes.getColor() >> 8 & 255) / 255.0F; FluidAmount maxAmount = this.tank.getMaxAmount_F(this.slot);
float blue = (attributes.getColor() & 255) / 255.0F; double fillRatio = volume.amount().div(maxAmount).asInexactDouble();
RenderSystem.color3f(red, green, blue);
MinecraftClient mc = MinecraftClient.getInstance(); final int scaledHeight = (int) (this.height * fillRatio);
mc.getTextureManager().bindTexture(SpriteAtlasTexture.BLOCK_ATLAS_TEX);
final Sprite sprite = mc.getAtlasSpriteGetter(SpriteAtlasTexture.BLOCK_ATLAS_TEX)
.apply(attributes.getStillTexture(fluidStack.getFluidStack()));
final int scaledHeight = (int) (this.height
* ((float) fluidStack.getStackSize() / this.tank.getTankCapacity(this.slot)));
// Render the tank's content unstretched in patches of 16x16 squares,
// with a partial square for the remainder
int iconHeightRemainder = scaledHeight % 16; int iconHeightRemainder = scaledHeight % 16;
int top = this.y + this.height - iconHeightRemainder;
if (iconHeightRemainder > 0) { if (iconHeightRemainder > 0) {
drawTexture(matrices, this.x, this.y + this.height - iconHeightRemainder, getZOffset(), 16, iconHeightRemainder, int x1 = this.x;
sprite); int y1 = top;
int x2 = x1 + 16;
int y2 = y1 + iconHeightRemainder;
volume.renderGuiRect(x1, y2, x2, y2);
} }
for (int i = 0; i < scaledHeight / 16; i++) { for (int i = 0; i < scaledHeight / 16; i++) {
drawTexture(matrices, this.x, this.y + this.height - iconHeightRemainder - (i + 1) * 16, getZOffset(), 16, 16, int x1 = this.x;
sprite); int y1 = top - (i + 1) * 16;
int x2 = x1 + 16;
int y2 = y1 + 16;
volume.renderGuiRect(x1, y2, x2, y2);
} }
} }
@@ -90,10 +83,10 @@ public class FluidTankWidget extends AbstractButtonWidget implements ITooltip {
public Text getMessage() { public Text getMessage() {
final IAEFluidStack fluid = this.tank.getFluidInSlot(this.slot); final IAEFluidStack fluid = this.tank.getFluidInSlot(this.slot);
if (fluid != null && fluid.getStackSize() > 0) { if (fluid != null && fluid.getStackSize() > 0) {
String desc = fluid.getFluid().getAttributes().getName(fluid.getFluidStack()).getFormattedText(); Text desc = fluid.getFluidStack().getName();
String amountToText = fluid.getStackSize() + "mB"; String amountToText = fluid.getStackSize() + "mB";
return desc + "\n" + amountToText; return desc.copy().append("\n").append(amountToText);
} }
return null; return null;
} }
@@ -8,6 +8,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEFluidStack;
import appeng.container.slot.IOptionalSlotHost; import appeng.container.slot.IOptionalSlotHost;
import appeng.fluids.util.IAEFluidTank; import appeng.fluids.util.IAEFluidTank;
import net.minecraft.client.util.math.MatrixStack;
public class OptionalFluidSlotWidget extends FluidSlotWidget { public class OptionalFluidSlotWidget extends FluidSlotWidget {
private final IOptionalSlotHost containerBus; private final IOptionalSlotHost containerBus;
@@ -41,14 +42,17 @@ public class OptionalFluidSlotWidget extends FluidSlotWidget {
} }
@Override @Override
public void drawBackground(int guileft, int guitop, int currentZIndex) { public void drawBackground(MatrixStack matrices, int guileft, int guitop, int currentZIndex) {
RenderSystem.enableBlend(); RenderSystem.enableBlend();
if (this.isSlotEnabled()) { if (this.isSlotEnabled()) {
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
} else { } else {
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 0.4F); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 0.4F);
} }
int oldZOffset = getZOffset();
setZOffset(currentZIndex);
drawTexture(matrices, guileft + this.xPos() - 1, guitop + this.yPos() - 1, this.srcX - 1, drawTexture(matrices, guileft + this.xPos() - 1, guitop + this.yPos() - 1, this.srcX - 1,
this.srcY - 1, this.getWidth() + 2, this.getHeight() + 2, currentZIndex); this.srcY - 1, this.getWidth() + 2, this.getHeight() + 2);
setZOffset(oldZOffset);
} }
} }
@@ -0,0 +1,69 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila;
import mcp.mobius.waila.api.IComponentProvider;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import mcp.mobius.waila.api.IServerDataProvider;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import java.util.List;
/**
* Base implementation for {@link mcp.mobius.waila.api.IComponentProvider}
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public abstract class BaseWailaDataProvider implements IComponentProvider, IServerDataProvider<BlockEntity> {
@Override
public ItemStack getStack(final IDataAccessor accessor, final IPluginConfig config) {
return ItemStack.EMPTY;
}
@Override
public void appendServerData(CompoundTag compoundNBT, ServerPlayerEntity serverPlayerEntity, World world,
BlockEntity tileEntity) {
}
@Override
public void appendHead(List<Text> tooltip, IDataAccessor accessor, IPluginConfig config) {
}
@Override
public void appendBody(List<Text> tooltip, IDataAccessor accessor, IPluginConfig config) {
}
@Override
public void appendTail(List<Text> tooltip, IDataAccessor accessor, IPluginConfig config) {
}
}
@@ -0,0 +1,165 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila;
import appeng.api.parts.IPart;
import appeng.api.parts.PartItemStack;
import appeng.integration.modules.waila.part.*;
import com.google.common.collect.Lists;
import mcp.mobius.waila.Waila;
import mcp.mobius.waila.api.*;
import mcp.mobius.waila.api.impl.config.WailaConfig;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.text.LiteralText;
import net.minecraft.util.hit.HitResult;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import java.util.List;
import java.util.Optional;
/**
* Delegation provider for parts through {@link IPartWailaDataProvider}
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class PartWailaDataProvider implements IComponentProvider, IServerDataProvider<BlockEntity> {
/**
* Contains all providers
*/
private final List<IPartWailaDataProvider> providers;
/**
* Can access parts through view-hits
*/
private final PartAccessor accessor = new PartAccessor();
/**
* Traces views hit on blocks
*/
private final Tracer tracer = new Tracer();
/**
* Initializes the provider list with all wanted providers
*/
public PartWailaDataProvider() {
final IPartWailaDataProvider channel = new ChannelWailaDataProvider();
final IPartWailaDataProvider storageMonitor = new StorageMonitorWailaDataProvider();
final IPartWailaDataProvider powerState = new PowerStateWailaDataProvider();
final IPartWailaDataProvider p2pState = new P2PStateWailaDataProvider();
final IPartWailaDataProvider partStack = new PartStackWailaDataProvider();
this.providers = Lists.newArrayList(channel, storageMonitor, powerState, partStack, p2pState);
}
@Override
public ItemStack getStack(final IDataAccessor accessor, final IPluginConfig config) {
final BlockEntity te = accessor.getBlockEntity();
final HitResult mop = accessor.getHitResult();
final Optional<IPart> maybePart = this.accessor.getMaybePart(te, mop);
if (maybePart.isPresent()) {
final IPart part = maybePart.get();
ItemStack wailaStack = ItemStack.EMPTY;
for (final IPartWailaDataProvider provider : this.providers) {
wailaStack = provider.getStack(part, config, wailaStack);
}
return wailaStack;
}
return ItemStack.EMPTY;
}
@Override
public void appendHead(List<Text> currentToolTip, final IDataAccessor accessor,
final IPluginConfig config) {
final BlockEntity te = accessor.getBlockEntity();
final HitResult mop = accessor.getHitResult();
final Optional<IPart> maybePart = this.accessor.getMaybePart(te, mop);
if (maybePart.isPresent()) {
final IPart part = maybePart.get();
currentToolTip.clear();
currentToolTip.add(part.getItemStack(PartItemStack.PICK).getName());
for (final IPartWailaDataProvider provider : this.providers) {
provider.appendHead(part, currentToolTip, accessor, config);
}
}
}
@Override
public void appendBody(List<Text> tooltip, final IDataAccessor accessor, final IPluginConfig config) {
final BlockEntity te = accessor.getBlockEntity();
final HitResult mop = accessor.getHitResult();
final Optional<IPart> maybePart = this.accessor.getMaybePart(te, mop);
if (maybePart.isPresent()) {
final IPart part = maybePart.get();
for (final IPartWailaDataProvider provider : this.providers) {
provider.appendBody(part, tooltip, accessor, config);
}
}
}
@Override
public void appendTail(List<Text> tooltip, final IDataAccessor accessor, final IPluginConfig config) {
final BlockEntity te = accessor.getBlockEntity();
final HitResult mop = accessor.getHitResult();
final Optional<IPart> maybePart = this.accessor.getMaybePart(te, mop);
if (maybePart.isPresent()) {
final IPart part = maybePart.get();
for (final IPartWailaDataProvider provider : this.providers) {
provider.appendTail(part, tooltip, accessor, config);
}
}
}
@Override
public void appendServerData(CompoundTag tag, ServerPlayerEntity player, World world, BlockEntity te) {
final HitResult mop = this.tracer.retraceBlock(world, player, te.getPos());
if (mop != null) {
final Optional<IPart> maybePart = this.accessor.getMaybePart(te, mop);
if (maybePart.isPresent()) {
final IPart part = maybePart.get();
for (final IPartWailaDataProvider provider : this.providers) {
provider.appendServerData(player, part, te, tag, world, te.getPos());
}
}
}
}
}
@@ -0,0 +1,101 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila;
import appeng.integration.modules.waila.tile.ChargerWailaDataProvider;
import appeng.integration.modules.waila.tile.CraftingMonitorWailaDataProvider;
import appeng.integration.modules.waila.tile.PowerStateWailaDataProvider;
import appeng.integration.modules.waila.tile.PowerStorageWailaDataProvider;
import com.google.common.collect.Lists;
import mcp.mobius.waila.api.IComponentProvider;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import mcp.mobius.waila.api.IServerDataProvider;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import java.util.List;
/**
* Delegation provider for tiles through
* {@link mcp.mobius.waila.api.IComponentProvider}
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class TileWailaDataProvider implements IComponentProvider, IServerDataProvider<BlockEntity> {
/**
* Contains all providers
*/
private final List<BaseWailaDataProvider> providers;
/**
* Initializes the provider list with all wanted providers
*/
public TileWailaDataProvider() {
final BaseWailaDataProvider charger = new ChargerWailaDataProvider();
final BaseWailaDataProvider energyCell = new PowerStorageWailaDataProvider();
final BaseWailaDataProvider craftingBlock = new PowerStateWailaDataProvider();
final BaseWailaDataProvider craftingMonitor = new CraftingMonitorWailaDataProvider();
this.providers = Lists.newArrayList(charger, energyCell, craftingBlock, craftingMonitor);
}
@Override
public ItemStack getStack(final IDataAccessor accessor, final IPluginConfig config) {
return ItemStack.EMPTY;
}
@Override
public void appendHead(List<Text> currentToolTip, final IDataAccessor accessor,
final IPluginConfig config) {
for (final BaseWailaDataProvider provider : this.providers) {
provider.appendHead(currentToolTip, accessor, config);
}
}
@Override
public void appendBody(List<Text> currentToolTip, final IDataAccessor accessor,
final IPluginConfig config) {
for (final BaseWailaDataProvider provider : this.providers) {
provider.appendBody(currentToolTip, accessor, config);
}
}
@Override
public void appendTail(List<Text> currentToolTip, final IDataAccessor accessor,
final IPluginConfig config) {
for (final BaseWailaDataProvider provider : this.providers) {
provider.appendTail(currentToolTip, accessor, config);
}
}
@Override
public void appendServerData(CompoundTag tag, ServerPlayerEntity player, World world, BlockEntity te) {
for (final BaseWailaDataProvider provider : this.providers) {
provider.appendServerData(tag, player, world, te);
}
}
}
@@ -0,0 +1,42 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila;
import appeng.tile.AEBaseBlockEntity;
import mcp.mobius.waila.api.*;
public class WailaModule implements IWailaPlugin {
public void register(final IRegistrar registrar) {
final PartWailaDataProvider partHost = new PartWailaDataProvider();
registrar.registerStackProvider(partHost, AEBaseBlockEntity.class);
registrar.registerComponentProvider(partHost, TooltipPosition.HEAD, AEBaseBlockEntity.class);
registrar.registerComponentProvider(partHost, TooltipPosition.BODY, AEBaseBlockEntity.class);
registrar.registerComponentProvider(partHost, TooltipPosition.TAIL, AEBaseBlockEntity.class);
registrar.registerBlockDataProvider(partHost, AEBaseBlockEntity.class);
final TileWailaDataProvider tile = new TileWailaDataProvider();
registrar.registerComponentProvider(tile, TooltipPosition.HEAD, AEBaseBlockEntity.class);
registrar.registerComponentProvider(tile, TooltipPosition.BODY, AEBaseBlockEntity.class);
registrar.registerComponentProvider(tile, TooltipPosition.TAIL, AEBaseBlockEntity.class);
registrar.registerBlockDataProvider(tile, AEBaseBlockEntity.class);
}
}
@@ -0,0 +1,67 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.api.parts.IPart;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import java.util.List;
/**
* Default implementation of
* {@link IPartWailaDataProvider}
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public abstract class BasePartWailaDataProvider implements IPartWailaDataProvider {
@Override
public ItemStack getStack(final IPart part, final IPluginConfig config, final ItemStack partStack) {
return partStack;
}
@Override
public void appendHead(final IPart part, final List<Text> tooltip, final IDataAccessor accessor,
final IPluginConfig config) {
}
@Override
public void appendBody(final IPart part, final List<Text> tooltip, final IDataAccessor accessor,
final IPluginConfig config) {
}
@Override
public void appendTail(final IPart part, final List<Text> tooltip, final IDataAccessor accessor,
final IPluginConfig config) {
}
@Override
public void appendServerData(ServerPlayerEntity player, IPart part, BlockEntity te, CompoundTag tag, World world,
BlockPos pos) {
}
}
@@ -0,0 +1,143 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.api.parts.IPart;
import appeng.core.localization.WailaText;
import appeng.parts.networking.SmartCablePart;
import appeng.parts.networking.SmartDenseCablePart;
import it.unimi.dsi.fastutil.objects.Object2ByteMap;
import it.unimi.dsi.fastutil.objects.Object2ByteOpenHashMap;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import java.util.List;
/**
* Channel-information provider for WAILA
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class ChannelWailaDataProvider extends BasePartWailaDataProvider {
/**
* Channel key used for the transferred {@link net.minecraft.nbt.CompoundTag}
*/
private static final String ID_USED_CHANNELS = "usedChannels";
/**
* Used cache for channels if the channel was not transmitted through the
* server.
* <p/>
* This is useful, when a player just started to look at a tile and thus just
* requested the new information from the server.
* <p/>
* The cache will be updated from the server.
*/
private final Object2ByteMap<IPart> cache = new Object2ByteOpenHashMap<>();
/**
* Adds the used and max channel to the tool tip
*
* @param part being looked at part
* @param tooltip current tool tip
* @param accessor wrapper for various world information
* @param config config to react to various settings
*/
@Override
public void appendBody(final IPart part, final List<Text> tooltip, final IDataAccessor accessor,
final IPluginConfig config) {
if (part instanceof SmartCablePart || part instanceof SmartDenseCablePart) {
final CompoundTag tag = accessor.getServerData();
final byte usedChannels = this.getUsedChannels(part, tag, this.cache);
if (usedChannels >= 0) {
final byte maxChannels = (byte) ((part instanceof SmartDenseCablePart) ? 32 : 8);
final Text formattedToolTip = WailaText.Channels.text(usedChannels, maxChannels);
tooltip.add(formattedToolTip);
}
}
}
/**
* Determines the source of the channel.
* <p/>
* If the client received information of the channels on the server, they are
* used, else if the cache contains a previous stored value, this will be used.
* Default value is 0.
*
* @param part part to be looked at
* @param tag tag maybe containing the channel information
* @param cache cache with previous knowledge
*
* @return used channels on the cable
*/
private byte getUsedChannels(final IPart part, final CompoundTag tag, final Object2ByteMap<IPart> cache) {
final byte usedChannels;
if (tag.contains(ID_USED_CHANNELS)) {
usedChannels = tag.getByte(ID_USED_CHANNELS);
this.cache.put(part, usedChannels);
} else if (this.cache.containsKey(part)) {
usedChannels = this.cache.get(part);
} else {
usedChannels = -1;
}
return usedChannels;
}
/**
* Called on server to transfer information from server to client.
* <p/>
* If the part is a cable, it writes the channel information in the {@code #tag}
* using the {@code ID_USED_CHANNELS} key.
*
* @param player player looking at the part
* @param part part being looked at
* @param te host of the part
* @param tag transferred tag which is send to the client
* @param world world of the part
* @param pos pos of the part
*/
@Override
public void appendServerData(ServerPlayerEntity player, IPart part, BlockEntity te, CompoundTag tag, World world,
BlockPos pos) {
if (part instanceof SmartCablePart || part instanceof SmartDenseCablePart) {
final CompoundTag tempTag = new CompoundTag();
part.writeToNBT(tempTag);
if (tempTag.contains(ID_USED_CHANNELS)) {
final byte usedChannels = tempTag.getByte(ID_USED_CHANNELS);
tag.putByte(ID_USED_CHANNELS, usedChannels);
}
}
}
}
@@ -0,0 +1,54 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.api.parts.IPart;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import java.util.List;
/**
* An abstraction layer of the
* {@link IPartWailaDataProvider} for
* {@link IPart}.
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public interface IPartWailaDataProvider {
ItemStack getStack(IPart part, IPluginConfig config, ItemStack partStack);
void appendHead(IPart part, List<Text> tooltip, IDataAccessor accessor, IPluginConfig config);
void appendBody(IPart part, List<Text> tooltip, IDataAccessor accessor, IPluginConfig config);
void appendTail(IPart part, List<Text> tooltip, IDataAccessor accessor, IPluginConfig config);
void appendServerData(ServerPlayerEntity player, IPart part, BlockEntity te, CompoundTag tag, World world,
BlockPos pos);
}
@@ -0,0 +1,142 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.api.parts.IPart;
import appeng.core.localization.WailaText;
import appeng.me.GridAccessException;
import appeng.parts.p2p.P2PTunnelPart;
import appeng.util.Platform;
import com.google.common.collect.Iterators;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.math.BlockPos;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import java.util.List;
/**
* Provides information about a P2P tunnel to WAILA.
*/
public final class P2PStateWailaDataProvider extends BasePartWailaDataProvider {
private static final int STATE_UNLINKED = 0;
private static final int STATE_OUTPUT = 1;
private static final int STATE_INPUT = 2;
public static final String TAG_P2P_STATE = "p2p_state";
public static final String TAG_P2P_FREQUENCY = "p2p_frequency";
/**
* Adds state to the tooltip
*
* @param part part with state
* @param tooltip to be added to tooltip
* @param accessor wrapper for various information
* @param config config settings
*/
@Override
public void appendBody(final IPart part, final List<Text> tooltip, final IDataAccessor accessor,
final IPluginConfig config) {
if (part instanceof P2PTunnelPart) {
CompoundTag nbtData = accessor.getServerData();
if (nbtData.contains(TAG_P2P_STATE)) {
int[] stateArr = nbtData.getIntArray(TAG_P2P_STATE);
if (stateArr.length == 2) {
int state = stateArr[0];
int outputs = stateArr[1];
switch (state) {
case STATE_UNLINKED:
tooltip.add(WailaText.P2PUnlinked.text());
break;
case STATE_OUTPUT:
tooltip.add(WailaText.P2POutput.text());
break;
case STATE_INPUT:
tooltip.add(getOutputText(outputs));
break;
}
}
final short freq = nbtData.getShort(TAG_P2P_FREQUENCY);
final String freqTooltip = Platform.p2p().toHexString(freq);
tooltip.add(new TranslatableText("gui.tooltips.appliedenergistics2.P2PFrequency", freqTooltip));
}
}
}
@Override
public void appendServerData(ServerPlayerEntity player, IPart part, BlockEntity te, CompoundTag tag, World world,
BlockPos pos) {
if (part instanceof P2PTunnelPart) {
final P2PTunnelPart<?> tunnel = (P2PTunnelPart<?>) part;
if (!tunnel.isPowered()) {
return;
}
// Frquency
final short frequency = tunnel.getFrequency();
tag.putShort(TAG_P2P_FREQUENCY, frequency);
// The default state
int state = STATE_UNLINKED;
int outputCount = 0;
if (!tunnel.isOutput()) {
outputCount = getOutputCount(tunnel);
if (outputCount > 0) {
// Only set it to INPUT if we know there are any outputs
state = STATE_INPUT;
}
} else {
P2PTunnelPart<?> input = tunnel.getInput();
if (input != null) {
state = STATE_OUTPUT;
}
}
tag.putIntArray(TAG_P2P_STATE, new int[] { state, outputCount });
}
}
private static int getOutputCount(P2PTunnelPart<?> tunnel) {
try {
return Iterators.size(tunnel.getOutputs().iterator());
} catch (GridAccessException e) {
// Well... unknown size it is!
return 0;
}
}
private static Text getOutputText(int outputs) {
if (outputs <= 1) {
return WailaText.P2PInputOneOutput.text();
} else {
return WailaText.P2PInputManyOutputs.text(outputs);
}
}
}
@@ -0,0 +1,65 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.api.parts.IPart;
import appeng.api.parts.IPartHost;
import appeng.api.parts.SelectedPart;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.Vec3d;
import java.util.Optional;
/**
* Accessor to access specific parts for WAILA
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class PartAccessor {
/**
* Hits a {@link IPartHost} with {@link BlockPos}.
* <p/>
* You can derive the looked at {@link IPart} by doing that. If a facade is
* being looked at, it is defined as being absent.
*
* @param te being looked at {@link BlockEntity}
* @param rtr type of ray-trace
*
* @return maybe the looked at {@link IPart}
*/
public Optional<IPart> getMaybePart(final BlockEntity te, final HitResult rtr) {
if (te instanceof IPartHost && rtr instanceof BlockHitResult) {
BlockPos pos = ((BlockHitResult) rtr).getBlockPos();
final Vec3d position = rtr.getPos().add(-pos.getX(), -pos.getY(), -pos.getZ());
final IPartHost host = (IPartHost) te;
final SelectedPart sp = host.selectPart(position);
if (sp.part != null) {
return Optional.of(sp.part);
}
}
return Optional.empty();
}
}
@@ -0,0 +1,41 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.api.parts.IPart;
import appeng.api.parts.PartItemStack;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.item.ItemStack;
/**
* Part ItemStack provider for WAILA
*
* @author TheJulianJES
* @version rv2
* @since rv2
*/
public class PartStackWailaDataProvider extends BasePartWailaDataProvider {
@Override
public ItemStack getStack(final IPart part, final IPluginConfig config, ItemStack partStack) {
partStack = part.getItemStack(PartItemStack.PICK);
return partStack;
}
}
@@ -0,0 +1,74 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.api.implementations.IPowerChannelState;
import appeng.api.parts.IPart;
import appeng.core.localization.WailaText;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.text.Text;
import java.util.List;
/**
* Power state provider for WAILA
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class PowerStateWailaDataProvider extends BasePartWailaDataProvider {
/**
* Adds state to the tooltip
*
* @param part part with state
* @param tooltip to be added to tooltip
* @param accessor wrapper for various information
* @param config config settings
*/
@Override
public void appendBody(final IPart part, final List<Text> tooltip, final IDataAccessor accessor,
final IPluginConfig config) {
if (part instanceof IPowerChannelState) {
final IPowerChannelState state = (IPowerChannelState) part;
tooltip.add(this.getToolTip(state.isActive(), state.isPowered()));
}
}
/**
* Gets the corresponding tool tip for different values of {@code #isActive} and
* {@code #isPowered}
*
* @param isActive if part is active
* @param isPowered if part is powered
*
* @return tooltip of the state
*/
private Text getToolTip(final boolean isActive, final boolean isPowered) {
if (isActive && isPowered) {
return WailaText.DeviceOnline.text();
} else if (isPowered) {
return WailaText.DeviceMissingChannel.text();
} else {
return WailaText.DeviceOffline.text();
}
}
}
@@ -0,0 +1,73 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.api.implementations.parts.IStorageMonitorPart;
import appeng.api.parts.IPart;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IAEStack;
import appeng.core.localization.WailaText;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.text.Text;
import java.util.List;
/**
* Storage monitor provider for WAILA
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class StorageMonitorWailaDataProvider extends BasePartWailaDataProvider {
/**
* Displays the stack if present and if the monitor is locked. Can handle fluids
* and items.
*
* @param part maybe storage monitor
* @param tooltip to be written to tooltip
* @param accessor information wrapper
* @param config config option
*/
@Override
public void appendBody(final IPart part, final List<Text> tooltip, final IDataAccessor accessor,
final IPluginConfig config) {
if (part instanceof IStorageMonitorPart) {
final IStorageMonitorPart monitor = (IStorageMonitorPart) part;
final IAEStack<?> displayed = monitor.getDisplayed();
final boolean isLocked = monitor.isLocked();
// TODO: generalize
if (displayed instanceof IAEItemStack) {
final IAEItemStack ais = (IAEItemStack) displayed;
tooltip.add(WailaText.Showing.text().copy().append(": ")
.append(ais.asItemStackRepresentation().getName()));
} else if (displayed instanceof IAEFluidStack) {
final IAEFluidStack ais = (IAEFluidStack) displayed;
tooltip.add(WailaText.Showing.text().copy().append(": ")
.append(ais.getFluidStack().getName()));
}
tooltip.add((isLocked) ? WailaText.Locked.text() : WailaText.Unlocked.text());
}
}
}
@@ -0,0 +1,54 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.part;
import appeng.util.LookDirection;
import appeng.util.Platform;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
/**
* Tracer for players hitting blocks
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class Tracer {
/**
* Trace view of players to blocks. Ignore all which are out of reach.
*
* @param world word of block
* @param player player viewing block
* @param pos pos of block
*
* @return trace movement. Can be null
*/
public HitResult retraceBlock(final World world, final PlayerEntity player, BlockPos pos) {
BlockState blockState = world.getBlockState(pos);
LookDirection playerRay = Platform.getPlayerRay(player);
return blockState.getCollisionShape(world, pos).rayTrace(playerRay.getA(), playerRay.getB(), pos);
}
}
@@ -0,0 +1,67 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.tile;
import alexiil.mc.lib.attributes.item.FixedItemInvView;
import appeng.core.localization.WailaText;
import appeng.integration.modules.waila.BaseWailaDataProvider;
import appeng.tile.misc.ChargerBlockEntity;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.text.Text;
import java.util.List;
/**
* Charger provider for WAILA
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class ChargerWailaDataProvider extends BaseWailaDataProvider {
@Override
public void appendBody(List<Text> tooltip, IDataAccessor accessor, IPluginConfig config) {
final BlockEntity te = accessor.getBlockEntity();
if (te instanceof ChargerBlockEntity) {
final ChargerBlockEntity charger = (ChargerBlockEntity) te;
final FixedItemInvView chargerInventory = charger.getInternalInventory();
final ItemStack chargingItem = chargerInventory.getInvStack(0);
if (!chargingItem.isEmpty()) {
final Text currentInventory = chargingItem.getName();
final PlayerEntity player = accessor.getPlayer();
tooltip.add(WailaText.Contains.text().copy().append(": ").append(currentInventory));
TooltipContext tooltipFlag = MinecraftClient.getInstance().options.advancedItemTooltips
? TooltipContext.Default.ADVANCED
: TooltipContext.Default.NORMAL;
chargingItem.getItem().appendTooltip(chargingItem, player.world, tooltip, tooltipFlag);
}
}
}
}
@@ -0,0 +1,55 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.tile;
import appeng.api.storage.data.IAEItemStack;
import appeng.core.localization.WailaText;
import appeng.integration.modules.waila.BaseWailaDataProvider;
import appeng.tile.crafting.CraftingMonitorBlockEntity;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.text.Text;
import java.util.List;
/**
* Crafting-monitor provider for WAILA
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class CraftingMonitorWailaDataProvider extends BaseWailaDataProvider {
@Override
public void appendBody(List<Text> tooltip, IDataAccessor accessor, IPluginConfig config) {
final BlockEntity te = accessor.getBlockEntity();
if (te instanceof CraftingMonitorBlockEntity) {
final CraftingMonitorBlockEntity monitor = (CraftingMonitorBlockEntity) te;
final IAEItemStack displayStack = monitor.getJobProgress();
if (displayStack != null) {
final Text currentCrafting = displayStack.asItemStackRepresentation().getName();
tooltip.add(WailaText.Crafting.text().copy().append(": ").append(currentCrafting));
}
}
}
}
@@ -0,0 +1,60 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.tile;
import appeng.api.implementations.IPowerChannelState;
import appeng.core.localization.WailaText;
import appeng.integration.modules.waila.BaseWailaDataProvider;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.text.Text;
import java.util.List;
/**
* Power state provider for WAILA
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class PowerStateWailaDataProvider extends BaseWailaDataProvider {
@Override
public void appendBody(List<Text> tooltip, IDataAccessor accessor, IPluginConfig config) {
final BlockEntity te = accessor.getBlockEntity();
if (te instanceof IPowerChannelState) {
final IPowerChannelState state = (IPowerChannelState) te;
final boolean isActive = state.isActive();
final boolean isPowered = state.isPowered();
if (isActive && isPowered) {
tooltip.add(WailaText.DeviceOnline.text());
} else if (isPowered) {
tooltip.add(WailaText.DeviceMissingChannel.text());
} else {
tooltip.add(WailaText.DeviceOffline.text());
}
}
}
}
@@ -0,0 +1,140 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.integration.modules.waila.tile;
import appeng.api.networking.energy.IAEPowerStorage;
import appeng.core.localization.WailaText;
import appeng.integration.modules.waila.BaseWailaDataProvider;
import appeng.util.Platform;
import it.unimi.dsi.fastutil.objects.Object2LongMap;
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
import mcp.mobius.waila.api.IDataAccessor;
import mcp.mobius.waila.api.IPluginConfig;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.text.Text;
import net.minecraft.world.World;
import java.util.List;
/**
* Power storage provider for WAILA
*
* @author thatsIch
* @version rv2
* @since rv2
*/
public final class PowerStorageWailaDataProvider extends BaseWailaDataProvider {
/**
* Power key used for the transferred {@link net.minecraft.nbt.CompoundTag}
*/
private static final String ID_CURRENT_POWER = "currentPower";
/**
* Used cache for power if the power was not transmitted through the server.
* <p/>
* This is useful, when a player just started to look at a tile and thus just
* requested the new information from the server.
* <p/>
* The cache will be updated from the server.
*/
private final Object2LongMap<BlockEntity> cache = new Object2LongOpenHashMap<>();
@Override
public void appendBody(List<Text> tooltip, IDataAccessor accessor, IPluginConfig config) {
// Removes RF tooltip on WAILA 1.5.9+
// FIXME ( (ITaggedList<String, String>) tooltip ).removeEntries(
// "RFEnergyStorage" );
final BlockEntity te = accessor.getBlockEntity();
if (te instanceof IAEPowerStorage) {
final IAEPowerStorage storage = (IAEPowerStorage) te;
final double maxPower = storage.getAEMaxPower();
if (maxPower > 0) {
final CompoundTag tag = accessor.getServerData();
final long internalCurrentPower = this.getInternalCurrentPower(tag, te);
if (internalCurrentPower >= 0) {
final long internalMaxPower = (long) (100 * maxPower);
final String formatCurrentPower = Platform.formatPowerLong(internalCurrentPower, false);
final String formatMaxPower = Platform.formatPowerLong(internalMaxPower, false);
tooltip.add(WailaText.Contains.text().copy()
.append(": " + formatCurrentPower + " / " + formatMaxPower));
}
}
}
}
/**
* Called on server to transfer information from server to client.
* <p/>
* If the {@link net.minecraft.block.entity.BlockEntity} is a
* {@link IAEPowerStorage}, it writes the power
* information to the {@code #tag} using the {@code #ID_CURRENT_POWER} key.
*
* @param serverPlayerEntity player looking at the power storage
* @param te power storage
* @param tag transferred tag which is send to the client
* @param world world of the power storage
*/
@Override
public void appendServerData(CompoundTag tag, ServerPlayerEntity serverPlayerEntity, World world, BlockEntity te) {
if (te instanceof IAEPowerStorage) {
final IAEPowerStorage storage = (IAEPowerStorage) te;
if (storage.getAEMaxPower() > 0) {
final long internalCurrentPower = (long) (100 * storage.getAECurrentPower());
tag.putLong(ID_CURRENT_POWER, internalCurrentPower);
}
}
}
/**
* Determines the current power.
* <p/>
* If the client received power information on the server, they are used, else
* if the cache contains a previous stored value, this will be used. Default
* value is 0.
*
* @param te te to be looked at
* @param tag tag maybe containing the channel information
*
* @return used channels on the cable
*/
private long getInternalCurrentPower(final CompoundTag tag, final BlockEntity te) {
final long internalCurrentPower;
if (tag.contains(ID_CURRENT_POWER)) {
internalCurrentPower = tag.getLong(ID_CURRENT_POWER);
this.cache.put(te, internalCurrentPower);
} else if (this.cache.containsKey(te)) {
internalCurrentPower = this.cache.get(te);
} else {
internalCurrentPower = -1;
}
return internalCurrentPower;
}
}
@@ -34,7 +34,7 @@ public class CellConfig extends AppEngInternalInventory {
} }
@Override @Override
protected void onContentsChanged(FixedItemInvView inv, int slot, ItemStack previous, ItemStack current) { protected void onContentsChanged(int slot, ItemStack previous, ItemStack current) {
this.writeToNBT(this.is.getOrCreateTag(), "list"); this.writeToNBT(this.is.getOrCreateTag(), "list");
} }
} }
@@ -33,7 +33,7 @@ public final class CellUpgrades extends StackUpgradeInventory {
} }
@Override @Override
protected void onContentsChanged(FixedItemInvView inv, int slot, ItemStack previous, ItemStack current) { protected void onContentsChanged(int slot, ItemStack previous, ItemStack current) {
this.writeToNBT(this.is.getOrCreateTag(), "upgrades"); this.writeToNBT(this.is.getOrCreateTag(), "upgrades");
} }
} }
@@ -43,7 +43,6 @@ import appeng.api.AEApi;
import appeng.api.implementations.ICraftingPatternItem; import appeng.api.implementations.ICraftingPatternItem;
import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.api.networking.crafting.ICraftingPatternDetails;
import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEItemStack;
import appeng.core.AppEng;
import appeng.core.localization.GuiText; import appeng.core.localization.GuiText;
import appeng.helpers.InvalidPatternHelper; import appeng.helpers.InvalidPatternHelper;
import appeng.helpers.PatternHelper; import appeng.helpers.PatternHelper;
@@ -104,15 +103,15 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt
return; return;
} }
stack.setCustomName(GuiText.InvalidPattern.textComponent().copy().formatted(Formatting.RED)); stack.setCustomName(GuiText.InvalidPattern.text().copy().formatted(Formatting.RED));
InvalidPatternHelper invalid = new InvalidPatternHelper(stack); InvalidPatternHelper invalid = new InvalidPatternHelper(stack);
final Text label = (invalid.isCraftable() ? GuiText.Crafts.textComponent() final Text label = (invalid.isCraftable() ? GuiText.Crafts.text()
: GuiText.Creates.textComponent()).copy().append(": "); : GuiText.Creates.text()).copy().append(": ");
final Text and = new LiteralText(" ").append(GuiText.And.textComponent()) final Text and = new LiteralText(" ").append(GuiText.And.text())
.append(" "); .append(" ");
final Text with = GuiText.With.textComponent().copy().append(": "); final Text with = GuiText.With.text().copy().append(": ");
boolean first = true; boolean first = true;
for (final InvalidPatternHelper.PatternIngredient output : invalid.getOutputs()) { for (final InvalidPatternHelper.PatternIngredient output : invalid.getOutputs()) {
@@ -127,9 +126,9 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt
} }
if (invalid.isCraftable()) { if (invalid.isCraftable()) {
final MutableText substitutionLabel = GuiText.Substitute.textComponent().copy().append(" "); final MutableText substitutionLabel = GuiText.Substitute.text().copy().append(" ");
final Text canSubstitute = invalid.canSubstitute() ? GuiText.Yes.textComponent() final Text canSubstitute = invalid.canSubstitute() ? GuiText.Yes.text()
: GuiText.No.textComponent(); : GuiText.No.text();
lines.add(substitutionLabel.append(canSubstitute)); lines.add(substitutionLabel.append(canSubstitute));
} }
@@ -147,11 +146,11 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt
final IAEItemStack[] in = details.getCondensedInputs(); final IAEItemStack[] in = details.getCondensedInputs();
final IAEItemStack[] out = details.getCondensedOutputs(); final IAEItemStack[] out = details.getCondensedOutputs();
final Text label = (isCrafting ? GuiText.Crafts.textComponent() : GuiText.Creates.textComponent()) final Text label = (isCrafting ? GuiText.Crafts.text() : GuiText.Creates.text())
.copy().append(": "); .copy().append(": ");
final Text and = new LiteralText(" ").append(GuiText.And.textComponent()) final Text and = new LiteralText(" ").append(GuiText.And.text())
.append(" "); .append(" ");
final Text with = GuiText.With.textComponent().copy().append(": "); final Text with = GuiText.With.text().copy().append(": ");
boolean first = true; boolean first = true;
for (final IAEItemStack anOut : out) { for (final IAEItemStack anOut : out) {
@@ -176,8 +175,8 @@ public class EncodedPatternItem extends AEBaseItem implements ICraftingPatternIt
} }
if (isCrafting) { if (isCrafting) {
final MutableText substitutionLabel = GuiText.Substitute.textComponent().copy().append(" "); final MutableText substitutionLabel = GuiText.Substitute.text().copy().append(" ");
final Text canSubstitute = substitute ? GuiText.Yes.textComponent() : GuiText.No.textComponent(); final Text canSubstitute = substitute ? GuiText.Yes.text() : GuiText.No.text();
lines.add(substitutionLabel.append(canSubstitute)); lines.add(substitutionLabel.append(canSubstitute));
} }
@@ -197,7 +197,7 @@ public class ColorApplicatorItem extends AEBasePoweredItem
@Override @Override
public Text getName(final ItemStack is) { public Text getName(final ItemStack is) {
Text extra = GuiText.Empty.textComponent(); Text extra = GuiText.Empty.text();
final AEColor selected = this.getActiveColor(is); final AEColor selected = this.getActiveColor(is);
@@ -67,9 +67,9 @@ public class WirelessTerminalItem extends AEBasePoweredItem implements IWireless
final String encKey = tag.getString("encryptionKey"); final String encKey = tag.getString("encryptionKey");
if (encKey == null || encKey.isEmpty()) { if (encKey == null || encKey.isEmpty()) {
lines.add(GuiText.Unlinked.textComponent()); lines.add(GuiText.Unlinked.text());
} else { } else {
lines.add(GuiText.Linked.textComponent()); lines.add(GuiText.Linked.text());
} }
} }
} else { } else {
@@ -66,7 +66,7 @@ public abstract class AEBasePoweredItem extends AEBaseItem implements IAEItemPow
final double percent = internalCurrentPower / internalMaxPower; final double percent = internalCurrentPower / internalMaxPower;
lines.add(GuiText.StoredEnergy.textComponent().copy() lines.add(GuiText.StoredEnergy.text().copy()
.append(':' + MessageFormat.format(" {0,number,#} ", internalCurrentPower)) .append(':' + MessageFormat.format(" {0,number,#} ", internalCurrentPower))
.append(new TranslatableText(PowerUnits.AE.unlocalizedName)) .append(new TranslatableText(PowerUnits.AE.unlocalizedName))
.append(" - " + MessageFormat.format(" {0,number,#.##%} ", percent))); .append(" - " + MessageFormat.format(" {0,number,#.##%} ", percent)));
@@ -19,10 +19,9 @@
package appeng.tile.inventory; package appeng.tile.inventory;
import alexiil.mc.lib.attributes.Simulation; import alexiil.mc.lib.attributes.Simulation;
import alexiil.mc.lib.attributes.item.FixedItemInvView;
import alexiil.mc.lib.attributes.item.filter.ConstantItemFilter; import alexiil.mc.lib.attributes.item.filter.ConstantItemFilter;
import alexiil.mc.lib.attributes.item.filter.ItemFilter; import alexiil.mc.lib.attributes.item.filter.ItemFilter;
import alexiil.mc.lib.attributes.item.impl.FullFixedItemInv; import alexiil.mc.lib.attributes.item.impl.DirectFixedItemInv;
import appeng.util.Platform; import appeng.util.Platform;
import appeng.util.inv.IAEAppEngInventory; import appeng.util.inv.IAEAppEngInventory;
import appeng.util.inv.InvOperation; import appeng.util.inv.InvOperation;
@@ -30,13 +29,11 @@ import appeng.util.inv.filter.IAEItemFilter;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import javax.annotation.Nonnull;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
// FIXME: the filtering is not correctly implemented and need to be reworked // FIXME: the filtering is not correctly implemented and need to be reworked
public class AppEngInternalInventory extends FullFixedItemInv implements Iterable<ItemStack> { public class AppEngInternalInventory extends DirectFixedItemInv implements Iterable<ItemStack> {
private boolean enableClientEvents = false; private boolean enableClientEvents = false;
private IAEAppEngInventory te; private IAEAppEngInventory te;
private final int[] maxStack; private final int[] maxStack;
@@ -50,8 +47,6 @@ public class AppEngInternalInventory extends FullFixedItemInv implements Iterabl
this.setFilter(filter); this.setFilter(filter);
this.maxStack = new int[size]; this.maxStack = new int[size];
Arrays.fill(this.maxStack, maxStack); Arrays.fill(this.maxStack, maxStack);
setOwnerListener(this::onContentsChanged);
} }
public AppEngInternalInventory(final IAEAppEngInventory inventory, final int size, final int maxStack) { public AppEngInternalInventory(final IAEAppEngInventory inventory, final int size, final int maxStack) {
@@ -71,7 +66,21 @@ public class AppEngInternalInventory extends FullFixedItemInv implements Iterabl
return Math.min(maxStack[slot], super.getMaxAmount(slot, stack)); return Math.min(maxStack[slot], super.getMaxAmount(slot, stack));
} }
protected void onContentsChanged(FixedItemInvView inv, int slot, ItemStack previous, ItemStack current) { @Override
public boolean setInvStack(int slot, ItemStack to, Simulation simulation) {
if (!simulation.isAction()) {
return super.setInvStack(slot, to, simulation);
}
ItemStack previous = getInvStack(slot).copy();
if (super.setInvStack(slot, to, simulation)) {
onContentsChanged(slot, previous, to);
return true;
}
return false;
}
protected void onContentsChanged(int slot, ItemStack previous, ItemStack current) {
if (this.getBlockEntity() != null && this.eventsEnabled() && !this.dirtyFlag) { if (this.getBlockEntity() != null && this.eventsEnabled() && !this.dirtyFlag) {
this.dirtyFlag = true; this.dirtyFlag = true;
ItemStack newStack = current.copy(); ItemStack newStack = current.copy();
@@ -111,11 +120,14 @@ public class AppEngInternalInventory extends FullFixedItemInv implements Iterabl
} }
if (this.filter != null) { if (this.filter != null) {
return stack -> { return stack -> {
// FIXME: This is not correct... if (stack.isEmpty()) {
if (stack == ItemStack.EMPTY) { ItemStack current = this.getInvStack(slot);
return filter.allowExtract(this, slot, this.getSlot(slot).get().getCount()); if (current.isEmpty()) {
return true; // Replacing empty with empty... okay
}
return filter.allowExtract(this, slot, current.getCount());
} else { } else {
return filter.allowExtract(this, slot, this.getSlot(slot).get().getCount()); return filter.allowInsert(this, slot, stack);
} }
}; };
} }
@@ -128,6 +140,13 @@ public class AppEngInternalInventory extends FullFixedItemInv implements Iterabl
return false; return false;
} }
if (this.filter != null) { if (this.filter != null) {
if (stack.isEmpty()) {
ItemStack current = this.getInvStack(slot);
if (current.isEmpty()) {
return true; // Replacing empty with empty... okay
}
return filter.allowExtract(this, slot, current.getCount());
}
return this.filter.allowInsert(this, slot, stack); return this.filter.allowInsert(this, slot, stack);
} }
return true; return true;
+2 -2
View File
@@ -49,6 +49,7 @@ import appeng.core.AELog;
import appeng.core.stats.AeStats; import appeng.core.stats.AeStats;
import appeng.fluids.util.AEFluidStack; import appeng.fluids.util.AEFluidStack;
import appeng.hooks.TickHandler; import appeng.hooks.TickHandler;
import appeng.integration.abstraction.JEIFacade;
import appeng.me.GridAccessException; import appeng.me.GridAccessException;
import appeng.me.GridNode; import appeng.me.GridNode;
import appeng.me.helpers.AENetworkProxy; import appeng.me.helpers.AENetworkProxy;
@@ -1141,8 +1142,7 @@ public class Platform {
public static boolean isSearchModeAvailable(SearchBoxMode mode) { public static boolean isSearchModeAvailable(SearchBoxMode mode) {
if (mode.isRequiresJei()) { if (mode.isRequiresJei()) {
throw new IllegalStateException(); return JEIFacade.instance().isEnabled();
// FIXME FABRIC return JEIFacade.instance().isEnabled();
} }
return true; return true;
} }
@@ -30,23 +30,12 @@ import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import appeng.util.Platform;
public final class AEItemStackRegistry { public final class AEItemStackRegistry {
private static final WeakHashMap<AESharedItemStack, WeakReference<AESharedItemStack>> SERVER_REGISTRY = new WeakHashMap<>(); private static final WeakHashMap<AESharedItemStack, WeakReference<AESharedItemStack>> REGISTRY = new WeakHashMap<>();
private static final WeakHashMap<AESharedItemStack, WeakReference<AESharedItemStack>> CLIENT_REGISTRY = new WeakHashMap<>();
private AEItemStackRegistry() { private AEItemStackRegistry() {
} }
private static WeakHashMap<AESharedItemStack, WeakReference<AESharedItemStack>> registry() {
if (Platform.isClient()) {
return CLIENT_REGISTRY;
} else {
return SERVER_REGISTRY;
}
}
static synchronized AESharedItemStack getRegisteredStack(final @Nonnull ItemStack itemStack) { static synchronized AESharedItemStack getRegisteredStack(final @Nonnull ItemStack itemStack) {
if (itemStack.isEmpty()) { if (itemStack.isEmpty()) {
throw new IllegalArgumentException("stack cannot be empty"); throw new IllegalArgumentException("stack cannot be empty");
@@ -56,7 +45,7 @@ public final class AEItemStackRegistry {
itemStack.setCount(1); itemStack.setCount(1);
AESharedItemStack search = new AESharedItemStack(itemStack); AESharedItemStack search = new AESharedItemStack(itemStack);
WeakReference<AESharedItemStack> weak = registry().get(search); WeakReference<AESharedItemStack> weak = REGISTRY.get(search);
AESharedItemStack ret = null; AESharedItemStack ret = null;
if (weak != null) { if (weak != null) {
@@ -65,7 +54,7 @@ public final class AEItemStackRegistry {
if (ret == null) { if (ret == null) {
ret = new AESharedItemStack(itemStack.copy()); ret = new AESharedItemStack(itemStack.copy());
registry().put(ret, new WeakReference<>(ret)); REGISTRY.put(ret, new WeakReference<>(ret));
} }
itemStack.setCount(oldStackSize); itemStack.setCount(oldStackSize);
+7 -1
View File
@@ -36,5 +36,11 @@
"suggests": { "suggests": {
"flamingo": "*" "flamingo": "*"
}, },
"accessWidener" : "appliedenergistics2.accesswidener" "accessWidener" : "appliedenergistics2.accesswidener",
"custom": {
"waila:plugins": {
"id": "appliedenergistics2:hwyla",
"initializer": "appeng.integration.modules.waila.WailaModule"
}
}
} }
@@ -47,18 +47,11 @@ import appeng.server.ServerHelper;
import appeng.util.Platform; import appeng.util.Platform;
public class ClientHelper extends ServerHelper { public class ClientHelper extends ServerHelper {
private final static String KEY_CATEGORY = "key.appliedenergistics2.category";
public void clientInit() { public void clientInit() {
MinecraftForge.EVENT_BUS.addListener(this::postPlayerRender); MinecraftForge.EVENT_BUS.addListener(this::postPlayerRender);
MinecraftForge.EVENT_BUS.addListener(this::wheelEvent); MinecraftForge.EVENT_BUS.addListener(this::wheelEvent);
for (ActionKey key : ActionKey.values()) {
final KeyBinding binding = new KeyBinding(key.getTranslationKey(), key.getDefaultKey(), KEY_CATEGORY);
ClientRegistry.registerKeyBinding(binding);
this.bindings.put(key, binding);
}
} }
@Override @Override
@@ -22,19 +22,11 @@ import appeng.bootstrap.ModelsReloadCallback;
import appeng.client.render.model.*; import appeng.client.render.model.*;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.advancement.criterion.Criteria;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.entity.*; import net.minecraft.block.entity.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.ScreenManager; import net.minecraft.client.gui.ScreenManager;
import net.minecraft.client.particle.ParticleManager;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.particle.ParticleType;
import net.minecraft.recipe.RecipeSerializer;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.GenerationStep;
@@ -57,41 +49,9 @@ import appeng.api.features.IRegistryContainer;
import appeng.api.features.IWirelessTermHandler; import appeng.api.features.IWirelessTermHandler;
import appeng.api.features.IWorldGen; import appeng.api.features.IWorldGen;
import appeng.api.movable.IMovableRegistry; import appeng.api.movable.IMovableRegistry;
import appeng.api.networking.IGridCacheRegistry;
import appeng.api.networking.crafting.ICraftingGrid;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.pathing.IPathingGrid;
import appeng.api.networking.security.ISecurityGrid;
import appeng.api.networking.spatial.ISpatialCache;
import appeng.api.networking.storage.IStorageGrid;
import appeng.api.networking.ticking.ITickManager;
import appeng.bootstrap.components.*;
import appeng.client.gui.implementations.*;
import appeng.client.render.effects.*;
import appeng.client.render.tesr.InscriberTESR;
import appeng.client.render.tesr.SkyChestTESR;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerOpener;
import appeng.container.implementations.*;
import appeng.core.features.registries.P2PTunnelRegistry; import appeng.core.features.registries.P2PTunnelRegistry;
import appeng.core.features.registries.PartModels;
import appeng.core.features.registries.cell.BasicCellHandler;
import appeng.core.features.registries.cell.BasicItemCellGuiHandler;
import appeng.core.features.registries.cell.CreativeCellHandler;
import appeng.core.localization.GuiText; import appeng.core.localization.GuiText;
import appeng.core.stats.AdvancementTriggers; import appeng.core.stats.AdvancementTriggers;
import appeng.core.stats.AeStats;
import appeng.fluids.client.gui.*;
import appeng.fluids.container.*;
import appeng.fluids.registries.BasicFluidCellGuiHandler;
import appeng.items.parts.FacadeItem;
import appeng.me.cache.*;
import appeng.recipes.game.DisassembleRecipe;
import appeng.recipes.game.FacadeRecipe;
import appeng.recipes.handlers.GrinderRecipe;
import appeng.recipes.handlers.GrinderRecipeSerializer;
import appeng.recipes.handlers.InscriberRecipe;
import appeng.recipes.handlers.InscriberRecipeSerializer;
import appeng.server.AECommand; import appeng.server.AECommand;
import appeng.spatial.StorageCellBiome; import appeng.spatial.StorageCellBiome;
import appeng.spatial.StorageCellModDimension; import appeng.spatial.StorageCellModDimension;
@@ -140,9 +100,9 @@ final class Registration {
// Block and part interface have different translation keys, but support the // Block and part interface have different translation keys, but support the
// same upgrades // same upgrades
Text interfaceGroup = parts.iface().asItem().getName(); Text interfaceGroup = parts.iface().asItem().getName();
Text itemIoBusGroup = GuiText.IOBuses.textComponent(); Text itemIoBusGroup = GuiText.IOBuses.text();
Text fluidIoBusGroup = GuiText.IOBusesFluids.textComponent(); Text fluidIoBusGroup = GuiText.IOBusesFluids.text();
Text storageCellGroup = GuiText.IOBusesFluids.textComponent(); Text storageCellGroup = GuiText.IOBusesFluids.text();
// default settings.. // default settings..
((P2PTunnelRegistry) registries.p2pTunnel()).configure(); ((P2PTunnelRegistry) registries.p2pTunnel()).configure();
@@ -26,7 +26,7 @@ import appeng.integration.abstraction.IJEI;
class JeiRuntimeAdapter implements IJEI { class JeiRuntimeAdapter implements IJEI {
private final IJeiRuntime runtime; private final IReiRuntime runtime;
JeiRuntimeAdapter(IJeiRuntime jeiRuntime) { JeiRuntimeAdapter(IJeiRuntime jeiRuntime) {
this.runtime = jeiRuntime; this.runtime = jeiRuntime;
@@ -60,8 +60,8 @@ public class SpatialStorageCellItem extends AEBaseItem implements ISpatialStorag
final TooltipContext advancedTooltips) { final TooltipContext advancedTooltips) {
final DimensionType dimType = this.getStoredDimension(stack); final DimensionType dimType = this.getStoredDimension(stack);
if (dimType == null) { if (dimType == null) {
lines.add(GuiText.Unformatted.textComponent().formatted(Formatting.ITALIC)); lines.add(GuiText.Unformatted.text().formatted(Formatting.ITALIC));
lines.add(GuiText.SpatialCapacity.textComponent(maxRegion, maxRegion, maxRegion)); lines.add(GuiText.SpatialCapacity.text(maxRegion, maxRegion, maxRegion));
} else { } else {
SpatialDimensionManager.INSTANCE.addCellDimensionTooltip(dimType, lines); SpatialDimensionManager.INSTANCE.addCellDimensionTooltip(dimType, lines);
} }
@@ -139,7 +139,7 @@ public final class SpatialDimensionManager implements ISpatialDimension {
// Add the actual stored size // Add the actual stored size
BlockPos size = SpatialDimensionManager.INSTANCE.getCellDimensionSize(cellDim); BlockPos size = SpatialDimensionManager.INSTANCE.getCellDimensionSize(cellDim);
lines.add(GuiText.StoredSize.textComponent(size.getX(), size.getY(), size.getZ())); lines.add(GuiText.StoredSize.text(size.getX(), size.getY(), size.getZ()));
// Add a serial number to allows players to keep different cells apart // Add a serial number to allows players to keep different cells apart
int dimId; int dimId;
@@ -152,7 +152,7 @@ public final class SpatialDimensionManager implements ISpatialDimension {
// Try to make this a little more flavorful. // Try to make this a little more flavorful.
String serialNumber = String.format(Locale.ROOT, "SP-%04d", dimId); String serialNumber = String.format(Locale.ROOT, "SP-%04d", dimId);
lines.add(GuiText.SerialNumber.textComponent(serialNumber)); lines.add(GuiText.SerialNumber.text(serialNumber));
} }
@Nullable @Nullable