Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

so I just started making my own mods for minecraft so I am a complete greenhorn however a do have java experience that I have had to brush up on.

 

I've gotten to the point where I want to make my items "do" something, specifically this item will eventually create an invisible lily pad platform on top of any water source blocks around you.

 

What I'm trying to achieve is have my item hold a Boolean value that determines if it is "on" or "off." To test this I want to feed the Boolean value into the hasEffect function so I can use the enchanted effect as a visual representation of what state it's in.

 

I feel like I'm close but I still have trouble wrapping my head around NBT data.

 

my code

public class MagicTester extends Item {

public MagicTester(String unlocalizedName) {
	super();

	this.setUnlocalizedName(unlocalizedName);
	this.setCreativeTab(CreativeTabs.tabMaterials);
}

@Override
public ItemStack onItemRightClick(ItemStack stack, World par2World, EntityPlayer par3EntityPlayer) {
	if (stack.getTagCompound() == null) {
		stack.setTagCompound(new NBTTagCompound());
	}
	NBTTagCompound nbt = stack.getTagCompound();
	nbt.setBoolean("active", !(nbt.getBoolean("active")));
	stack.getTagCompound().setTag("active", nbt);
	return stack;
}

@Override
@SideOnly(Side.CLIENT)
public boolean hasEffect(ItemStack stack) {
	NBTTagCompound nbt = (NBTTagCompound) stack.getTagCompound().getTag("active");
	boolean active = nbt.getBoolean("active");
	return active;
}

}

 

If you know a good tutorial that talks about nbt data I would much appreciate it

@Override
public ItemStack onItemRightClick(ItemStack stack, World par2World, EntityPlayer par3EntityPlayer) {
	NBTTagCompound nbt = stack.getTagCompound();
	if (nbt == null) {
		nbt = new NBTTagCompound();
		stack.setTagCompound(nbt);
	}
	nbt.setBoolean("active", !(nbt.getBoolean("active"))); // "nbt" is alredy itemStack's NBT, you are now setting value inside of it - a "active" boolean.
	return stack;
}

@Override
@SideOnly(Side.CLIENT)
public boolean hasEffect(ItemStack stack) {
	NBTTagCompound nbt = stack.getTagCompound(); // nbt of itemStack
	boolean active = nbt.getBoolean("active"); // value stored inside nbt marked wtih "active" key.
	return active;
}

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

  • Author

Woot, it works!!!

 

funny thing is at first it still crashed, the reson was that when hasEffect was being called the item in my saved world did not have nbt data yet so it was returning a null.

 

so I added a condition that if at the beggining of the hasEffect if getTagCompound == null then it makes a new NBTTagCompound

 

@Override
public ItemStack onItemRightClick(ItemStack stack, World par2World, EntityPlayer par3EntityPlayer) {
	NBTTagCompound nbt = stack.getTagCompound();
	if (nbt == null) {
		nbt = new NBTTagCompound();
		stack.setTagCompound(nbt);
	}
	nbt.setBoolean("active", !(nbt.getBoolean("active")));
	System.out.println(nbt.getBoolean("active"));           //Used to test before adding hasEffect
	return stack;
}

@Override
@SideOnly(Side.CLIENT)
public boolean hasEffect(ItemStack stack) {
	if (stack.getTagCompound() == null) {
		stack.setTagCompound(new NBTTagCompound());
	}

	NBTTagCompound nbt = stack.getTagCompound();
	boolean active = nbt.getBoolean("active");
	return active;
}

 

CODING DOGE IS BEST DOGE!!!!!

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.