Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Should I just switch to Java?


ctbe
 Share

Recommended Posts

The answers I look on this question would be answers that would be mostly based on opinion. But if you have predictable facts, that would be awesome.

 

Yesterday I found out my project didn't compile and had to use Scorg to be able to compile it. I was thinking of re-writing it from scratch, but this time using Java because of fear that Scorg may stop being available in the future. I have been using Scala because I had many immutable collections which were providing me a slightly better performance although that wasn't always the case. In order to perform some operations, sometimes I had to make conversions from Scala collections to Java collections and those little pieces of code reduced my performance a little as well. Other times it was simply impossible to use some features of Forge due to the requirement of the use of static variables and/or classes which require you to do a little of workaround to get an equivalent in Scala. For example, I was unable to use the new @Config system with Scala. I had to use Java because no workaround got me a working config menu for my mod. Maybe if I had fiddled a little more with the code I could have gotten something working, but it was growing too ugly for the Scala style so I decided to use Java and combine it in the project. Previously I also had problems when using IProperty due to boxing concepts. I can't use Enums, but instead use objects that extends Enumeration. I cringe everytime I have to use equivalents to statics, but at the end have no options because of the way minecraft and forge were made.

 

Something tells me I should just use Java which is what minecraft and forge were made with and save me all the workarounds and pain simply because I like the Scala style more and it offers me just a slight performance in some specific cases (in ocassions a cleaner look of code too).

 

At this point I am trying to decide what to do. Simply use Java or stick to Scala and risk having to do many workarounds in the future to compile my project in case Scorg becomes unavailable or other kinds of workarounds to be able to use some features of Forge. What are your opinions, what would you do?

Link to comment
Share on other sites

I assume you used Scala because you did not want to write Java, because nobody really likes writing Java, right? I mean, most of the time it's ok, but really, you have better ways to spend your time than to write 20 getters and setters every day.

Now, if you want to keep using a "nice language" but still have very great Java interoperability, I suggest you try Kotlin.

 

Ok, now that this JetBrains commercial is over, it depends. Writing a custom language adapter is not hard, so if Scorg goes away you could easily get your mod loading again by writing a bit of "glue code".

If you really do like Scala and want to keep programming in it, then I'd suggest you do that.

  • Like 2
Link to comment
Share on other sites

3 hours ago, diesieben07 said:

I assume you used Scala because you did not want to write Java, because nobody really likes writing Java, right?

Oh no, it wasn't because I didn't want to write Java. I was okay with it :). I was expecting to make a mod which when I finished planning it, it required me to use a lot of Collections, and with that expectation, I knew I could use Scala (from previous experience) to my advantage and their immutable collections for a little bit of additional performance if I were to program it correctly. But after writing a good amount of code for my mod in Scala I was like "Ugh, going back to Java". 

 

Right now yes, though I'm okay with it, I'm reluctant to use Java, but at first no.

3 hours ago, diesieben07 said:

I mean, most of the time it's ok, but really, you have better ways to spend your time than to write 20 getters and setters every day.

This is very true xD.

 

Thanks for the Kotlin suggestion. I'll look into it. Because my mod is still small, I might as well re-write it in Java before it grows further and use the default language most of the community uses. That way I'm more in sync whenever I have a doubt.

 

Thanks for the feedback, much appreciated.

Link to comment
Share on other sites

  • 3 weeks later...

A lot of the complaints about Java are sourced from it's verbosity - as diesieben07 mentioned. But that verbosity is also the reason why Java is so popular in the enterprise sector - it makes large projects and collaboration MUCH easier. While it's of course a good idea to write lots of inline comments, Java's main benefit is that it's self-documenting. But again, others might consider it as "too verbose".

 

If you plan on making an opensource mod and like collaboration, I think you really should stick with Java. To save time on the verbosity and repetition, use Project Lombok (it's essential for me these days). Also if you use Eclipse, switch to IntelliJ IDEA - I was resistant to switch for a long time, but after a few days of configuring and learning I am VERY glad I swallowed my pride and took the time to switch and learn.

 

I know Kotlin is gaining ground, and is even now an officially supported Android development language, but sticking to relatively obscure languages will keep your contribution level similarly obscure. I tried to get into Kotlin but I honestly didn't see the point in partitioning my language focus for it's minor benefits. No companies out there will expect you to know it.

 

I personally don't care much for Kotlin. The null-phobia is a reactionary one that is yet-another level of abstraction that isn't necessary IMO and doesn't always provide NPE safety much anyway. But I'm the kind of guy who has my IDE warn me on fields that aren't explicitly declared to null :) Also it got rid of the ternary operator, and various other little things that just seem counter-productive. But I have a C++ background so yeah. It's obviously loved by a lot of people but it just isn't for me.

 

Java gets a lot of hate, and I've had my fair share of annoyances with it (I started working with C# a while ago and it's really a fantastic language) but I always come back to Java mostly because of the massive community, availability of resources and the volume of capable programmers. It's very easy for any programmer to grasp any Java that even loosely follows the standards and conventions (which is exactly why some criticize it as being too verbose).

 

In summary: I suggest Java with Project Lombok if you want to be community-friendly and keep your commercial-level programming well practiced. Almost all of the major issues people have with Java are solved with Lombok and Java 8's new functional programming additions (i.e. lambda's and method references).

Edited by CosmicDan
  • Like 1

Windows software, Android hacking, and other curios

Link to comment
Share on other sites

1 hour ago, CosmicDan said:

While it's of course a good idea to write lots of inline comments, Java's main benefit is that it's self-documenting. But again, others might consider it as "too verbose".

Sorry, but I have to disagree with this. A lot.

There is nothing "self-documenting" about this:

public class StupidPojo {
    
    private final String foo;

    public StupidPojo(String foo) {
        this.foo = foo;
    }

    public String getFoo() {
        return foo;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        StupidPojo that = (StupidPojo) o;

        return foo != null ? foo.equals(that.foo) : that.foo == null;
    }

    @Override
    public int hashCode() {
        return foo != null ? foo.hashCode() : 0;
    }
}

 

It's noisy as hell, difficult to maintain and you don't want to read it, do you? Oh and worst of all, this is as simple as it gets.

Compare that to Kotlin:

data class StupidPojo(val foo: String)


If you ask me which of those two is better at self-documentation, I would pick the Kotlin version. You can clearly see "this is a class that has a property foo". Where as in the Java version your brain has to first get rid of all that noise.

 

1 hour ago, CosmicDan said:

To save time on the verbosity and repetition, use Project Lombok (it's essential for me these days).

Lombok is a terrible hack based on unsupported Compiler (and IDE, at least in Eclipse) internals. It's also abusing Annotations in terrible ways. I personally would not want to base my big "enterprise-y" application on such a sandy ground.

 

1 hour ago, CosmicDan said:

The null-phobia is a reactionary one that is yet-another level of abstraction that isn't necessary IMO and doesn't always provide NPE safety much anyway.

It's not necessary a phobia. null is a great tool, especially in Kotlin (more so there than in Java!). Kotlin makes null what Java's (stupid and clunky) Optional should have been. Fact is, you have "there is nothing here" values all over the place, and dealing with those properly is just great.

 

myObject?.owner?.name?.toLowerCase() ?: "no owner"

Try writing that in Java without losing your mind and still getting the point across.

 

The "problem" with Kotlin is that you look at the language for a few minutes and go "Oh, yeah, neat. But I can do that in Java, too". You really don't notice the tremendous benefits it brings to your code until you've written in it for like 2-3 weeks. Then you just look at your code and go "how did I ever live without this?".

But of course, to each their own.

Link to comment
Share on other sites

1 hour ago, diesieben07 said:

Sorry, but I have to disagree with this. A lot.

There is nothing "self-documenting" about this:


public class StupidPojo {
    
    private final String foo;

    public StupidPojo(String foo) {
        this.foo = foo;
    }

    public String getFoo() {
        return foo;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        StupidPojo that = (StupidPojo) o;

        return foo != null ? foo.equals(that.foo) : that.foo == null;
    }

    @Override
    public int hashCode() {
        return foo != null ? foo.hashCode() : 0;
    }
}

 

It's noisy as hell, difficult to maintain and you don't want to read it, do you? Oh and worst of all, this is as simple as it gets.

Compare that to Kotlin:


data class StupidPojo(val foo: String)


If you ask me which of those two is better at self-documentation, I would pick the Kotlin version. You can clearly see "this is a class that has a property foo". Where as in the Java version your brain has to first get rid of all that noise.

 

Lombok is a terrible hack based on unsupported Compiler (and IDE, at least in Eclipse) internals. It's also abusing Annotations in terrible ways. I personally would not want to base my big "enterprise-y" application on such a sandy ground.

 

It's not necessary a phobia. null is a great tool, especially in Kotlin (more so there than in Java!). Kotlin makes null what Java's (stupid and clunky) Optional should have been. Fact is, you have "there is nothing here" values all over the place, and dealing with those properly is just great.

 


myObject?.owner?.name?.toLowerCase() ?: "no owner"

Try writing that in Java without losing your mind and still getting the point across.

 

The "problem" with Kotlin is that you look at the language for a few minutes and go "Oh, yeah, neat. But I can do that in Java, too". You really don't notice the tremendous benefits it brings to your code until you've written in it for like 2-3 weeks. Then you just look at your code and go "how did I ever live without this?".

But of course, to each their own.

Lombok *is* used in the enterprise, is very mature (been around longer than Kotlin) and is endorsed by Oracle themselves. Of course, JetBrain's Kotlin is a direct competitor to Oracle's Java so it's not all surprising you've picked a side here. But if I were with a company that, for whatever strange reason, had a policy against Lombok, then I wouldn't be too fond of Java either.

 

I did write out more but decided to snip it - I don't really have strong opinions about this. Just stating that I don't see the point in learning Kotlin *personally* because it has no professional application yet. I'm not in love with Java but it's benefits outweigh the flaws in my use case.

EDIT: I want to iterate that I wasn't so much touting Java as technically superior to Kotlin, but rather (with Lombok) it's not THAT bad, and you can be sure to get much more support for it. Technical superiority isn't *everything*. I do find Kotlin interesting, though to me it seems not worth the time investment nor dealing with relatively obscurity, if outside of Android and maybe RAD. At least for the moment. I'll be keeping an eye on it. Java is pretty old fashioned and it doesn't look like it'll stop dominating market share any time soon but titans do fall.

 

EDIT2: I've been reading some more *recent* stuff about Kotlin and it seems it might be time I take another look at it.

Edited by CosmicDan

Windows software, Android hacking, and other curios

Link to comment
Share on other sites

Diving straight into Forge sounds fine to me.

Any project that you'd have normally written in Java you can write in Kotlin.

 

As for Forgelin, you do not necessarily need it, it enables some nice things (writing @Mod as an object, not a class) and it packages the Kotlin runtime for you (but you can do that yourself with the shadow plugin, too).

So, up to you if you want to use it.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Error in Aquaculture, the mod does not use the Forge Registry System correctly. I would recommend you to report the bug to the mod author.
    • basic java is required for modding minecraft  Also coremodding/mixin is not supported on this Forum, if you have a real case to use mixin, refer to the Forge Discord into the channel non-api-modding
    • For next time do not create a new Thread, since the Moderators can move a Thread into the correct Sub Forum
    • Right so I've tri this, and I got the exact same crash as before. Here's the log: [06Dec2021 16:19:32.734] [Render thread/INFO] [journeymap/]: PostInit [06Dec2021 16:19:32.902] [Render thread/INFO] [journeymap/]: JourneyMap log initialized. [06Dec2021 16:19:32.903] [Render thread/INFO] [journeymap/]: initialize ENTER [06Dec2021 16:19:33.087] [Render thread/WARN] [journeymap/]: core (Initialized) Bad configField entry during updateFrom(): optionsManagerViewed=null [06Dec2021 16:19:33.087] [Render thread/WARN] [journeymap/]: core (Initialized) Bad configField entry during updateFrom(): splashViewed=null [06Dec2021 16:19:33.154] [Render thread/WARN] [journeymap/]: Couldn't determine locale from game settings, defaulting to en_AU [06Dec2021 16:19:33.184] [Render thread/INFO] [journeymap/]: [ClientAPI] built with JourneyMap API 1.5-SNAPSHOT [06Dec2021 16:19:33.185] [Render thread/INFO] [journeymap/]: Initializing plugins with Client API: journeymap.client.api.impl.ClientAPI [06Dec2021 16:19:33.185] [Render thread/INFO] [journeymap/]: initialize EXIT, elapsed count 0 avg ?ms [06Dec2021 16:19:33.185] [Render thread/DEBUG] [journeymap/]: postInitialize ENTER [06Dec2021 16:19:33.415] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.forge.event.KeyEventHandler [06Dec2021 16:19:33.420] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.forge.event.ChatEventHandler [06Dec2021 16:19:33.425] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.forge.event.StateTickHandler [06Dec2021 16:19:33.430] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.forge.event.WorldEventHandler [06Dec2021 16:19:33.436] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.forge.event.WaypointBeaconHandler [06Dec2021 16:19:33.439] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.forge.event.TextureAtlasHandler [06Dec2021 16:19:33.440] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.forge.event.MiniMapOverlayHandler [06Dec2021 16:19:33.445] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.forge.event.PlayerConnectHandler [06Dec2021 16:19:33.451] [Render thread/DEBUG] [journeymap/]: Handler registered: journeymap.client.world.ChunkMonitor [06Dec2021 16:19:33.460] [Render thread/ERROR] [journeymap/]: Couldn't locate icons for Default: F:\Games\MultiMC\instances\HR-%20New%20Beginnings\minecraft\mods\journeymap-1.15.2-5.7.0b3.jar\assets\journeymap\icon\entity [06Dec2021 16:19:33.460] [Render thread/INFO] [journeymap/]: Added entity icons from journeymap:icon/entity. Success: false [06Dec2021 16:19:33.468] [Render thread/ERROR] [journeymap/]: Couldn't locate icons for flat: F:\Games\MultiMC\instances\HR-%20New%20Beginnings\minecraft\mods\journeymap-1.15.2-5.7.0b3.jar\assets\journeymap\theme\flat [06Dec2021 16:19:33.489] [Render thread/INFO] [journeymap/]: Preloaded theme textures: 0 [06Dec2021 16:19:33.502] [Render thread/DEBUG] [journeymap/]: postInitialize EXIT, elapsed count 1 avg 315.56ms [06Dec2021 16:19:33.502] [Server-Worker-9/INFO] [net.minecraftforge.fml.DeferredWorkQueue/LOADING]: Synchronous work queue completed in 00:00:00.783 [06Dec2021 16:19:33.582] [Server-Worker-9/DEBUG] [net.minecraftforge.registries.ClearableRegistry/REGISTRY]: minecraft:feature: Clearing registry [06Dec2021 16:19:33.609] [Server-Worker-9/DEBUG] [mixin/]: Mixing block.MixinBlockStateCache from phosphor.mixins.json into net.minecraft.block.BlockState$Cache [06Dec2021 16:19:34.400] [JM-VersionCheck-1/INFO] [journeymap/]: Newer version online: JourneyMap 5.7.0beta1.jar for Minecraft 1.15.2 on http://minecraft.curseforge.com/projects/journeymap/files/2894436 [06Dec2021 16:19:51.702] [Render thread/INFO] [net.minecraft.client.audio.SoundSystem/]: OpenAL initialized. [06Dec2021 16:19:51.703] [Render thread/INFO] [net.minecraft.client.audio.SoundEngine/SOUNDS]: Sound engine started [06Dec2021 16:19:52.096] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 256x128x0 jei:textures/atlas/gui.png-atlas [06Dec2021 16:19:52.156] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 2048x2048x4 minecraft:textures/atlas/blocks.png-atlas [06Dec2021 16:19:52.312] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 512x256x4 minecraft:textures/atlas/signs.png-atlas [06Dec2021 16:19:52.322] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 512x512x4 minecraft:textures/atlas/banner_patterns.png-atlas [06Dec2021 16:19:52.323] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 512x512x4 minecraft:textures/atlas/shield_patterns.png-atlas [06Dec2021 16:19:52.324] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 1024x1024x4 minecraft:textures/atlas/chest.png-atlas [06Dec2021 16:19:52.327] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 512x256x4 minecraft:textures/atlas/beds.png-atlas [06Dec2021 16:19:52.330] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 512x256x4 minecraft:textures/atlas/shulker_boxes.png-atlas [06Dec2021 16:20:00.187] [Render thread/INFO] [Mystical Agriculture/]: Model replacement took 17 ms [06Dec2021 16:20:01.930] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 512x256x0 minecraft:textures/atlas/particles.png-atlas [06Dec2021 16:20:01.932] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 256x256x0 minecraft:textures/atlas/paintings.png-atlas [06Dec2021 16:20:01.932] [Render thread/INFO] [net.minecraft.client.renderer.texture.AtlasTexture/]: Created: 256x256x0 minecraft:textures/atlas/mob_effects.png-atlas [06Dec2021 16:20:02.110] [Render thread/DEBUG] [IPCClient/]: Sending RichPresence to discord: {"assets":{"small_image":"uteamcore","small_text":"U-Team Core","large_image":"minecraft","large_text":"Minecraft"},"instance":false,"timestamps":{"start":1638767898},"details":"1.15.2 with 109 Mods","state":"Idling in menu","secrets":{}} [06Dec2021 16:20:02.111] [Render thread/DEBUG] [IPCClient/]: Sent packet: Pkt:FRAME{"args":{"activity":{"assets":{"small_image":"uteamcore","small_text":"U-Team Core","large_image":"minecraft","large_text":"Minecraft"},"instance":false,"timestamps":{"start":1638767898},"details":"1.15.2 with 109 Mods","state":"Idling in menu","secrets":{}},"pid":2572},"cmd":"SET_ACTIVITY","nonce":"e355ceb5-f647-4c46-83d3-de91be75778c"} [06Dec2021 16:20:02.118] [Render thread/DEBUG] [mixin/]: Mixing ClientRecipeBookMixin from midnight.mixins.json into net.minecraft.client.util.ClientRecipeBook [06Dec2021 16:20:02.121] [Render thread/DEBUG] [mixin/]: Renaming synthetic method lambda$newRecipeList$1(Lnet/minecraft/client/util/RecipeBookCategories;)Ljava/util/List; to mdad46f9$lambda$newRecipeList$1$0 in midnight.mixins.json:ClientRecipeBookMixin [06Dec2021 16:20:02.121] [Render thread/DEBUG] [mixin/]: Renaming synthetic method lambda$newRecipeList$0(Lnet/minecraft/client/util/RecipeBookCategories;)Ljava/util/List; to mdad46f9$lambda$newRecipeList$0$1 in midnight.mixins.json:ClientRecipeBookMixin [06Dec2021 16:20:02.132] [Render thread/WARN] [mixin/]: @Final field field_197931_e:Ljava/util/Map; in midnight.mixins.json:ClientRecipeBookMixin should be final [06Dec2021 16:20:02.132] [Render thread/WARN] [mixin/]: @Final field field_197932_f:Ljava/util/List; in midnight.mixins.json:ClientRecipeBookMixin should be final [06Dec2021 16:20:02.162] [Thread-25/DEBUG] [IPCClient/]: Received packet: Pkt:FRAME{"evt":null,"data":{"assets":{"small_image":"449588211862208512","small_text":"U-Team Core","large_image":"427223277530906624","large_text":"Minecraft"},"timestamps":{"start":1638767898000},"name":"Minecraft","details":"1.15.2 with 109 Mods","state":"Idling in menu","type":0,"secrets":{},"application_id":"427196986064764928"},"cmd":"SET_ACTIVITY","nonce":"e355ceb5-f647-4c46-83d3-de91be75778c"} [06Dec2021 16:20:02.179] [Render thread/INFO] [com.tmtravlr.soundfilters.SoundFiltersMod/]: Sound Filters successfully loaded the sound channels [06Dec2021 16:20:02.215] [Render thread/INFO] [ambientsounds/]: Successfully loaded sound engine. 11 dimension(s) and 32 region(s) [06Dec2021 16:20:13.629] [Render thread/WARN] [net.minecraft.command.Commands/]: Ambiguity between arguments [teleport, destination] and [teleport, targets] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498] [06Dec2021 16:20:13.630] [Render thread/WARN] [net.minecraft.command.Commands/]: Ambiguity between arguments [teleport, location] and [teleport, destination] with inputs: [0.1 -0.5 .9, 0 0 0] [06Dec2021 16:20:13.632] [Render thread/WARN] [net.minecraft.command.Commands/]: Ambiguity between arguments [teleport, location] and [teleport, targets] with inputs: [0.1 -0.5 .9, 0 0 0] [06Dec2021 16:20:13.633] [Render thread/WARN] [net.minecraft.command.Commands/]: Ambiguity between arguments [teleport, targets] and [teleport, destination] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498] [06Dec2021 16:20:13.634] [Render thread/WARN] [net.minecraft.command.Commands/]: Ambiguity between arguments [teleport, targets, location] and [teleport, targets, destination] with inputs: [0.1 -0.5 .9, 0 0 0] [06Dec2021 16:20:13.701] [Server thread/INFO] [net.minecraft.server.integrated.IntegratedServer/]: Starting integrated minecraft server version 1.15.2 [06Dec2021 16:20:13.701] [Server thread/INFO] [net.minecraft.server.integrated.IntegratedServer/]: Generating keypair [06Dec2021 16:20:13.797] [Server thread/DEBUG] [net.minecraftforge.fml.loading.FileUtils/CORE]: Found existing serverconfig directory : F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig [06Dec2021 16:20:13.797] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Loading configs type SERVER [06Dec2021 16:20:13.797] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Built TOML config for F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig\mining_dimension-server.toml [06Dec2021 16:20:13.797] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Loaded TOML config file F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig\mining_dimension-server.toml [06Dec2021 16:20:13.798] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Watching TOML config file F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig\mining_dimension-server.toml for changes [06Dec2021 16:20:13.800] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Built TOML config for F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig\essentials-server.toml [06Dec2021 16:20:13.801] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Loaded TOML config file F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig\essentials-server.toml [06Dec2021 16:20:13.801] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Watching TOML config file F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig\essentials-server.toml for changes [06Dec2021 16:20:13.803] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Built TOML config for F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\config\vanillatweaks\Content.toml [06Dec2021 16:20:13.805] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Loaded TOML config file F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\config\vanillatweaks\Content.toml [06Dec2021 16:20:13.806] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Watching TOML config file F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\config\vanillatweaks\Content.toml for changes [06Dec2021 16:20:13.808] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Built TOML config for F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig\midnight-server.toml [06Dec2021 16:20:13.809] [Server thread/ERROR] [net.minecraft.server.MinecraftServer/]: Encountered an unexpected exception com.electronwill.nightconfig.core.io.ParsingException: Not enough data available at com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22) ~[core-3.6.2.jar:?] at com.electronwill.nightconfig.core.io.ReaderInput.directReadChar(ReaderInput.java:36) ~[core-3.6.2.jar:?] at com.electronwill.nightconfig.core.io.AbstractInput.readChar(AbstractInput.java:49) ~[core-3.6.2.jar:?] at com.electronwill.nightconfig.core.io.AbstractInput.readCharsUntil(AbstractInput.java:123) ~[core-3.6.2.jar:?] at com.electronwill.nightconfig.toml.TableParser.parseKey(TableParser.java:166) ~[toml-3.6.2.jar:?] at com.electronwill.nightconfig.toml.TableParser.parseDottedKey(TableParser.java:145) ~[toml-3.6.2.jar:?] at com.electronwill.nightconfig.toml.TableParser.parseNormal(TableParser.java:55) ~[toml-3.6.2.jar:?] at com.electronwill.nightconfig.toml.TableParser.parseNormal(TableParser.java:101) ~[toml-3.6.2.jar:?] at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:88) ~[toml-3.6.2.jar:?] at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:37) ~[toml-3.6.2.jar:?] at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:113) ~[core-3.6.2.jar:?] at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:219) ~[core-3.6.2.jar:?] at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:202) ~[core-3.6.2.jar:?] at com.electronwill.nightconfig.core.file.WriteSyncFileConfig.load(WriteSyncFileConfig.java:73) ~[core-3.6.2.jar:?] at com.electronwill.nightconfig.core.file.AutosaveCommentedFileConfig.load(AutosaveCommentedFileConfig.java:85) ~[core-3.6.2.jar:?] at net.minecraftforge.fml.config.ConfigFileTypeHandler.lambda$reader$1(ConfigFileTypeHandler.java:53) ~[?:?] at net.minecraftforge.fml.config.ConfigTracker.openConfig(ConfigTracker.java:104) ~[?:?] at net.minecraftforge.fml.config.ConfigTracker.lambda$loadConfigs$1(ConfigTracker.java:83) ~[?:?] at java.lang.Iterable.forEach(Unknown Source) ~[?:1.8.0_311] at java.util.Collections$SynchronizedCollection.forEach(Unknown Source) ~[?:1.8.0_311] at net.minecraftforge.fml.config.ConfigTracker.loadConfigs(ConfigTracker.java:83) ~[?:?] at net.minecraftforge.fml.server.ServerLifecycleHooks.handleServerAboutToStart(ServerLifecycleHooks.java:87) ~[?:?] at net.minecraft.server.integrated.IntegratedServer.func_71197_b(IntegratedServer.java:95) ~[?:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:613) [?:?] at java.lang.Thread.run(Unknown Source) [?:1.8.0_311] [06Dec2021 16:20:13.843] [Server thread/ERROR] [net.minecraft.server.MinecraftServer/]: This crash report has been saved to: F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\crash-reports\crash-2021-12-06_16.20.13-server.txt [06Dec2021 16:20:13.844] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Stopping server [06Dec2021 16:20:13.844] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving players [06Dec2021 16:20:13.844] [Server thread/INFO] [net.minecraft.server.MinecraftServer/]: Saving worlds [06Dec2021 16:20:13.865] [Server thread/ERROR] [net.minecraft.server.MinecraftServer/]: Exception stopping the server java.lang.IllegalArgumentException: Can not hotload overworld. This must be loaded at all times by main Server. at org.apache.commons.lang3.Validate.isTrue(Validate.java:158) ~[commons-lang3-3.5.jar:3.5] at net.minecraftforge.common.DimensionManager.initWorld(DimensionManager.java:274) ~[?:?] at net.minecraftforge.common.DimensionManager.getWorld(DimensionManager.java:208) ~[?:?] at net.minecraft.server.MinecraftServer.func_71218_a(MinecraftServer.java:1004) ~[?:?] at net.minecraft.server.MinecraftServer.func_213211_a(MinecraftServer.java:536) ~[?:?] at net.minecraft.server.MinecraftServer.func_71260_j(MinecraftServer.java:568) ~[?:?] at net.minecraft.server.integrated.IntegratedServer.func_71260_j(IntegratedServer.java:216) ~[?:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:676) [?:?] at java.lang.Thread.run(Unknown Source) [?:1.8.0_311] [06Dec2021 16:20:13.896] [Server thread/DEBUG] [net.minecraftforge.registries.ClearableRegistry/REGISTRY]: minecraft:feature: Clearing registry [06Dec2021 16:20:15.736] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup midnight:tree_hopper for public static net.minecraft.entity.EntityType com.mushroom.midnight.common.registry.MidnightEntities.TREE_HOPPER. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.737] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup aquaculture:fish_fillet for public static net.minecraft.item.Item com.teammetallurgy.aquaculture.init.AquaItems.FISH_FILLET. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.737] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup aquaculture:nessage_in_a_bottle for public static net.minecraft.item.Item com.teammetallurgy.aquaculture.init.AquaItems.NESSAGE_IN_A_BOTTLE. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.738] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup waddles:adelie_death for public static net.minecraft.util.SoundEvent com.girafi.waddles.init.WaddlesSounds.ADELIE_DEATH. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.738] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup aquaculture:cooked_fillet for public static net.minecraft.item.Item com.teammetallurgy.aquaculture.init.AquaItems.COOKED_FILLET. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.738] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup aquaculture:frog_legs for public static net.minecraft.item.Item com.teammetallurgy.aquaculture.init.AquaItems.FROG_LEGS. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.739] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup snowundertrees:snow_under_trees for public static net.minecraft.world.gen.feature.Feature bl4ckscor3.mod.snowundertrees.SnowUnderTrees.SNOW_UNDER_TREES. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.739] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup midnight:dead_viridshroom_and_cache for public static net.minecraft.world.gen.feature.Feature com.mushroom.midnight.common.registry.MidnightFeatures.DEAD_VIRIDSHROOM_AND_CACHE. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.739] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup aquaculture:neptunium_legs for public static net.minecraft.item.Item com.teammetallurgy.aquaculture.init.AquaItems.NEPTUNIUM_LEGS. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.741] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup aquaculture:neptinium_fillet_knife for public static net.minecraft.item.Item com.teammetallurgy.aquaculture.init.AquaItems.NEPTINIUM_FILLET_KNIFE. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.741] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup waddles:adelie_baby_ambient for public static net.minecraft.util.SoundEvent com.girafi.waddles.init.WaddlesSounds.ADELIE_BABY_AMBIENT. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.742] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup midnight:penumbrian for public static net.minecraft.entity.EntityType com.mushroom.midnight.common.registry.MidnightEntities.PENUMBRIAN. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.742] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup aquaculture:neptunium_plate for public static net.minecraft.item.Item com.teammetallurgy.aquaculture.init.AquaItems.NEPTUNIUM_PLATE. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.743] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup midnight:shade_squirrel for public static net.minecraft.entity.EntityType com.mushroom.midnight.common.registry.MidnightEntities.SHADE_SQUIRREL. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.744] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup essentialfeatures:portable_jukebox for public static net.minecraft.item.Item its_meow.betteranimalsplus.common.CommonEventHandler.PORTABLE_JUKEBOX. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.745] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup aquaculture:cooked_frog_legs for public static net.minecraft.item.Item com.teammetallurgy.aquaculture.init.AquaItems.COOKED_FROG_LEGS. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.745] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup waddles:adelie_ambient for public static net.minecraft.util.SoundEvent com.girafi.waddles.init.WaddlesSounds.ADELIE_AMBIENT. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.745] [Server thread/DEBUG] [net.minecraftforge.registries.ObjectHolderRef/]: Unable to lookup waddles:adelie_hurt for public static net.minecraft.util.SoundEvent com.girafi.waddles.init.WaddlesSounds.ADELIE_HURT. This means the object wasn't registered. It's likely just mod options. [06Dec2021 16:20:15.754] [Server thread/DEBUG] [com.direwolf20.buildinggadgets.common.BuildingGadgets/]: Clearing save caches [06Dec2021 16:20:15.754] [Server thread/DEBUG] [com.direwolf20.buildinggadgets.common.BuildingGadgets/]: Finished clearing save caches [06Dec2021 16:20:15.754] [Server thread/DEBUG] [net.minecraftforge.fml.loading.FileUtils/CORE]: Found existing serverconfig directory : F:\Games\MultiMC\instances\HR- New Beginnings\minecraft\saves\Wooooorld\serverconfig [06Dec2021 16:20:15.754] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Unloading configs type SERVER [06Dec2021 16:20:19.556] [Discord Rich Presence Timer Thread/DEBUG] [IPCClient/]: Sending RichPresence to discord: {"assets":{"small_image":"uteamcore","small_text":"U-Team Core","large_image":"minecraft","large_text":"Minecraft"},"instance":false,"timestamps":{"start":1638767898},"details":"1.15.2 with 109 Mods","state":"Idling in menu","secrets":{}} [06Dec2021 16:20:19.557] [Discord Rich Presence Timer Thread/DEBUG] [IPCClient/]: Sent packet: Pkt:FRAME{"args":{"activity":{"assets":{"small_image":"uteamcore","small_text":"U-Team Core","large_image":"minecraft","large_text":"Minecraft"},"instance":false,"timestamps":{"start":1638767898},"details":"1.15.2 with 109 Mods","state":"Idling in menu","secrets":{}},"pid":2572},"cmd":"SET_ACTIVITY","nonce":"a2147afd-261d-450b-959d-5d5fec73e6cf"} [06Dec2021 16:20:19.581] [Thread-25/DEBUG] [IPCClient/]: Received packet: Pkt:FRAME{"evt":null,"data":{"assets":{"small_image":"449588211862208512","small_text":"U-Team Core","large_image":"427223277530906624","large_text":"Minecraft"},"timestamps":{"start":1638767898000},"name":"Minecraft","details":"1.15.2 with 109 Mods","state":"Idling in menu","type":0,"secrets":{},"application_id":"427196986064764928"},"cmd":"SET_ACTIVITY","nonce":"a2147afd-261d-450b-959d-5d5fec73e6cf"} This should be all relevant log info. I've no idea what's causing this issue. Perhaps the worlds just fucked and I have to say goodbye to my hard work; it could have been an issue caused by the fact that this is all saved on an external hard drive. Any help is appreciated
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.