geforkt von Mirrors/Paper
2f782a6652
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes:17543ecf
SPIGOT-5035: Error Using Virtual Merchant GUI0fc6922b
SPIGOT-5028: Villager#setVillagerExperience() doesn't workbdbdbe44
SPIGOT-5024: Fox error - Unknown target reason
103 Zeilen
5.0 KiB
Diff
103 Zeilen
5.0 KiB
Diff
From aece7b7b4a5fc896c011e16a3bd56c1878038c79 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Fri, 18 Mar 2016 20:16:03 -0400
|
|
Subject: [PATCH] Add World Util Methods
|
|
|
|
Methods that can be used for other patches to help improve logic.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
|
index 9b65972569..fba176745f 100644
|
|
--- a/src/main/java/net/minecraft/server/Chunk.java
|
|
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
|
@@ -371,6 +371,7 @@ public class Chunk implements IChunkAccess {
|
|
return this.world.getChunkProvider().getLightEngine();
|
|
}
|
|
|
|
+ public final int getLightSubtracted(BlockPosition blockposition, int i) { return this.a(blockposition, i); } // Paper - OBFHELPER
|
|
public int a(BlockPosition blockposition, int i) {
|
|
return this.a(blockposition, i, this.world.getWorldProvider().g());
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 9d10caea4a..b4147d05d1 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -46,7 +46,7 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
|
|
protected final java.util.Set<TileEntity> tileEntityListUnload = com.google.common.collect.Sets.newHashSet(); // Paper
|
|
private final long b = 16777215L;
|
|
private final Thread serverThread;
|
|
- private int d;
|
|
+ private int d; public int getSkylightSubtracted() { return this.d; } public void setSkylightSubtracted(int value) { this.d = value;} // Paper - OBFHELPER
|
|
protected int j = (new Random()).nextInt();
|
|
protected final int k = 1013904223;
|
|
protected float lastRainLevel;
|
|
@@ -208,6 +208,54 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
|
|
return i < 0 || i >= 256;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public boolean isLoadedAndInBounds(BlockPosition blockposition) {
|
|
+ return getWorldBorder().isInBounds(blockposition) && getChunkIfLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4) != null;
|
|
+ }
|
|
+ public Chunk getChunkIfLoaded(BlockPosition blockposition) {
|
|
+ return getChunkIfLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4);
|
|
+ }
|
|
+ // test if meets light level, return faster
|
|
+ // logic copied from below
|
|
+ public boolean isLightLevel(BlockPosition blockposition, int level) {
|
|
+ return this.getLightLevel(blockposition) >= level; // TODO
|
|
+// if (isValidLocation(blockposition)) {
|
|
+// if (this.getType(blockposition).c(this, blockposition)) { // use neighbour brightness (where did this go)
|
|
+// int sky = getSkylightSubtracted();
|
|
+// if (this.getLightLevel(blockposition.up(), sky) >= level) {
|
|
+// return true;
|
|
+// }
|
|
+// if (this.getLightLevel(blockposition.east(), sky) >= level) {
|
|
+// return true;
|
|
+// }
|
|
+// if (this.getLightLevel(blockposition.west(), sky) >= level) {
|
|
+// return true;
|
|
+// }
|
|
+// if (this.getLightLevel(blockposition.south(), sky) >= level) {
|
|
+// return true;
|
|
+// }
|
|
+// if (this.getLightLevel(blockposition.north(), sky) >= level) {
|
|
+// return true;
|
|
+// }
|
|
+// return false;
|
|
+// } else {
|
|
+// if (blockposition.getY() >= 256) {
|
|
+// blockposition = new BlockPosition(blockposition.getX(), 255, blockposition.getZ());
|
|
+// }
|
|
+//
|
|
+// Chunk chunk = this.getChunkAtWorldCoords(blockposition);
|
|
+// return chunk.getLightSubtracted(blockposition, this.getSkylightSubtracted()) >= level;
|
|
+// }
|
|
+// } else {
|
|
+// return true;
|
|
+// }
|
|
+ }
|
|
+ // reduces need to do isLoaded before getType
|
|
+ public IBlockData getTypeIfLoadedAndInBounds(BlockPosition blockposition) {
|
|
+ return getWorldBorder().isInBounds(blockposition) ? getTypeIfLoaded(blockposition) : null;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public Chunk getChunkAtWorldCoords(BlockPosition blockposition) {
|
|
return this.getChunkAt(blockposition.getX() >> 4, blockposition.getZ() >> 4);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/WorldBorder.java b/src/main/java/net/minecraft/server/WorldBorder.java
|
|
index 94d1c2be11..77b805f3ae 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldBorder.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldBorder.java
|
|
@@ -19,6 +19,7 @@ public class WorldBorder {
|
|
|
|
public WorldBorder() {}
|
|
|
|
+ public final boolean isInBounds(BlockPosition blockposition) { return this.a(blockposition); } // Paper - OBFHELPER
|
|
public boolean a(BlockPosition blockposition) {
|
|
return (double) (blockposition.getX() + 1) > this.c() && (double) blockposition.getX() < this.e() && (double) (blockposition.getZ() + 1) > this.d() && (double) blockposition.getZ() < this.f();
|
|
}
|
|
--
|
|
2.21.0
|
|
|