Fixup PSPE

This commit is contained in:
Sotr
2019-03-26 20:26:15 +08:00
parent ad23b84309
commit b9c1d68ccb
2 changed files with 22 additions and 5 deletions

View File

@@ -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<IWorldAccess> accessors = Lists.newArrayList(customAccessors);
accessors.add(worldAccessor);
customAccessors = accessors.toArray(new IWorldAccess[accessors.size()]);

View File

@@ -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) {