Fixes how several UIs draw their item slots.

This commit is contained in:
Sebastian Hartte
2016-09-30 20:21:43 +02:00
parent 928f623f7e
commit fdd75ef3a8
6 changed files with 257 additions and 192 deletions
+24 -17
View File
@@ -54,6 +54,7 @@ import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
import appeng.api.storage.data.IAEItemStack;
@@ -62,7 +63,7 @@ import appeng.client.gui.widgets.ITooltip;
import appeng.client.me.InternalSlotME;
import appeng.client.me.SlotDisconnected;
import appeng.client.me.SlotME;
import appeng.client.render.AppEngRenderItem;
import appeng.client.render.StackSizeRenderer;
import appeng.container.AEBaseContainer;
import appeng.container.slot.AppEngCraftingSlot;
import appeng.container.slot.AppEngSlot;
@@ -76,6 +77,7 @@ import appeng.container.slot.SlotOutput;
import appeng.container.slot.SlotPatternTerm;
import appeng.container.slot.SlotRestrictedInput;
import appeng.core.AELog;
import appeng.core.AppEng;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketInventoryAction;
import appeng.core.sync.packets.PacketSwapSlots;
@@ -91,7 +93,7 @@ public abstract class AEBaseGui extends GuiContainer
private final List<InternalSlotME> meSlots = new LinkedList<InternalSlotME>();
// drag y
private final Set<Slot> drag_click = new HashSet<Slot>();
private final AppEngRenderItem aeRenderItem = new AppEngRenderItem( Minecraft.getMinecraft().renderEngine, Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager(), Minecraft.getMinecraft().getItemColors() );
private final StackSizeRenderer stackSizeRenderer = new StackSizeRenderer();
private GuiScrollbar myScrollBar = null;
private boolean disableShiftClick = false;
private Stopwatch dbl_clickTimer = Stopwatch.createStarted();
@@ -215,12 +217,12 @@ public abstract class AEBaseGui extends GuiContainer
lines = Lists.newArrayList( lines ); // Make a copy
// Make the first line white
lines.set( 0, "\u00a7f" + lines.get( 0 ) );
lines.set( 0, TextFormatting.WHITE + lines.get( 0 ) );
// All lines after the first are colored gray
for( int i = 1; i < lines.size(); i++ )
{
lines.set(i, "\u00a77" + lines.get(i));
lines.set(i, TextFormatting.GRAY + lines.get(i));
}
this.drawHoveringText( lines, x, y, fontRendererObj );
@@ -699,11 +701,14 @@ public abstract class AEBaseGui extends GuiContainer
return ( (AEBaseContainer) this.inventorySlots ).getCustomName();
}
private void drawSlot( final Slot s )
/**
* This overrides the base-class method through some access transformer hackery...
*/
public void drawSlot( final Slot s )
{
if( s instanceof SlotME )
{
final RenderItem pIR = this.setItemRender( this.aeRenderItem );
try
{
this.zLevel = 100.0F;
@@ -719,15 +724,17 @@ public abstract class AEBaseGui extends GuiContainer
this.zLevel = 0.0F;
this.itemRender.zLevel = 0.0F;
this.aeRenderItem.setAeStack( ( (SlotME) s ).getAEStack() );
// Annoying but easier than trying to splice into render item
this.safeDrawSlot( new Size1Slot( s ) );
stackSizeRenderer.renderStackSize( fontRendererObj, ( (SlotME) s ).getAEStack(), s.getStack(), s.xDisplayPosition, s.yDisplayPosition );
this.safeDrawSlot( s );
}
catch( final Exception err )
{
AELog.warn( "[AppEng] AE prevented crash while drawing slot: " + err.toString() );
}
this.setItemRender( pIR );
return;
}
else
@@ -759,18 +766,18 @@ public abstract class AEBaseGui extends GuiContainer
final float par4 = uv_y * 16;
final Tessellator tessellator = Tessellator.getInstance();
final VertexBuffer VertexBuffer = tessellator.getBuffer();
final VertexBuffer vb = tessellator.getBuffer();
vb.begin( GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR );
VertexBuffer.begin( GL11.GL_QUADS, DefaultVertexFormats.ITEM );
;
final float f1 = 0.00390625F;
final float f = 0.00390625F;
final float par6 = 16;
VertexBuffer.color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).pos( par1 + 0, par2 + par6, this.zLevel ).tex( ( par3 + 0 ) * f, ( par4 + par6 ) * f1 ).endVertex();
vb.pos( par1 + 0, par2 + par6, this.zLevel ).tex( ( par3 + 0 ) * f, ( par4 + par6 ) * f1 ).color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).endVertex();
final float par5 = 16;
VertexBuffer.color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).pos( par1 + par5, par2 + par6, this.zLevel ).tex( ( par3 + par5 ) * f, ( par4 + par6 ) * f1 ).endVertex();
VertexBuffer.color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).pos( par1 + par5, par2 + 0, this.zLevel ).tex( ( par3 + par5 ) * f, ( par4 + 0 ) * f1 ).endVertex();
VertexBuffer.color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).pos( par1 + 0, par2 + 0, this.zLevel ).tex( ( par3 + 0 ) * f, ( par4 + 0 ) * f1 ).endVertex();
vb.pos( par1 + par5, par2 + par6, this.zLevel ).tex( ( par3 + par5 ) * f, ( par4 + par6 ) * f1 ).color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).endVertex();
vb.pos( par1 + par5, par2 + 0, this.zLevel ).tex( ( par3 + par5 ) * f, ( par4 + 0 ) * f1 ).color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).endVertex();
vb.pos( par1 + 0, par2 + 0, this.zLevel ).tex( ( par3 + 0 ) * f, ( par4 + 0 ) * f1 ).color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).endVertex();
tessellator.draw();
}
catch( final Exception err )
@@ -866,7 +873,7 @@ public abstract class AEBaseGui extends GuiContainer
public void bindTexture( final String file )
{
final ResourceLocation loc = new ResourceLocation( "appliedenergistics2", "textures/" + file );
final ResourceLocation loc = new ResourceLocation( AppEng.MOD_ID, "textures/" + file );
this.mc.getTextureManager().bindTexture( loc );
}
protected GuiScrollbar getScrollBar()
@@ -26,6 +26,7 @@ import java.util.Locale;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import appeng.api.storage.data.IAEItemStack;
import appeng.client.me.SlotME;
@@ -69,7 +70,7 @@ public abstract class AEBaseMEGui extends AEBaseGui
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( myStack.getStackSize() );
final String format = String.format( local, formattedAmount );
currentToolTip.add( "\u00a77" + format );
currentToolTip.add( TextFormatting.GRAY + format );
}
if( myStack.getCountRequestable() > 0 )
@@ -78,7 +79,7 @@ public abstract class AEBaseMEGui extends AEBaseGui
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( myStack.getCountRequestable() );
final String format = String.format( local, formattedAmount );
currentToolTip.add( "\u00a77" + format );
currentToolTip.add( TextFormatting.GRAY + format );
}
}
else if( stack.stackSize > BigNumber || ( stack.stackSize > 1 && stack.isItemDamaged() ) )
@@ -87,7 +88,7 @@ public abstract class AEBaseMEGui extends AEBaseGui
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( stack.stackSize );
final String format = String.format( local, formattedAmount );
currentToolTip.add( "\u00a77" + format );
currentToolTip.add( TextFormatting.GRAY + format );
}
}
}
@@ -0,0 +1,116 @@
package appeng.client.gui;
import javax.annotation.Nullable;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* A proxy for a slot that will always return an itemstack with size 1, if there is an item in the slot.
* Used to prevent the default item count from rendering.
*/
class Size1Slot extends Slot
{
private final Slot delegate;
public Size1Slot( Slot delegate )
{
super( delegate.inventory, delegate.getSlotIndex(), delegate.xDisplayPosition, delegate.yDisplayPosition );
this.delegate = delegate;
}
@Nullable
@Override
public ItemStack getStack()
{
ItemStack orgStack = delegate.getStack();
if( orgStack != null )
{
ItemStack modifiedStack = orgStack.copy();
modifiedStack.stackSize = 1;
return modifiedStack;
}
return null;
}
@Override
public boolean getHasStack()
{
return delegate.getHasStack();
}
@Override
public boolean isHere( IInventory inv, int slotIn )
{
return delegate.isHere( inv, slotIn );
}
@Override
public int getSlotStackLimit()
{
return delegate.getSlotStackLimit();
}
@Override
public int getItemStackLimit( ItemStack stack )
{
return delegate.getItemStackLimit( stack );
}
@Override
@Nullable
@SideOnly( Side.CLIENT)
public String getSlotTexture()
{
return delegate.getSlotTexture();
}
@Override
public boolean canTakeStack( EntityPlayer playerIn )
{
return delegate.canTakeStack( playerIn );
}
@Override
@SideOnly( Side.CLIENT)
public boolean canBeHovered()
{
return delegate.canBeHovered();
}
@Override
@SideOnly( Side.CLIENT)
public ResourceLocation getBackgroundLocation()
{
return delegate.getBackgroundLocation();
}
@Override
@SideOnly( Side.CLIENT)
public TextureAtlasSprite getBackgroundSprite()
{
return delegate.getBackgroundSprite();
}
@Override
public int getSlotIndex()
{
return delegate.getSlotIndex();
}
@Override
public boolean isSameInventory( Slot other )
{
return delegate.isSameInventory( other );
}
}