Jump to content

Cool down not working afte4 changing


Mightydanp

Recommended Posts

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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
}

Link to comment
Share on other sites

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?

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

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

laTLmJU.png

 

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

 

Link to comment
Share on other sites

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());
}

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Link to comment
Share on other sites

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).

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Ngamenslot adalah pilihan terbaik bagi Anda yang mencari situs terpercaya untuk bermain slot dan taruhan bola. Berikut adalah beberapa alasan mengapa Anda harus memilih Ngamenslot: Kombinasi Slot & Bola Kami menyajikan kombinasi terbaik antara permainan slot yang seru dan taruhan bola yang menegangkan. Dengan pilihan permainan yang beragam, setiap pemain dapat menikmati pengalaman bermain yang unik dan menyenangkan. Transaksi Mudah melalui Bank Ekonomi Kami menyediakan layanan transaksi yang mudah dan aman melalui Bank Ekonomi. Dengan dukungan dari sistem pembayaran yang terpercaya, Anda dapat melakukan deposit dan penarikan dana dengan cepat dan tanpa hambatan. Terpercaya dan Terjamin Ngamenslot telah terbukti sebagai situs terpercaya dengan ribuan pemain yang puas. Kami mengutamakan keamanan dan kenyamanan para pemain, sehingga Anda dapat bermain dengan tenang dan fokus pada permainan.  
    • Tambang88 adalah pilihan terbaik bagi Anda yang mencari pengalaman bermain slot gacor dengan transaksi mudah menggunakan Bank Sinarmas. Berikut adalah beberapa alasan mengapa Anda harus memilih Tambang88: Raja Slot Gacor Kami merupakan raja slot gacor dengan koleksi permainan terbaik yang menawarkan kesenangan bermain dan peluang kemenangan besar. Dengan fitur-fitur unggulan dan tema-tema menarik, setiap putaran permainan akan memberikan Anda pengalaman yang tak terlupakan. Transaksi Mudah dengan Bank Sinarmas Kami menyediakan layanan transaksi mudah melalui Bank Sinarmas untuk kenyamanan dan keamanan Anda. Dengan proses yang cepat dan efisien, Anda dapat melakukan deposit dan penarikan dana dengan lancar dan tanpa hambatan. Profesional dan Menguntungkan Tambang88 mengutamakan profesionalitas dalam memberikan layanan kepada para pemainnya. Kami juga menawarkan kesempatan untuk meraih keuntungan yang besar dengan jackpot dan hadiah-hadiah menarik lainnya.    
    • TRIK POLA SL0T GAC0R MAHJONG WAYS 1 DAN 2 HARI INI Sekarang Anda dapat meningkatkan peluang Bermain dengan langsung menggunakan situs resmi dari permainan Mahjong (PG SOFT). Cukup daftar dan siapkan hanya mulai dari 50K hingga 200K, Anda sudah memiliki peluang untuk memenangkan hadiah besar. Jika tidak memiliki dana sebanyak itu, Anda dapat mencoba dengan dana 50K dan memanfaatkan bonus member baru untuk menambah modal. Berikut adalah Situs Resmi Mahjong yang dapat Anda kunjungi: >> SITUS RESMI MAHJONG YANG TERBUKTI << >> SITUS RESMI MAHJONG YANG TERBUKTI << Setelah mendaftar, Anda dapat menggunakan pola yang sering saya gunakan: 🔥 25 Manual TURBO OFF 🔥 15 Manual TURBO ON 🔥 30 Auto TURBO OFF 🔥 10 Manual TURBO ON Pola ini biasanya memberikan hasil yang konsisten.
    • OLO4D adalah pilihan terbaik bagi Anda yang mencari pengalaman bermain slot gacor dengan transaksi mudah menggunakan Bank Bukopin. Berikut adalah beberapa alasan mengapa Anda harus memilih OLO4D: Slot Gacor Terbaik Kami menyajikan koleksi slot gacor terbaik yang menawarkan kesenangan bermain dan peluang kemenangan besar. Dengan fitur-fitur unggulan dan tema-tema menarik, setiap putaran permainan akan memberikan Anda pengalaman yang tak terlupakan. Transaksi Mudah dengan Bank Bukopin Kami menyediakan layanan transaksi mudah melalui Bank Bukopin untuk kenyamanan dan keamanan Anda. Dengan proses yang cepat dan efisien, Anda dapat melakukan deposit dan penarikan dana dengan lancar dan tanpa hambatan. Pasti Jackpot OLO4D memberikan jaminan bahwa setiap pemain pasti mendapatkan jackpot. Dengan peluang kemenangan yang tinggi, setiap putaran permainan bisa menjadi peluang untuk meraih keberuntungan besar.  
    • Balon168: Gampang Banjir Scatter Hitam Malam Ini Balon168 telah menjadi sorotan dalam dunia perjudian online, dan ada alasan kuat mengapa pemain semakin tertarik. Salah satu permainan unggulannya, yang dikenal dengan tingkat kemenangan yang tinggi, adalah varian "Gampang Banjir Scatter Hitam Malam Ini". Mari kita selami lebih dalam mengenai fenomena ini. Balon168: Destinasi Utama bagi Pecinta Slot     DAFTAR SEKARANG LINK VIP MAXWIN  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.