Kajetan Johannes Hammerle 3 年 前
コミット
5322dbd3bf

+ 14 - 0
src/main/java/me/km/utils/ReflectionUtils.java

@@ -24,6 +24,8 @@ import net.minecraft.world.GameRules;
 import net.minecraft.world.GameType;
 import net.minecraft.world.World;
 import net.minecraft.world.server.ServerWorld;
+import net.minecraft.world.storage.DerivedWorldInfo;
+import net.minecraft.world.storage.IServerConfiguration;
 import net.minecraft.world.storage.IServerWorldInfo;
 import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
 import static net.minecraftforge.fml.common.ObfuscationReflectionHelper.remapName;
@@ -221,4 +223,16 @@ public class ReflectionUtils {
         setFieldValue(w, WORLD_INFO, info);
         setFieldValue(w, SERVER_WORLD_INFO, info);
     }
+    
+    private final static Field DERIVED_WORLD_INFO_DELEGATE = getField(DerivedWorldInfo.class, "field_76115_a");
+    
+    public static IServerWorldInfo getDerivedWorldInfoDelegate(DerivedWorldInfo info) {
+        return getFieldValue(IServerWorldInfo.class, info, DERIVED_WORLD_INFO_DELEGATE);
+    }
+    
+    private final static Field DERIVED_WORLD_INFO_CONFIGURATION = getField(DerivedWorldInfo.class, "field_237244_a_");
+    
+    public static IServerConfiguration getDerivedWorldInfoConfiguration(DerivedWorldInfo info) {
+        return getFieldValue(IServerConfiguration.class, info, DERIVED_WORLD_INFO_CONFIGURATION);
+    }
 }

+ 7 - 87
src/main/java/me/km/world/ModWorldInfo.java

@@ -1,23 +1,16 @@
 package me.km.world;
 
-import java.util.UUID;
-import net.minecraft.command.TimerCallbackManager;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.world.Difficulty;
+import me.km.utils.ReflectionUtils;
 import net.minecraft.world.GameRules;
-import net.minecraft.world.GameType;
-import net.minecraft.world.border.WorldBorder;
-import net.minecraft.world.storage.IServerWorldInfo;
+import net.minecraft.world.storage.DerivedWorldInfo;
 
-public class ModWorldInfo implements IServerWorldInfo {
-    private final IServerWorldInfo parent;
+public class ModWorldInfo extends DerivedWorldInfo {
     private boolean thundering;
     private int rainTime = 0;
     private int thunderTime = 0;
     private int clearWeatherTime = 0;
     private int traderDelay = 0;
     private int traderSpawnChance = 0;
-    private long gameTime = 0;
     private long dayTime = 0;
     private int spawnX = 0;
     private int spawnY = 0;
@@ -26,13 +19,9 @@ public class ModWorldInfo implements IServerWorldInfo {
     private boolean raining = false;
     private final GameRules rules = new GameRules();
 
-    public ModWorldInfo(IServerWorldInfo parent) {
-        this.parent = parent;
-    }
-
-    @Override
-    public String getWorldName() {
-        return parent.getWorldName();
+    public ModWorldInfo(DerivedWorldInfo parent) {
+        super(ReflectionUtils.getDerivedWorldInfoConfiguration(parent),
+                ReflectionUtils.getDerivedWorldInfoDelegate(parent));
     }
 
     @Override
@@ -90,55 +79,6 @@ public class ModWorldInfo implements IServerWorldInfo {
         traderSpawnChance = i;
     }
 
-    @Override
-    public void setWanderingTraderID(UUID uuid) {
-    }
-
-    @Override
-    public GameType getGameType() {
-        return parent.getGameType();
-    }
-
-    @Override
-    public void setWorldBorderSerializer(WorldBorder.Serializer srlzr) {
-        parent.setWorldBorderSerializer(srlzr);
-    }
-
-    @Override
-    public WorldBorder.Serializer getWorldBorderSerializer() {
-        return parent.getWorldBorderSerializer();
-    }
-
-    @Override
-    public boolean isInitialized() {
-        return parent.isInitialized();
-    }
-
-    @Override
-    public void setInitialized(boolean bln) {
-        parent.setInitialized(bln);
-    }
-
-    @Override
-    public boolean areCommandsAllowed() {
-        return parent.areCommandsAllowed();
-    }
-
-    @Override
-    public void setGameType(GameType gt) {
-        parent.setGameType(gt);
-    }
-
-    @Override
-    public TimerCallbackManager<MinecraftServer> getScheduledEvents() {
-        return parent.getScheduledEvents();
-    }
-
-    @Override
-    public void setGameTime(long l) {
-        gameTime = l;
-    }
-
     @Override
     public void setDayTime(long l) {
         dayTime = l;
@@ -184,11 +124,6 @@ public class ModWorldInfo implements IServerWorldInfo {
         return spawnAngle;
     }
 
-    @Override
-    public long getGameTime() {
-        return gameTime;
-    }
-
     @Override
     public long getDayTime() {
         return dayTime;
@@ -208,24 +143,9 @@ public class ModWorldInfo implements IServerWorldInfo {
     public void setRaining(boolean bln) {
         raining = bln;
     }
-
-    @Override
-    public boolean isHardcore() {
-        return parent.isHardcore();
-    }
-
+    
     @Override
     public GameRules getGameRulesInstance() {
         return rules;
     }
-
-    @Override
-    public Difficulty getDifficulty() {
-        return parent.getDifficulty();
-    }
-
-    @Override
-    public boolean isDifficultyLocked() {
-        return parent.isDifficultyLocked();
-    }
 }