9
0
mirror of https://github.com/Xiao-MoMi/Custom-Fishing.git synced 2025-12-19 15:09:24 +00:00

checkpoint - 34

This commit is contained in:
XiaoMoMi
2024-07-10 03:16:47 +08:00
parent fed983df40
commit 8fcc744d3a
6 changed files with 62 additions and 5 deletions

View File

@@ -267,6 +267,13 @@ public enum Dependency {
"slf4j-api",
"maven",
"slf4j"
),
LZ4(
"org{}lz4",
"lz4-java",
"maven",
"lz4-java",
Relocation.of("jpountz", "net{}jpountz")
);
private final List<Relocation> relocations;

View File

@@ -23,4 +23,5 @@ gson=${gson_version}
caffeine=${caffeine_version}
jedis=${jedis_version}
exp4j=${exp4j_version}
slf4j=${slf4j_version}
slf4j=${slf4j_version}
lz4-java=${lz4_version}

View File

@@ -55,6 +55,8 @@ dependencies {
compileOnly("net.objecthunter:exp4j:${rootProject.properties["exp4j_version"]}")
// placeholder api
compileOnly("me.clip:placeholderapi:${rootProject.properties["placeholder_api_version"]}")
// lz4
compileOnly("org.lz4:lz4-java:${rootProject.properties["lz4_version"]}")
}
tasks {
@@ -76,6 +78,7 @@ tasks {
relocate ("com.saicone.rtag", "net.momirealms.customfishing.libraries.rtag")
relocate ("xyz.xenondevs", "net.momirealms.customfishing.libraries")
relocate ("net.objecthunter.exp4j", "net.momirealms.customfishing.libraries.exp4j")
relocate ("net.jpountz", "net.momirealms.customfishing.libraries.jpountz") //lz4
}
}

View File

@@ -97,7 +97,8 @@ public class BukkitCustomFishingPluginImpl extends BukkitCustomFishingPlugin {
Dependency.SQLITE_DRIVER, Dependency.SLF4J_API, Dependency.SLF4J_SIMPLE,
Dependency.H2_DRIVER,
Dependency.MONGODB_DRIVER_CORE, Dependency.MONGODB_DRIVER_SYNC, Dependency.MONGODB_DRIVER_BSON,
Dependency.HIKARI_CP
Dependency.HIKARI_CP,
Dependency.LZ4
)
);
}

View File

@@ -18,6 +18,9 @@
package net.momirealms.customfishing.bukkit.hook;
import com.saicone.rtag.item.ItemTagStream;
import net.jpountz.lz4.LZ4Compressor;
import net.jpountz.lz4.LZ4Factory;
import net.jpountz.lz4.LZ4FastDecompressor;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ScoreComponent;
import net.momirealms.customfishing.api.BukkitCustomFishingPlugin;
@@ -45,6 +48,7 @@ import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -54,9 +58,11 @@ public class BukkitHookManager implements HookManager, Listener {
private final BukkitCustomFishingPlugin plugin;
private final HashMap<String, HookConfig> hooks = new HashMap<>();
private LZ4Factory factory;
public BukkitHookManager(BukkitCustomFishingPlugin plugin) {
this.plugin = plugin;
this.factory = LZ4Factory.fastestInstance();
}
@Override
@@ -119,7 +125,7 @@ public class BukkitHookManager implements HookManager, Listener {
int damage = (int) wrapped.getTag("CustomFishing", "hook_damage").orElse(0);
ItemStack itemStack;
if (hookItemBase64 != null) {
itemStack = ItemTagStream.INSTANCE.fromBytes(hookItemBase64);
itemStack = bytesToHook(hookItemBase64);
} else {
itemStack = plugin.getItemManager().buildInternal(Context.player(player), id);
}
@@ -174,7 +180,7 @@ public class BukkitHookManager implements HookManager, Listener {
ItemStack previousItemStack;
byte[] stackBytes = (byte[]) wrapped.getTag("CustomFishing", "hook_stack").orElse(null);
if (stackBytes != null) {
previousItemStack = ItemTagStream.INSTANCE.fromBytes(stackBytes);
previousItemStack = bytesToHook(stackBytes);
} else {
previousItemStack = plugin.getItemManager().buildInternal(Context.player(player), previousHookID);
}
@@ -197,7 +203,7 @@ public class BukkitHookManager implements HookManager, Listener {
}
wrapped.setTag(hookID, "CustomFishing", "hook_id");
wrapped.setTag(ItemTagStream.INSTANCE.toBytes(clonedHook), "CustomFishing", "hook_stack");
wrapped.setTag(hookToBytes(clonedHook), "CustomFishing", "hook_stack");
wrapped.setTag(durabilityItem.damage(), "CustomFishing", "hook_damage");
wrapped.setTag(durabilityItem.maxDamage(), "CustomFishing", "hook_max_damage");
@@ -225,4 +231,42 @@ public class BukkitHookManager implements HookManager, Listener {
wrapped.lore(newLore);
wrapped.load();
}
private byte[] hookToBytes(ItemStack hook) {
try {
byte[] data = ItemTagStream.INSTANCE.toBytes(hook);
int decompressedLength = data.length;
LZ4Compressor compressor = factory.fastCompressor();
int maxCompressedLength = compressor.maxCompressedLength(decompressedLength);
byte[] compressed = new byte[maxCompressedLength];
int compressedLength = compressor.compress(data, 0, decompressedLength, compressed, 0, maxCompressedLength);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DataOutputStream outputStream = new DataOutputStream(byteArrayOutputStream);
outputStream.writeInt(decompressedLength);
outputStream.write(compressed, 0, compressedLength);
outputStream.close();
return byteArrayOutputStream.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private ItemStack bytesToHook(byte[] bytes) {
try {
DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(bytes));
int decompressedLength = inputStream.readInt();
byte[] compressed = new byte[inputStream.available()];
inputStream.readFully(compressed);
LZ4FastDecompressor decompressor = factory.fastDecompressor();
byte[] restored = new byte[decompressedLength];
decompressor.decompress(compressed, 0, restored, 0, decompressedLength);
return ItemTagStream.INSTANCE.fromBytes(restored);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -42,6 +42,7 @@ placeholder_api_version=2.11.6
invui_version=1.32
vault_version=1.7
guava_version=33.2.0-jre
lz4_version=1.8.0
# Proxy settings
systemProp.socks.proxyHost=127.0.0.1