From d943dfadaabc067df90055be1fdf64934474f76d Mon Sep 17 00:00:00 2001 From: unurled Date: Fri, 24 Dec 2021 14:51:32 +0100 Subject: [PATCH] =?UTF-8?q?0.0.4:=20Added=20custom=20damage=20system,=20li?= =?UTF-8?q?ttle=20bit=20of=20custom=20entities=20=E2=9A=A0=20havn't=20test?= =?UTF-8?q?ed=20at=20all,=20probably=20not=20working=20great,=20gonna=20ma?= =?UTF-8?q?ke=20some=20update=20on=20it=20this=20week.=20want=20to=20make?= =?UTF-8?q?=20a=20better=20system=20for=20custom=20mobs.=20optimized=20imp?= =?UTF-8?q?orts=20with=20idea.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FUTURE.md | 6 +- README.md | 3 + pom.xml | 24 +- src/main/java/gq/unurled/raxen/Raxen.java | 10 +- .../unurled/raxen/commands/RaxenCommand.java | 1 - .../raxen/commands/admin/NbtCommand.java | 1 + .../enchantments/player/Telekinesis.java | 9 - .../entity/EntityNamespacedKey.java | 20 ++ .../raxen/components/entity/RaxenEntity.java | 41 +++ .../raxen/components/gui/ItemListGui.java | 10 +- .../raxen/components/items/Attributes.java | 15 + .../raxen/components/player/Skills.java | 34 +- .../components/resourcepack/ResourcePack.java | 31 ++ .../gq/unurled/raxen/config/PlayerConfig.java | 37 +- .../raxen/listener/entity/DamageEntity.java | 95 +++++ .../raxen/listener/player/ItemHandEvent.java | 16 +- .../raxen/listener/player/JoinEvent.java | 4 + .../unurled/raxen/manager/EntityManager.java | 35 ++ .../gq/unurled/raxen/manager/ItemManager.java | 7 +- .../raxen/manager/ListenerManager.java | 4 +- .../unurled/raxen/manager/ProfileManager.java | 2 +- .../raxen/manager/ProtocolManager.java | 5 +- .../raxen/manager/ResourcePackManager.java | 46 +++ .../unurled/raxen/manager/StorageManager.java | 1 - .../unurled/raxen/utils/AureliumSkills.java | 45 --- .../java/gq/unurled/raxen/utils/Items.java | 324 ++++++++++++++++++ .../java/gq/unurled/raxen/utils/Mysql.java | 2 +- .../java/gq/unurled/raxen/utils/Reload.java | 2 +- .../java/gq/unurled/raxen/utils/Skills.java | 14 +- .../java/gq/unurled/raxen/utils/Utils.java | 183 +--------- src/main/resources/config.yml | 6 +- src/main/resources/example_item.yml | 5 +- src/main/resources/example_mob.yml | 31 ++ 33 files changed, 761 insertions(+), 308 deletions(-) create mode 100644 src/main/java/gq/unurled/raxen/components/entity/EntityNamespacedKey.java create mode 100644 src/main/java/gq/unurled/raxen/components/entity/RaxenEntity.java create mode 100644 src/main/java/gq/unurled/raxen/components/items/Attributes.java create mode 100644 src/main/java/gq/unurled/raxen/components/resourcepack/ResourcePack.java create mode 100644 src/main/java/gq/unurled/raxen/listener/entity/DamageEntity.java create mode 100644 src/main/java/gq/unurled/raxen/manager/EntityManager.java create mode 100644 src/main/java/gq/unurled/raxen/manager/ResourcePackManager.java delete mode 100644 src/main/java/gq/unurled/raxen/utils/AureliumSkills.java create mode 100644 src/main/java/gq/unurled/raxen/utils/Items.java create mode 100644 src/main/resources/example_mob.yml diff --git a/FUTURE.md b/FUTURE.md index d8cf2a4..090a0f0 100644 --- a/FUTURE.md +++ b/FUTURE.md @@ -6,7 +6,7 @@ Some RPG thing : - Raxen must do : - some survival and RPG thing - need some sort of action => pve, pvp maybe ? - - need custom mobs - - need custom items - - can use custom texture pack + - need custom mobs => some are made => not definitive need more => juste made the damage system and persistentdatacontainer on entities outside of Player, might consider to switch to persistentdatacontainer on player instead of having an hashmap (ProfileManager.java) + - need custom items => partialy made => need custom resource pack support + - can use custom texture pack => in making - protection and logging feature => coreprotect \ No newline at end of file diff --git a/README.md b/README.md index a7958ec..b35e7b3 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,6 @@ to use custom texture for items, modify the custom data model => [Example](https for more info contact me. @unurled#0149 + + +custom Items uses custom model data to work => need to update in model/item/item.json [Example](https://github.com/elBukkit/MagicPlugin/wiki/ResourcePack#customizing) \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0f0f674..a3f269a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ gq.unurled raxen - 0.0.3 + 0.0.4 jar Raxen @@ -66,6 +66,10 @@ + + jitpack.io + https://jitpack.io + papermc-repo https://papermc.io/repo/repository/maven-public/ @@ -74,10 +78,6 @@ sonatype https://oss.sonatype.org/content/groups/public/ - - jitpack.io - https://jitpack.io - codemc-repo https://repo.codemc.org/repository/maven-public/ @@ -132,12 +132,14 @@ 2.9.0-SNAPSHOT compile + com.comphenix.protocol ProtocolLib @@ -153,18 +155,6 @@ ${project.basedir}/api/oraxen-1.117.0.jar --> - - com.github.lokka30 - LevelledMobs - 3.2.3 - provided - - - com.github.Archy-X - AureliumSkills - Beta1.2.5 - provided - net.luckperms api diff --git a/src/main/java/gq/unurled/raxen/Raxen.java b/src/main/java/gq/unurled/raxen/Raxen.java index 8a1c296..a36553b 100644 --- a/src/main/java/gq/unurled/raxen/Raxen.java +++ b/src/main/java/gq/unurled/raxen/Raxen.java @@ -1,13 +1,11 @@ package gq.unurled.raxen; -import com.archyx.aureliumskills.api.AureliumAPI; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; import gq.unurled.raxen.config.Config; import gq.unurled.raxen.config.PlayerConfig; import gq.unurled.raxen.manager.*; import gq.unurled.raxen.utils.LuckPerm; -import gq.unurled.raxen.utils.MongoDB; import gq.unurled.raxen.utils.Reload; import gq.unurled.raxen.utils.Vault; import lombok.Getter; @@ -22,7 +20,7 @@ public final class Raxen extends JavaPlugin { private static final String prefix = ChatColor.AQUA + "Rx" + ChatColor.LIGHT_PURPLE + "> "; @Getter - private static final String version = "0.0.3"; + private static final String version = "0.0.4"; private final PluginManager pm = getServer().getPluginManager(); @Getter @@ -45,12 +43,12 @@ public final class Raxen extends JavaPlugin { private gq.unurled.raxen.manager.ProtocolManager protoManager; @Getter private ItemManager itemManager; + @Getter + private ResourcePackManager resourcePackManager; @Getter private ProtocolManager protocolManager; @Getter - public AureliumAPI aureliumAPI; - @Getter public LuckPerm luckPerm; @Getter public Vault vault; @@ -71,9 +69,9 @@ public final class Raxen extends JavaPlugin { commandManager = new CommandManager(this); protocolManager = ProtocolLibrary.getProtocolManager(); protoManager = new gq.unurled.raxen.manager.ProtocolManager(this); + resourcePackManager = new ResourcePackManager(this); playerConfig = new PlayerConfig(this); - aureliumAPI = new AureliumAPI(); luckPerm = new LuckPerm(this); luckPerm.register(); vault = new Vault(this); diff --git a/src/main/java/gq/unurled/raxen/commands/RaxenCommand.java b/src/main/java/gq/unurled/raxen/commands/RaxenCommand.java index fdb2092..cc9b839 100644 --- a/src/main/java/gq/unurled/raxen/commands/RaxenCommand.java +++ b/src/main/java/gq/unurled/raxen/commands/RaxenCommand.java @@ -9,7 +9,6 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/gq/unurled/raxen/commands/admin/NbtCommand.java b/src/main/java/gq/unurled/raxen/commands/admin/NbtCommand.java index 2182f94..0a8fdee 100644 --- a/src/main/java/gq/unurled/raxen/commands/admin/NbtCommand.java +++ b/src/main/java/gq/unurled/raxen/commands/admin/NbtCommand.java @@ -18,6 +18,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; +import static gq.unurled.raxen.utils.Items.attributes; import static gq.unurled.raxen.utils.Skills.updateSkills; import static gq.unurled.raxen.utils.Utils.*; diff --git a/src/main/java/gq/unurled/raxen/components/enchantments/player/Telekinesis.java b/src/main/java/gq/unurled/raxen/components/enchantments/player/Telekinesis.java index df59161..f8dcf78 100644 --- a/src/main/java/gq/unurled/raxen/components/enchantments/player/Telekinesis.java +++ b/src/main/java/gq/unurled/raxen/components/enchantments/player/Telekinesis.java @@ -1,17 +1,8 @@ package gq.unurled.raxen.components.enchantments.player; import gq.unurled.raxen.components.enchantments.EnchantmentWarpper; -import org.bukkit.GameMode; -import org.bukkit.block.Block; -import org.bukkit.block.Container; import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.inventory.ItemStack; - -import java.util.Collection; public class Telekinesis implements Listener { diff --git a/src/main/java/gq/unurled/raxen/components/entity/EntityNamespacedKey.java b/src/main/java/gq/unurled/raxen/components/entity/EntityNamespacedKey.java new file mode 100644 index 0000000..9971ed5 --- /dev/null +++ b/src/main/java/gq/unurled/raxen/components/entity/EntityNamespacedKey.java @@ -0,0 +1,20 @@ +package gq.unurled.raxen.components.entity; + +import gq.unurled.raxen.Raxen; +import org.bukkit.NamespacedKey; + +public class EntityNamespacedKey { + public EntityNamespacedKey(Raxen main) { + levelKey = new NamespacedKey(main, "level"); + strengthKey = new NamespacedKey(main, "strength"); + healthKey = new NamespacedKey(main, "health"); + speedKey = new NamespacedKey(main, "speed"); + defenseKey = new NamespacedKey(main, "defense"); + } + + public final NamespacedKey levelKey; + public final NamespacedKey healthKey; + public final NamespacedKey speedKey; + public final NamespacedKey defenseKey; + public final NamespacedKey strengthKey; +} diff --git a/src/main/java/gq/unurled/raxen/components/entity/RaxenEntity.java b/src/main/java/gq/unurled/raxen/components/entity/RaxenEntity.java new file mode 100644 index 0000000..0f47a52 --- /dev/null +++ b/src/main/java/gq/unurled/raxen/components/entity/RaxenEntity.java @@ -0,0 +1,41 @@ +package gq.unurled.raxen.components.entity; + +import gq.unurled.raxen.Raxen; +import org.bukkit.Location; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +public class RaxenEntity { + + private final Raxen main; + + private final String name; + private Integer level; + private Double health; + private Double strength; + + public RaxenEntity(Raxen main, String name, Integer level, Double health, Double strength) { + this.main = main; + this.name = name; + this.level = level; + this.health = health; + this.strength = strength; + } + + public Entity createEntity(EntityType type, String name, Location location) { + Entity e = location.getWorld().spawnEntity(location, type); + e.setCustomNameVisible(true); + e.setCustomName(name); + + return e; + } + + public void register(Entity e) { + PersistentDataContainer data = e.getPersistentDataContainer(); + data.set(new NamespacedKey(main ,"NAME"), PersistentDataType.STRING, name); + } + +} diff --git a/src/main/java/gq/unurled/raxen/components/gui/ItemListGui.java b/src/main/java/gq/unurled/raxen/components/gui/ItemListGui.java index b41aaa9..cbc5090 100644 --- a/src/main/java/gq/unurled/raxen/components/gui/ItemListGui.java +++ b/src/main/java/gq/unurled/raxen/components/gui/ItemListGui.java @@ -1,12 +1,10 @@ package gq.unurled.raxen.components.gui; import gq.unurled.raxen.Raxen; -import gq.unurled.raxen.manager.ItemManager; import lombok.Getter; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Material; -import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -17,7 +15,9 @@ import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; -import static gq.unurled.raxen.utils.Utils.*; +import static gq.unurled.raxen.utils.Items.*; +import static gq.unurled.raxen.utils.Utils.fillGreyPane; +import static gq.unurled.raxen.utils.Utils.log; public class ItemListGui implements Listener { @@ -38,6 +38,7 @@ public class ItemListGui implements Listener { public ItemListGui(Raxen main) { this.main = main; this.itlist = this.main.getItemManager().getList(); + this.inv = getInventories(); } private ItemStack PREVIOUS = createItem(Material.ARROW, 1,true, false, "Previous page"); @@ -46,7 +47,7 @@ public class ItemListGui implements Listener { private ItemStack CLOSE = closeItem(); private ItemStack GREY_PANE = greyPane(); - public Inventory getInv() { + public Inventory getInventories() { Integer page = 1; Integer item = -1; for (ItemStack it : itlist) { @@ -139,6 +140,7 @@ public class ItemListGui implements Listener { } } page++; + inv.setItem(53, CLOSE); inv = fillGreyPane(inv); } return inv; diff --git a/src/main/java/gq/unurled/raxen/components/items/Attributes.java b/src/main/java/gq/unurled/raxen/components/items/Attributes.java new file mode 100644 index 0000000..be2e8dd --- /dev/null +++ b/src/main/java/gq/unurled/raxen/components/items/Attributes.java @@ -0,0 +1,15 @@ +package gq.unurled.raxen.components.items; + +import lombok.Getter; + +public class Attributes { + @Getter + Integer health, speed, defense, strength; + + public Attributes(Integer health, Integer defense, Integer speed, Integer strength) { + this.health = health; + this.defense = defense; + this.speed = speed; + this.strength = strength; + } +} diff --git a/src/main/java/gq/unurled/raxen/components/player/Skills.java b/src/main/java/gq/unurled/raxen/components/player/Skills.java index 9120479..246b830 100644 --- a/src/main/java/gq/unurled/raxen/components/player/Skills.java +++ b/src/main/java/gq/unurled/raxen/components/player/Skills.java @@ -7,13 +7,17 @@ public class Skills { @Getter @Setter - private int health, defense, speed, strength; + private int health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemDmg; - public Skills(int health, int defense, int speed, int strength) { + public Skills(int health, int itemHealth, int defense, int itemDefense, int speed, int itemSpeed, int strength, int itemDmg) { this.health = health; + this.itemHealth = health; this.defense = defense; + this.itemDefense = itemDefense; this.speed = speed; + this.itemSpeed = speed; this.strength = strength; + this.itemDmg = itemDmg; } public void removeSpeed(int i) { @@ -29,6 +33,19 @@ public class Skills { this.strength =this.getStrength() - i; } + public void removeItemSpeed(int i) { + this.itemSpeed =this.getItemSpeed() - i; + } + public void removeItemHealth(int i) { + this.itemHealth =this.getItemHealth() - i; + } + public void removeItemDefense(int i) { + this.itemDefense =this.getItemDefense() - i; + } + public void removeItemStrength(int i) { + this.itemDmg =this.getItemDmg() - i; + } + public void addSpeed(int i) { this.speed = this.getSpeed() + i; } @@ -41,4 +58,17 @@ public class Skills { public void addStrength(int i) { this.strength = this.getStrength() + i; } + + public void addItemSpeed(int i) { + this.itemSpeed = this.getItemSpeed() + i; + } + public void addItemHealth(int i) { + this.itemHealth = this.getItemHealth() + i; + } + public void addItemDefense(int i) { + this.itemDefense = this.getItemDefense() + i; + } + public void addItemStrength(int i) { + this.itemDmg = this.getItemDmg() + i; + } } diff --git a/src/main/java/gq/unurled/raxen/components/resourcepack/ResourcePack.java b/src/main/java/gq/unurled/raxen/components/resourcepack/ResourcePack.java new file mode 100644 index 0000000..cb6be80 --- /dev/null +++ b/src/main/java/gq/unurled/raxen/components/resourcepack/ResourcePack.java @@ -0,0 +1,31 @@ +package gq.unurled.raxen.components.resourcepack; + +import gq.unurled.raxen.Raxen; +import gq.unurled.raxen.manager.ResourcePackManager; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class ResourcePack { + + private Raxen main; + private FileConfiguration config; + private ResourcePackManager resourcePackManager; + + public ResourcePack(Raxen main) { + this.main = main; + this.config = main.getConfig(); + this.resourcePackManager = main.getResourcePackManager(); + } + + public void join(Player player) { + new BukkitRunnable() { + @Override + public void run() { + if(resourcePackManager.isUseRP()) { + player.setResourcePack(config.getString("ressource_pack_url"), config.getString("resource_pack_sha1")); + } + } + }.runTaskLater(main, 2L); + } +} diff --git a/src/main/java/gq/unurled/raxen/config/PlayerConfig.java b/src/main/java/gq/unurled/raxen/config/PlayerConfig.java index c50a6a3..a625fa3 100644 --- a/src/main/java/gq/unurled/raxen/config/PlayerConfig.java +++ b/src/main/java/gq/unurled/raxen/config/PlayerConfig.java @@ -10,8 +10,8 @@ import gq.unurled.raxen.components.player.Storage; import gq.unurled.raxen.components.player.Storages.EnderChest; import gq.unurled.raxen.manager.ProfileManager; import gq.unurled.raxen.manager.StorageManager; +import gq.unurled.raxen.utils.Items; import gq.unurled.raxen.utils.MongoDB; -import gq.unurled.raxen.utils.Utils; import net.kyori.adventure.text.Component; import org.bson.Document; import org.bukkit.Bukkit; @@ -50,9 +50,13 @@ public class PlayerConfig { Document doc = new Document("uuid", player.getUniqueId().toString()) .append("name", player.getName()) .append("health", skills.getHealth()) + .append("itemHealth", skills.getItemHealth()) .append("defense", skills.getDefense()) + .append("itemDefense", skills.getItemDefense()) .append("speed", skills.getSpeed()) + .append("itemSpeed", skills.getItemSpeed()) .append("strength", skills.getStrength()) + .append("itemDmg", skills.getItemDmg()) .append("inv", invstr); if (profileManager.getPlayerStorage(player.getUniqueId()) != null) { if(profileManager.getPlayerStorage(player.getUniqueId()).getEc() != null) { @@ -62,11 +66,11 @@ public class PlayerConfig { for(ItemStack it : ec.getEc()) { reverse += 1; if(it != null) { - String s = Utils.itemStackSerilize(it, reverse); + String s = Items.itemStackSerilize(it, reverse); list.add(s); } } - String ecstr = Utils.listItemStackSerelize(list); + String ecstr = Items.listItemStackSerelize(list); doc.append("ec", ecstr); } } @@ -83,9 +87,13 @@ public class PlayerConfig { FileConfiguration config = sto.createYml(player); config.set("name", player.getName()); config.set("health", skills.getHealth()); + config.set("itemHealth", skills.getItemHealth()); config.set("strength", skills.getStrength()); + config.set("itemDmg", skills.getItemDmg()); config.set("speed", skills.getSpeed()); + config.set("itemSpeed", skills.getItemSpeed()); config.set("defense", skills.getDefense()); + config.set("itemDefense", skills.getItemDefense()); config.set("inv", invstr); if (profileManager.getPlayerStorage(player.getUniqueId()) != null) { if(profileManager.getPlayerStorage(player.getUniqueId()).getEc() != null) { @@ -95,11 +103,11 @@ public class PlayerConfig { for(ItemStack it : ec.getEc()) { reverse += 1; if(it != null) { - String s = Utils.itemStackSerilize(it, reverse); + String s = Items.itemStackSerilize(it, reverse); list.add(s); } } - String ecstr = Utils.listItemStackSerelize(list); + String ecstr = Items.listItemStackSerelize(list); config.set("ec", ecstr); } } @@ -118,20 +126,20 @@ public class PlayerConfig { profileManager.createNewInventory(player); return; } - Skills skills = new Skills(playerDoc.getInteger("health"), playerDoc.getInteger("defense"), playerDoc.getInteger("speed"), playerDoc.getInteger("strength")); + Skills skills = new Skills(playerDoc.getInteger("health"), playerDoc.getInteger("itemHealth"), playerDoc.getInteger("defense"), playerDoc.getInteger("itemDefense"), playerDoc.getInteger("speed"), playerDoc.getInteger("itemSpeed"), playerDoc.getInteger("strength"), playerDoc.getInteger("itemDmg")); Profile profile = new Profile(skills); profileManager.setPlayerProfile(player.getUniqueId(), profile); Inventory ec = Bukkit.createInventory(null, 54, Component.text("Ender Chest")); if(playerDoc.getString("ec") != null) { - ItemStack[] itList = Utils.listItemStackDeserilize(playerDoc.getString("ec")); + ItemStack[] itList = Items.listItemStackDeserilize(playerDoc.getString("ec")); ec.addItem(itList); } EnderChest ecc = new EnderChest(ec); Storage storage = new Storage(ecc); profileManager.setPlayerStorage(player.getUniqueId(), storage); Inventory inv = Bukkit.createInventory(player, InventoryType.PLAYER); - ItemStack[] itListInv = Utils.listItemStackDeserilize(playerDoc.getString("inv")); + ItemStack[] itListInv = Items.listItemStackDeserilize(playerDoc.getString("inv")); inv.addItem(itListInv); player.updateInventory(); gq.unurled.raxen.components.player.Storages.Inventory invv = new gq.unurled.raxen.components.player.Storages.Inventory(inv); @@ -141,20 +149,23 @@ public class PlayerConfig { public void loadUsingYml(Player player) throws IOException { FileConfiguration config = sto.createYml(player); - Skills skills = new Skills((Integer) config.get("health"), (Integer) config.get("defense"), (Integer) config.get("speed"), (Integer) config.get("strength")); + Skills skills = new Skills(config.getInt("health"), config.getInt("itemHealth"), + config.getInt("defense"), config.getInt("itemDefense"), + config.getInt("speed"), config.getInt("itemSpeed"), + config.getInt("strength"), config.getInt("itemDmg")); Profile profile = new Profile(skills); profileManager.setPlayerProfile(player.getUniqueId(), profile); Inventory ec = Bukkit.createInventory(null, 54, Component.text("Ender Chest")); if((String) config.get("ec") != null) { - ItemStack[] itList = Utils.listItemStackDeserilize((String) config.get("ec")); + ItemStack[] itList = Items.listItemStackDeserilize((String) config.get("ec")); ec.addItem(itList); } EnderChest ecc = new EnderChest(ec); Storage storage = new Storage(ecc); profileManager.setPlayerStorage(player.getUniqueId(), storage); Inventory inv = Bukkit.createInventory(player, InventoryType.PLAYER); - ItemStack[] itListInv = Utils.listItemStackDeserilize((String) config.getString("inv")); + ItemStack[] itListInv = Items.listItemStackDeserilize((String) config.getString("inv")); inv.addItem(itListInv); player.updateInventory(); gq.unurled.raxen.components.player.Storages.Inventory invv = new gq.unurled.raxen.components.player.Storages.Inventory(inv); @@ -170,11 +181,11 @@ public class PlayerConfig { for(ItemStack it : inv) { reverse = reverse + 1; if(it != null && it.getType() != Material.AIR) { - String s = Utils.itemStackSerilize(it, reverse); + String s = Items.itemStackSerilize(it, reverse); listInv.add(s); } } - String invstr = Utils.listItemStackSerelize(listInv); + String invstr = Items.listItemStackSerelize(listInv); Object storage = sto.getConfig().get("storage"); diff --git a/src/main/java/gq/unurled/raxen/listener/entity/DamageEntity.java b/src/main/java/gq/unurled/raxen/listener/entity/DamageEntity.java new file mode 100644 index 0000000..fa6e67b --- /dev/null +++ b/src/main/java/gq/unurled/raxen/listener/entity/DamageEntity.java @@ -0,0 +1,95 @@ +package gq.unurled.raxen.listener.entity; + +import gq.unurled.raxen.Raxen; +import gq.unurled.raxen.components.entity.EntityNamespacedKey; +import gq.unurled.raxen.components.items.Attributes; +import gq.unurled.raxen.components.player.Skills; +import gq.unurled.raxen.manager.ProfileManager; +import gq.unurled.raxen.utils.Items; +import org.bukkit.attribute.Attribute; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +public class DamageEntity implements Listener { + private Raxen main; + private ProfileManager profileManager; + private EntityNamespacedKey entityNamespacedKey; + + public DamageEntity(Raxen main) { + this.main = main; + this.profileManager = main.getProfileManager(); + this.entityNamespacedKey = new EntityNamespacedKey(main); + } + + @EventHandler + public void entityDamageByEntity(EntityDamageByEntityEvent e) { + e.setDamage(0); + Integer damage = 1; + Integer strength = 0; + Integer itemDmg = 0; + Integer defense = 0; + Integer itemDefense = 0; + Integer health = 0; + Integer itemHealth = 0; + Integer initDamage = 0; + if (e.getDamager() instanceof Player) { + Player playerDamager = (Player) e.getDamager(); + Skills skills = profileManager.getPlayerProfile(playerDamager.getUniqueId()).getSkils(); + strength = skills.getStrength(); + itemDmg = skills.getItemDmg(); + } else { + Entity entityDamager = e.getDamager(); + PersistentDataContainer data = entityDamager.getPersistentDataContainer(); + if (data.has(entityNamespacedKey.strengthKey, PersistentDataType.INTEGER)) { + strength = data.get(entityNamespacedKey.strengthKey, PersistentDataType.INTEGER); + } + Attributes attributes = Items.getNbtFromEntity((LivingEntity) entityDamager); + itemDmg = attributes.getStrength(); + } + if (e.getEntity() instanceof Player) { + Player playerVictim = (Player) e.getEntity(); + Skills skills = profileManager.getPlayerProfile(playerVictim.getUniqueId()).getSkils(); + defense = skills.getDefense(); + health = skills.getHealth(); + itemDefense = skills.getItemDefense(); + itemHealth = skills.getItemHealth(); + } else { + Entity entityVictim = e.getEntity(); + PersistentDataContainer data = entityVictim.getPersistentDataContainer(); + if (data.has(entityNamespacedKey.defenseKey, PersistentDataType.INTEGER)) { + defense = data.get(entityNamespacedKey.defenseKey, PersistentDataType.INTEGER); + } + if (data.has(entityNamespacedKey.healthKey, PersistentDataType.INTEGER)) { + health = data.get(entityNamespacedKey.healthKey, PersistentDataType.INTEGER); + } + Attributes attributes = Items.getNbtFromEntity((LivingEntity) entityVictim); + itemDefense = attributes.getDefense(); + itemHealth = attributes.getHealth(); + } + initDamage = (5+ itemDmg) * (1+ (strength/100)); + damage = initDamage; + defense = defense + itemDefense; + defense = defense/(defense+100); + damage = damage*defense; + if (damage >= health) { + e.setDamage(e.getEntity().getType().getDefaultAttributes().getAttribute(Attribute.GENERIC_MAX_HEALTH).getDefaultValue()); + } else { + health = health - damage; + if (e.getEntity() instanceof Player) { + Player playerVictim = (Player) e.getEntity(); + Skills skills = profileManager.getPlayerProfile(playerVictim.getUniqueId()).getSkils(); + skills.setHealth(health); + } else { + Entity entityVictim = e.getEntity(); + PersistentDataContainer data = entityVictim.getPersistentDataContainer(); + data.set(entityNamespacedKey.healthKey, PersistentDataType.INTEGER, health); + } + } + } +} diff --git a/src/main/java/gq/unurled/raxen/listener/player/ItemHandEvent.java b/src/main/java/gq/unurled/raxen/listener/player/ItemHandEvent.java index 131e0e6..d4a9eef 100644 --- a/src/main/java/gq/unurled/raxen/listener/player/ItemHandEvent.java +++ b/src/main/java/gq/unurled/raxen/listener/player/ItemHandEvent.java @@ -28,31 +28,31 @@ public class ItemHandEvent implements Listener { if(oldItem != null && oldItem.getType() != Material.AIR) { NBTItem nbti = new NBTItem(oldItem); if(nbti.hasKey("SPEED")) { - skills.removeSpeed(nbti.getInteger("SPEED")); + skills.removeItemSpeed(nbti.getInteger("SPEED")); } if(nbti.hasKey("HEALTH")) { - skills.removeHealth(nbti.getInteger("HEALTH")); + skills.removeItemHealth(nbti.getInteger("HEALTH")); } if(nbti.hasKey("DEFENSE")) { - skills.removeDefense(nbti.getInteger("DEFENSE")); + skills.removeItemDefense(nbti.getInteger("DEFENSE")); } if(nbti.hasKey("STRENGTH")) { - skills.removeStrength(nbti.getInteger("STRENGTH")); + skills.removeItemStrength(nbti.getInteger("STRENGTH")); } } if(newItem != null && newItem.getType() != Material.AIR) { NBTItem nbti = new NBTItem(newItem); if(nbti.hasKey("SPEED")) { - skills.addSpeed(nbti.getInteger("SPEED")); + skills.addItemSpeed(nbti.getInteger("SPEED")); } if(nbti.hasKey("HEALTH")) { - skills.addHealth(nbti.getInteger("HEALTH")); + skills.addItemHealth(nbti.getInteger("HEALTH")); } if(nbti.hasKey("DEFENSE")) { - skills.addDefense(nbti.getInteger("DEFENSE")); + skills.addItemDefense(nbti.getInteger("DEFENSE")); } if(nbti.hasKey("STRENGTH")) { - skills.addStrength(nbti.getInteger("STRENGTH")); + skills.addItemStrength(nbti.getInteger("STRENGTH")); } } gq.unurled.raxen.utils.Skills.updateSkills(player); diff --git a/src/main/java/gq/unurled/raxen/listener/player/JoinEvent.java b/src/main/java/gq/unurled/raxen/listener/player/JoinEvent.java index 990548b..2c492cb 100644 --- a/src/main/java/gq/unurled/raxen/listener/player/JoinEvent.java +++ b/src/main/java/gq/unurled/raxen/listener/player/JoinEvent.java @@ -2,6 +2,7 @@ package gq.unurled.raxen.listener.player; import gq.unurled.raxen.Raxen; import gq.unurled.raxen.components.player.Scoreboard; +import gq.unurled.raxen.components.resourcepack.ResourcePack; import gq.unurled.raxen.config.PlayerConfig; import gq.unurled.raxen.manager.ProfileManager; import org.bukkit.entity.Player; @@ -15,12 +16,14 @@ public class JoinEvent implements Listener { private ProfileManager profileManager; private PlayerConfig playerConfig; private Scoreboard scoreboard; + private ResourcePack resourcePack; public JoinEvent(Raxen main) { this.main = main; this.profileManager = main.getProfileManager(); this.playerConfig = main.getPlayerConfig(); this.scoreboard = new Scoreboard(main); + this.resourcePack = main.getResourcePackManager().getResourcePack(); } @EventHandler @@ -28,6 +31,7 @@ public class JoinEvent implements Listener { Player player = e.getPlayer(); playerConfig.loadPlayerConfig(player); scoreboard.createScorebord(player); + resourcePack.join(player); } } diff --git a/src/main/java/gq/unurled/raxen/manager/EntityManager.java b/src/main/java/gq/unurled/raxen/manager/EntityManager.java new file mode 100644 index 0000000..8819ad2 --- /dev/null +++ b/src/main/java/gq/unurled/raxen/manager/EntityManager.java @@ -0,0 +1,35 @@ +package gq.unurled.raxen.manager; + +import gq.unurled.raxen.Raxen; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.EntityType; + +import java.util.ArrayList; +import java.util.List; + +public class EntityManager { + + private Raxen main; + @Getter + @Setter + public List list = new ArrayList<>(); + + public EntityManager(Raxen main) { + this.main = main; + } + + public void registerLivingEntities(World world) { + + } + + public void registerEntityFromConfig(FileConfiguration config) { + World world = Bukkit.getWorld(config.getString("world")); + String name = config.getString("name"); + + } + +} diff --git a/src/main/java/gq/unurled/raxen/manager/ItemManager.java b/src/main/java/gq/unurled/raxen/manager/ItemManager.java index 12ec741..4ec44ea 100644 --- a/src/main/java/gq/unurled/raxen/manager/ItemManager.java +++ b/src/main/java/gq/unurled/raxen/manager/ItemManager.java @@ -11,14 +11,13 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.awt.*; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import static gq.unurled.raxen.utils.Items.setLoreFromNBT; import static gq.unurled.raxen.utils.Utils.*; public class ItemManager { @@ -78,7 +77,6 @@ public class ItemManager { File folder = new File(main.getDataFolder() + "/Items/"); File[] listFile = folder.listFiles(); - for (int i = 0; i < listFile.length; i++) { if (listFile[i].isFile()) { FileConfiguration customItem = new YamlConfiguration(); @@ -116,8 +114,8 @@ public class ItemManager { for (String str : (List) Objects.requireNonNull(file.get("lore"))) { lore.add(Component.text(color(str))); } + itm.setCustomModelData(file.getConfigurationSection("Pack").getInt("custom_model_data")); itm.lore(lore); - itm.setCustomModelData(file.getInt("custom_model_data")); it.setItemMeta(itm); NBTItem nbti = new NBTItem(it); nbti.setInteger("SPEED", file.getInt("speed")); @@ -127,6 +125,7 @@ public class ItemManager { nbti.setString("ID", file.getString("customId")); nbti.setString("CUSTOM_ABILITY", file.getString("custom_ability")); it = nbti.getItem(); + it = setLoreFromNBT(it); list.add(it); } } diff --git a/src/main/java/gq/unurled/raxen/manager/ListenerManager.java b/src/main/java/gq/unurled/raxen/manager/ListenerManager.java index 334f942..1294a7c 100644 --- a/src/main/java/gq/unurled/raxen/manager/ListenerManager.java +++ b/src/main/java/gq/unurled/raxen/manager/ListenerManager.java @@ -1,8 +1,8 @@ package gq.unurled.raxen.manager; import gq.unurled.raxen.Raxen; +import gq.unurled.raxen.listener.entity.DamageEntity; import gq.unurled.raxen.listener.player.*; -import gq.unurled.raxen.utils.AureliumSkills; import gq.unurled.raxen.utils.Reload; import org.bukkit.plugin.PluginManager; @@ -21,9 +21,9 @@ public class ListenerManager { this.pm.registerEvents(new LeaveEvent(main), main); this.pm.registerEvents(new ArmorEvent(main), main); this.pm.registerEvents(new ItemHandEvent(main), main); - this.pm.registerEvents(new AureliumSkills(main), main); this.pm.registerEvents(new Reload(), main); this.pm.registerEvents(new TransactionEvent(main), main); this.pm.registerEvents(main.getCommandManager().getItemListCommand().getItemListGui(), main); + this.pm.registerEvents(new DamageEntity(main), main); } } diff --git a/src/main/java/gq/unurled/raxen/manager/ProfileManager.java b/src/main/java/gq/unurled/raxen/manager/ProfileManager.java index f59f6cd..d9c8119 100644 --- a/src/main/java/gq/unurled/raxen/manager/ProfileManager.java +++ b/src/main/java/gq/unurled/raxen/manager/ProfileManager.java @@ -30,7 +30,7 @@ public class ProfileManager { } public Profile createNewProfile(Player player) { - Skills skills = new Skills( 100, 50, 100, 100); + Skills skills = new Skills( 100, 0, 50, 0, 100, 0, 100, 0); Profile profile = new Profile(skills); profiles.put(player.getUniqueId(), profile); return profile; diff --git a/src/main/java/gq/unurled/raxen/manager/ProtocolManager.java b/src/main/java/gq/unurled/raxen/manager/ProtocolManager.java index 739a65e..b4af713 100644 --- a/src/main/java/gq/unurled/raxen/manager/ProtocolManager.java +++ b/src/main/java/gq/unurled/raxen/manager/ProtocolManager.java @@ -1,7 +1,10 @@ package gq.unurled.raxen.manager; import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.*; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; import gq.unurled.raxen.Raxen; import org.bukkit.entity.Player; diff --git a/src/main/java/gq/unurled/raxen/manager/ResourcePackManager.java b/src/main/java/gq/unurled/raxen/manager/ResourcePackManager.java new file mode 100644 index 0000000..29e3a2a --- /dev/null +++ b/src/main/java/gq/unurled/raxen/manager/ResourcePackManager.java @@ -0,0 +1,46 @@ +package gq.unurled.raxen.manager; + +import gq.unurled.raxen.Raxen; +import gq.unurled.raxen.components.resourcepack.ResourcePack; +import lombok.Getter; +import org.bukkit.configuration.file.FileConfiguration; + +import java.util.Objects; + +import static gq.unurled.raxen.utils.Utils.error; +import static gq.unurled.raxen.utils.Utils.log; + +public class ResourcePackManager { + + private Raxen main; + @Getter + private ResourcePack resourcePack; + private FileConfiguration config; + @Getter + private boolean useRP; + + public ResourcePackManager(Raxen main) { + this.main = main; + this.resourcePack = new ResourcePack(main); + this.config = main.getConfig(); + this.useRP = this.config.getBoolean("useResourcePack"); + enable(); + } + + private void enable() { + if(useRP) { + if(config.getString("resource_pack_url") == null || Objects.equals(config.getString("rssource_pack_url"), "") || + config.getString("resource_pack_sha1") == null || Objects.equals(config.getString("resource_pack_sha1"), "") || + Objects.equals(config.getString("resource_pack_url"), "https://mc-packs.net/") || Objects.equals(config.getString("resource_pack_sha1"), "sha1hallo")) { + error("You must specify an resource_pack_url and resource_pack_sha1!"); + log("Resource pack not enabled."); + useRP = false; + } else { + log("Ressource Pack enabled."); + } + } else { + log("Resource pack not enabled."); + } + + } +} diff --git a/src/main/java/gq/unurled/raxen/manager/StorageManager.java b/src/main/java/gq/unurled/raxen/manager/StorageManager.java index 11b385f..4536136 100644 --- a/src/main/java/gq/unurled/raxen/manager/StorageManager.java +++ b/src/main/java/gq/unurled/raxen/manager/StorageManager.java @@ -11,7 +11,6 @@ import org.bukkit.entity.Player; import java.io.File; import java.io.IOException; -import java.util.stream.IntStream; import static gq.unurled.raxen.utils.Utils.*; diff --git a/src/main/java/gq/unurled/raxen/utils/AureliumSkills.java b/src/main/java/gq/unurled/raxen/utils/AureliumSkills.java deleted file mode 100644 index f86145e..0000000 --- a/src/main/java/gq/unurled/raxen/utils/AureliumSkills.java +++ /dev/null @@ -1,45 +0,0 @@ -package gq.unurled.raxen.utils; - -import com.archyx.aureliumskills.api.AureliumAPI; -import com.archyx.aureliumskills.api.event.SkillLevelUpEvent; -import com.archyx.aureliumskills.skills.Skill; -import gq.unurled.raxen.Raxen; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; - -public class AureliumSkills implements Listener { - - private static AureliumAPI aureliumAPI; - - public AureliumSkills(Raxen main) { - this.aureliumAPI = main.getAureliumAPI(); - } - - @EventHandler - public void skillLevelUp(SkillLevelUpEvent e) { - Player p = e.getPlayer(); - Skill skill = e.getSkill(); - Integer level = e.getLevel(); - switch (skill.name()){ - case "FARMING": - case "FORAGING": - case "MINING": - case "FISHING": - case "EXCAVATION": - case "ARCHERY": - case "DEFENSE": - case "FIGHTING": - case "ENDURANCE": - case "AGILITY": - case "ALCHEMY": - case "ENCHANTING": - case "SORCERY": - case "HEALING": - case "FORGING": - } - - - } - -} diff --git a/src/main/java/gq/unurled/raxen/utils/Items.java b/src/main/java/gq/unurled/raxen/utils/Items.java new file mode 100644 index 0000000..0e7544b --- /dev/null +++ b/src/main/java/gq/unurled/raxen/utils/Items.java @@ -0,0 +1,324 @@ +package gq.unurled.raxen.utils; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import de.tr7zw.changeme.nbtapi.NBTItem; +import gq.unurled.raxen.components.items.Attributes; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.LivingEntity; +import org.bukkit.inventory.EntityEquipment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static gq.unurled.raxen.utils.Utils.color; +import static gq.unurled.raxen.utils.Utils.error; + +public class Items { + + public static ItemStack createItem(Material material, int amount, boolean glow, boolean unb, String name, String... lore) { + ItemStack item = new ItemStack(material, amount); + ItemMeta itemMeta = item.getItemMeta(); + if(name != null) { + itemMeta.displayName(Component.text(color(name))); + } + if(lore != null) { + List list = new ArrayList<>(); + for(String string : lore) { + list.add(Component.text(color(string))); + } + itemMeta.lore(list); + } + if(glow) { + itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + itemMeta.addEnchant(Enchantment.DURABILITY, 1, true); + } + if(unb) { + itemMeta.setUnbreakable(true); + } + item.setItemMeta(itemMeta); + return item; + } + + public static ItemStack editItem(ItemStack item, String name,int amount, List lore) { + if(amount == 0) { + amount = 1; + } + item.setAmount(amount); + ItemMeta itemMeta = item.getItemMeta(); + if (name != null) { + itemMeta.displayName(Component.text(name)); + } + itemMeta.lore(lore); + item.setItemMeta(itemMeta); + return item; + } + + public static ItemStack closeItem () { + return createItem(Material.BARRIER, 1, false, false, color("&cCLOSE")); + } + + public static ItemStack greyPane() { + return createItem(Material.GRAY_STAINED_GLASS_PANE, 1, false, true, ""); + } + + public static String itemStackSerilize(ItemStack it, Integer slot) { + Gson gson = new Gson(); + //String str = gson.toJson(it.serialize()); + String str = gson.toJson(it.serialize(), new TypeToken(){}.getType()); + NBTItem nbti = new NBTItem(it); + str = str + "@#NBT#" + nbti.toString(); + str = str + "@#SLOT#" + slot.toString(); + return str; + } + + public static class itemStackDeserilizeResult { + int slot; + ItemStack it; + + public itemStackDeserilizeResult(Integer slot, ItemStack it) { + this.slot = slot; + this.it = it; + } + } + + public static itemStackDeserilizeResult itemStackDeserilize(String str) { + List mapp = Arrays.asList(str.split("@#NBT#")); + Gson gson = new Gson(); + ItemStack it = new ItemStack(Material.AIR); + Integer slot = 0; + for (String s : mapp) { + if(s != null && s.length() > 2) { + try { + Map map = gson.fromJson(s, new TypeToken>(){}.getType()); + it = ItemStack.deserialize(map); + } catch (Exception e) { + List mappp = Arrays.asList(s.split("@#SLOT#")); + for (String ss : mappp) { + try { + if (ss != null && ss.length() > 2) { + NBTItem nbti = new NBTItem(it); + String strrr = ss; + if (strrr.length() > 2) { + for (String strr : strrr.split(",")) { + if (!strr.equals("{") && !strr.equals("}")) { + strr = strr.replace("{", ""); + strr = strr.replace("}", ""); + String[] nb = strr.split(":"); + nbti.setInteger(nb[0], Integer.valueOf(nb[1])); + it = nbti.getItem(); + } + } + + } + } + } catch (Exception ee) { + slot = Integer.valueOf(ss); + } + } + + } + + } + } + itemStackDeserilizeResult itt = new itemStackDeserilizeResult(slot, it); + return itt; + } + + public static String listItemStackSerelize(List list) { + Gson gson = new Gson(); + String str = ""; + for(String a : list) { + str = str + "@#NEW_ITEM#" + a; + } + return str; + } + + public static ItemStack[] listItemStackDeserilize(String str) { + Gson gson = new Gson(); + List map = Arrays.asList(str.split("@#NEW_ITEM#")); + ArrayList items = new ArrayList(); + for(String s : map) { + ItemStack itt; + if(s != null) { + itt = itemStackDeserilize(s).it; + if (itt != null && itt.getType() != Material.AIR) { + items.add(itt); + } + } + } + ItemStack[] it = items.toArray(new ItemStack[0]); + return it; + } + + public static String attributes(String str) { + String stt = ""; + if(str.contains("SPEED")) { + stt = "&fSpeed"; + return stt; + } + if(str.contains("STRENGTH")) { + stt = "&4Strength"; + return stt; + } + if(str.contains("HEALTH")) { + stt = "&cHealth"; + return stt; + } + if(str.contains("DEFENSE")) { + stt = "&1Defense"; + return stt; + } + else { + stt = "None"; + return stt; + } + } + + public static NBTItem setAttributes(String str, Integer nb, NBTItem nbti) { + switch (str) { + case "SPEED": + nbti.setInteger("SPEED", nb); + case "STRENGTH": + nbti.setInteger("STRENGTH", nb); + case "HEALTH": + nbti.setInteger("HEALTH", nb); + case "DEFENSE": + nbti.setInteger("DEFENSE", nb); + default: + error("Cant set Attributes with an unknown attribute."); + } + return nbti; + } + + public static Integer getHealth(ItemStack it) { + NBTItem nbti = new NBTItem(it); + if (nbti.hasKey("HEALTH")){ + return nbti.getInteger("HEALTH"); + } + return 0; + } + public static Integer getSpeed(ItemStack it) { + NBTItem nbti = new NBTItem(it); + if (nbti.hasKey("SPEED")){ + return nbti.getInteger("SPEED"); + } + return 0; + } + public static Integer getDefense(ItemStack it) { + NBTItem nbti = new NBTItem(it); + if (nbti.hasKey("DEFENSE")){ + return nbti.getInteger("DEFENSE"); + } + return 0; + } + public static Integer getStrength(ItemStack it) { + NBTItem nbti = new NBTItem(it); + if (nbti.hasKey("STRENGTH")){ + return nbti.getInteger("STRENGTH"); + } + return 0; + } + + public static ItemStack setLoreFromNBT(ItemStack it) { + ItemMeta itm = it.getItemMeta(); + List lore = new ArrayList<>(); + for (Component cp : itm.lore()) { + lore.add(cp); + } + NBTItem nbti = new NBTItem(it); + if(nbti.hasKey("SPEED")) { + if(lore.size() > 2) { + lore.add(2, Component.text(color(attributes("SPEED")) + nbti.getInteger("SPEED"))); + } else { + lore.add(Component.text(color(attributes("SPEED")) + nbti.getInteger("SPEED"))); + } + } + if(nbti.hasKey("HEALTH")) { + if(lore.size() > 1) { + lore.add(1, Component.text(color(attributes("HEALTH")) + nbti.getInteger("HEALTH"))); + } else { + lore.add(Component.text(color(attributes("HEALTH")) + nbti.getInteger("HEALTH"))); + } + } + if(nbti.hasKey("DEFENSE")) { + if(lore.size() > 3) { + lore.add(3, Component.text(color(attributes("DEFENSE")) + nbti.getInteger("DEFENSE"))); + } else { + lore.add(Component.text(color(attributes("DEFENSE")) + nbti.getInteger("DEFENSE"))); + } + } + if(nbti.hasKey("STRENGTH")) { + if(lore.size() > 3) { + lore.add(3, Component.text(color(attributes("STRENGTH")) + nbti.getInteger("STRENGTH"))); + } else { + lore.add(Component.text(color(attributes("STRENGTH")) + nbti.getInteger("STRENGTH"))); + } + } + itm.lore(lore); + it.setItemMeta(itm); + return it; + } + + public static Attributes getNbtFromEntity(LivingEntity e) { + EntityEquipment equi = e.getEquipment(); + Integer health = 0; + Integer defense = 0; + Integer speed = 0; + Integer strength = 0; + if (equi != null) { + if (equi.getItemInMainHand().getType() != Material.AIR || equi.getItemInMainHand() != null) { + ItemStack item = equi.getItemInMainHand(); + health = health + getHealth(item); + defense = defense + getDefense(item); + speed = speed + getSpeed(item); + strength = strength + getStrength(item); + } + if (equi.getHelmet().getType() != Material.AIR || equi.getHelmet() != null) { + ItemStack item = equi.getHelmet(); + health = health + getHealth(item); + defense = defense + getDefense(item); + speed = speed + getSpeed(item); + strength = strength + getStrength(item); + } + if (equi.getChestplate().getType() != Material.AIR || equi.getChestplate() != null) { + ItemStack item = equi.getChestplate(); + health = health + getHealth(item); + defense = defense + getDefense(item); + speed = speed + getSpeed(item); + strength = strength + getStrength(item); + } + if (equi.getChestplate().getType() != Material.AIR || equi.getChestplate() != null) { + ItemStack item = equi.getChestplate(); + health = health + getHealth(item); + defense = defense + getDefense(item); + speed = speed + getSpeed(item); + strength = strength + getStrength(item); + } + if (equi.getLeggings().getType() != Material.AIR || equi.getLeggings() != null) { + ItemStack item = equi.getLeggings(); + health = health + getHealth(item); + defense = defense + getDefense(item); + speed = speed + getSpeed(item); + strength = strength + getStrength(item); + } + if (equi.getBoots().getType() != Material.AIR || equi.getBoots() != null) { + ItemStack item = equi.getBoots(); + health = health + getHealth(item); + defense = defense + getDefense(item); + speed = speed + getSpeed(item); + strength = strength + getStrength(item); + } + } + Attributes attributes = new Attributes(health, defense, speed, strength); + return attributes; + } + +} diff --git a/src/main/java/gq/unurled/raxen/utils/Mysql.java b/src/main/java/gq/unurled/raxen/utils/Mysql.java index 2fe9303..e59d448 100644 --- a/src/main/java/gq/unurled/raxen/utils/Mysql.java +++ b/src/main/java/gq/unurled/raxen/utils/Mysql.java @@ -5,7 +5,7 @@ import gq.unurled.raxen.config.Config; import gq.unurled.raxen.manager.StorageManager; import org.bukkit.entity.Player; -import java.sql.*; +import java.sql.SQLException; public class Mysql { diff --git a/src/main/java/gq/unurled/raxen/utils/Reload.java b/src/main/java/gq/unurled/raxen/utils/Reload.java index 43e2081..cbfb286 100644 --- a/src/main/java/gq/unurled/raxen/utils/Reload.java +++ b/src/main/java/gq/unurled/raxen/utils/Reload.java @@ -9,7 +9,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.server.ServerListPingEvent; -import java.io.*; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; diff --git a/src/main/java/gq/unurled/raxen/utils/Skills.java b/src/main/java/gq/unurled/raxen/utils/Skills.java index cc56a6c..9eb2280 100644 --- a/src/main/java/gq/unurled/raxen/utils/Skills.java +++ b/src/main/java/gq/unurled/raxen/utils/Skills.java @@ -10,15 +10,19 @@ public class Skills { public static void updateSkills(Player player) { gq.unurled.raxen.components.player.Skills skills = Raxen.getProfileManager().getPlayerProfile(player.getUniqueId()).getSkils(); - int health, defense, speed, strength; + int health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemDmg; health = skills.getHealth(); + itemHealth = skills.getItemHealth(); defense = skills.getDefense(); + itemDefense = skills.getItemDefense(); speed = skills.getSpeed(); + itemSpeed = skills.getItemSpeed(); strength = skills.getStrength(); - player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(20D + health / 100); - player.setWalkSpeed((float) (0.0 + (speed / 100) * 0.2)); - player.setFlySpeed((float) (0.0 + (speed / 100) * 0.2)); - msgPlayer(player, "Speed " + speed, "Health " + health, "Defense " + defense, "Strength " + strength); + itemDmg = skills.getItemDmg(); + player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(20D + (health + itemHealth) / 100); + player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); + player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); + msgPlayer(player, "Speed " + (speed + itemSpeed), "Health " + (health + itemHealth), "Defense " + (defense+itemDefense), "Strength " + (strength+itemDmg)); } } diff --git a/src/main/java/gq/unurled/raxen/utils/Utils.java b/src/main/java/gq/unurled/raxen/utils/Utils.java index ef93774..6f35d7d 100644 --- a/src/main/java/gq/unurled/raxen/utils/Utils.java +++ b/src/main/java/gq/unurled/raxen/utils/Utils.java @@ -1,20 +1,13 @@ package gq.unurled.raxen.utils; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import de.tr7zw.changeme.nbtapi.NBTItem; import gq.unurled.raxen.Raxen; import net.kyori.adventure.text.Component; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import java.util.*; import java.util.logging.Logger; public class Utils { @@ -53,58 +46,12 @@ public class Utils { } } - public static ItemStack createItem(Material material, int amount, boolean glow, boolean unb, String name, String... lore) { - ItemStack item = new ItemStack(material, amount); - ItemMeta itemMeta = item.getItemMeta(); - if(name != null) { - itemMeta.displayName(Component.text(color(name))); - } - if(lore != null) { - List list = new ArrayList<>(); - for(String string : lore) { - list.add(Component.text(color(string))); - } - itemMeta.lore(list); - } - if(glow) { - itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - itemMeta.addEnchant(Enchantment.DURABILITY, 1, true); - } - if(unb) { - itemMeta.setUnbreakable(true); - } - item.setItemMeta(itemMeta); - return item; - } - - public static ItemStack editItem(ItemStack item, String name,int amount, List lore) { - if(amount == 0) { - amount = 1; - } - item.setAmount(amount); - ItemMeta itemMeta = item.getItemMeta(); - if (name != null) { - itemMeta.displayName(Component.text(name)); - } - itemMeta.lore(lore); - item.setItemMeta(itemMeta); - return item; - } - - public static ItemStack closeItem () { - return createItem(Material.BARRIER, 1, false, false, color("&cCLOSE")); - } - - public static ItemStack greyPane() { - return createItem(Material.GRAY_STAINED_GLASS_PANE, 1, false, true, ""); - } - public static Inventory fillGreyPane(Inventory inv) { Integer in = -1; for (ItemStack it : inv) { in++; if (it == null || it.getType() == Material.AIR) { - inv.setItem(in, greyPane()); + inv.setItem(in, Items.greyPane()); } } return inv; @@ -118,134 +65,6 @@ public class Utils { return Component.text(color("&cAn Error has occurred. Please retry or contact an Admin.")); } - public static String itemStackSerilize(ItemStack it, Integer slot) { - Gson gson = new Gson(); - //String str = gson.toJson(it.serialize()); - String str = gson.toJson(it.serialize(), new TypeToken(){}.getType()); - NBTItem nbti = new NBTItem(it); - str = str + "@#NBT#" + nbti.toString(); - str = str + "@#SLOT#" + slot.toString(); - return str; - } - public static class itemStackDeserilizeResult { - int slot; - ItemStack it; - - public itemStackDeserilizeResult(Integer slot, ItemStack it) { - this.slot = slot; - this.it = it; - } - } - - public static itemStackDeserilizeResult itemStackDeserilize(String str) { - List mapp = Arrays.asList(str.split("@#NBT#")); - Gson gson = new Gson(); - ItemStack it = new ItemStack(Material.AIR); - Integer slot = 0; - for (String s : mapp) { - if(s != null && s.length() > 2) { - try { - Map map = gson.fromJson(s, new TypeToken>(){}.getType()); - it = ItemStack.deserialize(map); - } catch (Exception e) { - List mappp = Arrays.asList(s.split("@#SLOT#")); - for (String ss : mappp) { - try { - if (ss != null && ss.length() > 2) { - NBTItem nbti = new NBTItem(it); - String strrr = ss; - if (strrr.length() > 2) { - for (String strr : strrr.split(",")) { - if (!strr.equals("{") && !strr.equals("}")) { - strr = strr.replace("{", ""); - strr = strr.replace("}", ""); - String[] nb = strr.split(":"); - nbti.setInteger(nb[0], Integer.valueOf(nb[1])); - it = nbti.getItem(); - } - } - - } - } - } catch (Exception ee) { - slot = Integer.valueOf(ss); - } - } - - } - - } - } - itemStackDeserilizeResult itt = new itemStackDeserilizeResult(slot, it); - return itt; - } - - public static String listItemStackSerelize(List list) { - Gson gson = new Gson(); - String str = ""; - for(String a : list) { - str = str + "@#NEW_ITEM#" + a; - } - return str; - } - - public static ItemStack[] listItemStackDeserilize(String str) { - Gson gson = new Gson(); - List map = Arrays.asList(str.split("@#NEW_ITEM#")); - ArrayList items = new ArrayList(); - for(String s : map) { - ItemStack itt; - if(s != null) { - itt = itemStackDeserilize(s).it; - if (itt != null && itt.getType() != Material.AIR) { - items.add(itt); - } - } - } - ItemStack[] it = items.toArray(new ItemStack[0]); - return it; - } - - public static String attributes(String str) { - String stt = ""; - if(str.contains("SPEED")) { - stt = "&fSpeed"; - return stt; - } - if(str.contains("STRENGTH")) { - stt = "&4Strength"; - return stt; - } - if(str.contains("HEALTH")) { - stt = "&cHealth"; - return stt; - } - if(str.contains("DEFENSE")) { - stt = "&1Defense"; - return stt; - } - else { - stt = "None"; - return stt; - } - } - - public static NBTItem setAttributes(String str, Integer nb, NBTItem nbti) { - log(str); - switch (str) { - case "SPEED": - nbti.setInteger("SPEED", nb); - case "STRENGTH": - nbti.setInteger("STRENGTH", nb); - case "HEALTH": - nbti.setInteger("HEALTH", nb); - case "DEFENSE": - nbti.setInteger("DEFENSE", nb); - default: - error("Cant set Attributes with an unknown attribute."); - } - return nbti; - } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b6dd464..69032a4 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -6,4 +6,8 @@ storage: "MONGODB" #switch between "MONGODB", "MYSQL"(not implemented), "YML"(cu #if MYSQL username: "Your-username-here" password: "Your-password-here" -url: "url-to-the-server/db_Name" \ No newline at end of file +url: "url-to-the-server/db_Name" + +useResourcePack: true +resource_pack_url: "https://mc-packs.net/" # recommend to use https://mc-packs.net/ => free ressource pack hoster (will eventualy developp one myself but not atm) +resource_pack_sha1: "sha1hallo" # sha1 hash \ No newline at end of file diff --git a/src/main/resources/example_item.yml b/src/main/resources/example_item.yml index 4e83525..2a9e9ee 100644 --- a/src/main/resources/example_item.yml +++ b/src/main/resources/example_item.yml @@ -8,6 +8,9 @@ strength: 100 custom_ability: "fireball" isGlowing: true isUnbreakable: true -custom_model_data: 123 +Pack: + parent: "item/generated" + custom_model_data: 123 + model: "red_wool" lore: - '&cSuper lore' \ No newline at end of file diff --git a/src/main/resources/example_mob.yml b/src/main/resources/example_mob.yml new file mode 100644 index 0000000..a6d7c45 --- /dev/null +++ b/src/main/resources/example_mob.yml @@ -0,0 +1,31 @@ +world: world +display_name: '&fLvl: {level} {name} &c❤{hp}&f/&c❤{hp_max}' +name: 'example mob' +base_mob: ZOMBIE +ID: EXAMPLE_MOB +level: + 1-10: + hp_max: 100*{level} + speed: 100+({level}/10) + strength: 10*{level} + defense: 0 + 11-20: + hp_max: 200*{level} + speed: 100+({level}/10) + strength: 10*{level} + defense: 0 + 21-30: + hp_max: 200*{level} + speed: 100+({level}/10) + strength: 10*{level} + defense: 0 + 31-40: + hp_max: 200*{level} + speed: 100+({level}/10) + strength: 10*{level} + defense: 0 + 41-50: + hp_max: 200*{level} + speed: 100+({level}/10) + strength: 10*{level} + defense: 0 \ No newline at end of file