diff --git a/docs/TODO.md b/docs/TODO.md index 9bc3e90..0205832 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -22,6 +22,7 @@ - [ ] guilds - [ ] quests (hard coded) and db/json - [ ] filter chat +- [ ] resource pack (host, upload, compress) ## tests diff --git a/docs/examples/Glyphs.md b/docs/examples/Glyphs.md new file mode 100644 index 0000000..8944b2c --- /dev/null +++ b/docs/examples/Glyphs.md @@ -0,0 +1,12 @@ +# Glyphs + +this is an example of a simple glyph + +```yaml +testGlyph: + Pack: + model: raxen/testGlyph + texture: raxen/testGlyph + char: "\uE000" + placeholder: ":test:" +``` \ No newline at end of file diff --git a/docs/examples/README.md b/docs/examples/README.md index 6d557ab..158181d 100644 --- a/docs/examples/README.md +++ b/docs/examples/README.md @@ -2,6 +2,9 @@ see all the exemples in this folder : +to create any of the following, create a new file in the folder type of your choice (e.g. ` +plugins/Raxen/items/exampleItem.yml`) + - [Effects.md](/Elixium/raxen/src/branch/plugin/docs/examples/Effects.md) - [Items.md](/Elixium/raxen/src/branch/plugin/docs/examples/Items.md) - [Mobs.md](/Elixium/raxen/src/branch/plugin/docs/examples/Mobs.md) \ No newline at end of file diff --git a/src/main/java/me/unurled/raxen/Raxen.java b/src/main/java/me/unurled/raxen/Raxen.java index 224b694..5a8264f 100644 --- a/src/main/java/me/unurled/raxen/Raxen.java +++ b/src/main/java/me/unurled/raxen/Raxen.java @@ -20,7 +20,7 @@ public final class Raxen extends JavaPlugin { "Rx> "; @Getter - private static String version = "0.5.8"; + private static String version = "0.6.0"; private boolean loading = true; private final PluginManager pm = getServer().getPluginManager(); diff --git a/src/main/java/me/unurled/raxen/commands/RaxenCommand.java b/src/main/java/me/unurled/raxen/commands/RaxenCommand.java index c62937a..ff6494c 100644 --- a/src/main/java/me/unurled/raxen/commands/RaxenCommand.java +++ b/src/main/java/me/unurled/raxen/commands/RaxenCommand.java @@ -1,6 +1,12 @@ package me.unurled.raxen.commands; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorComp; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.coloredString; +import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.msgPlayer; +import static me.unurled.raxen.utils.Utils.msgSender; +import static me.unurled.raxen.utils.Utils.stringToComp; import java.util.List; import me.unurled.raxen.Raxen; @@ -35,9 +41,9 @@ public class RaxenCommand implements TabExecutor { msgPlayer( player, coloredString(Raxen.getPrefix()) + - colorTextComp( - "You can't execute this command. Insufficient permission." - ) + colorTextComp( + "You can't execute this command. Insufficient permission." + ) ); } switch (args.length) { @@ -49,17 +55,17 @@ public class RaxenCommand implements TabExecutor { sender.sendMessage( stringToComp( Raxen.getPrefix() + - colorTextComp( - "Printing About Raxen's MongoDB connection..." - ) + colorTextComp( + "Printing About Raxen's MongoDB connection..." + ) ) ); msgPlayer( player, coloredString(Raxen.getPrefix()) + - colorTextComp( - "---------------------------------------------" - ) + colorTextComp( + "---------------------------------------------" + ) ); msgPlayer( player, @@ -131,9 +137,9 @@ public class RaxenCommand implements TabExecutor { msgSender( sender, Raxen.getPrefix() + - "Printing About Raxen's MongoDB connection...", + "Printing About Raxen's MongoDB connection...", "---------------------------------------------" + - "MONGO DB" + "MONGO DB" ); sender.sendMessage( stringToComp( @@ -174,7 +180,7 @@ public class RaxenCommand implements TabExecutor { msgSender( sender, Raxen.getPrefix() + - "Printing About Raxen...", + "Printing About Raxen...", "---------------------------------------------", " Raxen ", " - Version: " + Raxen.getVersion(), diff --git a/src/main/java/me/unurled/raxen/commands/admin/BuildCommand.java b/src/main/java/me/unurled/raxen/commands/admin/BuildCommand.java new file mode 100644 index 0000000..8c8779e --- /dev/null +++ b/src/main/java/me/unurled/raxen/commands/admin/BuildCommand.java @@ -0,0 +1,108 @@ +package me.unurled.raxen.commands.admin; + +import java.util.ArrayList; +import java.util.List; +import me.unurled.raxen.Raxen; +import me.unurled.raxen.utils.Utils; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class BuildCommand implements TabExecutor { + + private Raxen raxen; + + List complete = new ArrayList<>(); + + public BuildCommand(Raxen raxen) { + this.raxen = raxen; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) { + Utils.errorConsoleSender(sender); + return true; + } + Player p = (Player) sender; + if (args.length == 0) { + p.sendMessage(Utils.colorComp( + "/build [discard|edit|hide|list|on|remove|save|show|tp]")); + return true; + } + if (args.length == 1) { + switch (args[0]) { + case "discard": + p.sendMessage(Utils.colorComp("Discarded build!")); + return true; + case "edit": + p.sendMessage(Utils.colorComp("Editing build!")); + return true; + case "hide": + p.sendMessage(Utils.colorComp("Hiding build!")); + return true; + case "list": + p.sendMessage(Utils.colorComp("Listing builds!")); + return true; + case "on": + p.sendMessage(Utils.colorComp("Build mode enabled!")); + return true; + case "remove": + p.sendMessage(Utils.colorComp("Removed build!")); + return true; + case "save": + p.sendMessage(Utils.colorComp("Saved build!")); + return true; + case "show": + p.sendMessage(Utils.colorComp("Showing build!")); + return true; + case "tp": + p.sendMessage(Utils.colorComp("Teleporting to build!")); + return true; + default: + p.sendMessage(Utils.colorComp( + "/build [discard|edit|hide|list|on|remove|save|show|tp]")); + return true; + } + } + return false; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, + @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (complete.isEmpty()) { + complete.add("discard"); + complete.add("edit"); + complete.add("hide"); + complete.add("list"); + complete.add("on"); + complete.add("remove"); + complete.add("save"); + complete.add("show"); + complete.add("tp"); + } + List result = new ArrayList<>(); + if (args.length == 1) { + for (String s : complete) { + if (s.toLowerCase().startsWith(args[0].toLowerCase())) { + result.add(s); + } + } + return result; + } else if (args.length == 2) { + for (Player p : Bukkit.getOnlinePlayers()) { + if (p.getName().toLowerCase().startsWith(args[1].toLowerCase())) { + result.add(p.getName()); + } + } + return result; + } + return null; + } +} diff --git a/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java b/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java index fe8cff5..4208aae 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java @@ -1,7 +1,10 @@ package me.unurled.raxen.commands.admin; import static me.unurled.raxen.utils.Items.customModelData; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorComp; +import static me.unurled.raxen.utils.Utils.errorConsoleSender; +import static me.unurled.raxen.utils.Utils.isInt; +import static me.unurled.raxen.utils.Utils.noPerms; import java.util.ArrayList; import java.util.Arrays; @@ -21,6 +24,7 @@ public class CustomModelDataCommand implements TabExecutor { /** * change custom model data of an item + * * @param sender Source of the command * @param command Command which was executed * @param label Alias of the command which was used @@ -92,13 +96,12 @@ public class CustomModelDataCommand implements TabExecutor { } /** - * @param sender Source of the command. For players tab-completing a - * command inside of a command block, this will be the player, not - * the command block. + * @param sender Source of the command. For players tab-completing a command inside of a + * command block, this will be the player, not the command block. * @param command Command which was executed * @param label Alias of the command which was used - * @param args The arguments passed to the command, including final - * partial argument to be completed + * @param args The arguments passed to the command, including final partial argument to be + * completed * @return */ @Override diff --git a/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java b/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java index 6e0029a..851dee9 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java +++ b/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java @@ -1,7 +1,8 @@ package me.unurled.raxen.commands.admin; import static me.unurled.raxen.utils.Items.itemTo64; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.errorConsoleSender; +import static me.unurled.raxen.utils.Utils.msgPlayer; import java.util.List; import org.bukkit.command.Command; @@ -37,13 +38,12 @@ public class ItemTo64Command implements TabExecutor { } /** - * @param sender Source of the command. For players tab-completing a - * command inside of a command block, this will be the player, not - * the command block. + * @param sender Source of the command. For players tab-completing a command inside of a + * command block, this will be the player, not the command block. * @param command Command which was executed * @param label Alias of the command which was used - * @param args The arguments passed to the command, including final - * partial argument to be completed + * @param args The arguments passed to the command, including final partial argument to be + * completed * @return */ @Override 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 fd28f2a..53b3b8b 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java @@ -1,7 +1,11 @@ package me.unurled.raxen.commands.admin; import static me.unurled.raxen.components.entity.player.PlayerUtils.updateSkills; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorString; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.error; +import static me.unurled.raxen.utils.Utils.msgPlayer; import de.tr7zw.nbtapi.NBTItem; import java.util.ArrayList; @@ -124,11 +128,11 @@ public class NbtCommand implements TabExecutor { player, colorTextComp( Raxen.getPrefix() + - "You successfully added the nbt " + - /*attributes(args[0])*/args[0] + - "with " + - args[1] + - "." + "You successfully added the nbt " + + /*attributes(args[0])*/args[0] + + "with " + + args[1] + + "." ) ); updateSkills(main, player); diff --git a/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java b/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java index b46f6ea..0141ee0 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java +++ b/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java @@ -1,13 +1,17 @@ package me.unurled.raxen.commands.admin; -import static me.unurled.raxen.components.entity.other.EntityUtils.setNameSpacedKeys; import static me.unurled.raxen.utils.Items.itemFrom64; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.error; +import static me.unurled.raxen.utils.Utils.getStringFromArg; +import static me.unurled.raxen.utils.Utils.log; +import static me.unurled.raxen.utils.Utils.noPerms; +import static me.unurled.raxen.utils.Utils.setNullInArgs; +import static me.unurled.raxen.utils.Utils.validateArgs; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import me.unurled.raxen.Raxen; import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import org.bukkit.Bukkit; @@ -54,8 +58,9 @@ public class SpawnEntity implements TabExecutor { ); log( colorTextComp( - "Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + - "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)" + "Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + + + "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)" ) ); return false; @@ -69,7 +74,7 @@ public class SpawnEntity implements TabExecutor { Double.parseDouble(args[4]) ); Entity e = loc.getWorld().spawnEntity(loc, types, false); - setNameSpacedKeys( + /* setNameSpacedKeys( e, getStringFromArg(args), Integer.parseInt(args[6]), @@ -81,7 +86,7 @@ public class SpawnEntity implements TabExecutor { 0, Integer.parseInt(args[10]), 0 - ); + ); */ e.customName(colorTextComp(getStringFromArg(args))); e.setCustomNameVisible(true); if (e instanceof LivingEntity livingEntity) { @@ -107,9 +112,10 @@ public class SpawnEntity implements TabExecutor { throw new RuntimeException(e); } catch (IOException e) { error( - "Could not deserialize item from the command EntitySpawn (command launched by " + - sender.getName() + - ")" + "Could not deserialize item from the command EntitySpawn (command launched by " + + + sender.getName() + + ")" ); throw new RuntimeException(e); } @@ -133,8 +139,9 @@ public class SpawnEntity implements TabExecutor { ); log( colorTextComp( - "Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + - "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)" + "Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + + + "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)" ) ); return false; @@ -148,7 +155,7 @@ public class SpawnEntity implements TabExecutor { Double.parseDouble(args[4]) ); Entity e = loc.getWorld().spawnEntity(loc, types, false); - setNameSpacedKeys( + /* setNameSpacedKeys( e, getStringFromArg(args), Integer.parseInt(args[6]), @@ -160,7 +167,7 @@ public class SpawnEntity implements TabExecutor { 0, Integer.parseInt(args[10]), 0 - ); + ); */ e.customName(colorTextComp(getStringFromArg(args))); e.setCustomNameVisible(true); if (e instanceof LivingEntity livingEntity) { @@ -187,8 +194,8 @@ public class SpawnEntity implements TabExecutor { } catch (IOException e) { error( "Could not deserialize item from the command EntitySpawn (command launched by " + - sender.getName() + - ")" + sender.getName() + + ")" ); throw new RuntimeException(e); } diff --git a/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java b/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java index 0f88baa..3869efb 100644 --- a/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java +++ b/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java @@ -1,6 +1,8 @@ package me.unurled.raxen.commands.player; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorString; +import static me.unurled.raxen.utils.Utils.error; +import static me.unurled.raxen.utils.Utils.msgPlayer; import java.util.List; import me.unurled.raxen.Raxen; diff --git a/src/main/java/me/unurled/raxen/components/clientbuild/Builds.java b/src/main/java/me/unurled/raxen/components/clientbuild/Builds.java new file mode 100644 index 0000000..5a5f993 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/clientbuild/Builds.java @@ -0,0 +1,55 @@ +package me.unurled.raxen.components.clientbuild; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.UUID; +import org.bukkit.Location; +import org.bukkit.block.Block; + +public class Builds { + + private Instant start; + private Instant end; + private Location startLocation; + private UUID owner; + + private ArrayList blocks = new ArrayList<>(); + + public Builds(Location startLocation, UUID owner) { + start = Instant.now(); + this.startLocation = startLocation; + this.owner = owner; + } + + public Instant getEnd() { + return end; + } + + public void setEnd(Instant end) { + this.end = end; + } + + public Location getStartLocation() { + return startLocation; + } + + public UUID getOwner() { + return owner; + } + + public ArrayList getBlocks() { + return blocks; + } + + public void setBlocks(ArrayList blocks) { + this.blocks = blocks; + } + + public void addBlock(Block block) { + blocks.add(block); + } + + public void removeBlock(Block block) { + blocks.remove(block); + } +} diff --git a/src/main/java/me/unurled/raxen/components/clientbuild/PlayerList.java b/src/main/java/me/unurled/raxen/components/clientbuild/PlayerList.java new file mode 100644 index 0000000..a7edfcd --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/clientbuild/PlayerList.java @@ -0,0 +1,22 @@ +package me.unurled.raxen.components.clientbuild; + +import java.util.ArrayList; +import org.bukkit.entity.Player; + +public class PlayerList { + + private final ArrayList players = new ArrayList<>(); + + public void addPlayer(Player player) { + players.add(player); + } + + public void removePlayer(Player player) { + players.remove(player); + } + + public ArrayList getPlayers() { + return players; + } + +} diff --git a/src/main/java/me/unurled/raxen/components/entity/other/EntityUtils.java b/src/main/java/me/unurled/raxen/components/entity/other/EntityUtils.java index 0d0346b..c13acce 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/EntityUtils.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/EntityUtils.java @@ -12,15 +12,15 @@ import org.jetbrains.annotations.NotNull; public class EntityUtils { - private static Raxen main; - private static EntityNamespacedKey namespacedKey; + private Raxen main; + private EntityNamespacedKey namespacedKey; public EntityUtils(Raxen main) { this.main = main; namespacedKey = new EntityNamespacedKey(main); } - public static void setNameSpacedKeys( + public void setNameSpacedKeys( org.bukkit.entity.@NotNull Entity e, String name, Integer level, @@ -62,7 +62,7 @@ public class EntityUtils { data.set(namespacedKey.level, PersistentDataType.INTEGER, level); } - public static void updateSkills(@NotNull LivingEntity livingEntity) { + public void updateSkills(@NotNull LivingEntity livingEntity) { PlayerManager pm = ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() .getPlayerManager(); @@ -85,7 +85,7 @@ public class EntityUtils { livingEntity.getAttribute( org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED ) != - null + null ) { livingEntity .getAttribute( @@ -99,7 +99,7 @@ public class EntityUtils { livingEntity.getAttribute( org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED ) != - null + null ) { livingEntity .getAttribute( diff --git a/src/main/java/me/unurled/raxen/components/entity/other/MobData.java b/src/main/java/me/unurled/raxen/components/entity/other/MobData.java index 144517f..727d3aa 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/MobData.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/MobData.java @@ -176,14 +176,14 @@ public class MobData { dead = true; EntityManager manager = main.getManager().getEntityManager(); if (entity == null) { - manager.spawnedMob.remove(entity.getUniqueId()); - manager.spawnedMobsOnlyMain.remove(entity.getUniqueId()); + manager.getSpawnedMob().remove(entity.getUniqueId()); + manager.getSpawnedMobsOnlyMain().remove(entity.getUniqueId()); entity.remove(); } entity = null; if (mount != null) { - manager.spawnedMob.remove(mount.getUniqueId()); - manager.spawnedMobsOnlyMain.remove(mount.getUniqueId()); + manager.getSpawnedMob().remove(mount.getUniqueId()); + manager.getSpawnedMobsOnlyMain().remove(mount.getUniqueId()); mount.remove(); } mount = null; diff --git a/src/main/java/me/unurled/raxen/components/entity/other/RaxenEntity.java b/src/main/java/me/unurled/raxen/components/entity/other/RaxenEntity.java index 044dad7..9c5cf8b 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/RaxenEntity.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/RaxenEntity.java @@ -1,5 +1,7 @@ package me.unurled.raxen.components.entity.other; +import static me.unurled.raxen.utils.Utils.colorString; + import java.util.ArrayList; import java.util.HashMap; import java.util.Map.Entry; @@ -52,6 +54,10 @@ public abstract class RaxenEntity { public HashMap lastAttackedByTimes; public java.util.HashMap damageDealt; + @Getter + @Setter + Boolean isHostile; + public RaxenEntity( Raxen main, String name, @@ -66,6 +72,7 @@ public abstract class RaxenEntity { this.level = level; this.health = health; this.strength = strength; + isHostile = true; } /*public Entity createEntity( @@ -242,4 +249,28 @@ public abstract class RaxenEntity { } return true; } + + public String getFullName() { + if (isHostile) { + return colorString( + getLevel() + + "⚔️" + + getName() + + "" + + health + + "/" + + getMaxHealth(entity) + ); + } else { + return colorString( + getLevel() + + "❤️" + + getName() + + "" + + health + + "/" + + getMaxHealth(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 9bc889a..41415bc 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 @@ -66,7 +66,7 @@ public abstract class Entity implements org.bukkit.entity.Entity { } public void register(Raxen main) { - main.getManager().getEntityManager().entities.put(name, this); +// main.getManager().getEntityManager().entities.put(name, this); } public String getName() { diff --git a/src/main/java/me/unurled/raxen/components/entity/player/PlayerUtils.java b/src/main/java/me/unurled/raxen/components/entity/player/PlayerUtils.java index c0f0636..7796fad 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/PlayerUtils.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/PlayerUtils.java @@ -1,10 +1,11 @@ package me.unurled.raxen.components.entity.player; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorComp; +import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.log; import me.unurled.raxen.Raxen; import me.unurled.raxen.manager.entity.PlayerManager; -import org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -81,14 +82,14 @@ public class PlayerUtils { player.sendActionBar( colorComp( "" + - pm.getHealth().get(player) + - "/" + - pm.getMaxHealth().get(player) + - "❤ " + - pm.getMana().get(player) + - "/" + - pm.getMaxMana().get(player) + - "" + pm.getHealth().get(player) + + "/" + + pm.getMaxHealth().get(player) + + "❤ " + + pm.getMana().get(player) + + "/" + + pm.getMaxMana().get(player) + + "" ) ); } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/Scoreboard.java b/src/main/java/me/unurled/raxen/components/entity/player/Scoreboard.java index d73f8d8..7bb4dd3 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/Scoreboard.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/Scoreboard.java @@ -1,12 +1,18 @@ package me.unurled.raxen.components.entity.player; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.textCompToString; import me.unurled.raxen.Raxen; import me.unurled.raxen.utils.libs.Vault; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.scoreboard.*; +import org.bukkit.scoreboard.Criteria; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Score; +import org.bukkit.scoreboard.ScoreboardManager; public class Scoreboard { @@ -62,7 +68,8 @@ public class Scoreboard { player.getScoreboard().getObjective(DisplaySlot.SIDEBAR); debug(main, String.valueOf(player.getScoreboard().getEntries())); for (String str : player.getScoreboard().getEntries()) { - if (str.contains(player.getName())) {} + if (str.contains(player.getName())) { + } } player.getScoreboard().resetScores("Coins"); assert objective != null; diff --git a/src/main/java/me/unurled/raxen/components/glyph/Glyph.java b/src/main/java/me/unurled/raxen/components/glyph/Glyph.java new file mode 100644 index 0000000..6a89d5d --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/glyph/Glyph.java @@ -0,0 +1,5 @@ +package me.unurled.raxen.components.glyph; + +public class Glyph { + +} diff --git a/src/main/java/me/unurled/raxen/components/glyph/GlyphBuilder.java b/src/main/java/me/unurled/raxen/components/glyph/GlyphBuilder.java new file mode 100644 index 0000000..feafba0 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/glyph/GlyphBuilder.java @@ -0,0 +1,25 @@ +package me.unurled.raxen.components.glyph; + +public class GlyphBuilder { + + String chars; + String model; + String texture; + String placeholder; + + public GlyphBuilder(String chars) { + this.chars = chars; + } + + public void model(String s) { + model = s; + } + + public void texture(String s) { + texture = s; + } + + public void placeholder(String s) { + placeholder = s; + } +} diff --git a/src/main/java/me/unurled/raxen/components/glyph/GlyphParser.java b/src/main/java/me/unurled/raxen/components/glyph/GlyphParser.java new file mode 100644 index 0000000..37596fb --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/glyph/GlyphParser.java @@ -0,0 +1,44 @@ +package me.unurled.raxen.components.glyph; + +import org.bukkit.configuration.ConfigurationSection; + +public class GlyphParser { + + private final ConfigurationSection section; + + public GlyphParser(ConfigurationSection section) { + this.section = section; + if (section.isConfigurationSection("Pack")) { + ConfigurationSection packSection = section.getConfigurationSection("Pack"); + applyConfig(buildGlyph()); + } + } + + public GlyphBuilder buildGlyph() { + return buildGlyph(section.contains("char") ? section.getString("char") : null); + } + + public GlyphBuilder buildGlyph(String car) { + GlyphBuilder glyph = null; + if (car != null) { + glyph = new GlyphBuilder(car); + } + return glyph; + } + + private GlyphBuilder applyConfig(GlyphBuilder glyph) { + if (section.contains("Pack")) { + ConfigurationSection s = section.getConfigurationSection("Pack"); + if (s.contains("model")) { + glyph.model(s.getString("model")); + } + if (s.contains("texture")) { + glyph.texture(s.getString("texture")); + } + if (s.contains("placeholder")) { + glyph.placeholder(s.getString("placeholder")); + } + } + return glyph; + } +} diff --git a/src/main/java/me/unurled/raxen/components/items/ItemBuilder.java b/src/main/java/me/unurled/raxen/components/items/ItemBuilder.java index 9832fd9..121581f 100644 --- a/src/main/java/me/unurled/raxen/components/items/ItemBuilder.java +++ b/src/main/java/me/unurled/raxen/components/items/ItemBuilder.java @@ -33,6 +33,7 @@ public class ItemBuilder { private Component displayName; private int amount; private int customModelData; + private String customModelDataPath; private boolean hasCustomModelData; private Color color; private @NotNull PotionData potionData; @@ -113,4 +114,9 @@ public class ItemBuilder { public void color(Color color) { this.color = color; } + + public void modelData(String path, int data) { + this.customModelData = data; + this.customModelDataPath = path; + } } diff --git a/src/main/java/me/unurled/raxen/components/items/ItemParser.java b/src/main/java/me/unurled/raxen/components/items/ItemParser.java index a228170..e29aaed 100644 --- a/src/main/java/me/unurled/raxen/components/items/ItemParser.java +++ b/src/main/java/me/unurled/raxen/components/items/ItemParser.java @@ -16,6 +16,8 @@ public class ItemParser { if (section.isConfigurationSection("Pack")) { ConfigurationSection packSection = section.getConfigurationSection("Pack"); // TODO: Parse pack section +// item.modelData(section.getString("Pack.model", null), section.getInt("Pack.custom_model_data", 0)); + } } @@ -41,6 +43,10 @@ public class ItemParser { if (section.contains("color")) { item.color(Utils.color(section.getString("color", "FFFFFF"))); } + + if (section.contains("Pack")) { + item.modelData(section.getString("Pack.model", null), section.getInt("Pack.custom_model_data", 0)); + } return item; } } diff --git a/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java b/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java index f323daa..fd1c40e 100644 --- a/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java +++ b/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java @@ -2,6 +2,7 @@ package me.unurled.raxen.components.resourcepack; import me.unurled.raxen.Raxen; import me.unurled.raxen.manager.server.ResourcePackManager; +import me.unurled.raxen.utils.Utils; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -24,12 +25,24 @@ public class ResourcePack { public void run() { if (resourcePackManager.isUseRP()) { player.setResourcePack( - config.getString("ressource_pack_url"), - config.getString("resource_pack_sha1") + resourcePackManager.getUrl(), + resourcePackManager.getSha1(), + true ); } } - } - .runTaskLater(main, 2L); + }.runTaskLater(main, 10L); + new BukkitRunnable() { + @Override + public void run() { + if (resourcePackManager.isUseRP()) { + if (!player.hasResourcePack()) { + player.kick(Utils.colorComp( + "Raxen| Please enable your resource pack!")); + } + } + } + }.runTaskLater(main, 600L); + } } diff --git a/src/main/java/me/unurled/raxen/components/resourcepack/hosting/Hosting.java b/src/main/java/me/unurled/raxen/components/resourcepack/hosting/Hosting.java new file mode 100644 index 0000000..c4693f6 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/resourcepack/hosting/Hosting.java @@ -0,0 +1,19 @@ +package me.unurled.raxen.components.resourcepack.hosting; + +import java.io.File; +import java.util.UUID; + +public interface Hosting { + + boolean upload(File resoucepack); + + UUID getUUID(); + + String getPackURL(); + + String getMinecraftPackURL(); + + byte[] getSHA1(); + + String getOriginalSHA1(); +} diff --git a/src/main/java/me/unurled/raxen/components/resourcepack/hosting/PackHoster.java b/src/main/java/me/unurled/raxen/components/resourcepack/hosting/PackHoster.java new file mode 100644 index 0000000..c156e7a --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/resourcepack/hosting/PackHoster.java @@ -0,0 +1,112 @@ +package me.unurled.raxen.components.resourcepack.hosting; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.UUID; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; + +public class PackHoster implements Hosting { + + private final String serverAddress; + private String packURL; + private String minecraftPackURL; + private String sha1; + private UUID uuid; + + public PackHoster(String serverAddress) { + this.serverAddress = "https://" + serverAddress + "/"; + } + + @Override + public boolean upload(File resoucepack) { + try { + HttpClient httpClient = HttpClientBuilder.create().build(); + + HttpPost httpPost = new HttpPost(serverAddress + "upload/" + uuid.toString()); + + HttpEntity entity = MultipartEntityBuilder.create() + .addBinaryBody("file", resoucepack, ContentType.DEFAULT_BINARY, + resoucepack.getName()) + .build(); + httpPost.setEntity(entity); + + // Execute the request + HttpResponse response = null; + response = httpClient.execute(httpPost); + String responseString = EntityUtils.toString(response.getEntity()); + JsonObject json; + try { + json = JsonParser.parseString(responseString).getAsJsonObject(); + } catch (JsonSyntaxException e) { + return false; + } + + if (json.has("url") && json.has("sha1")) { + packURL = json.get("url").getAsString(); + minecraftPackURL = packURL.replace("https://", "http://"); + sha1 = json.get("sha1").getAsString(); + return true; + } + + // Get the response code + int responseCode = response.getStatusLine().getStatusCode(); + System.out.println("Response Code: " + responseCode); + + // Read the response body + String responseBody = null; + + responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + System.out.println("Response Body: " + responseBody); + } catch (IOException e) { + return false; + } + + return true; + } + + @Override + public UUID getUUID() { + return uuid; + } + + public void setUUID(UUID uuid) { + this.uuid = uuid; + } + + @Override + public String getPackURL() { + return packURL; + } + + @Override + public String getMinecraftPackURL() { + return minecraftPackURL; + } + + @Override + public byte[] getSHA1() { + int len = sha1.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(sha1.charAt(i), 16) << 4) + + Character.digit(sha1.charAt(i + 1), 16)); + } + return data; + } + + @Override + public String getOriginalSHA1() { + return sha1; + } +} diff --git a/src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java b/src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java index 9d59bc0..0d4aa75 100644 --- a/src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java +++ b/src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java @@ -5,8 +5,6 @@ import static me.unurled.raxen.utils.Utils.log; import static me.unurled.raxen.utils.Utils.msgPlayer; import lombok.Getter; -import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI; -import me.filoghost.holographicdisplays.api.hologram.Hologram; import me.unurled.raxen.Raxen; import me.unurled.raxen.components.entity.player.RaxenPlayer; import org.bukkit.Bukkit; @@ -59,10 +57,7 @@ public class Tutorial { player.teleport( new Location(world, 15.82, 74.00, 117.21, 899.21F, 0.90f)); msgPlayer(player, colorTextComp("Welcome to the tutorial!")); - HolographicDisplaysAPI api = main.getManager().getLibsManager().getHolographicDisplay() - .getApi(); - Hologram holo = api.createHologram(new Location(world, 15.5, 76.00, 112.5, 179.21f, 0.90f)); - holo.getLines().appendText("Welcome to the tutorial!"); + // Hologram holo = api.createHologram(new Location(world, 15.5, 76.00, 112.5, 179.21f, 0.90f)); } public void stopTutorial() { diff --git a/src/main/java/me/unurled/raxen/config/Config.java b/src/main/java/me/unurled/raxen/config/Config.java index 30c1785..dddfad8 100644 --- a/src/main/java/me/unurled/raxen/config/Config.java +++ b/src/main/java/me/unurled/raxen/config/Config.java @@ -3,12 +3,7 @@ package me.unurled.raxen.config; import static me.unurled.raxen.utils.Utils.debug; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; -import java.net.URL; -import java.nio.channels.Channels; -import java.nio.channels.FileChannel; -import java.nio.channels.ReadableByteChannel; import lombok.Getter; import me.unurled.raxen.Raxen; import org.bukkit.configuration.InvalidConfigurationException; @@ -50,22 +45,5 @@ public class Config { if (!Raxen.getVersion().equals(config.getString("version"))) { main.saveResource("config.yml", true); } - if (new File(main.getDataFolder().toString() + "/schematics/").mkdir()) { - String url = "https://pb.unurled.me/file/otter-panda-cobra/template_tuto.schem"; - ReadableByteChannel readableByteChannel = null; - try { - readableByteChannel = Channels.newChannel(new URL(url).openStream()); - FileOutputStream fileOutputStream = new FileOutputStream( - main.getDataFolder() + "schematics/template_tuto.schem"); - FileChannel fileChannel = fileOutputStream.getChannel(); - fileOutputStream.getChannel() - .transferFrom(readableByteChannel, 0, Long.MAX_VALUE); - } catch (IOException e) { -// throw new RuntimeException(e); - } - -// main.saveResource("schematics/template_tuto.schem", false); - } - ; } } diff --git a/src/main/java/me/unurled/raxen/config/GlyphConfig.java b/src/main/java/me/unurled/raxen/config/GlyphConfig.java new file mode 100644 index 0000000..b12ea26 --- /dev/null +++ b/src/main/java/me/unurled/raxen/config/GlyphConfig.java @@ -0,0 +1,74 @@ +package me.unurled.raxen.config; + +import java.io.File; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.glyph.GlyphBuilder; +import me.unurled.raxen.components.glyph.GlyphParser; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; + +public class GlyphConfig { + + private Raxen main; + private File glyphFolder; + + public GlyphConfig(Raxen main) { + this.main = main; + validatesConfig(); + } + + public void validatesConfig() { + glyphFolder = new File(main.getDataFolder(), "items"); + if (!glyphFolder.exists()) { + glyphFolder.mkdirs(); + } + } + + public Map> parseGlyphConfigs() { + Map> parseMap = new LinkedHashMap<>(); + List config = Arrays.stream(getGlyphFiles()) + .filter(file -> file.getName().endsWith(".yml")) + .toList(); + for (File file : config) { + parseMap.put(file, parseGlyphConfig(YamlConfiguration.loadConfiguration(file), file)); + } + return parseMap; + } + + public Map parseGlyphConfig(YamlConfiguration config, File file) { + Map parseMap = new LinkedHashMap<>(); + for (String glyphSelection : config.getKeys(false)) { + if (!config.isConfigurationSection(glyphSelection)) { + continue; + } + ConfigurationSection glyphSection = config.getConfigurationSection(glyphSelection); + parseMap.put(glyphSelection, new GlyphParser(glyphSection)); + } + boolean configUpdated = false; + Map map = new LinkedHashMap<>(); + for (Map.Entry entry : parseMap.entrySet()) { + GlyphParser parser = entry.getValue(); + try { + map.put(entry.getKey(), parser.buildGlyph()); + } catch (Exception e) { + e.printStackTrace(); + } + } + return map; + } + + private File[] getGlyphFiles() { + if (!glyphFolder.exists()) { + glyphFolder.mkdirs(); + return new File[0]; + } + File[] itemConfigs = Arrays.stream(glyphFolder.listFiles()).filter(File::isFile) + .toArray(File[]::new); + Arrays.sort(itemConfigs); + return itemConfigs; + } +} diff --git a/src/main/java/me/unurled/raxen/config/ItemConfig.java b/src/main/java/me/unurled/raxen/config/ItemConfig.java index ec6fea5..a86795c 100644 --- a/src/main/java/me/unurled/raxen/config/ItemConfig.java +++ b/src/main/java/me/unurled/raxen/config/ItemConfig.java @@ -6,7 +6,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import me.unurled.raxen.Raxen; -import me.unurled.raxen.components.effect.EffectBuilder; import me.unurled.raxen.components.items.ItemBuilder; import me.unurled.raxen.components.items.ItemParser; import org.bukkit.configuration.ConfigurationSection; @@ -19,14 +18,14 @@ public class ItemConfig { public ItemConfig(Raxen main) { this.main = main; + validatesConfig(); } - public boolean validatesConfig() { + public void validatesConfig() { itemsFolder = new File(main.getDataFolder(), "items"); if (!itemsFolder.exists()) { itemsFolder.mkdirs(); } - return true; } public Map> parseItemConfigs() { @@ -61,11 +60,15 @@ public class ItemConfig { return map; } - public Map> parseEffectConfig() { + /*public Map> parseEffectConfig() { // TODO: efffects - } + }*/ private File[] getItemsFiles() { + if (!itemsFolder.exists()) { + itemsFolder.mkdirs(); + return new File[0]; + } File[] itemConfigs = Arrays.stream(itemsFolder.listFiles()).filter(File::isFile) .toArray(File[]::new); Arrays.sort(itemConfigs); diff --git a/src/main/java/me/unurled/raxen/listener/entity/DamageEntity.java b/src/main/java/me/unurled/raxen/listener/entity/DamageEntity.java index 9e5a41a..4bbc077 100644 --- a/src/main/java/me/unurled/raxen/listener/entity/DamageEntity.java +++ b/src/main/java/me/unurled/raxen/listener/entity/DamageEntity.java @@ -62,7 +62,7 @@ public class DamageEntity implements Listener { } else { // attack between player and mob RaxenPlayer rx = pm.getRaxenPlayer((Player) attacker); - MobData re = main.getManager().getEntityManager().spawnedMob.get( + MobData re = main.getManager().getEntityManager().getSpawnedMob().get( defender.getUniqueId()); if (rx != null) { rx.attackMob(re); @@ -94,7 +94,7 @@ public class DamageEntity implements Listener { rx.attackPlayer(rx2, rpgDamage, projectile); } } else { - MobData mb = main.getManager().getEntityManager().spawnedMob.get( + MobData mb = main.getManager().getEntityManager().getSpawnedMob().get( defender.getUniqueId()); if (rx != null && mb != null) { if (rpgKnockback >= 0) { @@ -107,7 +107,7 @@ public class DamageEntity implements Listener { } } else { if (defender instanceof Player) { - MobData a = main.getManager().getEntityManager().spawnedMob.get( + MobData a = main.getManager().getEntityManager().getSpawnedMob().get( attacker.getUniqueId()); RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer( (Player) defender); @@ -122,7 +122,7 @@ public class DamageEntity implements Listener { attacker.remove(); } else { if (defender instanceof Player) { - MobData a = main.getManager().getEntityManager().spawnedMob.get( + MobData a = main.getManager().getEntityManager().getSpawnedMob().get( attacker.getUniqueId()); RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer( (Player) defender); diff --git a/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java b/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java index 5c9328f..59582a3 100644 --- a/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java +++ b/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java @@ -5,6 +5,7 @@ import static me.unurled.raxen.utils.Utils.debug; import me.unurled.raxen.Raxen; import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.other.EntityUtils; +import org.bukkit.entity.Display; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -26,19 +27,24 @@ public class SpawnEvent implements Listener { } /** - * when a new entity spawns - * adds all persistent data container + * when a new entity spawns adds all persistent data container + * * @param e */ @EventHandler public void Spawn(EntitySpawnEvent e) { + e.getEntity().getWorld().spawn(e.getLocation(), Display.class); if (e.getEntity() instanceof Player) { //player stuff dont want to talk about it; already doing it in player join event debug(main, "Player: " + ((Player) e.getEntity()).getName()); } else if ( e.getEntity().getType() != EntityType.DROPPED_ITEM && - e.getEntity().getType() != EntityType.FALLING_BLOCK && - e.getEntity().getType() != EntityType.ARROW + e.getEntity().getType() != EntityType.FALLING_BLOCK && + e.getEntity().getType() != EntityType.ARROW && + e.getEntity().getType() != EntityType.ITEM_DISPLAY && + e.getEntity().getType() != EntityType.BLOCK_DISPLAY && + e.getEntity().getType() != EntityType.TEXT_DISPLAY && + !(e.getEntity() instanceof Display) ) { debug(main, e.getEntity().getName()); if ( @@ -61,7 +67,10 @@ public class SpawnEvent implements Listener { 0 ); } + main.getManager().getEntityManager().registerEntity(e.getEntity()); entityUtils.updateSkills((LivingEntity) e.getEntity()); + + // add nametag } } } diff --git a/src/main/java/me/unurled/raxen/listener/player/InteractEvent.java b/src/main/java/me/unurled/raxen/listener/player/InteractEvent.java index da6655b..e44ffbf 100644 --- a/src/main/java/me/unurled/raxen/listener/player/InteractEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/InteractEvent.java @@ -1,8 +1,5 @@ package me.unurled.raxen.listener.player; -import static me.unurled.raxen.utils.Utils.debug; -import static me.unurled.raxen.utils.Utils.log; - import de.tr7zw.nbtapi.NBT; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -21,7 +18,8 @@ public class InteractEvent implements Listener { if (i != null && i.getType() != Material.AIR) { String id = NBT.get(i, nbt -> nbt.getString("ID")); if (id != null && !id.isEmpty()) { - if (id.equals("PHONE")) {} + if (id.equals("PHONE")) { + } } } } 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 254971a..e2182c5 100644 --- a/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java @@ -2,7 +2,6 @@ package me.unurled.raxen.listener.player; import java.io.IOException; 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; @@ -22,6 +21,7 @@ public class LeaveEvent implements Listener { /** * when player leaves, saves everything + * * @param e * @throws IOException */ diff --git a/src/main/java/me/unurled/raxen/manager/Manager.java b/src/main/java/me/unurled/raxen/manager/Manager.java index efad6a0..74e2942 100644 --- a/src/main/java/me/unurled/raxen/manager/Manager.java +++ b/src/main/java/me/unurled/raxen/manager/Manager.java @@ -9,8 +9,10 @@ import me.unurled.raxen.manager.entity.PartyManager; import me.unurled.raxen.manager.entity.PlayerManager; import me.unurled.raxen.manager.entity.SpellManager; import me.unurled.raxen.manager.entity.StorageManager; +import me.unurled.raxen.manager.server.BuildManager; import me.unurled.raxen.manager.server.CommandManager; import me.unurled.raxen.manager.server.DungeonsManager; +import me.unurled.raxen.manager.server.GlyphManager; import me.unurled.raxen.manager.server.LibsManager; import me.unurled.raxen.manager.server.ListenerManager; import me.unurled.raxen.manager.server.ResourcePackManager; @@ -69,6 +71,12 @@ public class Manager { @Getter private SpellManager spellManager; + @Getter + private GlyphManager glyphManager; + + @Getter + private BuildManager buildManager; + /** * Create an instance of all managers. * @@ -92,5 +100,7 @@ public class Manager { tutorialManager = new TutorialManager(); partyManager = new PartyManager(main); spellManager = new SpellManager(main); + glyphManager = new GlyphManager(main); + buildManager = new BuildManager(main); } } diff --git a/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java b/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java index 6a04805..f667a75 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java @@ -2,6 +2,8 @@ package me.unurled.raxen.manager.entity; import static me.unurled.raxen.utils.Utils.debug; +import eu.decentsoftware.holograms.api.DHAPI; +import eu.decentsoftware.holograms.api.holograms.Hologram; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -29,11 +31,14 @@ import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.other.MobData; import me.unurled.raxen.components.entity.other.MobType; import me.unurled.raxen.components.entity.other.RaxenEntity; +import me.unurled.raxen.utils.Tags; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; public class EntityManager { @@ -41,57 +46,67 @@ public class EntityManager { @Getter @Setter - public List list = new ArrayList<>(); - - public HashMap mobTypes; - public HashMap spawnedMob; - public HashMap spawnedMobsOnlyMain; + private List list = new ArrayList<>(); @Getter - private final HashMap attribute = - new HashMap<>(); + private HashMap mobTypes; + @Getter + private final HashMap spawnedMob; + @Getter + private HashMap spawnedMobsOnlyMain; - public HashMap entities = - new HashMap<>(); + @Getter + private final HashMap attribute; - public HashMap livingEntities = new HashMap<>(); + private final HashMap entities; - // Attributes - private Defense defense; - private Health health; - private ItemDefense itemDefense; - private ItemHealth itemHealth; - private ItemLuck itemLuck; - private ItemMana itemMana; - private ItemSpeed itemSpeed; - private ItemStrength itemStrength; - private Luck luck; - private Mana mana; - private MaxHealth maxHealth; - private MaxMana maxMana; - private Speed speed; - private Strength strength; + + private final HashMap livingEntities = new HashMap<>(); + private HashMap nameTags; public EntityManager(Raxen main) { this.main = main; + entities = new HashMap<>(); + attribute = new HashMap<>(); mobTypes = new HashMap<>(); spawnedMob = new HashMap<>(); spawnedMobsOnlyMain = new HashMap<>(); + nameTags = new HashMap<>(); reload(); registerAttributes(); } - public static void reload() { + public void reload() { Collection collection = new ArrayList<>(); collection.addAll(spawnedMob.values()); for (MobData mobData : collection) { - mobData.entity.die(false); +// mobData.entity.die(false); } } public void registerLivingEntities(World world) { } + public void registerEntity(Entity entity) { + /* RaxenEntity raxenEntity = new RaxenEntity(); + raxenEntity.register(entity); + entities.put(entity.getUniqueId(), raxenEntity); */ + } + + public void setNameTag(Entity entity) { + Hologram holo = Tags.createNameTag(main, entity); + if (holo == null) { + return; + } + BukkitTask run = new BukkitRunnable() { + @Override + public void run() { + DHAPI.moveHologram(holo, entity.getLocation()); + } + }.runTaskAsynchronously(main); + nameTags.put(entity.getUniqueId(), run); + } + /** * used to register entities using fileconfigs but rapidly abandoned * @@ -109,7 +124,7 @@ public class EntityManager { } public RaxenEntity getEntity(Entity entity) { - entities.get(entity.getUniqueId()); + return entities.get(entity.getUniqueId()); } /** @@ -118,50 +133,50 @@ public class EntityManager { public void registerAttributes() { EntityNamespacedKey key = new EntityNamespacedKey(main); - this.defense = new Defense(key.defense, "DEFENSE"); + // Attributes + Defense defense = new Defense(key.defense, "DEFENSE"); attribute.put("DEFENSE", defense); - this.health = new Health(key.health, "HEALTH"); + Health health = new Health(key.health, "HEALTH"); attribute.put("HEALTH", health); - this.itemDefense = new ItemDefense(key.itemDefense, "ITEM_DEFENSE"); + ItemDefense itemDefense = new ItemDefense(key.itemDefense, "ITEM_DEFENSE"); attribute.put("ITEM_DEFENSE", itemDefense); - this.itemHealth = new ItemHealth(key.itemHealth, "ITEM_HEALTH"); + ItemHealth itemHealth = new ItemHealth(key.itemHealth, "ITEM_HEALTH"); attribute.put("ITEM_HEALTH", itemHealth); - this.itemLuck = new ItemLuck(key.itemLuck, "ITEM_LUCK"); + ItemLuck itemLuck = new ItemLuck(key.itemLuck, "ITEM_LUCK"); attribute.put("ITEM_LUCK", itemLuck); - this.itemMana = new ItemMana(key.itemMana, "ITEM_MANA"); + ItemMana itemMana = new ItemMana(key.itemMana, "ITEM_MANA"); attribute.put("ITEM_MANA", itemMana); - this.itemSpeed = new ItemSpeed(key.itemSpeed, "ITEM_SPEED"); + ItemSpeed itemSpeed = new ItemSpeed(key.itemSpeed, "ITEM_SPEED"); attribute.put("ITEM_SPEED", itemSpeed); - this.itemStrength = new ItemStrength(key.itemStrength, "ITEM_STRENGTH"); + ItemStrength itemStrength = new ItemStrength(key.itemStrength, "ITEM_STRENGTH"); attribute.put("ITEM_STRENGTH", itemStrength); - this.luck = new Luck(key.luck, "LUCK"); + Luck luck = new Luck(key.luck, "LUCK"); attribute.put("LUCK", luck); - this.mana = new Mana(key.mana, "MANA"); + Mana mana = new Mana(key.mana, "MANA"); attribute.put("MANA", mana); - this.maxMana = - new MaxManaBuilder() - .setNamespacekey(key.maxMana) - .setName("MAX_MANA") - .createMaxMana(); + MaxMana maxMana = new MaxManaBuilder() + .setNamespacekey(key.maxMana) + .setName("MAX_MANA") + .createMaxMana(); attribute.put("MAX_MANA", maxMana); - this.maxHealth = new MaxHealth(key.maxHealth, "MAX_HEALTH"); + MaxHealth maxHealth = new MaxHealth(key.maxHealth, "MAX_HEALTH"); attribute.put("MAX_HEALTH", maxHealth); - this.speed = new Speed(key.speed, "SPEED"); + Speed speed = new Speed(key.speed, "SPEED"); attribute.put("SPEED", speed); - this.strength = new Strength(key.strength, "STRENGTH"); + Strength strength = new Strength(key.strength, "STRENGTH"); attribute.put("STRENGTH", strength); } diff --git a/src/main/java/me/unurled/raxen/manager/server/CommandManager.java b/src/main/java/me/unurled/raxen/manager/server/CommandManager.java index 699296d..cf62de7 100644 --- a/src/main/java/me/unurled/raxen/manager/server/CommandManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/CommandManager.java @@ -3,6 +3,7 @@ package me.unurled.raxen.manager.server; import lombok.Getter; import me.unurled.raxen.Raxen; import me.unurled.raxen.commands.RaxenCommand; +import me.unurled.raxen.commands.admin.BuildCommand; import me.unurled.raxen.commands.admin.CustomModelDataCommand; import me.unurled.raxen.commands.admin.EntitiyCommand; import me.unurled.raxen.commands.admin.ItemListCommand; @@ -39,6 +40,7 @@ public class CommandManager { private ItemTo64Command itemTo64Command; private TutorialManagerCommand tutorialManagerCommand; private PartyCommand partyCommand; + private BuildCommand buildCommand; public CommandManager(Raxen main) { this.main = main; @@ -54,6 +56,7 @@ public class CommandManager { this.itemTo64Command = new ItemTo64Command(); this.tutorialManagerCommand = new TutorialManagerCommand(main); this.partyCommand = new PartyCommand(main); + this.buildCommand = new BuildCommand(main); } /** @@ -103,5 +106,8 @@ public class CommandManager { main.getCommand("party").setExecutor(partyCommand); main.getCommand("party").setTabCompleter(partyCommand); + + main.getCommand("build").setExecutor(buildCommand); + main.getCommand("build").setTabCompleter(buildCommand); } } diff --git a/src/main/java/me/unurled/raxen/manager/server/LibsManager.java b/src/main/java/me/unurled/raxen/manager/server/LibsManager.java index 04388d7..be89eb4 100644 --- a/src/main/java/me/unurled/raxen/manager/server/LibsManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/LibsManager.java @@ -3,8 +3,6 @@ package me.unurled.raxen.manager.server; import lombok.Getter; import me.unurled.raxen.Raxen; import me.unurled.raxen.utils.libs.CitizensApi; -import me.unurled.raxen.utils.libs.HolographicDisplay; -import me.unurled.raxen.utils.libs.LuckPerm; import me.unurled.raxen.utils.libs.MongoDB; import me.unurled.raxen.utils.libs.Mysql; import me.unurled.raxen.utils.libs.PlaceHolderAPI; @@ -15,9 +13,6 @@ public class LibsManager { @Getter private final ProtocolManager protocolManager; - @Getter - private final LuckPerm luckPerm; - @Getter private final Vault vault; @@ -33,17 +28,12 @@ public class LibsManager { @Getter private CitizensApi citizens; - @Getter - private HolographicDisplay holographicDisplay; public LibsManager(Raxen main) { - this.luckPerm = new LuckPerm(main); - this.luckPerm.register(); this.vault = new Vault(main); this.protocolManager = new ProtocolManager(main); this.mongoDB = new MongoDB(); this.placeHolderAPI = new PlaceHolderAPI(main); this.citizens = new CitizensApi(main); - this.holographicDisplay = new HolographicDisplay(main); } } diff --git a/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java b/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java index a4f6b22..8b44335 100644 --- a/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java @@ -1,11 +1,15 @@ package me.unurled.raxen.manager.server; import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.PacketType.Play.Server; 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 com.comphenix.protocol.wrappers.BlockPosition; import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.clientbuild.Builds; +import org.bukkit.Location; import org.bukkit.entity.Player; public class ProtocolManager { @@ -33,5 +37,23 @@ public class ProtocolManager { } } ); + manager.addPacketListener( + new PacketAdapter(main, ListenerPriority.NORMAL, Server.BLOCK_CHANGE) { + @Override + public void onPacketSending(PacketEvent event) { + PacketContainer packet = event.getPacket(); + BlockPosition pos = packet.getBlockPositionModifier().read(0); + Location loc; + if (main.getManager().getBuildManager().isABuild( + loc = new Location(event.getPlayer().getWorld(), pos.getX(), pos.getY(), + pos.getZ()))) { + Builds build = main.getManager().getBuildManager().getBuildsByLocation(loc); + if (!main.getManager().getBuildManager().isInPlayerList(build, event.getPlayer())) { + event.setCancelled(true); + } + } + super.onPacketSending(event); + } + }); } } diff --git a/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java b/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java index da8ec34..e8db62a 100644 --- a/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java @@ -1,12 +1,22 @@ package me.unurled.raxen.manager.server; import static me.unurled.raxen.utils.Utils.debug; -import static me.unurled.raxen.utils.Utils.error; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; import java.util.Objects; +import java.util.UUID; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import lombok.Getter; import me.unurled.raxen.Raxen; import me.unurled.raxen.components.resourcepack.ResourcePack; +import me.unurled.raxen.components.resourcepack.hosting.Hosting; +import me.unurled.raxen.components.resourcepack.hosting.PackHoster; import org.bukkit.configuration.file.FileConfiguration; public class ResourcePackManager { @@ -18,6 +28,13 @@ public class ResourcePackManager { private FileConfiguration config; + private UUID uuid; + @Getter + private String url; + @Getter + private String sha1; + private File resourcePackFile; + @Getter private boolean useRP; @@ -25,40 +42,161 @@ public class ResourcePackManager { this.main = main; this.resourcePack = new ResourcePack(main, this); this.config = main.getConfig(); - this.useRP = this.config.getBoolean("useResourcePack"); - enable(); + this.useRP = this.config.getBoolean("useResourcePack", false); + prepareFolder(); + resourcePackFile = packageRp(); + if (resourcePackFile != null) { + enable(); + } else { + useRP = false; + } + if (useRP) { + upload(); + } } /** - * Method to enable the ressourcepack + * Create all folders for the resource pack + */ + private void prepareFolder() { + // Create main folder3 + File rp = new File(main.getDataFolder(), "resoucepack"); + rp.mkdirs(); + + File minecraft = new File(rp, "minecraft"); + minecraft.mkdirs(); + + // Create mcmeta file + String content = """ + { + "pack": { + "pack_format": 12, + "description": "§bRaxen - By §6unurled" + } + }"""; + try { + File file = new File(minecraft, "pack.mcmeta"); + + FileWriter fileWriter = new FileWriter(file); + + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + + bufferedWriter.write(content); + + bufferedWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + // Create texture folder + File texture = new File(minecraft, "textures"); + texture.mkdirs(); + new File(texture, "item").mkdirs(); + new File(texture, "block").mkdirs(); + + // Create model folder + File model = new File(minecraft, "models"); + model.mkdirs(); + new File(model, "item").mkdirs(); + new File(model, "block").mkdirs(); + + // Create font folder + File font = new File(minecraft, "font"); + font.mkdirs(); + + // Create sound folder + File sound = new File(minecraft, "sounds"); + sound.mkdirs(); + } + + private File packageRp() { + String zipFilePath = main.getDataFolder() + "/resourcepack.zip"; + String folderPath = main.getDataFolder() + "/resourcepack"; + try { + zipFolder(folderPath, zipFilePath); + return new File(zipFilePath); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * Method to enable the ressource pack */ 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( - main, - "You must specify an resource_pack_url and resource_pack_sha1!" - ); + if (config.getString("resource_pack_url") == null || + Objects.equals(config.getString("resource_pack_url"), "")) { debug(main, "Resource pack not enabled."); useRP = false; } else { debug(main, "Ressource Pack enabled."); + if (config.contains("resource_pack_uuid") && + config.getString("resource_pack_uuid") != null && + !Objects.equals(config.getString("resource_pack_uuid"), + "00000000-0000-0000-0000-000000000000")) { + uuid = UUID.fromString(config.getString("resource_pack_uuid")); + } else { + uuid = UUID.randomUUID(); + config.set("resource_pack_uuid", uuid.toString()); + main.saveConfig(); + } + url = config.getString("resource_pack_url") + "/download/" + uuid.toString(); } } else { debug(main, "Resource pack not enabled."); } } + + private static void zipFolder(String folderPath, String zipFilePath) throws IOException { + FileOutputStream fos = new FileOutputStream(zipFilePath); + ZipOutputStream zos = new ZipOutputStream(fos); + + File folder = new File(folderPath); + zipFiles(folder, folder.getName(), zos); + + zos.close(); + fos.close(); + } + + private static void zipFiles(File folder, String parentFolder, ZipOutputStream zos) + throws IOException { + byte[] buffer = new byte[1024]; + if (folder.listFiles() == null) { + return; + } + + for (File file : folder.listFiles()) { + if (file.isDirectory()) { + zipFiles(file, parentFolder + "/" + file.getName(), zos); + continue; + } + + FileInputStream fis = new FileInputStream(file); + + zos.putNextEntry(new ZipEntry(parentFolder + "/" + file.getName())); + + int length; + while ((length = fis.read(buffer)) > 0) { + zos.write(buffer, 0, length); + } + + zos.closeEntry(); + fis.close(); + } + } + + private void upload() { + resourcePackFile = packageRp(); + if (resourcePackFile != null) { + Hosting host = createHosting(); + host.upload(resourcePackFile); + sha1 = host.getOriginalSHA1(); + } + } + + private Hosting createHosting() { + return new PackHoster(url); + } } diff --git a/src/main/java/me/unurled/raxen/manager/server/WorldManager.java b/src/main/java/me/unurled/raxen/manager/server/WorldManager.java index 7261bc6..1fef61b 100644 --- a/src/main/java/me/unurled/raxen/manager/server/WorldManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/WorldManager.java @@ -1,6 +1,10 @@ package me.unurled.raxen.manager.server; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.copyDirectory; +import static me.unurled.raxen.utils.Utils.error; +import static me.unurled.raxen.utils.Utils.log; +import static me.unurled.raxen.utils.Utils.removeDirectory; import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MultiverseWorld; @@ -20,8 +24,7 @@ public class WorldManager { MVWorldManager worldManager; /** - * String : name - * MultiverseWorld : a world that need to be registered + * String : name MultiverseWorld : a world that need to be registered */ private Map loadedWorlds = new HashMap<>(); @@ -40,6 +43,7 @@ public class WorldManager { /** * remove a world + * * @param name */ public void removeWorld(String name) { @@ -65,8 +69,8 @@ public class WorldManager { pluginFolder.mkdirs(); error( "Please put in the folder " + - pluginFolder.getAbsolutePath() + - " all the needed worlds :" + pluginFolder.getAbsolutePath() + + " all the needed worlds :" ); for (String s : worlds) { error(" - " + s + ","); @@ -94,6 +98,7 @@ public class WorldManager { /** * load world from the name of it + * * @param name */ public void loadWorld(String name) { @@ -101,10 +106,10 @@ public class WorldManager { if (!world.exists() || !world.isDirectory()) { error( "Loading world " + - name + - ". Folder " + - world.getAbsolutePath() + - " don't exists." + name + + ". Folder " + + world.getAbsolutePath() + + " don't exists." ); return; } @@ -116,10 +121,10 @@ public class WorldManager { ), colorTextComp( "From " + - world.getAbsolutePath() + - " to " + - newWorld.getAbsolutePath() + - "." + world.getAbsolutePath() + + " to " + + newWorld.getAbsolutePath() + + "." ) ); copyDirectory(world.getAbsolutePath(), newWorld.getAbsolutePath()); diff --git a/src/main/java/me/unurled/raxen/utils/ComponentSpilt.java b/src/main/java/me/unurled/raxen/utils/ComponentSpilt.java new file mode 100644 index 0000000..6593b87 --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/ComponentSpilt.java @@ -0,0 +1,37 @@ +package me.unurled.raxen.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.Style; +import org.jetbrains.annotations.NotNull; + +final class ComponentSplit { + + private ComponentSplit() { + } + + static @NotNull List split(final @NotNull Component self, + final @NotNull Component separator) { + if (self.children().size() == 0) { + return Collections.singletonList(self); + } + + final List result = new ArrayList<>(); + final Component root = self.children(Collections.emptyList()); + TextComponent.Builder build = Component.text(); + build.append(root.style(Style.empty())); + for (final Component child : self.children()) { + if (child.equals(separator)) { + result.add(build.build().applyFallbackStyle(root.style())); + build = Component.text(); + } else { + build.append(child); + } + } + result.add(build.build().applyFallbackStyle(root.style())); + return result; + } +} diff --git a/src/main/java/me/unurled/raxen/utils/Tags.java b/src/main/java/me/unurled/raxen/utils/Tags.java index 2ff156b..bb4fbfe 100644 --- a/src/main/java/me/unurled/raxen/utils/Tags.java +++ b/src/main/java/me/unurled/raxen/utils/Tags.java @@ -1,35 +1,128 @@ package me.unurled.raxen.utils; -import static me.unurled.raxen.utils.Utils.coloredString; - +import eu.decentsoftware.holograms.api.DHAPI; +import eu.decentsoftware.holograms.api.holograms.Hologram; +import eu.decentsoftware.holograms.api.holograms.HologramLine; +import eu.decentsoftware.holograms.api.holograms.HologramPage; +import eu.decentsoftware.holograms.api.utils.Common; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Objects; -import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI; -import me.filoghost.holographicdisplays.api.hologram.Hologram; +import java.util.UUID; import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.entity.other.RaxenEntity; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.entity.Entity; import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; public class Tags { + public static final double STEP = 0.5; + public static void makeFloatingText(String name, Location loc, double xzOffset, double yMin, double yMax, double durationSec) { loc.add(-xzOffset / 2 + (java.lang.Math.random() * (xzOffset)), (java.lang.Math.random() * (yMax - yMin)) + yMin, -xzOffset / 2 + ( java.lang.Math.random() * (xzOffset))); - HolographicDisplaysAPI api = HolographicDisplaysAPI.get((Raxen) Objects.requireNonNull( - Bukkit.getPluginManager() - .getPlugin("Raxen"))); - Hologram hologram = api.createHologram(loc); - hologram.getLines().appendText(coloredString(name)); + DHAPI.createHologram(name, loc, List.of(name)); new BukkitRunnable() { @Override public void run() { - hologram.delete(); + DHAPI.removeHologram(name); } }.runTaskLater(((Raxen) Objects.requireNonNull( Bukkit.getPluginManager() .getPlugin("Raxen"))).getPlugin(), (long) (durationSec * 20)); } + public static void makeFloatingTextStylishWhenHit(Location damager, Location victim, + String name, String... text) { + ArrayList loc = getParabolicCurve(victim, damager); + Hologram holo = DHAPI.createHologram(name, victim, Arrays.stream(text).toList()); + for (Location location : loc) { + DHAPI.moveHologram(holo, location); + if (loc.indexOf(location) == loc.size() - 1) { + new BukkitRunnable() { + @Override + public void run() { + DHAPI.removeHologram(name); + } + }.runTaskLater(((Raxen) Objects.requireNonNull( + Bukkit.getPluginManager() + .getPlugin("Raxen"))).getPlugin(), 20); + } + } + } + + public static ArrayList getParabolicCurve(Location start, Location end) { + ArrayList results = new ArrayList<>(); + + Vector line = end.clone().subtract(start).toVector(); + line.setY(start.getY()); + double length = line.length(); + line.normalize(); + + for (double x = 0; x < length; x += STEP) { + double a = -1.0 / x; + double y = a * java.lang.Math.pow(x, 2) + x; + Location point = start.clone(); + point.add(line.multiply(x)).setY(point.getY() + y); + results.add(point); + line.multiply(1 / x); + } + + return results; + } + + public static Hologram createNameTag(Raxen main, Entity entity) { + RaxenEntity e = main.getManager().getEntityManager().getEntity(entity); + + // TODO: implement this... + + if (e != null) { + TextComponent txt = Utils.colorTextComp(e.getFullName()); + return createHologram(e.getName() + UUID.randomUUID(), entity.getLocation(), + false, txt); + } else { + // register entity... + } + return null; + } + + public static Hologram createHologram(String name, Location location, boolean saveToFile, + TextComponent lines) throws IllegalArgumentException { + Validate.notNull(name); + Validate.notNull(location); + + if (!name.matches(Common.NAME_REGEX)) { + throw new IllegalArgumentException(String.format( + "Hologram name can only contain alphanumeric characters, underscores and dashes! (%s)", + name)); + } + + if (Hologram.getCachedHologramNames().contains(name)) { + throw new IllegalArgumentException( + String.format("Hologram with that name already exists! (%s)", name)); + } + + Hologram hologram = new Hologram(name, location, saveToFile); + HologramPage page = hologram.getPage(0); + if (lines != null) { + for (Component line : ComponentSplit.split(lines, Component.newline())) { + HologramLine hologramLine = new HologramLine(page, page.getNextLineLocation(), + Utils.textCompToString(line)); + page.addLine(hologramLine); + } + } + hologram.showAll(); + hologram.save(); + return hologram; + } + } diff --git a/src/main/java/me/unurled/raxen/utils/libs/Redis.java b/src/main/java/me/unurled/raxen/utils/libs/Redis.java new file mode 100644 index 0000000..0a1547a --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/libs/Redis.java @@ -0,0 +1,12 @@ +package me.unurled.raxen.utils.libs; + +import redis.clients.jedis.JedisPooled; + +public class Redis { + + JedisPooled jedis; + + public Redis() { + jedis = new JedisPooled("localhost"); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b81a1bd..be3be31 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,15 +1,15 @@ - version: "${version}" - motd: "YAY, Super server!" - motd-reload: "Server reloading!" +version: "${version}" +motd: "YAY, Super server!" +motd-reload: "Server reloading!" - storage: "MONGODB" # switch between "MONGODB", "MYSQL"(not implemented), "YML"(currently making it) - # if MYSQL or MongoDB - username: "no_usr" # if mysql if you are on mongodb, add username in the url - password: "no_pass" # if mysql if you are on mongodb, add password in the url - url: "mongodb://localhost:27017" +storage: "MONGODB" # switch between "MONGODB", "MYSQL"(not implemented), "YML"(currently making it) +# if MYSQL or MongoDB +username: "no_usr" # if mysql if you are on mongodb, add username in the url +password: "no_pass" # if mysql if you are on mongodb, add password in the url +url: "mongodb://localhost:27017" - useResourcePack: false - resource_pack_url: "https://mc-packs.net/" # recommend to use https://mc-packs.net/ => free resource pack hoster (will eventually develop one myself but not atm) - resource_pack_sha1: "sha1hallo" # sha1 hash +useResourcePack: false +resource_pack_url: "https://pack.unurled.me" # do not change if you want it to work with the intended server +resource_pack_uuid: "00000000-0000-0000-0000-000000000000" # do not change it will auto update with the plugin - debug: false \ No newline at end of file +debug: false \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 14d8226..a6a31ec 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,8 +3,8 @@ version: '${version}' main: me.unurled.raxen.Raxen author: unurled api-version: 1.19 -depend: [ ProtocolLib, PlaceholderAPI, 'Multiverse-Core', Citizens, HolographicDisplays ] -softdepend: [ LuckPerms, Essentials ] +depend: [ ProtocolLib, PlaceholderAPI, 'Multiverse-Core', Citizens ] +softdepend: [ Essentials ] commands: reloadplugin: @@ -46,6 +46,8 @@ commands: description: tutorial command party: description: party command + build: + description: build command permissions: raxen.reload.cmd: @@ -75,4 +77,6 @@ permissions: raxen.tutorial.cmd: description: tutorial command permission raxen.party.cmd: - description: party command permission \ No newline at end of file + description: party command permission + raxen.build.cmd: + description: build command permission \ No newline at end of file