Posted February 3, 201510 yr is there a way to "inject?" my own update method into existing mobs like skeletons or creepers, while still being loaded by forge, i have a piece of armor that i want them to recognise, and not attack the person with it, and even protect them, i know i could use entityupate event to check if its currently targeting a player with the helm and cancel it, but this will happen allot, im guessing it will be more efficent to either replace all skeletons for example that spawn in with a custom skeleton that has the changed ai, or inject a custom method into the skeleton before the game starts. is there a way to do the method replacement as, or another way of doing thing, thanks for the help. <iframe src="http://widget.mcf.li/mc-mods/minecraft/225523-gnomgnoms-utils" width="100%" style="border: none;"></iframe>
February 3, 201510 yr Author im new to reflection, im aware you can get Objects of methods in classes, maybe you can replace them with that, but im sure i will still have to do this for each entity when it spawns, which will be fine i guess. <iframe src="http://widget.mcf.li/mc-mods/minecraft/225523-gnomgnoms-utils" width="100%" style="border: none;"></iframe>
February 3, 201510 yr You really don't need to use reflection... Simply register with LivingUpdateEvent, which is triggered each time the entity is updated. There are lots of other events, here is a list http://www.minecraftforge.net/wiki/Event_Reference A little tip: When it comes down to reflection, stop, think and change the way you are coding. Reflection might be nice and powerful but also slow down the JVM drastically. I require Java, both the coffee and the code
February 3, 201510 yr What you are talking about is NOT Reflection, it's ASM (manipulating bytecode), and NO - you don't need it. Use Forge Events: LivingSetAttackTargetEvent Get event.target, if target instaceof EntityPlayer then checks his helmet, if helmet == yours set target to null. Note: I've never used it, and I am not quite sure if it will work - setting terget to null might only null event reference not the actual target (I am not in IDE). Just try and see if it ll work. As to "protecting them" - it's quite harder part, you will need to add new AI stuff and save player to be protected in IExtendedEntityProperties. I don't event know if you can add AI to vanilla mob (never done that). If not - you are better of extending mob and removeing normal one spawning from all biomes or cancel their spawn event. 1.7.10 is no longer supported by forge, you are on your own.
February 3, 201510 yr Author yea, i was aware of the events, but setting the attackee to null will be happening constantly if its the only player aound, was hoping to not add to the performance issues minecraft has when many mods are doing things like this all the time. well, ill use the event then. <iframe src="http://widget.mcf.li/mc-mods/minecraft/225523-gnomgnoms-utils" width="100%" style="border: none;"></iframe>
February 3, 201510 yr yea, i was aware of the events, but setting the attackee to null will be happening constantly if its the only player aound, was hoping to not add to the performance issues minecraft has when many mods are doing things like this all the time. well, ill use the event then. I work in this kind of stuff and from experience on working with big projects manipulating byte code or using reflection will slow down performance much much more then executing a few extra lines of code here and there. Use the events, that's what they are made for. Comparison Setting something to null is maybe 3 instructions to the CPU, when reflection is more likely to be in the hundreds I require Java, both the coffee and the code
February 3, 201510 yr I generally try to avoid reflection or code manipulation altogether when I have access to available fields or events. Comparison Setting something to null is maybe 3 instructions to the CPU, when reflection is more likely to be in the hundreds Not true, see above. The JVM people are smart people, much smarter than any of us here. They know how to make this shit fast. Yeah I pulled those values out of my posterior, and though the code will likely execute at a similar speed once compiled it's not a recommend practice. as Ernio said, you could simply stop the normal zombie from spawning and create your own zombie based on the vanilla class file by extending it, I'd still recommend the events. I require Java, both the coffee and the code
February 3, 201510 yr This might be useful, it's a tutorial on how to work with forge events: http://jabelarminecraft.blogspot.com/p/minecraft-forge-172-event-handling.html I require Java, both the coffee and the code
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.