From b935c6fee624d57b8ba1423288dee3071070c3e0 Mon Sep 17 00:00:00 2001 From: unurled Date: Thu, 22 Dec 2022 00:30:39 +0100 Subject: [PATCH] not finished, tried to make entity with custom skin + bug patches --- build.gradle | 10 +- src/main/java/me/unurled/raxen/Raxen.java | 2 +- .../raxen/commands/admin/NbtCommand.java | 8 +- .../entity/Attributes/Attribute.java | 8 ++ .../entity/other/custom/Entity.java | 5 + .../entity/other/custom/Humanoid.java | 15 +++ .../components/entity/player/RaxenPlayer.java | 3 +- .../entity/player/attributes/Attributes.java | 10 +- .../entity/player/classes/list/Assassin.java | 8 +- .../raxen/components/gui/ItemListGui.java | 49 +++++--- .../abilities/weapon/ThrowingDagger.java | 47 ++++++++ .../raxen/components/items/custom/Item.java | 27 ++++- .../components/items/custom/ItemClass.java | 16 +++ .../components/items/custom/ItemTypes.java | 11 ++ .../raxen/components/items/custom/List.java | 6 +- .../components/items/custom/weapon/Dager.java | 51 --------- .../items/custom/weapon/Dagger.java | 51 +++++++++ .../raxen/listener/player/ItemHandEvent.java | 61 ++++++++-- .../raxen/listener/player/JoinEvent.java | 2 + .../raxen/listener/player/LeaveEvent.java | 1 + .../raxen/manager/entity/ItemManager.java | 2 +- .../raxen/manager/entity/PlayerManager.java | 11 +- .../me/unurled/raxen/utils/EntityUtils.java | 17 +++ .../java/me/unurled/raxen/utils/RayTrace.java | 108 ++++++++++++++++++ .../java/me/unurled/raxen/utils/Utils.java | 26 ++++- 25 files changed, 442 insertions(+), 113 deletions(-) create mode 100644 src/main/java/me/unurled/raxen/components/entity/other/custom/Humanoid.java create mode 100644 src/main/java/me/unurled/raxen/components/items/abilities/weapon/ThrowingDagger.java create mode 100644 src/main/java/me/unurled/raxen/components/items/custom/ItemClass.java create mode 100644 src/main/java/me/unurled/raxen/components/items/custom/ItemTypes.java delete mode 100644 src/main/java/me/unurled/raxen/components/items/custom/weapon/Dager.java create mode 100644 src/main/java/me/unurled/raxen/components/items/custom/weapon/Dagger.java create mode 100644 src/main/java/me/unurled/raxen/utils/EntityUtils.java create mode 100644 src/main/java/me/unurled/raxen/utils/RayTrace.java diff --git a/build.gradle b/build.gradle index 09d9bae..2dc78d9 100644 --- a/build.gradle +++ b/build.gradle @@ -16,28 +16,22 @@ repositories { maven { url = uri('https://papermc.io/repo/repository/maven-public/') } - maven { url = uri('https://oss.sonatype.org/content/groups/public/') } - maven { name = 'CodeMC' url = 'https://repo.codemc.org/repository/maven-public/' } - maven { url = uri('https://repo.dmulloy2.net/repository/public/') } - maven { url = uri('https://repo.essentialsx.net/releases/') } - maven { url = uri('https://s01.oss.sonatype.org/content/repositories/snapshots/') } - maven { url = uri('https://repo.maven.apache.org/maven2/') } @@ -65,7 +59,7 @@ dependencies { implementation 'org.mongodb:mongodb-driver-core:4.7.2' implementation 'de.tr7zw:item-nbt-api-plugin:2.10.0' - compileOnly 'io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT' compileOnly 'com.comphenix.protocol:ProtocolLib:4.8.0' compileOnly 'net.luckperms:api:5.4' compileOnly 'com.github.MilkBowl:VaultAPI:1.7.1' @@ -80,7 +74,7 @@ dependencies { } group = 'me.unurled' -version = '0.5.5' +version = '0.5.6' description = 'Raxen' java { diff --git a/src/main/java/me/unurled/raxen/Raxen.java b/src/main/java/me/unurled/raxen/Raxen.java index f898707..baa0654 100644 --- a/src/main/java/me/unurled/raxen/Raxen.java +++ b/src/main/java/me/unurled/raxen/Raxen.java @@ -18,7 +18,7 @@ import static me.unurled.raxen.utils.Utils.colorComp; public final class Raxen extends JavaPlugin { private static final String prefix = "Rx> "; - @Getter private static String version = "0.5.5"; + @Getter private static String version = "0.5.6"; private final PluginManager pm = getServer().getPluginManager(); private static Raxen plugin; diff --git a/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java b/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java index 5128762..42c7c01 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java @@ -53,8 +53,8 @@ public class NbtCommand implements TabExecutor { a = nbti.getInteger(args[1]); } List lore = new ArrayList<>(); - ItemMeta itm = it.getItemMeta(); - lore.add((Component) itm.lore()); + // ItemMeta itm = it.getItemMeta(); + // lore.add((Component) itm.lore()); boolean yes = false; boolean ever = false; for (Component ct : lore) { @@ -74,8 +74,8 @@ public class NbtCommand implements TabExecutor { lore.add(colorTextComp("Attributes:")); //lore.add(colorTextComp(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a))); deprecated } - itm.lore(lore); - it.setItemMeta(itm); + // itm.lore(lore); + // it.setItemMeta(itm); PlayerManager pm = ((Raxen) Objects.requireNonNull(Bukkit.getPluginManager().getPlugin("Raxen"))).getManager().getPlayerManager(); nbti.setInteger(args[0], Integer.parseInt(args[1]) + a); if (nbti.hasKey("SPEED")) { diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/Attribute.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/Attribute.java index ff3609b..2e465da 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/Attribute.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/Attribute.java @@ -31,6 +31,14 @@ public class Attribute { this.name = name; } + /** + * gives the name uppercased + * @return the name in uppercase + */ + public String nameUppercase() { + return name.toUpperCase(); + } + /** * get how many the Entity has Attributed * @param entity a living entity diff --git a/src/main/java/me/unurled/raxen/components/entity/other/custom/Entity.java b/src/main/java/me/unurled/raxen/components/entity/other/custom/Entity.java index 3f9a673..3ab65c6 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/custom/Entity.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/custom/Entity.java @@ -4,10 +4,14 @@ import lombok.Getter; import lombok.Setter; import me.unurled.raxen.Raxen; +import java.util.UUID; + import static me.unurled.raxen.utils.Utils.colorString; public class Entity { + private java.util.UUID uuid; + private final String name; @Getter private Integer level; @@ -38,6 +42,7 @@ public class Entity { this.speed = speed; this.maxHealth = maxHealth; this.isHostile = isHostile; + this.uuid = UUID.randomUUID(); } public void register (Raxen main) { diff --git a/src/main/java/me/unurled/raxen/components/entity/other/custom/Humanoid.java b/src/main/java/me/unurled/raxen/components/entity/other/custom/Humanoid.java new file mode 100644 index 0000000..f76c294 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/entity/other/custom/Humanoid.java @@ -0,0 +1,15 @@ +package me.unurled.raxen.components.entity.other.custom; + +import java.util.UUID; + +public class Humanoid extends Entity { + + private String skin; // used to get the path to the skin + private UUID skinUuid; // used to get the player skin (if i do it this way... + + public Humanoid(String name, Integer level, Double maxHealth, Double strength, Double defense, Double speed, boolean isHostile, String skin, UUID skinUuid) { + super(name, level, maxHealth, strength, defense, speed, isHostile); + this.skin = skin; + this.skinUuid = skinUuid; + } +} diff --git a/src/main/java/me/unurled/raxen/components/entity/player/RaxenPlayer.java b/src/main/java/me/unurled/raxen/components/entity/player/RaxenPlayer.java index 4617236..53cbdb8 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/RaxenPlayer.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/RaxenPlayer.java @@ -68,8 +68,7 @@ public class RaxenPlayer { PersistentDataContainer data = player.getPersistentDataContainer(); String inv = data.get(namespacedKey.inventory, PersistentDataType.STRING); org.bukkit.inventory.Inventory invv = Bukkit.createInventory(player, InventoryType.PLAYER); - PlayerInventory invvvvv = (PlayerInventory) Bukkit.createInventory(null, InventoryType.PLAYER); - invv = setItemsToInventory(Items.listItemStackDeserialize(inv), invvvvv); + invv = setItemsToInventory(Items.listItemStackDeserialize(inv), (PlayerInventory) invv); Inventory invvv = new Inventory(invv); Inventories invvvv = new Inventories(invvv); return invvvv; diff --git a/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attributes.java b/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attributes.java index 51ae63d..9ed0816 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attributes.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attributes.java @@ -6,6 +6,8 @@ import me.unurled.raxen.manager.entity.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; public class Attributes { @@ -15,7 +17,8 @@ public class Attributes { namespacedKey = new EntityNamespacedKey(main); } - public static Attribute getAttribute(Player player) { + @Contract("_ -> new") + public static @NotNull Attribute getAttribute(Player player) { int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; PlayerManager pm = ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager().getPlayerManager(); Entity e = player; @@ -54,4 +57,9 @@ public class Attributes { pm.getItemSpeed().set(e, itemSpeed); pm.getItemMana().set(e, itemMana); } + + public static String[] getNameList() { + return new String[]{"Defense", "Health", "Luck", "Mana", "Speed", "Strength"}; + + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/classes/list/Assassin.java b/src/main/java/me/unurled/raxen/components/entity/player/classes/list/Assassin.java index 53f8b41..775203f 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/classes/list/Assassin.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/classes/list/Assassin.java @@ -1,7 +1,7 @@ package me.unurled.raxen.components.entity.player.classes.list; import me.unurled.raxen.components.entity.player.classes.Class; -import me.unurled.raxen.components.items.custom.weapon.Dager; +import me.unurled.raxen.components.items.custom.weapon.Dagger; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -16,9 +16,9 @@ public class Assassin extends Class { public Assassin() { super("Assassin", "Assassin", "ASSASSIN", new ItemStack(Material.AIR), 100); - Dager dager = new Dager(); - dager.buildItem(); - placeHolder = dager.getDager(); + Dagger dagger = new Dagger(); + dagger.buildItem(); + placeHolder = dagger.getItem(); } public Assassin(String name, String colorName, String ID, String itemPlaceHolder, Integer max_level) { diff --git a/src/main/java/me/unurled/raxen/components/gui/ItemListGui.java b/src/main/java/me/unurled/raxen/components/gui/ItemListGui.java index 37f76f8..fec5d97 100644 --- a/src/main/java/me/unurled/raxen/components/gui/ItemListGui.java +++ b/src/main/java/me/unurled/raxen/components/gui/ItemListGui.java @@ -3,8 +3,12 @@ package me.unurled.raxen.components.gui; import lombok.Getter; import me.unurled.raxen.Raxen; import me.unurled.raxen.components.entity.player.PlayerUtils; +import me.unurled.raxen.utils.Utils; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -163,7 +167,8 @@ public class ItemListGui implements Listener { //previous if (e.getCurrentItem() != GREY_PANE) { ItemStack pagee = einv.getItem(49); - Integer page = Integer.parseInt(pagee.displayName().toString().replace("page", "")); + String name = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&',Utils.textCompToString(pagee.displayName()))); + Integer page = Integer.parseInt(name.toString().replace("page", "")); switch(page) { case 2: player.openInventory(inv); @@ -189,24 +194,30 @@ public class ItemListGui implements Listener { } else if (slot == 50) { //next ItemStack pagee = einv.getItem(49); - Integer page = Integer.parseInt(pagee.displayName().toString().replace("page", "")); - switch(page) { - case 1: - player.openInventory(inv2); - case 2: - player.openInventory(inv3); - case 3: - player.openInventory(inv4); - case 4: - player.openInventory(inv5); - case 5: - player.openInventory(inv6); - case 6: - player.openInventory(inv7); - case 7: - player.openInventory(inv8); - case 8: - player.openInventory(inv9); + if (pagee != null) { + String name = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&',Utils.textCompToString(pagee.displayName()))); + name = name.replace("[", ""); + name = name.replace("]", ""); + log(name); + Integer page = Integer.parseInt(name.replace("page", "")); + switch (page) { + case 1: + player.openInventory(inv2); + case 2: + player.openInventory(inv3); + case 3: + player.openInventory(inv4); + case 4: + player.openInventory(inv5); + case 5: + player.openInventory(inv6); + case 6: + player.openInventory(inv7); + case 7: + player.openInventory(inv8); + case 8: + player.openInventory(inv9); + } } } else if (slot == 53) { //close diff --git a/src/main/java/me/unurled/raxen/components/items/abilities/weapon/ThrowingDagger.java b/src/main/java/me/unurled/raxen/components/items/abilities/weapon/ThrowingDagger.java new file mode 100644 index 0000000..e2a6003 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/abilities/weapon/ThrowingDagger.java @@ -0,0 +1,47 @@ +package me.unurled.raxen.components.items.abilities.weapon; + +import me.unurled.raxen.utils.RayTrace; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.BoundingBox; +import org.bukkit.util.Vector; + +import java.util.ArrayList; + +public class ThrowingDagger { + + Player player; + ItemStack item; + Location start; + + public ThrowingDagger(Player p) { + this.player = p; + this.item = p.getActiveItem(); + this.start = p.getLocation(); + } + + public void throwDagger() { + // ability throw a dagger in the direction the player is looking, max 20 blocks + RayTrace rayTrace = new RayTrace(player.getEyeLocation().toVector(),player.getEyeLocation().getDirection()); + ArrayList positions = rayTrace.traverse(10,0.01); + for(int i = 0; i < positions.size();i++){ + + Location position = positions.get(i).toLocation(player.getWorld()); + Block block = player.getWorld().getBlockAt(position); + + if(block != null && block.getType() != Material.AIR && rayTrace.intersects(BoundingBox.of(block),10,0.01)){ + player.sendMessage(block.getType().toString()); + break; + } + + } + /*for (int i = 0 ; i < 20 ; i++) { + // spawn an item in air + // dispawn the last one + // repeat + }*/ + } +} diff --git a/src/main/java/me/unurled/raxen/components/items/custom/Item.java b/src/main/java/me/unurled/raxen/components/items/custom/Item.java index bf426ea..763e805 100644 --- a/src/main/java/me/unurled/raxen/components/items/custom/Item.java +++ b/src/main/java/me/unurled/raxen/components/items/custom/Item.java @@ -1,11 +1,32 @@ package me.unurled.raxen.components.items.custom; +import lombok.Getter; import me.unurled.raxen.Raxen; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; -public interface Item { +public abstract class Item { - public void buildItem(); + @Getter + ItemStack item; - public void registerItem(Raxen main); + String NAME; + String ID; + + ItemClass ITEM_CLASS; + ItemTypes ITEM_TYPES; + + protected Item() { + this.item = buildItem(); + } + + public abstract ItemStack buildItem(); + + /** + * need item to be set before calling this method. + */ + public void registerItem(@NotNull Raxen main) { + main.getManager().getItemManager().registerItem(item); + } } diff --git a/src/main/java/me/unurled/raxen/components/items/custom/ItemClass.java b/src/main/java/me/unurled/raxen/components/items/custom/ItemClass.java new file mode 100644 index 0000000..c1de173 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/custom/ItemClass.java @@ -0,0 +1,16 @@ +package me.unurled.raxen.components.items.custom; + +public enum ItemClass { + F, + E, + D, + C, + B, + A, + S, + SS, + SSS, + MYTHIC, + UNIC, + GOD, +} diff --git a/src/main/java/me/unurled/raxen/components/items/custom/ItemTypes.java b/src/main/java/me/unurled/raxen/components/items/custom/ItemTypes.java new file mode 100644 index 0000000..348754c --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/custom/ItemTypes.java @@ -0,0 +1,11 @@ +package me.unurled.raxen.components.items.custom; + +public enum ItemTypes { + WEAPON, + BOW, + TOOLS, + MEDICINE, + ARMOR, + BLOCKS, + MISCELLANEOUS +} diff --git a/src/main/java/me/unurled/raxen/components/items/custom/List.java b/src/main/java/me/unurled/raxen/components/items/custom/List.java index b0768c9..54963b3 100644 --- a/src/main/java/me/unurled/raxen/components/items/custom/List.java +++ b/src/main/java/me/unurled/raxen/components/items/custom/List.java @@ -2,7 +2,7 @@ package me.unurled.raxen.components.items.custom; import lombok.Getter; import me.unurled.raxen.Raxen; -import me.unurled.raxen.components.items.custom.weapon.Dager; +import me.unurled.raxen.components.items.custom.weapon.Dagger; import java.util.ArrayList; @@ -16,11 +16,11 @@ public class List { public List(Raxen main) { this.main = main; this.items = new ArrayList<>(); - + build(); } public void build() { // weapons - items.add(new Dager()); + items.add(new Dagger()); } } diff --git a/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dager.java b/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dager.java deleted file mode 100644 index 9198d56..0000000 --- a/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dager.java +++ /dev/null @@ -1,51 +0,0 @@ -package me.unurled.raxen.components.items.custom.weapon; - -import de.tr7zw.nbtapi.NBTItem; -import lombok.Getter; -import me.unurled.raxen.Raxen; -import me.unurled.raxen.components.items.custom.Item; -import net.kyori.adventure.text.Component; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.ArrayList; -import java.util.List; - -import static me.unurled.raxen.components.items.NBT.*; -import static me.unurled.raxen.utils.Utils.colorTextComp; - -public class Dager implements Item { - @Getter - ItemStack dager; - - public void buildItem() { - dager = new ItemStack(Material.IRON_SWORD); - ItemMeta itm = dager.getItemMeta(); - itm.displayName(colorTextComp("Dager")); - itm.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1, false); - itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS); - itm.setUnbreakable(true); - List lore = new ArrayList<>(); - lore.add(Component.text("hallooo")); - itm.lore(lore); - dager.setItemMeta(itm); - NBTItem nbti = new NBTItem(dager); - nbti.setString(ID, "DAGER"); - nbti.setInteger(SPEED, 100); - nbti.setInteger(STRENGTH, 50); - nbti.setString(CUSTOM_ABILITY, "throwing_dager"); - nbti.setDouble(DROP_RATE, 50.0); - dager = nbti.getItem(); - } - - /** - * need Raxen main to be set before calling this method. - */ - @Override - public void registerItem(Raxen main) { - main.getManager().getItemManager().registerItem(dager); - } -} diff --git a/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dagger.java b/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dagger.java new file mode 100644 index 0000000..25e12df --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dagger.java @@ -0,0 +1,51 @@ +package me.unurled.raxen.components.items.custom.weapon; + +import de.tr7zw.nbtapi.NBTItem; +import lombok.Getter; +import me.unurled.raxen.components.items.NBT; +import me.unurled.raxen.components.items.custom.Item; +import me.unurled.raxen.components.items.custom.ItemClass; +import me.unurled.raxen.components.items.custom.ItemTypes; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +import static me.unurled.raxen.utils.Utils.colorTextComp; + +public class Dagger extends Item { + @Getter + ItemStack item; + + String NAME = "Dager"; + String ID = "DAGER"; + + ItemClass ITEM_CLASS = ItemClass.F; + ItemTypes ITEM_TYPES = ItemTypes.WEAPON; + + public ItemStack buildItem() { + item = new ItemStack(Material.IRON_SWORD); + ItemMeta itm = item.getItemMeta(); + itm.displayName(colorTextComp("" + this.NAME)); + itm.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1, false); + itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS); + itm.setUnbreakable(true); + List lore = new ArrayList<>(); + lore.add(Component.text("hallooo")); + itm.lore(lore); + item.setItemMeta(itm); + NBTItem nbti = new NBTItem(item); + nbti.setString(NBT.ID, ID); + nbti.setInteger(NBT.SPEED, 100); + nbti.setInteger(NBT.STRENGTH, 50); + nbti.setString(NBT.CUSTOM_ABILITY, "throwing_dager"); + nbti.setDouble(NBT.DROP_RATE, 50.0); + item = nbti.getItem(); + return item; + } +} diff --git a/src/main/java/me/unurled/raxen/listener/player/ItemHandEvent.java b/src/main/java/me/unurled/raxen/listener/player/ItemHandEvent.java index 5edb79b..88f70b9 100644 --- a/src/main/java/me/unurled/raxen/listener/player/ItemHandEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/ItemHandEvent.java @@ -2,6 +2,7 @@ package me.unurled.raxen.listener.player; import de.tr7zw.nbtapi.NBTItem; import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.entity.Attributes.Attribute; import me.unurled.raxen.components.entity.player.PlayerUtils; import me.unurled.raxen.components.entity.player.attributes.Attributes; import me.unurled.raxen.manager.entity.PlayerManager; @@ -14,6 +15,10 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.InvocationTargetException; + +import static me.unurled.raxen.utils.Utils.debug; + public class ItemHandEvent implements Listener { private Raxen main; @@ -36,25 +41,66 @@ public class ItemHandEvent implements Listener { ItemStack newItem = player.getInventory().getItem(e.getNewSlot()); if(oldItem != null && oldItem.getType() != Material.AIR) { NBTItem nbti = new NBTItem(oldItem); - if(nbti.hasKey("SPEED")) { + for (String s : Attributes.getNameList()) { + if (nbti.hasKey(s.toUpperCase())) { + java.lang.reflect.Method method = null; + try { + method = pm.getClass().getMethod("getItem" + s); + } catch (SecurityException | NoSuchMethodException exception) { + + } + if (method != null) { + me.unurled.raxen.components.entity.Attributes.Attribute attribute = null; + try { + attribute = (Attribute) method.invoke(pm, null); + } catch (InvocationTargetException | IllegalAccessException exception) { + + } + if (attribute != null) { + attribute.remove(player, nbti.getInteger(s.toUpperCase())); + debug("removed " + s + " for player " + player.getName()); + } + } + } + } + /*if(nbti.hasKey("SPEED")) { pm.getItemSpeed().remove(player, nbti.getInteger("SPEED")); } if(nbti.hasKey("HEALTH")) { pm.getItemHealth().remove(player, nbti.getInteger("HEALTH")); - } if(nbti.hasKey("DEFENSE")) { pm.getItemDefense().remove(player, nbti.getInteger("DEFENSE")); - } if(nbti.hasKey("STRENGTH")) { pm.getItemStrength().remove(player, nbti.getInteger("STRENGTH")); - - } + }*/ } if(newItem != null && newItem.getType() != Material.AIR) { NBTItem nbti = new NBTItem(newItem); - if(nbti.hasKey("SPEED")) { + for (String s : Attributes.getNameList()) { + if (nbti.hasKey(s.toUpperCase())) { + java.lang.reflect.Method method = null; + try { + method = pm.getClass().getMethod("getItem" + s); + } catch (SecurityException | NoSuchMethodException exception) { + + } + if (method != null) { + me.unurled.raxen.components.entity.Attributes.Attribute attribute = null; + try { + attribute = (Attribute) method.invoke(pm, null); + } catch (InvocationTargetException | IllegalAccessException exception) { + + } + if (attribute != null) { + attribute.add(player, nbti.getInteger(s.toUpperCase())); + debug("add " + s + " for player " + player.getName()); + } + } + } + } + /* if(nbti.hasKey("SPEED")) { pm.getItemSpeed().add(player, nbti.getInteger("SPEED")); } if(nbti.hasKey("HEALTH")) { @@ -67,8 +113,7 @@ public class ItemHandEvent implements Listener { } if(nbti.hasKey("STRENGTH")) { pm.getItemStrength().add(player, nbti.getInteger("STRENGTH")); - - } + }*/ } PlayerUtils.updateSkills(main, player); } diff --git a/src/main/java/me/unurled/raxen/listener/player/JoinEvent.java b/src/main/java/me/unurled/raxen/listener/player/JoinEvent.java index 7227c11..1970c43 100644 --- a/src/main/java/me/unurled/raxen/listener/player/JoinEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/JoinEvent.java @@ -1,6 +1,7 @@ package me.unurled.raxen.listener.player; import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.entity.player.PlayerUtils; import me.unurled.raxen.components.entity.player.Scoreboard; import me.unurled.raxen.components.resourcepack.ResourcePack; import me.unurled.raxen.config.PlayerConfig; @@ -38,6 +39,7 @@ public class JoinEvent implements Listener { resourcePack.join(player); playerManager.getRaxenPlayer(player).isRaxenPlayer(true); playerManager.registerActionBar(player); + PlayerUtils.updateSkills(main, player); } } diff --git a/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java b/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java index 4f6cf22..0767d63 100644 --- a/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java @@ -1,6 +1,7 @@ package me.unurled.raxen.listener.player; import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.entity.player.PlayerUtils; import me.unurled.raxen.config.PlayerConfig; import me.unurled.raxen.manager.entity.PlayerManager; import org.bukkit.entity.Player; diff --git a/src/main/java/me/unurled/raxen/manager/entity/ItemManager.java b/src/main/java/me/unurled/raxen/manager/entity/ItemManager.java index df7bad2..d48b52c 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/ItemManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/ItemManager.java @@ -44,7 +44,7 @@ public class ItemManager { private void registerItem() { me.unurled.raxen.components.items.custom.List lisst = new me.unurled.raxen.components.items.custom.List(main); for (Item items : lisst.getItems()) { - items.registerItem(main); + registerItem(items.getItem()); } } diff --git a/src/main/java/me/unurled/raxen/manager/entity/PlayerManager.java b/src/main/java/me/unurled/raxen/manager/entity/PlayerManager.java index d792d8a..95c1445 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/PlayerManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/PlayerManager.java @@ -7,7 +7,6 @@ import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.player.RaxenPlayer; import me.unurled.raxen.components.entity.player.classes.Class; import me.unurled.raxen.components.entity.player.classes.Classes; -import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; @@ -19,12 +18,12 @@ import static me.unurled.raxen.utils.Utils.*; public class PlayerManager { - private Raxen main; - private HashMap actionBar = new HashMap<>(); - //TODO: player classes - private HashMap classes = new HashMap<>(); + private final Raxen main; + private final HashMap actionBar = new HashMap<>(); + // TODO: player classes + private final HashMap classes = new HashMap<>(); @Getter - private HashMap attribute = new HashMap<>(); + private final HashMap attribute = new HashMap<>(); private Classes classesRegister; diff --git a/src/main/java/me/unurled/raxen/utils/EntityUtils.java b/src/main/java/me/unurled/raxen/utils/EntityUtils.java new file mode 100644 index 0000000..4a83bea --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/EntityUtils.java @@ -0,0 +1,17 @@ +package me.unurled.raxen.utils; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +public class EntityUtils { + + public void setSkin(Entity e) { + if (e instanceof Player) { + + } +// Bukkit.getWorld("aa").spawn(new Location(Bukkit.getWorld("aa"), 0, 0, 0), new CraftPlayer()) + } +} diff --git a/src/main/java/me/unurled/raxen/utils/RayTrace.java b/src/main/java/me/unurled/raxen/utils/RayTrace.java new file mode 100644 index 0000000..d8f2da9 --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/RayTrace.java @@ -0,0 +1,108 @@ +package me.unurled.raxen.utils; + +import org.bukkit.Effect; +import org.bukkit.World; +import org.bukkit.util.BoundingBox; +import org.bukkit.util.Vector; + +import java.util.ArrayList; + +public class RayTrace { + + //origin = start position + //direction = direction in which the raytrace will go + Vector origin, direction; + + public RayTrace(Vector origin, Vector direction) { + this.origin = origin; + this.direction = direction; + } + + //get a point on the raytrace at X blocks away + public Vector getPostion(double blocksAway) { + return origin.clone().add(direction.clone().multiply(blocksAway)); + } + + //checks if a position is on contained within the position + public boolean isOnLine(Vector position) { + double t = (position.getX() - origin.getX()) / direction.getX(); + ; + if (position.getBlockY() == origin.getY() + (t * direction.getY()) && position.getBlockZ() == origin.getZ() + (t * direction.getZ())) { + return true; + } + return false; + } + + //get all postions on a raytrace + public ArrayList traverse(double blocksAway, double accuracy) { + ArrayList positions = new ArrayList<>(); + for (double d = 0; d <= blocksAway; d += accuracy) { + positions.add(getPostion(d)); + } + return positions; + } + + //intersection detection for current raytrace with return + public Vector positionOfIntersection(Vector min, Vector max, double blocksAway, double accuracy) { + ArrayList positions = traverse(blocksAway, accuracy); + for (Vector position : positions) { + if (intersects(position, min, max)) { + return position; + } + } + return null; + } + + //intersection detection for current raytrace + public boolean intersects(Vector min, Vector max, double blocksAway, double accuracy) { + ArrayList positions = traverse(blocksAway, accuracy); + for (Vector position : positions) { + if (intersects(position, min, max)) { + return true; + } + } + return false; + } + + //bounding box instead of vector + public Vector positionOfIntersection(BoundingBox boundingBox, double blocksAway, double accuracy) { + ArrayList positions = traverse(blocksAway, accuracy); + for (Vector position : positions) { + if (intersects(position, boundingBox.getMin(), boundingBox.getMax())) { + return position; + } + } + return null; + } + + //bounding box instead of vector + public boolean intersects(BoundingBox boundingBox, double blocksAway, double accuracy) { + ArrayList positions = traverse(blocksAway, accuracy); + for (Vector position : positions) { + if (intersects(position, boundingBox.getMin(), boundingBox.getMax())) { + return true; + } + } + return false; + } + + //general intersection detection + public static boolean intersects(Vector position, Vector min, Vector max) { + if (position.getX() < min.getX() || position.getX() > max.getX()) { + return false; + } else if (position.getY() < min.getY() || position.getY() > max.getY()) { + return false; + } else if (position.getZ() < min.getZ() || position.getZ() > max.getZ()) { + return false; + } + return true; + } + + //debug / effects + public void highlight(World world, double blocksAway, double accuracy){ + for(Vector position : traverse(blocksAway,accuracy)){ + world.playEffect(position.toLocation(world), Effect.BOW_FIRE,0); + } + } + +} \ No newline at end of file diff --git a/src/main/java/me/unurled/raxen/utils/Utils.java b/src/main/java/me/unurled/raxen/utils/Utils.java index cc95da3..17e08aa 100644 --- a/src/main/java/me/unurled/raxen/utils/Utils.java +++ b/src/main/java/me/unurled/raxen/utils/Utils.java @@ -98,18 +98,40 @@ public class Utils { * @return a String */ public static String textCompToString(TextComponent comp) { - MiniMessage minimessage = MiniMessage.builder() + /* MiniMessage minimessage = MiniMessage.builder() .tags(TagResolver.builder() .resolver(StandardTags.color()) .resolver(StandardTags.decorations()) .resolver(StandardTags.reset()) .build() ) - .build(); + .build(); */ return ChatColor.translateAlternateColorCodes('&', LegacyComponentSerializer.legacyAmpersand() .serialize(comp)); } + /** + * transform a text-component to a string + * @param comp a string + * @return a String + */ + public static String textCompToString(Component comp) { + /* MiniMessage minimessage = MiniMessage.builder() + .tags(TagResolver.builder() + .resolver(StandardTags.color()) + .resolver(StandardTags.decorations()) + .resolver(StandardTags.reset()) + .build() + ) + .build(); */ + return ChatColor.translateAlternateColorCodes('ยง', LegacyComponentSerializer.legacyAmpersand() + .serialize(comp)); + } + + public static void comp(Component comp) { + LegacyComponentSerializer.legacyAmpersand().serialize(comp); + } + /** * Strips all color from a string. * @param string the string that wants to be decolored.