Skip to content

Commit 6dc38ef

Browse files
JayemCeekaySirYwell
authored andcommitted
Apply DataArray Patch and update bukkit adapters.
1 parent 9fc47e9 commit 6dc38ef

File tree

62 files changed

+953
-873
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+953
-873
lines changed

worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_20_R2/PaperweightAdapter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.common.util.concurrent.Futures;
2929
import com.mojang.datafixers.util.Either;
3030
import com.mojang.serialization.Lifecycle;
31+
import com.sk89q.jnbt.CompoundTag;
3132
import com.sk89q.jnbt.NBTConstants;
3233
import com.sk89q.worldedit.WorldEditException;
3334
import com.sk89q.worldedit.blocks.BaseItem;
@@ -145,7 +146,6 @@
145146
import org.spigotmc.SpigotConfig;
146147
import org.spigotmc.WatchdogThread;
147148

148-
import javax.annotation.Nullable;
149149
import java.lang.ref.WeakReference;
150150
import java.lang.reflect.Field;
151151
import java.lang.reflect.InvocationTargetException;
@@ -168,6 +168,7 @@
168168
import java.util.logging.Level;
169169
import java.util.logging.Logger;
170170
import java.util.stream.Collectors;
171+
import javax.annotation.Nullable;
171172

172173
import static com.google.common.base.Preconditions.checkNotNull;
173174
import static com.google.common.base.Preconditions.checkState;

worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_20_R2/PaperweightDataConverters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import org.apache.logging.log4j.Logger;
5050
import org.enginehub.linbus.tree.LinCompoundTag;
5151

52-
import javax.annotation.Nullable;
5352
import java.lang.reflect.Type;
5453
import java.util.ArrayList;
5554
import java.util.EnumMap;
@@ -63,6 +62,7 @@
6362
import java.util.UUID;
6463
import java.util.concurrent.Executor;
6564
import java.util.stream.Collectors;
65+
import javax.annotation.Nullable;
6666

6767
/**
6868
* Handles converting all Pre 1.13.2 data using the Legacy DataFix System (ported to 1.13.2)

worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_20_R2/PaperweightWorldNativeAccess.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
import org.bukkit.event.block.BlockPhysicsEvent;
3838
import org.enginehub.linbus.tree.LinCompoundTag;
3939

40-
import javax.annotation.Nullable;
4140
import java.lang.ref.WeakReference;
4241
import java.util.Objects;
42+
import javax.annotation.Nullable;
4343

4444
public class PaperweightWorldNativeAccess implements WorldNativeAccess<LevelChunk, net.minecraft.world.level.block.state.BlockState, BlockPos> {
4545
private static final int UPDATE = 1;

worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks.java

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
import com.fastasyncworldedit.core.queue.IChunkGet;
1313
import com.fastasyncworldedit.core.queue.IChunkSet;
1414
import com.fastasyncworldedit.core.queue.implementation.QueueHandler;
15-
import com.fastasyncworldedit.core.queue.implementation.blocks.CharGetBlocks;
15+
import com.fastasyncworldedit.core.queue.implementation.blocks.DataArray;
16+
import com.fastasyncworldedit.core.queue.implementation.blocks.DataArrayGetBlocks;
1617
import com.fastasyncworldedit.core.util.MathMan;
1718
import com.fastasyncworldedit.core.util.NbtUtils;
1819
import com.fastasyncworldedit.core.util.collection.AdaptedMap;
@@ -91,7 +92,7 @@
9192

9293
import static net.minecraft.core.registries.Registries.BIOME;
9394

94-
public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBlocks {
95+
public class PaperweightGetBlocks extends DataArrayGetBlocks implements BukkitGetBlocks {
9596

9697
private static final Logger LOGGER = LogManagerCompat.getLogger();
9798

@@ -502,7 +503,7 @@ public synchronized <T extends Future<T>> T call(IChunkSet set, Runnable finaliz
502503
);
503504
LevelChunkSection newSection = PaperweightPlatformAdapter.newChunkSection(
504505
layerNo,
505-
new char[4096],
506+
DataArray.createEmpty(),
506507
adapter,
507508
biomeRegistry,
508509
biomeData
@@ -515,7 +516,7 @@ public synchronized <T extends Future<T>> T call(IChunkSet set, Runnable finaliz
515516
newSection,
516517
getSectionIndex
517518
)) {
518-
updateGet(nmsChunk, levelChunkSections, newSection, new char[4096], getSectionIndex);
519+
updateGet(nmsChunk, levelChunkSections, newSection, DataArray.createEmpty(), getSectionIndex);
519520
continue;
520521
} else {
521522
existingSection = levelChunkSections[getSectionIndex];
@@ -545,9 +546,7 @@ public synchronized <T extends Future<T>> T call(IChunkSet set, Runnable finaliz
545546

546547
// setArr is modified by PaperweightPlatformAdapter#newChunkSection. This is in order to write changes to
547548
// this chunk GET when #updateGet is called. Future dords, please listen this time.
548-
char[] tmp = set.load(layerNo);
549-
char[] setArr = new char[tmp.length];
550-
System.arraycopy(tmp, 0, setArr, 0, tmp.length);
549+
DataArray setArr = DataArray.createCopy(set.load(layerNo));
551550

552551
// synchronise on internal section to avoid circular locking with a continuing edit if the chunk was
553552
// submitted to keep loaded internal chunks to queue target size.
@@ -564,10 +563,7 @@ public synchronized <T extends Future<T>> T call(IChunkSet set, Runnable finaliz
564563
}
565564

566565
if (createCopy) {
567-
char[] tmpLoad = loadPrivately(layerNo);
568-
char[] copyArr = new char[4096];
569-
System.arraycopy(tmpLoad, 0, copyArr, 0, 4096);
570-
copy.storeSection(getSectionIndex, copyArr);
566+
copy.storeSection(getSectionIndex, DataArray.createCopy(loadPrivately(layerNo)));
571567
if (biomes != null && existingSection != null) {
572568
copy.storeBiomes(getSectionIndex, existingSection.getBiomes());
573569
}
@@ -627,10 +623,8 @@ public synchronized <T extends Future<T>> T call(IChunkSet set, Runnable finaliz
627623
} else if (existingSection != getSections(false)[getSectionIndex]) {
628624
this.sections[getSectionIndex] = existingSection;
629625
this.reset();
630-
} else if (!Arrays.equals(
631-
update(getSectionIndex, new char[4096], true),
632-
loadPrivately(layerNo)
633-
)) {
626+
} else if (!update(getSectionIndex, DataArray.createEmpty(), true)
627+
.equals(loadPrivately(layerNo))) {
634628
this.reset(layerNo);
635629
/*} else if (lock.isModified()) {
636630
this.reset(layerNo);*/
@@ -899,7 +893,7 @@ private void updateGet(
899893
LevelChunk nmsChunk,
900894
LevelChunkSection[] chunkSections,
901895
LevelChunkSection section,
902-
char[] arr,
896+
DataArray arr,
903897
int layer
904898
) {
905899
try {
@@ -924,7 +918,7 @@ private void updateGet(
924918
this.blocks[layer] = arr;
925919
}
926920

927-
private char[] loadPrivately(int layer) {
921+
private DataArray loadPrivately(int layer) {
928922
layer -= getMinSectionPosition();
929923
if (super.sections[layer] != null) {
930924
synchronized (super.sectionLocks[layer]) {
@@ -955,21 +949,14 @@ public void send() {
955949
*/
956950
@Override
957951
@SuppressWarnings("unchecked")
958-
public char[] update(int layer, char[] data, boolean aggressive) {
952+
public DataArray update(int layer, DataArray data, boolean aggressive) {
959953
LevelChunkSection section = getSections(aggressive)[layer];
960954
// Section is null, return empty array
961955
if (section == null) {
962-
data = new char[4096];
963-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
964-
return data;
956+
return DataArray.createFilled(BlockTypesCache.ReservedIDs.AIR);
965957
}
966-
if (data != null && data.length != 4096) {
967-
data = new char[4096];
968-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
969-
}
970-
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096) {
971-
data = new char[4096];
972-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
958+
if (data == null || data == FaweCache.INSTANCE.EMPTY_DATA) {
959+
data = DataArray.createFilled(BlockTypesCache.ReservedIDs.AIR);
973960
}
974961
Semaphore lock = PaperweightPlatformAdapter.applyLock(section);
975962
synchronized (lock) {
@@ -982,7 +969,7 @@ public char[] update(int layer, char[] data, boolean aggressive) {
982969
final BitStorage bits = (BitStorage) PaperweightPlatformAdapter.fieldStorage.get(dataObject);
983970

984971
if (bits instanceof ZeroBitStorage) {
985-
Arrays.fill(data, adapter.adaptToChar(blocks.get(0, 0, 0))); // get(int) is only public on paper
972+
data.setAll(adapter.adaptToChar(blocks.get(0, 0, 0))); // get(int) is only public on paper
986973
return data;
987974
}
988975

@@ -999,9 +986,9 @@ public char[] update(int layer, char[] data, boolean aggressive) {
999986
} else {
1000987
// The section's palette is the global block palette.
1001988
for (int i = 0; i < 4096; i++) {
1002-
char paletteVal = data[i];
989+
char paletteVal = (char) data.getAt(i);
1003990
char ordinal = adapter.ibdIDToOrdinal(paletteVal);
1004-
data[i] = ordinal;
991+
data.setAt(i, ordinal);
1005992
}
1006993
return data;
1007994
}
@@ -1014,17 +1001,17 @@ public char[] update(int layer, char[] data, boolean aggressive) {
10141001
paletteToOrdinal[i] = ordinal;
10151002
}
10161003
for (int i = 0; i < 4096; i++) {
1017-
char paletteVal = data[i];
1004+
char paletteVal = (char) data.getAt(i);
10181005
char val = paletteToOrdinal[paletteVal];
10191006
if (val == Character.MAX_VALUE) {
10201007
val = ordinal(palette.valueFor(i), adapter);
10211008
paletteToOrdinal[i] = val;
10221009
}
1023-
data[i] = val;
1010+
data.setAt(i, val);
10241011
}
10251012
} else {
10261013
char ordinal = ordinal(palette.valueFor(0), adapter);
1027-
Arrays.fill(data, ordinal);
1014+
data.setAll(ordinal);
10281015
}
10291016
} finally {
10301017
for (int i = 0; i < num_palette; i++) {

worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightGetBlocks_Copy.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.fastasyncworldedit.core.queue.IBlocks;
66
import com.fastasyncworldedit.core.queue.IChunkGet;
77
import com.fastasyncworldedit.core.queue.IChunkSet;
8+
import com.fastasyncworldedit.core.queue.implementation.blocks.DataArray;
89
import com.fastasyncworldedit.core.util.NbtUtils;
910
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
1011
import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter;
@@ -28,7 +29,6 @@
2829
import org.enginehub.linbus.tree.LinCompoundTag;
2930

3031
import javax.annotation.Nullable;
31-
import java.util.Arrays;
3232
import java.util.Collection;
3333
import java.util.HashMap;
3434
import java.util.HashSet;
@@ -43,7 +43,7 @@ public class PaperweightGetBlocks_Copy implements IChunkGet {
4343

4444
private final Map<BlockVector3, FaweCompoundTag> tiles = new HashMap<>();
4545
private final Set<FaweCompoundTag> entities = new HashSet<>();
46-
private final char[][] blocks;
46+
private final DataArray[] blocks;
4747
private final int minHeight;
4848
private final int maxHeight;
4949
final ServerLevel serverLevel;
@@ -55,7 +55,7 @@ protected PaperweightGetBlocks_Copy(LevelChunk levelChunk) {
5555
this.serverLevel = levelChunk.level;
5656
this.minHeight = serverLevel.getMinBuildHeight();
5757
this.maxHeight = serverLevel.getMaxBuildHeight() - 1; // Minecraft max limit is exclusive.
58-
this.blocks = new char[getSectionCount()][];
58+
this.blocks = new DataArray[getSectionCount()];
5959
}
6060

6161
protected void storeTile(BlockEntity blockEntity) {
@@ -161,7 +161,7 @@ public int getSectionCount() {
161161
return serverLevel.getSectionsCount();
162162
}
163163

164-
protected void storeSection(int layer, char[] data) {
164+
protected void storeSection(int layer, DataArray data) {
165165
blocks[layer] = data;
166166
}
167167

@@ -208,17 +208,16 @@ public boolean hasSection(int layer) {
208208
}
209209

210210
@Override
211-
public char[] load(int layer) {
211+
public DataArray load(int layer) {
212212
layer -= getMinSectionPosition();
213213
if (blocks[layer] == null) {
214-
blocks[layer] = new char[4096];
215-
Arrays.fill(blocks[layer], (char) BlockTypesCache.ReservedIDs.AIR);
214+
blocks[layer] = DataArray.createFilled(BlockTypesCache.ReservedIDs.AIR);
216215
}
217216
return blocks[layer];
218217
}
219218

220219
@Override
221-
public char[] loadIfPresent(int layer) {
220+
public DataArray loadIfPresent(int layer) {
222221
layer -= getMinSectionPosition();
223222
return blocks[layer];
224223
}
@@ -261,7 +260,7 @@ public <T extends Future<T>> T call(IChunkSet set, Runnable finalize) {
261260
public char get(int x, int y, int z) {
262261
final int layer = (y >> 4) - getMinSectionPosition();
263262
final int index = (y & 15) << 8 | z << 4 | x;
264-
return blocks[layer][index];
263+
return (char) blocks[layer].getAt(index);
265264
}
266265

267266

worldedit-bukkit/adapters/adapter-1_20_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R2/PaperweightPlatformAdapter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.fastasyncworldedit.core.FaweCache;
99
import com.fastasyncworldedit.core.math.BitArrayUnstretched;
1010
import com.fastasyncworldedit.core.math.IntPair;
11+
import com.fastasyncworldedit.core.queue.implementation.blocks.DataArray;
1112
import com.fastasyncworldedit.core.util.MathMan;
1213
import com.fastasyncworldedit.core.util.TaskManager;
1314
import com.mojang.datafixers.util.Either;
@@ -410,7 +411,7 @@ private static List<ServerPlayer> nearbyPlayers(ServerLevel serverLevel, ChunkPo
410411
*/
411412
public static LevelChunkSection newChunkSection(
412413
final int layer,
413-
final char[] blocks,
414+
final DataArray blocks,
414415
CachedBukkitAdapter adapter,
415416
Registry<Biome> biomeRegistry,
416417
@Nullable PalettedContainer<Holder<Biome>> biomes
@@ -420,8 +421,8 @@ public static LevelChunkSection newChunkSection(
420421

421422
public static LevelChunkSection newChunkSection(
422423
final int layer,
423-
final Function<Integer, char[]> get,
424-
char[] set,
424+
final Function<Integer, DataArray> get,
425+
DataArray set,
425426
CachedBukkitAdapter adapter,
426427
Registry<Biome> biomeRegistry,
427428
@Nullable PalettedContainer<Holder<Biome>> biomes

0 commit comments

Comments
 (0)