even even even more work

This commit is contained in:
MiniDigger | Martin
2020-06-25 16:09:55 +02:00
parent 4aa7955818
commit e943ece469
125 changed files with 857 additions and 3512 deletions

View File

@@ -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");