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
- I need the BIRT.war that is compatible with Java 17 and Tomcat 10
- Creating global Class holder
- No method found for class java.lang.String in Kafka
- Issue edit a jtable with a pictures
- getting error when trying to launch kotlin jar file that use supabase "java.lang.NoClassDefFoundError"
- Does the && (logical AND) operator have a higher precedence than || (logical OR) operator in Java?
- Mixed color rendering in a JTable
- HTTPS configuration in Spring Boot, server returning timeout
- How to use Layout to create textfields which dont increase in size?
- Function for making the code wait in javafx
- How to create beans of the same class for multiple template parameters in Spring
- How could you print a specific String from an array with the values of an array from a double array on the same line, using iteration to print all?
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Accessing Secret Variables in Classic Pipelines through Java app in Azure DevOps
- Postgres && statement Error in Mybatis Mapper?
Related Questions in MINECRAFT
- how to add the button onto the furnace GUI in minecraft
- Minecraft Mod not adding content
- Cannot get content from HashMap in Java/Bukkit
- I am working on a fabric mod and I have issues with the ClientOnInitialize method
- how to add the button onto the mc mod without errors?
- Plugin I made reports java.lang.NoClassDefFoundError
- Minecraft Session ID
- Why my imports in minecraft code for mod on Forge don't work?
- Minecraft Bedrock Scripting API Error world.beforeEvents.chatSend.subscribe
- A problem occurred configuring root project(minecraft mod)
- Resourcepack loads textures but not models
- Nested mappings are not allowed in compact mappings - Working on .yml for mcmmo
- How to update victim's scoreboard inside onPlayerDeath in below piece of code
- MinecraftClient.getInstance().player returns null
- Minecraft Forge GUI item movement Issue
Related Questions in MINECRAFT-FORGE
- Changes made to forge minecraft mod not appearing in test client
- Forge 1.20.4 MDK fails when building gradle
- Resourcepack loads textures but not models
- Minecraft Forge GUI item movement Issue
- How to correctly load the javacv library in Minecraft Forge 1.20?
- I can't connect to a specific server, but the error message is very vague
- How to render a "Fake" block, Forge 1.20.1
- 'Missing mods.toml file' on a game crash log for a minecraft modpack
- Minecraft modifying private variables
- I am trying to port a 1.18.2 Minecraft mod to 1.19.2 but IntelliJ says "Could not resolve dependency: net.minecraftforge:forge:1.19.2:userdev"
- Can't get trees to generate properly in my mod 1.16.5
- Third-party java libraries when creating minecraft mods
- java.lang.RuntimeException: Could not execute entrypoint stage 'client' due to errors, provided by 'modid'
- Why Minecraft 1.12.2 crash when i execute runClient without touching the default code?
- Minecraft modding error: cannot find symbol class & cannot find variable class
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 # Hahtags
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.