Jump to content

Help with Mod Creating


DJackR

Recommended Posts

Hi guys, i started recently programming in java. I cannot create big application but i'm confindent in creating little one. Since everyone says that to make mods in minecraft you don't need much programming knowledge i've tried to start making minecraft mods.

The problem is that every tutorial that i find online takes everything for sure and do not guide me through the process. I don't want just to copy and paste lines of code but i want to understand them. Everyone online just mention a forge method without explaining it and 

everyone just tell you how to make blocks, items and materials. What if i want to make a complex sorting system or if a want to make mobs with artificial intelligence or stuff like that. Do I just have to go through all of that boring forge documentation to get something started ?

 

Thanks a lot               -DJackR

Edited by DJackR
Link to comment
Share on other sites

37 minutes ago, UKMinecrafted said:

I would recommend checking out this person and then trying to replicate the same results with your own things, then stray from it a bit, make little changes and keep working until you reach where you want to be

No.

HarryTalks is one of the worst tutorials out there as it teaches you bad practices and cargo-cult programming.

 

7 hours ago, DJackR said:

I don't want just to copy and paste lines of code but i want to understand them. Everyone online just mention a forge method without explaining it and 

everyone just tell you how to make blocks, items and materials.

This is a common problem of youtube tutorials.

Personally, I would recommend text-based examples such as https://github.com/TheGreyGhost/MinecraftByExample and https://github.com/Cadiboo/Example-Mod, both of which explained in details about what everything does.

Edited by DavidM
  • Thanks 1

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Link to comment
Share on other sites

7 hours ago, DavidM said:

No.

HarryTalks is one of the worst tutorials out there as it teaches you bad practices and cargo-cult programming.

 

This is a common problem of youtube tutorials.

Personally, I would recommend text-based examples such as https://github.com/TheGreyGhost/MinecraftByExample and https://github.com/Cadiboo/Example-Mod, both of which explained in details about what everything does.

I...half agree. I've begun to dislike such people for just teaching people to abuse inheritage and using static registry (which is fine if you're a beginner and doing a small-scale mod that just adds like a dozen items or something) but in general, static registry is...NO BAD! It took me a while up to now to shake those habits.

However, I am of the opinion if you ignore the inheritage with custom-classes and static registers, such tutorials are okay...to maybe get your foot in. Even just for simple stuff like ore or structure gen. But you should also learn from written/text tutorials, Minecraf'ts src code (even if ...ahem, Mojang is "lets use deprecated methods, trolololol!" and "if it ain't broke, don't fix or improve it") or any available src code or open source code. Open source code is wonderfuuul to learn from.

  • Like 1
Link to comment
Share on other sites

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

    • So, lately my modloader (curseforge) has been loading 162 mods instead of the 97 that my modpack only has, appart of that, when I try to join onto my public server the curseforge logs just starts spamming "OpenGL debug message: id=1280, source=API, type=ERROR, severity=HIGH, message='GL error GL_INVALID_ENUM'" and just freezes, my drivers are up to date, I've reinstalled curseforge, same with minecraft launcher, the java is updated, I've got enough ram and I got no viruses, Long after all this happened, my game could enter my online server and it didn't register as many mods, even my game was running at 40 fps, now I can't even play multiplayer, and when I try singleplayer, it goes about 20 fps to 10
    • It does but I'm struggling to see how to make it work in my recipe? (Its structure is the same as OP's, with a serializer subclass)
    • That looks pretty cool, nice!   Sure, so looking at that JSON file I posted, I pretty much made a record class for each "custom" data type in that JSON. The Input is a good example of why ``` "inputs": [ { "ingredient": { "item": "relativedimensions:aberrant_shard" }, "count": 8 } ], ``` So here's the inputs, it's an array, which we can use the Codec builder's builder.listOf to define an array. Each Item is of some arbitrary object with keys "ingredient" (which we know is an Ingredient) and a "count" which is an int. You don't have to have an intermediate class to map this to necessarily but I found that it's just easier to see the data that way, hence the 'ParticleReboundIngredient' represents one of these inputs.   Let me know if that makes sense or not. 
    • Pretty much, although all the recipes im planning to make on it are shapeless. The idea is that the chamber uses energy to "fuse" the items in each of the center slots together, in this case an ingot. The two slots at the sides are fuel. (A special kind of wood in this case). Here is an image of the interface just for reference (The center slot is the output)   As for the code- Can you elaborate a little bit on it? Seeing three different record classes has confused me a lot. (Elaborate as in why make them in three different records. I understand the code itself more or less)
    • Hello im trying to make a mod and the past few days GSON has almost killed me, when i export the mod and then launch it through minecraft launcher i get java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)Lcom/google/gson/JsonElement; i have literally tried everything here is my build config   dependencies { minecraft("com.mojang:minecraft:1.8.9") mappings("de.oceanlabs.mcp:mcp_stable:22-1.8.9") forge("net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9") compileOnly("cc.polyfrost:oneconfig-1.8.9-forge:0.2.2-alpha+") shadowImpl("cc.polyfrost:oneconfig-wrapper-launchwrapper:1.0.0-beta+") { isTransitive = false exclude(module = "gson") } shadowImpl("org.spongepowered:mixin:0.7.11-SNAPSHOT") { isTransitive = false exclude(module = "gson") } annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT") shadowImpl("org.javassist:javassist:3.15.0-GA") { isTransitive = false exclude(module = "gson") } shadowImpl("com.neovisionaries:nv-i18n:1.28") { isTransitive = false exclude(module = "gson") } shadowImpl("org.apache.commons:commons-lang3:3.4") { isTransitive = false exclude(module = "gson") } shadowImpl("org.apache.httpcomponents:httpcore:4.4.5") { isTransitive = false exclude(module = "gson") } compileOnly("com.google.code.gson:gson:2.8.6") { isTransitive = false } configurations.all { resolutionStrategy { force("com.google.code.gson:gson:2.8.6") } } shadowImpl(fileTree( mapOf( "dir" to "libs", "include" to listOf("*.jar"), "exclude" to listOf( "asm", "asm-commons", "asm-tree", "gson", "unspecified", "nv-i18n" ) ) )) }  
  • Topics

×
×
  • Create New...

Important Information

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