coolAlias Posted October 9, 2015 Posted October 9, 2015 Its not crashing as o sead its not working meaning its not changing anything after i changed nbtDataCompund = itemStack.stackTagCompound(); to nbtDataCompund = itemStack.getTagCompound(); Well, the one that I marked in bold shouldn't even compile as it is not a method. Anyway, I bet your cooldown isn't working as you expect because in most cases, you never set it. Figuring out what is wrong in cases like this is a simple game of "print the value at different points in your code". In your #itemInteractionForEntity method, put a println in each of your if statements telling you where you are at; put another at the end of the method when you set the cooldown. Now start the game and right click on a couple entities, and see if you are ever seeing the last println - with all of those early return statements, I bet you won't see it. Quote http://i.imgur.com/NdrFdld.png[/img]
Mightydanp Posted October 9, 2015 Author Posted October 9, 2015 true i did not see it , so you said i have to set it ? i tried to set it with nbtDataCompund.setInteger("coolDown", 0); is that right ? Quote
coolAlias Posted October 9, 2015 Posted October 9, 2015 true i did not see it , so you said i have to set it ? i tried to set it with nbtDataCompund.setInteger("coolDown", 0); is that right ? Technically I suppose, but what do you expect to happen with that statement? What does that statement even say? It says: set the cooldown to ZERO. Look, this really shouldn't be that difficult - all it takes is sitting down for a second and thinking about what you want your code to do, in plain English, like this: When the player right-clicks on an entity with my item, the following should happen: 1. If the entity is a mob and the item is full, a message displays for the player 2. If the entity is a mob and the item is NOT full and NOT cooling down, the mob should immediately die, the item takes 1 point of damage, and the item goes on cooldown for X ticks Something like that, anyway. When you're done writing the work-flow, compare it to your code and see if your code is doing what you wrote. Also, ItemStacks GAIN damage, so you should be adding positive 1, not -1. Quote http://i.imgur.com/NdrFdld.png[/img]
Mightydanp Posted October 9, 2015 Author Posted October 9, 2015 the reason i'm not making it gain damage with 1 is because i want it to lose damage because the bar on the bottom of the item represents how much is left and thanks for the help i got it to work. Quote
Mightydanp Posted October 9, 2015 Author Posted October 9, 2015 ok so heres a good question for later is there a limit on how much metadata you can use ? for example can i have a item with 1000 metadatas? Quote
Mightydanp Posted October 9, 2015 Author Posted October 9, 2015 thats not what im talking about.... i asked is there a limit on how much metadata you can use ? for example can i have a item with 1000 metadatas? its a yes or no quistion >.> but you responed with It's a full short, so 0-Short.MAX_VALUE. Quote
Mightydanp Posted October 9, 2015 Author Posted October 9, 2015 Im runing into a big problem with my eclipse and java not working Quote
Mightydanp Posted October 9, 2015 Author Posted October 9, 2015 Its not java or anything my computer os litarly crashing hard core so im having to do a system restore if that dont work then a clean whip Quote
Draco18s Posted October 10, 2015 Posted October 10, 2015 Its not java or anything my computer os litarly crashing hard core so im having to do a system restore if that dont work then a clean whip You're on the wrong forum for that kind of help. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
Mightydanp Posted October 10, 2015 Author Posted October 10, 2015 na not asking for any help on that stuff just telling them what happenen Quote
EverythingGames Posted October 10, 2015 Posted October 10, 2015 Its not java or anything my computer os litarly crashing hard core so im having to do a system restore if that dont work then a clean whip If your having those problems then you do not need to be worrying about NBT xp. Quote Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]
Mightydanp Posted October 10, 2015 Author Posted October 10, 2015 No ? They just started after ? Quote
Mightydanp Posted October 10, 2015 Author Posted October 10, 2015 after i got a new hard drive reinstalled , i start crashing .. this wasn't happening before this. Caused by: java.lang.NullPointerException at com.mightydanp.eot.item.ItemMagicalStone.addInformation(ItemMagicalStone.java:90) ~[itemMagicalStone.class:?] at net.minecraft.item.ItemStack.getTooltip(ItemStack.java:641) ~[itemStack.class:?] at net.minecraft.client.gui.GuiScreen.renderToolTip(GuiScreen.java:124) ~[GuiScreen.class:?] at net.minecraft.client.gui.inventory.GuiContainerCreative.renderToolTip(GuiContainerCreative.java:769) ~[GuiContainerCreative.class:?] at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:186) ~[GuiContainer.class:?] at net.minecraft.client.renderer.InventoryEffectRenderer.drawScreen(InventoryEffectRenderer.java:44) ~[inventoryEffectRenderer.class:?] at net.minecraft.client.gui.inventory.GuiContainerCreative.drawScreen(GuiContainerCreative.java:673) ~[GuiContainerCreative.class:?] at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1137) ~[EntityRenderer.class:?] code http://pastebin.com/H74hDjeC Quote
coolAlias Posted October 10, 2015 Posted October 10, 2015 You do realize that ItemStack's do not have an NBTTagCompound by default, right? So the tag can be null, but you do not check for it: // itemStack.NULL.CRASH_HERE because null doesn't have any methods int coolDown = itemStack.stackTagCompound.getInteger("coolDown"); Quote http://i.imgur.com/NdrFdld.png[/img]
Mightydanp Posted October 10, 2015 Author Posted October 10, 2015 so i am sepost to do something like this? if (nbtDataCompund == null) { // do something? } im just confused right now Quote
coolAlias Posted October 11, 2015 Posted October 11, 2015 so i am sepost to do something like this? if (nbtDataCompund == null) { // do something? } im just confused right now Almost, and maybe, depending on what you want to do. Think of it this way: if the ItemStack doesn't have a tag compound, what should the addInformation method display about the cooldown time? In other words, the stack doesn't have any information about a cooldown yet, so what are you going to display? And if it does have that information, what do you want to display? So: if (stack.getTagCompound() == null) { // tag means no cooldown information available } else { // there is a tag, so maybe it has some information about the cooldown } Quote http://i.imgur.com/NdrFdld.png[/img]
Ernio Posted October 11, 2015 Posted October 11, 2015 Contemplate: (fixed all bad practices). @Override public void onUpdate(ItemStack itemStack, World world, Entity entity, int i, boolean flag) { if (!world.isRemote) { NBTTagCompound nbtDataCompund = itemStack.stackTagCompound; if (nbtDataCompund == null) { itemStack.stackTagCompound = new NBTTagCompound(); nbtDataCompund = itemStack.getTagCompound(); } int coolDown = nbtDataCompund.getInteger("coolDown"); if (coolDown > 0) { --coolDown; nbtDataCompund.setInteger("coolDown", coolDown); } } } @SideOnly(Side.CLIENT) public void addInformation(ItemStack itemStack, EntityPlayer player, List dataList, boolean bool) { if (itemStack.getItemDamage() < subItems.length) { dataList.add(subItemsDescriptionsFirstLine[itemStack.getItemDamage()]); dataList.add(subItemsDescriptionsSecondLine[itemStack.getItemDamage()]); dataList.add(subItemsDescriptionsThirdLine[itemStack.getItemDamage()]); } NBTTagCompound nbtDataCompund = itemStack.stackTagCompound; if (nbtDataCompund != null) { int coolDown = nbtDataCompund.getInteger("coolDown"); if (coolDown > 0) { dataList.add(subItemsCoolDownDescriptionsFirstLine[itemStack.getItemDamage()]); dataList.add(subItemsCoolDownDescriptionsSecondLine[itemStack.getItemDamage()]); dataList.add(subItemsCoolDownDescriptionsThirdLine[itemStack.getItemDamage()]); } } } @Override public boolean itemInteractionForEntity(ItemStack itemStack, EntityPlayer entityplayer, EntityLivingBase entity ) { if (!entity.worldObj.isRemote) { NBTTagCompound nbtDataCompund = itemStack.stackTagCompound; if (nbtDataCompund != null) { int coolDown = nbtDataCompund.getInteger("coolDown"); if (coolDown > 0) { return false; } if (coolDown == 0) { if (entity instanceof EntityMob) { if (itemStack.getItemDamage() > 0) { entity.setHealth(0.0F); nbtDataCompund.setInteger("coolDown", 180); entityplayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GRAY +"Soul Absurbed!")); itemStack.damageItem(1, entityplayer); return true; } else { entityplayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GRAY + "The Magical Stone seems to be full?")); entityplayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GRAY + "It seems to be useless now.")); entityplayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GRAY + "I wonder whats inside?")); return true; } } else { entityplayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GRAY + "Why has this stoped working?")); } } } else { entityplayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GRAY + "NBT is null, wtf?")); } } return false; } Note: onUpdate() is called ALWAYS when Item is inside player's inventory, thus - NBT can ONLY be null if item was never in player's inventory. EDIT I have one question - do you know what you are doing with this statement: if (itemStack.getItemDamage() > 0) ItemStack's DAMAGE == METADATA. Field is called "int itemDamage;" and can be used to do 2 things - either make sub-items OR make damagable item. Damage == 0 means that ItemStack is NOT damaged. Every incrementation (itemDamage > 0) means that itemStack has been damaged. Item#maxDamage defined maximum damage item can have if you decide to use IteamStack#itemDamage field to describe its damage (NOT metada-sub-item). Think of what you want to archieve there. Have subtypes or have chargeable wand? Quote 1.7.10 is no longer supported by forge, you are on your own.
Mightydanp Posted October 11, 2015 Author Posted October 11, 2015 yes i do know what i am doing with the getItemDamage() and such, i do have a quistion, after a built my jar, put some of the class files like this basicly the class files are out of the com folder... when i started it up with regurlar client forge and opened my inventory it crashed with This doesn't make any sense! Time: 10/10/15 7:30 PM Description: Unexpected error java.lang.IllegalAccessError: tried to access field net.minecraft.client.gui.GuiScreen.field_146292_n from class tconstruct.client.tabs.TabRegistry at tconstruct.client.tabs.TabRegistry.guiPostInit(TabRegistry.java:44) at cpw.mods.fml.common.eventhandler.ASMEventHandler_6_TabRegistry_guiPostInit_Post.invoke(.dynamic) at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:138) at net.minecraft.client.gui.GuiScreen.func_146280_a(GuiScreen.java:257) at net.minecraft.client.Minecraft.func_147108_a(Minecraft.java:808) at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1895) at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:973) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:898) at net.minecraft.client.main.Main.main(SourceFile:148) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) this is the code that says its crashing public void preInit(FMLPreInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new TabRegistry()); } am i doing something wrong in my code to cause this or? glaticraft does the same thing in there class https://github.com/micdoodle8/Galacticraft/blob/master/src/main/java/micdoodle8/mods/galacticraft/core/proxy/ClientProxyCore.java Quote
EverythingGames Posted October 11, 2015 Posted October 11, 2015 This is merely an example - it is an efficient cooldown in which NBT is not being stressed every tick. The world total time does the counting for you. This WILL break if you use getWorldTime() instead of using getTotalWorldTime(). Reason for that - if you are using getWorldTime() and then set the world time to day / night / custom time, it WILL break and return a cooldown that is either extensively long, or no cooldown at all. Just something to remember. if(itemstack.hasTagCompound() { final Long time = itemstack.getTagCompound().getLong("Cooldown"); if(time < THE TOTAL WORLD TIME) { DO WHAT YOU NEED HERE THEN SET THE COOLDOWN itemstack.setTagCompound("Cooldown", THE TOTAL WORLD TIME + YOUR COOLDOWN TIME IN TICKS); } } else { itemstack.setTagCompound(new NBTTagCompound()); } Quote Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]
Mightydanp Posted October 11, 2015 Author Posted October 11, 2015 I dont know if this is the file but this is it right here ? https://github.com/SlimeKnights/TinkersConstruct/blob/master/resources/META-INF/TConstruct_at.cfg Quote
Ernio Posted October 11, 2015 Posted October 11, 2015 This is merely an example - it is an efficient cooldown in which NBT is not being stressed every tick. The world total time does the counting for you. This WILL break if you use getWorldTime() instead of using getTotalWorldTime(). Reason for that - if you are using getWorldTime() and then set the world time to day / night / custom time, it WILL break and return a cooldown that is either extensively long, or no cooldown at all. Just something to remember. if(itemstack.hasTagCompound() { final Long time = itemstack.getTagCompound().getLong("Cooldown"); if(time < THE TOTAL WORLD TIME) { DO WHAT YOU NEED HERE THEN SET THE COOLDOWN itemstack.setTagCompound("Cooldown", THE TOTAL WORLD TIME + YOUR COOLDOWN TIME IN TICKS); } } else { itemstack.setTagCompound(new NBTTagCompound()); } While world timestamps are cool for most stuff and using them is often advertised on this forum with great praise, I must say that I am quite amazed how many people miss the fact or forget to mention that there can be more worlds than just one. "If something can fail, it will." - Me. - And above (world timestamps) is among those things. Solution is quite obvious (ServerTickEvent and global timestamp). Quote 1.7.10 is no longer supported by forge, you are on your own.
Mightydanp Posted October 12, 2015 Author Posted October 12, 2015 i do need it i put it where it needs to go but is there something i need to put in my code or is it all in my build.gradle? Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.