From b9c1d68ccbf3db6ea6386ae3c1357fd332106d57 Mon Sep 17 00:00:00 2001 From: Sotr Date: Tue, 26 Mar 2019 20:26:15 +0800 Subject: [PATCH] Fixup PSPE --- .../server/core/AkarinWorldAccessor.java | 19 ++++++++++++++++--- src/main/java/net/minecraft/server/World.java | 8 ++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/akarin/server/core/AkarinWorldAccessor.java b/src/main/java/io/akarin/server/core/AkarinWorldAccessor.java index c132ec2e9..a0350329a 100644 --- a/src/main/java/io/akarin/server/core/AkarinWorldAccessor.java +++ b/src/main/java/io/akarin/server/core/AkarinWorldAccessor.java @@ -2,9 +2,10 @@ package io.akarin.server.core; import java.util.List; +import javax.annotation.Nullable; + import com.google.common.collect.Lists; -import lombok.RequiredArgsConstructor; import net.minecraft.server.BlockPosition; import net.minecraft.server.Entity; import net.minecraft.server.EntityHuman; @@ -17,14 +18,26 @@ import net.minecraft.server.SoundCategory; import net.minecraft.server.SoundEffect; import net.minecraft.server.WorldManager; -@RequiredArgsConstructor public class AkarinWorldAccessor implements IWorldAccess { - private final WorldManager worldManager; + private @Nullable WorldManager worldManager; private final NavigationListener navigationListener; private IWorldAccess[] customAccessors = new IWorldAccess[0]; private boolean hasCustomAccessor; + public AkarinWorldAccessor(WorldManager worldManager, NavigationListener navigationListener) { + this.worldManager = worldManager; + this.navigationListener = navigationListener; + } + + public AkarinWorldAccessor(NavigationListener navigationListener) { + this.navigationListener = navigationListener; + } + public void add(IWorldAccess worldAccessor) { + if (worldManager == null && worldAccessor instanceof WorldManager) { + worldManager = (WorldManager) worldAccessor; + return; + } List accessors = Lists.newArrayList(customAccessors); accessors.add(worldAccessor); customAccessors = accessors.toArray(new IWorldAccess[accessors.size()]); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index 12139dfbc..17e53ae13 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -1253,11 +1253,15 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc } public void addIWorldAccess(IWorldAccess iworldaccess) { + // Akarin start if (worldAccessor != null) worldAccessor.add(iworldaccess); + else if (iworldaccess instanceof WorldManager) + worldAccessor = new AkarinWorldAccessor((WorldManager) iworldaccess, this.u); else - worldAccessor = new AkarinWorldAccessor((WorldManager) iworldaccess, this.u); // Akarin - //this.v.add(iworldaccess); // Akarin + worldAccessor = new AkarinWorldAccessor(this.u); + //this.v.add(iworldaccess); + // Akarin end } public int a(float f) {