mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-01 17:01:56 +01:00
96b32aa6bc
Remove chunk neighbour system until we can figure out the chunk system
157 lines
No EOL
7.1 KiB
Diff
157 lines
No EOL
7.1 KiB
Diff
From 0000000000000000000000000000000000000000 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 d578679920..2928f7d218 100644
|
|
--- a/src/main/java/net/minecraft/server/Chunk.java
|
|
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
|
@@ -0,0 +0,0 @@ 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/IWorldReader.java b/src/main/java/net/minecraft/server/IWorldReader.java
|
|
index bac6c9d65b..0930552b1f 100644
|
|
--- a/src/main/java/net/minecraft/server/IWorldReader.java
|
|
+++ b/src/main/java/net/minecraft/server/IWorldReader.java
|
|
@@ -0,0 +0,0 @@ public interface IWorldReader extends IIBlockAccess {
|
|
}
|
|
|
|
int getLightLevel(BlockPosition blockposition, int i);
|
|
+ // Paper start
|
|
+ default @Nullable
|
|
+ IBlockData getTypeIfLoaded(BlockPosition var1) {
|
|
+ return isLoaded(var1) ? getType(var1) : null;
|
|
+ }
|
|
+
|
|
+ default @Nullable
|
|
+ Block getBlockIfLoaded(BlockPosition var1) {
|
|
+ return isLoaded(var1) ? getType(var1).getBlock() : null;
|
|
+ }
|
|
+
|
|
+ default @Nullable
|
|
+ Material getMaterialIfLoaded(BlockPosition var1) {
|
|
+ return isLoaded(var1) ? getType(var1).getMaterial() : null;
|
|
+ }
|
|
+ // Paper end
|
|
|
|
@Nullable
|
|
IChunkAccess getChunkAt(int i, int j, ChunkStatus chunkstatus, boolean flag);
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 24ea0dbe03..e1cebacb83 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -0,0 +0,0 @@ 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 c;
|
|
- 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 l;
|
|
@@ -0,0 +0,0 @@ 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;
|
|
+ }
|
|
+ public IBlockData getTypeIfLoaded(BlockPosition blockposition) {
|
|
+ // CraftBukkit start - tree generation
|
|
+ if (captureTreeGeneration) {
|
|
+ for (CraftBlockState previous : capturedBlockStates) {
|
|
+ if (previous.getX() == blockposition.getX() && previous.getY() == blockposition.getY() && previous.getZ() == blockposition.getZ()) {
|
|
+ return previous.getHandle();
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ // CraftBukkit end
|
|
+ Chunk chunk = this.getChunkIfLoaded(blockposition);
|
|
+ if (chunk != null) {
|
|
+ return isValidLocation(blockposition) ? chunk.getType(blockposition) : Blocks.AIR.getBlockData();
|
|
+ }
|
|
+ return null;
|
|
+ }
|
|
+ public Block getBlockIfLoaded(BlockPosition blockposition) {
|
|
+ IBlockData type = getTypeIfLoaded(blockposition);
|
|
+ if (type == null) {
|
|
+ return null;
|
|
+ }
|
|
+ return type.getBlock();
|
|
+ }
|
|
+ public Material getMaterialIfLoaded(BlockPosition blockposition) {
|
|
+ IBlockData type = getTypeIfLoaded(blockposition);
|
|
+ if (type == null) {
|
|
+ return null;
|
|
+ }
|
|
+ return type.getBlock().material;
|
|
+ }
|
|
+ // 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
|
|
@@ -0,0 +0,0 @@ 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();
|
|
}
|
|
--
|