3535import de .bluecolored .bluemap .core .MinecraftVersion ;
3636import de .bluecolored .bluemap .core .logger .Logger ;
3737import de .bluecolored .bluemap .core .resourcepack .ParseResourceException ;
38- import net .minecraft .entity .player .PlayerEntity ;
39- import net .minecraft .entity .player .ServerPlayerEntity ;
38+ import net .minecraft .client .Minecraft ;
4039import net .minecraft .server .MinecraftServer ;
41- import net .minecraft .world .DimensionType ;
42- import net .minecraft .world .server .ServerWorld ;
43- import net .minecraft .world .storage .FolderName ;
40+ import net .minecraft .server .level .ServerLevel ;
41+ import net .minecraft .server .level .ServerPlayer ;
42+ import net .minecraft .world .level .dimension .DimensionType ;
43+ import net .minecraft .world .level .storage .LevelResource ;
4444import net .minecraftforge .common .MinecraftForge ;
4545import net .minecraftforge .event .TickEvent .ServerTickEvent ;
4646import net .minecraftforge .event .entity .player .PlayerEvent .PlayerLoggedInEvent ;
4747import net .minecraftforge .event .entity .player .PlayerEvent .PlayerLoggedOutEvent ;
4848import net .minecraftforge .eventbus .api .SubscribeEvent ;
49- import net .minecraftforge .fml .ExtensionPoint ;
49+ import net .minecraftforge .fml .IExtensionPoint ;
5050import net .minecraftforge .fml .ModLoadingContext ;
5151import net .minecraftforge .fml .common .Mod ;
52- import net .minecraftforge .fml .event .server .FMLServerStartedEvent ;
53- import net .minecraftforge .fml .event .server .FMLServerStartingEvent ;
54- import net .minecraftforge .fml .event .server .FMLServerStoppingEvent ;
55- import net .minecraftforge .fml .network .FMLNetworkConstants ;
56- import org .apache .commons .lang3 .tuple .Pair ;
52+ import net .minecraftforge .fmllegacy .network .FMLNetworkConstants ;
53+ import net .minecraftforge .fmlserverevents .FMLServerStartedEvent ;
54+ import net .minecraftforge .fmlserverevents .FMLServerStartingEvent ;
55+ import net .minecraftforge .fmlserverevents .FMLServerStoppingEvent ;
5756import org .apache .logging .log4j .LogManager ;
5857
5958import java .io .File ;
6665@ Mod (Plugin .PLUGIN_ID )
6766public class ForgeMod implements ServerInterface {
6867
69- private Plugin pluginInstance = null ;
68+ private final Plugin pluginInstance ;
7069 private MinecraftServer serverInstance = null ;
7170
72- private Map <File , UUID > worldUUIDs ;
73- private ForgeEventForwarder eventForwarder ;
71+ private final Map <File , UUID > worldUUIDs ;
72+ private final ForgeEventForwarder eventForwarder ;
7473
75- private LoadingCache <ServerWorld , UUID > worldUuidCache ;
74+ private final LoadingCache <ServerLevel , UUID > worldUuidCache ;
7675
7776 private int playerUpdateIndex = 0 ;
78- private Map <UUID , Player > onlinePlayerMap ;
79- private List <ForgePlayer > onlinePlayerList ;
77+ private final Map <UUID , Player > onlinePlayerMap ;
78+ private final List <ForgePlayer > onlinePlayerList ;
8079
8180 public ForgeMod () {
8281 Logger .global = new Log4jLogger (LogManager .getLogger (Plugin .PLUGIN_NAME ));
8382
8483 this .onlinePlayerMap = new ConcurrentHashMap <>();
8584 this .onlinePlayerList = Collections .synchronizedList (new ArrayList <>());
8685
87- this .pluginInstance = new Plugin (new MinecraftVersion (1 , 16 , 2 ), "forge-1.16.2" , this );
86+ String versionString = net .minecraft .DetectedVersion .tryDetectVersion ().getId ();
87+ MinecraftVersion mcVersion ;
88+ try {
89+ mcVersion = MinecraftVersion .of (versionString );
90+ } catch (IllegalArgumentException ex ) {
91+ mcVersion = new MinecraftVersion (1 , 17 , 1 );
92+ Logger .global .logWarning ("Failed to derive version from version-string '" + versionString +
93+ "', falling back to version: " + mcVersion .getVersionString ());
94+ }
95+ this .pluginInstance = new Plugin (mcVersion , "forge-1.16.2" , this );
8896
8997 this .worldUUIDs = new ConcurrentHashMap <>();
9098 this .eventForwarder = new ForgeEventForwarder ();
@@ -97,21 +105,21 @@ public ForgeMod() {
97105 MinecraftForge .EVENT_BUS .register (this );
98106
99107 //Make sure the mod being absent on the other network side does not cause the client to display the server as incompatible
100- ModLoadingContext .get ().registerExtensionPoint (ExtensionPoint . DISPLAYTEST , () -> Pair . of (() -> FMLNetworkConstants .IGNORESERVERONLY , (a , b ) -> true ));
108+ ModLoadingContext .get ().registerExtensionPoint (IExtensionPoint . DisplayTest . class , () -> new IExtensionPoint . DisplayTest (() -> FMLNetworkConstants .IGNORESERVERONLY , (a , b ) -> true ));
101109 }
102110
103111 @ SubscribeEvent
104112 public void onServerStarting (FMLServerStartingEvent event ) {
105113 this .serverInstance = event .getServer ();
106114
107115 //register commands
108- new Commands <>(pluginInstance , event .getServer ().getCommandManager ().getDispatcher (), forgeSource -> new ForgeCommandSource (this , pluginInstance , forgeSource ));
116+ new Commands <>(pluginInstance , event .getServer ().getCommands ().getDispatcher (), forgeSource -> new ForgeCommandSource (this , pluginInstance , forgeSource ));
109117 }
110118
111119 @ SubscribeEvent
112120 public void onServerStarted (FMLServerStartedEvent event ) {
113121 //save worlds to generate level.dat files
114- serverInstance .save (false , true , true );
122+ serverInstance .saveAllChunks (false , true , true );
115123
116124 new Thread (() -> {
117125 Logger .global .logInfo ("Loading..." );
@@ -160,15 +168,15 @@ public UUID getUUIDForWorld(File worldFolder) throws IOException {
160168 return uuid ;
161169 }
162170
163- public UUID getUUIDForWorld (ServerWorld world ) throws IOException {
171+ public UUID getUUIDForWorld (ServerLevel world ) throws IOException {
164172 try {
165173 return worldUuidCache .get (world );
166174 } catch (RuntimeException e ) {
167175 throw new IOException (e );
168176 }
169177 }
170178
171- private UUID loadUUIDForWorld (ServerWorld world ) throws IOException {
179+ private UUID loadUUIDForWorld (ServerLevel world ) throws IOException {
172180 File key = getFolderForWorld (world );
173181
174182 UUID uuid = worldUUIDs .get (key );
@@ -180,10 +188,10 @@ private UUID loadUUIDForWorld(ServerWorld world) throws IOException {
180188 return uuid ;
181189 }
182190
183- private File getFolderForWorld (ServerWorld world ) throws IOException {
191+ private File getFolderForWorld (ServerLevel world ) throws IOException {
184192 MinecraftServer server = world .getServer ();
185- File worldFolder = world .getServer ().getDataDirectory ().toPath ().resolve (server .func_240776_a_ ( FolderName . field_237253_i_ )).toFile ();
186- File dimensionFolder = DimensionType .func_236031_a_ (world .func_234923_W_ (), worldFolder );
193+ File worldFolder = world .getServer ().getServerDirectory ().toPath ().resolve (server .getWorldPath ( LevelResource . ROOT )).toFile ();
194+ File dimensionFolder = DimensionType .getStorageFolder (world .dimension (), worldFolder );
187195 return dimensionFolder .getCanonicalFile ();
188196 }
189197
@@ -193,7 +201,7 @@ public boolean persistWorldChanges(UUID worldUUID) throws IOException, IllegalAr
193201
194202 serverInstance .execute (() -> {
195203 try {
196- for (ServerWorld world : serverInstance .getWorlds ()) {
204+ for (ServerLevel world : serverInstance .getAllLevels ()) {
197205 if (getUUIDForWorld (world ).equals (worldUUID )) {
198206 world .save (null , true , false );
199207 }
@@ -225,20 +233,20 @@ public File getConfigFolder() {
225233
226234 @ SubscribeEvent
227235 public void onPlayerJoin (PlayerLoggedInEvent evt ) {
228- PlayerEntity playerInstance = evt .getPlayer ();
229- if (!(playerInstance instanceof ServerPlayerEntity )) return ;
236+ net . minecraft . world . entity . player . Player playerInstance = evt .getPlayer ();
237+ if (!(playerInstance instanceof ServerPlayer )) return ;
230238
231- ForgePlayer player = new ForgePlayer (this , playerInstance .getUniqueID ());
239+ ForgePlayer player = new ForgePlayer (this , playerInstance .getUUID ());
232240 onlinePlayerMap .put (player .getUuid (), player );
233241 onlinePlayerList .add (player );
234242 }
235243
236244 @ SubscribeEvent
237245 public void onPlayerLeave (PlayerLoggedOutEvent evt ) {
238- PlayerEntity player = evt .getPlayer ();
239- if (!(player instanceof ServerPlayerEntity )) return ;
246+ net . minecraft . world . entity . player . Player player = evt .getPlayer ();
247+ if (!(player instanceof ServerPlayer )) return ;
240248
241- UUID playerUUID = player .getUniqueID ();
249+ UUID playerUUID = player .getUUID ();
242250 onlinePlayerMap .remove (playerUUID );
243251 synchronized (onlinePlayerList ) {
244252 onlinePlayerList .removeIf (p -> p .getUuid ().equals (playerUUID ));
0 commit comments