diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b00c32e..5007822 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,7 +56,10 @@ jobs: if: steps.cache.outputs.cache-hit != 'true' run: | wget "https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar" - java -jar BuildTools.jar --rev 1.14.4 + java -jar BuildTools.jar --rev 1.15.2 + + - name: Download ProtocolLib + run: wget -O ./libs/ProtocolLib.jar "https://github.com/dmulloy2/ProtocolLib/releases/download/4.8.0/ProtocolLib.jar" - name: Build with Gradle run: ./gradlew build diff --git a/build.gradle.kts b/build.gradle.kts index 3a64dce..2b3b693 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,6 @@ plugins { `java-library` `maven-publish` - alias(libs.plugins.runPaper) alias(libs.plugins.spotless) alias(libs.plugins.shadow) } @@ -26,16 +25,15 @@ repositories { } dependencies { - compileOnly(libs.spigotApi) compileOnly(libs.spigot) - compileOnly(libs.bukkit) compileOnly(libs.noteblockapi) compileOnly(libs.lunachat) - compileOnly(libs.protocolLib) +// compileOnly(libs.protocolLib) + compileOnly(files("libs/ProtocolLib.jar")) compileOnly(libs.dadadachecker) compileOnly(libs.blockstudio) compileOnly(libs.paperApi) - implementation(libs.cloudPaper) + implementation(libs.acfPaper) implementation(libs.jspecify) } @@ -54,14 +52,6 @@ java { } tasks { - runServer { - minecraftVersion("1.14.4") - downloadPlugins { - url("https://github.com/ucchyocean/LunaChat/releases/download/v3.0.16/LunaChat.jar") // LunaChat 3.0.16 - url("https://github.com/koca2000/NoteBlockAPI/releases/download/1.6.3/NoteBlockAPI-1.6.3.jar") // NoteBlockAPI 1.6.3 - url("https://github.com/dmulloy2/ProtocolLib/releases/download/4.6.0/ProtocolLib.jar") // ProtocolLib 4.6.0 - } - } compileJava { options.encoding = defaultEncoding diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 933dc82..2fabf8e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,33 +1,25 @@ [versions] -runPaper = "2.3.1" # 3.x.x can't run in Java8 spotless = "6.13.0" # 6.14.0 can't run in Java8 shadow = "8.3.0" -protocolLib = "5.3.0" # 5.4.0 can't run in Java8 -paperApi = "1.14.4-R0.1-SNAPSHOT" +paperApi = "1.15.2-R0.1-SNAPSHOT" blockstudio = "-SNAPSHOT" dadadachecker = "1.0.0" noteblockapi = "1.6.3" lunachat = "3.0.16" -bukkit = "1.14.4-R0.1-SNAPSHOT" -spigot = "1.14.4-R0.1-SNAPSHOT" -spigotApi = "1.14.4-R0.1-SNAPSHOT" -cloudPaper = "2.0.0-beta.10" +spigot = "1.15.2-R0.1-SNAPSHOT" jspecify = "1.0.0" +acfPaper = "0.5.1-SNAPSHOT" [plugins] -runPaper = { id = "xyz.jpenilla.run-paper", version.ref = "runPaper" } spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } shadow = { id = "com.gradleup.shadow", version.ref = "shadow" } [libraries] -protocolLib = { module = "net.dmulloy2:ProtocolLib", version.ref = "protocolLib" } paperApi = { module = "com.destroystokyo.paper:paper-api", version.ref = "paperApi" } blockstudio = { module = "com.github.Be4rJP:BlockStudio", version.ref = "blockstudio" } dadadachecker = { module = "com.github.Be4rJP:DADADAChecker", version.ref = "dadadachecker" } noteblockapi = { module = "com.github.koca2000:NoteBlockAPI", version.ref = "noteblockapi" } lunachat = { module = "com.github.ucchyocean:LunaChat", version.ref = "lunachat" } -bukkit = { module = "org.bukkit:bukkit", version.ref = "bukkit" } spigot = { module = "org.spigotmc:spigot", version.ref = "spigot" } -spigotApi = { module = "org.spigotmc:spigot-api", version.ref = "spigotApi" } -cloudPaper = { module = "org.incendo:cloud-paper", version.ref = "cloudPaper" } -jspecify = { module = "org.jspecify:jspecify", version.ref = "jspecify" } \ No newline at end of file +jspecify = { module = "org.jspecify:jspecify", version.ref = "jspecify" } +acfPaper = { module = "co.aikar:acf-paper", version.ref = "acfPaper" } diff --git a/libs/.gitignore b/libs/.gitignore new file mode 100644 index 0000000..f23b948 --- /dev/null +++ b/libs/.gitignore @@ -0,0 +1 @@ +*.jar \ No newline at end of file diff --git a/libs/.gitkeep b/libs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/be4rjp/sclat/Sclat.java b/src/main/java/be4rjp/sclat/Sclat.java index 156b675..c35f4b3 100644 --- a/src/main/java/be4rjp/sclat/Sclat.java +++ b/src/main/java/be4rjp/sclat/Sclat.java @@ -8,10 +8,15 @@ import be4rjp.sclat.api.ServerType; import be4rjp.sclat.api.async.AsyncPlayerListener; import be4rjp.sclat.api.async.AsyncThreadManager; +import be4rjp.sclat.api.color.TeamColorSets; import be4rjp.sclat.api.config.CustomConfig; +import be4rjp.sclat.api.enchant.GlowEnchant; +import be4rjp.sclat.api.equipment.EquipmentServer; import be4rjp.sclat.api.holo.PlayerHolograms; +import be4rjp.sclat.api.rank.RankingUpdater; +import be4rjp.sclat.api.status.StatusServer; import be4rjp.sclat.api.wiremesh.Wiremesh; -import be4rjp.sclat.commands.sclatCommandExecutor; +import be4rjp.sclat.commands.SclatCommand; import be4rjp.sclat.config.Config; import be4rjp.sclat.data.DataMgr; import be4rjp.sclat.data.MapData; @@ -21,21 +26,21 @@ import be4rjp.sclat.listener.SquidListener; import be4rjp.sclat.lunachat.LunaChatListener; import be4rjp.sclat.manager.ArmorStandMgr; -import be4rjp.sclat.manager.ColorMgr; import be4rjp.sclat.manager.GameMgr; import be4rjp.sclat.manager.MainWeaponMgr; import be4rjp.sclat.manager.MapDataMgr; import be4rjp.sclat.manager.MatchMgr; import be4rjp.sclat.manager.NoteBlockAPIMgr; import be4rjp.sclat.manager.PlayerReturnManager; -import be4rjp.sclat.manager.RankMgr; import be4rjp.sclat.manager.ServerStatusManager; import be4rjp.sclat.manager.WeaponClassMgr; import be4rjp.sclat.protocollib.SclatPacketListener; -import be4rjp.sclat.server.EquipmentServer; -import be4rjp.sclat.server.StatusServer; import be4rjp.sclat.tutorial.Tutorial; -import be4rjp.sclat.weapon.SnowballListener; +import be4rjp.sclat.weapon.listener.MainWeapon; +import be4rjp.sclat.weapon.listener.SPWeapon; +import be4rjp.sclat.weapon.listener.SnowballListener; +import be4rjp.sclat.weapon.listener.SubWeapon; +import co.aikar.commands.PaperCommandManager; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; import com.google.common.io.ByteArrayDataInput; @@ -63,7 +68,7 @@ * @author Be4rJP */ public class Sclat extends JavaPlugin implements PluginMessageListener { - private static final Logger logger = LoggerFactory.getLogger(Sclat.class); + public static final Logger logger = LoggerFactory.getLogger(Sclat.class); public static Config conf; @@ -71,7 +76,7 @@ public class Sclat extends JavaPlugin implements PluginMessageListener { public static Location lobby; - public static Glow glow; + public static GlowEnchant glowEnchant; public static List pdspList; @@ -114,10 +119,12 @@ public class Sclat extends JavaPlugin implements PluginMessageListener { public static final PlayerHolograms playerHolograms = new PlayerHolograms(); + private static PaperCommandManager commandManager; + @Override public void onEnable() { plugin = this; - glow = new Glow(); + glowEnchant = new GlowEnchant(); pdspList = new ArrayList<>(); @@ -172,9 +179,9 @@ public void onEnable() { pm.registerEvents(new GameMgr(), this); pm.registerEvents(new SquidListener(), this); pm.registerEvents(new ClickListener(), this); - pm.registerEvents(new be4rjp.sclat.weapon.MainWeapon(), this); - pm.registerEvents(new be4rjp.sclat.weapon.SubWeapon(), this); - pm.registerEvents(new be4rjp.sclat.weapon.SPWeapon(), this); + pm.registerEvents(new MainWeapon(), this); + pm.registerEvents(new SubWeapon(), this); + pm.registerEvents(new SPWeapon(), this); pm.registerEvents(new SnowballListener(), this); pm.registerEvents(new AsyncPlayerListener(), this); @@ -184,13 +191,14 @@ public void onEnable() { // ------------------------RegisteringCommands------------------------ getLogger().info("Registering Commands..."); - getCommand("sclat").setExecutor(new sclatCommandExecutor()); - getCommand("sclat").setTabCompleter(new sclatCommandExecutor()); + commandManager = new PaperCommandManager(this); + // commandManager.enableUnstableAPI("help"); + commandManager.registerCommand(new SclatCommand(this), true); // ------------------------------------------------------------------- // ------------------------Setup from config-------------------------- getLogger().info("SetupColor..."); - ColorMgr.SetupColor(); + TeamColorSets.SetupColor(); getLogger().info("SetupMainWeapon..."); MainWeaponMgr.SetupMainWeapon(); getLogger().info("WeaponClassSetup..."); @@ -332,7 +340,7 @@ public void onEnable() { // -----------------------Ranking Holograms--------------------------- if (type == ServerType.LOBBY) { - RankMgr.makeRankingTask(); + RankingUpdater.makeRankingTask(); } // ------------------------------------------------------------------- @@ -388,6 +396,8 @@ public void onDisable() { e.printStackTrace(); } + commandManager.unregisterCommands(); + // -----------------------Tutorial server list------------------------ if (type == ServerType.LOBBY) { tutorialServers = new CustomConfig(this, "tutorial.yml"); diff --git a/src/main/java/be4rjp/sclat/manager/BungeeCordMgr.java b/src/main/java/be4rjp/sclat/api/BungeeCordAPI.java similarity index 88% rename from src/main/java/be4rjp/sclat/manager/BungeeCordMgr.java rename to src/main/java/be4rjp/sclat/api/BungeeCordAPI.java index 35adaee..4b49350 100644 --- a/src/main/java/be4rjp/sclat/manager/BungeeCordMgr.java +++ b/src/main/java/be4rjp/sclat/api/BungeeCordAPI.java @@ -1,5 +1,5 @@ -package be4rjp.sclat.manager; +package be4rjp.sclat.api; import be4rjp.sclat.Sclat; import com.google.common.io.ByteArrayDataOutput; @@ -10,7 +10,7 @@ * * @author Be4rJP */ -public class BungeeCordMgr { +public class BungeeCordAPI { public static void PlayerSendServer(Player player, String servername) { ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("Connect"); diff --git a/src/main/java/be4rjp/sclat/api/GlowingAPI.java b/src/main/java/be4rjp/sclat/api/GlowingAPI.java index 35359ac..99a301e 100644 --- a/src/main/java/be4rjp/sclat/api/GlowingAPI.java +++ b/src/main/java/be4rjp/sclat/api/GlowingAPI.java @@ -7,6 +7,8 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import java.lang.reflect.InvocationTargetException; + public class GlowingAPI { public static void setGlowing(Entity entity, Player player, boolean flag) { PacketContainer packet = Sclat.protocolManager.createPacket(PacketType.Play.Server.ENTITY_METADATA); @@ -18,7 +20,7 @@ public static void setGlowing(Entity entity, Player player, boolean flag) { packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); try { Sclat.protocolManager.sendServerPacket(player, packet); - } catch (RuntimeException e) { + } catch (InvocationTargetException e) { e.printStackTrace(); } } diff --git a/src/main/java/be4rjp/sclat/api/Plugins.java b/src/main/java/be4rjp/sclat/api/Plugins.java index e14569d..a877d2e 100644 --- a/src/main/java/be4rjp/sclat/api/Plugins.java +++ b/src/main/java/be4rjp/sclat/api/Plugins.java @@ -31,7 +31,7 @@ public boolean isLoaded() { * To support plugman load. */ private void resetLoadedState() { - _isLoaded = false; + _isLoaded = null; } /** diff --git a/src/main/java/be4rjp/sclat/api/SclatUtil.java b/src/main/java/be4rjp/sclat/api/SclatUtil.java index 9c26482..58c754f 100644 --- a/src/main/java/be4rjp/sclat/api/SclatUtil.java +++ b/src/main/java/be4rjp/sclat/api/SclatUtil.java @@ -1,33 +1,19 @@ package be4rjp.sclat.api; import be4rjp.sclat.Sclat; +import be4rjp.sclat.api.packet.WorldPackets; import be4rjp.sclat.api.player.PlayerData; +import be4rjp.sclat.api.status.StatusClient; import be4rjp.sclat.api.team.Team; import be4rjp.sclat.data.DataMgr; -import be4rjp.sclat.manager.BungeeCordMgr; import be4rjp.sclat.manager.DeathMgr; import be4rjp.sclat.manager.MatchMgr; -import be4rjp.sclat.server.StatusClient; -import net.minecraft.server.v1_14_R1.Block; -import net.minecraft.server.v1_14_R1.BlockPosition; -import net.minecraft.server.v1_14_R1.EntityPlayer; -import net.minecraft.server.v1_14_R1.IBlockAccess; -import net.minecraft.server.v1_14_R1.IBlockData; -import net.minecraft.server.v1_14_R1.PacketPlayOutAbilities; -import net.minecraft.server.v1_14_R1.PacketPlayOutBlockChange; -import net.minecraft.server.v1_14_R1.PacketPlayOutNamedEntitySpawn; -import net.minecraft.server.v1_14_R1.PacketPlayOutWorldBorder; -import net.minecraft.server.v1_14_R1.PlayerAbilities; -import net.minecraft.server.v1_14_R1.WorldBorder; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Instrument; import org.bukkit.Location; import org.bukkit.Note; import org.bukkit.Sound; -import org.bukkit.craftbukkit.v1_14_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_14_R1.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; @@ -49,74 +35,28 @@ public class SclatUtil { public static void setBlockByNMS(org.bukkit.block.Block b, org.bukkit.Material material, boolean applyPhysics) { - Location loc = b.getLocation(); - Block block = ((CraftBlockData) Bukkit.createBlockData(material)).getState().getBlock(); - net.minecraft.server.v1_14_R1.World nmsWorld = ((CraftWorld) loc.getWorld()).getHandle(); - BlockPosition bp = new BlockPosition(loc.getX(), loc.getY(), loc.getZ()); - IBlockData ibd = block.getBlockData(); - nmsWorld.setTypeAndData(bp, ibd, applyPhysics ? 3 : 2); + b.setType(material, applyPhysics); } public static void setBlockByNMSChunk(org.bukkit.block.Block b, org.bukkit.Material material, boolean applyPhysics) { - Location loc = b.getLocation(); - int x = loc.getBlockX(); - int y = loc.getBlockY(); - int z = loc.getBlockZ(); - Block block = ((CraftBlockData) Bukkit.createBlockData(material)).getState().getBlock(); - net.minecraft.server.v1_14_R1.World nmsWorld = ((CraftWorld) loc.getWorld()).getHandle(); - net.minecraft.server.v1_14_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - BlockPosition bp = new BlockPosition(x, y, z); - IBlockData ibd = block.getBlockData(); - nmsChunk.setType(bp, ibd, applyPhysics); + b.setBlockData(material.createBlockData(), applyPhysics); } public static void sendBlockChangeForAllPlayer(org.bukkit.block.Block b, org.bukkit.Material material) { - Location loc = b.getLocation(); - int x = loc.getBlockX(); - int y = loc.getBlockY(); - int z = loc.getBlockZ(); - BlockPosition bp = new BlockPosition(x, y, z); - net.minecraft.server.v1_14_R1.World nmsWorld = ((CraftWorld) loc.getWorld()).getHandle(); - net.minecraft.server.v1_14_R1.Chunk nmsChunk = nmsWorld.getChunkAt(x >> 4, z >> 4); - Block block = ((CraftBlockData) Bukkit.createBlockData(material)).getState().getBlock(); - IBlockAccess iba = (IBlockAccess) nmsWorld; - PacketPlayOutBlockChange packet = new PacketPlayOutBlockChange(iba, bp); - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (target.getWorld() == b.getWorld()) { - ((CraftPlayer) target).getHandle().playerConnection.sendPacket(packet); - } - } + WorldPackets.broadcastBlockChange(b.getLocation(), material); } public static void sendWorldBorderWarningPacket(Player player) { - EntityPlayer nmsPlayer = ((CraftPlayer) player).getHandle(); - net.minecraft.server.v1_14_R1.WorldBorder wb = new WorldBorder(); - wb.world = nmsPlayer.getWorldServer(); - wb.setSize(1); - wb.setCenter(player.getLocation().getX() + 10_000, player.getLocation().getZ() + 10_000); - PacketPlayOutWorldBorder packet = new PacketPlayOutWorldBorder(wb, - PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE); - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); + WorldPackets.sendWorldBorderWarningPacket(player); } public static void sendWorldBorderWarningClearPacket(Player player) { - EntityPlayer nmsPlayer = ((CraftPlayer) player).getHandle(); - net.minecraft.server.v1_14_R1.WorldBorder wb = new WorldBorder(); - wb.world = nmsPlayer.getWorldServer(); - wb.setSize(30_000_000); - wb.setCenter(player.getLocation().getX(), player.getLocation().getZ()); - PacketPlayOutWorldBorder packet = new PacketPlayOutWorldBorder(wb, - PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE); - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); + WorldPackets.sendWorldBorderWarningClearPacket(player); } public static void setPlayerFOV(Player player, float fov) { - PlayerAbilities abilities = new PlayerAbilities(); - abilities.walkSpeed = fov; - DataMgr.getPlayerData(player).setFov(fov); - PacketPlayOutAbilities packet = new PacketPlayOutAbilities(abilities); - ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); + WorldPackets.setPlayerFOV(player, fov); } /* @@ -125,8 +65,8 @@ public static void setPlayerFOV(Player player, float fov) { * b.getLocation(); Block block = ((CraftBlockData) * Bukkit.createBlockData(material)).getState().getBlock(); int x = * loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); - * net.minecraft.server.v1_14_R1.World nmsWorld = ((CraftWorld) - * loc.getWorld()).getHandle(); net.minecraft.server.v1_14_R1.Chunk nmsChunk = + * net.minecraft.server.v1_15_R1.World nmsWorld = ((CraftWorld) + * loc.getWorld()).getHandle(); net.minecraft.server.v1_15_R1.Chunk nmsChunk = * nmsWorld.getChunkAt(x >> 4, z >> 4); ChunkSection cs = * nmsChunk.getSections()[y >> 4]; IBlockData ibd = block.getBlockData(); if (cs * == nmsChunk.a()) { cs = new ChunkSection(y >> 4 << 4, false); @@ -144,7 +84,7 @@ public static void restartServer() { sc.startClient(); for (Player player : Sclat.getPlugin().getServer().getOnlinePlayers()) { - BungeeCordMgr.PlayerSendServer(player, "sclat"); + BungeeCordAPI.PlayerSendServer(player, "sclat"); DataMgr.getPlayerData(player).setServerName("Sclat"); } BukkitRunnable task = new BukkitRunnable() { @@ -167,20 +107,6 @@ public static void sendRestartedServerInfo() { sc.startClient(); } - public static void setPlayerPrefix(Player player, String prefix) { - String name = prefix + player.getDisplayName(); - CraftPlayer cp = (CraftPlayer) player; - EntityPlayer ep = cp.getHandle(); - String origName = ep.getName(); - for (Player target : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (player != target) { - CraftPlayer ct = (CraftPlayer) player; - ct.getHandle().playerConnection.sendPacket(new PacketPlayOutNamedEntitySpawn(ep)); - } - } - - } - public static void sendMessage(String message, MessageType type) { String sclat = "[§bSclat§r] "; StringBuilder buff = new StringBuilder(); @@ -252,7 +178,7 @@ public static void sendSclatLobby(Player player) { @Override public void run() { try { - BungeeCordMgr.PlayerSendServer(player, "sclat"); + BungeeCordAPI.PlayerSendServer(player, "sclat"); DataMgr.getPlayerData(player).setServerName("Sclat"); } catch (Exception e) { } diff --git a/src/main/java/be4rjp/sclat/api/SimpleRunnable.java b/src/main/java/be4rjp/sclat/api/SimpleRunnable.java new file mode 100644 index 0000000..8b7ee83 --- /dev/null +++ b/src/main/java/be4rjp/sclat/api/SimpleRunnable.java @@ -0,0 +1,26 @@ +package be4rjp.sclat.api; + +import be4rjp.sclat.Sclat; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.function.Consumer; + +public class SimpleRunnable { + public static BukkitRunnable from(Consumer action) { + return new BukkitRunnable() { + @Override + public void run() { + action.accept(this::cancel); + } + }; + } + + public static BukkitTask runTaskLater(Consumer action, long delay) { + return from(action).runTaskLater(Sclat.getPlugin(), delay); + } + + public static BukkitTask runTaskTimer(Consumer action, long delay, long period) { + return from(action).runTaskTimer(Sclat.getPlugin(), delay, period); + } +} diff --git a/src/main/java/be4rjp/sclat/data/Color.java b/src/main/java/be4rjp/sclat/api/color/Color.java similarity index 97% rename from src/main/java/be4rjp/sclat/data/Color.java rename to src/main/java/be4rjp/sclat/api/color/Color.java index a776f7d..033a18e 100644 --- a/src/main/java/be4rjp/sclat/data/Color.java +++ b/src/main/java/be4rjp/sclat/api/color/Color.java @@ -1,5 +1,5 @@ -package be4rjp.sclat.data; +package be4rjp.sclat.api.color; import org.bukkit.ChatColor; import org.bukkit.Material; diff --git a/src/main/java/be4rjp/sclat/manager/ColorMgr.java b/src/main/java/be4rjp/sclat/api/color/TeamColorSets.java similarity index 97% rename from src/main/java/be4rjp/sclat/manager/ColorMgr.java rename to src/main/java/be4rjp/sclat/api/color/TeamColorSets.java index 94f5be9..2c8a2b1 100644 --- a/src/main/java/be4rjp/sclat/manager/ColorMgr.java +++ b/src/main/java/be4rjp/sclat/api/color/TeamColorSets.java @@ -1,7 +1,6 @@ -package be4rjp.sclat.manager; +package be4rjp.sclat.api.color; import be4rjp.sclat.Sclat; -import be4rjp.sclat.data.Color; import be4rjp.sclat.data.DataMgr; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -12,7 +11,7 @@ * * @author Be4rJP */ -public class ColorMgr { +public class TeamColorSets { public synchronized static void SetupColor() { Color blue = new Color("Blue"); blue.setWool(Material.BLUE_WOOL); diff --git a/src/main/java/be4rjp/sclat/api/config/WeaponConfig.java b/src/main/java/be4rjp/sclat/api/config/WeaponConfig.java new file mode 100644 index 0000000..50bdf7d --- /dev/null +++ b/src/main/java/be4rjp/sclat/api/config/WeaponConfig.java @@ -0,0 +1,40 @@ +package be4rjp.sclat.api.config; + +import be4rjp.sclat.Sclat; +import be4rjp.sclat.data.DataMgr; +import be4rjp.sclat.data.WeaponClass; +import org.bukkit.configuration.ConfigurationSection; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +@NullMarked +public class WeaponConfig { + // Todo: needs more refactorization + public static WeaponClass parseSection(String className, ConfigurationSection section) { + List missingProperties = new ArrayList<>(); + String weaponName = getStringOrRecord(section, "MainWeaponName", missingProperties); + String subWeaponName = getStringOrRecord(section, "SubWeaponName", missingProperties); + String spWeaponName = getStringOrRecord(section, "SPWeaponName", missingProperties); + if (!missingProperties.isEmpty()) { + Sclat.logger.warn("Missing weapon properties in {}: [{}]", className, String.join(", ", missingProperties)); + } + + WeaponClass wc = new WeaponClass(className); + wc.setMainWeapon(DataMgr.getWeapon(weaponName)); + wc.setSubWeaponName(subWeaponName); + wc.setSPWeaponName(spWeaponName); + return wc; + } + + @Nullable + private static String getStringOrRecord(ConfigurationSection section, String path, List missingList) { + String result = section.getString(path); + if (result == null) { + missingList.add(path); + } + return result; + } +} diff --git a/src/main/java/be4rjp/sclat/Glow.java b/src/main/java/be4rjp/sclat/api/enchant/GlowEnchant.java similarity index 76% rename from src/main/java/be4rjp/sclat/Glow.java rename to src/main/java/be4rjp/sclat/api/enchant/GlowEnchant.java index 185aee6..2d5f2d6 100644 --- a/src/main/java/be4rjp/sclat/Glow.java +++ b/src/main/java/be4rjp/sclat/api/enchant/GlowEnchant.java @@ -1,4 +1,4 @@ -package be4rjp.sclat; +package be4rjp.sclat.api.enchant; import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.EnchantmentTarget; @@ -8,11 +8,11 @@ import java.lang.reflect.Field; import java.util.Map; -public class Glow extends EnchantmentWrapper { +public class GlowEnchant extends EnchantmentWrapper { - private static Glow glow = null; + private static GlowEnchant glowEnchant = null; - public Glow() { + public GlowEnchant() { super("sclatg"); } @@ -42,26 +42,26 @@ public int getStartLevel() { public ItemStack enchantGlow(ItemStack is) { enableGlow(); - is.addEnchantment(glow, 1); + is.addEnchantment(glowEnchant, 1); return is; } public ItemStack removeGlow(ItemStack is) { enableGlow(); - is.removeEnchantment(glow); + is.removeEnchantment(glowEnchant); return is; } public Boolean isGlowing(ItemStack is) { enableGlow(); - return is.getEnchantments().containsKey(glow); + return is.getEnchantments().containsKey(glowEnchant); } @SuppressWarnings("unchecked") public void enableGlow() { try { - if (glow == null) { - glow = new Glow(); + if (glowEnchant == null) { + glowEnchant = new GlowEnchant(); Field f = Enchantment.class.getDeclaredField("acceptingNew"); f.setAccessible(true); f.set(null, true); @@ -69,7 +69,7 @@ public void enableGlow() { hmapf.setAccessible(true); Map hmap = (Map) hmapf.get(hmapf); if (!hmap.containsKey("sclatg")) { - Enchantment.registerEnchantment(glow); + Enchantment.registerEnchantment(glowEnchant); } } } catch (Exception ex) { diff --git a/src/main/java/be4rjp/sclat/server/EquipmentClient.java b/src/main/java/be4rjp/sclat/api/equipment/EquipmentClient.java similarity index 98% rename from src/main/java/be4rjp/sclat/server/EquipmentClient.java rename to src/main/java/be4rjp/sclat/api/equipment/EquipmentClient.java index fbfd837..c3a42b5 100644 --- a/src/main/java/be4rjp/sclat/server/EquipmentClient.java +++ b/src/main/java/be4rjp/sclat/api/equipment/EquipmentClient.java @@ -1,4 +1,4 @@ -package be4rjp.sclat.server; +package be4rjp.sclat.api.equipment; import be4rjp.sclat.Sclat; import org.bukkit.scheduler.BukkitRunnable; diff --git a/src/main/java/be4rjp/sclat/server/EquipmentServer.java b/src/main/java/be4rjp/sclat/api/equipment/EquipmentServer.java similarity index 98% rename from src/main/java/be4rjp/sclat/server/EquipmentServer.java rename to src/main/java/be4rjp/sclat/api/equipment/EquipmentServer.java index 1e2b1f5..4eed02f 100644 --- a/src/main/java/be4rjp/sclat/server/EquipmentServer.java +++ b/src/main/java/be4rjp/sclat/api/equipment/EquipmentServer.java @@ -1,4 +1,4 @@ -package be4rjp.sclat.server; +package be4rjp.sclat.api.equipment; import be4rjp.sclat.Sclat; diff --git a/src/main/java/be4rjp/sclat/server/EquipmentServerManager.java b/src/main/java/be4rjp/sclat/api/equipment/EquipmentServerManager.java similarity index 97% rename from src/main/java/be4rjp/sclat/server/EquipmentServerManager.java rename to src/main/java/be4rjp/sclat/api/equipment/EquipmentServerManager.java index a177969..1bcdef5 100644 --- a/src/main/java/be4rjp/sclat/server/EquipmentServerManager.java +++ b/src/main/java/be4rjp/sclat/api/equipment/EquipmentServerManager.java @@ -1,4 +1,4 @@ -package be4rjp.sclat.server; +package be4rjp.sclat.api.equipment; import be4rjp.sclat.Sclat; import be4rjp.sclat.api.SclatUtil; diff --git a/src/main/java/be4rjp/sclat/api/holo/HologramLine.java b/src/main/java/be4rjp/sclat/api/holo/HologramLine.java new file mode 100644 index 0000000..c80a242 --- /dev/null +++ b/src/main/java/be4rjp/sclat/api/holo/HologramLine.java @@ -0,0 +1,75 @@ +package be4rjp.sclat.api.holo; + +import be4rjp.sclat.api.packet.Packets; +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class HologramLine { + private final int entityId; + private final UUID uuid; + private final Location location; + private String text; + private boolean visible = true; + + public HologramLine(Location loc, String text) { + this.entityId = ThreadLocalRandom.current().nextInt(100000, 999999); + this.uuid = UUID.randomUUID(); + this.location = loc; + this.text = text; + } + + public void setText(String text) { + this.text = text; + } + public void setVisible(boolean visible) { + this.visible = visible; + } + public int getEntityId() { + return entityId; + } + + public void sendSpawn(Player player) { + // Spawn Packet (1.14.4 ArmorStand ID is 1) + PacketContainer spawn = Packets.createPacket(PacketType.Play.Server.SPAWN_ENTITY_LIVING); + spawn.getIntegers().write(0, entityId); + spawn.getUUIDs().write(0, uuid); + spawn.getIntegers().write(1, 1); + spawn.getDoubles().write(0, location.getX()).write(1, location.getY()).write(2, location.getZ()); + + // Metadata Packet + PacketContainer meta = Packets.createPacket(PacketType.Play.Server.ENTITY_METADATA); + meta.getIntegers().write(0, entityId); + + WrappedDataWatcher watcher = new WrappedDataWatcher(); + watcher.setObject(0, WrappedDataWatcher.Registry.get(Byte.class), (byte) 0x20); // Invisible + watcher.setObject(2, WrappedDataWatcher.Registry.getChatComponentSerializer(true), + Optional.of(WrappedChatComponent.fromText(text).getHandle())); + watcher.setObject(3, WrappedDataWatcher.Registry.get(Boolean.class), visible); + watcher.setObject(14, WrappedDataWatcher.Registry.get(Byte.class), (byte) 0x01); // Small + + meta.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); + + Packets.sendServerPacket(player, spawn); + Packets.sendServerPacket(player, meta); + } + + public void sendDestroy(Player player) { + PacketContainer destroy = ProtocolLibrary.getProtocolManager() + .createPacket(PacketType.Play.Server.ENTITY_DESTROY); + destroy.getIntegerArrays().write(0, new int[]{entityId}); + try { + ProtocolLibrary.getProtocolManager().sendServerPacket(player, destroy); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/be4rjp/sclat/api/holo/RankingHolograms.java b/src/main/java/be4rjp/sclat/api/holo/RankingHolograms.java index bad6e3f..01766bd 100644 --- a/src/main/java/be4rjp/sclat/api/holo/RankingHolograms.java +++ b/src/main/java/be4rjp/sclat/api/holo/RankingHolograms.java @@ -1,19 +1,20 @@ package be4rjp.sclat.api.holo; import be4rjp.sclat.Sclat; -import be4rjp.sclat.data.RankingType; +import be4rjp.sclat.api.rank.RankingType; +import be4rjp.sclat.api.rank.RankingUpdater; +import be4rjp.sclat.api.rank.Ratings; import be4rjp.sclat.manager.PlayerStatusMgr; -import be4rjp.sclat.manager.RankMgr; -import net.minecraft.server.v1_14_R1.EntityArmorStand; -import net.minecraft.server.v1_14_R1.PacketPlayOutEntityDestroy; -import net.minecraft.server.v1_14_R1.PacketPlayOutSpawnEntityLiving; -import net.minecraft.server.v1_14_R1.WorldServer; +import net.minecraft.server.v1_15_R1.EntityArmorStand; +import net.minecraft.server.v1_15_R1.PacketPlayOutEntityDestroy; +import net.minecraft.server.v1_15_R1.PacketPlayOutSpawnEntityLiving; +import net.minecraft.server.v1_15_R1.WorldServer; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.craftbukkit.v1_14_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_14_R1.util.CraftChatMessage; +import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_15_R1.util.CraftChatMessage; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -210,7 +211,7 @@ public void run() { list.add(armorStand); if (rankingType == RankingType.TOTAL) { - String uuid = RankMgr.ranking.get(i); + String uuid = RankingUpdater.ranking.get(i); String mcid = conf.getUUIDCash().getString(uuid); int rank = PlayerStatusMgr.getRank(uuid); @@ -218,14 +219,14 @@ public void run() { if (rank != 0) { armorStand.setCustomName( CraftChatMessage.fromStringOrNull("§e" + String.valueOf(i + 1) + "位 §f" + mcid - + " §6Rank : §r" + rank + " [§b " + RankMgr.toABCRank(rank) + " §f]")); + + " §6Rank : §r" + rank + " [§b " + Ratings.toABCRank(rank) + " §f]")); } else { armorStand.setCustomName(CraftChatMessage.fromStringOrNull("--")); } } if (rankingType == RankingType.KILL) { - String uuid = RankMgr.killRanking.get(i); + String uuid = RankingUpdater.killRanking.get(i); String mcid = conf.getUUIDCash().getString(uuid); int kill = PlayerStatusMgr.getKill(uuid); @@ -239,7 +240,7 @@ public void run() { } if (rankingType == RankingType.PAINT) { - String uuid = RankMgr.paintRanking.get(i); + String uuid = RankingUpdater.paintRanking.get(i); String mcid = conf.getUUIDCash().getString(uuid); int paint = PlayerStatusMgr.getPaint(uuid); @@ -261,7 +262,7 @@ public void run() { if (rankingType == RankingType.TOTAL) { String mcid = player.getName(); int ranking = 1; - for (String uuid : RankMgr.ranking) { + for (String uuid : RankingUpdater.ranking) { if (uuid.equals(player.getUniqueId().toString())) break; ranking++; @@ -270,13 +271,13 @@ public void run() { int rank = PlayerStatusMgr.getRank(player.getUniqueId().toString()); you.setCustomName(CraftChatMessage.fromStringOrNull("§aYou ->> §e" + (rank == 0 ? "-" : ranking) - + "位 §f" + mcid + " §6Rank : §r" + rank + " [§b " + RankMgr.toABCRank(rank) + " §f]")); + + "位 §f" + mcid + " §6Rank : §r" + rank + " [§b " + Ratings.toABCRank(rank) + " §f]")); } if (rankingType == RankingType.KILL) { String mcid = player.getName(); int ranking = 1; - for (String uuid : RankMgr.killRanking) { + for (String uuid : RankingUpdater.killRanking) { if (uuid.equals(player.getUniqueId().toString())) break; ranking++; @@ -291,7 +292,7 @@ public void run() { if (rankingType == RankingType.PAINT) { String mcid = player.getName(); int ranking = 1; - for (String uuid : RankMgr.paintRanking) { + for (String uuid : RankingUpdater.paintRanking) { if (uuid.equals(player.getUniqueId().toString())) break; ranking++; diff --git a/src/main/java/be4rjp/sclat/api/packet/EntityPackets.java b/src/main/java/be4rjp/sclat/api/packet/EntityPackets.java new file mode 100644 index 0000000..b059d00 --- /dev/null +++ b/src/main/java/be4rjp/sclat/api/packet/EntityPackets.java @@ -0,0 +1,15 @@ +package be4rjp.sclat.api.packet; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import org.bukkit.entity.Player; +import org.jspecify.annotations.NullMarked; + +@NullMarked +public class EntityPackets { + public static boolean sendDestroyEntities(Player player, int... entityIds) { + PacketContainer destroyPacket = Packets.createPacket(PacketType.Play.Server.ENTITY_DESTROY); + destroyPacket.getIntegerArrays().write(0, entityIds); + return Packets.sendServerPacket(player, destroyPacket); + } +} diff --git a/src/main/java/be4rjp/sclat/api/packet/Packets.java b/src/main/java/be4rjp/sclat/api/packet/Packets.java new file mode 100644 index 0000000..73030b3 --- /dev/null +++ b/src/main/java/be4rjp/sclat/api/packet/Packets.java @@ -0,0 +1,48 @@ +package be4rjp.sclat.api.packet; + +import be4rjp.sclat.Sclat; +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.PacketContainer; +import org.bukkit.entity.Player; +import org.jspecify.annotations.NullMarked; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.InvocationTargetException; + +@NullMarked +public class Packets { + private static final Logger logger = LoggerFactory.getLogger(EntityPackets.class); + public static ProtocolManager manager() { + return Sclat.protocolManager; + } + + public static PacketContainer createPacket(PacketType packetType) { + return manager().createPacket(packetType); + } + + public static PacketContainer createPacket(PacketType packetType, boolean b) { + return manager().createPacket(packetType, b); + } + + public static boolean sendServerPacket(Player player, PacketContainer packet) { + try { + manager().sendServerPacket(player, packet); + return true; + } catch (InvocationTargetException e) { + logger.error("Failed to send packet", e); + return false; + } + } + + public static boolean broadcastServerPacket(PacketContainer packet) { + try { + manager().broadcastServerPacket(packet); + return true; + } catch (Exception e) { + logger.error("Failed to broadcast packet", e); + return false; + } + } +} diff --git a/src/main/java/be4rjp/sclat/api/packet/WorldPackets.java b/src/main/java/be4rjp/sclat/api/packet/WorldPackets.java new file mode 100644 index 0000000..d3e49d6 --- /dev/null +++ b/src/main/java/be4rjp/sclat/api/packet/WorldPackets.java @@ -0,0 +1,102 @@ +package be4rjp.sclat.api.packet; + +import be4rjp.sclat.data.DataMgr; +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.EnumWrappers; +import com.comphenix.protocol.wrappers.WrappedBlockData; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +public class WorldPackets { + public static boolean broadcastBlockChange(Location location, Material material) { + PacketContainer packet = Packets.createPacket(PacketType.Play.Server.BLOCK_CHANGE); + packet.getBlockPositionModifier().write(0, new BlockPosition(location.toVector())); + packet.getBlockData().write(0, WrappedBlockData.createData(material)); + return Packets.broadcastServerPacket(packet); + } + + public static boolean sendWorldBorderWarningPacket(Player player) { + PacketContainer packet = Packets.createPacket(PacketType.Play.Server.WORLD_BORDER); + + // Set the action to INITIALIZE (Enum index 3 in 1.14.4) + packet.getWorldBorderActions().write(0, EnumWrappers.WorldBorderAction.INITIALIZE); + + // Set Center (far away from the player to trigger the warning) + packet.getDoubles().write(0, player.getLocation().getX() + 10000.0); // Center X + packet.getDoubles().write(1, player.getLocation().getZ() + 10000.0); // Center Z + + // Set Sizes + packet.getDoubles().write(2, 0.0); // Old radius + packet.getDoubles().write(3, 1.0); // New radius (Size 1) + + // Set Lerp Speed (Time to reach new radius) + packet.getLongs().write(0, 0L); + + // Set Other Required Data for INITIALIZE + packet.getIntegers().write(0, 29999984); // Portal Teleport Boundary + packet.getIntegers().write(1, 5); // Warning Time + packet.getIntegers().write(2, 5); // Warning Distance + + return Packets.sendServerPacket(player, packet); + } + + public static boolean sendWorldBorderWarningClearPacket(Player player) { + PacketContainer packet = Packets.createPacket(PacketType.Play.Server.WORLD_BORDER); + + // Set the action to INITIALIZE + packet.getWorldBorderActions().write(0, EnumWrappers.WorldBorderAction.INITIALIZE); + + // Set Center to player's current position so they are in the middle + packet.getDoubles().write(0, player.getLocation().getX()); // Center X + packet.getDoubles().write(1, player.getLocation().getZ()); // Center Z + + // Set Sizes to maximum (30 million is the Minecraft default limit) + packet.getDoubles().write(2, 30_000_000.0); // Old radius + packet.getDoubles().write(3, 30_000_000.0); // New radius + + // Set Lerp Speed + packet.getLongs().write(0, 0L); + + // Set Required Constants + packet.getIntegers().write(0, 29999984); // Portal boundary + packet.getIntegers().write(1, 5); // Warning time + packet.getIntegers().write(2, 5); // Warning distance + + return Packets.sendServerPacket(player, packet); + } + + public static boolean setPlayerFOV(Player player, float fov) { + PacketContainer packet = Packets.createPacket(PacketType.Play.Server.ABILITIES); + + // 1. Set the walk speed (which controls the FOV zoom/widening) + // In 1.14.4, walkSpeed is usually the second float (index 1) + packet.getFloat().write(1, fov); + + // 2. Set the fly speed (index 0) to the player's current fly speed to avoid + // bugs + packet.getFloat().write(0, player.getFlySpeed()); + + // 3. Set the flags (invulnerable, flying, canFly, instabuild) + // We use a bitmask or just mirror the player's current state + byte flags = 0; + if (player.getAllowFlight()) + flags |= 0x04; + if (player.isFlying()) + flags |= 0x02; + // (Add more flags if you need to maintain invulnerability or creative mode + // status) + + packet.getBooleans().write(0, player.isInvulnerable()); + packet.getBooleans().write(1, player.isFlying()); + packet.getBooleans().write(2, player.getAllowFlight()); + packet.getBooleans().write(3, player.getGameMode() == org.bukkit.GameMode.CREATIVE); + + // Update your local data manager + DataMgr.getPlayerData(player).setFov(fov); + + return Packets.sendServerPacket(player, packet); + } +} diff --git a/src/main/java/be4rjp/sclat/api/player/PlayerData.java b/src/main/java/be4rjp/sclat/api/player/PlayerData.java index 35aa158..1c3d6d9 100644 --- a/src/main/java/be4rjp/sclat/api/player/PlayerData.java +++ b/src/main/java/be4rjp/sclat/api/player/PlayerData.java @@ -4,7 +4,7 @@ import be4rjp.sclat.data.MainWeapon; import be4rjp.sclat.data.Match; import be4rjp.sclat.data.WeaponClass; -import net.minecraft.server.v1_14_R1.ItemStack; +import net.minecraft.server.v1_15_R1.ItemStack; import org.bukkit.Location; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Player; diff --git a/src/main/java/be4rjp/sclat/data/RankingType.java b/src/main/java/be4rjp/sclat/api/rank/RankingType.java similarity index 61% rename from src/main/java/be4rjp/sclat/data/RankingType.java rename to src/main/java/be4rjp/sclat/api/rank/RankingType.java index d22d028..5272387 100644 --- a/src/main/java/be4rjp/sclat/data/RankingType.java +++ b/src/main/java/be4rjp/sclat/api/rank/RankingType.java @@ -1,4 +1,4 @@ -package be4rjp.sclat.data; +package be4rjp.sclat.api.rank; public enum RankingType { TOTAL, KILL, PAINT diff --git a/src/main/java/be4rjp/sclat/manager/RankMgr.java b/src/main/java/be4rjp/sclat/api/rank/RankingUpdater.java similarity index 62% rename from src/main/java/be4rjp/sclat/manager/RankMgr.java rename to src/main/java/be4rjp/sclat/api/rank/RankingUpdater.java index a94e4bc..73c3b41 100644 --- a/src/main/java/be4rjp/sclat/manager/RankMgr.java +++ b/src/main/java/be4rjp/sclat/api/rank/RankingUpdater.java @@ -1,5 +1,4 @@ - -package be4rjp.sclat.manager; +package be4rjp.sclat.api.rank; import be4rjp.sclat.Sclat; import be4rjp.sclat.api.holo.RankingHolograms; @@ -15,99 +14,11 @@ import static be4rjp.sclat.Sclat.conf; -/** - * - * @author Be4rJP - */ -public class RankMgr { - - private static final String[] ranks = {"E", "D-", "D", "D+", "C-", "C", "C+", "B-", "B", "B+", "A-", "A", "A+", - "S-", "S", "S+", "MASTER"}; - private static final int MAX_RATE = (ranks.length - 1) * 500; - +public class RankingUpdater { public static List ranking = new ArrayList<>(); public static List killRanking = new ArrayList<>(); public static List paintRanking = new ArrayList<>(); - // レートを500単位で区切ってランク付けする - public static String toABCRank(int ir) { - return ir >= 0 ? ranks[ir <= MAX_RATE ? ir / 500 : ranks.length - 1] : "UnRanked"; - } - public static int IndicateRankPointmove(Player p, int rankPoint) { - if (rankPoint == 0) - return 0; - - int rank = PlayerStatusMgr.getRank(p); - - double rank_Rate = 1.0; - - if (rank < 500) { - rank_Rate = 3.0; - } else if (rank < 2000) { - rank_Rate = 2.0; - } else if (rank < 3500) { - rank_Rate = 1.5; - } else if (rank < 6500) { - rank_Rate = 1.0; - } else if (rank < 8000) { - rank_Rate = 0.75; - } else if (rank < 20000) { - rank_Rate = 0.5; - } else { - rank_Rate = 0.2; - } - int plus = (int) ((double) rankPoint * rank_Rate); - return plus; - - } - public static void addPlayerRankPoint(String uuid, int rankPoint) { - if (rankPoint == 0) - return; - - int rank = PlayerStatusMgr.getRank(uuid); - - // int MAX_RATE = ranks.length * 500; - - double rank_Rate = 1.0; - - if (rank < 500) { - rank_Rate = 3.0; - } else if (rank < 2000) { - rank_Rate = 2.0; - } else if (rank < 3500) { - rank_Rate = 1.5; - } else if (rank < 6500) { - rank_Rate = 1.0; - } else if (rank < 8000) { - rank_Rate = 0.75; - } else if (rank < 20000) { - rank_Rate = 0.5; - } else { - rank_Rate = 0.2; - } - - // if(rank >= MAX_RATE) { - // if(rankPoint < 0){ - // double minusRate = (double)MAX_RATE / ((double)MAX_RATE - (double)rank); - // int minus = (int)((double)rankPoint * minusRate); - // PlayerStatusMgr.addRank(uuid, -minus); - // } - // return; - // } - int plus = (int) ((double) rankPoint * rank_Rate); - if (plus > 0) { - // double plusRate = ((double)MAX_RATE - (double)rank) / (double)MAX_RATE; - // int plus = (int)((double)rankPoint * plusRate); - PlayerStatusMgr.addRank(uuid, plus); - } - // }else{ - // double minusRate = (double)MAX_RATE / ((double)MAX_RATE - (double)rank); - // int minus = (int)((double)rankPoint * minusRate); - // PlayerStatusMgr.addRank(uuid, minus); - // } - - } - public static void makeRankingAsync() { BukkitRunnable async = new BukkitRunnable() { @Override diff --git a/src/main/java/be4rjp/sclat/api/rank/Ratings.java b/src/main/java/be4rjp/sclat/api/rank/Ratings.java new file mode 100644 index 0000000..4efda7e --- /dev/null +++ b/src/main/java/be4rjp/sclat/api/rank/Ratings.java @@ -0,0 +1,79 @@ + +package be4rjp.sclat.api.rank; + +import be4rjp.sclat.manager.PlayerStatusMgr; +import org.bukkit.entity.Player; + +/** + * + * @author Be4rJP + */ +public class Ratings { + + private static final String[] ranks = {"E", "D-", "D", "D+", "C-", "C", "C+", "B-", "B", "B+", "A-", "A", "A+", + "S-", "S", "S+", "MASTER"}; + private static final int MAX_RATE = (ranks.length - 1) * 500; + + // レートを500単位で区切ってランク付けする + public static String toABCRank(int ir) { + return ir >= 0 ? ranks[ir <= MAX_RATE ? ir / 500 : ranks.length - 1] : "UnRanked"; + } + public static int IndicateRankPointmove(Player p, int rankPoint) { + if (rankPoint == 0) + return 0; + + int rank = PlayerStatusMgr.getRank(p); + + double rank_Rate = 1.0; + + if (rank < 500) { + rank_Rate = 3.0; + } else if (rank < 2000) { + rank_Rate = 2.0; + } else if (rank < 3500) { + rank_Rate = 1.5; + } else if (rank < 6500) { + rank_Rate = 1.0; + } else if (rank < 8000) { + rank_Rate = 0.75; + } else if (rank < 20000) { + rank_Rate = 0.5; + } else { + rank_Rate = 0.2; + } + int plus = (int) ((double) rankPoint * rank_Rate); + return plus; + + } + public static void addPlayerRankPoint(String uuid, int rankPoint) { + if (rankPoint == 0) + return; + + int rank = PlayerStatusMgr.getRank(uuid); + + // int MAX_RATE = ranks.length * 500; + + double rank_Rate = 1.0; + + if (rank < 500) { + rank_Rate = 3.0; + } else if (rank < 2000) { + rank_Rate = 2.0; + } else if (rank < 3500) { + rank_Rate = 1.5; + } else if (rank < 6500) { + rank_Rate = 1.0; + } else if (rank < 8000) { + rank_Rate = 0.75; + } else if (rank < 20000) { + rank_Rate = 0.5; + } else { + rank_Rate = 0.2; + } + + int plus = (int) ((double) rankPoint * rank_Rate); + if (plus > 0) { + PlayerStatusMgr.addRank(uuid, plus); + } + } +} diff --git a/src/main/java/be4rjp/sclat/api/raytrace/BoundingBox.java b/src/main/java/be4rjp/sclat/api/raytrace/BoundingBox.java index 3ae6907..47f2cb9 100644 --- a/src/main/java/be4rjp/sclat/api/raytrace/BoundingBox.java +++ b/src/main/java/be4rjp/sclat/api/raytrace/BoundingBox.java @@ -1,8 +1,8 @@ package be4rjp.sclat.api.raytrace; -import net.minecraft.server.v1_14_R1.AxisAlignedBB; -import org.bukkit.craftbukkit.v1_14_R1.entity.CraftEntity; +import net.minecraft.server.v1_15_R1.AxisAlignedBB; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftEntity; import org.bukkit.entity.Entity; import org.bukkit.util.Vector; diff --git a/src/main/java/be4rjp/sclat/data/NoteBlockSong.java b/src/main/java/be4rjp/sclat/api/song/NoteBlockSong.java similarity index 92% rename from src/main/java/be4rjp/sclat/data/NoteBlockSong.java rename to src/main/java/be4rjp/sclat/api/song/NoteBlockSong.java index c1c6bb3..8874808 100644 --- a/src/main/java/be4rjp/sclat/data/NoteBlockSong.java +++ b/src/main/java/be4rjp/sclat/api/song/NoteBlockSong.java @@ -1,5 +1,5 @@ -package be4rjp.sclat.data; +package be4rjp.sclat.api.song; import com.xxmicloxx.NoteBlockAPI.model.Song; diff --git a/src/main/java/be4rjp/sclat/api/MineStat.java b/src/main/java/be4rjp/sclat/api/status/MineStat.java similarity index 99% rename from src/main/java/be4rjp/sclat/api/MineStat.java rename to src/main/java/be4rjp/sclat/api/status/MineStat.java index dab7c24..2da322b 100644 --- a/src/main/java/be4rjp/sclat/api/MineStat.java +++ b/src/main/java/be4rjp/sclat/api/status/MineStat.java @@ -1,4 +1,4 @@ -package be4rjp.sclat.api; +package be4rjp.sclat.api.status; import java.io.BufferedReader; import java.io.DataOutputStream; diff --git a/src/main/java/be4rjp/sclat/data/ServerStatus.java b/src/main/java/be4rjp/sclat/api/status/ServerStatus.java similarity index 98% rename from src/main/java/be4rjp/sclat/data/ServerStatus.java rename to src/main/java/be4rjp/sclat/api/status/ServerStatus.java index 5e70bbd..1cf8941 100644 --- a/src/main/java/be4rjp/sclat/data/ServerStatus.java +++ b/src/main/java/be4rjp/sclat/api/status/ServerStatus.java @@ -1,7 +1,7 @@ -package be4rjp.sclat.data; +package be4rjp.sclat.api.status; import be4rjp.sclat.Sclat; -import be4rjp.sclat.api.MineStat; +import be4rjp.sclat.data.MatchServerRunnable; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.scheduler.BukkitRunnable; diff --git a/src/main/java/be4rjp/sclat/server/StatusClient.java b/src/main/java/be4rjp/sclat/api/status/StatusClient.java similarity index 98% rename from src/main/java/be4rjp/sclat/server/StatusClient.java rename to src/main/java/be4rjp/sclat/api/status/StatusClient.java index c53229d..5674d57 100644 --- a/src/main/java/be4rjp/sclat/server/StatusClient.java +++ b/src/main/java/be4rjp/sclat/api/status/StatusClient.java @@ -1,4 +1,4 @@ -package be4rjp.sclat.server; +package be4rjp.sclat.api.status; import be4rjp.sclat.Sclat; import org.bukkit.scheduler.BukkitRunnable; diff --git a/src/main/java/be4rjp/sclat/server/StatusServer.java b/src/main/java/be4rjp/sclat/api/status/StatusServer.java similarity index 97% rename from src/main/java/be4rjp/sclat/server/StatusServer.java rename to src/main/java/be4rjp/sclat/api/status/StatusServer.java index 585a24d..9f592b2 100644 --- a/src/main/java/be4rjp/sclat/server/StatusServer.java +++ b/src/main/java/be4rjp/sclat/api/status/StatusServer.java @@ -1,13 +1,12 @@ -package be4rjp.sclat.server; +package be4rjp.sclat.api.status; import be4rjp.sclat.Sclat; import be4rjp.sclat.api.MessageType; import be4rjp.sclat.api.SclatUtil; import be4rjp.sclat.api.SoundType; -import be4rjp.sclat.data.ServerStatus; +import be4rjp.sclat.api.rank.Ratings; import be4rjp.sclat.manager.PlayerReturnManager; import be4rjp.sclat.manager.PlayerStatusMgr; -import be4rjp.sclat.manager.RankMgr; import be4rjp.sclat.manager.ServerStatusManager; import java.io.BufferedReader; @@ -115,7 +114,7 @@ public void run() { PlayerStatusMgr.addMoney(args[3], Integer.parseInt(args[2])); break; case "rank" : - RankMgr.addPlayerRankPoint(args[3], Integer.parseInt(args[2])); + Ratings.addPlayerRankPoint(args[3], Integer.parseInt(args[2])); break; case "level" : PlayerStatusMgr.addLv(args[3], Integer.parseInt(args[2])); diff --git a/src/main/java/be4rjp/sclat/api/team/Team.java b/src/main/java/be4rjp/sclat/api/team/Team.java index 254ef80..01f5c6c 100644 --- a/src/main/java/be4rjp/sclat/api/team/Team.java +++ b/src/main/java/be4rjp/sclat/api/team/Team.java @@ -1,6 +1,6 @@ package be4rjp.sclat.api.team; -import be4rjp.sclat.data.Color; +import be4rjp.sclat.api.color.Color; /** * diff --git a/src/main/java/be4rjp/sclat/api/wiremesh/Wiremesh.java b/src/main/java/be4rjp/sclat/api/wiremesh/Wiremesh.java index ccb726d..f88e3b6 100644 --- a/src/main/java/be4rjp/sclat/api/wiremesh/Wiremesh.java +++ b/src/main/java/be4rjp/sclat/api/wiremesh/Wiremesh.java @@ -1,24 +1,24 @@ package be4rjp.sclat.api.wiremesh; import be4rjp.sclat.Sclat; -import net.minecraft.server.v1_14_R1.DataWatcher; -import net.minecraft.server.v1_14_R1.EntityArmorStand; -import net.minecraft.server.v1_14_R1.EntityFallingBlock; -import net.minecraft.server.v1_14_R1.EntityPlayer; -import net.minecraft.server.v1_14_R1.IBlockData; -import net.minecraft.server.v1_14_R1.PacketPlayOutEntityDestroy; -import net.minecraft.server.v1_14_R1.PacketPlayOutEntityMetadata; -import net.minecraft.server.v1_14_R1.PacketPlayOutMount; -import net.minecraft.server.v1_14_R1.PacketPlayOutSpawnEntity; -import net.minecraft.server.v1_14_R1.PacketPlayOutSpawnEntityLiving; -import net.minecraft.server.v1_14_R1.WorldServer; +import net.minecraft.server.v1_15_R1.DataWatcher; +import net.minecraft.server.v1_15_R1.EntityArmorStand; +import net.minecraft.server.v1_15_R1.EntityFallingBlock; +import net.minecraft.server.v1_15_R1.EntityPlayer; +import net.minecraft.server.v1_15_R1.IBlockData; +import net.minecraft.server.v1_15_R1.PacketPlayOutEntityDestroy; +import net.minecraft.server.v1_15_R1.PacketPlayOutEntityMetadata; +import net.minecraft.server.v1_15_R1.PacketPlayOutMount; +import net.minecraft.server.v1_15_R1.PacketPlayOutSpawnEntity; +import net.minecraft.server.v1_15_R1.PacketPlayOutSpawnEntityLiving; +import net.minecraft.server.v1_15_R1.WorldServer; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; -import org.bukkit.craftbukkit.v1_14_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_14_R1.block.data.CraftBlockData; -import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -97,7 +97,7 @@ public void run() { if (!playerList.contains(player)) { PacketPlayOutSpawnEntity fbPacket = new PacketPlayOutSpawnEntity(fb, - net.minecraft.server.v1_14_R1.Block.getCombinedId(ibd)); + net.minecraft.server.v1_15_R1.Block.getCombinedId(ibd)); entityPlayer.playerConnection.sendPacket(fbPacket); PacketPlayOutSpawnEntityLiving asPacket = new PacketPlayOutSpawnEntityLiving(as); entityPlayer.playerConnection.sendPacket(asPacket); diff --git a/src/main/java/be4rjp/sclat/commands/CommanderType.java b/src/main/java/be4rjp/sclat/commands/CommanderType.java deleted file mode 100644 index c2962a0..0000000 --- a/src/main/java/be4rjp/sclat/commands/CommanderType.java +++ /dev/null @@ -1,5 +0,0 @@ -package be4rjp.sclat.commands; - -public enum CommanderType { - MEMBER, ADMIN, CONSOLE -} diff --git a/src/main/java/be4rjp/sclat/commands/SclatCommand.java b/src/main/java/be4rjp/sclat/commands/SclatCommand.java new file mode 100644 index 0000000..92316c5 --- /dev/null +++ b/src/main/java/be4rjp/sclat/commands/SclatCommand.java @@ -0,0 +1,186 @@ +package be4rjp.sclat.commands; + +import be4rjp.sclat.Sclat; +import be4rjp.sclat.api.BungeeCordAPI; +import be4rjp.sclat.api.MessageType; +import be4rjp.sclat.api.SclatUtil; +import be4rjp.sclat.api.SoundType; +import be4rjp.sclat.api.equipment.EquipmentClient; +import be4rjp.sclat.api.status.ServerStatus; +import be4rjp.sclat.data.DataMgr; +import be4rjp.sclat.emblem.EmblemManager; +import be4rjp.sclat.manager.ServerStatusManager; +import co.aikar.commands.BaseCommand; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; +import co.aikar.commands.annotation.CommandPermission; +import co.aikar.commands.annotation.Subcommand; +import co.aikar.commands.bukkit.contexts.OnlinePlayer; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static be4rjp.sclat.Sclat.conf; + +@CommandAlias("sclat") +@CommandPermission("sclat.admin") +public class SclatCommand extends BaseCommand { + private final Sclat plugin; + public SclatCommand(Sclat plugin) { + this.plugin = plugin; + } + + @Subcommand("setUpdateRate") + public void onSetUpdateRate(CommandSender sender, int rate) { + conf.getConfig().set("BlockUpdateRate", rate); + sender.sendMessage("setConfig [BlockUpdateRate] : " + rate); + } + + @Subcommand("fly") + @CommandCompletion("*") + public void onFly(CommandSender sender, OnlinePlayer targetPlayer) { + String playerName = targetPlayer.player.getName(); + Sclat.flyList.add(playerName); + sender.sendMessage(String.format("%s was added to flyList", playerName)); + } + + @Subcommand("reloadEmblems") + public void onReloadEmblems(CommandSender sender) { + conf.loadEmblemLoreData(); + conf.loadEmblemUserData(); + sender.sendMessage("称号のデータを再読み込みしました。"); + } + + @Subcommand("migrateEmblems") + public void onMigrateEmblems(CommandSender sender) { + if (!conf.emblemsFile.exists()) { + sender.sendMessage(ChatColor.RED + "Old emblem userdata file isn't exists."); + return; + } + + YamlConfiguration oldData = YamlConfiguration.loadConfiguration(conf.emblemsFile); + Set dataUuids = oldData.getKeys(false); + for (String _uuid : dataUuids) { + List userEmblems = oldData.getStringList(_uuid); + for (String emblem : userEmblems) { + conf.getEmblemUserdata().set(_uuid + "." + emblem, 1); + } + } + sender.sendMessage(ChatColor.GREEN + "Migration was succeeded!"); + + try { + conf.saveEmblemUserdata(); + sender.sendMessage(ChatColor.GREEN + "Successfully to save emblem userdata"); + } catch (IOException e) { + sender.sendMessage(ChatColor.RED + "Failed to save emblem userdata"); + e.printStackTrace(); + } + } + + @Subcommand("saveEmblems") + public void onSaveEmblems(CommandSender sender) { + try { + conf.saveEmblemUserdata(); + sender.sendMessage(ChatColor.GREEN + "Successfully to save emblem userdata"); + } catch (IOException e) { + sender.sendMessage(ChatColor.RED + "Failed to save emblem userdata"); + e.printStackTrace(); + } + } + + @Subcommand("checkEmblems") + public void onCheckEmblems(CommandSender sender) { + Map> dataMap = EmblemManager.getDataMap(); + for (String _key : dataMap.keySet()) { + sender.sendMessage(_key); + Map playerUuids = dataMap.getOrDefault(_key, new HashMap<>()); + playerUuids.forEach((k, v) -> sender.sendMessage("- " + k + ": " + v)); + } + } + + @Subcommand("mod") + public void onMod(CommandSender sender, String serverName) { + if (sender instanceof Player) { + for (ServerStatus ss : ServerStatusManager.serverList) { + if (ss.getServerName().equals(serverName)) { + List commands = new ArrayList<>(); + commands.add("mod " + sender.getName()); + commands.add("stop"); + // Todo: use redis. fallbacks PluginMessaging + EquipmentClient sc = new EquipmentClient( + conf.getConfig().getString("EquipShare." + serverName + ".Host"), + conf.getConfig().getInt("EquipShare." + serverName + ".Port"), commands); + sc.startClient(); + + SclatUtil.sendMessage("Moderatorとして転送中...", MessageType.PLAYER, (Player) sender); + SclatUtil.sendMessage("2秒後に転送されます", MessageType.PLAYER, (Player) sender); + SclatUtil.playGameSound((Player) sender, SoundType.SUCCESS); + + BukkitRunnable task = new BukkitRunnable() { + @Override + public void run() { + try { + BungeeCordAPI.PlayerSendServer((Player) sender, ss.getServerName()); + DataMgr.getPlayerData((Player) sender).setServerName(ss.getDisplayName()); + } catch (Exception ignored) { + } + } + }; + task.runTaskLater(Sclat.getPlugin(), 40); + } + } + } else { + sender.sendMessage(ChatColor.RED + "This command is player only."); + } + } + + @Subcommand("ss") + @CommandPermission("sclat.admin") + public class SS extends BaseCommand { + public void onMT(CommandSender sender, String server, boolean toMaintenance) { + for (ServerStatus ss : ServerStatusManager.serverList) { + if (ss.getServerName().equals(server)) { + ss.setMaintenance(toMaintenance); + sender.sendMessage("Switched " + ss.getDisplayName() + " §rto " + + (toMaintenance ? "§cMAINTENANCE" : "§6NORMAL")); + return; + } + } + } + } + + @Subcommand("tutorial") + public class Tutorial extends BaseCommand { + @Subcommand("add") + public void onAdd(CommandSender sender, String server) { + List list = Sclat.tutorialServers.getConfig().getStringList("server-list"); + if (!list.contains(server)) { + list.add(server); + Sclat.tutorialServers.getConfig().set("server-list", list); + } else { + sender.sendMessage(ChatColor.RED + "This server is already exist."); + } + } + + @Subcommand("list") + public void onList(CommandSender sender) { + List list = Sclat.tutorialServers.getConfig().getStringList("server-list"); + sender.sendMessage(list.toString()); + } + + @Subcommand("reload") + public void onReload(CommandSender sender) { + Sclat.tutorialServers.reloadConfig(); + sender.sendMessage(ChatColor.GREEN + "Tutorial config was reloaded!"); + } + } +} diff --git a/src/main/java/be4rjp/sclat/commands/sclatCommandExecutor.java b/src/main/java/be4rjp/sclat/commands/sclatCommandExecutor.java deleted file mode 100644 index 4de9b89..0000000 --- a/src/main/java/be4rjp/sclat/commands/sclatCommandExecutor.java +++ /dev/null @@ -1,365 +0,0 @@ -package be4rjp.sclat.commands; - -import be4rjp.sclat.Sclat; -import be4rjp.sclat.api.MessageType; -import be4rjp.sclat.api.SclatUtil; -import be4rjp.sclat.api.ServerType; -import be4rjp.sclat.api.SoundType; -import be4rjp.sclat.data.DataMgr; -import be4rjp.sclat.data.ServerStatus; -import be4rjp.sclat.emblem.EmblemManager; -import be4rjp.sclat.manager.BungeeCordMgr; -import be4rjp.sclat.manager.ServerStatusManager; -import be4rjp.sclat.server.EquipmentClient; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabExecutor; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.jetbrains.annotations.NotNull; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static be4rjp.sclat.Sclat.conf; - -//sclat Command -// Todo: use cloud command framework -public class sclatCommandExecutor implements CommandExecutor, TabExecutor { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String commandLabel, - String[] args) { - if (args == null) - return false; - if (args.length == 0) - return false; - - // ------------------------Check sender type----------------------------- - CommanderType type = CommanderType.CONSOLE; - if (sender instanceof Player) { - if (sender.hasPermission("sclat.admin")) - type = CommanderType.ADMIN; - else - type = CommanderType.MEMBER; - } - // ---------------------------------------------------------------------- - - // -------------------------/sclat setUpdateRate---------------------------- - if (args[0].equalsIgnoreCase("setUpdateRate") || args[0].equalsIgnoreCase("sur")) { - if (args.length != 2) - return false; - - if (type == CommanderType.MEMBER) { - sender.sendMessage(ChatColor.RED + "You don't have permission."); - SclatUtil.playGameSound((Player) sender, SoundType.ERROR); - return true; - } - - String num = args[1]; - if (SclatUtil.isNumber(num)) { - Sclat.conf.getConfig().set("BlockUpdateRate", Integer.valueOf(num)); - sender.sendMessage("setConfig [BlockUpdateRate] : " + num); - return true; - } else { - sender.sendMessage("Please type with number"); - return false; - } - } - // ------------------------------------------------------------------------- - - // ----------------------------/sclat fly----------------------------------- - if (args[0].equalsIgnoreCase("fly")) { - if (args.length != 2) - return false; - - if (type == CommanderType.MEMBER) { - sender.sendMessage(ChatColor.RED + "You don't have permission."); - SclatUtil.playGameSound((Player) sender, SoundType.ERROR); - return true; - } - - String playerName = args[1]; - for (Player player : Sclat.getPlugin().getServer().getOnlinePlayers()) { - if (playerName.equals(player.getName())) { - Sclat.flyList.add(playerName); - return true; - } - } - } - // ------------------------------------------------------------------------- - - // ----- /sclat refresh-config----- - if (args[0].equalsIgnoreCase("refresh-config")) { - if (args.length != 2) - return false; - - if (type == CommanderType.MEMBER) { - sender.sendMessage(ChatColor.RED + "You don't have permission."); - SclatUtil.playGameSound((Player) sender, SoundType.ERROR); - return true; - } - - if (sender instanceof Player) { - Player player = (Player) sender; - String targetConfig = args[1]; - SclatUtil.sendMessage(String.format("%sの設定を再読み込み中...", targetConfig), MessageType.PLAYER, player); - switch (targetConfig.toLowerCase()) { - case "emblemuserdata" : - conf.loadEmblemUserData(); - break; - case "emblemloredata" : - conf.loadEmblemLoreData(); - break; - default : - SclatUtil.sendMessage("そのオプションは存在しません!", MessageType.PLAYER, player); - return true; - } - SclatUtil.sendMessage("再読み込み完了", MessageType.PLAYER, player); - } - } - // -------------------------------- - - // ----------------/sclat migrate-emblems----------------- - if (args[0].equalsIgnoreCase("migrate-emblems")) { - if (args.length != 1) - return false; - - if (type == CommanderType.MEMBER) { - sender.sendMessage(ChatColor.RED + "You don't have permission."); - SclatUtil.playGameSound((Player) sender, SoundType.ERROR); - return true; - } - - if (!conf.emblemsFile.exists()) { - sender.sendMessage(ChatColor.RED + "Old emblem userdata file isn't exists."); - return true; - } - - YamlConfiguration oldData = YamlConfiguration.loadConfiguration(conf.emblemsFile); - Set dataUuids = oldData.getKeys(false); - for (String _uuid : dataUuids) { - List userEmblems = oldData.getStringList(_uuid); - for (String emblem : userEmblems) { - conf.getEmblemUserdata().set(_uuid + "." + emblem, 1); - } - } - sender.sendMessage(ChatColor.GREEN + "Migration was succeeded!"); - - try { - conf.saveEmblemUserdata(); - sender.sendMessage(ChatColor.GREEN + "Successfully to save emblem userdata"); - } catch (IOException e) { - sender.sendMessage(ChatColor.RED + "Failed to save emblem userdata"); - e.printStackTrace(); - } - return true; - } - // ------------------------------------------------------- - - // ----------------/sclat save-emblems-------------------- - if (args[0].equalsIgnoreCase("save-emblems")) { - if (args.length != 1) - return false; - - if (type == CommanderType.MEMBER) { - sender.sendMessage(ChatColor.RED + "You don't have permission."); - SclatUtil.playGameSound((Player) sender, SoundType.ERROR); - return true; - } - - try { - conf.saveEmblemUserdata(); - sender.sendMessage(ChatColor.GREEN + "Successfully to save emblem userdata"); - } catch (IOException e) { - sender.sendMessage(ChatColor.RED + "Failed to save emblem userdata"); - e.printStackTrace(); - } - return true; - } - // ------------------------------------------------------- - - // ----------------/sclat check-emblems------------------- - if (args[0].equalsIgnoreCase("check-emblems")) { - if (args.length != 1) - return false; - - if (type == CommanderType.MEMBER) { - sender.sendMessage(ChatColor.RED + "You don't have permission."); - SclatUtil.playGameSound((Player) sender, SoundType.ERROR); - return true; - } - - Map> dataMap = EmblemManager.getDataMap(); - for (String _key : dataMap.keySet()) { - sender.sendMessage(_key); - Map playerUuids = dataMap.getOrDefault(_key, new HashMap<>()); - playerUuids.forEach((k, v) -> sender.sendMessage("- " + k + ": " + v)); - } - } - // -------------------------------------------------------- - - // ----------------------------/sclat mod----------------------------------- - if (args[0].equalsIgnoreCase("mod")) { - if (args.length != 2) - return false; - - if (type == CommanderType.MEMBER) { - sender.sendMessage(ChatColor.RED + "You don't have permission."); - SclatUtil.playGameSound((Player) sender, SoundType.ERROR); - return true; - } - - if (sender instanceof Player) { - String serverName = args[1]; - for (ServerStatus ss : ServerStatusManager.serverList) { - if (ss.getServerName().equals(serverName)) { - List commands = new ArrayList<>(); - commands.add("mod " + sender.getName()); - commands.add("stop"); - // Todo: use redis. fallbacks PluginMessaging - EquipmentClient sc = new EquipmentClient( - conf.getConfig().getString("EquipShare." + serverName + ".Host"), - conf.getConfig().getInt("EquipShare." + serverName + ".Port"), commands); - sc.startClient(); - - SclatUtil.sendMessage("Moderatorとして転送中...", MessageType.PLAYER, (Player) sender); - SclatUtil.sendMessage("2秒後に転送されます", MessageType.PLAYER, (Player) sender); - SclatUtil.playGameSound((Player) sender, SoundType.SUCCESS); - - BukkitRunnable task = new BukkitRunnable() { - @Override - public void run() { - try { - BungeeCordMgr.PlayerSendServer((Player) sender, ss.getServerName()); - DataMgr.getPlayerData((Player) sender).setServerName(ss.getDisplayName()); - } catch (Exception ignored) { - } - } - }; - task.runTaskLater(Sclat.getPlugin(), 40); - } - } - return true; - } else { - return false; - } - - } - // ------------------------------------------------------------------------- - - // ------------------/sclat ss --------------------- - if (args[0].equalsIgnoreCase("ss")) { - if (args.length < 4 || Sclat.type != ServerType.LOBBY) - return false; - - if (type == CommanderType.MEMBER) { - sender.sendMessage(ChatColor.RED + "You don't have permission."); - SclatUtil.playGameSound((Player) sender, SoundType.ERROR); - return true; - } - - if (args[1].equals("mt")) { - String server = args[2]; - for (ServerStatus ss : ServerStatusManager.serverList) { - if (ss.getServerName().equals(server)) { - ss.setMaintenance(args[3].equals("true")); - sender.sendMessage("Switched " + ss.getDisplayName() + " §rto " - + (args[3].equals("true") ? "§cMAINTENANCE" : "§6NORMAL")); - return true; - } - } - } - } - // ------------------------------------------------------------------------- - - // ---------------------/sclat tutorial