From f357fa74f3f6838af886027e3effff4fad1ab901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20S=C3=B6derberg?= Date: Sun, 19 Jul 2020 14:37:53 +0200 Subject: [PATCH 1/2] Remove unused files --- .../com/plotsquared/core/util/LazyBlock.java | 37 ----- .../com/plotsquared/core/util/LazyResult.java | 44 ------ .../plotsquared/core/util/OperationUtil.java | 141 ------------------ .../plotsquared/core/util/PseudoRandom.java | 54 ------- .../plotsquared/core/util/StringWrapper.java | 97 ------------ 5 files changed, 373 deletions(-) delete mode 100644 Core/src/main/java/com/plotsquared/core/util/LazyBlock.java delete mode 100644 Core/src/main/java/com/plotsquared/core/util/LazyResult.java delete mode 100644 Core/src/main/java/com/plotsquared/core/util/OperationUtil.java delete mode 100644 Core/src/main/java/com/plotsquared/core/util/PseudoRandom.java delete mode 100644 Core/src/main/java/com/plotsquared/core/util/StringWrapper.java diff --git a/Core/src/main/java/com/plotsquared/core/util/LazyBlock.java b/Core/src/main/java/com/plotsquared/core/util/LazyBlock.java deleted file mode 100644 index a8a8970f8..000000000 --- a/Core/src/main/java/com/plotsquared/core/util/LazyBlock.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * _____ _ _ _____ _ - * | __ \| | | | / ____| | | - * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | - * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | - * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | - * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| - * | | - * |_| - * PlotSquared plot management system for Minecraft - * Copyright (C) 2020 IntellectualSites - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.plotsquared.core.util; - -import com.sk89q.worldedit.world.block.BlockState; - -public abstract class LazyBlock { - - public abstract BlockState getBlockState(); - - public String getId() { - return getBlockState().toString(); - } -} diff --git a/Core/src/main/java/com/plotsquared/core/util/LazyResult.java b/Core/src/main/java/com/plotsquared/core/util/LazyResult.java deleted file mode 100644 index ae2be3a19..000000000 --- a/Core/src/main/java/com/plotsquared/core/util/LazyResult.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * _____ _ _ _____ _ - * | __ \| | | | / ____| | | - * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | - * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | - * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | - * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| - * | | - * |_| - * PlotSquared plot management system for Minecraft - * Copyright (C) 2020 IntellectualSites - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.plotsquared.core.util; - -public abstract class LazyResult { - - private T result; - - public T get() { - return this.result; - } - - public T getOrCreate() { - if (this.result == null) { - return this.result = create(); - } - return this.result; - } - - public abstract T create(); -} diff --git a/Core/src/main/java/com/plotsquared/core/util/OperationUtil.java b/Core/src/main/java/com/plotsquared/core/util/OperationUtil.java deleted file mode 100644 index d4eda5ff4..000000000 --- a/Core/src/main/java/com/plotsquared/core/util/OperationUtil.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * _____ _ _ _____ _ - * | __ \| | | | / ____| | | - * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | - * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | - * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | - * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| - * | | - * |_| - * PlotSquared plot management system for Minecraft - * Copyright (C) 2020 IntellectualSites - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.plotsquared.core.util; - -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.plotsquared.core.location.Location; -import com.plotsquared.core.player.PlotPlayer; -import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.LocalSession; -import com.sk89q.worldedit.WorldEdit; -import com.sk89q.worldedit.entity.Player; -import com.sk89q.worldedit.extension.platform.Actor; -import com.sk89q.worldedit.extension.platform.Capability; -import com.sk89q.worldedit.extension.platform.Platform; -import com.sk89q.worldedit.world.World; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import java.util.List; -import java.util.concurrent.Future; -import java.util.function.Consumer; - -public class OperationUtil { - private static final boolean ASYNC; - - static { - boolean hasFawe = true; - try { - Class.forName("com.boydti.fawe.Fawe"); - } catch (ClassNotFoundException ignore) { - hasFawe = false; - } - ASYNC = hasFawe; - } - - private static World getWorld(String worldName) { - Platform platform = - WorldEdit.getInstance().getPlatformManager().queryCapability(Capability.WORLD_EDITING); - List worlds = platform.getWorlds(); - for (World current : worlds) { - if (current.getName().equals(worldName)) { - return current; - } - } - return null; - } - - private static World getWorld(PlotPlayer plotPlayer, Actor actor) { - World weWorld; - if (actor instanceof Player) { - weWorld = ((Player) actor).getWorld(); - } else { - @Nonnull Location loc = plotPlayer.getLocation(); - String world = loc.getWorldName(); - weWorld = getWorld(world); - } - return weWorld; - } - - private static EditSession createEditSession(PlotPlayer plotPlayer) { - Actor actor = plotPlayer.toActor(); - World weWorld = getWorld(plotPlayer, actor); - return createEditSession(weWorld, actor); - } - - private static LocalSession getSession(Actor actor) { - return WorldEdit.getInstance().getSessionManager().get(actor); - } - - private static EditSession createEditSession(World world, Actor actor) { - return createEditSession(world, actor, getSession(actor)); - } - - private static EditSession createEditSession(World world, Actor actor, LocalSession session) { - EditSession editSession; - Player player = actor.isPlayer() ? (Player) actor : null; - editSession = - WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1, null, player); - - editSession.setFastMode(!actor.isPlayer()); - editSession.setReorderMode(EditSession.ReorderMode.FAST); - return editSession; - } - - public Future withEditSession(@Nonnull PlotPlayer plotPlayer, - @Nonnull Consumer consumer, @Nullable Consumer exceptionHandler) { - if (ASYNC) { - ListeningExecutorService exec = WorldEdit.getInstance().getExecutorService(); - return exec - .submit(() -> withEditSessionOnThread(plotPlayer, consumer, exceptionHandler)); - } else { - withEditSessionOnThread(plotPlayer, consumer, exceptionHandler); - } - return Futures.immediateFuture(true); - } - - private void withEditSessionOnThread(PlotPlayer plotPlayer, Consumer consumer, - Consumer exceptionHandler) { - Actor actor = plotPlayer.toActor(); - World weWorld = getWorld(plotPlayer, actor); - LocalSession session = getSession(actor); - try (EditSession ess = createEditSession(weWorld, actor, session)) { - try { - consumer.accept(ess); - } finally { - ess.close(); - session.remember(ess); - } - } catch (Throwable e) { - if (exceptionHandler != null) { - exceptionHandler.accept(e); - } else { - e.printStackTrace(); - } - } - } -} diff --git a/Core/src/main/java/com/plotsquared/core/util/PseudoRandom.java b/Core/src/main/java/com/plotsquared/core/util/PseudoRandom.java deleted file mode 100644 index cb5a2d0c2..000000000 --- a/Core/src/main/java/com/plotsquared/core/util/PseudoRandom.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * _____ _ _ _____ _ - * | __ \| | | | / ____| | | - * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | - * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | - * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | - * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| - * | | - * |_| - * PlotSquared plot management system for Minecraft - * Copyright (C) 2020 IntellectualSites - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.plotsquared.core.util; - -public class PseudoRandom { - - public static final PseudoRandom random = new PseudoRandom(); - - public long state = System.nanoTime(); - - public long nextLong() { - long a = this.state; - this.state = xorShift64(a); - return a; - } - - public long xorShift64(long a) { - a ^= a << 21; - a ^= a >>> 35; - a ^= a << 4; - return a; - } - - public int random(int n) { - if (n == 1) { - return 0; - } - long r = ((nextLong() >>> 32) * n) >> 32; - return (int) r; - } -} diff --git a/Core/src/main/java/com/plotsquared/core/util/StringWrapper.java b/Core/src/main/java/com/plotsquared/core/util/StringWrapper.java deleted file mode 100644 index e2d048346..000000000 --- a/Core/src/main/java/com/plotsquared/core/util/StringWrapper.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * _____ _ _ _____ _ - * | __ \| | | | / ____| | | - * | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | - * | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` | - * | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| | - * |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_| - * | | - * |_| - * PlotSquared plot management system for Minecraft - * Copyright (C) 2020 IntellectualSites - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.plotsquared.core.util; - -/** - * - */ -public class StringWrapper { - - public final String value; - private int hash; - - /** - * Constructor - * - * @param value to wrap - */ - public StringWrapper(String value) { - this.value = value; - } - - /** - * Check if a wrapped string equals another one - * - * @param obj to compare - * @return true if obj equals the stored value - */ - @Override public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - if (obj.getClass() == String.class) { - return obj.toString().equalsIgnoreCase(this.value); - } - return false; - } - if (obj.hashCode() != hashCode()) { - return false; - } - StringWrapper other = (StringWrapper) obj; - if ((other.value == null) || (this.value == null)) { - return false; - } - return other.value.equalsIgnoreCase(this.value); - } - - /** - * Get the string value. - * - * @return string value - */ - @Override public String toString() { - return this.value; - } - - /** - * Get the hash value. - * - * @return has value - */ - @Override public int hashCode() { - if (this.value == null) { - return 0; - } - if (this.hash == 0) { - this.hash = this.value.toLowerCase().hashCode(); - } - return this.hash; - } -} From ed27422e69c5b1da4a3f8ba3500e2c4d79e73409 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Sun, 19 Jul 2020 14:21:52 +0100 Subject: [PATCH 2/2] Move IJ/xyz cache out of MainUItil to its own class --- .../bukkit/generator/BukkitPlotGenerator.java | 3 - .../plotsquared/bukkit/queue/GenChunk.java | 10 +- .../core/generator/HybridUtils.java | 3 - .../com/plotsquared/core/util/ChunkUtil.java | 93 +++++++++++++++++++ .../com/plotsquared/core/util/MainUtil.java | 47 ---------- 5 files changed, 98 insertions(+), 58 deletions(-) create mode 100644 Core/src/main/java/com/plotsquared/core/util/ChunkUtil.java diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/generator/BukkitPlotGenerator.java b/Bukkit/src/main/java/com/plotsquared/bukkit/generator/BukkitPlotGenerator.java index 60bb34b9a..47b2abc92 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/generator/BukkitPlotGenerator.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/generator/BukkitPlotGenerator.java @@ -36,7 +36,6 @@ import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.queue.ScopedLocalBlockQueue; import com.plotsquared.core.util.ChunkManager; -import com.plotsquared.core.util.MainUtil; import com.sk89q.worldedit.math.BlockVector2; import lombok.Getter; import org.bukkit.World; @@ -74,7 +73,6 @@ public class BukkitPlotGenerator extends ChunkGenerator this.populators = new ArrayList<>(); this.populators.add(new BlockStatePopulator(this.plotGenerator, this.plotAreaManager)); this.full = true; - MainUtil.initCache(); } public BukkitPlotGenerator(final String world, final ChunkGenerator cg, @Nonnull final PlotAreaManager plotAreaManager) { @@ -87,7 +85,6 @@ public class BukkitPlotGenerator extends ChunkGenerator this.full = false; this.platformGenerator = cg; this.plotGenerator = new DelegatePlotGenerator(cg, world); - MainUtil.initCache(); } @Override public void augment(PlotArea area) { diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/queue/GenChunk.java b/Bukkit/src/main/java/com/plotsquared/bukkit/queue/GenChunk.java index 3a18ec355..819b175a1 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/queue/GenChunk.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/queue/GenChunk.java @@ -31,7 +31,7 @@ import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.core.location.ChunkWrapper; import com.plotsquared.core.location.Location; import com.plotsquared.core.queue.ScopedLocalBlockQueue; -import com.plotsquared.core.util.MainUtil; +import com.plotsquared.core.util.ChunkUtil; import com.plotsquared.core.util.PatternUtil; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.function.pattern.Pattern; @@ -151,12 +151,12 @@ public class GenChunk extends ScopedLocalBlockQueue { } private void storeCache(final int x, final int y, final int z, final BlockState id) { - int i = MainUtil.CACHE_I[y][x][z]; + int i = y >> 4; BlockState[] v = this.result[i]; if (v == null) { this.result[i] = v = new BlockState[4096]; } - int j = MainUtil.CACHE_J[y][x][z]; + int j = ChunkUtil.getJ(x, y, z); v[j] = id; } @@ -171,7 +171,7 @@ public class GenChunk extends ScopedLocalBlockQueue { } @Override public BlockState getBlock(int x, int y, int z) { - int i = MainUtil.CACHE_I[y][x][z]; + int i = y >> 4; if (result == null) { return BukkitBlockUtil.get(chunkData.getType(x, y, z)); } @@ -179,7 +179,7 @@ public class GenChunk extends ScopedLocalBlockQueue { if (array == null) { return BlockTypes.AIR.getDefaultState(); } - int j = MainUtil.CACHE_J[y][x][z]; + int j = ChunkUtil.getJ(x, y, z); return array[j]; } diff --git a/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java b/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java index ba1fc503b..2cde7321d 100644 --- a/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java +++ b/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java @@ -45,7 +45,6 @@ import com.plotsquared.core.queue.ChunkBlockQueue; import com.plotsquared.core.queue.GlobalBlockQueue; import com.plotsquared.core.queue.LocalBlockQueue; import com.plotsquared.core.util.ChunkManager; -import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MathMan; import com.plotsquared.core.util.RegionManager; import com.plotsquared.core.util.RegionUtil; @@ -141,7 +140,6 @@ public class HybridUtils { final int cbz = bz >> 4; final int ctx = tx >> 4; final int ctz = tz >> 4; - MainUtil.initCache(); final int width = tx - bx + 1; final int length = tz - bz + 1; @@ -251,7 +249,6 @@ public class HybridUtils { whenDone.run(); }); System.gc(); - MainUtil.initCache(); Location botLoc = Location.at(world, bot.getX(), bot.getY(), bot.getZ()); Location topLoc = Location.at(world, top.getX(), top.getY(), top.getZ()); ChunkManager.chunkTask(botLoc, topLoc, new RunnableVal() { diff --git a/Core/src/main/java/com/plotsquared/core/util/ChunkUtil.java b/Core/src/main/java/com/plotsquared/core/util/ChunkUtil.java new file mode 100644 index 000000000..3e89c630a --- /dev/null +++ b/Core/src/main/java/com/plotsquared/core/util/ChunkUtil.java @@ -0,0 +1,93 @@ +package com.plotsquared.core.util; + +import lombok.experimental.UtilityClass; +import org.jetbrains.annotations.Range; + +/** + * This cache is used for world generation and just saves a bit of calculation time when checking if something is in the plot area. + */ +@UtilityClass +public class ChunkUtil { + + + /** + * Cache of mapping x,y,z coordinates to the chunk array
+ * - Used for efficient world generation
+ */ + private static short[] x_loc; + private static short[][] y_loc; + private static short[] z_loc; + private static short[][][] CACHE_J = null; + + static { + x_loc = new short[4096]; + y_loc = new short[16][4096]; + z_loc = new short[4096]; + for (int i = 0; i < 16; i++) { + int i4 = i << 4; + for (int j = 0; j < 4096; j++) { + int y = i4 + (j >> 8); + int a = j - ((y & 0xF) << 8); + int z1 = a >> 4; + int x1 = a - (z1 << 4); + x_loc[j] = (short) x1; + y_loc[i][j] = (short) y; + z_loc[j] = (short) z1; + } + } + CACHE_J = new short[256][16][16]; + for (int x = 0; x < 16; x++) { + for (int z = 0; z < 16; z++) { + for (int y = 0; y < 256; y++) { + short j = (short) ((y & 0xF) << 8 | z << 4 | x); + CACHE_J[y][x][z] = j; + } + } + } + } + + /** + * Get the J value for Chunk block storage from the chunk xyz coordinates. + * J is in the range 0 to 4095 where it represents a position in an array of 16x16x16 xyz (ChunkSection Array[4096]). + * + * @param x Relative x coordinate + * @param y Relative y coordinate + * @param z Relative z coordinate + * @return J value for xyz position in Array[4096]. + */ + public static int getJ(@Range(from = 0, to = 15) int x, @Range(from = 0, to = 255) int y, + @Range(from = 0, to = 15) int z) { + return CACHE_J[y][x][z]; + } + + /** + * Gets the x coordinate for a specific J value for a ChunkSection 16x16x16 xyz Array[4096]. + * + * @param j Position in the xyz Array[4096]. + * @return x coordinate within the chunk + */ + public static int getX(@Range(from = 0, to = 4095) int j) { + return x_loc[j]; + } + + /** + * Gets the y coordinate for specific I and J values for a Chunk 16x16x16x16 layerxyz Array[16][4096]. + * + * @param i Relative layer of the position in the layerxyz Array[16][4096]. + * @param j Position in the xyz Array[4096]. + * @return x coordinate within the chunk + */ + public static int getY(@Range(from = 0, to = 15) int i, @Range(from = 0, to = 4095) int j) { + return y_loc[i][j]; + } + + /** + * Gets the z coordinate for a specific J value for a ChunkSection 16x16x16 xyz Array[4096]. + * + * @param j Position in the xyz Array[4096]. + * @return z coordinate within the chunk + */ + public static int getZ(@Range(from = 0, to = 4095) int j) { + return z_loc[j]; + } +} diff --git a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java index 010622813..2a96b7120 100644 --- a/Core/src/main/java/com/plotsquared/core/util/MainUtil.java +++ b/Core/src/main/java/com/plotsquared/core/util/MainUtil.java @@ -44,53 +44,6 @@ import javax.annotation.Nonnull; private static final Logger logger = LoggerFactory.getLogger("P2/" + MainUtil.class.getSimpleName()); - /** - * Cache of mapping x,y,z coordinates to the chunk array
- * - Used for efficient world generation
- */ - public static short[][] x_loc; - public static short[][] y_loc; - public static short[][] z_loc; - public static short[][][] CACHE_I = null; - public static short[][][] CACHE_J = null; - - /** - * This cache is used for world generation and just saves a bit of calculation time when checking if something is in the plot area. - */ - public static void initCache() { - if (x_loc == null) { - x_loc = new short[16][4096]; - y_loc = new short[16][4096]; - z_loc = new short[16][4096]; - for (int i = 0; i < 16; i++) { - int i4 = i << 4; - for (int j = 0; j < 4096; j++) { - int y = i4 + (j >> 8); - int a = j - ((y & 0xF) << 8); - int z1 = a >> 4; - int x1 = a - (z1 << 4); - x_loc[i][j] = (short) x1; - y_loc[i][j] = (short) y; - z_loc[i][j] = (short) z1; - } - } - } - if (CACHE_I == null) { - CACHE_I = new short[256][16][16]; - CACHE_J = new short[256][16][16]; - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - for (int y = 0; y < 256; y++) { - short i = (short) (y >> 4); - short j = (short) ((y & 0xF) << 8 | z << 4 | x); - CACHE_I[y][x][z] = i; - CACHE_J[y][x][z] = j; - } - } - } - } - } - /** * Send a message to the player. *