Jump to content

Recommended Posts

Posted

so im making an item that does all the stuff below, problem is, adding health isn't working how should I fix this?

 

	@SubscribeEvent
public void playerTick(PlayerTickEvent event) {
	boolean hasItem = event.player.inventory.hasItem(ModItems.DnaPosideonInfused);

	if (event.player.capabilities.isCreativeMode) {
	} else {
		if (hasItem == true) {

			if (event.player.isWet()) {
				event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(40.0D);
				event.player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 1, 1));
				event.player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 1, 1));
				event.player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 3, 3));
				event.player.addPotionEffect(new PotionEffect(Potion.resistance.id, 1, 1));

			} else {

				if (hasItem == true) {
					event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(30.0D);
					event.player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 1, 1));
					event.player.addPotionEffect(new PotionEffect(Potion.resistance.id, 0, 0));

				}
			}
		}
	}
	if (event.player.capabilities.isCreativeMode) {
	} else {
		if (hasItem == false) {
			event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D);
		}

		if (event.player.isInWater() && hasItem == true) {
			event.player.addPotionEffect(new PotionEffect(
					Potion.regeneration.id, 1, 1));
		}
	}
}

Im serious don't look at it!!

Posted

here is the new code:

	@SubscribeEvent
public void playerTick(PlayerTickEvent event) {
	boolean hasItem = event.player.inventory.hasItem(ModItems.DnaPosideonInfused);

	if (event.player.capabilities.isCreativeMode) {
	} else {
		if (hasItem == true) {
			if (event.player.isWet()) {
	            if(!event.player.worldObj.isRemote){
				event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(40.0D);
				event.player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 1, 1));
				event.player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 1, 1));
				event.player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 3, 3));
				event.player.addPotionEffect(new PotionEffect(Potion.resistance.id, 1, 1));
			}
			} else {

				if (hasItem == true) {
		            if(!event.player.worldObj.isRemote){
					event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(30.0D);
					event.player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 1, 1));
					event.player.addPotionEffect(new PotionEffect(Potion.resistance.id, 0, 0));
		            }
				}
			}
		}
	}
	if (event.player.capabilities.isCreativeMode) {
	} else {
		if (hasItem == false) {
			event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D);
		}

		if (event.player.isInWater() && hasItem == true) {
            if(!event.player.worldObj.isRemote){
			event.player.addPotionEffect(new PotionEffect(
					Potion.regeneration.id, 1, 1));
			}
		}
	}
}

Im serious don't look at it!!

Posted

I found a different problem, I think Im registrying my event busses wrong, what do you think, also registering one before another makes an  effect, heres thee code:

package com.OlympiansMod.Main;

import net.minecraft.client.renderer.entity.RenderSnowball;
import net.minecraftforge.event.entity.living.LivingDeathEvent;

import com.OlympiansMod.Block.ModBlocks;
import com.OlympiansMod.Item.DnaPosideonInfused;
import com.OlympiansMod.Item.DnaZeusInfused;
import com.OlympiansMod.Item.ModItems;
import com.OlympiansMod.creativetabs.MCreativeTabs;
import com.OlympiansMod.entity.EntityCell;
import com.OlympiansMod.entity.EntityGreekFire;
import com.OlympiansMod.entity.MEntity;
import com.OlympiansMod.lib.Refstrings;
import com.OlympiansMod.world.MWorld;

import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.registry.GameRegistry;

@Mod(modid = Refstrings.MODID , name = Refstrings.NAME , version = Refstrings.VERSION)
public class MainRegistry {
private static int modGuiIndex = 0;

public static final int GUI_CUSTOM_INV = modGuiIndex++;

@SidedProxy(clientSide = Refstrings.CLIENTSIDE , serverSide = Refstrings.SERVERSIDE)
public static ServerProxy proxy;

@Instance
public static MainRegistry modInstance;


@EventHandler
public static void PreLoad(FMLPreInitializationEvent PreEvent) {
	MCreativeTabs.initialiseTabs();
	ModBlocks.MainRegistry();
	MEntity.MainRegistry();
	ModItems.MainRegistry();
	FMLCommonHandler.instance().bus().register(new DnaPosideonInfused());
	FMLCommonHandler.instance().bus().register(new DnaZeusInfused());
	MWorld.MainRegistry();
        CraftingManager.mainRegistry(); 
              

}
@EventHandler
public static void Load(FMLInitializationEvent event) {
	 proxy.registerRenderInfo(); 
}
@EventHandler
public static void PostLoad(FMLPostInitializationEvent PostEvent) {
}

}

Im serious don't look at it!!

Posted

Everything you do, regarding data, should happen on server and be eventually sent to clients.

 

Yes - potion effects HAVE to be added on server side only. They are handled internally and synchronized to all clients.

Note that setting potion time to "1" might cause issues (effect will "blink" or won't even appear - depends if you use START or END tick). Always use 2+ values.

 

As to SharedMonsterAttributes (SMA):

SMA is NOT something that is synchronized. Its name, through still bad, kinda tells you what it is - "SHARED".

Vanilla sets entity's SMA only ONCE - when entity is being constructed. SMA is set on both server and client side - meaning both client entity and server one will have same SMA that was coded in Entity.class.

 

Changing SMA need to happen on BOTH sides. If you decide to alter it - you need to send packet to all clients that it changed.

Also - if you change SMA, let's say health for one player and then someother player sees him (didn't see him before) - you ALSO need to send packet to set its new health. SMA is constant value for both sides and all entities of same type (class).

 

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

Posted

Everything you do, regarding data, should happen on server and be eventually sent to clients.

 

Yes - potion effects HAVE to be added on server side only. They are handled internally and synchronized to all clients.

Note that setting potion time to "1" might cause issues (effect will "blink" or won't even appear - depends if you use START or END tick). Always use 2+ values.

 

As to SharedMonsterAttributes (SMA):

SMA is NOT something that is synchronized. Its name, through still bad, kinda tells you what it is - "SHARED".

Vanilla sets entity's SMA only ONCE - when entity is being constructed. SMA is set on both server and client side - meaning both client entity and server one will have same SMA that was coded in Entity.class.

 

Changing SMA need to happen on BOTH sides. If you decide to alter it - you need to send packet to all clients that it changed.

Also - if you change SMA, let's say health for one player and then someother player sees him (didn't see him before) - you ALSO need to send packet to set its new health. SMA is constant value for both sides and all entities of same type (class).

 

If you use modifiers to modify the SMA, then they WILL be sent to the client automatically, but ONLY if they are declared as watched with

.setShouldWatch(true)

.

Health is shared by default, for example.

I have a tutorial on the Attribute system here:

http://www.minecraftforge.net/forum/index.php/topic,30137.0.html

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

everything is valid, except like I said earlier why, registering everything server side works just not with the event bus registered

I found a different problem, I think Im registrying my event busses wrong, what do you think, also registering one before another makes an  effect, heres thee code:

package com.OlympiansMod.Main;

import net.minecraft.client.renderer.entity.RenderSnowball;
import net.minecraftforge.event.entity.living.LivingDeathEvent;

import com.OlympiansMod.Block.ModBlocks;
import com.OlympiansMod.Item.DnaPosideonInfused;
import com.OlympiansMod.Item.DnaZeusInfused;
import com.OlympiansMod.Item.ModItems;
import com.OlympiansMod.creativetabs.MCreativeTabs;
import com.OlympiansMod.entity.EntityCell;
import com.OlympiansMod.entity.EntityGreekFire;
import com.OlympiansMod.entity.MEntity;
import com.OlympiansMod.lib.Refstrings;
import com.OlympiansMod.world.MWorld;

import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.registry.GameRegistry;

@Mod(modid = Refstrings.MODID , name = Refstrings.NAME , version = Refstrings.VERSION)
public class MainRegistry {
private static int modGuiIndex = 0;

public static final int GUI_CUSTOM_INV = modGuiIndex++;

@SidedProxy(clientSide = Refstrings.CLIENTSIDE , serverSide = Refstrings.SERVERSIDE)
public static ServerProxy proxy;

@Instance
public static MainRegistry modInstance;


@EventHandler
public static void PreLoad(FMLPreInitializationEvent PreEvent) {
	MCreativeTabs.initialiseTabs();
	ModBlocks.MainRegistry();
	MEntity.MainRegistry();
	ModItems.MainRegistry();
	FMLCommonHandler.instance().bus().register(new DnaPosideonInfused());
	FMLCommonHandler.instance().bus().register(new DnaZeusInfused());
	MWorld.MainRegistry();
        CraftingManager.mainRegistry(); 
              

}
@EventHandler
public static void Load(FMLInitializationEvent event) {
	 proxy.registerRenderInfo(); 
}
@EventHandler
public static void PostLoad(FMLPostInitializationEvent PostEvent) {
}

}

 

It works if the itemposideon is register after the zeus bus, and vis versa,  its kinds hard to explain just look at the code. why is it doing this? it works perfectly if its registered second.

 

and thanks about the potion effects, it works now, this is mainly about the health stuff though, meaning I just want to clarify that I don't think the main registry has anything to do with the potion effects.

Im serious don't look at it!!

Posted

It might be only me, but I seriosuly don't get what is the ACTUAL problem here.

First you say something about health, now you start with even buses. I am lost.

 

Anyway - if you want direct help - make GitHub. Other option is to post all classes regarding problem (with proxies if used).

 

Also note that tick events always have 2 phases - pick one, otherwise code is ran twice. (e.g: event.phase == Phase.END).

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

Posted

ok just tell me where I should register the event busses

PreInit

 

or a better question would be, how do I modify player attributes easily.

Alredy told, twice (in different aspects).

 

* SMA Base is something shared and set by Entity.class

* SMA Modifiers are auto-synced if set to be.

 

You either want to add/remove modifiers to attribute or set your own base value, but in that case you need to do all syncs on your own.

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

Posted

yeah so It worked slightly:

here is every class im hoping this will help me solve the problem.

MainRegistry:

package com.OlympiansMod.Main;

import net.minecraft.client.renderer.entity.RenderSnowball;
import net.minecraftforge.event.entity.living.LivingDeathEvent;

import com.OlympiansMod.Block.ModBlocks;
import com.OlympiansMod.Item.DnaPosideonInfused;
import com.OlympiansMod.Item.DnaStats;
import com.OlympiansMod.Item.DnaStats2;
import com.OlympiansMod.Item.DnaZeusInfused;
import com.OlympiansMod.Item.ModItems;
import com.OlympiansMod.creativetabs.MCreativeTabs;
import com.OlympiansMod.entity.EntityCell;
import com.OlympiansMod.entity.EntityGreekFire;
import com.OlympiansMod.entity.MEntity;
import com.OlympiansMod.lib.Refstrings;
import com.OlympiansMod.world.MWorld;

import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.registry.GameRegistry;

@Mod(modid = Refstrings.MODID , name = Refstrings.NAME , version = Refstrings.VERSION)
public class MainRegistry {
private static int modGuiIndex = 0;

public static final int GUI_CUSTOM_INV = modGuiIndex++;

@SidedProxy(clientSide = Refstrings.CLIENTSIDE , serverSide = Refstrings.SERVERSIDE)
public static ServerProxy proxy;

@Instance
public static MainRegistry modInstance;


@EventHandler
public static void PreLoad(FMLPreInitializationEvent PreEvent) {
	MCreativeTabs.initialiseTabs();
	ModBlocks.MainRegistry();
	MEntity.MainRegistry();
	ModItems.MainRegistry();
	FMLCommonHandler.instance().bus().register(new DnaZeusInfused());
	FMLCommonHandler.instance().bus().register(new DnaPosideonInfused());
	MWorld.MainRegistry();
        CraftingManager.mainRegistry(); 
    
}
@EventHandler
public static void Load(FMLInitializationEvent event) {
	 proxy.registerRenderInfo(); 
}
@EventHandler
public static void PostLoad(FMLPostInitializationEvent PostEvent) {
}

}

ItemClasses:

package com.OlympiansMod.Item;

import java.util.List;

import com.sun.media.jfxmedia.events.PlayerEvent;

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent;
import net.minecraft.entity.Entity;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;

public class DnaZeusInfused extends Item {

@SubscribeEvent
public void playerTick(PlayerTickEvent event) {
	boolean hasItem = event.player.inventory.hasItem(ModItems.DnaZeusInfused);
	if (event.player.capabilities.isCreativeMode) {
	} else {	

		if (hasItem == true) {
			event.player.capabilities.allowFlying = true;
			if (event.player.capabilities.isFlying) {
	            if(!event.player.worldObj.isRemote){
				event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(40.0D);				
				event.player.addPotionEffect(new PotionEffect(
						Potion.damageBoost.id, 1, 1));
				event.player.addPotionEffect(new PotionEffect(
						Potion.resistance.id, 1, 1));
				event.player.addPotionEffect(new PotionEffect(
						Potion.hunger.id, 3, 3));
	            }
			} else {
			if (hasItem == true) {
	            if(!event.player.worldObj.isRemote){
				event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(30.0D);
				event.player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 0, 0));
				event.player.addPotionEffect(new PotionEffect(Potion.resistance.id, 0, 0));
					}
				}
			}
		}
	}

		if (event.player.capabilities.isCreativeMode) {
		} else {
			if (hasItem == false) {
	            if(!event.player.worldObj.isRemote){
				event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).removeAllModifiers();
				event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D);
	            }
				event.player.capabilities.allowFlying = false;
				event.player.capabilities.isFlying = false;

		}

		if (event.player.isInWater() && hasItem == true) {
            if(!event.player.worldObj.isRemote){
				event.player.addPotionEffect(new PotionEffect(
						Potion.weakness.id, 0, 0));
			}
		}
	}

}
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
	if (!world.isRemote) {
		player.attackEntityFrom(DamageSource.causeIndirectMagicDamage(player, player), 10);
		player.addPotionEffect(new PotionEffect(Potion.blindness.id, 60, 5));
		player.addPotionEffect(new PotionEffect(Potion.confusion.id, 200, 5));
		player.addPotionEffect(new PotionEffect(Potion.wither.id, 60, 5));
		player.inventory.addItemStackToInventory(new ItemStack(
				ModItems.DNAZeus));
		return new ItemStack(ModItems.DnaInfuser);

	}

	return stack;
}
public void addInformation(ItemStack stack, EntityPlayer player, List list,
		boolean i) {
	list.add(EnumChatFormatting.AQUA
			+ "Dna Infuser:");
	list.add("                         ");
	list.add(EnumChatFormatting.BLUE + "Mode:");
	list.add(EnumChatFormatting.BLUE + "Actively Infusing:");
	list.add(EnumChatFormatting.BLUE + "Dna of Zeus");


}
}

package com.OlympiansMod.Item;

import java.util.List;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;

public class DnaPosideonInfused extends Item{
@SubscribeEvent
public void playerTick(PlayerTickEvent event) {
	boolean hasItem = event.player.inventory.hasItem(ModItems.DnaPosideonInfused);

	if (event.player.capabilities.isCreativeMode) {
	} else {
		if (hasItem == true) {
			if (event.player.isWet()) {
	            if(!event.player.worldObj.isRemote){
				event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(45.0D);
				event.player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 1, 1));
				event.player.addPotionEffect(new PotionEffect(Potion.waterBreathing.id, 1, 1));
				event.player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 3, 3));
				event.player.addPotionEffect(new PotionEffect(Potion.resistance.id, 1, 1));
			}
			} else {

				if (hasItem == true) {
		            if(!event.player.worldObj.isRemote){
					event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(30.0D);
					event.player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 1, 1));
					event.player.addPotionEffect(new PotionEffect(Potion.resistance.id, 0, 0));
		            }
				}
			}
		}
	}
	if (event.player.capabilities.isCreativeMode) {
	} else {
		if (hasItem == false) {
            if(!event.player.worldObj.isRemote){
			event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).removeAllModifiers();
			event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D);
            }
		}

		if (event.player.isInWater() && hasItem == true) {
            if(!event.player.worldObj.isRemote){
			event.player.addPotionEffect(new PotionEffect(
					Potion.regeneration.id, 1, 1));
			}
		}
	}
}
public ItemStack onItemRightClick(ItemStack stack, World world,
		EntityPlayer player) {
	if (!world.isRemote) {
		player.attackEntityFrom(
				DamageSource.causeIndirectMagicDamage(player, player), 10);
		player.addPotionEffect(new PotionEffect(Potion.blindness.id, 60, 5));
		player.addPotionEffect(new PotionEffect(Potion.confusion.id, 200, 5));
		player.addPotionEffect(new PotionEffect(Potion.wither.id, 60, 5));
		player.inventory.addItemStackToInventory(new ItemStack(
				ModItems.DNAPosideon));
		return new ItemStack(ModItems.DnaInfuser);

	}

	return stack;
}

public void addInformation(ItemStack stack, EntityPlayer player, List list,
	boolean i) {

list.add(EnumChatFormatting.AQUA + "Dna Infuser:");
list.add("                         ");
list.add(EnumChatFormatting.BLUE + "Mode:");
list.add(EnumChatFormatting.BLUE + "Actively Infusing:");
list.add(EnumChatFormatting.BLUE + "Dna of Posideon");

}
}


 

so yeah, the dnaposideoninfused works perfectly, problem is the dnaZeusInfused works, except for the health modifiers, and I can get the dnazeusInfused to work, but I have to place the event bus before the dna posideon infused. but then the dnaposideoninfused doesn't work. why is this?

Im serious don't look at it!!

Posted

fw1vI.jpg

 

width=600 height=399http://images-cdn.9gag.com/photo/arpnqKB_700b.jpg[/img]

 

Aaaanyway... (mind that my life and everything I say is a joke)

I will just point out everything bad:

1.

Also note that tick events always have 2 phases - pick one, otherwise code is ran twice. (e.g: event.phase == Phase.END).

56586470.jpg

 

2.

@SubscribeEvent
public void playerTick(PlayerTickEvent event) {
boolean hasItem = event.player.inventory.hasItem(ModItems.DnaZeusInfused);

This piece of code is almost as ridiculus as building a bike with square "wheels" just to realize that round ones were invented thousands of years ago.

 

If you are planning on making an item that gives effects when inside inventory and/or held in hand - use the right method!

Item#onUpdate(...) is called whenever item is inside your inventory. To check if it's held you can simply do heldStack==stackFromOnUpdateMethod.

 

3.

For the love of god - keep some order when making chain if-statements.

1st check the logical side! Then do creative checks and then everything else.

 

4.

More @SubscribeEvent for same event = worse the design.

One mod should only subscribe to an event once, there is no logical point of doing it twice. Also - look again at point "1" and "2".

 

5.

removeAllModifiers();

Focus on "All" keyword. You certainly DON'T want to use this method, just because.

 

6.

Finally (writing this 3rd time):

You either ALTER BASE value, or ADD/REMOVE MODIFIER.

Every attribute has a BASE value that is set DIRECTLY from given Entity.class. This value (if not changed from outside) will most certainly be SAME for all entitities of given class for both client and server.

Altering BASE value in ANY way will require you to update other client's data, as BASE value is set ONCE and not tracked.

 

If you don't want to handle it on your own (all the updates) - you DO NOT even touch BASE value. Never, ever (not including making your own entity obviously).

 

If you want to go easy way - you do it by ADDING/REMOVING AttributeModifier to given Attribute. Base stays the same, you just add e.g +10 health (meaning entity will have 20+10).

In that case - modifiers WILL be auto-synced if set to do so (.setShouldWatch(true)).

 

6 (edit: because "7" is too mainstream). Why do your potions have "0" time?

 

Fix your code, read vanilla and check out modifiers (plenty of examples in vanilla).

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

Posted

i know this is completely and utterly wrong but what do I do from here, plus im having trouble finding examples in vanilla(the healthboost potion effect does help me) or the internet. How/What should I do to just + 10 to a health modifier.

			            event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(new AttributeModifier(null, iconString, event.player.getMaxHealth() + 10D, 10));	

yeah don't even say anything about the code.. but seriously how do I apply an attribute.

Im serious don't look at it!!

Posted

Okay, so basically (I think you finally got the idea).

 

There is the Attribute.

It kinda looks like this: (example)

Note: It obviously doesn't look like this in internals, I am just presenting idea.

 

Attribute<maxHealth>

--->Map<UUID, AttributeModifier>

 

Now the AttributeModifier is something that can be added/removed from Attribute based on it's UUID (internals also allow operating on names or operations, but it's not really place for you in this case, those are internals).

 

What you actually do here is save basic data about modifier as static thing and apply it to any number of entities you want.

Example:

public static String theUUID = "1F28C409-EA90-4E54-AD57-13F3D92F68B2"; // this is supposed to be some static-for-your-modifier UUID. You decide what this String is, it must be in an UUID format tho.
public static String theName = "MySuperModifier"; // This will be the name of modifier.
public static AttributeModifier myAttributeModifier = new AttributeModifier(UUID.fromString(theUUID), theName, 10.0D, 0); // And yes, you can put those above inside this one's declaration.

//Now what you do in method to apply/remove:

event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(myAttributeModifier);
// 10.0D is modifier value, in this case 10.0F health
// 0 is an operation - there are few operations, 0 is literally "+".
// After doing this - your entity's health will be 20+10.
// The Modifier is saved in entity with a key (theUUID).
// If you want to remove it, you simply:

event.player.getEntityAttribute(SharedMonsterAttributes.maxHealth).removeModifier(myAttributeModifier); // note that it is the same modifier instance used on all entities.

 

Lemme just note: I DO NOT personally use this fkd up system. For me - it's the most badly and overly-complicated thing that they've added to MC since they started "sane" and "code-cleanup" updates. I personally go with my own much clearer, faster and expanded system that operates direcly on BASE value.

I have no idea if this will work, I literally just readup it in past 20min directly from code. Guess it should.

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

Posted

Lemme just note: I DO NOT personally use this fkd up system. For me - it's the most badly and overly-complicated thing that they've added to MC since they started "sane" and "code-cleanup" updates. I personally go with my own much clearer, faster and expanded system that operates direcly on BASE value.

I have no idea if this will work, I literally just readup it in past 20min directly from code. Guess it should.

 

I will shamelessly self-ad my tutorial again: http://www.minecraftforge.net/forum/index.php/topic,30137.0.html

 

But you got it right.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

wait a second, since the maxhealth attribute already has setShouldWatch I don't need to implement it? I basically but every thing that requires the playertickevent in one method, but only one of the items still seems to works, although right before I log in game, the Item the before currently was working, shows hearts until the login is complete, so basically it lags. so im still not sure how to get both items working properly, I no longer have to subscribe events, just one that does everything. here is the code :P

sorry

public static String theUUID = "1F28C409-EA90-4E54-AD57-13F3D92F68B2"; // this is supposed to be some static-for-your-modifier UUID. You decide what this String is, it must be in an UUID format tho.
public static String theName = "MySuperModifier"; // This will be the name of modifier.
public static String theName1 = "MySuperModifer1";
public static String theName2 = "MySuperModifie2"; // This will be the name of modifier.
public static String theName3 = "MySuperModifer3";
public static AttributeModifier myAttributeModifier = new AttributeModifier(UUID.fromString(theUUID), theName, 10.0D, 0); // And yes, you can put those above inside this one's declaration.
public static AttributeModifier myAttributeModifier1 = new AttributeModifier(UUID.fromString(theUUID), theName1, 20.0D, 0); // And yes, you can put those above inside this one's declaration.
public static AttributeModifier myAttributeModifier2 = new AttributeModifier(UUID.fromString(theUUID), theName2, 10.0D, 0); // And yes, you can put those above inside this one's declaration.
public static AttributeModifier myAttributeModifier3 = new AttributeModifier(UUID.fromString(theUUID), theName3, 20.0D, 0); // And yes, you can put those above inside this one's declaration.

//Now what you do in method to apply/remove:


@SubscribeEvent
public void playerTick(PlayerTickEvent event) {
	if (event.phase == Phase.END) {
		boolean hasItem = event.player.inventory
				.hasItem(ModItems.DnaPosideonInfused);
		boolean hasItem2 = event.player.inventory
				.hasItem(ModItems.DnaZeusInfused);
		if (event.player.capabilities.isCreativeMode) {
		} else {
			if (event.player.isWet()) {
				if (hasItem == true) {
					if (!event.player.worldObj.isRemote) {
						event.player.getEntityAttribute(
								SharedMonsterAttributes.maxHealth)
								.applyModifier(myAttributeModifier1);
						event.player.addPotionEffect(new PotionEffect(
								Potion.moveSpeed.id, 1, 1));
						event.player.addPotionEffect(new PotionEffect(
								Potion.waterBreathing.id, 1, 1));
						event.player.addPotionEffect(new PotionEffect(
								Potion.damageBoost.id, 3, 3));
						event.player.addPotionEffect(new PotionEffect(
								Potion.resistance.id, 1, 1));
					}
				}
			} else {

				if (hasItem == true) {
					if (!event.player.worldObj.isRemote) {
						event.player.getEntityAttribute(
								SharedMonsterAttributes.maxHealth)
								.removeModifier(myAttributeModifier1); 

						event.player.getEntityAttribute(
								SharedMonsterAttributes.maxHealth)
								.applyModifier(myAttributeModifier);
						event.player.addPotionEffect(new PotionEffect(
								Potion.damageBoost.id, 1, 1));
						event.player.addPotionEffect(new PotionEffect(
								Potion.resistance.id, 0, 0));
					}
				}
			}
		}
		if (event.player.capabilities.isCreativeMode) {
		} else {
			if (hasItem == false) {
				if (!event.player.worldObj.isRemote) {
					event.player.getEntityAttribute(
							SharedMonsterAttributes.maxHealth)
							.removeModifier(myAttributeModifier);

				}
			}

			if (event.player.isInWater() && hasItem == true) {
				if (!event.player.worldObj.isRemote) {
					event.player.addPotionEffect(new PotionEffect(
							Potion.regeneration.id, 1, 1));
				}
			}
		}
		if (event.player.capabilities.isCreativeMode) {
		} else {
			if (hasItem2 == true) {
				event.player.capabilities.allowFlying = true;
			}
			if (event.player.capabilities.isFlying) {
				if (hasItem2 == true) {
					if (!event.player.worldObj.isRemote) {
						event.player.getEntityAttribute(
								SharedMonsterAttributes.maxHealth)
								.applyModifier(myAttributeModifier3);
					}
				}
			} else {
				if (hasItem2 == true) {
					if (!event.player.worldObj.isRemote) {
						event.player.getEntityAttribute(
								SharedMonsterAttributes.maxHealth).removeModifier(myAttributeModifier3);

						event.player.getEntityAttribute(
								SharedMonsterAttributes.maxHealth).applyModifier(myAttributeModifier2);
					}
				}
			}
		}

		if (event.player.capabilities.isCreativeMode) {
		} else {
			if (hasItem2 == false) {
				if (!event.player.worldObj.isRemote) {
					event.player.getEntityAttribute(
							SharedMonsterAttributes.maxHealth).removeModifier(myAttributeModifier2); 

				}
				event.player.capabilities.allowFlying = false;
				event.player.capabilities.isFlying = false;
			}
		}
	}
}

Im serious don't look at it!!

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

    • Verified user can get a $100 off Temu Coupon code using the code ((“ACW883306”)). This Temu $100 Off code is specifically for new and existing customers both and can be redeemed to receive a $100 discount on your purchase.   Our exclusive Temu Coupon code offers a flat $100 off your purchase, plus an additional 30% discount on top of that. You can slash prices by up to $100 as a new Temu customer using code ((“ACW883306”)). Existing users can enjoy $100 off their next haul with this code.   But that’s not all! With our Temu Coupon codes for 2025, you can get up to 90% discount on select items and clearance sales. Whether you’re a new customer or an existing shopper, our Temu codes provide extra discounts tailored just for you. Save up to 30% with these current Temu Coupons ["^"ACW883306"^"] for May 2025. The latest Temu coupon codes at here.   New users at Temu receive a $100 discount on orders over $100 Use the code ((“ACW883306”)) during checkout to get Temu Coupon $100 Off For New Users. You can save $100 Off your first order with the coupon code available for a limited time only.   Temu 90% Off promo code ((“ACW883306”)) will save you $100 on your order. To get a discount, click on the item to purchase and enter the code.   Yes, Temu offers $100 Off coupon code “ACW883306” for first time users. You can get a $100 bonus plus $100 Off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code ((“ACW883306”)) and make a first purchase of $100 or more.   Free Temu codes $100 off — ((“ACW883306”))   Temu Coupon $100 off — ((“ACW883306”))   Temu Coupon 30% off — ((“ACW883306”))   Temu Memorial Day Sale $100off — ((“ACW883306”))   Temu Coupon code today — ((“ACW883306”))   Temu free gift code — ["^"ACW883306"^"](Without inviting friends or family member)    Redeem Free Temu Coupon Code ["^"ACW883306"^"] for first-time users   Get a $100 discount on your Temu order with the promo code "ACW883306". You can get a discount by clicking on the item to purchase and entering this Temu Coupon code $100 off ((“ACW883306”)).   Temu New User Coupon ((“ACW883306”)): Up To $100OFF For First-Time Users   Our Temu first-time user coupon codes are designed just for new customers, offering the biggest discounts and the best deals currently available on Temu. To maximize your savings, download the Temu app and apply our Temu new user coupon during checkout.   Temu Coupon Codes For Existing Users ((“ACW883306”)): $100 Price Slash   Have you been shopping on Temu for a while? Our Temu Coupon for existing customers is here to reward you for your continued support, offering incredible discounts on your favorite products.   Temu Coupon For $100 Off ((“ACW883306”)): Get A Flat $100 Discount On Order Value   Get ready to save big with our incredible Temu Coupon for $100 off! Our amazing Temu $100 off coupon code will give you a flat $100 discount on your order value, making your shopping experience even more rewarding.   Temu Coupon Code For $100 Off ((“ACW883306”)): For Both New And Existing Customers   Our incredible Temu Coupon code for $100 off is here to help you save big on your purchases. Whether you’re a new user or an existing customer, our $100 off code for Temu will give you an additional discount!   Temu Coupon Bundle ((“ACW883306”)): Flat $100 Off + Up To $100 Discount   Get ready for an unbelievable deal with our Temu Coupon bundle for 2025! Our Temu Coupon bundles will give you a flat $100 discount and an additional $100 off on top of it.   Free Temu Coupons ((“ACW883306”)): Unlock Unlimited Savings!   Get ready to unlock a world of savings with our free Temu Coupons! We’ve got you covered with a wide range of Temu Coupon code options that will help you maximize your shopping experience.   30% Off Temu Coupons, Promo Codes + 25% Cash Back ((“ACW883306”))   Redeem Temu Coupon Code ((“ACW883306”))   Temu Coupon $100 OFF ((“ACW883306”))   You can get an exclusive $100 off discount on your Temu purchase with the code *[ACW883306] Or [acw940180]*. This code is specially designed for new customers and offers a significant price cut on your shopping. Make your first purchase on Temu more rewarding by using this code to get $100 off instantly. New users at Temu receive a $100 Off discount on orders over $100 Off Use the code [ACW883306] during checkout to get Temu Discount $100 off For New Users. You can save $100 off your first order with the Promo Code available for a limited time only. Receive $100 off plus an extra 30% off on your first purchase by signing up with {ACW883306}. Temu promo code 100 off - {ACW883306 or acr502121} New users at Temu receive a $100 discount on orders over $100 Use the code ((“ACW883306”)) during checkout to get Temu Coupon $100 Off For New and Existing Customers.   Extra 30% off for new and existing customers + Up to $40 Off / 40% off & more.   Temu Promo Codes for New users- [ACW883306]   Temu discount code for New customers- [ACW883306]   Temu $40 Off Promo Code- [ACW883306]   what are Temu codes- ACW883306   does Temu give you $40 Off - [ACW883306] Yes Verified   Temu Promo Code May 2025- {ACW883306}   Temu New customer offer {ACW883306}   Temu discount code 2025 {ACW883306}   100 off Promo Code Temu {acr502121}   Temu 100% off any order {acr502121}   100 dollar off Temu code {acr502121}   Temu coupon $40 off for New customers   There are a number of discounts and deals shoppers n take advantage of with the Teemu Coupon Bundle [ACW883306]. Temu coupon $40 off for New customers [ACW883306] will save you $40 Off on your order. To get a discount, click on the item to purchase and enter the code. You n think of it as a supercharged savings pack for all your shopping needs Yes, Temu offers a $100 off coupon for new users who download the app. This coupon is part of a larger bundle of savings, and it's available to new users of the Temu app. To claim this offer, new users can typically download the app and find the coupon in their account, or they may be able to enter a specific code like ACW883306 or acr502121 during checkout     Temu Coupon $100 OFF FOR EXISTING CUSTOMERS ((“ACW883306”))   Temu Coupon $100 OFF FIRST ORDER ((“ACW883306”))   Temu Coupon $100 OFF REDDIT ((“ACW883306”))   Temu Coupon $100 OFF FOR EXISTING CUSTOMERS REDDIT ((“ACW883306”))   Temu $100 OFF CODE ((“ACW883306”))   Temu 70 OFF COUPON 2025 ((“ACW883306”))   DOMINOS 70 RS OFF COUPON CODE ((“ACW883306”))   WHAT IS A COUPON RATE ((“ACW883306”))   Temu $100 OFF FOR EXISTING CUSTOMERS ((“ACW883306”))   Temu $100 OFF FIRST ORDER ((“ACW883306”))   Temu $100 OFF FREE SHIPPING ((“ACW883306”))
    • New users at Temu receive a $100 discount on orders over $100 Use the code [acw940180] during checkout to get Temu Coupon Code $100 off For New Users. Yes, Temu offers $100 off coupon code “acw940180” for first-time users. Temu 100% Off coupon code "acw940180" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acw940180” for first-time users. You can get a$100 bonus plus 30% off any purchase at Temu with the$100 Coupon Bundle at Temu if you sign up with the referral code [acw940180] and make a first purchase of$50 or more. The Temu $100 Off coupon code (acw940180) will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes Temu offers $100 Off Coupon Code “acw940180” for First Time Users. Yes, Temu offers $100 off coupon code {acw940180} for first-time users. You can get a $100 bonus plus 100% off any purchase at Temu with the $100 Coupon Bundle if you sign up with the referral code [acw940180] and make a first purchase of $100 or more. If you are who wish to join Temu, then you should use this exclusive Temu coupon code $100 off (acw940180) and get $100 off on your purchase with Temu. You can get a $100 discount with Temu coupon code {acw940180}. This exclusive offer is for existing customers and can be used for a $100 reduction on your total purchase. Enter coupon code {acw940180} at checkout to avail of the discount. You can use the code {acw940180} to get a $100 off Temu coupon as a new customer. Apply this Temu coupon code $100 off (acw940180) to get a $100 discount on your shopping with Temu. If you’re a first-time user and looking for a Temu coupon code $100 first time user(acw940180) then using this code will give you a flat $100 Off and a 90% discount on your Temu shopping. Temu $100% Off Coupon Code "acw940180" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Temu coupon code$100off-{acw940180} Temu coupon code -{acw940180} Temu coupon code$50 off-{acw940180} Temu Coupon code [acw940180] for existing users can get up to 50% discount on product during checkout. Temu Coupon Codes for Existing Customers-acw940180 Temu values its loyal customers and offers various promo codes, including the Legit Temu Coupon Code (acw940180]) or (acw940180), which existing users can use. This ensures that repeat shoppers can also benefit from significant discounts on their purchases. Keep an eye out for special promotions and offers that are periodically available to enhance your shopping experience.
    • New users at Temu receive a $100 discount on orders over $100 Use the code [acw940180] during checkout to get Temu Coupon Code $100 off For New Users. Yes, Temu offers $100 off coupon code “acw940180” for first-time users. Temu 100% Off coupon code "acw940180" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acw940180” for first-time users. You can get a$100 bonus plus 30% off any purchase at Temu with the$100 Coupon Bundle at Temu if you sign up with the referral code [acw940180] and make a first purchase of$50 or more. The Temu $100 Off coupon code (acw940180) will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes Temu offers $100 Off Coupon Code “acw940180” for First Time Users. Yes, Temu offers $100 off coupon code {acw940180} for first-time users. You can get a $100 bonus plus 100% off any purchase at Temu with the $100 Coupon Bundle if you sign up with the referral code [acw940180] and make a first purchase of $100 or more. If you are who wish to join Temu, then you should use this exclusive Temu coupon code $100 off (acw940180) and get $100 off on your purchase with Temu. You can get a $100 discount with Temu coupon code {acw940180}. This exclusive offer is for existing customers and can be used for a $100 reduction on your total purchase. Enter coupon code {acw940180} at checkout to avail of the discount. You can use the code {acw940180} to get a $100 off Temu coupon as a new customer. Apply this Temu coupon code $100 off (acw940180) to get a $100 discount on your shopping with Temu. If you’re a first-time user and looking for a Temu coupon code $100 first time user(acw940180) then using this code will give you a flat $100 Off and a 90% discount on your Temu shopping. Temu $100% Off Coupon Code "acw940180" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Temu coupon code$100off-{acw940180} Temu coupon code -{acw940180} Temu coupon code$50 off-{acw940180} Temu Coupon code [acw940180] for existing users can get up to 50% discount on product during checkout. Temu Coupon Codes for Existing Customers-acw940180 Temu values its loyal customers and offers various promo codes, including the Legit Temu Coupon Code (acw940180]) or (acw940180), which existing users can use. This ensures that repeat shoppers can also benefit from significant discounts on their purchases. Keep an eye out for special promotions and offers that are periodically available to enhance your shopping experience.
    • New users at Temu receive a $100 discount on orders over $100 Use the code [aci789589] during checkout to get Temu Coupon Code $100 off For New Users. Yes, Temu offers $100 off coupon code “aci789589” for first-time users. Temu 100% Off coupon code "aci789589" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “aci789589” for first-time users. You can get a$100 bonus plus 30% off any purchase at Temu with the$100 Coupon Bundle at Temu if you sign up with the referral code [aci789589] and make a first purchase of$50 or more. The Temu $100 Off coupon code (aci789589) will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes Temu offers $100 Off Coupon Code “aci789589” for First Time Users. Yes, Temu offers $100 off coupon code {aci789589} for first-time users. You can get a $100 bonus plus 100% off any purchase at Temu with the $100 Coupon Bundle if you sign up with the referral code [aci789589] and make a first purchase of $100 or more. If you are who wish to join Temu, then you should use this exclusive Temu coupon code $100 off (aci789589) and get $100 off on your purchase with Temu. You can get a $100 discount with Temu coupon code {aci789589}. This exclusive offer is for existing customers and can be used for a $100 reduction on your total purchase. Enter coupon code {aci789589} at checkout to avail of the discount. You can use the code {aci789589} to get a $100 off Temu coupon as a new customer. Apply this Temu coupon code $100 off (aci789589) to get a $100 discount on your shopping with Temu. If you’re a first-time user and looking for a Temu coupon code $100 first time user(aci789589) then using this code will give you a flat $100 Off and a 90% discount on your Temu shopping. Temu $100% Off Coupon Code "aci789589" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Temu coupon code$100off-{aci789589} Temu coupon code -{aci789589} Temu coupon code$50 off-{aci789589} Temu Coupon code [aci789589] for existing users can get up to 50% discount on product during checkout. Temu Coupon Codes for Existing Customers-aci789589 Temu values its loyal customers and offers various promo codes, including the Legit Temu Coupon Code (aci789589]) or (aci789589), which existing users can use. This ensures that repeat shoppers can also benefit from significant discounts on their purchases. Keep an eye out for special promotions and offers that are periodically available to enhance your shopping experience.
    • New users at Temu receive a $100 discount on orders over $100 Use the code [aci789589] during checkout to get Temu Coupon Code $100 off For New Users. Yes, Temu offers $100 off coupon code “aci789589” for first-time users. Temu 100% Off coupon code "aci789589" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “aci789589” for first-time users. You can get a$100 bonus plus 30% off any purchase at Temu with the$100 Coupon Bundle at Temu if you sign up with the referral code [aci789589] and make a first purchase of$50 or more. The Temu $100 Off coupon code (aci789589) will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes Temu offers $100 Off Coupon Code “aci789589” for First Time Users. Yes, Temu offers $100 off coupon code {aci789589} for first-time users. You can get a $100 bonus plus 100% off any purchase at Temu with the $100 Coupon Bundle if you sign up with the referral code [aci789589] and make a first purchase of $100 or more. If you are who wish to join Temu, then you should use this exclusive Temu coupon code $100 off (aci789589) and get $100 off on your purchase with Temu. You can get a $100 discount with Temu coupon code {aci789589}. This exclusive offer is for existing customers and can be used for a $100 reduction on your total purchase. Enter coupon code {aci789589} at checkout to avail of the discount. You can use the code {aci789589} to get a $100 off Temu coupon as a new customer. Apply this Temu coupon code $100 off (aci789589) to get a $100 discount on your shopping with Temu. If you’re a first-time user and looking for a Temu coupon code $100 first time user(aci789589) then using this code will give you a flat $100 Off and a 90% discount on your Temu shopping. Temu $100% Off Coupon Code "aci789589" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Temu coupon code$100off-{aci789589} Temu coupon code -{aci789589} Temu coupon code$50 off-{aci789589} Temu Coupon code [aci789589] for existing users can get up to 50% discount on product during checkout. Temu Coupon Codes for Existing Customers-aci789589 Temu values its loyal customers and offers various promo codes, including the Legit Temu Coupon Code (aci789589]) or (aci789589), which existing users can use. This ensures that repeat shoppers can also benefit from significant discounts on their purchases. Keep an eye out for special promotions and offers that are periodically available to enhance your shopping experience.
  • Topics

×
×
  • Create New...

Important Information

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