From 375e1efb159c0c4e2c6157d5f6099d014b028149 Mon Sep 17 00:00:00 2001 From: fscan Date: Sat, 9 Sep 2017 12:58:22 +0200 Subject: [PATCH] We don't need the showCraftingLabel flag, as IAEStack is perfectly fine with 0 size stacks. (#3071) Adjust rendering code to use ItemStack with size 1 where required. --- .../appeng/api/storage/data/IAEStack.java | 11 --------- .../java/appeng/client/gui/AEBaseGui.java | 5 ++-- .../gui/implementations/GuiCraftConfirm.java | 3 ++- .../gui/implementations/GuiCraftingCPU.java | 3 ++- src/main/java/appeng/client/me/ItemRepo.java | 10 ++++---- .../client/render/StackSizeRenderer.java | 12 ++++------ .../client/render/effects/AssemblerFX.java | 5 +++- .../appeng/container/AEBaseContainer.java | 9 ++++---- .../sync/packets/PacketInventoryAction.java | 2 +- src/main/java/appeng/util/ItemSorters.java | 4 ++-- .../java/appeng/util/item/AEFluidStack.java | 3 --- .../java/appeng/util/item/AEItemStack.java | 23 ++++++++----------- src/main/java/appeng/util/item/AEStack.java | 15 ------------ 13 files changed, 38 insertions(+), 67 deletions(-) diff --git a/src/api/java/appeng/api/storage/data/IAEStack.java b/src/api/java/appeng/api/storage/data/IAEStack.java index 2e1ca2a7c..adc877cf3 100644 --- a/src/api/java/appeng/api/storage/data/IAEStack.java +++ b/src/api/java/appeng/api/storage/data/IAEStack.java @@ -203,15 +203,4 @@ public interface IAEStack * @return ITEM or FLUID */ StorageChannel getChannel(); - - /** - * @return true if it should show the crafting label. - */ - boolean getShowCraftingLabel(); - - /** - * Used internally to show that it should show a Crafting label instead of a "1" - */ - void setShowCraftingLabel( boolean showCraftingLabel ); - } diff --git a/src/main/java/appeng/client/gui/AEBaseGui.java b/src/main/java/appeng/client/gui/AEBaseGui.java index e6e21c221..e40ad73b8 100644 --- a/src/main/java/appeng/client/gui/AEBaseGui.java +++ b/src/main/java/appeng/client/gui/AEBaseGui.java @@ -455,7 +455,8 @@ public abstract class AEBaseGui extends GuiContainer action = ( mouseButton == 1 ) ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN; stack = ( (SlotME) slot ).getAEStack(); - if( stack != null && action == InventoryAction.PICKUP_OR_SET_DOWN && stack.getShowCraftingLabel() && player.inventory.getItemStack().isEmpty() ) + if( stack != null && action == InventoryAction.PICKUP_OR_SET_DOWN && stack.getStackSize() == 0 && player.inventory.getItemStack() + .isEmpty() ) { action = InventoryAction.AUTO_CRAFT; } @@ -715,7 +716,7 @@ public abstract class AEBaseGui extends GuiContainer // Annoying but easier than trying to splice into render item super.drawSlot( new Size1Slot( (SlotME) s ) ); - this.stackSizeRenderer.renderStackSize( this.fontRenderer, ( (SlotME) s ).getAEStack(), s.getStack(), s.xPos, s.yPos ); + this.stackSizeRenderer.renderStackSize( this.fontRenderer, ( (SlotME) s ).getAEStack(), s.xPos, s.yPos ); } catch( final Exception err ) diff --git a/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java b/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java index a1ee1f500..0582b9a79 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java @@ -352,7 +352,8 @@ public class GuiCraftConfirm extends AEBaseGui final int posX = x * ( 1 + sectionLength ) + xo + sectionLength - 19; final int posY = y * offY + yo; - final ItemStack is = refStack.copy().getItemStack(); + final ItemStack is = refStack.getItemStack(); + is.setCount( 1 ); if( this.tooltip == z - viewStart ) { diff --git a/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java b/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java index fbc39136c..135e2f82f 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java @@ -309,7 +309,8 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource final int posX = x * ( 1 + SECTION_LENGTH ) + ITEMSTACK_LEFT_OFFSET + SECTION_LENGTH - 19; final int posY = y * offY + ITEMSTACK_TOP_OFFSET; - final ItemStack is = refStack.copy().getItemStack(); + final ItemStack is = refStack.getItemStack(); + is.setCount( 1 ); if( this.tooltip == z - viewStart ) { diff --git a/src/main/java/appeng/client/me/ItemRepo.java b/src/main/java/appeng/client/me/ItemRepo.java index 52e0d242e..6b0ec9761 100644 --- a/src/main/java/appeng/client/me/ItemRepo.java +++ b/src/main/java/appeng/client/me/ItemRepo.java @@ -177,12 +177,10 @@ public class ItemRepo if( viewMode == ViewItems.CRAFTABLE ) { is = is.copy(); - // is.setStackSize( 0 ) triggers isEmpty() and thus only shows empty stacks! - is.setStackSize( 1 ); - is.setShowCraftingLabel( true ); + is.setStackSize( 0 ); } - if( viewMode == ViewItems.STORED && is.getShowCraftingLabel() ) + if( viewMode == ViewItems.STORED && is.getStackSize() == 0 ) { continue; } @@ -240,7 +238,9 @@ public class ItemRepo for( final IAEItemStack is : this.view ) { - this.dsp.add( is.getItemStack() ); + final ItemStack displayStack = is.getItemStack(); + displayStack.setCount( 1 ); + this.dsp.add( displayStack ); } } diff --git a/src/main/java/appeng/client/render/StackSizeRenderer.java b/src/main/java/appeng/client/render/StackSizeRenderer.java index 9e349b730..a39994eda 100644 --- a/src/main/java/appeng/client/render/StackSizeRenderer.java +++ b/src/main/java/appeng/client/render/StackSizeRenderer.java @@ -21,7 +21,6 @@ package appeng.client.render; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.item.ItemStack; import appeng.api.storage.data.IAEItemStack; import appeng.core.AEConfig; @@ -42,9 +41,9 @@ public class StackSizeRenderer private static final ISlimReadableNumberConverter SLIM_CONVERTER = ReadableNumberConverter.INSTANCE; private static final IWideReadableNumberConverter WIDE_CONVERTER = ReadableNumberConverter.INSTANCE; - public void renderStackSize( FontRenderer fontRenderer, IAEItemStack aeStack, ItemStack is, int xPos, int yPos ) + public void renderStackSize( FontRenderer fontRenderer, IAEItemStack aeStack, int xPos, int yPos ) { - if( !is.isEmpty() ) + if( aeStack != null ) { final float scaleFactor = AEConfig.instance().useTerminalUseLargeFont() ? 0.85f : 0.5f; final float inverseScaleFactor = 1.0f / scaleFactor; @@ -53,7 +52,7 @@ public class StackSizeRenderer final boolean unicodeFlag = fontRenderer.getUnicodeFlag(); fontRenderer.setUnicodeFlag( false ); - if( aeStack.getShowCraftingLabel() ) + if( aeStack.getStackSize() == 0 && aeStack.isCraftable() ) { final String craftLabelText = AEConfig.instance().useTerminalUseLargeFont() ? GuiText.LargeFontCraft.getLocal() : GuiText.SmallFontCraft .getLocal(); @@ -71,10 +70,9 @@ public class StackSizeRenderer GlStateManager.enableBlend(); } - final long amount = aeStack != null ? aeStack.getStackSize() : is.getCount(); - if( amount != 0 && !aeStack.getShowCraftingLabel() ) + if( aeStack.getStackSize() > 0 ) { - final String stackSize = this.getToBeRenderedStackSize( amount ); + final String stackSize = this.getToBeRenderedStackSize( aeStack.getStackSize() ); GlStateManager.disableLighting(); GlStateManager.disableDepth(); diff --git a/src/main/java/appeng/client/render/effects/AssemblerFX.java b/src/main/java/appeng/client/render/effects/AssemblerFX.java index 1704e90df..47e2d01b6 100644 --- a/src/main/java/appeng/client/render/effects/AssemblerFX.java +++ b/src/main/java/appeng/client/render/effects/AssemblerFX.java @@ -22,6 +22,7 @@ package appeng.client.render.effects; import net.minecraft.client.particle.Particle; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; import appeng.api.storage.data.IAEItemStack; @@ -45,7 +46,9 @@ public class AssemblerFX extends Particle implements ICanDie this.motionY = 0; this.motionZ = 0; this.speed = speed; - this.fi = new EntityFloatingItem( this, w, x, y, z, is.getItemStack() ); + final ItemStack displayItem = is.getItemStack(); + displayItem.setCount( 1 ); + this.fi = new EntityFloatingItem( this, w, x, y, z, displayItem ); w.spawnEntity( this.fi ); this.particleMaxAge = (int) Math.ceil( Math.max( 1, 100.0f / speed ) ) + 2; } diff --git a/src/main/java/appeng/container/AEBaseContainer.java b/src/main/java/appeng/container/AEBaseContainer.java index 852aae6d0..dddea7686 100644 --- a/src/main/java/appeng/container/AEBaseContainer.java +++ b/src/main/java/appeng/container/AEBaseContainer.java @@ -225,10 +225,11 @@ public abstract class AEBaseContainer extends Container // client doesn't need to re-send, makes for lower overhead rapid packets. if( Platform.isClient() ) { - final ItemStack a = stack == null ? ItemStack.EMPTY : stack.getItemStack(); - final ItemStack b = this.clientRequestedTargetItem == null ? ItemStack.EMPTY : this.clientRequestedTargetItem.getItemStack(); - - if( Platform.itemComparisons().isSameItem( a, b ) ) + if( stack == null && this.clientRequestedTargetItem == null ) + { + return; + } + if( stack != null && stack.isSameType( this.clientRequestedTargetItem ) ) { return; } diff --git a/src/main/java/appeng/core/sync/packets/PacketInventoryAction.java b/src/main/java/appeng/core/sync/packets/PacketInventoryAction.java index 44214a8b1..51e52ec42 100644 --- a/src/main/java/appeng/core/sync/packets/PacketInventoryAction.java +++ b/src/main/java/appeng/core/sync/packets/PacketInventoryAction.java @@ -142,7 +142,7 @@ public class PacketInventoryAction extends AppEngPacket if( baseContainer.getTargetStack() != null ) { // Force to stack size 1 to fix a client-side display problem... - ItemStack displayIs = baseContainer.getTargetStack().getItemStack().copy(); + ItemStack displayIs = baseContainer.getTargetStack().getItemStack(); displayIs.setCount( 1 ); cca.getCraftingItem().putStack( displayIs ); // This is the *actual* item that matters, not the display item above diff --git a/src/main/java/appeng/util/ItemSorters.java b/src/main/java/appeng/util/ItemSorters.java index 069b417e8..b0039be74 100644 --- a/src/main/java/appeng/util/ItemSorters.java +++ b/src/main/java/appeng/util/ItemSorters.java @@ -80,9 +80,9 @@ public class ItemSorters { if( getDirection() == SortDir.ASCENDING ) { - return compareLong( o2.getStackSize() - ( o2.getShowCraftingLabel() ? 1 : 0 ), o1.getStackSize() - ( o1.getShowCraftingLabel() ? 1 : 0 ) ); + return compareLong( o2.getStackSize(), o1.getStackSize() ); } - return compareLong( o1.getStackSize() - ( o1.getShowCraftingLabel() ? 1 : 0 ), o2.getStackSize() - ( o2.getShowCraftingLabel() ? 1 : 0 ) ); + return compareLong( o1.getStackSize(), o2.getStackSize() ); } }; private static IInvTweaks api; diff --git a/src/main/java/appeng/util/item/AEFluidStack.java b/src/main/java/appeng/util/item/AEFluidStack.java index 04e1b7432..e6c38ae3b 100644 --- a/src/main/java/appeng/util/item/AEFluidStack.java +++ b/src/main/java/appeng/util/item/AEFluidStack.java @@ -60,7 +60,6 @@ public final class AEFluidStack extends AEStack implements IAEFlu // priority = is.priority; this.setCraftable( is.isCraftable() ); this.setCountRequestable( is.getCountRequestable() ); - this.setShowCraftingLabel( is.getShowCraftingLabel() ); this.myHash = is.myHash; } @@ -163,7 +162,6 @@ public final class AEFluidStack extends AEStack implements IAEFlu final AEFluidStack fluid = AEFluidStack.create( fluidStack ); // fluid.priority = (int) priority; fluid.setStackSize( stackSize ); - fluid.setShowCraftingLabel( showCraftingLabel ); fluid.setCountRequestable( countRequestable ); fluid.setCraftable( isCraftable ); return fluid; @@ -183,7 +181,6 @@ public final class AEFluidStack extends AEStack implements IAEFlu this.incStackSize( option.getStackSize() ); this.setCountRequestable( this.getCountRequestable() + option.getCountRequestable() ); this.setCraftable( this.isCraftable() || option.isCraftable() ); - this.setShowCraftingLabel( this.getShowCraftingLabel() || option.getShowCraftingLabel() ); } @Override diff --git a/src/main/java/appeng/util/item/AEItemStack.java b/src/main/java/appeng/util/item/AEItemStack.java index e010c2eb9..01ba3051e 100644 --- a/src/main/java/appeng/util/item/AEItemStack.java +++ b/src/main/java/appeng/util/item/AEItemStack.java @@ -58,7 +58,6 @@ public final class AEItemStack extends AEStack implements IAEItemS this.setStackSize( is.getStackSize() ); this.setCraftable( is.isCraftable() ); this.setCountRequestable( is.getCountRequestable() ); - this.setShowCraftingLabel( is.getShowCraftingLabel() ); } private AEItemStack( final ItemStack is ) @@ -158,7 +157,6 @@ public final class AEItemStack extends AEStack implements IAEItemS final byte countReqType = (byte) ( ( mask & 0x30 ) >> 4 ); final boolean isCraftable = ( mask & 0x40 ) > 0; final boolean hasTagCompound = ( mask & 0x80 ) > 0; - boolean showCraftingLabel = data.readBoolean(); // don't send this... final NBTTagCompound d = new NBTTagCompound(); @@ -186,11 +184,6 @@ public final class AEItemStack extends AEStack implements IAEItemS final ItemStack itemstack = new ItemStack( d ); - if( !showCraftingLabel ) - { - showCraftingLabel = stackSize == 0 && isCraftable; - } - if( itemstack.isEmpty() ) { return null; @@ -198,8 +191,7 @@ public final class AEItemStack extends AEStack implements IAEItemS final AEItemStack item = AEItemStack.create( itemstack ); // item.priority = (int) priority; - item.setStackSize( showCraftingLabel ? 1 : stackSize ); - item.setShowCraftingLabel( showCraftingLabel ); + item.setStackSize( stackSize ); item.setCountRequestable( countRequestable ); item.setCraftable( isCraftable ); return item; @@ -219,7 +211,6 @@ public final class AEItemStack extends AEStack implements IAEItemS this.incStackSize( option.getStackSize() ); this.setCountRequestable( this.getCountRequestable() + option.getCountRequestable() ); this.setCraftable( this.isCraftable() || option.isCraftable() ); - this.setShowCraftingLabel( this.getShowCraftingLabel() || option.getShowCraftingLabel() ); } @Override @@ -597,12 +588,14 @@ public final class AEItemStack extends AEStack implements IAEItemS @SideOnly( Side.CLIENT ) public List getToolTip() { - if( this.getDefinition().getTooltip() != null ) + if( this.getDefinition().getTooltip() == null ) { - return this.getDefinition().getTooltip(); + final ItemStack is = this.getItemStack(); + is.setCount( 1 ); + this.getDefinition().setTooltip( Platform.getTooltip( is ) ); } - return this.getDefinition().setTooltip( Platform.getTooltip( this.getItemStack() ) ); + return this.getDefinition().getTooltip(); } @SideOnly( Side.CLIENT ) @@ -610,7 +603,9 @@ public final class AEItemStack extends AEStack implements IAEItemS { if( this.getDefinition().getDisplayName() == null ) { - this.getDefinition().setDisplayName( Platform.getItemDisplayName( this.getItemStack() ) ); + final ItemStack is = this.getItemStack(); + is.setCount( 1 ); + this.getDefinition().setDisplayName( Platform.getItemDisplayName( is ) ); } return this.getDefinition().getDisplayName(); diff --git a/src/main/java/appeng/util/item/AEStack.java b/src/main/java/appeng/util/item/AEStack.java index ed3ab901e..ee1ba6a79 100644 --- a/src/main/java/appeng/util/item/AEStack.java +++ b/src/main/java/appeng/util/item/AEStack.java @@ -32,7 +32,6 @@ public abstract class AEStack implements IAEStack implements IAEStack implements IAEStack