From b3ee619d709261085ae71dc1116461edfb1b4dbc Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Sun, 28 May 2017 17:43:23 +1000 Subject: [PATCH] Include arm lz4 binding + fix timings recheck --- .../boydti/fawe/bukkit/v0/BukkitQueue_0.java | 1 + .../fawe/bukkit/wrapper/AsyncWorld.java | 3 +- core/src/main/java/com/boydti/fawe/Fawe.java | 2 + .../com/sk89q/worldedit/blocks/BaseBlock.java | 8 + .../java/net/jpountz/lz4/LZ4StreamTest.java | 150 ------------------ .../main/java/net/jpountz/lz4/package.html | 55 ------- .../main/java/net/jpountz/util/package.html | 22 --- .../main/resources/linux/arm/liblz4-java.so | Bin 0 -> 49936 bytes 8 files changed, 12 insertions(+), 229 deletions(-) delete mode 100644 core/src/main/java/net/jpountz/lz4/LZ4StreamTest.java delete mode 100644 core/src/main/java/net/jpountz/lz4/package.html delete mode 100644 core/src/main/java/net/jpountz/util/package.html create mode 100644 core/src/main/resources/linux/arm/liblz4-java.so diff --git a/bukkit/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java b/bukkit/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java index 4c781603..1105772c 100644 --- a/bukkit/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java +++ b/bukkit/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java @@ -290,6 +290,7 @@ public abstract class BukkitQueue_0 extends NMSMa } if (fieldTimingsEnabled != null && timingsEnabled) { fieldTimingsEnabled.set(null, true); + methodCheck.invoke(null); } } catch (Throwable e) { e.printStackTrace(); diff --git a/bukkit/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java b/bukkit/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java index 2772477e..97a970e0 100644 --- a/bukkit/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java +++ b/bukkit/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java @@ -158,8 +158,7 @@ public class AsyncWorld extends DelegateFaweQueue implements World, HasFaweQueue */ public synchronized static AsyncWorld create(final WorldCreator creator) { BukkitQueue_0 queue = (BukkitQueue_0) SetQueue.IMP.getNewQueue(creator.name(), true, false); - World world = queue.createWorld( - creator); + World world = queue.createWorld(creator); return wrap(world); } diff --git a/core/src/main/java/com/boydti/fawe/Fawe.java b/core/src/main/java/com/boydti/fawe/Fawe.java index cdd5d1ac..98d52e3d 100644 --- a/core/src/main/java/com/boydti/fawe/Fawe.java +++ b/core/src/main/java/com/boydti/fawe/Fawe.java @@ -405,6 +405,8 @@ public class Fawe { public void setupConfigs() { MainUtil.copyFile(MainUtil.getJarFile(), "de/messages.yml", null); + MainUtil.copyFile(MainUtil.getJarFile(), "ru/messages.yml", null); + MainUtil.copyFile(MainUtil.getJarFile(), "ru/commands.yml", null); // Setting up config.yml File file = new File(this.IMP.getDirectory(), "config.yml"); Settings.IMP.PLATFORM = IMP.getPlatform().replace("\"", ""); diff --git a/core/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java b/core/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java index 0aeaea21..67028bd8 100644 --- a/core/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java +++ b/core/src/main/java/com/sk89q/worldedit/blocks/BaseBlock.java @@ -91,9 +91,11 @@ public class BaseBlock extends Block implements TileEntityBlock, Pattern, Serial /** * Construct a block with the given ID and a data value of 0. * + * @deprecated see {@link com.boydti.fawe.FaweCache#getBlock(int, int)} * @param id ID value * @see #setId(int) */ + @Deprecated public BaseBlock(int id) { internalSetId(id); internalSetData(0); @@ -102,11 +104,13 @@ public class BaseBlock extends Block implements TileEntityBlock, Pattern, Serial /** * Construct a block with the given ID and data value. * + * @deprecated see {@link com.boydti.fawe.FaweCache#getBlock(int, int)} * @param id ID value * @param data data value * @see #setId(int) * @see #setData(int) */ + @Deprecated public BaseBlock(int id, int data) { internalSetId(id); internalSetData(data); @@ -115,10 +119,12 @@ public class BaseBlock extends Block implements TileEntityBlock, Pattern, Serial /** * Construct a block with the given ID, data value and NBT data structure. * + * @deprecated see {@link com.boydti.fawe.FaweCache#getBlock(int, int)} * @param id ID value * @param data data value * @param nbtData NBT data, which may be null */ + @Deprecated public BaseBlock(int id, int data, @Nullable CompoundTag nbtData) { setId(id); setData(data); @@ -128,8 +134,10 @@ public class BaseBlock extends Block implements TileEntityBlock, Pattern, Serial /** * Create a clone of another block. * + * @deprecated see {@link com.boydti.fawe.FaweCache#getBlock(int, int)} * @param other the other block */ + @Deprecated public BaseBlock(BaseBlock other) { this(other.getId(), other.getData(), other.getNbtData()); } diff --git a/core/src/main/java/net/jpountz/lz4/LZ4StreamTest.java b/core/src/main/java/net/jpountz/lz4/LZ4StreamTest.java deleted file mode 100644 index 0943b5f5..00000000 --- a/core/src/main/java/net/jpountz/lz4/LZ4StreamTest.java +++ /dev/null @@ -1,150 +0,0 @@ -package net.jpountz.lz4; - -import com.boydti.fawe.util.MainUtil; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Random; -import junit.framework.Assert; -import org.junit.Before; -import org.junit.Test; - - -import static junit.framework.Assert.assertEquals; - -public class LZ4StreamTest { - - private long seed; - private Random rand; - - private byte randomContent[]; - private byte compressedOutput[]; - - @Before - public void setUp() throws IOException { - seed = System.currentTimeMillis(); - rand = new Random(seed); - - int randomContentLength = rand.nextInt(10000000) + 10000000; - - randomContent = new byte[randomContentLength]; - rand.nextBytes(randomContent); - - compressContent(); - } - - private void compressContent() throws IOException { - ByteArrayOutputStream compressedOutputStream = new ByteArrayOutputStream(); - - LZ4OutputStream os = new LZ4OutputStream(compressedOutputStream); - int currentContentPosition = 0; - - while(currentContentPosition < randomContent.length) { - int testBlockSize = rand.nextInt(500000); - - if(testBlockSize > randomContent.length - currentContentPosition) - testBlockSize = randomContent.length - currentContentPosition; - - boolean writeByteByByte = true; //rand.nextBoolean(); - - if(writeByteByByte) { - for(int i=0;i - - - - - - -

LZ4 compression. The entry point of the API is the -{@link net.jpountz.lz4.LZ4Factory} class, which gives access to -{@link net.jpountz.lz4.LZ4Compressor compressors} and -{@link net.jpountz.lz4.LZ4SafeDecompressor decompressors}.

- - -

Sample usage:

- -
-    LZ4Factory factory = LZ4Factory.fastestInstance();
-
-    byte[] data = "12345345234572".getBytes("UTF-8");
-    final int decompressedLength = data.length;
-
-    // compress data
-    LZ4Compressor compressor = factory.fastCompressor();
-    int maxCompressedLength = compressor.maxCompressedLength(decompressedLength);
-    byte[] compressed = new byte[maxCompressedLength];
-    int compressedLength = compressor.compress(data, 0, decompressedLength, compressed, 0, maxCompressedLength);
-
-    // decompress data
-    // - method 1: when the decompressed length is known
-    LZ4FastDecompressor decompressor = factory.fastDecompressor();
-    byte[] restored = new byte[decompressedLength];
-    int compressedLength2 = decompressor.decompress(compressed, 0, restored, 0, decompressedLength);
-    // compressedLength == compressedLength2
-
-    // - method 2: when the compressed length is known (a little slower)
-    // the destination buffer needs to be over-sized
-    LZ4SafeDecompressor decompressor2 = factory.safeDecompressor();
-    int decompressedLength2 = decompressor2.decompress(compressed, 0, compressedLength, restored, 0);
-    // decompressedLength == decompressedLength2
-
- - - diff --git a/core/src/main/java/net/jpountz/util/package.html b/core/src/main/java/net/jpountz/util/package.html deleted file mode 100644 index 4b3ceb98..00000000 --- a/core/src/main/java/net/jpountz/util/package.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - -

Utility classes.

- - \ No newline at end of file diff --git a/core/src/main/resources/linux/arm/liblz4-java.so b/core/src/main/resources/linux/arm/liblz4-java.so new file mode 100644 index 0000000000000000000000000000000000000000..97dd79e999386d80f1616863c23d1fb89d62bbc0 GIT binary patch literal 49936 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