forked from hpfxd/PandaSpigot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0075-Use-less-resources-for-collisions.patch
118 lines (107 loc) · 5.92 KB
/
0075-Use-less-resources-for-collisions.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: mechoriet <[email protected]>
Date: Sat, 19 Nov 2022 16:20:00 +0100
Subject: [PATCH] Use less resources for collisions
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index df28cca6175ff3ddf4992c44a0760ef17310b03e..73e73f457ceb3c6a7011b7392b05f820d66420e9 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -501,11 +501,16 @@ public class Chunk {
}
// PaperSpigot start - Optimize getBlockData
+ // PandaSpigot start
public IBlockData getBlockData(final BlockPosition blockposition) {
- if (blockposition.getY() >= 0 && blockposition.getY() >> 4 < this.sections.length) {
- ChunkSection chunksection = this.sections[blockposition.getY() >> 4];
+ return this.getBlockData(blockposition.getX(), blockposition.getY(), blockposition.getZ());
+ }
+ public IBlockData getBlockData(int x, int y, int z) {
+ if (y >= 0 && y >> 4 < this.sections.length) {
+ ChunkSection chunksection = this.sections[y >> 4];
if (chunksection != null) {
- return chunksection.getType(blockposition.getX() & 15, blockposition.getY() & 15, blockposition.getZ() & 15);
+ return chunksection.getType(x & 15, y & 15, z & 15);
+ // PandaSpigot end
}
}
return Blocks.AIR.getBlockData();
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 58e485c2e5845dda15c33ee1beb170860535f88b..854cf888d64e50bfd85420bb5dcc93860a64f132 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -803,7 +803,7 @@ public abstract class Entity implements ICommandListener {
for (int j = blockposition.getY(); j <= blockposition1.getY(); ++j) {
for (int k = blockposition.getZ(); k <= blockposition1.getZ(); ++k) {
BlockPosition blockposition2 = new BlockPosition(i, j, k);
- IBlockData iblockdata = this.world.getType(blockposition2);
+ IBlockData iblockdata = this.world.getType(i, j, k); // PandaSpigot
try {
iblockdata.getBlock().a(this.world, blockposition2, iblockdata, this);
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 46ebdb5e22592658cbd8172390b52edac5344e0f..ba185d2ef2b7970f566aa9c5980dad1e6c80e6f0 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -296,8 +296,13 @@ public abstract class World implements IBlockAccess {
}
private boolean isValidLocation(BlockPosition blockposition) {
- return blockposition.getX() >= -30000000 && blockposition.getZ() >= -30000000 && blockposition.getX() < 30000000 && blockposition.getZ() < 30000000 && blockposition.getY() >= 0 && blockposition.getY() < 256;
+ // PandaSpigot start
+ return this.isValidLocation(blockposition.getX(), blockposition.getY(), blockposition.getZ());
+ }
+ private boolean isValidLocation(int x, int y, int z) {
+ return x >= -30000000 && z >= -30000000 && x < 30000000 && z < 30000000 && y >= 0 && y < 256;
}
+ // PandaSpigot end
public boolean isEmpty(BlockPosition blockposition) {
return this.getType(blockposition).getBlock().getMaterial() == Material.AIR;
@@ -361,8 +366,13 @@ public abstract class World implements IBlockAccess {
}
public Chunk getChunkAtWorldCoords(BlockPosition blockposition) {
- return this.getChunkAt(blockposition.getX() >> 4, blockposition.getZ() >> 4);
+ // PandaSpigot start
+ return this.getChunkAtWorldCoords(blockposition.getX(), blockposition.getZ());
}
+ public Chunk getChunkAtWorldCoords(int x, int z) {
+ return this.getChunkAt(x >> 4, z >> 4);
+ }
+ // PandaSpigot end
public Chunk getChunkAt(int i, int j) {
return this.chunkProvider.getOrCreateChunk(i, j);
@@ -830,27 +840,36 @@ public abstract class World implements IBlockAccess {
return getType( blockposition, true );
}
+ // PandaSpigot start
+ public IBlockData getType(int blockposition_x, int blockposition_y, int blockposition_z) {
+ return getType( blockposition_x, blockposition_y, blockposition_z, true );
+ }
+
public IBlockData getType(BlockPosition blockposition, boolean useCaptured) {
+ return this.getType(blockposition.getX(), blockposition.getY(), blockposition.getZ(), useCaptured);
+ }
+ public IBlockData getType(int x, int y, int z, boolean useCaptured) {
// CraftBukkit start - tree generation
if (captureTreeGeneration && useCaptured) {
// Spigot end
Iterator<BlockState> it = capturedBlockStates.iterator();
while (it.hasNext()) {
BlockState previous = it.next();
- if (previous.getX() == blockposition.getX() && previous.getY() == blockposition.getY() && previous.getZ() == blockposition.getZ()) {
+ if (previous.getX() == x && previous.getY() == y && previous.getZ() == z) {
return CraftMagicNumbers.getBlock(previous.getTypeId()).fromLegacyData(previous.getRawData());
}
}
}
// CraftBukkit end
- if (!this.isValidLocation(blockposition)) {
+ if (!this.isValidLocation(x, y, z)) {
return Blocks.AIR.getBlockData();
} else {
- Chunk chunk = this.getChunkAtWorldCoords(blockposition);
+ Chunk chunk = this.getChunkAtWorldCoords(x, z);
- return chunk.getBlockData(blockposition);
+ return chunk.getBlockData(x, y, z);
}
}
+ // PandaSpigot end
public boolean w() {
return this.I < 4;