I am trying to add a method to a Minecraft source file, but I have to figure out how to do it without actually editing the source files, since it is illegal to redistribute source files which would have to be included in the mod I am creating. I need to add the method setInPortalZub() to the file "EntityPlayer located in net.minecraft.entity.player. I am using the MCP / Minecraft Forge API. I have tried creating an instance of EntityPlayer, but I'm not exactly sure how that would work.
How do I add a method to a source file without editing the source file?
2.8k Views Asked by Andrew Graber At
1
There are 1 best solutions below
Related Questions in JAVA
- Add image to JCheckBoxMenuItem
- How to access invisible Unordered List element with Selenium WebDriver using Java
- Inheritance in Java, apparent type vs actual type
- Java catch the ball Game
- Access objects variable & method by name
- GridBagLayout is displaying JTextField and JTextArea as short, vertical lines
- Perform a task each interval
- Compound classes stored in an array are not accessible in selenium java
- How to avoid concurrent access to a resource?
- Why does processing goes slower on implementing try catch block in java?
- Redirect inside java interceptor
- Push toolbar content below statusbar
- Animation in Java on top of JPanel
- JPA - How to query with a LIKE operator in combination with an AttributeConverter
- Java Assign a Value to an array cell
Related Questions in MINECRAFT
- Java sending handshake packets to minecraft server
- Minecraft Forge event.entity vs event.player
- Unsupported major.minor version 52.0 error when my spigot/bukkit plugin is run on the server
- Minecraft Modding Forge .isRemote() and worldObj
- My bukkit plugin won't load
- Minecraft Get the object from a list and be abbe to manipulate it
- Minecraft plugin sign reading
- Custom Armor Minecraft Forge 1.8 Armor Model Texture
- scala minecraft forgemod 'gradle runClient' gives runtime exception
- Java Minecraft Plugin command not working
- Minecraft plugin player name error
- Minecraft Plugin setMotd()
- How to load id list from config.yml?
- NullPointerException when trying to open SQLite connection
- Minecraft plugin WorldEdit get region
Related Questions in MINECRAFT-FORGE
- Minecraft Error Code
- minecraft forge doesnt seem to call postInit
- Minecraft Forge event.entity vs event.player
- Minecraft Modding Forge .isRemote() and worldObj
- scala minecraft forgemod 'gradle runClient' gives runtime exception
- Minecraft Forge Mod blocks not showing
- No instance(s) of type variable(s) exist so that BlockBase confirms to BlockOre
- Forge SidedProxy is deprecated
- How to register an ItemBlock in Minecraft Forge?
- Error with gradlew setupDecompWorkspace: Could not reserve enough space
- Minecraft crashes when I try to add textures to my Block | Forge 1.12.1
- Why isn't my Block showing up | Minecraft Forge 1.12.1
- My custom command in Forge 1.12.1 is not working
- How to send a title in Forge 1.12.1
- Error trying to start Minecraft Forge by command
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
You are about to enter the wonderful and frustrating world of coremods! Coremods in FML (Forge ModLoader) are the "easiest" way to inject arbitrary code into vanilla Minecraft classes without having to distribute modified versions of those class files.
This is accomplished by utilizing the ASM Bytecode manipulation framework released by
ObjectWeb. This framework allows you to write java code that can read and manipulate the bytecode of a class at load time.It is impossible for me to explain every step you must take to accomplish this feat, so instead I will post links to my own coremod injection classes and attempt to give an explanation of each.
Here is the
CorePluginclass.The
CorePluginclass tells Forge ModLoader where to find your transformer class that does the actual code injection.This class is found by FML based on your
.jarfile manifest:FMLCorePluginspecifies the fully qualified path to your CorePlugin class. If your.jarfile is to contain a regular@Modstyle Forge ModLoader mod class as well you will also need to specifyFMLCorePluginContainsFMLMod(although the expected value is unknown; I don't think it actually matters what you put for the value there, but the key must be there).Now for the fun part... the actual bytecode transformer. Here is a link to the transformer for Treecapitator
Without going into too much detail, I wrote this class to be able to handle execution both in Eclipse as well as in "production". That's why there are two
HashMaps; one for MCP execution and one for obfuscated execution. Every class that gets loaded is first passed into thetransform()method. The code checks to see if it's a class we want to transform and transforms it if it is.The end result of implementing all this is that whenever an instance of
ItemInWorldManageris created the transformer runs and adds a single line to a specific location within theremoveBlock()method. This single line serves as a cheap block break hook to allow for code to execute when a player breaks a block.Tips:
I hope that helps!
EDIT: fixed the broken links to reference an old branch that still contains the classes.