Skip to content

Commit aa03f18

Browse files
authored
Simplify and deduplicate PaperweightGetBlocks#update logic (#3055)
* Simplify and deduplicate PaperweightGetBlocks#update logic * only call into init when needed
1 parent cdd0dc8 commit aa03f18

File tree

13 files changed

+115
-168
lines changed

13 files changed

+115
-168
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ public BukkitImplAdapter<net.minecraft.nbt.Tag> getParent() {
146146
return parent;
147147
}
148148

149+
@Override
150+
protected void ensureInit() {
151+
if (!this.initialised) {
152+
init();
153+
}
154+
}
155+
149156
private synchronized boolean init() {
150157
if (ibdToOrdinal != null && ibdToOrdinal[1] != 0) {
151158
return false;

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

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -966,13 +966,8 @@ public char[] update(int layer, char[] data, boolean aggressive) {
966966
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
967967
return data;
968968
}
969-
if (data != null && data.length != 4096) {
970-
data = new char[4096];
971-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
972-
}
973-
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096) {
974-
data = new char[4096];
975-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
969+
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096 || data.length != 4096) {
970+
data = new char[4096]; // new array, will be populated below
976971
}
977972
Semaphore lock = PaperweightPlatformAdapter.applyLock(section);
978973
synchronized (lock) {
@@ -1001,38 +996,24 @@ public char[] update(int layer, char[] data, boolean aggressive) {
1001996
num_palette = palette.getSize();
1002997
} else {
1003998
// The section's palette is the global block palette.
1004-
for (int i = 0; i < 4096; i++) {
1005-
char paletteVal = data[i];
1006-
char ordinal = adapter.ibdIDToOrdinal(paletteVal);
1007-
data[i] = ordinal;
1008-
}
999+
adapter.mapFromGlobalPalette(data);
10091000
return data;
10101001
}
10111002

10121003
char[] paletteToOrdinal = FaweCache.INSTANCE.PALETTE_TO_BLOCK_CHAR.get();
10131004
try {
1014-
if (num_palette != 1) {
1005+
if (num_palette == 1) {
1006+
char ordinal = ordinal(palette.valueFor(0), adapter);
1007+
Arrays.fill(data, ordinal);
1008+
} else {
10151009
for (int i = 0; i < num_palette; i++) {
10161010
char ordinal = ordinal(palette.valueFor(i), adapter);
10171011
paletteToOrdinal[i] = ordinal;
10181012
}
1019-
for (int i = 0; i < 4096; i++) {
1020-
char paletteVal = data[i];
1021-
char val = paletteToOrdinal[paletteVal];
1022-
if (val == Character.MAX_VALUE) {
1023-
val = ordinal(palette.valueFor(i), adapter);
1024-
paletteToOrdinal[i] = val;
1025-
}
1026-
data[i] = val;
1027-
}
1028-
} else {
1029-
char ordinal = ordinal(palette.valueFor(0), adapter);
1030-
Arrays.fill(data, ordinal);
1013+
adapter.mapWithPalette(data, paletteToOrdinal);
10311014
}
10321015
} finally {
1033-
for (int i = 0; i < num_palette; i++) {
1034-
paletteToOrdinal[i] = Character.MAX_VALUE;
1035-
}
1016+
Arrays.fill(paletteToOrdinal, 0, num_palette, Character.MAX_VALUE);
10361017
}
10371018
return data;
10381019
} catch (IllegalAccessException | InterruptedException e) {

worldedit-bukkit/adapters/adapter-1_20_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R3/PaperweightFaweAdapter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,13 @@ public BukkitImplAdapter<net.minecraft.nbt.Tag> getParent() {
145145
return parent;
146146
}
147147

148+
@Override
149+
protected void ensureInit() {
150+
if (!this.initialised) {
151+
init();
152+
}
153+
}
154+
148155
private synchronized boolean init() {
149156
if (ibdToOrdinal != null && ibdToOrdinal[1] != 0) {
150157
return false;

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

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -964,13 +964,8 @@ public char[] update(int layer, char[] data, boolean aggressive) {
964964
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
965965
return data;
966966
}
967-
if (data != null && data.length != 4096) {
968-
data = new char[4096];
969-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
970-
}
971-
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096) {
972-
data = new char[4096];
973-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
967+
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096 || data.length != 4096) {
968+
data = new char[4096]; // new array, will be populated below
974969
}
975970
Semaphore lock = PaperweightPlatformAdapter.applyLock(section);
976971
synchronized (lock) {
@@ -999,38 +994,24 @@ public char[] update(int layer, char[] data, boolean aggressive) {
999994
num_palette = palette.getSize();
1000995
} else {
1001996
// The section's palette is the global block palette.
1002-
for (int i = 0; i < 4096; i++) {
1003-
char paletteVal = data[i];
1004-
char ordinal = adapter.ibdIDToOrdinal(paletteVal);
1005-
data[i] = ordinal;
1006-
}
997+
adapter.mapFromGlobalPalette(data);
1007998
return data;
1008999
}
10091000

10101001
char[] paletteToOrdinal = FaweCache.INSTANCE.PALETTE_TO_BLOCK_CHAR.get();
10111002
try {
1012-
if (num_palette != 1) {
1003+
if (num_palette == 1) {
1004+
char ordinal = ordinal(palette.valueFor(0), adapter);
1005+
Arrays.fill(data, ordinal);
1006+
} else {
10131007
for (int i = 0; i < num_palette; i++) {
10141008
char ordinal = ordinal(palette.valueFor(i), adapter);
10151009
paletteToOrdinal[i] = ordinal;
10161010
}
1017-
for (int i = 0; i < 4096; i++) {
1018-
char paletteVal = data[i];
1019-
char val = paletteToOrdinal[paletteVal];
1020-
if (val == Character.MAX_VALUE) {
1021-
val = ordinal(palette.valueFor(i), adapter);
1022-
paletteToOrdinal[i] = val;
1023-
}
1024-
data[i] = val;
1025-
}
1026-
} else {
1027-
char ordinal = ordinal(palette.valueFor(0), adapter);
1028-
Arrays.fill(data, ordinal);
1011+
adapter.mapWithPalette(data, paletteToOrdinal);
10291012
}
10301013
} finally {
1031-
for (int i = 0; i < num_palette; i++) {
1032-
paletteToOrdinal[i] = Character.MAX_VALUE;
1033-
}
1014+
Arrays.fill(paletteToOrdinal, 0, num_palette, Character.MAX_VALUE);
10341015
}
10351016
return data;
10361017
} catch (IllegalAccessException | InterruptedException e) {

worldedit-bukkit/adapters/adapter-1_20_5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_20_R4/PaperweightFaweAdapter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,13 @@ public BukkitImplAdapter<net.minecraft.nbt.Tag> getParent() {
155155
return parent;
156156
}
157157

158+
@Override
159+
protected void ensureInit() {
160+
if (!this.initialised) {
161+
init();
162+
}
163+
}
164+
158165
private synchronized boolean init() {
159166
if (ibdToOrdinal != null && ibdToOrdinal[1] != 0) {
160167
return false;

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

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -967,13 +967,8 @@ public char[] update(int layer, char[] data, boolean aggressive) {
967967
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
968968
return data;
969969
}
970-
if (data != null && data.length != 4096) {
971-
data = new char[4096];
972-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
973-
}
974-
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096) {
975-
data = new char[4096];
976-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
970+
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096 || data.length != 4096) {
971+
data = new char[4096]; // new array, will be populated below
977972
}
978973
Semaphore lock = PaperweightPlatformAdapter.applyLock(section);
979974
synchronized (lock) {
@@ -1002,38 +997,24 @@ public char[] update(int layer, char[] data, boolean aggressive) {
1002997
num_palette = palette.getSize();
1003998
} else {
1004999
// The section's palette is the global block palette.
1005-
for (int i = 0; i < 4096; i++) {
1006-
char paletteVal = data[i];
1007-
char ordinal = adapter.ibdIDToOrdinal(paletteVal);
1008-
data[i] = ordinal;
1009-
}
1000+
adapter.mapFromGlobalPalette(data);
10101001
return data;
10111002
}
10121003

10131004
char[] paletteToOrdinal = FaweCache.INSTANCE.PALETTE_TO_BLOCK_CHAR.get();
10141005
try {
1015-
if (num_palette != 1) {
1006+
if (num_palette == 1) {
1007+
char ordinal = ordinal(palette.valueFor(0), adapter);
1008+
Arrays.fill(data, ordinal);
1009+
} else {
10161010
for (int i = 0; i < num_palette; i++) {
10171011
char ordinal = ordinal(palette.valueFor(i), adapter);
10181012
paletteToOrdinal[i] = ordinal;
10191013
}
1020-
for (int i = 0; i < 4096; i++) {
1021-
char paletteVal = data[i];
1022-
char val = paletteToOrdinal[paletteVal];
1023-
if (val == Character.MAX_VALUE) {
1024-
val = ordinal(palette.valueFor(i), adapter);
1025-
paletteToOrdinal[i] = val;
1026-
}
1027-
data[i] = val;
1028-
}
1029-
} else {
1030-
char ordinal = ordinal(palette.valueFor(0), adapter);
1031-
Arrays.fill(data, ordinal);
1014+
adapter.mapWithPalette(data, paletteToOrdinal);
10321015
}
10331016
} finally {
1034-
for (int i = 0; i < num_palette; i++) {
1035-
paletteToOrdinal[i] = Character.MAX_VALUE;
1036-
}
1017+
Arrays.fill(paletteToOrdinal, 0, num_palette, Character.MAX_VALUE);
10371018
}
10381019
return data;
10391020
} catch (IllegalAccessException | InterruptedException e) {

worldedit-bukkit/adapters/adapter-1_21/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_R1/PaperweightFaweAdapter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,13 @@ public BukkitImplAdapter<net.minecraft.nbt.Tag> getParent() {
155155
return parent;
156156
}
157157

158+
@Override
159+
protected void ensureInit() {
160+
if (!this.initialised) {
161+
init();
162+
}
163+
}
164+
158165
private synchronized boolean init() {
159166
if (ibdToOrdinal != null && ibdToOrdinal[1] != 0) {
160167
return false;

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

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -962,13 +962,8 @@ public char[] update(int layer, char[] data, boolean aggressive) {
962962
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
963963
return data;
964964
}
965-
if (data != null && data.length != 4096) {
966-
data = new char[4096];
967-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
968-
}
969-
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096) {
970-
data = new char[4096];
971-
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
965+
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096 || data.length != 4096) {
966+
data = new char[4096]; // new array, will be populated below
972967
}
973968
Semaphore lock = PaperweightPlatformAdapter.applyLock(section);
974969
synchronized (lock) {
@@ -997,38 +992,24 @@ public char[] update(int layer, char[] data, boolean aggressive) {
997992
num_palette = palette.getSize();
998993
} else {
999994
// The section's palette is the global block palette.
1000-
for (int i = 0; i < 4096; i++) {
1001-
char paletteVal = data[i];
1002-
char ordinal = adapter.ibdIDToOrdinal(paletteVal);
1003-
data[i] = ordinal;
1004-
}
995+
adapter.mapFromGlobalPalette(data);
1005996
return data;
1006997
}
1007998

1008999
char[] paletteToOrdinal = FaweCache.INSTANCE.PALETTE_TO_BLOCK_CHAR.get();
10091000
try {
1010-
if (num_palette != 1) {
1001+
if (num_palette == 1) {
1002+
char ordinal = ordinal(palette.valueFor(0), adapter);
1003+
Arrays.fill(data, ordinal);
1004+
} else {
10111005
for (int i = 0; i < num_palette; i++) {
10121006
char ordinal = ordinal(palette.valueFor(i), adapter);
10131007
paletteToOrdinal[i] = ordinal;
10141008
}
1015-
for (int i = 0; i < 4096; i++) {
1016-
char paletteVal = data[i];
1017-
char val = paletteToOrdinal[paletteVal];
1018-
if (val == Character.MAX_VALUE) {
1019-
val = ordinal(palette.valueFor(i), adapter);
1020-
paletteToOrdinal[i] = val;
1021-
}
1022-
data[i] = val;
1023-
}
1024-
} else {
1025-
char ordinal = ordinal(palette.valueFor(0), adapter);
1026-
Arrays.fill(data, ordinal);
1009+
adapter.mapWithPalette(data, paletteToOrdinal);
10271010
}
10281011
} finally {
1029-
for (int i = 0; i < num_palette; i++) {
1030-
paletteToOrdinal[i] = Character.MAX_VALUE;
1031-
}
1012+
Arrays.fill(paletteToOrdinal, 0, num_palette, Character.MAX_VALUE);
10321013
}
10331014
return data;
10341015
} catch (IllegalAccessException | InterruptedException e) {

worldedit-bukkit/adapters/adapter-1_21_3/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_21_3/PaperweightFaweAdapter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,13 @@ public BukkitImplAdapter<net.minecraft.nbt.Tag> getParent() {
174174
return parent;
175175
}
176176

177+
@Override
178+
protected void ensureInit() {
179+
if (!this.initialised) {
180+
init();
181+
}
182+
}
183+
177184
private synchronized boolean init() {
178185
if (ibdToOrdinal != null && ibdToOrdinal[1] != 0) {
179186
return false;

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

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -963,13 +963,8 @@ public char[] update(int layer, char[] data, boolean aggressive) {
963963
Arrays.fill(data, (char) BlockTypesCache.ReservedIDs.AIR);
964964
return data;
965965
}
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);
966+
if (data == null || data == FaweCache.INSTANCE.EMPTY_CHAR_4096 || data.length != 4096) {
967+
data = new char[4096]; // new array, will be populated below
973968
}
974969
Semaphore lock = PaperweightPlatformAdapter.applyLock(section);
975970
synchronized (lock) {
@@ -998,38 +993,24 @@ public char[] update(int layer, char[] data, boolean aggressive) {
998993
num_palette = palette.getSize();
999994
} else {
1000995
// The section's palette is the global block palette.
1001-
for (int i = 0; i < 4096; i++) {
1002-
char paletteVal = data[i];
1003-
char ordinal = adapter.ibdIDToOrdinal(paletteVal);
1004-
data[i] = ordinal;
1005-
}
996+
adapter.mapFromGlobalPalette(data);
1006997
return data;
1007998
}
1008999

10091000
char[] paletteToOrdinal = FaweCache.INSTANCE.PALETTE_TO_BLOCK_CHAR.get();
10101001
try {
1011-
if (num_palette != 1) {
1002+
if (num_palette == 1) {
1003+
char ordinal = ordinal(palette.valueFor(0), adapter);
1004+
Arrays.fill(data, ordinal);
1005+
} else {
10121006
for (int i = 0; i < num_palette; i++) {
10131007
char ordinal = ordinal(palette.valueFor(i), adapter);
10141008
paletteToOrdinal[i] = ordinal;
10151009
}
1016-
for (int i = 0; i < 4096; i++) {
1017-
char paletteVal = data[i];
1018-
char val = paletteToOrdinal[paletteVal];
1019-
if (val == Character.MAX_VALUE) {
1020-
val = ordinal(palette.valueFor(i), adapter);
1021-
paletteToOrdinal[i] = val;
1022-
}
1023-
data[i] = val;
1024-
}
1025-
} else {
1026-
char ordinal = ordinal(palette.valueFor(0), adapter);
1027-
Arrays.fill(data, ordinal);
1010+
adapter.mapWithPalette(data, paletteToOrdinal);
10281011
}
10291012
} finally {
1030-
for (int i = 0; i < num_palette; i++) {
1031-
paletteToOrdinal[i] = Character.MAX_VALUE;
1032-
}
1013+
Arrays.fill(paletteToOrdinal, 0, num_palette, Character.MAX_VALUE);
10331014
}
10341015
return data;
10351016
} catch (IllegalAccessException | InterruptedException e) {

0 commit comments

Comments
 (0)