From 85f15e7c060caad5ba7895729f0da639c864967c Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Tue, 22 Apr 2014 20:36:26 -0500 Subject: [PATCH] Pattern Renderer ( for shift ) --- .../items/ItemEncodedPatternRenderer.java | 80 +++++++++++++++++++ items/misc/ItemEncodedPattern.java | 4 + 2 files changed, 84 insertions(+) create mode 100644 client/render/items/ItemEncodedPatternRenderer.java diff --git a/client/render/items/ItemEncodedPatternRenderer.java b/client/render/items/ItemEncodedPatternRenderer.java new file mode 100644 index 00000000..96dc3fc5 --- /dev/null +++ b/client/render/items/ItemEncodedPatternRenderer.java @@ -0,0 +1,80 @@ +package appeng.client.render.items; + +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.client.IItemRenderer; + +import org.lwjgl.input.Keyboard; + +import appeng.util.Platform; + +public class ItemEncodedPatternRenderer implements IItemRenderer +{ + + RenderItem ri = new RenderItem(); + boolean resursive; + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) + { + boolean isShiftHeld = Keyboard.isKeyDown( Keyboard.KEY_LSHIFT ) || Keyboard.isKeyDown( Keyboard.KEY_RSHIFT ); + + if ( resursive == false && type == IItemRenderer.ItemRenderType.INVENTORY && isShiftHeld ) + { + if ( readOutput( item ) != null ) + return true; + } + + return false; + } + + private ItemStack readOutput(ItemStack item) + { + NBTTagCompound encodedValue = item.getTagCompound(); + + if ( encodedValue == null ) + return null; + + NBTTagList outTag = encodedValue.getTagList( "out", 10 ); + + if ( outTag.tagCount() == 0 ) + return null; + + ItemStack out = null; + + for (int x = 0; x < outTag.tagCount(); x++) + { + ItemStack readItem = ItemStack.loadItemStackFromNBT( outTag.getCompoundTagAt( x ) ); + if ( readItem != null ) + { + if ( out == null ) + out = readItem; + else if ( out != null && Platform.isSameItemPrecise( readItem, out ) ) + out.stackSize += readItem.stackSize; + } + } + + return out; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) + { + return false; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) + { + resursive = true; + + ItemStack is = readOutput( item ); + // data is just render blocks. + + // ri.renderItemAndEffectIntoGUI( par1FontRenderer, par2TextureManager, par3ItemStack, par4, par5 ); + + resursive = false; + } +} diff --git a/items/misc/ItemEncodedPattern.java b/items/misc/ItemEncodedPattern.java index 9233aec1..db849922 100644 --- a/items/misc/ItemEncodedPattern.java +++ b/items/misc/ItemEncodedPattern.java @@ -7,8 +7,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.client.MinecraftForgeClient; import appeng.api.crafting.ICraftingPatternDetails; import appeng.api.implementations.ICraftingPatternItem; +import appeng.client.render.items.ItemEncodedPatternRenderer; import appeng.core.features.AEFeature; import appeng.core.localization.GuiText; import appeng.items.AEBaseItem; @@ -21,6 +23,8 @@ public class ItemEncodedPattern extends AEBaseItem implements ICraftingPatternIt super( ItemEncodedPattern.class ); setfeature( EnumSet.of( AEFeature.Crafting ) ); setMaxStackSize( 1 ); + if ( Platform.isClient() ) + MinecraftForgeClient.registerItemRenderer( this, new ItemEncodedPatternRenderer() ); } @Override