Fixes transparency of tab button icons.

Fixes priority sub-gui returning to ME-chest-interface rather than storage-cell interface for ME chests.
This commit is contained in:
Sebastian Hartte
2020-06-14 19:26:52 +02:00
parent 42651ed087
commit 8e8cbca57b
6 changed files with 48 additions and 51 deletions
@@ -90,16 +90,13 @@ public class BlockChest extends AEBaseTileBlock<TileChest>
return ActionResultType.SUCCESS; return ActionResultType.SUCCESS;
} }
if( hit.getFace() != tg.getUp() ) if (hit.getFace() == tg.getUp()) {
{
ContainerOpener.openContainer(ContainerChest.TYPE, p, ContainerLocator.forTileEntitySide(tg, hit.getFace()));
}
else
{
if( !tg.openGui( p ) ) if( !tg.openGui( p ) )
{ {
p.sendMessage( PlayerMessages.ChestCannotReadStorageCell.get() ); p.sendMessage( PlayerMessages.ChestCannotReadStorageCell.get() );
} }
} else {
ContainerOpener.openContainer(ContainerChest.TYPE, p, ContainerLocator.forTileEntitySide(tg, hit.getFace()));
} }
return ActionResultType.SUCCESS; return ActionResultType.SUCCESS;
@@ -5,10 +5,7 @@ import appeng.api.definitions.IDefinitions;
import appeng.api.definitions.IParts; import appeng.api.definitions.IParts;
import appeng.client.gui.AEBaseGui; import appeng.client.gui.AEBaseGui;
import appeng.client.gui.widgets.GuiTabButton; import appeng.client.gui.widgets.GuiTabButton;
import appeng.container.implementations.ContainerCraftingTerm; import appeng.container.implementations.*;
import appeng.container.implementations.ContainerMEMonitorable;
import appeng.container.implementations.ContainerPatternTerm;
import appeng.container.implementations.ContainerWirelessTerm;
import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketSwitchGuis; import appeng.core.sync.packets.PacketSwitchGuis;
import appeng.helpers.IPriorityHost; import appeng.helpers.IPriorityHost;
@@ -16,6 +13,7 @@ import appeng.helpers.WirelessTerminalGuiObject;
import appeng.parts.reporting.PartCraftingTerminal; import appeng.parts.reporting.PartCraftingTerminal;
import appeng.parts.reporting.PartPatternTerminal; import appeng.parts.reporting.PartPatternTerminal;
import appeng.parts.reporting.PartTerminal; import appeng.parts.reporting.PartTerminal;
import appeng.tile.storage.TileChest;
import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.ContainerType;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -24,13 +22,13 @@ import javax.annotation.Nullable;
import java.util.function.Consumer; import java.util.function.Consumer;
/** /**
* Utility class for showing a sub-screen for the current container that allows returning to the current UI. * Utility class for sub-screens of other containers that allow returning to the primary container UI.
*/ */
final class AESubGui { final class AESubGui {
private final AEBaseGui<?> gui; private final AEBaseGui<?> gui;
private final ContainerType<?> originalGui; private final ContainerType<?> previousContainerType;
private final ItemStack originalGuiIcon; private final ItemStack previousContainerIcon;
/** /**
* Based on the container we're opening for, try to determine what it's "primary" GUI would be * Based on the container we're opening for, try to determine what it's "primary" GUI would be
@@ -42,39 +40,47 @@ final class AESubGui {
final IDefinitions definitions = AEApi.instance().definitions(); final IDefinitions definitions = AEApi.instance().definitions();
final IParts parts = definitions.parts(); final IParts parts = definitions.parts();
if (containerTarget instanceof IPriorityHost) { if (containerTarget instanceof TileChest) {
// A chest is also a priority host, but the priority _interface_ can only be opened from the
// chest ui that doesn't actually show the contents of the inserted cell.
IPriorityHost priorityHost = (IPriorityHost) containerTarget; IPriorityHost priorityHost = (IPriorityHost) containerTarget;
this.originalGuiIcon = priorityHost.getItemStackRepresentation(); this.previousContainerIcon = priorityHost.getItemStackRepresentation();
this.originalGui = priorityHost.getContainerType(); this.previousContainerType = ContainerChest.TYPE;
}
else if (containerTarget instanceof IPriorityHost) {
IPriorityHost priorityHost = (IPriorityHost) containerTarget;
this.previousContainerIcon = priorityHost.getItemStackRepresentation();
this.previousContainerType = priorityHost.getContainerType();
} }
else if( containerTarget instanceof WirelessTerminalGuiObject) else if( containerTarget instanceof WirelessTerminalGuiObject)
{ {
this.originalGuiIcon = definitions.items().wirelessTerminal().maybeStack( 1 ).orElse( ItemStack.EMPTY ); this.previousContainerIcon = definitions.items().wirelessTerminal().maybeStack( 1 ).orElse( ItemStack.EMPTY );
this.originalGui = ContainerWirelessTerm.TYPE; this.previousContainerType = ContainerWirelessTerm.TYPE;
} }
else if( containerTarget instanceof PartTerminal) else if( containerTarget instanceof PartTerminal)
{ {
this.originalGuiIcon = parts.terminal().maybeStack( 1 ).orElse( ItemStack.EMPTY ); this.previousContainerIcon = parts.terminal().maybeStack( 1 ).orElse( ItemStack.EMPTY );
this.originalGui = ContainerMEMonitorable.TYPE; this.previousContainerType = ContainerMEMonitorable.TYPE;
} }
else if( containerTarget instanceof PartCraftingTerminal) else if( containerTarget instanceof PartCraftingTerminal)
{ {
this.originalGuiIcon = parts.craftingTerminal().maybeStack( 1 ).orElse( ItemStack.EMPTY ); this.previousContainerIcon = parts.craftingTerminal().maybeStack( 1 ).orElse( ItemStack.EMPTY );
this.originalGui = ContainerCraftingTerm.TYPE; this.previousContainerType = ContainerCraftingTerm.TYPE;
} }
else if( containerTarget instanceof PartPatternTerminal) else if( containerTarget instanceof PartPatternTerminal)
{ {
this.originalGuiIcon = parts.patternTerminal().maybeStack( 1 ).orElse( ItemStack.EMPTY ); this.previousContainerIcon = parts.patternTerminal().maybeStack( 1 ).orElse( ItemStack.EMPTY );
this.originalGui = ContainerPatternTerm.TYPE; this.previousContainerType = ContainerPatternTerm.TYPE;
} }
else { else {
this.originalGuiIcon = null; this.previousContainerIcon = null;
this.originalGui = null; this.previousContainerType = null;
} }
} }
@@ -83,13 +89,13 @@ final class AESubGui {
} }
public final GuiTabButton addBackButton(Consumer<GuiTabButton> buttonAdder, int x, int y, @Nullable String label) { public final GuiTabButton addBackButton(Consumer<GuiTabButton> buttonAdder, int x, int y, @Nullable String label) {
if( this.originalGui != null && !originalGuiIcon.isEmpty() ) if( this.previousContainerType != null && !previousContainerIcon.isEmpty() )
{ {
if (label == null) { if (label == null) {
label = originalGuiIcon.getDisplayName().getString(); label = previousContainerIcon.getDisplayName().getString();
} }
ItemRenderer itemRenderer = gui.getMinecraft().getItemRenderer(); ItemRenderer itemRenderer = gui.getMinecraft().getItemRenderer();
GuiTabButton button = new GuiTabButton( gui.getGuiLeft() + x, gui.getGuiTop() + y, originalGuiIcon, label, itemRenderer, btn -> goBack() ); GuiTabButton button = new GuiTabButton( gui.getGuiLeft() + x, gui.getGuiTop() + y, previousContainerIcon, label, itemRenderer, btn -> goBack() );
buttonAdder.accept(button); buttonAdder.accept(button);
return button; return button;
} }
@@ -97,7 +103,7 @@ final class AESubGui {
} }
public final void goBack() { public final void goBack() {
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( this.originalGui ) ); NetworkHandler.instance().sendToServer(new PacketSwitchGuis(this.previousContainerType));
} }
} }
@@ -37,27 +37,21 @@ import net.minecraftforge.fml.client.gui.GuiUtils;
public class GuiChest extends AEBaseGui<ContainerChest> public class GuiChest extends AEBaseGui<ContainerChest>
{ {
private GuiTabButton priority;
public GuiChest(ContainerChest container, PlayerInventory playerInventory, ITextComponent title) { public GuiChest(ContainerChest container, PlayerInventory playerInventory, ITextComponent title) {
super(container, playerInventory, title); super(container, playerInventory, title);
this.ySize = 166; this.ySize = 166;
} }
protected void actionPerformed( final Button button )
{
if( button == this.priority )
{
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( ContainerPriority.TYPE ) );
}
}
@Override @Override
public void init() public void init()
{ {
super.init(); super.init();
this.addButton( this.priority = new GuiTabButton( this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, this::actionPerformed ) ); this.addButton( new GuiTabButton( this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriority() ) );
}
private void openPriority() {
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( ContainerPriority.TYPE ) );
} }
@Override @Override
@@ -23,7 +23,6 @@ import appeng.client.gui.AEBaseGui;
import appeng.client.gui.widgets.GuiNumberBox; import appeng.client.gui.widgets.GuiNumberBox;
import appeng.container.implementations.ContainerPriority; import appeng.container.implementations.ContainerPriority;
import appeng.core.AEConfig; import appeng.core.AEConfig;
import appeng.core.AELog;
import appeng.core.localization.GuiText; import appeng.core.localization.GuiText;
import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketValueConfig; import appeng.core.sync.packets.PacketValueConfig;
@@ -31,9 +30,6 @@ import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.client.util.InputMappings; import net.minecraft.client.util.InputMappings;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.fml.client.gui.GuiUtils;
import java.io.IOException;
public class GuiPriority extends AEBaseGui<ContainerPriority> public class GuiPriority extends AEBaseGui<ContainerPriority>
@@ -88,8 +84,8 @@ public class GuiPriority extends AEBaseGui<ContainerPriority>
@Override @Override
public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks) public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, float partialTicks)
{ {
this.bindTexture( "guis/priority.png" ); this.bindTexture( getBackground() );
GuiUtils.drawTexturedModalRect( offsetX, offsetY, 0, 0, this.xSize, this.ySize, getBlitOffset() ); blit( offsetX, offsetY, 0, 0, this.xSize, this.ySize );
this.priority.render(mouseX, mouseY, partialTicks); this.priority.render(mouseX, mouseY, partialTicks);
} }
@@ -82,7 +82,7 @@ public abstract class GuiIconButton extends Button implements ITooltip
RenderSystem.color4f( 0.5f, 0.5f, 0.5f, 1.0f ); RenderSystem.color4f( 0.5f, 0.5f, 0.5f, 1.0f );
} }
final int uv_y = (int) Math.floor( iconIndex / 16.0f ); final int uv_y = iconIndex / 16;
final int uv_x = iconIndex - uv_y * 16; final int uv_x = iconIndex - uv_y * 16;
GuiUtils.drawTexturedModalRect( 0, 0, 256 - 16, 256 - 16, 16, 16, 0 ); GuiUtils.drawTexturedModalRect( 0, 0, 256 - 16, 256 - 16, 16, 16, 0 );
@@ -73,20 +73,24 @@ public class GuiTabButton extends Button implements ITooltip
RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f ); RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f );
minecraft.textureManager.bindTexture(TEXTURE_STATES); minecraft.textureManager.bindTexture(TEXTURE_STATES);
RenderSystem.enableAlphaTest();
int uv_x = ( this.hideEdge > 0 ? 11 : 13 ); int uv_x = ( this.hideEdge > 0 ? 11 : 13 );
final int offsetX = this.hideEdge > 0 ? 1 : 0; final int offsetX = this.hideEdge > 0 ? 1 : 0;
GuiUtils.drawTexturedModalRect( this.x, this.y, uv_x * 16, 0, 25, 22, 0 ); blit( this.x, this.y, uv_x * 16, 0, 25, 22 );
if( this.myIcon >= 0 ) if( this.myIcon >= 0 )
{ {
final int uv_y = (int) Math.floor( this.myIcon / 16 ); final int uv_y = this.myIcon / 16;
uv_x = this.myIcon - uv_y * 16; uv_x = this.myIcon - uv_y * 16;
GuiUtils.drawTexturedModalRect( offsetX + this.x + 3, this.y + 3, uv_x * 16, uv_y * 16, 16, 16, 0 ); blit( offsetX + this.x + 3, this.y + 3, uv_x * 16, uv_y * 16, 16, 16 );
} }
RenderSystem.disableAlphaTest();
if( this.myItem != null ) if( this.myItem != null )
{ {
this.itemRenderer.zLevel = 100.0F; this.itemRenderer.zLevel = 100.0F;