even even even more work
This commit is contained in:
@@ -28,6 +28,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+package com.destroystokyo.paper;
|
||||
+
|
||||
+import net.minecraft.server.DimensionManager;
|
||||
+import net.minecraft.server.ResourceKey;
|
||||
+import net.minecraft.server.World;
|
||||
+import net.minecraft.server.WorldServer;
|
||||
+
|
||||
+import javax.annotation.Nonnull;
|
||||
@@ -40,7 +42,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+import java.util.Map;
|
||||
+import java.util.Set;
|
||||
+
|
||||
+public class PaperWorldMap extends HashMap<DimensionManager, WorldServer> {
|
||||
+public class PaperWorldMap extends HashMap<ResourceKey<World>, WorldServer> {
|
||||
+ private final List<WorldServer> worlds = new ArrayList<>();
|
||||
+ private final List<WorldServer> worldsIterable = new ArrayList<WorldServer>() {
|
||||
+ @Override
|
||||
@@ -80,10 +82,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ @Override
|
||||
+ public WorldServer get(Object key) {
|
||||
+ // Will hit the below method
|
||||
+ return key instanceof DimensionManager ? get((DimensionManager) key) : null;
|
||||
+ return key instanceof ResourceKey ? get((ResourceKey<World>) key) : null;
|
||||
+ }
|
||||
+
|
||||
+ public WorldServer get(DimensionManager key) {
|
||||
+ // TODO figure out what to do with dimension ids
|
||||
+ public WorldServer get(ResourceKey<World> key) {
|
||||
+ int id = key.getDimensionID()+1;
|
||||
+ return worlds.size() > id ? worlds.get(id) : null;
|
||||
+ }
|
||||
@@ -98,7 +100,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public WorldServer put(DimensionManager key, WorldServer value) {
|
||||
+ public WorldServer put(ResourceKey<World> key, WorldServer value) {
|
||||
+ while (worlds.size() <= key.getDimensionID()+1) {
|
||||
+ worlds.add(null);
|
||||
+ }
|
||||
@@ -111,8 +113,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void putAll(Map<? extends DimensionManager, ? extends WorldServer> m) {
|
||||
+ for (Entry<? extends DimensionManager, ? extends WorldServer> e : m.entrySet()) {
|
||||
+ public void putAll(Map<? extends ResourceKey<World>, ? extends WorldServer> m) {
|
||||
+ for (Entry<? extends ResourceKey<World>, ? extends WorldServer> e : m.entrySet()) {
|
||||
+ put(e.getKey(), e.getValue());
|
||||
+ }
|
||||
+ }
|
||||
@@ -142,17 +144,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean containsValue(Object value) {
|
||||
+ return value instanceof WorldServer && get(((WorldServer) value).worldProvider.getDimensionManager()) != null;
|
||||
+ return value instanceof WorldServer && get(((WorldServer) value).getDimensionKey()) != null;
|
||||
+ }
|
||||
+
|
||||
+ @Nonnull
|
||||
+ @Override
|
||||
+ public Set<DimensionManager> keySet() {
|
||||
+ return new AbstractSet<DimensionManager>() {
|
||||
+ public Set<ResourceKey<World>> keySet() {
|
||||
+ return new AbstractSet<ResourceKey<World>>() {
|
||||
+ @Override
|
||||
+ public Iterator<DimensionManager> iterator() {
|
||||
+ public Iterator<ResourceKey<World>> iterator() {
|
||||
+ Iterator<WorldServer> iterator = worldsIterable.iterator();
|
||||
+ return new Iterator<DimensionManager>() {
|
||||
+ return new Iterator<ResourceKey<World>>() {
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean hasNext() {
|
||||
@@ -160,8 +162,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public DimensionManager next() {
|
||||
+ return iterator.next().worldProvider.getDimensionManager();
|
||||
+ public ResourceKey<World> next() {
|
||||
+ return iterator.next().getDimensionKey();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
@@ -184,12 +186,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public Set<Entry<DimensionManager, WorldServer>> entrySet() {
|
||||
+ return new AbstractSet<Entry<DimensionManager, WorldServer>>() {
|
||||
+ public Set<Entry<ResourceKey<World>, WorldServer>> entrySet() {
|
||||
+ return new AbstractSet<Entry<ResourceKey<World>, WorldServer>>() {
|
||||
+ @Override
|
||||
+ public Iterator<Entry<DimensionManager, WorldServer>> iterator() {
|
||||
+ public Iterator<Entry<ResourceKey<World>, WorldServer>> iterator() {
|
||||
+ Iterator<WorldServer> iterator = worldsIterable.iterator();
|
||||
+ return new Iterator<Entry<DimensionManager, WorldServer>>() {
|
||||
+ return new Iterator<Entry<ResourceKey<World>, WorldServer>>() {
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean hasNext() {
|
||||
@@ -197,9 +199,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public Entry<DimensionManager, WorldServer> next() {
|
||||
+ public Entry<ResourceKey<World>, WorldServer> next() {
|
||||
+ WorldServer entry = iterator.next();
|
||||
+ return new SimpleEntry<>(entry.worldProvider.getDimensionManager(), entry);
|
||||
+ return new SimpleEntry<>(entry.getDimensionKey(), entry);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
@@ -221,28 +223,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
public final DataFixer dataConverterManager;
|
||||
private String serverIp;
|
||||
private int serverPort = -1;
|
||||
- public final Map<DimensionManager, WorldServer> worldServer = Maps.newLinkedHashMap(); // CraftBukkit - keep order, k+v already use identity methods
|
||||
+ public final Map<DimensionManager, WorldServer> worldServer = new com.destroystokyo.paper.PaperWorldMap(); // Paper;
|
||||
private int serverPort;
|
||||
public final IRegistryCustom.Dimension f;
|
||||
- public final Map<ResourceKey<World>, WorldServer> worldServer;
|
||||
+ public final Map<ResourceKey<World>, WorldServer> worldServer = new com.destroystokyo.paper.PaperWorldMap(); // Paper;
|
||||
private PlayerList playerList;
|
||||
private volatile boolean isRunning = true;
|
||||
private volatile boolean isRunning;
|
||||
private volatile boolean isRestarting = false; // Paper - flag to signify we're attempting to restart
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
}
|
||||
}
|
||||
this.a(this.getDifficulty(), true);
|
||||
this.updateWorldSettings();
|
||||
- for (WorldServer worldserver : this.getWorlds()) {
|
||||
+ for (WorldServer worldserver : com.google.common.collect.Lists.newArrayList(this.getWorlds())) { // Paper - avoid como if 1 world triggers another world
|
||||
this.loadSpawn(worldserver.getChunkProvider().playerChunkMap.worldLoadListener, worldserver);
|
||||
this.server.getPluginManager().callEvent(new org.bukkit.event.world.WorldLoadEvent(worldserver.getWorld()));
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
// this.nextTick = SystemUtils.getMonotonicMillis() + 10L;
|
||||
this.executeModerately();
|
||||
// Iterator iterator = DimensionManager.a().iterator();
|
||||
-
|
||||
if (true) {
|
||||
DimensionManager dimensionmanager = worldserver.worldProvider.getDimensionManager();
|
||||
ForcedChunk forcedchunk = (ForcedChunk) worldserver.getWorldPersistentData().b(ForcedChunk::new, "chunks");
|
||||
|
||||
Reference in New Issue
Block a user