Posted July 19, 201312 yr Hello Guys! I want to add a Mana-bar available for each player. It should have a maximum value of 250 Mana and should be rendered above the hunger-bar. The Mana bar should regenerate by one each second and should be increased by about 20 for each punch with a sword. Does anybody know, how to do this? Additional question: How can I change the maximum Player Health to 250 and how can I change the Armor-calculator (I want to use another Formula then Armor*0.04)? Please ask, if I should give further information! http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
July 19, 201312 yr Hello Guys! I want to add a Mana-bar available for each player. It should have a maximum value of 250 Mana and should be rendered above the hunger-bar. The Mana bar should regenerate by one each second and should be increased by about 20 for each punch with a sword. Does anybody know, how to do this? you're gonna have to make a handler for RenderGameOverlayEvent to render the mana, to make it regenarate you're goign to need a TickHandler that ticks every second and regenerate the mana there. to store the mana you're goign to need some sort of data structure (hashmap) and store a relation between the players and the mana (String -> float[]{min, max} OR EntityPlayer -> float[]{min, max}) to restore on hit just to a PlayerInterractEvent handler, you will also need to send the update on mana via packet handling How can I change the maximum Player Health to 250 either make a base class change (making your mod incompatible) or do use a EntityLivingHurtEvent handler (or wtv its called) and transform the damage there (aka if you receive 5 dmg the end damage would be 5/250 of max hp) youll also need a RenderGameOverlayEvent handler for this as steve HUD health is based on a 20 basis (20 half heart) or you could just cancel the damage if its not close enough to be 1 after transform (aka if you receive 5 you would take technicly 5/250 of your hp but that not even 1/20, so just make the dmg zero and update whenever the damage pass a 1/20 threshold) how can I change the Armor-calculator (I want to use another Formula then Armor*0.04)? same as health, make basechange OR deal with it in a event handler ps:you're trying to do a lot... do what you want how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
July 19, 201312 yr Author Yes, I'm trying to do a lot... I'll try all the possibilities you mentioned (THANKS) and come back with errors PS: I've got a laarge project... I've been planning this for two months now... http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
July 19, 201312 yr no i mean seriously, watchout to not be overwhelmed because im doing something similar and i know you will find a loooooot of bug good luck have fun how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
July 19, 201312 yr I'll just drop this here: http://www.minecraftforge.net/wiki/Gui_Overlay *sneaks away* If you guys dont get it.. then well ya.. try harder...
August 25, 201312 yr Author you're gonna have to make a handler for RenderGameOverlayEvent to render the mana, to make it regenarate you're goign to need a TickHandler that ticks every second and regenerate the mana there. to store the mana you're goign to need some sort of data structure (hashmap) and store a relation between the players and the mana (String -> float[]{min, max} OR EntityPlayer -> float[]{min, max}) to restore on hit just to a PlayerInterractEvent handler, you will also need to send the update on mana via packet handling The rendering works now after a lot of problems But I don't manage to add the real variable. And I don't understand whant you mean with (String -> float[]{min, max} OR EntityPlayer -> float[]{min, max}) Could you please give me an example or something else? @Mazetar: Thanks.. http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 25, 201312 yr Map usage for newbie: Map<Key,Value> map = new HashMap();//Initialization with an HashMap and generics, where Key and Value are any Object you want map.put(key,value);//adds a key->value couple, or replace the value linked by the key Value val = map.get(key);//gets a value from a key
August 26, 201312 yr Author Map usage for newbie: Map<Key,Value> map = new HashMap();//Initialization with an HashMap and generics, where Key and Value are any Object you want map.put(key,value);//adds a key->value couple, or replace the value linked by the key Value val = map.get(key);//gets a value from a key Thanks, I now have the variables for all the players. But how can I save the values so that you have the same value if you relog? http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr Author Thank you. This works for now. But I got another Problem. How can I create a "start value" for these variables? If I try to get access there is a null-pointer-exception, so I think the value is null. But how can I set a start value (example: if you first spawn you get 20 points, then if there is a saved value, you get this one) http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr Author Sorry, I edited my question just when you answered http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr Author I have these code sections: package mod.classes.handler; import mod.Main; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; public class ExtendedProperties implements IExtendedEntityProperties { public static final String identifier = Main.modID + "_properties"; public int mana; @Override public void saveNBTData(NBTTagCompound compound) { compound.setInteger("mana", mana); } @Override public void loadNBTData(NBTTagCompound compound) { mana = compound.getInteger("mana"); } @Override public void init(Entity entity, World world) { mana = 20; } } package mod.classes.handler; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.event.EventPriority; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.EntityEvent.EntityConstructing; import net.minecraftforge.event.entity.player.EntityInteractEvent; public class EntityHandler { @ForgeSubscribe(priority=EventPriority.NORMAL) public void onEntityConstructing(EntityConstructing e) { if (e.entity instanceof EntityPlayerMP) e.entity.registerExtendedProperties(ExtendedProperties.identifier, new ExtendedProperties()); } } And if I try this I get a null-pointer exception: PlayerMana = ((ExtendedProperties) this.mc.thePlayer.getExtendedProperties(ExtendedProperties.identifier)).mana http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr Author Of course it will give you a NPE because you check for EntityPlayerMP which is the serverside player. Only check for EntityPlayer. There's no NPE any more But, when I try to change the values of Extended Properties in events nothing happens. What's wrong? @ForgeSubscribe(priority=EventPriority.NORMAL) public void onEntityInteract(PlayerInteractEvent e) { ((ExtendedProperties)e.entityPlayer.getExtendedProperties(ExtendedProperties.identifier)).mana -= 1; System.out.println("Subtracted 1 mana"); //Just for controlling... } On the other hand: Isn't it better to save the values on server side? If you join a Server from different PCs, you always have the same Items. http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr On the other hand: Isn't it better to save the values on server side? If you join a Server from different PCs, you always have the same Items. well ... yeah.... you are supposed to , you cant save it client side anyway But, when I try to change the values of Extended Properties in events nothing happens. What's wrong? whats suppose to happen anyway ? how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 28, 201312 yr Author And how can I save the values at ServerSide, but also get access in gui-handlers via Minecraft.getMinecraft().thePlayer (or different?) All in all: - I want to save the variables at server side - I need access to the variables from events with an instance of EntityPlayer as well as from Gui-handlers (I don't know if it's necessary to create a new instance of EntityPlayer for this, and even if, I don't know how) How can I do this? http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr well extended properties get saved automaticly (or you need to implement read/write to nbt method in your IExtendedProperties) and for client access, youll have to use packets to send the values how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 28, 201312 yr Author Packets.. OK... Never worked with them before. How can I do this? http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr start by looking at the wiki, theres a couple of tut on them how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 28, 201312 yr Author I looked at the wiki, but I couldn't find a Tut for this: The following should happen: [*]OnPlayerInteract works [*]Send Packet "Mana" with value 1 works too [*]Recieve Packet also ok without problems [*]Add 1 to the players Mana How can I do this last step? I don't know how to find the right player or how to get a list of them http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr client side you DONT want a list of all players, store the mana in the client proxy and only for local player how to debug 101:http://www.minecraftforge.net/wiki/Debug_101 -hydroflame, author of the forge revolution-
August 28, 201312 yr Author store the mana in the client proxy and only for local player OK, but how can I save this with IExtendedProperties? For this I need a instance of EntityPlayer. http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 28, 201312 yr An abstract Player is given by the IPacketHandler method, cast it to EntityPlayer.
August 29, 201312 yr Author @GotoLink: Thx, that was very helpful! OK... And how can I get an Instance of EntityPlayer in the method @ForgeSubscribe onRenderGameOverlay(RenderGameOverlayEvent e) ... http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 29, 201312 yr Author OK, I think i have to summarize everything i want, or nothing make sense anymore.. Thanks to all of you who tried to help me till now.. I want to add Some Variables (at least one) for each player They have to be saved at server-side I need access to the value of the variables from: Handlers like onRenderGameOverlay (only mc.thePlayer) Handlers like onEntityInteract (special instance of EntityPlayer) Methods like onItemUse (special instance of EntityPlayer) [*]The Variables need a start-value when you first join a server or respawn http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
August 29, 201312 yr Register a IExtendedEntityProperties on player with EntityConstructionEvent. All data in it will be saved to server with saveNBTData. I would recommend using EntityJoinWorldEvent to send a packet from server to client, describing all variables at start, to sync client with the server. This would be a one time "description" packet. Now that the data is synced, you can read it the same on both sides with a player instance. player.getExtendedProperties(id)... Changing the values would require sending "change" packets to maintain sync.
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.