From 1539130afe7b818e6508e94088844685be244435 Mon Sep 17 00:00:00 2001 From: ScriptCat Date: Sat, 26 Jul 2025 14:47:23 +0300 Subject: [PATCH] some changes --- build.gradle | 1 + src/main/java/tokarotik/giftapi/Main.java | 31 +++++-- .../tokarotik/giftapi/NBT/NBTManager.java | 1 + .../giftapi/NBT/WorldNBTSynchronizer.java | 40 -------- .../giftapi/NBT/{ => cache}/BasicNBT.java | 4 +- .../giftapi/NBT/cache/CacheManager.java | 92 +++++++++++++++++++ .../NBT/cache/WorldNBTSynchronizer.java | 83 +++++++++++++++++ .../giftapi/NBT/page/PageManager.java | 2 + 8 files changed, 203 insertions(+), 51 deletions(-) delete mode 100644 src/main/java/tokarotik/giftapi/NBT/WorldNBTSynchronizer.java rename src/main/java/tokarotik/giftapi/NBT/{ => cache}/BasicNBT.java (95%) create mode 100644 src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java create mode 100644 src/main/java/tokarotik/giftapi/NBT/cache/WorldNBTSynchronizer.java diff --git a/build.gradle b/build.gradle index 9199f87..f32b1a8 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,7 @@ repositories { } dependencies { + implementation 'org.jetbrains:annotations:24.0.0' testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' implementation( diff --git a/src/main/java/tokarotik/giftapi/Main.java b/src/main/java/tokarotik/giftapi/Main.java index 8747baa..2280ef1 100644 --- a/src/main/java/tokarotik/giftapi/Main.java +++ b/src/main/java/tokarotik/giftapi/Main.java @@ -1,36 +1,49 @@ package tokarotik.giftapi; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; +import tokarotik.giftapi.NBT.cache.CacheManager; import tokarotik.giftapi.dev.GiftCommand; public class Main extends JavaPlugin implements Listener { + private CacheManager cacheManager; private APIManager apiManager; @Override - public void onEnable() { + public void onEnable() + { saveDefaultConfig(); - getLogger().info("GiftAPI enabled!"); - - saveDefaultConfig(); + cacheManager = new CacheManager(54); apiManager = new APIManager(this, getConfig()); - if (getConfig().getBoolean(ConfigPaths.DEVTEST, false)) - { - this.getCommand("gift").setExecutor(new GiftCommand(apiManager)); - } + this.getCommand("gift").setExecutor(new GiftCommand(apiManager)); // DELETE FOR RELEASE + + getServer().getPluginManager().registerEvents(this, this); // bullshit + + getLogger().info("GiftAPI enabled!"); } @Override - public void onDisable() { + public void onDisable() + { + cacheManager.disable(); + getLogger().info("GiftAPI disabled!"); } + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) + { + cacheManager.playerQuit(event.getPlayer().getName()); + } + // if failed to add, return false // if successfully added, return true public boolean add(Player player, ItemStack item) diff --git a/src/main/java/tokarotik/giftapi/NBT/NBTManager.java b/src/main/java/tokarotik/giftapi/NBT/NBTManager.java index 72289be..de138f5 100644 --- a/src/main/java/tokarotik/giftapi/NBT/NBTManager.java +++ b/src/main/java/tokarotik/giftapi/NBT/NBTManager.java @@ -3,6 +3,7 @@ package tokarotik.giftapi.NBT; import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.NBTTagCompound; import org.bukkit.entity.Player; +import tokarotik.giftapi.NBT.cache.BasicNBT; public class NBTManager { diff --git a/src/main/java/tokarotik/giftapi/NBT/WorldNBTSynchronizer.java b/src/main/java/tokarotik/giftapi/NBT/WorldNBTSynchronizer.java deleted file mode 100644 index addf79a..0000000 --- a/src/main/java/tokarotik/giftapi/NBT/WorldNBTSynchronizer.java +++ /dev/null @@ -1,40 +0,0 @@ -package tokarotik.giftapi.NBT; - -import net.minecraft.server.v1_6_R3.EntityPlayer; -import net.minecraft.server.v1_6_R3.NBTTagCompound; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; - -public class WorldNBTSynchronizer -{ - public static String getWorld(EntityPlayer entityPlayer, String worldName) - { - BasicNBT basicNBT = new BasicNBT(worldName); - - return worldName; - } - - private static boolean hasPlayer(String playerName, String worldName) - { - World world = Bukkit.getWorld(worldName); - - for (Player player : world.getPlayers()) - { - if (player.getName() == playerName) { return true; } - } - - return false; - } - - private static boolean hasGiftApiNBT(EntityPlayer entityPlayer, String worldName) - { - BasicNBT basicNBT = new BasicNBT(worldName); - - NBTTagCompound tag = basicNBT.readPlayerNBT(entityPlayer); - - return true; - } - - -} diff --git a/src/main/java/tokarotik/giftapi/NBT/BasicNBT.java b/src/main/java/tokarotik/giftapi/NBT/cache/BasicNBT.java similarity index 95% rename from src/main/java/tokarotik/giftapi/NBT/BasicNBT.java rename to src/main/java/tokarotik/giftapi/NBT/cache/BasicNBT.java index 6f01994..7c24c16 100644 --- a/src/main/java/tokarotik/giftapi/NBT/BasicNBT.java +++ b/src/main/java/tokarotik/giftapi/NBT/cache/BasicNBT.java @@ -1,4 +1,4 @@ -package tokarotik.giftapi.NBT; +package tokarotik.giftapi.NBT.cache; import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.NBTCompressedStreamTools; @@ -58,7 +58,7 @@ public class BasicNBT { } } - public EntityPlayer getPlayer(Player player) + public static EntityPlayer getPlayer(Player player) { return ((CraftPlayer) player).getHandle(); } diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java b/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java new file mode 100644 index 0000000..664dc01 --- /dev/null +++ b/src/main/java/tokarotik/giftapi/NBT/cache/CacheManager.java @@ -0,0 +1,92 @@ +package tokarotik.giftapi.NBT.cache; + +import net.minecraft.server.v1_6_R3.EntityPlayer; +import net.minecraft.server.v1_6_R3.NBTTagCompound; +import net.minecraft.server.v1_6_R3.NBTTagList; +import org.bukkit.entity.Player; +import tokarotik.giftapi.NBT.page.PageManager; + +import java.util.HashMap; +import java.util.Map; + +public class CacheManager +{ + private final Map world_map = new HashMap<>(); + private final Map nether_map = new HashMap<>(); + private final Map end_map = new HashMap<>(); + + private final int max_stack; + + public CacheManager(int max_stack) + { + this.max_stack = max_stack; + } + + public PageManager load(Player player) + { + String worldPlayer = player.getWorld().getName(); + Map hashMap = getWorlMap(worldPlayer); + EntityPlayer entityPlayer = BasicNBT.getPlayer(player); + + + // if player was loaded early + if (hashMap.containsKey(player)) + { + return hashMap.get(player); + } + + // if world in what is player has giftapi + if (WorldNBTSynchronizer.hasAll(entityPlayer, worldPlayer)) + { + NBTTagCompound compound = new BasicNBT(worldPlayer).readPlayerNBT(entityPlayer); + NBTTagList list = compound.getList("giftapi"); + + PageManager new_pages = new PageManager(list, this.max_stack); + hashMap.put(player, new_pages); + + return new_pages; + } + + String world = WorldNBTSynchronizer.getWorldWhatHasPlayer(entityPlayer); + + // if world in what is player hasn't giftapi, but in another has + if (world != null) + { + NBTTagCompound compound = new BasicNBT(world).readPlayerNBT(entityPlayer); + NBTTagList list = compound.getList("giftapi"); + + PageManager new_pages = new PageManager(list, this.max_stack); + hashMap.put(player, new_pages); + + return new_pages; + } + + // if player doesn't have any saved apiconfig NBT + PageManager new_pages = new PageManager(this.max_stack); + hashMap.put(player, new_pages); + + return new_pages; + } + + public void disable() + { + + } + + public void playerQuit(String playerName) + { + + } + + private Map getWorlMap(String worldName) + { + switch(worldName) + { + case "world": { return this.world_map; } + case "world_nether": { return this.nether_map; } + case "world_the_end": { return this.end_map; } + } + + return null; + } +} diff --git a/src/main/java/tokarotik/giftapi/NBT/cache/WorldNBTSynchronizer.java b/src/main/java/tokarotik/giftapi/NBT/cache/WorldNBTSynchronizer.java new file mode 100644 index 0000000..8ac8198 --- /dev/null +++ b/src/main/java/tokarotik/giftapi/NBT/cache/WorldNBTSynchronizer.java @@ -0,0 +1,83 @@ +package tokarotik.giftapi.NBT.cache; + +import net.minecraft.server.v1_6_R3.EntityPlayer; +import net.minecraft.server.v1_6_R3.NBTTagCompound; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; +import tokarotik.giftapi.NBT.cache.BasicNBT; + +public class WorldNBTSynchronizer +{ + public static void getWorld(EntityPlayer entityPlayer, String worldName) + { + if (hasAll(entityPlayer, worldName)) { return; } + + + } + + public static boolean isPlayerEmpty(EntityPlayer entityPlayer) + { + return getWorldWhatHasPlayer(entityPlayer) == null; + } + + @Nullable + public static String getWorldWhatHasPlayer(EntityPlayer entityPlayer) + { + for (World world : Bukkit.getWorlds()) + { + String worldName = world.getName(); + + if (hasAll(entityPlayer, worldName)) + { + return worldName; + } + } + + return null; + } + + public static boolean hasAll(EntityPlayer entityPlayer, String worldName) + { + boolean isHasPlayer = hasPlayer(entityPlayer.getName(), worldName); + if (!isHasPlayer) { return false; } + + boolean isHasNBT = hasGiftApiNBT(entityPlayer, worldName); + return isHasNBT; + } + + private static boolean hasPlayer(String playerName, String worldName) + { + World world = Bukkit.getWorld(worldName); + + for (Player player : world.getPlayers()) + { + if (player.getName() == playerName) { return true; } + } + + return false; + } + + private static boolean hasGiftApiNBT(EntityPlayer entityPlayer, String worldName) + { + BasicNBT basicNBT = new BasicNBT(worldName); + + NBTTagCompound tag = basicNBT.readPlayerNBT(entityPlayer); + + if (tag.hasKey("giftapi")) // if exists giftapi tag in player + { + try + { + tag.getList("giftapi"); + return true; + } + + catch(Exception ignored){} // if giftapi is not type list, throw exception and for what I used construction try-catch. + } + + return false; + } + + +} diff --git a/src/main/java/tokarotik/giftapi/NBT/page/PageManager.java b/src/main/java/tokarotik/giftapi/NBT/page/PageManager.java index 422c74d..bee0aaa 100644 --- a/src/main/java/tokarotik/giftapi/NBT/page/PageManager.java +++ b/src/main/java/tokarotik/giftapi/NBT/page/PageManager.java @@ -18,7 +18,9 @@ public class PageManager public PageManager(int max_stack) { + this.max_stack = max_stack; + this.tag = new NBTTagList("giftapi"); } public NBTTagList getTag()