diff --git a/src/api/main/java/io/akarin/server/core/AkarinGlobalConfig.java b/src/api/main/java/io/akarin/server/core/AkarinGlobalConfig.java index 8d97de55c..c702d9ac1 100644 --- a/src/api/main/java/io/akarin/server/core/AkarinGlobalConfig.java +++ b/src/api/main/java/io/akarin/server/core/AkarinGlobalConfig.java @@ -175,4 +175,9 @@ public class AkarinGlobalConfig { private static void userCacheExpireDays() { userCacheExpireDays = getSeconds(getString("core.user-cache-expire-time", "30d")); } + + public static double blockbreakAnimationVisibleDistance = 1024; + private static void blockbreakAnimationVisibleDistance() { + blockbreakAnimationVisibleDistance = Math.sqrt(getDouble("alternative.block-break-animation-visible-distance", 32.00)); + } } \ No newline at end of file diff --git a/src/main/java/io/akarin/server/core/AkarinWorldAccessor.java b/src/main/java/io/akarin/server/core/AkarinWorldAccessor.java new file mode 100644 index 000000000..e3794c513 --- /dev/null +++ b/src/main/java/io/akarin/server/core/AkarinWorldAccessor.java @@ -0,0 +1,89 @@ +package io.akarin.server.core; + +import lombok.RequiredArgsConstructor; +import net.minecraft.server.BlockPosition; +import net.minecraft.server.Entity; +import net.minecraft.server.EntityHuman; +import net.minecraft.server.IBlockAccess; +import net.minecraft.server.IBlockData; +import net.minecraft.server.IWorldAccess; +import net.minecraft.server.NavigationListener; +import net.minecraft.server.ParticleParam; +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 final NavigationListener navigationListener; + + @Override + public void a(Entity arg0) { + worldManager.a(arg0); + navigationListener.a(arg0); + } + + @Override + public void a(int arg0, BlockPosition arg1, int arg2) { + worldManager.a(arg0, arg1, arg2); + } + + @Override + public void a(EntityHuman arg0, int arg1, BlockPosition arg2, int arg3) { + worldManager.a(arg0, arg1, arg2, arg3); + } + + @Override + public void a(IBlockAccess arg0, BlockPosition arg1, IBlockData arg2, IBlockData arg3, int arg4) { + worldManager.a(arg0, arg1, arg2, arg3, arg4); + navigationListener.a(arg0, arg1, arg2, arg3, arg4); + } + + @Override + public void a(EntityHuman arg0, SoundEffect arg1, SoundCategory arg2, double arg3, double arg4, double arg5, float arg6, float arg7) { + worldManager.a(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); + } + + @Override + public void b(Entity arg0) { + worldManager.b(arg0); + navigationListener.b(arg0); + } + + @Override + public void b(int arg0, BlockPosition arg1, int arg2) { + worldManager.b(arg0, arg1, arg2); + } + + // unused + @Override + @Deprecated + public void a(BlockPosition arg0) { + ; + } + + @Override + @Deprecated + public void a(SoundEffect arg0, BlockPosition arg1) { + ; + } + + @Override + @Deprecated + public void a(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) { + ; + } + + @Override + @Deprecated + public void a(ParticleParam arg0, boolean arg1, double arg2, double arg3, double arg4, double arg5, double arg6, double arg7) { + ; + } + + @Override + @Deprecated + public void a(ParticleParam arg0, boolean arg1, boolean arg2, double arg3, double arg4, double arg5, double arg6, double arg7, double arg8) { + ; + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/AkarinUserCache.java b/src/main/java/net/minecraft/server/AkarinUserCache.java index e1db70c17..1c7783bf1 100644 --- a/src/main/java/net/minecraft/server/AkarinUserCache.java +++ b/src/main/java/net/minecraft/server/AkarinUserCache.java @@ -88,6 +88,7 @@ public class AkarinUserCache { ProfileLookupCallback callbackHandler = new ProfileLookupCallback() { @Override public void onProfileLookupSucceeded(GameProfile gameprofile) { + LOGGER.warn("Failed to lookup player {}, using local UUID.", gameprofile.getName()); if (async) callback.onProfileLookupSucceeded(gameprofile); else diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index a8f6c2d8a..cfd5e09df 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -1,6 +1,8 @@ package net.minecraft.server; import co.aikar.timings.Timings; +import io.akarin.server.core.AkarinWorldAccessor; + import com.destroystokyo.paper.antixray.ChunkPacketBlockController; // Paper - Anti-Xray import com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray; // Paper - Anti-Xray import com.destroystokyo.paper.event.server.ServerExceptionEvent; @@ -97,6 +99,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc public WorldProvider worldProvider; protected NavigationListener u = new NavigationListener(); protected List v; + private AkarinWorldAccessor worldAccessor; // Akarin protected IChunkProvider chunkProvider; protected final IDataManager dataManager; public WorldData worldData; @@ -193,7 +196,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit this.ticksPerMonsterSpawns = this.getServer().getTicksPerMonsterSpawns(); // CraftBukkit // CraftBukkit end - this.v = new CopyOnWriteArrayList(new IWorldAccess[] { this.u}); // Akarin - ArrayList -> CopyOnWriteArrayList + this.v = Lists.newArrayList(); // Akarin this.allowMonsters = true; this.allowAnimals = true; this.E = new int['\u8000']; @@ -580,9 +583,14 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc } public void notify(BlockPosition blockposition, IBlockData iblockdata, IBlockData iblockdata1, int i) { + // Akarin start + /* for (int j = 0; j < this.v.size(); ++j) { ((IWorldAccess) this.v.get(j)).a(this, blockposition, iblockdata, iblockdata1, i); } + */ + worldAccessor.a(this, blockposition, iblockdata, iblockdata1, i); + // Akarin end } @@ -1048,9 +1056,14 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc // Paper end public void a(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, SoundEffect soundeffect, SoundCategory soundcategory, float f, float f1) { + // Akarin start + /* for (int i = 0; i < this.v.size(); ++i) { ((IWorldAccess) this.v.get(i)).a(entityhuman, soundeffect, soundcategory, d0, d1, d2, f, f1); } + */ + worldAccessor.a(entityhuman, soundeffect, soundcategory, d0, d1, d2, f, f1); + // Akarin end } @@ -1136,9 +1149,14 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc } protected void b(Entity entity) { + // Akarin start + /* for (int i = 0; i < this.v.size(); ++i) { ((IWorldAccess) this.v.get(i)).a(entity); } + */ + worldAccessor.b(entity); + // Akarin end entity.valid = true; // CraftBukkit entity.shouldBeRemoved = false; // Paper - shouldn't be removed after being re-added @@ -1146,9 +1164,14 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc } protected void c(Entity entity) { + // Akarin start + /* for (int i = 0; i < this.v.size(); ++i) { ((IWorldAccess) this.v.get(i)).b(entity); } + */ + worldAccessor.b(entity); + // Akarin end new com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent(entity.getBukkitEntity()).callEvent(); // Paper - fire while valid entity.valid = false; // CraftBukkit @@ -1230,7 +1253,8 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc } public void addIWorldAccess(IWorldAccess iworldaccess) { - this.v.add(iworldaccess); + worldAccessor = new AkarinWorldAccessor((WorldManager) iworldaccess, this.u); // Akarin + //this.v.add(iworldaccess); // Akarin } public int a(float f) { @@ -2933,9 +2957,14 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc } public void a(int i, BlockPosition blockposition, int j) { + // Akarin start + /* for (int k = 0; k < this.v.size(); ++k) { ((IWorldAccess) this.v.get(k)).a(i, blockposition, j); } + */ + worldAccessor.a(i, blockposition, j); + // Akarin end } @@ -2945,9 +2974,14 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc public void a(@Nullable EntityHuman entityhuman, int i, BlockPosition blockposition, int j) { try { + // Akarin start + /* for (int k = 0; k < this.v.size(); ++k) { ((IWorldAccess) this.v.get(k)).a(entityhuman, i, blockposition, j); } + */ + worldAccessor.a(entityhuman, i, blockposition, j); + // Akarin end } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Playing level event"); @@ -2990,11 +3024,16 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc } public void c(int i, BlockPosition blockposition, int j) { + // Akarin start + /* for (int k = 0; k < this.v.size(); ++k) { IWorldAccess iworldaccess = (IWorldAccess) this.v.get(k); iworldaccess.b(i, blockposition, j); } + */ + worldAccessor.b(i, blockposition, j); + // Akarin end } diff --git a/src/main/java/net/minecraft/server/WorldManager.java b/src/main/java/net/minecraft/server/WorldManager.java index 74ab39ab7..0ba0eb661 100644 --- a/src/main/java/net/minecraft/server/WorldManager.java +++ b/src/main/java/net/minecraft/server/WorldManager.java @@ -72,7 +72,7 @@ public class WorldManager implements IWorldAccess { Iterator iterator = list.iterator(); while (iterator.hasNext()) { EntityHuman human = iterator.next(); - if (!(human instanceof EntityPlayer) || human == entity) continue; + if (!(human instanceof EntityPlayer)) continue; EntityPlayer entityplayer = (EntityPlayer) human; // Paper end diff --git a/work/Paper b/work/Paper index b587621ad..c5ef31cb0 160000 --- a/work/Paper +++ b/work/Paper @@ -1 +1 @@ -Subproject commit b587621ad9c0723e57d18d7245fb3ff5d59b08c8 +Subproject commit c5ef31cb0d5ca1c65727682b3dc1fbc3e98ea250