diff --git a/api/.flattened-pom.xml b/api/.flattened-pom.xml index 248948b60390775798196e415de01941c07a8bc2..611020c9007d795e105d27e57c8916b0baeb6f29 100644 --- a/api/.flattened-pom.xml +++ b/api/.flattened-pom.xml @@ -3,25 +3,31 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-API</artifactId> - <version>0.11.0</version> + <artifactId>MythicCosmetics-API</artifactId> + <version>0.0.1-SNAPSHOT</version> <dependencies> + <dependency> + <groupId>io.lumine</groupId> + <artifactId>Mythic-Dist</artifactId> + <version>5.8.0-SNAPSHOT</version> + <scope>provided</scope> + </dependency> <dependency> <groupId>io.lumine</groupId> <artifactId>LumineUtils</artifactId> - <version>1.19-SNAPSHOT</version> + <version>1.20-SNAPSHOT</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> - <version>1.18.22</version> + <version>1.18.32</version> <scope>provided</scope> </dependency> <dependency> <groupId>io.papermc.paper</groupId> <artifactId>paper-api</artifactId> - <version>1.20.1-R0.1-SNAPSHOT</version> + <version>1.21.3-R0.1-SNAPSHOT</version> <scope>provided</scope> </dependency> </dependencies> diff --git a/api/pom.xml b/api/pom.xml index 3bef2a4e162fe8996e048ae296477d0b6c5f3ae0..f7b2d4e4e89677e154f74062b2ab63872a4c10b3 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -1,11 +1,11 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <name>MCCosmetics-API</name> - <artifactId>MCCosmetics-API</artifactId> + <name>MythicCosmetics-API</name> + <artifactId>MythicCosmetics-API</artifactId> <parent> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> + <artifactId>MythicCosmetics-Plugin</artifactId> <version>${mccosmetics.version}</version> </parent> @@ -69,11 +69,17 @@ <dependencies> <!-- Main dependencies --> + <dependency> + <groupId>io.lumine</groupId> + <artifactId>Mythic-Dist</artifactId> + <version>${mythic.version}</version> + <scope>provided</scope> + </dependency> <dependency> <groupId>io.lumine</groupId> <artifactId>LumineUtils</artifactId> <version>${lumineutils.version}</version> - <scope>provided</scope> + <scope>provided</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> diff --git a/api/src/main/java/io/lumine/cosmetics/api/cosmetics/Cosmetic.java b/api/src/main/java/io/lumine/cosmetics/api/cosmetics/Cosmetic.java index 951c72c0ff4904376dce761aa5bb65af8a59f2ac..ec4f17f127b628a1812e956ebcc7f7f2761e14f3 100644 --- a/api/src/main/java/io/lumine/cosmetics/api/cosmetics/Cosmetic.java +++ b/api/src/main/java/io/lumine/cosmetics/api/cosmetics/Cosmetic.java @@ -4,8 +4,8 @@ import java.util.Optional; import io.lumine.cosmetics.api.cosmetics.manager.CosmeticManager; import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.utils.config.properties.PropertyHolder; -import io.lumine.utils.menu.MenuData; +import io.lumine.mythic.bukkit.utils.config.properties.PropertyHolder; +import io.lumine.mythic.bukkit.utils.menu.MenuData; import lombok.Getter; public abstract class Cosmetic implements PropertyHolder,MenuData<CosmeticProfile> { diff --git a/api/src/main/java/io/lumine/cosmetics/api/cosmetics/CosmeticVariant.java b/api/src/main/java/io/lumine/cosmetics/api/cosmetics/CosmeticVariant.java index e060d4da828ea31e5d3ef4950e1d638005d50d32..ca619394261ad5f3debfd589908898c6f9fda072 100644 --- a/api/src/main/java/io/lumine/cosmetics/api/cosmetics/CosmeticVariant.java +++ b/api/src/main/java/io/lumine/cosmetics/api/cosmetics/CosmeticVariant.java @@ -2,8 +2,8 @@ package io.lumine.cosmetics.api.cosmetics; import io.lumine.cosmetics.api.cosmetics.manager.CosmeticManager; import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.utils.config.properties.PropertyHolder; -import io.lumine.utils.menu.MenuData; +import io.lumine.mythic.bukkit.utils.config.properties.PropertyHolder; +import io.lumine.mythic.bukkit.utils.menu.MenuData; import lombok.Getter; public abstract class CosmeticVariant implements PropertyHolder,MenuData<CosmeticProfile> { diff --git a/api/src/main/java/io/lumine/cosmetics/api/cosmetics/EquippedCosmetic.java b/api/src/main/java/io/lumine/cosmetics/api/cosmetics/EquippedCosmetic.java index 5575e5c5721aa04fbb15d3cba5adf3a6020f60fb..29960b12817000551d3d0bb6badac908e52e2165 100644 --- a/api/src/main/java/io/lumine/cosmetics/api/cosmetics/EquippedCosmetic.java +++ b/api/src/main/java/io/lumine/cosmetics/api/cosmetics/EquippedCosmetic.java @@ -1,6 +1,6 @@ package io.lumine.cosmetics.api.cosmetics; -import io.lumine.utils.serialize.Chroma; +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import lombok.Data; @Data diff --git a/api/src/main/java/io/lumine/cosmetics/api/players/CosmeticProfile.java b/api/src/main/java/io/lumine/cosmetics/api/players/CosmeticProfile.java index 1013a0e102f10616a37794b3e8a6f044db6999b4..9468c33c76382bd220e0eac8c0f41753f60bcccc 100644 --- a/api/src/main/java/io/lumine/cosmetics/api/players/CosmeticProfile.java +++ b/api/src/main/java/io/lumine/cosmetics/api/players/CosmeticProfile.java @@ -3,8 +3,7 @@ package io.lumine.cosmetics.api.players; import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.cosmetics.CosmeticVariant; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; -import io.lumine.utils.serialize.Chroma; - +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import org.bukkit.entity.Player; import java.util.Optional; diff --git a/dist-premium/pom.xml b/dist-premium/pom.xml index d0142fc8418f7a166ed44a4ef2b3a6023d9d4763..558b65a5dcbbdb2970ccb24e815210cc9d3cabad 100644 --- a/dist-premium/pom.xml +++ b/dist-premium/pom.xml @@ -1,10 +1,10 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <artifactId>MCCosmetics-Premium</artifactId> + <artifactId>MythicCosmetics-Premium</artifactId> <parent> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> + <artifactId>MythicCosmetics-Plugin</artifactId> <version>${mccosmetics.version}</version> </parent> @@ -17,7 +17,7 @@ <dependencies> <dependency> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Dist</artifactId> + <artifactId>MythicCosmetics-Dist</artifactId> <version>${mccosmetics.version}</version> <scope>compile</scope> <optional>true</optional> @@ -30,7 +30,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> - <version>3.3.1-SNAPSHOT</version> + <version>3.5.3</version> <executions> <execution> <phase>package</phase> @@ -43,10 +43,6 @@ <pattern>org.bstats</pattern> <shadedPattern>io.lumine.cosmetics.metrics</shadedPattern> </relocation> - <relocation> - <pattern>io.lumine.utils</pattern> - <shadedPattern>io.lumine.cosmetics.utils</shadedPattern> - </relocation> </relocations> <minimizeJar>false</minimizeJar> </configuration> @@ -59,7 +55,7 @@ <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> - <finalName>MCCosmeticsPremium-${project.parent.version}</finalName> + <finalName>MythicCosmeticsPremium-${project.parent.version}</finalName> <outputDirectory>${ticxo.build.premium}</outputDirectory> </configuration> </plugin> @@ -67,10 +63,10 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>3.8.0</version> + <version>3.13.0</version> <configuration> - <source>16</source> - <target>16</target> + <source>21</source> + <target>21</target> </configuration> </plugin> diff --git a/dist/pom.xml b/dist/pom.xml index 7c2da175721238664d6a1b3d57478ab49253b4dc..bf5e2822a12879ee49923d8cc0d63f872e56054a 100644 --- a/dist/pom.xml +++ b/dist/pom.xml @@ -1,10 +1,10 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <artifactId>MCCosmetics-Dist</artifactId> + <artifactId>MythicCosmetics-Dist</artifactId> <parent> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> + <artifactId>MythicCosmetics-Plugin</artifactId> <version>${mccosmetics.version}</version> </parent> @@ -17,44 +17,20 @@ <dependencies> <dependency> <groupId>io.lumine</groupId> - <artifactId>LumineUtils</artifactId> - <version>${lumineutils.version}</version> - <scope>compile</scope> - <exclusions> - <exclusion> - <artifactId>*</artifactId> - <groupId>*</groupId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>io.lumine</groupId> - <artifactId>MCCosmetics</artifactId> + <artifactId>MythicCosmetics</artifactId> <version>${project.parent.version}</version> <scope>compile</scope> <optional>true</optional> </dependency> <dependency> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-v1_18_R2</artifactId> - <version>${project.parent.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-v1_19_R2</artifactId> + <artifactId>MythicCosmetics-v1_21_R2</artifactId> <version>${project.parent.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-v1_19_R3</artifactId> - <version>${project.parent.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-v1_20_R1</artifactId> + <artifactId>MythicCosmetics-v1_21_R3</artifactId> <version>${project.parent.version}</version> <scope>compile</scope> </dependency> @@ -66,7 +42,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> - <version>3.3.1-SNAPSHOT</version> + <version>3.5.3</version> <executions> <execution> <phase>package</phase> @@ -79,10 +55,6 @@ <pattern>org.bstats</pattern> <shadedPattern>io.lumine.cosmetics.metrics</shadedPattern> </relocation> - <relocation> - <pattern>io.lumine.utils</pattern> - <shadedPattern>io.lumine.cosmetics.utils</shadedPattern> - </relocation> <relocation> <pattern>com.ticxo.playeranimator</pattern> <shadedPattern>io.lumine.cosmetics.playeranimator</shadedPattern> @@ -99,7 +71,7 @@ <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> - <finalName>MCCosmetics-${project.parent.version}</finalName> + <finalName>MythicCosmetics-${project.parent.version}</finalName> <outputDirectory>${ticxo.build.location}</outputDirectory> </configuration> </plugin> @@ -107,10 +79,10 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>3.8.0</version> + <version>3.13.0</version> <configuration> - <source>16</source> - <target>16</target> + <source>21</source> + <target>21</target> </configuration> </plugin> diff --git a/plugin/pom.xml b/plugin/pom.xml index 1c53476ccbc2ebb5f4ee242112b6b6e7bfc71d0f..789dd8e60144ea21e7b3235ab0f56d016bc2b371 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -1,13 +1,13 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <artifactId>MCCosmetics</artifactId> + <artifactId>MythicCosmetics</artifactId> - <name>MCCosmetics</name> + <name>MythicCosmetics</name> <description>A plugin for creating insane cosmetics.</description> <parent> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> + <artifactId>MythicCosmetics-Plugin</artifactId> <version>${mccosmetics.version}</version> </parent> @@ -131,6 +131,10 @@ <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> + <repository> + <id>worldedit</id> + <url>https://maven.enginehub.org/repo/</url> + </repository> </repositories> <pluginRepositories> <pluginRepository> @@ -144,22 +148,22 @@ </pluginRepositories> <dependencies> <dependency> - <groupId>com.sk89q.worldguard</groupId> - <artifactId>worldguard-bukkit</artifactId> - <version>7.0.2-SNAPSHOT</version> - <scope>provided</scope> + <groupId>io.lumine</groupId> + <artifactId>MythicCosmetics-API</artifactId> + <version>${project.parent.version}</version> + <scope>compile</scope> </dependency> <dependency> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-API</artifactId> - <version>0.8.0-SNAPSHOT</version> - <scope>compile</scope> + <artifactId>Mythic-Dist</artifactId> + <version>${mythic.version}</version> + <scope>provided</scope> </dependency> <dependency> <groupId>io.lumine</groupId> <artifactId>LumineUtils</artifactId> <version>${lumineutils.version}</version> - <scope>provided</scope> + <scope>provided</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> @@ -169,14 +173,14 @@ </dependency> <dependency> <groupId>com.ticxo.modelengine</groupId> - <artifactId>api</artifactId> - <version>R3.1.7</version> + <artifactId>ModelEngine</artifactId> + <version>R4.0.8</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.ticxo.playeranimator</groupId> <artifactId>PlayerAnimator</artifactId> - <version>R1.2.7</version> + <version>R1.2.8</version> </dependency> <!-- Spigot API --> @@ -196,31 +200,55 @@ </dependency> <!-- Other Requirements --> + <dependency> + <groupId>com.sk89q.worldedit</groupId> + <artifactId>worldedit-core</artifactId> + <version>7.3.6</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.sk89q.worldedit</groupId> + <artifactId>worldedit-bukkit</artifactId> + <version>7.3.6</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.sk89q.worldguard</groupId> + <artifactId>worldguard-core</artifactId> + <version>7.0.12</version> + <scope>provided</scope> + </dependency> <dependency> <groupId>com.comphenix.protocol</groupId> <artifactId>ProtocolLib-API</artifactId> <version>4.4.0</version> <scope>provided</scope> </dependency> + <dependency> <groupId>net.kyori</groupId> <artifactId>adventure-api</artifactId> - <version>4.8.1</version> - <scope>provided</scope> - <optional>true</optional> + <version>4.16.0</version> + <scope>provided</scope> </dependency> - - <!-- Compatibility --> <dependency> - <groupId>io.lumine</groupId> - <artifactId>Mythic-Dist</artifactId> - <version>5.0.3-SNAPSHOT</version> + <groupId>net.kyori</groupId> + <artifactId>adventure-platform-bukkit</artifactId> + <version>4.3.2</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.kyori</groupId> + <artifactId>adventure-text-minimessage</artifactId> + <version>4.16.0</version> <scope>provided</scope> </dependency> + + <!-- Compatibility --> <dependency> <groupId>io.lumine</groupId> <artifactId>LumineCore</artifactId> - <version>1.18-SNAPSHOT</version> + <version>1.20-SNAPSHOT</version> <scope>provided</scope> </dependency> <dependency> diff --git a/plugin/src/main/java/io/lumine/cosmetics/MCCosmeticsPlugin.java b/plugin/src/main/java/io/lumine/cosmetics/MCCosmeticsPlugin.java index 7826614f3978eb01267dd577912bcfee70b0f25a..961a784e654825ce839c7b349b002d53bd68914b 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/MCCosmeticsPlugin.java +++ b/plugin/src/main/java/io/lumine/cosmetics/MCCosmeticsPlugin.java @@ -14,6 +14,7 @@ import io.lumine.cosmetics.listeners.PlayerListeners; import io.lumine.cosmetics.logging.MCLogger; import io.lumine.cosmetics.managers.CosmeticsExecutor; import io.lumine.cosmetics.managers.back.BackManager; +import io.lumine.cosmetics.managers.chat.ChatTagManager; import io.lumine.cosmetics.managers.gestures.GestureManager; import io.lumine.cosmetics.managers.hats.HatManager; import io.lumine.cosmetics.managers.modelengine.MEGManager; @@ -25,11 +26,14 @@ import io.lumine.cosmetics.nms.VolatileCodeDisabled; import io.lumine.cosmetics.nms.VolatileCodeHandler; import io.lumine.cosmetics.players.ProfileManager; import io.lumine.cosmetics.players.wardrobe.WardrobeExecutor; -import io.lumine.utils.chat.ColorString; -import io.lumine.utils.logging.ConsoleColor; -import io.lumine.utils.logging.Log; -import io.lumine.utils.plugin.LuminePlugin; -import io.lumine.utils.version.ServerVersion; +import io.lumine.mythic.bukkit.MythicBukkit; +import io.lumine.mythic.bukkit.events.MythicReloadedEvent; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.chat.ColorString; +import io.lumine.mythic.bukkit.utils.logging.ConsoleColor; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.plugin.LuminePlugin; +import io.lumine.mythic.bukkit.utils.version.ServerVersion; import lombok.Getter; import org.bukkit.Bukkit; @@ -48,13 +52,14 @@ public class MCCosmeticsPlugin extends LuminePlugin { @Getter private AdminCommand adminCommand; @Getter private CosmeticsExecutor cosmetics; - - @Getter private HatManager hatManager; + @Getter private BackManager backManager; - @Getter private SprayManager sprayManager; + @Getter private ChatTagManager chatTagManager; + @Getter private GestureManager gestureManager; + @Getter private HatManager hatManager; @Getter private OffhandManager offhandManager; @Getter private MEGManager megManager; - @Getter private GestureManager gestureManager; + @Getter private SprayManager sprayManager; @Getter private WardrobeExecutor wardrobeManager; private VolatileCodeHandler volatileCodeHandler; @@ -101,8 +106,6 @@ public class MCCosmeticsPlugin extends LuminePlugin { getConfiguration().load(this); MCLogger.log("MCCosmetics configuration file loaded successfully."); - PlayerAnimatorImpl.initialize(this); - /* * Plugin Components */ @@ -116,6 +119,7 @@ public class MCCosmeticsPlugin extends LuminePlugin { backManager = new BackManager(this); sprayManager = new SprayManager(this); offhandManager = new OffhandManager(this); + chatTagManager = new ChatTagManager(this); if(Bukkit.getPluginManager().getPlugin("ModelEngine") != null) { try { megManager = new MEGManager(this); @@ -126,7 +130,12 @@ public class MCCosmeticsPlugin extends LuminePlugin { } else { Log.info("ModelEngine not found; disabling ModelEngine and MEG Accesstory Cosmetic features."); } - gestureManager = new GestureManager(this); + try { + PlayerAnimatorImpl.initialize(this); + gestureManager = new GestureManager(this); + } catch (Throwable ex) { + MCLogger.error("PlayerAnimator not supported on this version. Emotes not available."); + } profiles = new ProfileManager(this); @@ -155,6 +164,8 @@ public class MCCosmeticsPlugin extends LuminePlugin { new bStats(this); } + Events.subscribe(MythicReloadedEvent.class).handler(event -> reload()).bindWith(this); + MCLogger.log("" + ConsoleColor.GREEN + ConsoleColor.CHECK_MARK + " MCCosmetics" + (isPremium() ? " Premium" : "") + " v" + getVersion() + " (build "+ getBuildNumber() +") has been successfully loaded!" + ConsoleColor.RESET); } @@ -173,7 +184,14 @@ public class MCCosmeticsPlugin extends LuminePlugin { MCLogger.log("All active settings have been saved."); } - + + public void reload() { + reloadConfiguration(); + getMenuManager().reload(); + getCosmetics().reloadAllManagers(); + getProfiles().reloadAllCosmetics(); + } + /** * @return MCCosmetics Returns the active MCCosmetics instance. */ @@ -214,17 +232,7 @@ public class MCCosmeticsPlugin extends LuminePlugin { if(this.volatileCodeHandler != null) return this.volatileCodeHandler; VolatileCodeHandler VCH = new VolatileCodeDisabled(); - - String packageName = Bukkit.getServer().getClass().getPackage().getName(); - String version = packageName.substring(packageName.lastIndexOf('.') + 1); - - if (version.startsWith("v1_19")){ - if("1.19.2-R0.1-SNAPSHOT".equals(Bukkit.getBukkitVersion())) { - version = "v1_19_R1_2"; - } else if ("1.19.3-R0.1-SNAPSHOT".equals(Bukkit.getBukkitVersion())){ - version = "v1_19_R2"; - } - } + final var version = ServerVersion.getNMS().toString(); try { final Class<?> clazz = Class.forName("io.lumine.cosmetics.nms.VolatileCodeEnabled_" + version); diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/BaseCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/BaseCommand.java index ebfac9c2109e0d3cc70d2be4f12b08edb365279c..7791c554ac88721509fa3f984444bd72e8a65900 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/BaseCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/BaseCommand.java @@ -2,7 +2,7 @@ package io.lumine.cosmetics.commands; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.commands.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/CommandHelper.java b/plugin/src/main/java/io/lumine/cosmetics/commands/CommandHelper.java index 0011c7e9bc6d1d4c5279c758231a4215ed4a742f..fe50cbf0012b57af127c26973b03e2102641cdc0 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/CommandHelper.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/CommandHelper.java @@ -1,10 +1,10 @@ package io.lumine.cosmetics.commands; import io.lumine.cosmetics.config.Scope; -import io.lumine.utils.adventure.text.Component; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.StringProp; -import io.lumine.utils.text.Text; +import net.kyori.adventure.text.Component; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp; +import io.lumine.mythic.bukkit.utils.text.Text; import org.bukkit.command.CommandSender; public class CommandHelper { diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/CustomizeCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/CustomizeCommand.java index b0d7f8b896bfcdd859c361a03c9986b4bdb04299..9282f2b447217256435b19c4090e4123e99535b5 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/CustomizeCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/CustomizeCommand.java @@ -2,7 +2,7 @@ package io.lumine.cosmetics.commands; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.commands.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/DyeCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/DyeCommand.java index 97b731d5b5f3a6e06930537f33eaade2d3fe1747..6c3a51f0b9a6c7072ee3ab060f76ee0bc0dc8564 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/DyeCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/DyeCommand.java @@ -4,8 +4,8 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.cosmetics.ColorableCosmetic; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; -import io.lumine.utils.serialize.Chroma; +import io.lumine.mythic.bukkit.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/EmotesCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/EmotesCommand.java index e836a163c3fa64b5f0fc58d661e38fd59e8c7124..b7e632baa2bd4ac00a60bee93f46c911e062d8b9 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/EmotesCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/EmotesCommand.java @@ -6,7 +6,7 @@ import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.managers.gestures.Gesture; import io.lumine.cosmetics.managers.gestures.GestureManager; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.commands.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/EquipCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/EquipCommand.java index f3355a7b8216590377ce0d8ad49842888331822d..1cf495f712bc58d37ace2d9b751a1f5eb0294301 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/EquipCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/EquipCommand.java @@ -6,8 +6,8 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; -import io.lumine.utils.serialize.Chroma; +import io.lumine.mythic.bukkit.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/SprayCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/SprayCommand.java index 1b9a1b5c483f174be2df85c2927dea359184f8a9..6891b2521b9ee4faeb5a376d315b68fd24d8f218 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/SprayCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/SprayCommand.java @@ -11,7 +11,7 @@ import io.lumine.cosmetics.api.MCCosmetics; import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.commands.Command; public class SprayCommand extends Command<MCCosmeticsPlugin> { diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/SprayRemoveCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/SprayRemoveCommand.java index c166fc5f6bbe3644e2349539cdc9387031847dbc..0196bc11a764675175c3cb0fa88e9c7ab4c21946 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/SprayRemoveCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/SprayRemoveCommand.java @@ -11,7 +11,7 @@ import io.lumine.cosmetics.api.MCCosmetics; import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.commands.Command; public class SprayRemoveCommand extends Command<MCCosmeticsPlugin> { diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/SpraysCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/SpraysCommand.java index 3874cfc51a01f04e9231fdfef09a1d90483564cf..c00664d0c15848e0cb6d94235ccabf5cd89be3a8 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/SpraysCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/SpraysCommand.java @@ -2,7 +2,7 @@ package io.lumine.cosmetics.commands; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.commands.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/UnequipCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/UnequipCommand.java index 25af65e5a5e17307e0ca5658b31c8f16aea30e91..fa53f21038dcfb79427e4a2bac4dcbc9515220b5 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/UnequipCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/UnequipCommand.java @@ -5,8 +5,8 @@ import io.lumine.cosmetics.api.cosmetics.ColorableCosmetic; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; -import io.lumine.utils.serialize.Chroma; +import io.lumine.mythic.bukkit.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/WardrobeCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/WardrobeCommand.java index 7eed52564f17f4059d21f39237b850a98de83d7f..43416e9e66a7dc8ce3a0b5ef2110ec2c4c7d8132 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/WardrobeCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/WardrobeCommand.java @@ -6,8 +6,8 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; -import io.lumine.utils.serialize.Chroma; +import io.lumine.mythic.bukkit.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/admin/AdminCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/admin/AdminCommand.java index 2a33f894430173ee97d1404bff12c1414a104936..a22df68938ae23666e86b3f9c84bdb108c669099 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/admin/AdminCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/admin/AdminCommand.java @@ -3,9 +3,9 @@ package io.lumine.cosmetics.commands.admin; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.adventure.text.Component; -import io.lumine.utils.commands.Command; -import io.lumine.utils.text.Text; +import net.kyori.adventure.text.Component; +import io.lumine.mythic.bukkit.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.text.Text; import org.bukkit.command.CommandSender; diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/admin/ReloadCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/admin/ReloadCommand.java index e757b2eabd9e17941b8539660fd6f22639dc68b6..b2e3e12d1002747a54e7002c1686ec26e20f9a3d 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/admin/ReloadCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/admin/ReloadCommand.java @@ -4,8 +4,8 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; -import io.lumine.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.config.properties.Property; import org.bukkit.command.CommandSender; import java.util.Collections; @@ -19,13 +19,8 @@ public class ReloadCommand extends Command<MCCosmeticsPlugin> { @Override public boolean onCommand(CommandSender sender, String[] args) { - getPlugin().reloadConfiguration(); - getPlugin().getMenuManager().reload(); - - getPlugin().getCosmetics().reloadAllManagers(); - - getPlugin().getProfiles().reloadAllCosmetics(); + getPlugin().reload(); CommandHelper.sendSuccess(sender, Property.String(Scope.CONFIG, "Configuration.Language.Reloaded","MCCosmetics has been reloaded.").get()); diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/admin/SprayCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/admin/SprayCommand.java index dd2db0b4dc34c4d410caaaf42396603302f9547d..17a5cae8bf55b561cf096b2ea06a1ff3080722e4 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/admin/SprayCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/admin/SprayCommand.java @@ -4,8 +4,8 @@ import java.util.Collections; import java.util.List; import io.lumine.cosmetics.config.Scope; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.text.Text; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.text.Text; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -13,7 +13,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.MCCosmetics; import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.constants.Permissions; -import io.lumine.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.commands.Command; public class SprayCommand extends Command<MCCosmeticsPlugin> { diff --git a/plugin/src/main/java/io/lumine/cosmetics/commands/admin/VersionCommand.java b/plugin/src/main/java/io/lumine/cosmetics/commands/admin/VersionCommand.java index db20bbf4adf5a5b9914739b5b090c9986561cf40..0e33de6a08c74962a3ef11476ade6191b8f72928 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/commands/admin/VersionCommand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/commands/admin/VersionCommand.java @@ -4,9 +4,9 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.nms.VolatileCodeDisabled; -import io.lumine.utils.chat.ColorString; -import io.lumine.utils.commands.Command; -import io.lumine.utils.version.ServerVersion; +import io.lumine.mythic.bukkit.utils.chat.ColorString; +import io.lumine.mythic.bukkit.utils.commands.Command; +import io.lumine.mythic.bukkit.utils.version.ServerVersion; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; diff --git a/plugin/src/main/java/io/lumine/cosmetics/compat/CompatibilityManager.java b/plugin/src/main/java/io/lumine/cosmetics/compat/CompatibilityManager.java index f0440c1e7687b848dcd348c21de82b5ddf2dc2f4..5d855bd6b3f5ef003d55a83a49cabff3fce1cb16 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/compat/CompatibilityManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/compat/CompatibilityManager.java @@ -1,8 +1,8 @@ package io.lumine.cosmetics.compat; import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.utils.logging.Log; -import io.lumine.utils.plugin.ReloadableModule; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule; import lombok.Getter; import org.bukkit.Bukkit; diff --git a/plugin/src/main/java/io/lumine/cosmetics/compat/LumineCoreCompat.java b/plugin/src/main/java/io/lumine/cosmetics/compat/LumineCoreCompat.java index 1bf4ca4ca95a003c978be583c928bfaa30b07614..61aae2d9ffeedbbcfed664fc02c695c00eb00dac 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/compat/LumineCoreCompat.java +++ b/plugin/src/main/java/io/lumine/cosmetics/compat/LumineCoreCompat.java @@ -6,9 +6,9 @@ import io.lumine.core.utils.gson.GsonProvider; import io.lumine.core.utils.logging.Log; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.plugin.PluginModule; -import io.lumine.utils.promise.Promise; -import io.lumine.utils.storage.players.PlayerStorageAdapter; +import io.lumine.mythic.bukkit.utils.plugin.PluginModule; +import io.lumine.mythic.bukkit.utils.promise.Promise; +import io.lumine.mythic.bukkit.utils.storage.players.PlayerStorageAdapter; import java.io.File; import java.io.FileWriter; diff --git a/plugin/src/main/java/io/lumine/cosmetics/compat/MythicMobsCompat.java b/plugin/src/main/java/io/lumine/cosmetics/compat/MythicMobsCompat.java index 2e90d7373fa229bb3b6ff4155c76a82b913ff11f..4b7a60a14ba6ed43bdc115763e75ccaca6bb9215 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/compat/MythicMobsCompat.java +++ b/plugin/src/main/java/io/lumine/cosmetics/compat/MythicMobsCompat.java @@ -4,7 +4,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.compat.mythicmobs.CosmeticEmoteMechanic; import io.lumine.mythic.bukkit.MythicBukkit; import io.lumine.mythic.bukkit.events.MythicMechanicLoadEvent; -import io.lumine.utils.Events; +import io.lumine.mythic.bukkit.utils.Events; import java.util.Locale; diff --git a/plugin/src/main/java/io/lumine/cosmetics/compat/PlaceholderAPICompat.java b/plugin/src/main/java/io/lumine/cosmetics/compat/PlaceholderAPICompat.java index a70cd83b2e78c44919725f8501570349c11a7ca9..12eb2fb1f9cbf94f635d15affef72bdf511cb299 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/compat/PlaceholderAPICompat.java +++ b/plugin/src/main/java/io/lumine/cosmetics/compat/PlaceholderAPICompat.java @@ -1,6 +1,7 @@ package io.lumine.cosmetics.compat; import io.lumine.cosmetics.MCCosmeticsPlugin; +import io.lumine.cosmetics.managers.chat.ChatTag; import io.lumine.cosmetics.players.Profile; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.entity.Player; @@ -18,7 +19,7 @@ public class PlaceholderAPICompat extends PlaceholderExpansion { public String onPlaceholderRequest(Player player, String identifier) { Profile profile = plugin.getProfiles().getProfile(player); - if(identifier.startsWith("is_equipped_")){ + if(identifier.startsWith("is_equipped_")) { String cosmeticType = identifier.split("_")[2].toUpperCase(); return profile.getEquippedCosmetics().containsKey(cosmeticType) ? "true" : "false"; } @@ -35,6 +36,14 @@ public class PlaceholderAPICompat extends PlaceholderExpansion { } switch (identifier) { + case "chattag": { + final var maybeTag = profile.getEquipped(ChatTag.class); + if(maybeTag.isPresent()) { + return ((ChatTag) maybeTag.get().getCosmetic()).getChatTag().get(); + } else { + return ""; + } + } case "is_gesturing": return profile.getEquippedCosmetics().containsKey("GESTURE") ? "true" : "false"; case "active_gesture": diff --git a/plugin/src/main/java/io/lumine/cosmetics/compat/WorldGuardSupport.java b/plugin/src/main/java/io/lumine/cosmetics/compat/WorldGuardSupport.java index 115e9f37a6b8fad8b9aa328f67b252bf193fe1e4..8615d61be507aa89b83556e1ef78dfd9bc6235ff 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/compat/WorldGuardSupport.java +++ b/plugin/src/main/java/io/lumine/cosmetics/compat/WorldGuardSupport.java @@ -3,7 +3,6 @@ package io.lumine.cosmetics.compat; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.WorldGuard; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.StateFlag; @@ -26,7 +25,7 @@ public class WorldGuardSupport { StateFlag flag = new StateFlag("mcc-spray-flag", true); registry.register(flag); SPRAY_FLAG = flag; - } catch(FlagConflictException e){ + } catch(FlagConflictException e) { Flag<?> existing = registry.get("mcc-spray-flag"); if(existing instanceof StateFlag){ SPRAY_FLAG = (StateFlag) existing; @@ -36,12 +35,17 @@ public class WorldGuardSupport { } public boolean canSprayWG(Player player, Location location) { - RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); - RegionQuery query = container.createQuery(); - ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location)); + try { + RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); + RegionQuery query = container.createQuery(); + ApplicableRegionSet set = query.getApplicableRegions(BukkitAdapter.adapt(location)); - LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); + LocalPlayer localPlayer = WorldGuard.getInstance().checkPlayer(BukkitAdapter.adapt(player)); - return set.testState(localPlayer, SPRAY_FLAG); + return set.testState(localPlayer, SPRAY_FLAG); + } catch(Throwable ex) { + ex.printStackTrace(); + return true; + } } } diff --git a/plugin/src/main/java/io/lumine/cosmetics/config/Configuration.java b/plugin/src/main/java/io/lumine/cosmetics/config/Configuration.java index 4796c58d5935e274e46cd0a4ee07f001898c08a3..2ac5bdc974e24c248f0d6bc78cbdcc7773397f07 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/config/Configuration.java +++ b/plugin/src/main/java/io/lumine/cosmetics/config/Configuration.java @@ -4,14 +4,14 @@ import com.google.common.collect.Lists; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.storage.StorageDriver; -import io.lumine.utils.storage.sql.SqlCredentials; -import io.lumine.utils.config.properties.types.SqlCredentialsProp; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.PropertyHolder; -import io.lumine.utils.config.properties.types.EnumProp; -import io.lumine.utils.config.properties.types.IntProp; -import io.lumine.utils.logging.Log; -import io.lumine.utils.plugin.ReloadableModule; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.config.properties.types.*; +import io.lumine.mythic.bukkit.utils.storage.sql.SqlCredentials; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.PropertyHolder; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule; +import io.lumine.mythic.core.packs.PackImpl; import lombok.Getter; import java.io.File; @@ -24,16 +24,22 @@ import java.util.jar.JarFile; public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implements PropertyHolder { - private static final IntProp CLOCK_INTERVAL = Property.Int(Scope.CONFIG, "Clock.Interval", 1); - private static final EnumProp<StorageDriver> STORAGE_DRIVER = Property.Enum(Scope.CONFIG, StorageDriver.class, "Storage.Driver", StorageDriver.JSON); + private static final EnumProp<StorageDriver> STORAGE_DRIVER = Property.Enum(Scope.CONFIG, StorageDriver.class, "Storage.Driver", StorageDriver.JSON); private static final SqlCredentialsProp SQL_CREDENTIALS = Property.SqlCredentials(Scope.CONFIG, "Storage"); - + private static final IntProp EQUIP_DELAY = Property.Int(Scope.CONFIG, "General.EquipDelay", 5); - + + private static final BooleanProp CRUCIBLE_GENERATION = Property.Boolean(Scope.CONFIG, "Assets.CrucibleGeneration", false); + //private static final StringProp ASSET_PACK = Property.String(Scope.CONFIG, "Assets.PackToGenerateFrom", "MythicCosmetics"); + @Getter private boolean allowingMetrics = true; + + @Getter private final Pack mythicPack; public Configuration(MCCosmeticsPlugin plugin) { super(plugin); + + this.mythicPack = new PackImpl(plugin, "MythicCosmetics"); } @Override @@ -66,11 +72,7 @@ public class Configuration extends ReloadableModule<MCCosmeticsPlugin> implement } return packs; } - - public int getClockInterval() { - return CLOCK_INTERVAL.get(this); - } - + public StorageDriver getStorageType() { return STORAGE_DRIVER.get(this); } diff --git a/plugin/src/main/java/io/lumine/cosmetics/config/Scope.java b/plugin/src/main/java/io/lumine/cosmetics/config/Scope.java index 738de913bda73d3652c72e8776c2f82426268202..294d781e671267989f4402b5ca4f736591714b5c 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/config/Scope.java +++ b/plugin/src/main/java/io/lumine/cosmetics/config/Scope.java @@ -1,6 +1,6 @@ package io.lumine.cosmetics.config; -import io.lumine.utils.config.properties.PropertyScope; +import io.lumine.mythic.bukkit.utils.config.properties.PropertyScope; public enum Scope implements PropertyScope { diff --git a/plugin/src/main/java/io/lumine/cosmetics/constants/CosmeticType.java b/plugin/src/main/java/io/lumine/cosmetics/constants/CosmeticType.java index 2f571e310403f5d63b787a7b0ace55b098db3f23..f00a70dffa5da98e04ab6891281b43671e424739 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/constants/CosmeticType.java +++ b/plugin/src/main/java/io/lumine/cosmetics/constants/CosmeticType.java @@ -2,6 +2,7 @@ package io.lumine.cosmetics.constants; import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.managers.back.BackAccessory; +import io.lumine.cosmetics.managers.chat.ChatTag; import io.lumine.cosmetics.managers.gestures.Gesture; import io.lumine.cosmetics.managers.hats.Hat; import io.lumine.cosmetics.managers.modelengine.MEGAccessory; @@ -9,7 +10,7 @@ import io.lumine.cosmetics.managers.offhand.Offhand; import io.lumine.cosmetics.managers.particle.ParticleAccessory; import io.lumine.cosmetics.managers.pets.Pet; import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.logging.Log; import org.bukkit.Material; import java.util.HashMap; @@ -28,6 +29,7 @@ public class CosmeticType { register(Spray.class, new CosmeticConstant("SPRAY", "sprays")); register(Offhand.class, new CosmeticConstant("OFFHAND", "offhands")); register(Gesture.class, new CosmeticConstant("GESTURE", "gestures")); + register(ChatTag.class, new CosmeticConstant("CHATTAG", "chattags")); } public static void register(Class<? extends Cosmetic> clazz, CosmeticConstant cosmeticConstant) { diff --git a/plugin/src/main/java/io/lumine/cosmetics/logging/MCLogger.java b/plugin/src/main/java/io/lumine/cosmetics/logging/MCLogger.java index 8468793c6f0e24cf71e7372fc35cef9c0697537e..9cab9e7c984a18f197c85041311d01220dc8393c 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/logging/MCLogger.java +++ b/plugin/src/main/java/io/lumine/cosmetics/logging/MCLogger.java @@ -1,7 +1,7 @@ package io.lumine.cosmetics.logging; import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.utils.logging.ConsoleColor; +import io.lumine.mythic.bukkit.utils.logging.ConsoleColor; import java.util.logging.Level; diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/AbstractCosmetic.java b/plugin/src/main/java/io/lumine/cosmetics/managers/AbstractCosmetic.java index b4f82e23bd71951b0d2ba09832e920c389624dcc..b618bde1ac59a5c13c29a8f91198a5f8b88304ed 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/AbstractCosmetic.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/AbstractCosmetic.java @@ -12,15 +12,19 @@ import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.constants.Permissions; import io.lumine.cosmetics.menus.CosmeticMenu; -import io.lumine.utils.Schedulers; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.*; -import io.lumine.utils.items.ItemFactory; -import io.lumine.utils.menu.Icon; -import io.lumine.utils.menu.IconBuilder; -import io.lumine.utils.text.Text; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.MythicBukkit; +import io.lumine.mythic.bukkit.utils.Schedulers; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.*; +import io.lumine.mythic.bukkit.utils.items.ItemFactory; +import io.lumine.mythic.bukkit.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.menu.IconBuilder; +import io.lumine.mythic.bukkit.utils.text.Text; +import io.papermc.paper.datacomponent.DataComponentTypes; import lombok.Getter; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import java.io.File; @@ -33,7 +37,7 @@ public abstract class AbstractCosmetic extends Cosmetic { protected static final StringProp NAMESPACE = Property.String(Scope.NONE, "Namespace", null); protected static final StringProp PERMISSION = Property.String(Scope.NONE, "Permission", null); protected static final EnumProp<Material> MATERIAL = Property.Enum(Scope.NONE, Material.class, "Material", Material.EMERALD); - protected static final IntProp MODEL = Property.Int(Scope.NONE, "Model"); + protected static final StringProp MODEL = Property.String(Scope.NONE, "Model", null); protected static final LangProp DISPLAY = Property.Lang(Scope.NONE, "Display"); protected static final LangListProp DESCRIPTION = Property.LangList(Scope.NONE, "Description"); protected static final StringProp TEXTURE = Property.String(Scope.NONE, "SkullTexture"); @@ -45,6 +49,7 @@ public abstract class AbstractCosmetic extends Cosmetic { private final MCCosmeticsManager manager; + protected final Pack mythicPack; protected final File file; @Getter protected final String id; @Getter protected final String key; @@ -54,7 +59,6 @@ public abstract class AbstractCosmetic extends Cosmetic { // Menu Item protected Material material; - protected int model; @Getter protected String display; protected List<String> description; protected String color; @@ -65,8 +69,13 @@ public abstract class AbstractCosmetic extends Cosmetic { protected Map<String,CosmeticVariant> variants = Maps.newConcurrentMap(); public AbstractCosmetic(MCCosmeticsManager manager, File file, String type, String key) { + this(manager, null, file, type, key); + } + + public AbstractCosmetic(MCCosmeticsManager manager, Pack pack, File file, String type, String key) { super(manager, type, key); this.manager = manager; + this.mythicPack = pack; this.file = file; this.key = key; this.namespace = NAMESPACE.fget(file,this); @@ -90,7 +99,6 @@ public abstract class AbstractCosmetic extends Cosmetic { } this.material = MATERIAL.fget(file,this); - this.model = MODEL.fget(file,this); this.display = DISPLAY.fget(file,this); this.description = DESCRIPTION.fget(file,this); this.color = COLOR.fget(file,this); @@ -104,19 +112,38 @@ public abstract class AbstractCosmetic extends Cosmetic { if(material == Material.PLAYER_HEAD) { this.menuItem = ItemFactory.of(this.material) .name(Text.colorize(this.getDisplay())) - .model(model) .hideAttributes() .lore(description) - .skullTexture(TEXTURE.get(this)) + //.skullTexture(TEXTURE.get(this)) .build(); } else { this.menuItem = ItemFactory.of(this.material) .name(Text.colorize(this.getDisplay())) - .model(model) .hideAttributes() .lore(description) .build(); } + + var model = MODEL.fget(file,this); + + if(model != null) { + NamespacedKey itemModelKey = null; + + if(MythicBukkit.inst().getCompatibility().getCrucible().isPresent()) { + final var generationFeedback = MythicBukkit.inst().getCompatibility().getCrucible().get().addItemToGeneration(mythicPack, model); + + if(generationFeedback.getItemModel().isPresent()) { + itemModelKey = generationFeedback.getItemModel().get(); + } + } + if(itemModelKey == null) { + if (!model.contains(":")) { + model = "minecraft:" + model; + } + itemModelKey = NamespacedKey.minecraft(model); + } + this.menuItem.setData(DataComponentTypes.ITEM_MODEL, itemModelKey); + } } protected Icon<CosmeticProfile> buildIcon(String type) { @@ -174,4 +201,9 @@ public abstract class AbstractCosmetic extends Cosmetic { return Optional.ofNullable(variants.getOrDefault(id, null)); } + @Override + public String getPropertyNode() { + return this.key; + } + } diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/AbstractCosmeticVariant.java b/plugin/src/main/java/io/lumine/cosmetics/managers/AbstractCosmeticVariant.java index d9ef4cb48fe2b7bc99cfa3a1e78cfb8fc3badd55..b177dd971f7be221800ab2c9548d2881002fb2f6 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/AbstractCosmeticVariant.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/AbstractCosmeticVariant.java @@ -6,11 +6,11 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.cosmetics.CosmeticVariant; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.config.Scope; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.LangListProp; -import io.lumine.utils.config.properties.types.LangProp; -import io.lumine.utils.config.properties.types.StringProp; -import io.lumine.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.LangListProp; +import io.lumine.mythic.bukkit.utils.config.properties.types.LangProp; +import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp; +import io.lumine.mythic.bukkit.utils.menu.Icon; import lombok.Getter; public class AbstractCosmeticVariant extends CosmeticVariant { diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/CosmeticsExecutor.java b/plugin/src/main/java/io/lumine/cosmetics/managers/CosmeticsExecutor.java index 4d04419e62efced9c0c0127c712b62beeb90bff7..1b8721b4e6ddcab56555ae393e2bc117a06ca0e3 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/CosmeticsExecutor.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/CosmeticsExecutor.java @@ -3,8 +3,8 @@ package io.lumine.cosmetics.managers; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.utils.events.extra.ArmorEquipEventListener; -import io.lumine.utils.plugin.ReloadableModule; +import io.lumine.mythic.bukkit.utils.events.extra.ArmorEquipEventListener; +import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule; import lombok.Getter; import java.util.Collection; diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/MCCosmeticsManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/MCCosmeticsManager.java index b2e5233f6d085b246df3d8a3936f03660c9829f7..52f5fb615701d775128ed9cf9506ee3fd647159d 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/MCCosmeticsManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/MCCosmeticsManager.java @@ -15,11 +15,13 @@ import io.lumine.cosmetics.nms.VolatileCodeHandler; import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper; import io.lumine.cosmetics.players.ProfileManager; import io.lumine.cosmetics.players.wardrobe.WardrobeExecutor; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.NodeListProp; -import io.lumine.utils.files.Files; -import io.lumine.utils.logging.Log; -import io.lumine.utils.plugin.ReloadableModule; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.MythicBukkit; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.NodeListProp; +import io.lumine.mythic.bukkit.utils.files.Files; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule; import lombok.Getter; import org.bukkit.entity.Player; @@ -46,25 +48,22 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM @Override public void load(MCCosmeticsPlugin plugin) { - final Collection<File> files = Lists.newArrayList(); + final String type = CosmeticType.folder(cosmeticClass); for(var packFolder : plugin.getConfiguration().getPackFolders()) { final File confFolder = new File(packFolder.getAbsolutePath() + System.getProperty("file.separator") + type); if(confFolder.exists() && confFolder.isDirectory()) { - files.addAll(Files.getAllYaml(confFolder.getAbsolutePath())); + for (File file : Files.getAllYaml(confFolder.getAbsolutePath())) { + loadCosmetics(null, file); + } } } - - for(var file : files) { - for(var node : KEYS.fget(file)) { - var cosmetic = build(file, node); - if(!cosmetics.containsKey(cosmetic.getId())){ - cosmetics.put(cosmetic.getId(), cosmetic); - } else { - Log.warn("Cosmetic with id " + cosmetic.getId() + " already exists!"); - Log.warn("Cosmetic will be ignored! Please rename this cosmetic."); + for(var pack : MythicBukkit.inst().getPackManager().getPacks()) { + final File confFolder = pack.getPackFolder("cosmetics" + System.getProperty("file.separator") + type); + if(confFolder.exists() && confFolder.isDirectory()) { + for (File file : Files.getAllYaml(confFolder.getAbsolutePath())) { + loadCosmetics(pack, file); } - } } @@ -82,12 +81,25 @@ public abstract class MCCosmeticsManager<T extends Cosmetic> extends ReloadableM Log.info("Loaded " + cosmetics.size() + " " + type + "."); } + private void loadCosmetics(Pack pack, File file) { + for(var node : KEYS.fget(file)) { + var cosmetic = build(pack, file, node); + if(!cosmetics.containsKey(cosmetic.getId())) { + cosmetics.put(cosmetic.getId(), cosmetic); + } else { + Log.warn("Cosmetic with id " + cosmetic.getId() + " already exists!"); + Log.warn("Cosmetic will be ignored! Please rename this cosmetic."); + } + + } + } + @Override public void unload() { cosmetics.clear(); } - public abstract T build(File file, String node); + public abstract T build(Pack pack, File file, String node); public Collection<T> getAllCosmetics() { return cosmetics.values(); diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/back/BackAccessory.java b/plugin/src/main/java/io/lumine/cosmetics/managers/back/BackAccessory.java index cd44222a3607f3dd74c8e047415c2e3477dca6ce..1b664afeda906705dfb1a064792d8db415275c8d 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/back/BackAccessory.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/back/BackAccessory.java @@ -7,8 +7,10 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.items.ItemFactory; -import io.lumine.utils.menu.Icon; +import io.lumine.cosmetics.managers.hats.HatManager; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.items.ItemFactory; +import io.lumine.mythic.bukkit.utils.menu.Icon; import org.bukkit.inventory.ItemStack; @@ -16,8 +18,12 @@ import java.io.File; public class BackAccessory extends AbstractCosmetic implements ColorableCosmetic,ItemCosmetic { - public BackAccessory(BackManager manager, File file, String key) { - super(manager, file, CosmeticType.type(BackAccessory.class), key); + public BackAccessory(BackManager manager, File file, String key) { + this(manager, null, file, key); + } + + public BackAccessory(BackManager manager, Pack pack, File file, String key) { + super(manager, pack, file, CosmeticType.type(BackAccessory.class), key); } @Override diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/back/BackManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/back/BackManager.java index c35b5c21ae867cdb288be7116707365a7898f160..87d2a3c7dbf4be60a57dfcc1522c6ab53d738e12 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/back/BackManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/back/BackManager.java @@ -10,8 +10,9 @@ import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.managers.gestures.Gesture; import io.lumine.cosmetics.managers.modelengine.MEGAccessory; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.utils.Events; -import io.lumine.utils.Schedulers; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.Schedulers; import java.io.File; @@ -83,8 +84,8 @@ public class BackManager extends MCCosmeticsManager<BackAccessory> implements Hi } @Override - public BackAccessory build(File file, String node) { - return new BackAccessory(this, file, node); + public BackAccessory build(Pack pack, File file, String node) { + return new BackAccessory(this, pack, file, node); } @Override diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/chat/ChatTag.java b/plugin/src/main/java/io/lumine/cosmetics/managers/chat/ChatTag.java index f1e80f746eb817364964259d4efb409938317732..258afc14dead6b352a511f4f2b849fe2acc35700 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/chat/ChatTag.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/chat/ChatTag.java @@ -1,24 +1,28 @@ package io.lumine.cosmetics.managers.chat; import io.lumine.cosmetics.api.players.CosmeticProfile; +import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.menu.Icon; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.api.skills.placeholders.PlaceholderString; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp; +import io.lumine.mythic.bukkit.utils.menu.Icon; +import lombok.Getter; + import java.io.File; -import org.bukkit.entity.Player; +public class ChatTag extends AbstractCosmetic { -import lombok.Getter; + private static final StringProp TAG = Property.String(Scope.NONE, "Tag"); -public class ChatTag extends AbstractCosmetic { + @Getter private final PlaceholderString chatTag; - public ChatTag(ChatTagManager manager, File file, String key) { - super(manager, file, CosmeticType.type(ChatTag.class), key); - } + public ChatTag(ChatTagManager manager, Pack pack, File file, String key) { + super(manager, pack, file, CosmeticType.type(ChatTag.class), key); - @Override - public String getPropertyNode() { - return this.key; + this.chatTag = PlaceholderString.of(TAG.fget(file, this)); } @Override diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/chat/ChatTagManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/chat/ChatTagManager.java index 9175e0685b6fcfc328980421d0adcabbd2205585..f92451fa8160d69bbc449fe4774a8f2bd004160d 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/chat/ChatTagManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/chat/ChatTagManager.java @@ -3,7 +3,10 @@ package io.lumine.cosmetics.managers.chat; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.managers.MCCosmeticsManager; +import io.lumine.cosmetics.managers.hats.Hat; import io.lumine.cosmetics.managers.sprays.Spray; +import io.lumine.mythic.api.packs.Pack; + import java.io.File; public class ChatTagManager extends MCCosmeticsManager<ChatTag> { @@ -16,23 +19,18 @@ public class ChatTagManager extends MCCosmeticsManager<ChatTag> { @Override public void load(MCCosmeticsPlugin plugin) { - super.load(plugin); - } @Override - public ChatTag build(File file, String node) { - return null; + public ChatTag build(Pack pack, File file, String node) { + return new ChatTag(this, pack, file, node); } @Override public void equip(CosmeticProfile profile) {} @Override - public void unequip(CosmeticProfile profile) { - - } - - + public void unequip(CosmeticProfile profile) {} + } diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/Gesture.java b/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/Gesture.java index 41c2e815f4ef736141f82451957e15421e07caa7..21d77b5317aa1a64f2db98ffe27493d3f71e4619 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/Gesture.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/Gesture.java @@ -6,13 +6,13 @@ import io.lumine.cosmetics.commands.CommandHelper; import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.BooleanProp; -import io.lumine.utils.config.properties.types.EnumProp; -import io.lumine.utils.config.properties.types.StringProp; -import io.lumine.utils.menu.Icon; -import io.lumine.utils.menu.IconBuilder; -import io.lumine.utils.text.Text; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.BooleanProp; +import io.lumine.mythic.bukkit.utils.config.properties.types.EnumProp; +import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp; +import io.lumine.mythic.bukkit.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.menu.IconBuilder; +import io.lumine.mythic.bukkit.utils.text.Text; import lombok.Getter; import java.io.File; diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/GestureManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/GestureManager.java index a3dbb33a86c40d4102525de82c8d725d60d2ded0..2a9121798ffd6c4fa9fc6bff8bad36bb0f88606d 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/GestureManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/gestures/GestureManager.java @@ -9,8 +9,9 @@ import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.utils.Events; -import io.lumine.utils.files.Files; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.files.Files; import lombok.Getter; import org.bukkit.entity.Player; @@ -54,7 +55,7 @@ public class GestureManager extends MCCosmeticsManager<Gesture> { } @Override - public Gesture build(File file, String node) { + public Gesture build(Pack pack, File file, String node) { return new Gesture(this, file, node); } diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/hats/Hat.java b/plugin/src/main/java/io/lumine/cosmetics/managers/hats/Hat.java index 2cd7f78f79cb2b32e31c46ae51a96c24a5d5a4a6..399fc1586e092457195cb534d9f51b5ebf714194 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/hats/Hat.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/hats/Hat.java @@ -7,8 +7,9 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.items.ItemFactory; -import io.lumine.utils.menu.Icon; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.items.ItemFactory; +import io.lumine.mythic.bukkit.utils.menu.Icon; import org.bukkit.inventory.ItemStack; @@ -17,15 +18,13 @@ import java.io.File; public class Hat extends AbstractCosmetic implements ColorableCosmetic,ItemCosmetic { public Hat(HatManager manager, File file, String key) { - super(manager, file, CosmeticType.type(Hat.class), key); + this(manager, null, file, key); } - @Override - public String getPropertyNode() { - return this.key; + public Hat(HatManager manager, Pack pack, File file, String key) { + super(manager, pack, file, CosmeticType.type(Hat.class), key); } - @Override public Icon<CosmeticProfile> getIcon() { return buildIcon("hat"); diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/hats/HatManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/hats/HatManager.java index 1754a85151698129d5dd660f9007bc8135409ffd..afe99eaeb38ae1f1f0270ba0345e97922dee2cc7 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/hats/HatManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/hats/HatManager.java @@ -9,8 +9,9 @@ import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.managers.gestures.Gesture; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.Events; -import io.lumine.utils.events.extra.ArmorEquipEvent; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.events.extra.ArmorEquipEvent; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryCloseEvent; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; @@ -52,8 +53,8 @@ public class HatManager extends MCCosmeticsManager<Hat> implements HideableCosme } @Override - public Hat build(File file, String node) { - return new Hat(this, file, node); + public Hat build(Pack pack, File file, String node) { + return new Hat(this, pack, file, node); } @Override diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/FakeEntity.java b/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/FakeEntity.java index f406fc36e2eb1e2133be3f4745ac24b9f7a063e8..b067995150b03d8a26b1ca839364f8f15530f159 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/FakeEntity.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/FakeEntity.java @@ -1,9 +1,8 @@ package io.lumine.cosmetics.managers.modelengine; import com.ticxo.modelengine.api.entity.BukkitPlayer; -import com.ticxo.modelengine.api.nms.entity.wrapper.BodyRotationController; -import com.ticxo.modelengine.api.utils.math.Offset; -import io.lumine.utils.serialize.Orient; +import com.ticxo.playeranimator.api.utils.math.Offset; +import io.lumine.mythic.bukkit.utils.serialize.Orient; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.util.Vector; @@ -15,7 +14,6 @@ public class FakeEntity extends BukkitPlayer { private final double yaw; private final double pitch; private final ModelAnchor anchor; - private BodyRotationController controller; public FakeEntity(@NotNull Player entity, Orient orient, ModelAnchor anchor) { super(entity); @@ -23,26 +21,23 @@ public class FakeEntity extends BukkitPlayer { yaw = Math.toRadians(orient.getDirection().getYaw()); pitch = Math.toRadians(orient.getDirection().getPitch()); this.anchor = anchor; - } - @Override - public BodyRotationController wrapBodyRotationControl() { - controller = super.wrapBodyRotationControl(); - controller.setMaxHeadAngle(45); - controller.setMaxBodyAngle(45); - controller.setStableAngle(5); - return controller; + this.getBodyRotationController().setMaxHeadAngle(45); + this.getBodyRotationController().setMaxBodyAngle(45); + this.getBodyRotationController().setStableAngle(5); } @Override public Location getLocation() { + final var controller = getBodyRotationController(); + Location location = getOriginal().getLocation(); Vector offset; if (anchor == ModelAnchor.HEAD) { double pYaw = Math.toRadians(location.getYaw()); double pPitch = Math.toRadians(location.getPitch()); offset = Offset.rotateYaw(Offset.rotatePitch(this.offset.clone(), pitch + pPitch), yaw + pYaw); - }else { + } else { double pYaw = Math.toRadians(controller == null ? getYBodyRot() : controller.getYBodyRot()); offset = Offset.rotateYaw(this.offset.clone(), yaw + pYaw); } diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/MEGAccessory.java b/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/MEGAccessory.java index 9b88db6f4c299424212f4457645c81840129bf2f..5366dd6282a48de45c19063c6558eea768997fcf 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/MEGAccessory.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/MEGAccessory.java @@ -1,17 +1,16 @@ package io.lumine.cosmetics.managers.modelengine; -import com.ticxo.modelengine.api.model.AnimationMode; import io.lumine.cosmetics.api.cosmetics.ColorableCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.EnumProp; -import io.lumine.utils.config.properties.types.OrientProp; -import io.lumine.utils.config.properties.types.StringProp; -import io.lumine.utils.menu.Icon; -import io.lumine.utils.serialize.Orient; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.EnumProp; +import io.lumine.mythic.bukkit.utils.config.properties.types.OrientProp; +import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp; +import io.lumine.mythic.bukkit.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.serialize.Orient; import lombok.Getter; import java.io.File; @@ -21,13 +20,11 @@ public class MEGAccessory extends AbstractCosmetic implements ColorableCosmetic private static final StringProp MODEL = Property.String(Scope.NONE, "ModelId"); private static final StringProp STATE = Property.String(Scope.NONE, "State"); private static final OrientProp OFFSET = Property.Orient(Scope.NONE, "Offset"); - private static final EnumProp<AnimationMode> MODELMODE = Property.Enum(Scope.NONE, AnimationMode.class, "Mode", AnimationMode.B); private static final EnumProp<ModelAnchor> MODELANCHOR = Property.Enum(Scope.NONE, ModelAnchor.class, "Anchor", ModelAnchor.BODY); @Getter private final String modelId; @Getter private final String state; @Getter private final Orient offset; - @Getter private final AnimationMode mode; @Getter private final ModelAnchor anchor; public MEGAccessory(MEGManager manager, File file, String key) { @@ -36,9 +33,7 @@ public class MEGAccessory extends AbstractCosmetic implements ColorableCosmetic modelId = MODEL.fget(file, this); state = STATE.fget(file, this); offset = OFFSET.fget(file, this); - mode = MODELMODE.fget(file, this); anchor = MODELANCHOR.fget(file, this); - } @Override diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/MEGManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/MEGManager.java index 4db07309afab6672e568b78974ac71c8b2cd2c07..32bdce85631e8f7185c38e017fa5a3274cb4fe9d 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/MEGManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/modelengine/MEGManager.java @@ -1,20 +1,22 @@ package io.lumine.cosmetics.managers.modelengine; import com.ticxo.modelengine.api.ModelEngineAPI; -import com.ticxo.modelengine.api.animation.AnimationProperty; -import com.ticxo.modelengine.api.animation.blueprint.LoopMode; +import com.ticxo.modelengine.api.animation.BlueprintAnimation; import com.ticxo.modelengine.api.animation.property.SimpleProperty; +import com.ticxo.modelengine.api.entity.data.BukkitEntityData; +import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; -import com.ticxo.modelengine.api.nms.entity.wrapper.RangeManager; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.players.wardrobe.WardrobeMegDummy; -import io.lumine.utils.Events; -import io.lumine.utils.Schedulers; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.Schedulers; +import io.lumine.mythic.bukkit.utils.logging.Log; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.entity.PlayerDeathEvent; @@ -131,7 +133,7 @@ public class MEGManager extends MCCosmeticsManager<MEGAccessory> { } @Override - public MEGAccessory build(File file, String node) { + public MEGAccessory build(Pack pack, File file, String node) { return new MEGAccessory(this, file, node); } @@ -139,41 +141,52 @@ public class MEGManager extends MCCosmeticsManager<MEGAccessory> { public void equip(CosmeticProfile profile) { final var maybeEquipped = profile.getEquipped(MEGAccessory.class); if(maybeEquipped.isEmpty()) { + Log.info("No Accessory Found"); return; } var opt = maybeEquipped.get().getCosmetic(); if(!(opt instanceof MEGAccessory meg)) { + Log.info("Accessory Invalid"); return; } final var blueprint = ModelEngineAPI.getBlueprint(meg.getModelId()); - if(blueprint == null) - return; + if(blueprint == null) { + Log.info("No Blueprint Found"); + return; + } final var animation = blueprint.getAnimations().get(meg.getState()); - if(animation == null) - return; + if(animation == null) { + Log.info("No Animation Found"); + return; + } final var player = profile.getPlayer(); + final var activeModel = ModelEngineAPI.createActiveModel(blueprint); final var property = new SimpleProperty(activeModel, animation, 1, 0, 1); - property.setForceLoopMode(LoopMode.LOOP); + property.setForceLoopMode(BlueprintAnimation.LoopMode.LOOP); property.setForceOverride(true); activeModel.getAnimationHandler().playAnimation(property, true); activeModel.setCanHurt(false); - ModeledEntity modeledEntity = ModelEngineAPI.getModeledEntity(player.getUniqueId()); - if(modeledEntity == null) { - modeledEntity = ModelEngineAPI.createModeledEntity(new FakeEntity(player, meg.getOffset(), meg.getAnchor())); - modeledEntity.setBaseEntityVisible(true); - ModelEngineAPI.getEntityHandler().setSelfFakeInvisible(player, false); - if(modeledEntity.getRangeManager() instanceof RangeManager.Disguise disguise) - disguise.setIncludeSelf(true); - } + ModeledEntity modeledEntity = ModelEngineAPI.getModeledEntity(player); + if(modeledEntity != null) { + modeledEntity.destroy(); + } + + modeledEntity = ModelEngineAPI.createModeledEntity(new FakeEntity(player, meg.getOffset(), meg.getAnchor())); + modeledEntity.getBase().getBodyRotationController().setPlayerMode(true); + modeledEntity.setBaseEntityVisible(true); + ModelEngineAPI.getEntityHandler().setForcedInvisible(player, false); + + if(modeledEntity.getBase().getData() instanceof BukkitEntityData data) { + data.getTracked().addForcedPairing(player.getUniqueId()); + } - modeledEntity.destroy(); - modeledEntity.addModel(activeModel, false); + modeledEntity.addModel(activeModel, false).ifPresent(ActiveModel::destroy); } public void unequip(CosmeticProfile profile) { @@ -212,7 +225,7 @@ public class MEGManager extends MCCosmeticsManager<MEGAccessory> { final var activeModel = ModelEngineAPI.createActiveModel(blueprint); final var property = new SimpleProperty(activeModel, animation, 1, 0, 1); - property.setForceLoopMode(LoopMode.LOOP); + property.setForceLoopMode(BlueprintAnimation.LoopMode.LOOP); property.setForceOverride(true); activeModel.getAnimationHandler().playAnimation(property, true); activeModel.setCanHurt(false); @@ -223,11 +236,11 @@ public class MEGManager extends MCCosmeticsManager<MEGAccessory> { if(modeledEntity == null) { modeledEntity = ModelEngineAPI.createModeledEntity(dummy); modeledEntity.setBaseEntityVisible(true); - if(modeledEntity.getRangeManager() instanceof RangeManager.Disguise disguise) { - disguise.setIncludeSelf(true); - } + //if(modeledEntity.getRangeManager() instanceof RangeManager.Disguise disguise) { + // disguise.setIncludeSelf(true); + //} - modeledEntity.getRangeManager().forceSpawn(mannequin.getPlayer()); + //modeledEntity.getRangeManager().forceSpawn(mannequin.getPlayer()); } modeledEntity.destroy(); diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/offhand/Offhand.java b/plugin/src/main/java/io/lumine/cosmetics/managers/offhand/Offhand.java index ea1243cddf18bf7f91beb9ea36144feb463475d7..57a939ae3ad9d42412b6ac58d3afe2218977469e 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/offhand/Offhand.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/offhand/Offhand.java @@ -6,8 +6,8 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.items.ItemFactory; -import io.lumine.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.items.ItemFactory; +import io.lumine.mythic.bukkit.utils.menu.Icon; import org.bukkit.inventory.ItemStack; diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/offhand/OffhandManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/offhand/OffhandManager.java index 6b259ae3478f1031463cba2ca25dd2996400665b..3cc51bf8cd6ec47fb5b57712f71c8c1875423f7b 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/offhand/OffhandManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/offhand/OffhandManager.java @@ -10,7 +10,8 @@ import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.managers.gestures.Gesture; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.Events; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.Events; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerRespawnEvent; @@ -59,7 +60,7 @@ public class OffhandManager extends MCCosmeticsManager<Offhand> implements Hidea } @Override - public Offhand build(File file, String node) { + public Offhand build(Pack pack, File file, String node) { return new Offhand(this, file, node); } diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/particle/ParticleAccessory.java b/plugin/src/main/java/io/lumine/cosmetics/managers/particle/ParticleAccessory.java index 0efbe3e9fcf61d0f76bd2bd01965d8c6cec393f9..5f138241d0a2554360f4b5ea4554f5678b16cb4f 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/particle/ParticleAccessory.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/particle/ParticleAccessory.java @@ -4,7 +4,7 @@ import io.lumine.cosmetics.api.cosmetics.ColorableCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.menu.Icon; import java.io.File; diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/particle/ParticleManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/particle/ParticleManager.java index 71ca7b19a12a3e41a1bc8e524a5d406525d4d11a..469453c6141b63702840958c5dd7e2837de280c7 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/particle/ParticleManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/particle/ParticleManager.java @@ -3,6 +3,7 @@ package io.lumine.cosmetics.managers.particle; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.managers.MCCosmeticsManager; +import io.lumine.mythic.api.packs.Pack; import java.io.File; @@ -13,7 +14,7 @@ public class ParticleManager extends MCCosmeticsManager<ParticleAccessory> { } @Override - public ParticleAccessory build(File file, String node) { + public ParticleAccessory build(Pack pack, File file, String node) { return new ParticleAccessory(this, file, node); } diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/pets/Pet.java b/plugin/src/main/java/io/lumine/cosmetics/managers/pets/Pet.java index 1afe90e87cf4d006ca9158afb42015a98a6ee64d..cc9495803336516d769ef2936e69d2c8c9fdfec3 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/pets/Pet.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/pets/Pet.java @@ -5,9 +5,9 @@ import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.StringProp; -import io.lumine.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp; +import io.lumine.mythic.bukkit.utils.menu.Icon; import lombok.Getter; import java.io.File; diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/pets/PetManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/pets/PetManager.java index d1b897b60661f3934df2e40a578bffca7ec63fd8..a07e24f549d8c2c0ef9d54030e803b3cab09ad17 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/pets/PetManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/pets/PetManager.java @@ -3,6 +3,7 @@ package io.lumine.cosmetics.managers.pets; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.managers.MCCosmeticsManager; +import io.lumine.mythic.api.packs.Pack; import java.io.File; @@ -13,7 +14,7 @@ public class PetManager extends MCCosmeticsManager<Pet> { } @Override - public Pet build(File file, String node) { + public Pet build(Pack pack, File file, String node) { return new Pet(this, file, node); } diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/Spray.java b/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/Spray.java index 242f42c014d60ade54d8ba34131677e0d38418eb..57cf6ea2f950dd6cbc08d70b27a92a0cae856b44 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/Spray.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/Spray.java @@ -3,7 +3,7 @@ package io.lumine.cosmetics.managers.sprays; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.AbstractCosmetic; -import io.lumine.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.menu.Icon; import java.io.File; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/SprayImage.java b/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/SprayImage.java index c1a636671df6221a7a60e34a14e0e70b6dcc0b96..a85af2d226af115a8648d842b3cf9ba174741f91 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/SprayImage.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/SprayImage.java @@ -2,8 +2,8 @@ package io.lumine.cosmetics.managers.sprays; import java.io.File; -import io.lumine.utils.logging.Log; -import io.lumine.utils.maps.MapImage; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.maps.MapImage; import lombok.Data; @Data diff --git a/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/SprayManager.java b/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/SprayManager.java index e3849db65cdce09f7c424c215fb6c358fae0cc58..882366b5668d23459fefc8fe57577efc0af708aa 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/SprayManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/managers/sprays/SprayManager.java @@ -1,10 +1,11 @@ package io.lumine.cosmetics.managers.sprays; -import io.lumine.utils.Events; -import io.lumine.utils.Schedulers; -import io.lumine.utils.config.properties.types.IntProp; -import io.lumine.utils.cooldown.Cooldown; -import io.lumine.utils.cooldown.CooldownMap; +import io.lumine.mythic.api.packs.Pack; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.Schedulers; +import io.lumine.mythic.bukkit.utils.config.properties.types.IntProp; +import io.lumine.mythic.bukkit.utils.cooldown.Cooldown; +import io.lumine.mythic.bukkit.utils.cooldown.CooldownMap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import io.lumine.cosmetics.MCCosmeticsPlugin; @@ -14,13 +15,13 @@ import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.managers.back.BackAccessory; import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.BooleanProp; -import io.lumine.utils.config.properties.types.DoubleProp; -import io.lumine.utils.config.properties.types.StringProp; -import io.lumine.utils.files.Files; -import io.lumine.utils.logging.Log; -import io.lumine.utils.numbers.Numbers; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.BooleanProp; +import io.lumine.mythic.bukkit.utils.config.properties.types.DoubleProp; +import io.lumine.mythic.bukkit.utils.config.properties.types.StringProp; +import io.lumine.mythic.bukkit.utils.files.Files; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.numbers.Numbers; import org.bukkit.Bukkit; import org.bukkit.FluidCollisionMode; import org.bukkit.Location; @@ -92,7 +93,7 @@ public class SprayManager extends MCCosmeticsManager<Spray> { } @Override - public Spray build(File file, String node) { + public Spray build(Pack pack, File file, String node) { return new Spray(this, file, node); } diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/CosmeticMenu.java b/plugin/src/main/java/io/lumine/cosmetics/menus/CosmeticMenu.java index 30907439b9a98dc8234713ab127e6672e26b7fc8..28a6a4b37cda6110c2fcb86147c04e28899164dc 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/CosmeticMenu.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/CosmeticMenu.java @@ -1,11 +1,15 @@ package io.lumine.cosmetics.menus; import io.lumine.cosmetics.MCCosmeticsPlugin; +import io.lumine.cosmetics.constants.CosmeticType; +import io.lumine.cosmetics.logging.MCLogger; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.config.properties.types.MenuProp; -import io.lumine.utils.menu.EditableMenuBuilder; -import io.lumine.utils.menu.ReloadableMenu; +import io.lumine.mythic.bukkit.MythicBukkit; +import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp; +import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder; +import io.lumine.mythic.bukkit.utils.menu.ReloadableMenu; import lombok.Getter; +import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; public abstract class CosmeticMenu<T> extends ReloadableMenu<T> { @@ -35,8 +39,29 @@ public abstract class CosmeticMenu<T> extends ReloadableMenu<T> { //menu.open(player, state); //profile.setHatIsActive(b); } - - public EditableMenuBuilder<Profile> addPageButtons(EditableMenuBuilder<Profile> builder) { + + @Override + public EditableMenuBuilder<T> build(EditableMenuBuilder<T> builder) { + + builder.getIcons().values().forEach(icon -> { + final var config = icon.getConfigurationSection(); + + if(config.isSet("Model") && !config.isInt("Model")) { + final var model = config.getString("Model"); + MCLogger.log("Found Model {0}", model); + + if(MythicBukkit.inst().getCompatibility().getCrucible().isPresent()) { + final var generationFeedback = MythicBukkit.inst().getCompatibility().getCrucible().get().addItemToGeneration(plugin.getConfiguration().getMythicPack(), model); + + if(generationFeedback.getItemModel().isPresent()) { + var itemModelKey = generationFeedback.getItemModel().get(); + icon.getBuilder().itemModel(itemModelKey); + MCLogger.log("Set Menu ItemModel {0}", model); + } + } + } + }); + builder.getIcon("NEXT_PAGE").ifPresent(icon -> { icon.getBuilder().click((profile,player) -> { playMenuClick(player); @@ -49,9 +74,10 @@ public abstract class CosmeticMenu<T> extends ReloadableMenu<T> { previousPage(player); }); }); + return builder; } - + public static void playMenuClick(Player player) { player.playSound(player.getLocation(), "entity.chicken.egg", 1F, 1F); } diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/CustomizeMenu.java b/plugin/src/main/java/io/lumine/cosmetics/menus/CustomizeMenu.java index 57365269a7d54e3fec0b5ad1f26a9a56c4893b66..8f84a144ba567748330c8193ce09c50098b59783 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/CustomizeMenu.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/CustomizeMenu.java @@ -3,8 +3,9 @@ package io.lumine.cosmetics.menus; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.config.properties.types.MenuProp; -import io.lumine.utils.menu.EditableMenuBuilder; +import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder; public class CustomizeMenu extends CosmeticMenu<Profile> { @@ -26,7 +27,7 @@ public class CustomizeMenu extends CosmeticMenu<Profile> { }); } - return builder; + return super.build(builder); } } diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/GenericSelectionMenu.java b/plugin/src/main/java/io/lumine/cosmetics/menus/GenericSelectionMenu.java index 13a52c9b8177c3d6589b505679722edd588bdd04..318f12d4aeba54262c8df47166b2a8b7ef65be38 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/GenericSelectionMenu.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/GenericSelectionMenu.java @@ -2,9 +2,9 @@ package io.lumine.cosmetics.menus; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.Schedulers; -import io.lumine.utils.config.properties.types.MenuProp; -import io.lumine.utils.menu.EditableMenuBuilder; +import io.lumine.mythic.bukkit.utils.Schedulers; +import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp; +import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder; public class GenericSelectionMenu extends CosmeticMenu<SelectionMenuContext> { diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/GenericVariantSelectionMenu.java b/plugin/src/main/java/io/lumine/cosmetics/menus/GenericVariantSelectionMenu.java index 5bf0c69070abeb03724dc33e60433a6699258656..2045a9a10fe6ebc24612acd9e4d1398fcd922401 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/GenericVariantSelectionMenu.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/GenericVariantSelectionMenu.java @@ -2,8 +2,8 @@ package io.lumine.cosmetics.menus; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.config.properties.types.MenuProp; -import io.lumine.utils.menu.EditableMenuBuilder; +import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp; +import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder; public class GenericVariantSelectionMenu extends CosmeticMenu<Profile> { diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/MenuManager.java b/plugin/src/main/java/io/lumine/cosmetics/menus/MenuManager.java index 50db49784188aa48d993e25026854876cd7cbf2e..3a561326a7d9bbd6189bb352c401aad5454195ef 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/MenuManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/MenuManager.java @@ -7,7 +7,7 @@ import com.google.common.collect.Lists; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.plugin.ReloadableModule; +import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule; import lombok.Getter; public class MenuManager extends ReloadableModule<MCCosmeticsPlugin> { diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/SelectColorContext.java b/plugin/src/main/java/io/lumine/cosmetics/menus/SelectColorContext.java index 27067c6e70806012f78fef8b24c762abc8a75827..34a387d16ad86bf6af8bf909b8842865c8477fba 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/SelectColorContext.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/SelectColorContext.java @@ -3,7 +3,7 @@ package io.lumine.cosmetics.menus; import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.serialize.Chroma; +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import lombok.Data; @Data diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/SelectColorMenu.java b/plugin/src/main/java/io/lumine/cosmetics/menus/SelectColorMenu.java index 5bdc13e0284b7f5fb06086f8e22144558a4d1392..5f6ea67417a1e0db0ea6343e6164bf97140520a9 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/SelectColorMenu.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/SelectColorMenu.java @@ -2,10 +2,10 @@ package io.lumine.cosmetics.menus; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.config.properties.types.MenuProp; -import io.lumine.utils.menu.EditableMenuBuilder; -import io.lumine.utils.menu.Icon; -import io.lumine.utils.menu.MenuData; +import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp; +import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder; +import io.lumine.mythic.bukkit.utils.menu.Icon; +import io.lumine.mythic.bukkit.utils.menu.MenuData; public class SelectColorMenu extends CosmeticMenu<SelectColorContext> { diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/SelectionMenu.java b/plugin/src/main/java/io/lumine/cosmetics/menus/SelectionMenu.java index 43ff6562fc4be3a6ed6eed3bfe86ca809900d9e4..4de6622788da7c93d887d0ce59d0f406388c862a 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/SelectionMenu.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/SelectionMenu.java @@ -4,10 +4,10 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.config.Scope; import io.lumine.cosmetics.managers.MCCosmeticsManager; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.Schedulers; -import io.lumine.utils.config.properties.Property; -import io.lumine.utils.config.properties.types.MenuProp; -import io.lumine.utils.menu.EditableMenuBuilder; +import io.lumine.mythic.bukkit.utils.Schedulers; +import io.lumine.mythic.bukkit.utils.config.properties.Property; +import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp; +import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder; public class SelectionMenu extends CosmeticMenu<Profile> { @@ -21,8 +21,6 @@ public class SelectionMenu extends CosmeticMenu<Profile> { @Override public EditableMenuBuilder<Profile> build(EditableMenuBuilder<Profile> builder) { - builder = addPageButtons(builder); - builder.getIcon("BUTTON_BACK").ifPresent(icon -> { icon.getBuilder().click((profile,player) -> { playMenuClick(player); @@ -45,7 +43,7 @@ public class SelectionMenu extends CosmeticMenu<Profile> { }); }); - return builder; + return super.build(builder); } } diff --git a/plugin/src/main/java/io/lumine/cosmetics/menus/VariantMenu.java b/plugin/src/main/java/io/lumine/cosmetics/menus/VariantMenu.java index f8aef1b36f4f49925f52d86fe5c5262e406fd03c..da47a6ce77d4622feb48fb98d6eec663150916c3 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/menus/VariantMenu.java +++ b/plugin/src/main/java/io/lumine/cosmetics/menus/VariantMenu.java @@ -2,8 +2,8 @@ package io.lumine.cosmetics.menus; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.config.properties.types.MenuProp; -import io.lumine.utils.menu.EditableMenuBuilder; +import io.lumine.mythic.bukkit.utils.config.properties.types.MenuProp; +import io.lumine.mythic.bukkit.utils.menu.EditableMenuBuilder; public class VariantMenu extends CosmeticMenu<Profile> { diff --git a/plugin/src/main/java/io/lumine/cosmetics/players/Profile.java b/plugin/src/main/java/io/lumine/cosmetics/players/Profile.java index 6df4c09051d754d7ecf264126f90f1ebcd8a15b7..877d8b24ea2b6329b4e11658bc9da5963a634265 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/players/Profile.java +++ b/plugin/src/main/java/io/lumine/cosmetics/players/Profile.java @@ -9,8 +9,8 @@ import io.lumine.cosmetics.constants.CosmeticType; import io.lumine.cosmetics.storage.sql.SqlStorage; import io.lumine.cosmetics.storage.sql.mappings.Keys; import io.lumine.cosmetics.storage.sql.mappings.tables.records.ProfileRecord; -import io.lumine.utils.Schedulers; -import io.lumine.utils.serialize.Chroma; +import io.lumine.mythic.bukkit.utils.Schedulers; +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import lombok.Getter; import org.bukkit.entity.Player; @@ -23,7 +23,7 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; -public class Profile implements CosmeticProfile,io.lumine.utils.storage.players.Profile { +public class Profile implements CosmeticProfile,io.lumine.mythic.bukkit.utils.storage.players.Profile { @Getter private UUID uniqueId; @Getter private String name; diff --git a/plugin/src/main/java/io/lumine/cosmetics/players/ProfileCosmeticData.java b/plugin/src/main/java/io/lumine/cosmetics/players/ProfileCosmeticData.java index 036273f64c2230a8af2ffada27949084b72c87f8..46c607d2ecc0bfad78672d13888016a0ce9a024a 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/players/ProfileCosmeticData.java +++ b/plugin/src/main/java/io/lumine/cosmetics/players/ProfileCosmeticData.java @@ -7,7 +7,7 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.cosmetics.CosmeticVariant; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.storage.sql.mappings.tables.records.ProfileEquippedRecord; -import io.lumine.utils.serialize.Chroma; +import io.lumine.mythic.bukkit.utils.serialize.Chroma; import lombok.Data; @Data diff --git a/plugin/src/main/java/io/lumine/cosmetics/players/ProfileManager.java b/plugin/src/main/java/io/lumine/cosmetics/players/ProfileManager.java index dc5c1ecf1f9568ffc37324ccda89de77b296e548..8c4e9de9829f9492aba0a0fb110219175343cb69 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/players/ProfileManager.java +++ b/plugin/src/main/java/io/lumine/cosmetics/players/ProfileManager.java @@ -4,11 +4,11 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.events.CosmeticPlayerLoadedEvent; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.storage.sql.SqlStorage; -import io.lumine.utils.storage.sql.SqlConnector; -import io.lumine.utils.Events; -import io.lumine.utils.logging.Log; -import io.lumine.utils.storage.players.PlayerRepository; -import io.lumine.utils.storage.players.adapters.file.JsonPlayerStorageAdapter; +import io.lumine.mythic.bukkit.utils.storage.sql.SqlConnector; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.storage.players.PlayerRepository; +import io.lumine.mythic.bukkit.utils.storage.players.adapters.file.JsonPlayerStorageAdapter; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerGameModeChangeEvent; diff --git a/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeExecutor.java b/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeExecutor.java index 6d7a2963316deea4e6632b0599304a2f85fe6521..0bc5ca3fb30a222f5eb311e6fb08d1f548238b4b 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeExecutor.java +++ b/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeExecutor.java @@ -11,8 +11,8 @@ import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.api.players.wardrobe.WardrobeManager; import io.lumine.cosmetics.commands.CommandHelper; -import io.lumine.utils.Events; -import io.lumine.utils.plugin.ReloadableModule; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.plugin.ReloadableModule; public class WardrobeExecutor extends ReloadableModule<MCCosmeticsPlugin> implements WardrobeManager { diff --git a/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeMegDummy.java b/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeMegDummy.java index 0b733c4b35982cdadb2b09963a8ca7cd550a4b5c..5d7cfd7988818c2f87b868c7a0f1b9a0a65471c7 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeMegDummy.java +++ b/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeMegDummy.java @@ -1,19 +1,15 @@ package io.lumine.cosmetics.players.wardrobe; -import java.util.UUID; - +import com.ticxo.playeranimator.api.utils.math.Offset; import org.bukkit.Location; -import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import org.jetbrains.annotations.NotNull; import com.ticxo.modelengine.api.entity.Dummy; import com.ticxo.modelengine.api.nms.entity.wrapper.BodyRotationController; -import com.ticxo.modelengine.api.utils.math.Offset; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.managers.modelengine.ModelAnchor; -import io.lumine.utils.serialize.Orient; +import io.lumine.mythic.bukkit.utils.serialize.Orient; public class WardrobeMegDummy extends Dummy { @@ -25,7 +21,7 @@ public class WardrobeMegDummy extends Dummy { private BodyRotationController controller; public WardrobeMegDummy(Mannequin mannequin, Orient orient, ModelAnchor anchor) { - super(mannequin.getEntityId(), mannequin.getUniqueId()); + super(mannequin.getUniqueId(), mannequin.getUniqueId()); this.mannequin = mannequin; offset = orient.getLocus().toVector(); @@ -35,15 +31,10 @@ public class WardrobeMegDummy extends Dummy { this.setYBodyRot(mannequin.getRotation()); this.setYHeadRot(mannequin.getRotation()); - } - @Override - public BodyRotationController wrapBodyRotationControl() { - controller = super.wrapBodyRotationControl(); - controller.setMaxHeadAngle(45); - controller.setMaxBodyAngle(45); - controller.setStableAngle(5); - return controller; + this.getBodyRotationController().setMaxHeadAngle(45); + this.getBodyRotationController().setMaxBodyAngle(45); + this.getBodyRotationController().setStableAngle(5); } @Override diff --git a/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeTrackerImpl.java b/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeTrackerImpl.java index 40dea924651d5f2bd4b553f1cab154bc07404d06..077778b6fbb3ed2cdb514dad89490955deceb216 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeTrackerImpl.java +++ b/plugin/src/main/java/io/lumine/cosmetics/players/wardrobe/WardrobeTrackerImpl.java @@ -15,11 +15,11 @@ import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.api.players.wardrobe.WardrobeManager; import io.lumine.cosmetics.api.players.wardrobe.WardrobeTracker; import io.lumine.cosmetics.constants.CosmeticType; -import io.lumine.utils.Events; -import io.lumine.utils.Players; -import io.lumine.utils.Schedulers; -import io.lumine.utils.particles.Particle; -import io.lumine.utils.plugin.PluginComponent; +import io.lumine.mythic.bukkit.utils.Events; +import io.lumine.mythic.bukkit.utils.Players; +import io.lumine.mythic.bukkit.utils.Schedulers; +import io.lumine.mythic.bukkit.utils.particles.Particle; +import io.lumine.mythic.bukkit.utils.plugin.PluginComponent; import lombok.Getter; public class WardrobeTrackerImpl extends PluginComponent<MCCosmeticsPlugin> implements WardrobeTracker,Runnable { diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/StorageDriver.java b/plugin/src/main/java/io/lumine/cosmetics/storage/StorageDriver.java index 870c3288e23868c4158950ac02ca93b7dd3f7a36..95abd6b16b9680eeeae75fc6e3254518c54a4951 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/StorageDriver.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/StorageDriver.java @@ -1,6 +1,6 @@ package io.lumine.cosmetics.storage; -import io.lumine.utils.storage.sql.SqlProvider; +import io.lumine.mythic.bukkit.utils.storage.sql.SqlProvider; import lombok.Getter; public enum StorageDriver { diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/SqlStorage.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/SqlStorage.java index ac5c0f27776034b8976a09bf1faddf7b46aed1b6..f5db589fc86bde5f8bdfef43f6638d12b9884c3e 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/SqlStorage.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/SqlStorage.java @@ -7,13 +7,13 @@ import io.lumine.cosmetics.players.ProfileCosmeticData; import io.lumine.cosmetics.players.ProfileManager; import io.lumine.cosmetics.storage.sql.mappings.DefaultSchema; import io.lumine.cosmetics.storage.sql.mappings.Tables; -import io.lumine.utils.lib.jooq.exception.DataAccessException; -import io.lumine.utils.logging.Log; -import io.lumine.utils.plugin.LuminePlugin; -import io.lumine.utils.promise.Promise; -import io.lumine.utils.storage.players.Profile; -import io.lumine.utils.storage.players.adapters.SqlPlayerStorageAdapter; -import io.lumine.utils.storage.sql.SqlConnector; +import io.lumine.mythic.bukkit.utils.lib.jooq.exception.DataAccessException; +import io.lumine.mythic.bukkit.utils.logging.Log; +import io.lumine.mythic.bukkit.utils.plugin.LuminePlugin; +import io.lumine.mythic.bukkit.utils.promise.Promise; +import io.lumine.mythic.bukkit.utils.storage.players.Profile; +import io.lumine.mythic.bukkit.utils.storage.players.adapters.SqlPlayerStorageAdapter; +import io.lumine.mythic.bukkit.utils.storage.sql.SqlConnector; public class SqlStorage<MCCosmeticsPlugin,CosmeticsProfile> extends SqlPlayerStorageAdapter { diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/DefaultCatalog.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/DefaultCatalog.java index 09dd92764dfce0247fd0a91fea812a9f916359cf..7a73be0cef2bfa7cd09f4cedef4424bb5eb07bc7 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/DefaultCatalog.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/DefaultCatalog.java @@ -7,9 +7,9 @@ package io.lumine.cosmetics.storage.sql.mappings; import java.util.Arrays; import java.util.List; -import io.lumine.utils.lib.jooq.Constants; -import io.lumine.utils.lib.jooq.Schema; -import io.lumine.utils.lib.jooq.impl.CatalogImpl; +import io.lumine.mythic.bukkit.utils.lib.jooq.Constants; +import io.lumine.mythic.bukkit.utils.lib.jooq.Schema; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.CatalogImpl; /** diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/DefaultSchema.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/DefaultSchema.java index d71e3c9c2ec73b79f322f0108ae31300ea44e2ef..761f1a90a14a14124fce6ec3f922be1d5be65918 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/DefaultSchema.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/DefaultSchema.java @@ -10,9 +10,9 @@ import io.lumine.cosmetics.storage.sql.mappings.tables.MccosmeticsProfileEquippe import java.util.Arrays; import java.util.List; -import io.lumine.utils.lib.jooq.Catalog; -import io.lumine.utils.lib.jooq.Table; -import io.lumine.utils.lib.jooq.impl.SchemaImpl; +import io.lumine.mythic.bukkit.utils.lib.jooq.Catalog; +import io.lumine.mythic.bukkit.utils.lib.jooq.Table; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.SchemaImpl; /** diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/Indexes.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/Indexes.java index 2ac4ff42b91241b6ef4ca7b50e5fea764e7c7d9f..d48c6aaa74d402cfd6a6b55c4238684b829b3b0f 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/Indexes.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/Indexes.java @@ -6,10 +6,10 @@ package io.lumine.cosmetics.storage.sql.mappings; import io.lumine.cosmetics.storage.sql.mappings.tables.MccosmeticsProfileEquipped; -import io.lumine.utils.lib.jooq.Index; -import io.lumine.utils.lib.jooq.OrderField; -import io.lumine.utils.lib.jooq.impl.DSL; -import io.lumine.utils.lib.jooq.impl.Internal; +import io.lumine.mythic.bukkit.utils.lib.jooq.Index; +import io.lumine.mythic.bukkit.utils.lib.jooq.OrderField; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.DSL; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.Internal; /** diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/Keys.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/Keys.java index daa8d6895d805ba1288ef3badbc38902249cc42b..1778cb9321715f14079901ff2af776c575b02405 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/Keys.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/Keys.java @@ -9,11 +9,11 @@ import io.lumine.cosmetics.storage.sql.mappings.tables.MccosmeticsProfileEquippe import io.lumine.cosmetics.storage.sql.mappings.tables.records.ProfileEquippedRecord; import io.lumine.cosmetics.storage.sql.mappings.tables.records.ProfileRecord; -import io.lumine.utils.lib.jooq.ForeignKey; -import io.lumine.utils.lib.jooq.TableField; -import io.lumine.utils.lib.jooq.UniqueKey; -import io.lumine.utils.lib.jooq.impl.DSL; -import io.lumine.utils.lib.jooq.impl.Internal; +import io.lumine.mythic.bukkit.utils.lib.jooq.ForeignKey; +import io.lumine.mythic.bukkit.utils.lib.jooq.TableField; +import io.lumine.mythic.bukkit.utils.lib.jooq.UniqueKey; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.DSL; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.Internal; /** diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/MccosmeticsProfile.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/MccosmeticsProfile.java index cb3711c30710a85aaf70047d8bb939a65b6ae63a..ed836720b304b9f2407d2eb1b9f942ef9bc92921 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/MccosmeticsProfile.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/MccosmeticsProfile.java @@ -8,19 +8,19 @@ import io.lumine.cosmetics.storage.sql.mappings.DefaultSchema; import io.lumine.cosmetics.storage.sql.mappings.Keys; import io.lumine.cosmetics.storage.sql.mappings.tables.records.ProfileRecord; -import io.lumine.utils.lib.jooq.Field; -import io.lumine.utils.lib.jooq.ForeignKey; -import io.lumine.utils.lib.jooq.Name; -import io.lumine.utils.lib.jooq.Record; -import io.lumine.utils.lib.jooq.Row2; -import io.lumine.utils.lib.jooq.Schema; -import io.lumine.utils.lib.jooq.Table; -import io.lumine.utils.lib.jooq.TableField; -import io.lumine.utils.lib.jooq.TableOptions; -import io.lumine.utils.lib.jooq.UniqueKey; -import io.lumine.utils.lib.jooq.impl.DSL; -import io.lumine.utils.lib.jooq.impl.SQLDataType; -import io.lumine.utils.lib.jooq.impl.TableImpl; +import io.lumine.mythic.bukkit.utils.lib.jooq.Field; +import io.lumine.mythic.bukkit.utils.lib.jooq.ForeignKey; +import io.lumine.mythic.bukkit.utils.lib.jooq.Name; +import io.lumine.mythic.bukkit.utils.lib.jooq.Record; +import io.lumine.mythic.bukkit.utils.lib.jooq.Row2; +import io.lumine.mythic.bukkit.utils.lib.jooq.Schema; +import io.lumine.mythic.bukkit.utils.lib.jooq.Table; +import io.lumine.mythic.bukkit.utils.lib.jooq.TableField; +import io.lumine.mythic.bukkit.utils.lib.jooq.TableOptions; +import io.lumine.mythic.bukkit.utils.lib.jooq.UniqueKey; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.DSL; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.SQLDataType; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.TableImpl; /** diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/MccosmeticsProfileEquipped.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/MccosmeticsProfileEquipped.java index bafb667271ac8534b7dfe1150f4d6e00237879ef..5f1c81d494014e907159a66aa747c9aaba26b4d7 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/MccosmeticsProfileEquipped.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/MccosmeticsProfileEquipped.java @@ -12,20 +12,20 @@ import io.lumine.cosmetics.storage.sql.mappings.tables.records.ProfileEquippedRe import java.util.Arrays; import java.util.List; -import io.lumine.utils.lib.jooq.Field; -import io.lumine.utils.lib.jooq.ForeignKey; -import io.lumine.utils.lib.jooq.Index; -import io.lumine.utils.lib.jooq.Name; -import io.lumine.utils.lib.jooq.Record; -import io.lumine.utils.lib.jooq.Row4; -import io.lumine.utils.lib.jooq.Schema; -import io.lumine.utils.lib.jooq.Table; -import io.lumine.utils.lib.jooq.TableField; -import io.lumine.utils.lib.jooq.TableOptions; -import io.lumine.utils.lib.jooq.UniqueKey; -import io.lumine.utils.lib.jooq.impl.DSL; -import io.lumine.utils.lib.jooq.impl.SQLDataType; -import io.lumine.utils.lib.jooq.impl.TableImpl; +import io.lumine.mythic.bukkit.utils.lib.jooq.Field; +import io.lumine.mythic.bukkit.utils.lib.jooq.ForeignKey; +import io.lumine.mythic.bukkit.utils.lib.jooq.Index; +import io.lumine.mythic.bukkit.utils.lib.jooq.Name; +import io.lumine.mythic.bukkit.utils.lib.jooq.Record; +import io.lumine.mythic.bukkit.utils.lib.jooq.Row4; +import io.lumine.mythic.bukkit.utils.lib.jooq.Schema; +import io.lumine.mythic.bukkit.utils.lib.jooq.Table; +import io.lumine.mythic.bukkit.utils.lib.jooq.TableField; +import io.lumine.mythic.bukkit.utils.lib.jooq.TableOptions; +import io.lumine.mythic.bukkit.utils.lib.jooq.UniqueKey; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.DSL; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.SQLDataType; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.TableImpl; /** diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/records/ProfileEquippedRecord.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/records/ProfileEquippedRecord.java index a8be479e38e81c414e65928653fb13ece0f284db..2078b99331134bf75f9c8a2d68cc52286a9a91f9 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/records/ProfileEquippedRecord.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/records/ProfileEquippedRecord.java @@ -6,11 +6,11 @@ package io.lumine.cosmetics.storage.sql.mappings.tables.records; import io.lumine.cosmetics.storage.sql.mappings.tables.MccosmeticsProfileEquipped; -import io.lumine.utils.lib.jooq.Field; -import io.lumine.utils.lib.jooq.Record2; -import io.lumine.utils.lib.jooq.Record4; -import io.lumine.utils.lib.jooq.Row4; -import io.lumine.utils.lib.jooq.impl.UpdatableRecordImpl; +import io.lumine.mythic.bukkit.utils.lib.jooq.Field; +import io.lumine.mythic.bukkit.utils.lib.jooq.Record2; +import io.lumine.mythic.bukkit.utils.lib.jooq.Record4; +import io.lumine.mythic.bukkit.utils.lib.jooq.Row4; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.UpdatableRecordImpl; /** diff --git a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/records/ProfileRecord.java b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/records/ProfileRecord.java index 97980afd0bb92524bb17b270d125b642f3d6cbf0..3822da9ba1604d22d13947d41f31e998a8ca2bea 100644 --- a/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/records/ProfileRecord.java +++ b/plugin/src/main/java/io/lumine/cosmetics/storage/sql/mappings/tables/records/ProfileRecord.java @@ -6,11 +6,11 @@ package io.lumine.cosmetics.storage.sql.mappings.tables.records; import io.lumine.cosmetics.storage.sql.mappings.tables.MccosmeticsProfile; -import io.lumine.utils.lib.jooq.Field; -import io.lumine.utils.lib.jooq.Record1; -import io.lumine.utils.lib.jooq.Record2; -import io.lumine.utils.lib.jooq.Row2; -import io.lumine.utils.lib.jooq.impl.UpdatableRecordImpl; +import io.lumine.mythic.bukkit.utils.lib.jooq.Field; +import io.lumine.mythic.bukkit.utils.lib.jooq.Record1; +import io.lumine.mythic.bukkit.utils.lib.jooq.Record2; +import io.lumine.mythic.bukkit.utils.lib.jooq.Row2; +import io.lumine.mythic.bukkit.utils.lib.jooq.impl.UpdatableRecordImpl; /** diff --git a/plugin/src/main/resources-filtered/plugin.yml b/plugin/src/main/resources-filtered/plugin.yml index d5b999a1717ca44f4d4a07db42046624a52a7109..7ce827136e5ff21572c1cab53012204b1706909f 100644 --- a/plugin/src/main/resources-filtered/plugin.yml +++ b/plugin/src/main/resources-filtered/plugin.yml @@ -1,12 +1,13 @@ -name: MCCosmetics +name: MythicCosmetics author: Lumine & MCModels main: io.lumine.cosmetics.MCCosmeticsPlugin version: ${project.version}-${build.number} api-version: 1.13 -depend: [] +depend: +- MythicMobs softdepend: - ModelEngine -- MythicMobs +- MythicCrucible - Vault - LibsDisguises - PlaceholderAPI diff --git a/plugin/src/main/resources/config.yml b/plugin/src/main/resources/config.yml index 461ec09acaac5f5cf5eda012a6d31e325f9896cf..ece72f5eac22ee43ffedc8ae54aa399868246ddb 100644 --- a/plugin/src/main/resources/config.yml +++ b/plugin/src/main/resources/config.yml @@ -1,16 +1,50 @@ +# +# Configuration Options for Cosmetics +# +# Config options for MythicCosmetics. Learn more on the wiki here: +# +# Manual - https://git.mythiccraft.io/mythiccosmetics/MythicCosmetics/-/wikis/home +# Discord - https://www.discord.gg/MythicCraft +# Configuration: + + #================================================================================ + # Information for where data is stored + #================================================================================ + Storage: Driver: JSON + + #================================================================================ + # General Options + #================================================================================ + General: - EquipDelay: 5 + EquipDelay: 5 # Delay before equipping when a player joins + GenerateDefaultPack: true # Whether to generate the default 'example' pack + + # + # Plugin Assets refer to things like menu GUIs, icons, etc. + # These can be automatically implicitly generated by Crucible from a given pack + # + Assets: + CrucibleGeneration: false # Should plugin assets be auto-generated by Crucible + PackToGenerateFrom: PLUGIN_DIR # Mythic Pack to generate plugin assets from + + Menus: + Close-On-Unequip: false + + #================================================================================ + # Options for Sprays + #================================================================================ + Sprays: Sound: 'entity.cat.hiss' Volume: 1.0 Pitch: 2.0 ReplaceLast: true PersistTime: 60 - Menus: - Close-On-Unequip: false + Language: Command-Header: "<yellow><strikethrough>------------<gold>=====</strikethrough> <bold><gradient:#dc0c1f:#ed858f>MCCosmetics</gradient></bold> <strikethrough><gold>=====<yellow>------------</strikethrough>" Command-Footer: "<yellow><strikethrough>--------------------------------------</strikethrough>" diff --git a/pom.xml b/pom.xml index ef80e4d75879410d03d5afe14e1c540e834dd1d1..39e6876058346473ff8eb295d8c1d52e614d21f7 100644 --- a/pom.xml +++ b/pom.xml @@ -1,10 +1,10 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> + <artifactId>MythicCosmetics-Plugin</artifactId> <version>${mccosmetics.version}</version> - <name>MCCosmetics</name> - <description>A plugin for creating insane cosmetics.</description> + <name>MythicCosmetics</name> + <description>A plugin for creating thicc cosmetics.</description> <url>https://www.mythiccraft.io</url> <packaging>pom</packaging> <organization> @@ -13,10 +13,11 @@ </organization> <properties> - <mccosmetics.version>0.11.0</mccosmetics.version> - <paperapi.version>1.20.1-R0.1-SNAPSHOT</paperapi.version> - <lumineutils.version>1.19-SNAPSHOT</lumineutils.version> - <lombok.version>1.18.22</lombok.version> + <mccosmetics.version>0.0.1-SNAPSHOT</mccosmetics.version> + <paperapi.version>1.21.3-R0.1-SNAPSHOT</paperapi.version> + <mythic.version>5.8.0-SNAPSHOT</mythic.version> + <lumineutils.version>1.20-SNAPSHOT</lumineutils.version> + <lombok.version>1.18.32</lombok.version> <!--suppress UnresolvedMavenProperty --> <build.number>${CI_COMMIT_SHORT_SHA}</build.number> <downloadSources>false</downloadSources> @@ -31,10 +32,8 @@ <modules> <module>api</module> <module>plugin</module> - <module>v1_18_R2</module> - <module>v1_19_R2</module> - <module>v1_19_R3</module> - <module>v1_20_R1</module> + <module>v1_21_R2</module> + <module>v1_21_R3</module> <module>dist</module> <module>dist-premium</module> </modules> @@ -58,9 +57,9 @@ <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> - <version>3.8.0</version> + <version>3.13.0</version> <configuration> - <release>16</release> + <release>21</release> </configuration> </plugin> </plugins> diff --git a/v1_18_R2/pom.xml b/v1_18_R2/pom.xml deleted file mode 100644 index 40197012b5f38036a684a7ce3cdf62b228f3de87..0000000000000000000000000000000000000000 --- a/v1_18_R2/pom.xml +++ /dev/null @@ -1,164 +0,0 @@ - <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <artifactId>MCCosmetics-v1_18_R2</artifactId> - <parent> - <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> - <version>${mccosmetics.version}</version> - </parent> - - <build> - <plugins> - <plugin> - <groupId>net.md-5</groupId> - <artifactId>specialsource-maven-plugin</artifactId> - <version>1.2.3</version> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>remap</goal> - </goals> - <id>remap-obf</id> - <configuration> - <srgIn>org.spigotmc:minecraft-server:1.18.2-R0.1-SNAPSHOT:txt:maps-mojang</srgIn> - <reverse>true</reverse> - <remappedDependencies>org.spigotmc:spigot:1.18.2-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies> - <remappedArtifactAttached>true</remappedArtifactAttached> - <remappedClassifierName>remapped-obf</remappedClassifierName> - </configuration> - </execution> - <execution> - <phase>package</phase> - <goals> - <goal>remap</goal> - </goals> - <id>remap-spigot</id> - <configuration> - <inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile> - <srgIn>org.spigotmc:minecraft-server:1.18.2-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn> - <remappedDependencies>org.spigotmc:spigot:1.18.2-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>flatten-maven-plugin</artifactId> - <version>1.2.2</version> - <configuration> - <updatePomFile>true</updatePomFile> - </configuration> - <executions> - <execution> - <id>flatten</id> - <phase>package</phase> - <goals> - <goal>flatten</goal> - </goals> - </execution> - <execution> - <id>flatten.clean</id> - <phase>clean</phase> - <goals> - <goal>clean</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - <repositories> - <repository> - <id>spigot-repo</id> - <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> - </repository> - <repository> - <id>lumine</id> - <url>https://mvn.lumine.io/repository/maven/</url> - </repository> - <repository> - <id>paper-repo</id> - <url>https://papermc.io/repo/repository/maven-public/</url> - </repository> - <repository> - <id>minecraft-libraries</id> - <name>Minecraft Libraries</name> - <url>https://libraries.minecraft.net</url> - </repository> - </repositories> - - <dependencies> - <!-- Modules --> - <dependency> - <groupId>io.lumine</groupId> - <artifactId>LumineUtils</artifactId> - <version>${lumineutils.version}</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>io.lumine</groupId> - <artifactId>MCCosmetics</artifactId> - <version>${project.parent.version}</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - <scope>provided</scope> - </dependency> - - <!-- Spigot API --> - <dependency> - <groupId>org.spigotmc</groupId> - <artifactId>spigot-api</artifactId> - <version>1.18.2-R0.1-SNAPSHOT</version> - <classifier>shaded</classifier> - <scope>provided</scope> - </dependency> - - <!-- Spigot NMS version --> - <dependency> - <groupId>org.spigotmc</groupId> - <artifactId>spigot</artifactId> - <version>1.18.2-R0.1-SNAPSHOT</version> - <classifier>remapped-mojang</classifier> - <scope>provided</scope> - <exclusions> - <exclusion> - <groupId>*</groupId> - <artifactId>*</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.mojang</groupId> - <artifactId>authlib</artifactId> - <version>3.11.50</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>com.mojang</groupId> - <artifactId>datafixerupper</artifactId> - <version>1.0.20</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>io.netty</groupId> - <artifactId>netty-all</artifactId> - <version>4.1.68.Final</version> - <scope>provided</scope> - </dependency> - - <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - <version>1.8.0-beta4</version> - </dependency> - - </dependencies> - -</project> \ No newline at end of file diff --git a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R2.java b/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R2.java deleted file mode 100644 index 70aaf5729135afac98eb3367149507a4fca0dc05..0000000000000000000000000000000000000000 --- a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R2.java +++ /dev/null @@ -1,163 +0,0 @@ -package io.lumine.cosmetics.nms; - -import com.google.common.collect.Maps; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.Cosmetic; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.api.players.wardrobe.WardrobeTracker; -import io.lumine.cosmetics.managers.back.BackAccessory; -import io.lumine.cosmetics.managers.gestures.Gesture; -import io.lumine.cosmetics.managers.hats.Hat; -import io.lumine.cosmetics.managers.offhand.Offhand; -import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper; -import io.lumine.cosmetics.nms.v1_18_R2.cosmetic.*; -import io.lumine.cosmetics.nms.v1_18_R2.network.VolatileChannelHandler; -import io.lumine.cosmetics.nms.v1_18_R2.wardrobe.MannequinEntity; -import io.netty.channel.Channel; -import io.netty.channel.ChannelPipeline; -import lombok.Getter; -import net.minecraft.network.Connection; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; - -import java.util.Collection; -import java.util.Map; - -public class VolatileCodeEnabled_v1_18_R2 implements VolatileCodeHandler { - - @Getter private final MCCosmeticsPlugin plugin; - private final Map<Class<? extends Cosmetic>, VolatileCosmeticHelper> cosmeticHelpers = Maps.newConcurrentMap(); - - public VolatileCodeEnabled_v1_18_R2(MCCosmeticsPlugin plugin) { - this.plugin = plugin; - cosmeticHelpers.put(Hat.class, new VolatileHatImpl(plugin, this)); - cosmeticHelpers.put(BackAccessory.class, new VolatileBackImpl(plugin, this)); - cosmeticHelpers.put(Spray.class, new VolatileSprayImpl(plugin, this)); - cosmeticHelpers.put(Offhand.class, new VolatileOffhandImpl(plugin, this)); - cosmeticHelpers.put(Gesture.class, new VolatileGestureImpl(plugin, this)); - } - - @Override - public VolatileCosmeticHelper getCosmeticHelper(Class<? extends Cosmetic> tClass) { - return cosmeticHelpers.get(tClass); - } - - @Override - public Collection<VolatileCosmeticHelper> getCosmeticHelpers() { - return cosmeticHelpers.values(); - } - - @Override - public void injectPlayer(Player player) { - ServerPlayer ply = ((CraftPlayer) player).getHandle(); - VolatileChannelHandler cdh = new VolatileChannelHandler(player, this); - - ChannelPipeline pipeline = ply.connection.getConnection().channel.pipeline(); - for (String name : pipeline.toMap().keySet()) { - if (pipeline.get(name) instanceof Connection) { - pipeline.addBefore(name, "mc_cosmetics_packet_handler", cdh); - break; - } - } - } - - @Override - public void removePlayer(Player player) { - Channel channel = ((CraftPlayer) player).getHandle().connection.getConnection().channel; - channel.eventLoop().submit(() -> { - channel.pipeline().remove("mc_cosmetics_packet_handler"); - return null; - }); - } - - public void broadcast(Packet<?>... packets) { - for(Player player : Bukkit.getOnlinePlayers()) { - var connection = ((CraftPlayer) player).getHandle().connection; - for(Packet<?> packet : packets) { - connection.send(packet); - } - } - } - - public void broadcast(Player player, Packet<?>... packets) { - var connection = ((CraftPlayer) player).getHandle().connection; - for(Packet<?> packet : packets) { - connection.send(packet); - } - } - - public void broadcastAroundAndSelf(Player wearer, Packet<?>... packets) { - final var level = ((CraftWorld) wearer.getWorld()).getHandle(); - final var trackedEntity = level.getChunkSource().chunkMap.entityMap.get(wearer.getEntityId()); - - if(trackedEntity == null) { - broadcast(wearer.getWorld(), packets); - return; - } - - for(Packet<?> packet : packets) - trackedEntity.broadcastAndSend(packet); - } - - public void broadcastAround(Player wearer, Packet<?>... packets) { - final var level = ((CraftWorld) wearer.getWorld()).getHandle(); - final var trackedEntity = level.getChunkSource().chunkMap.entityMap.get(wearer.getEntityId()); - - if(trackedEntity == null) { - broadcast(wearer.getWorld(), packets); - return; - } - - for(Packet<?> packet : packets) - trackedEntity.broadcast(packet); - } - - public void broadcast(World world, Packet<?>... packets) { - for(Player player : world.getPlayers()) { - var connection = ((CraftPlayer) player).getHandle().connection; - for(Packet<?> packet : packets) { - connection.send(packet); - } - } - } - - public Entity getEntity(World world, int id) { - ServerLevel level = ((CraftWorld) world).getHandle(); - final var entityManager = level.entityManager; - final var entity = entityManager.getEntityGetter().get(id); - return entity == null ? null : entity.getBukkitEntity(); - } - - @Override - public Mannequin createMannequin(WardrobeTracker tracker, Player player, Location location) { - return new MannequinEntity(tracker,this,player,location); - } - - @Override - public void removeFakeEntity(int id) { - ClientboundRemoveEntitiesPacket packet = new ClientboundRemoveEntitiesPacket(id); - broadcast(packet); - } - - @Override - public void setBodyYaw(LivingEntity entity, double yaw) { - ((CraftLivingEntity) entity).getHandle().yBodyRot = (float) yaw; - } - - @Override - public float getBodyYaw(LivingEntity entity) { - return ((CraftLivingEntity) entity).getHandle().yBodyRot; - } -} diff --git a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileBackImpl.java b/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileBackImpl.java deleted file mode 100644 index 9711275e715f80071001214f66478d71ec7ed555..0000000000000000000000000000000000000000 --- a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileBackImpl.java +++ /dev/null @@ -1,302 +0,0 @@ -package io.lumine.cosmetics.nms.v1_18_R2.cosmetic; - -import com.google.common.collect.Maps; -import com.mojang.datafixers.util.Pair; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.Cosmetic; -import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; -import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; -import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.logging.MCLogger; -import io.lumine.cosmetics.managers.back.BackAccessory; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2; -import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.*; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.decoration.ArmorStand; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.Map; -import java.util.Optional; - -public class VolatileBackImpl implements VolatileEquipmentHelper { - - @Getter - private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_18_R2 nmsHandler; - private final Map<Player, ArmorStand> activeProfile = Maps.newConcurrentMap(); - private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - - public VolatileBackImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_18_R2 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - @Override - public void apply(CosmeticProfile profile) { - if (profile == null) - return; - Player player = profile.getPlayer(); - - var maybeEquipped = profile.getEquipped(BackAccessory.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equipped = maybeEquipped.get(); - var cosmetic = equipped.getCosmetic(); - - if (!(cosmetic instanceof ItemCosmetic back)) { - return; - } - - var nmsPlayer = ((CraftPlayer) player).getHandle(); - var nmsBack = CraftItemStack.asNMSCopy(back.getCosmetic(equipped)); - - ArmorStand stand = activeProfile.get(player); - if(stand == null) { - playerTracker.put(player.getEntityId(), player); - stand = new ArmorStand(EntityType.ARMOR_STAND, ((CraftWorld) player.getWorld()).getHandle()); - stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + nmsPlayer.getPassengersRidingOffset() + stand.getMyRidingOffset(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); - stand.setMarker(true); - stand.setInvisible(true); - stand.setSilent(true); - - activeProfile.put(player, stand); - - ClientboundAddMobPacket mobPacket = new ClientboundAddMobPacket(stand); - ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData(), true); - ClientboundSetPassengersPacket passengersPacket = createPassengerPacket(player.getEntityId(), stand.getId()); - - nmsHandler.broadcastAroundAndSelf(player, mobPacket, dataPacket, passengersPacket); - } - - stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsBack))); - - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - @Override - public void unapply(CosmeticProfile profile) { - Player player = profile.getPlayer(); - ArmorStand stand = activeProfile.remove(player); - if(stand == null) - return; - playerTracker.remove(player.getEntityId()); - ClientboundRemoveEntitiesPacket removePacket = new ClientboundRemoveEntitiesPacket(stand.getId()); - nmsHandler.broadcastAroundAndSelf(player, removePacket); - } - - @Override - public void equipMannequin(Mannequin mannequin, EquippedCosmetic cosmetic) { - if(!(cosmetic.getCosmetic() instanceof BackAccessory back)) { - return; - } - - final var entityId = mannequin.getEntityId(); - final var player = mannequin.getPlayer(); - var nmsBack = CraftItemStack.asNMSCopy(back.getCosmetic(cosmetic)); - - var mannequinLocation = mannequin.getLocation(); - - mannequin.removeExtraEntity(BackAccessory.class); - - var stand = new ArmorStand(EntityType.ARMOR_STAND, ((CraftWorld) player.getWorld()).getHandle()); - stand.moveTo(mannequinLocation.getX(), mannequinLocation.getY() + stand.getMyRidingOffset(), mannequinLocation.getZ(), mannequinLocation.getYaw(), 0); - stand.setMarker(true); - stand.setInvisible(true); - stand.setSilent(true); - - mannequin.addExtraEntity(BackAccessory.class, stand.getId()); - - var mobPacket = new ClientboundAddEntityPacket(stand); - var dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData(), true); - var passengersPacket = createPassengerPacket(entityId, stand.getId()); - - nmsHandler.broadcast(player, mobPacket, dataPacket, passengersPacket); - - stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); - - var equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsBack))); - - nmsHandler.broadcast(player, equipmentPacket); - } - - @Override - public void unequipMannequin(Mannequin mannequin) { - mannequin.removeExtraEntity(BackAccessory.class); - } - - @Override - public boolean read(Player sender, Object packet, boolean isCanceled) { - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(sender); - if(profile == null || profile.isHidden(BackAccessory.class)) - return true; - if(packet instanceof ServerboundMovePlayerPacket) { - handleRotate(profile); - }else if(packet instanceof ServerboundAcceptTeleportationPacket) { - final var list = handleSpawn(profile); - if(list == null) - return true; - final var connection = ((CraftPlayer) sender).getHandle().connection; - for(Object obj : list) { - connection.send((Packet<?>) obj); - } - } - return true; - } - - @Override - public List<Object> write(Player receiver, Object packet) { - if(packet instanceof ClientboundAddPlayerPacket playerPacket) { - int id = playerPacket.getEntityId(); - if(playerTracker.containsKey(id)) { - final var spawnedPlayer = playerTracker.get(id); - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); - if(profile == null || profile.isHidden(BackAccessory.class)) - return null; - return handleSpawn(profile); - } - }else if(packet instanceof ClientboundRemoveEntitiesPacket removePacket) { - for(int id : removePacket.getEntityIds()) { - if(playerTracker.containsKey(id)) { - return handleDespawn(playerTracker.get(id)); - } - } - } - /* - else if(packet instanceof ClientboundMoveEntityPacket moveEntityPacket) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - moveEntityPacket.write(byteBuf); - int id = byteBuf.readVarInt(); - if(playerTracker.containsKey(id)) { - final var spawnedPlayer = playerTracker.get(id); - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); - if(profile == null || profile.isHidden(BackAccessory.class)) - return null; - return handleMove(profile, moveEntityPacket); - } - }else if(packet instanceof ClientboundTeleportEntityPacket teleportEntityPacket) { - int id = teleportEntityPacket.getId(); - if(playerTracker.containsKey(id)) { - final var spawnedPlayer = playerTracker.get(id); - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); - if(profile == null || profile.isHidden(BackAccessory.class)) - return null; - return handleTeleport(profile); - } - }*/ - - return null; - } - - private void handleRotate(Profile profile) { - if(!hasBack(profile)) - return; - - final var wearer = profile.getPlayer(); - final var nmsPlayer = ((CraftPlayer) wearer).getHandle(); - final var stand = activeProfile.get(wearer); - - ClientboundRotateHeadPacket packet = new ClientboundRotateHeadPacket(stand, VolatileEquipmentHelper.toByte(nmsPlayer.getYRot())); - nmsHandler.broadcastAroundAndSelf(wearer, packet); - } - - private List<Object> handleSpawn(Profile profile) { - if(!hasBack(profile)) - return null; - - final var wearer = profile.getPlayer(); - final var stand = activeProfile.get(wearer); - - ClientboundAddMobPacket mobPacket = new ClientboundAddMobPacket(stand); - ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData(), true); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, stand.getItemBySlot(EquipmentSlot.HEAD)))); - ClientboundSetPassengersPacket passengersPacket = createPassengerPacket(wearer.getEntityId(), stand.getId()); - - return List.of(mobPacket, dataPacket, equipmentPacket, passengersPacket); - } - - private List<Object> handleDespawn(Player player) { - final var stand = activeProfile.get(player); - if(stand == null) - return null; - ClientboundRemoveEntitiesPacket removePacket = new ClientboundRemoveEntitiesPacket(stand.getId()); - return List.of(removePacket); - } - - private List<Object> handleMove(Profile profile, ClientboundMoveEntityPacket moveEntityPacket) { - if(!hasBack(profile)) - return null; - - final var wearer = profile.getPlayer(); - final var stand = activeProfile.get(wearer); - - ClientboundMoveEntityPacket move; - if(moveEntityPacket.hasPosition() && moveEntityPacket.hasRotation()) { - move = new ClientboundMoveEntityPacket.PosRot( - stand.getId(), - moveEntityPacket.getXa(), - moveEntityPacket.getYa(), - moveEntityPacket.getZa(), - moveEntityPacket.getyRot(), - moveEntityPacket.getxRot(), - false); - }else if(moveEntityPacket.hasPosition()) { - move = new ClientboundMoveEntityPacket.Pos( - stand.getId(), - moveEntityPacket.getXa(), - moveEntityPacket.getYa(), - moveEntityPacket.getZa(), - false); - }else { - move = new ClientboundMoveEntityPacket.Rot( - stand.getId(), - moveEntityPacket.getyRot(), - moveEntityPacket.getxRot(), - false); - } - return List.of(move); - } - - private List<Object> handleTeleport(Profile profile) { - if(!hasBack(profile)) - return null; - - final var wearer = profile.getPlayer(); - final var nmsPlayer = ((CraftPlayer) wearer).getHandle(); - final var stand = activeProfile.get(wearer); - stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + nmsPlayer.getPassengersRidingOffset() + stand.getMyRidingOffset(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); - - return List.of(new ClientboundTeleportEntityPacket(stand)); - } - - private boolean hasBack(Profile profile) { - if(profile == null) - return false; - - var maybeBack = profile.getEquipped(BackAccessory.class); - return maybeBack.isPresent() && maybeBack.get().getCosmetic() instanceof ItemCosmetic && activeProfile.containsKey(profile.getPlayer()); - } - - private ClientboundSetPassengersPacket createPassengerPacket(int mount, int... driver) { - FriendlyByteBuf bb = new FriendlyByteBuf(Unpooled.buffer()); - bb.writeVarInt(mount); - bb.writeVarIntArray(driver); - return new ClientboundSetPassengersPacket(bb); - } - -} \ No newline at end of file diff --git a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileGestureImpl.java b/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileGestureImpl.java deleted file mode 100644 index 4fbf0bfe39f2bed727e939a23cfd35e0a124a584..0000000000000000000000000000000000000000 --- a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileGestureImpl.java +++ /dev/null @@ -1,178 +0,0 @@ -package io.lumine.cosmetics.nms.v1_18_R2.cosmetic; - -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import com.mojang.datafixers.util.Pair; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.manager.HideableCosmetic; -import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.managers.gestures.Gesture; -import io.lumine.cosmetics.managers.gestures.GestureManager; -import io.lumine.cosmetics.managers.gestures.QuitMethod; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2; -import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.*; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.animal.horse.Horse; -import net.minecraft.world.item.ItemStack; -import org.bukkit.attribute.Attribute; -import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R2.attribute.CraftAttributeMap; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class VolatileGestureImpl implements VolatileEquipmentHelper { - - private static final List<Pair<EquipmentSlot, ItemStack>> empty = new ArrayList<>(); - - static { - for(final var slot : EquipmentSlot.values()) - empty.add(Pair.of(slot, ItemStack.EMPTY)); - } - - @Getter - private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_18_R2 nmsHandler; - private final Set<Player> activeProfile = Sets.newConcurrentHashSet(); - private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - - private Horse horse; - - public VolatileGestureImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_18_R2 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - @Override - public void apply(CosmeticProfile profile) { - if (profile == null) - return; - Player player = profile.getPlayer(); - if(activeProfile.contains(player)) - return; - - final var maybeEquipped = profile.getEquipped(Gesture.class); - if(maybeEquipped.isEmpty()) { - return; - } - var opt = maybeEquipped.get().getCosmetic(); - - if(!(opt instanceof Gesture gesture)) - return; - - playerTracker.put(player.getEntityId(), player); - activeProfile.add(player); - if(!gesture.isCanMove()) - getHorsed(player); - player.setInvisible(true); - - for(final var value : ((Profile) profile).getEquipped().values()) { - final var manager = value.getCosmetic().getManager(); - if(!(manager instanceof HideableCosmetic hide)) - continue; - hide.hide(profile, gesture); - } - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), empty); - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - @Override - public void unapply(CosmeticProfile profile) { - if (profile == null) - return; - Player player = profile.getPlayer(); - if(!activeProfile.contains(player)) - return; - - activeProfile.remove(player); - playerTracker.remove(player.getEntityId()); - nmsHandler.broadcast(player, new ClientboundRemoveEntitiesPacket(horse.getId())); - - final var nmsPlayer = ((CraftPlayer) player).getHandle(); - List<Pair<EquipmentSlot, ItemStack>> equipment = new ArrayList<>(); - for(EquipmentSlot slot : EquipmentSlot.values()) - equipment.add(Pair.of(slot, nmsPlayer.getItemBySlot(slot))); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), equipment); - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - - player.setInvisible(false); - for(final var value : ((Profile) profile).getEquipped().values()) { - final var manager = value.getCosmetic().getManager(); - if(!(manager instanceof HideableCosmetic hide)) - continue; - hide.show(profile); - } - } - - private ClientboundSetPassengersPacket createPassengerPacket(int mount, int... driver) { - FriendlyByteBuf bb = new FriendlyByteBuf(Unpooled.buffer()); - bb.writeVarInt(mount); - bb.writeVarIntArray(driver); - return new ClientboundSetPassengersPacket(bb); - } - - private void getHorsed(Player player) { - final var nmsPlayer = ((CraftPlayer) player).getHandle(); - - if(horse == null) { - horse = new Horse(EntityType.HORSE, ((CraftWorld) player.getWorld()).getHandle()); - horse.setInvisible(true); - horse.setHealth(0); - horse.getAttribute(CraftAttributeMap.toMinecraft(Attribute.GENERIC_MAX_HEALTH)).setBaseValue(0); - } - horse.setPos(nmsPlayer.getX(), nmsPlayer.getY() - horse.getPassengersRidingOffset() - nmsPlayer.getMyRidingOffset(), nmsPlayer.getZ()); - - ClientboundAddMobPacket mobPacket = new ClientboundAddMobPacket(horse); - ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(horse.getId(), horse.getEntityData(), true); - ClientboundUpdateAttributesPacket attributesPacket = new ClientboundUpdateAttributesPacket(horse.getId(), horse.getAttributes().getSyncableAttributes()); - ClientboundSetPassengersPacket passengersPacket = createPassengerPacket(horse.getId(), nmsPlayer.getId()); - - nmsHandler.broadcast(player, mobPacket, dataPacket, attributesPacket, passengersPacket); - } - - @Override - public boolean read(Player sender, Object packet, boolean isCanceled) { - if(!plugin.getGestureManager().getTicking().containsKey(sender)) { - return true; - } - - if(packet instanceof ServerboundPlayerInputPacket inputPacket) { - final var manager = (GestureManager) plugin.getGestureManager(); - if(inputPacket.isShiftKeyDown()) - manager.quit(sender, QuitMethod.SNEAK); - if(inputPacket.isJumping()) - manager.quit(sender, QuitMethod.JUMP); - }else if(packet instanceof ServerboundSetCarriedItemPacket setSlotPacket) { - int oSlot = sender.getInventory().getHeldItemSlot(); - if(oSlot != setSlotPacket.getSlot()) { - nmsHandler.broadcast(sender, new ClientboundSetCarriedItemPacket(oSlot)); - return false; - } - } - return true; - } - - @Override - public List<Object> write(Player receiver, Object packet) { - if(packet instanceof ClientboundSetEquipmentPacket equipmentPacket) { - int id = equipmentPacket.getEntity(); - final var spawnedPlayer = playerTracker.get(id); - if(spawnedPlayer == null) - return null; - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); - if(profile != null) - return List.of(new ClientboundSetEquipmentPacket(id, empty)); - } - return null; - } -} diff --git a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileHatImpl.java b/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileHatImpl.java deleted file mode 100644 index 5480c3366cfaa85a1b9c34b2ab66940d5198914f..0000000000000000000000000000000000000000 --- a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileHatImpl.java +++ /dev/null @@ -1,197 +0,0 @@ -package io.lumine.cosmetics.nms.v1_18_R2.cosmetic; - -import com.google.common.collect.Maps; -import com.mojang.datafixers.util.Pair; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; -import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; -import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.managers.hats.Hat; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2; -import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.reflection.Reflector; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket; -import net.minecraft.world.entity.EquipmentSlot; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class VolatileHatImpl implements VolatileEquipmentHelper { - - @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_18_R2 nmsHandler; - private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - - public VolatileHatImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_18_R2 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - @Override - public void apply(CosmeticProfile profile) { - - if (profile == null) - return; - - Player player = profile.getPlayer(); - - final var maybeEquipped = profile.getEquipped(Hat.class); - if(maybeEquipped.isEmpty()) { - return; - } - var opt = maybeEquipped.get().getCosmetic(); - - if(!(opt instanceof Hat hat)) { - return; - } - - var nmsHat = CraftItemStack.asNMSCopy(hat.getCosmetic(maybeEquipped.get())); - - playerTracker.put(player.getEntityId(), player); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsHat))); - - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - @Override - public void unapply(CosmeticProfile profile) { - final var nmsPlayer = ((CraftPlayer) profile.getPlayer()).getHandle(); - final var item = nmsPlayer.getItemBySlot(EquipmentSlot.HEAD); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(nmsPlayer.getId(), List.of(Pair.of(EquipmentSlot.HEAD, item))); - nmsHandler.broadcastAroundAndSelf(nmsPlayer.getBukkitEntity(), equipmentPacket); - } - - @Override - public void equipMannequin(Mannequin mannequin, EquippedCosmetic cosmetic) { - if(!(cosmetic.getCosmetic() instanceof Hat hat)) { - return; - } - - final var entityId = mannequin.getEntityId(); - final var player = mannequin.getPlayer(); - - var nmsHat = CraftItemStack.asNMSCopy(hat.getCosmetic(cosmetic)); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(entityId, List.of(Pair.of(EquipmentSlot.HEAD, nmsHat))); - - nmsHandler.broadcast(player, equipmentPacket); - } - - @Override - public void unequipMannequin(Mannequin mannequin) { - final var nmsPlayer = ((CraftPlayer) mannequin.getPlayer()).getHandle(); - final var item = nmsPlayer.getItemBySlot(EquipmentSlot.HEAD); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(nmsPlayer.getId(), List.of(Pair.of(EquipmentSlot.HEAD, item))); - nmsHandler.broadcast(nmsPlayer.getBukkitEntity(), equipmentPacket); - } - - @Override - public boolean read(Player sender, Object packet, boolean isCanceled) { - if(packet instanceof ServerboundAcceptTeleportationPacket) { - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(sender); - if(profile == null || profile.isHidden(Hat.class)) - return true; - handleSpawn(profile); - } - return true; - } - - @Override - public List<Object> write(Player receiver, Object packet) { - /* - if(packet instanceof ClientboundAddPlayerPacket playerPacket) { - int id = playerPacket.getEntityId(); - Profile profile = getProfile(receiver, id); - if(profile != null && !profile.isHidden(Hat.class)) { - handleSpawn(profile); - } - } else */ - - if(packet instanceof ClientboundSetEquipmentPacket equipmentPacket) { - int id = equipmentPacket.getEntity(); - Profile profile = getProfile(receiver, id); - if(profile != null && !profile.isHidden(Hat.class)) { - modifyPacket(profile, equipmentPacket); - } - } - - return null; - } - - private Profile getProfile(Player receiver, int id) { - final var entity = nmsHandler.getEntity(receiver.getWorld(), id); - if(!(entity instanceof Player player)) - return null; - return plugin.getProfiles().getProfile(player); - } - - public void handleSpawn(Profile profile) { - - final var maybeEquipped = profile.getEquipped(Hat.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic hat)) { - return; - } - - final var player = profile.getPlayer(); - final var nmsHat = CraftItemStack.asNMSCopy(hat.getCosmetic(equip)); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsHat))); - - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, "c"); - - private void modifyPacket(Profile profile, ClientboundSetEquipmentPacket packet) { - final var maybeEquipped = profile.getEquipped(Hat.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic hat)) { - return; - } - - final var nmsItem = CraftItemStack.asNMSCopy(hat.getCosmetic(equip)); - - var slots = (List<Pair<EquipmentSlot,net.minecraft.world.item.ItemStack>>) packet.getSlots(); - List<Pair<EquipmentSlot,net.minecraft.world.item.ItemStack>> newSlots = new ArrayList<>(); - - boolean foundHead = false; - for(var pair : slots) { - final EquipmentSlot slot = pair.getFirst(); - - if(slot == EquipmentSlot.HEAD) { - foundHead = true; - newSlots.add(Pair.of(pair.getFirst(), nmsItem)); - } else { - newSlots.add(pair); - } - } - if(!foundHead) { - newSlots.add(Pair.of(EquipmentSlot.HEAD, nmsItem)); - } - - refEq.set(packet, "c", newSlots); - } - -} diff --git a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileOffhandImpl.java b/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileOffhandImpl.java deleted file mode 100644 index 61afcf5218fb02cc350f0d89575d0659fa32cc2e..0000000000000000000000000000000000000000 --- a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileOffhandImpl.java +++ /dev/null @@ -1,173 +0,0 @@ -package io.lumine.cosmetics.nms.v1_18_R2.cosmetic; - -import com.google.common.collect.Maps; -import com.mojang.datafixers.util.Pair; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; -import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; -import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.managers.hats.Hat; -import io.lumine.cosmetics.managers.offhand.Offhand; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2; -import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.reflection.Reflector; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.world.entity.EquipmentSlot; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class VolatileOffhandImpl implements VolatileEquipmentHelper { - - @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_18_R2 nmsHandler; - private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - - public VolatileOffhandImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_18_R2 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - @Override - public void apply(CosmeticProfile profile) { - - if (profile == null) - return; - - Player player = profile.getPlayer(); - - final var maybeEquipped = profile.getEquipped(Offhand.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic offhand)) - return; - - var nmsOffhand = CraftItemStack.asNMSCopy(offhand.getCosmetic(equip)); - - playerTracker.put(player.getEntityId(), player); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), List.of(Pair.of(EquipmentSlot.OFFHAND, nmsOffhand))); - - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - - } - - @Override - public void unapply(CosmeticProfile profile) { - final var nmsPlayer = ((CraftPlayer) profile.getPlayer()).getHandle(); - final var item = nmsPlayer.getItemBySlot(EquipmentSlot.OFFHAND); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(nmsPlayer.getId(), List.of(Pair.of(EquipmentSlot.OFFHAND, item))); - nmsHandler.broadcastAroundAndSelf(nmsPlayer.getBukkitEntity(), equipmentPacket); - } - - @Override - public void equipMannequin(Mannequin mannequin, EquippedCosmetic cosmetic) { - if(!(cosmetic.getCosmetic() instanceof Offhand offhand)) { - return; - } - - final var entityId = mannequin.getEntityId(); - final var player = mannequin.getPlayer(); - - var nmsHat = CraftItemStack.asNMSCopy(offhand.getCosmetic(cosmetic)); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(entityId, List.of(Pair.of(EquipmentSlot.OFFHAND, nmsHat))); - - nmsHandler.broadcast(player, equipmentPacket); - } - - @Override - public void unequipMannequin(Mannequin mannequin) { - final var nmsPlayer = ((CraftPlayer) mannequin.getPlayer()).getHandle(); - final var item = nmsPlayer.getItemBySlot(EquipmentSlot.OFFHAND); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(nmsPlayer.getId(), List.of(Pair.of(EquipmentSlot.OFFHAND, item))); - nmsHandler.broadcast(nmsPlayer.getBukkitEntity(), equipmentPacket); - } - - @Override - public List<Object> write(Player receiver, Object packet) { - if(packet instanceof ClientboundSetEquipmentPacket equipmentPacket) { - int id = equipmentPacket.getEntity(); - Profile profile = getProfile(receiver, id); - if(profile != null && !profile.isHidden(Offhand.class)) - modifyPacket(profile, equipmentPacket); - } - - return null; - } - - private Profile getProfile(Player receiver, int id) { - final var entity = nmsHandler.getEntity(receiver.getWorld(), id); - if(!(entity instanceof Player player)) - return null; - return plugin.getProfiles().getProfile(player); - } - - public void handleSpawn(Profile profile) { - final var maybeEquipped = profile.getEquipped(Offhand.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic offhand)) - return; - - final var player = profile.getPlayer(); - final var nmsOffhand = CraftItemStack.asNMSCopy(offhand.getCosmetic(equip)); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), List.of(Pair.of(EquipmentSlot.OFFHAND, nmsOffhand))); - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, "c"); - - private void modifyPacket(Profile profile, ClientboundSetEquipmentPacket packet) { - final var maybeEquipped = profile.getEquipped(Hat.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic hat)) { - return; - } - - final var nmsItem = CraftItemStack.asNMSCopy(hat.getCosmetic(equip)); - - var slots = (List<Pair<EquipmentSlot,net.minecraft.world.item.ItemStack>>) packet.getSlots(); - List<Pair<EquipmentSlot,net.minecraft.world.item.ItemStack>> newSlots = new ArrayList<>(); - - boolean foundHead = false; - for(var pair : slots) { - final EquipmentSlot slot = pair.getFirst(); - - if(slot == EquipmentSlot.HEAD) { - foundHead = true; - newSlots.add(Pair.of(pair.getFirst(), nmsItem)); - } else { - newSlots.add(pair); - } - } - if(!foundHead) { - newSlots.add(Pair.of(EquipmentSlot.HEAD, nmsItem)); - } - refEq.set(packet, "c", newSlots); - } - -} diff --git a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileSprayImpl.java b/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileSprayImpl.java deleted file mode 100644 index 972f0906762d800fe1477171b08dfd5469b0ae29..0000000000000000000000000000000000000000 --- a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileSprayImpl.java +++ /dev/null @@ -1,90 +0,0 @@ -package io.lumine.cosmetics.nms.v1_18_R2.cosmetic; - -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2; -import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper; -import lombok.Getter; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; -import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; -import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; -import net.minecraft.world.entity.decoration.ItemFrame; -import net.minecraft.world.level.saveddata.maps.MapItemSavedData; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.BlockFace; -import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.MapMeta; - -public class VolatileSprayImpl implements VolatileSprayHelper { - - @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_18_R2 nmsHandler; - - public VolatileSprayImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_18_R2 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - private static final ItemStack map = new ItemStack(Material.FILLED_MAP); - private static final MapMeta mapMeta = (MapMeta) map.getItemMeta(); - - @Override - public int drawSpray(Spray spray, Location location, BlockFace face, int rotation) { - var world = ((CraftWorld) location.getWorld()).getHandle(); - var pos = new BlockPos(location.getX(), location.getY(), location.getZ()); - - var image = spray.getImage(); - - mapMeta.setMapId(image.getMapNumber()); - map.setItemMeta(mapMeta); - - var nmsMap = CraftItemStack.asNMSCopy(map); - - final int dir = switch(face) { - case DOWN -> 0; - case UP -> 1; - case NORTH -> 2; - case SOUTH -> 3; - case WEST -> 4; - case EAST -> 5; - default -> 1; - }; - - var frame = new ItemFrame(world, pos, Direction.UP); - frame.setItem(nmsMap); - frame.setInvisible(true); - frame.setRotation(rotation); - - var packetAdd = new ClientboundAddEntityPacket(frame, dir); - var packetData = new ClientboundSetEntityDataPacket(frame.getId(), frame.getEntityData(), true); - var packetMap = constructMapPacket(image.getMapNumber(), image.getPixels()); - - nmsHandler.broadcast(packetAdd, packetData, packetMap); - - return frame.getId(); - } - - private static final int startX = 0; - private static final int startY = 0; - private static final int mapWidth = 128; - private static final int mapHeight = 128; - private static final byte mapScale = 1; - private static final boolean mapLocked = true; - - private ClientboundMapItemDataPacket constructMapPacket(int id, byte[] pixels) { - var mapData = constructMapData(startX, startY, mapWidth, mapHeight, pixels); - var packet = new ClientboundMapItemDataPacket(id, mapScale, mapLocked, null, mapData); - - return packet; - } - - private MapItemSavedData.MapPatch constructMapData(int startX, int startY, int width, int height, byte[] pixels) { - return new MapItemSavedData.MapPatch(startX, startY, width, height, pixels); - } - -} diff --git a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/wardrobe/MannequinEntity.java b/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/wardrobe/MannequinEntity.java deleted file mode 100644 index fac6b642f288164d5c81966c4e32113d1b4edb2c..0000000000000000000000000000000000000000 --- a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/wardrobe/MannequinEntity.java +++ /dev/null @@ -1,130 +0,0 @@ -package io.lumine.cosmetics.nms.v1_18_R2.wardrobe; - -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.google.common.collect.Maps; -import com.mojang.authlib.GameProfile; -import com.mojang.datafixers.util.Pair; - -import io.lumine.cosmetics.api.cosmetics.Cosmetic; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.api.players.wardrobe.WardrobeTracker; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; -import net.minecraft.network.protocol.game.ClientboundAnimatePacket; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.EquipmentSlot; - -public class MannequinEntity implements Mannequin { - - private final VolatileCodeEnabled_v1_18_R2 handler; - @Getter private final WardrobeTracker tracker; - @Getter private final UUID uniqueId; - @Getter private final Player player; - @Getter private final Location location; - @Getter private float rotation; - - @Getter private ServerPlayer fakePlayer; - private Map<Class<? extends Cosmetic>,Integer> extraEntities = Maps.newConcurrentMap(); - - public MannequinEntity(WardrobeTracker tracker, VolatileCodeEnabled_v1_18_R2 handler, Player player, Location location) { - this.tracker = tracker; - this.handler = handler; - this.player = player; - this.location = location; - this.uniqueId = UUID.randomUUID(); - - var serverPlayer = ((CraftPlayer) player).getHandle(); - var level = ((CraftWorld) location.getWorld()).getHandle(); - - this.rotation = serverPlayer.getYRot() + 180; - - if(rotation > 180) { - rotation = rotation - 360; - } - - var gameProfile = serverPlayer.getGameProfile(); - - gameProfile = new GameProfile(uniqueId, "Wardrobe"); - gameProfile.getProperties().putAll(serverPlayer.getGameProfile().getProperties()); - - this.fakePlayer = new ServerPlayer(level.getServer(), level, gameProfile); - - var spawn = new FriendlyByteBuf(Unpooled.buffer()); - - spawn.writeVarInt(fakePlayer.getId()); - spawn.writeUUID(fakePlayer.getUUID()); - spawn.writeDouble(location.getX()); - spawn.writeDouble(location.getY()); - spawn.writeDouble(location.getZ()); - spawn.writeByte((byte)(int)(serverPlayer.getYRot() * 256.0F / 360.0F)); - spawn.writeByte((byte)(int)(serverPlayer.getXRot() * 256.0F / 360.0F)); - - var packetPlayerInfo = new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, fakePlayer); - var packetAddPlayer = new ClientboundAddPlayerPacket(spawn); - - var equipmentPacket = new ClientboundSetEquipmentPacket(fakePlayer.getId(), - List.of(Pair.of(EquipmentSlot.HEAD, serverPlayer.getItemBySlot(EquipmentSlot.HEAD)), - Pair.of(EquipmentSlot.CHEST, serverPlayer.getItemBySlot(EquipmentSlot.CHEST)), - Pair.of(EquipmentSlot.LEGS, serverPlayer.getItemBySlot(EquipmentSlot.LEGS)), - Pair.of(EquipmentSlot.FEET, serverPlayer.getItemBySlot(EquipmentSlot.FEET)), - Pair.of(EquipmentSlot.MAINHAND, serverPlayer.getItemBySlot(EquipmentSlot.MAINHAND)), - Pair.of(EquipmentSlot.OFFHAND, serverPlayer.getItemBySlot(EquipmentSlot.OFFHAND)))); - - var head = (byte)(int)(rotation * 256.0F / 360.0F); - var rotatePacket = new ClientboundRotateHeadPacket(fakePlayer, head); - - var swingPacket = new ClientboundAnimatePacket(fakePlayer, 0); - - handler.broadcast(player, packetPlayerInfo, packetAddPlayer, equipmentPacket, rotatePacket, swingPacket); - - for(var eq : handler.getPlugin().getProfiles().getProfile(player).getEquipped().values()) { - eq.getCosmetic().getManager().equipMannequin(this, eq); - } - } - - public void despawn() { - var packetPlayerInfo = new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.REMOVE_PLAYER, fakePlayer); - var packetRemovePlayer = new ClientboundRemoveEntitiesPacket(fakePlayer.getId()); - - handler.broadcast(player, packetPlayerInfo, packetRemovePlayer); - - for(var i : extraEntities.values()) { - var removePacket = new ClientboundRemoveEntitiesPacket(i); - handler.broadcast(player, removePacket); - } - } - - public void addExtraEntity(Class<? extends Cosmetic> type, int id) { - extraEntities.put(type, id); - } - - public void removeExtraEntity(Class<? extends Cosmetic> type) { - var id = extraEntities.remove(type); - - if(id != null) { - var removePacket = new ClientboundRemoveEntitiesPacket(id); - handler.broadcast(player, removePacket); - } - } - - public int getEntityId() { - return fakePlayer.getId(); - } - -} diff --git a/v1_19_R2/pom.xml b/v1_19_R2/pom.xml deleted file mode 100644 index 0262f4a64f6ee0f7df9d9ba1908dd88c01af35d4..0000000000000000000000000000000000000000 --- a/v1_19_R2/pom.xml +++ /dev/null @@ -1,164 +0,0 @@ - <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <artifactId>MCCosmetics-v1_19_R2</artifactId> - <parent> - <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> - <version>${mccosmetics.version}</version> - </parent> - - <build> - <plugins> - <plugin> - <groupId>net.md-5</groupId> - <artifactId>specialsource-maven-plugin</artifactId> - <version>1.2.3</version> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>remap</goal> - </goals> - <id>remap-obf</id> - <configuration> - <srgIn>org.spigotmc:minecraft-server:1.19.3-R0.1-SNAPSHOT:txt:maps-mojang</srgIn> - <reverse>true</reverse> - <remappedDependencies>org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies> - <remappedArtifactAttached>true</remappedArtifactAttached> - <remappedClassifierName>remapped-obf</remappedClassifierName> - </configuration> - </execution> - <execution> - <phase>package</phase> - <goals> - <goal>remap</goal> - </goals> - <id>remap-spigot</id> - <configuration> - <inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile> - <srgIn>org.spigotmc:minecraft-server:1.19.3-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn> - <remappedDependencies>org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>flatten-maven-plugin</artifactId> - <version>1.2.2</version> - <configuration> - <updatePomFile>true</updatePomFile> - </configuration> - <executions> - <execution> - <id>flatten</id> - <phase>package</phase> - <goals> - <goal>flatten</goal> - </goals> - </execution> - <execution> - <id>flatten.clean</id> - <phase>clean</phase> - <goals> - <goal>clean</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - <repositories> - <repository> - <id>spigot-repo</id> - <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> - </repository> - <repository> - <id>lumine</id> - <url>https://mvn.lumine.io/repository/maven/</url> - </repository> - <repository> - <id>paper-repo</id> - <url>https://papermc.io/repo/repository/maven-public/</url> - </repository> - <repository> - <id>minecraft-libraries</id> - <name>Minecraft Libraries</name> - <url>https://libraries.minecraft.net</url> - </repository> - </repositories> - - <dependencies> - <!-- Modules --> - <dependency> - <groupId>io.lumine</groupId> - <artifactId>LumineUtils</artifactId> - <version>${lumineutils.version}</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>io.lumine</groupId> - <artifactId>MCCosmetics</artifactId> - <version>${project.parent.version}</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <version>${lombok.version}</version> - <scope>provided</scope> - </dependency> - - <!-- Spigot API --> - <dependency> - <groupId>org.spigotmc</groupId> - <artifactId>spigot-api</artifactId> - <version>1.19.3-R0.1-SNAPSHOT</version> - <classifier>shaded</classifier> - <scope>provided</scope> - </dependency> - - <!-- Spigot NMS version --> - <dependency> - <groupId>org.spigotmc</groupId> - <artifactId>spigot</artifactId> - <version>1.19.3-R0.1-SNAPSHOT</version> - <classifier>remapped-mojang</classifier> - <scope>provided</scope> - <exclusions> - <exclusion> - <groupId>*</groupId> - <artifactId>*</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.mojang</groupId> - <artifactId>authlib</artifactId> - <version>3.11.50</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>com.mojang</groupId> - <artifactId>datafixerupper</artifactId> - <version>1.0.20</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>io.netty</groupId> - <artifactId>netty-all</artifactId> - <version>4.1.68.Final</version> - <scope>provided</scope> - </dependency> - - <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> - <version>1.8.0-beta4</version> - </dependency> - - </dependencies> - -</project> \ No newline at end of file diff --git a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_19_R2.java b/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_19_R2.java deleted file mode 100644 index d54012c5e7f6387b785aee842b7f7dee12fb7b08..0000000000000000000000000000000000000000 --- a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_19_R2.java +++ /dev/null @@ -1,184 +0,0 @@ -package io.lumine.cosmetics.nms; - -import com.google.common.collect.Maps; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.Cosmetic; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.api.players.wardrobe.WardrobeTracker; -import io.lumine.cosmetics.managers.back.BackAccessory; -import io.lumine.cosmetics.managers.gestures.Gesture; -import io.lumine.cosmetics.managers.hats.Hat; -import io.lumine.cosmetics.managers.offhand.Offhand; -import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper; -import io.lumine.cosmetics.nms.v1_19_R2.cosmetic.*; -import io.lumine.cosmetics.nms.v1_19_R2.network.VolatileChannelHandler; -import io.lumine.cosmetics.nms.v1_19_R2.wardrobe.MannequinEntity; -import io.netty.channel.Channel; -import io.netty.channel.ChannelPipeline; -import lombok.Getter; -import net.minecraft.network.Connection; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.level.entity.LevelEntityGetter; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; - -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.Map; - -public class VolatileCodeEnabled_v1_19_R2 implements VolatileCodeHandler { - - @Getter private final MCCosmeticsPlugin plugin; - private final Map<Class<? extends Cosmetic>, VolatileCosmeticHelper> cosmeticHelpers = Maps.newConcurrentMap(); - - private Method entityGetter; - - public VolatileCodeEnabled_v1_19_R2(MCCosmeticsPlugin plugin) { - this.plugin = plugin; - cosmeticHelpers.put(Hat.class, new VolatileHatImpl(plugin, this)); - cosmeticHelpers.put(BackAccessory.class, new VolatileBackImpl(plugin, this)); - cosmeticHelpers.put(Spray.class, new VolatileSprayImpl(plugin, this)); - cosmeticHelpers.put(Offhand.class, new VolatileOffhandImpl(plugin, this)); - cosmeticHelpers.put(Gesture.class, new VolatileGestureImpl(plugin, this)); - - for(var method : ServerLevel.class.getMethods()) { - if(LevelEntityGetter.class.isAssignableFrom(method.getReturnType()) && method.getReturnType() != LevelEntityGetter.class) { - entityGetter = method; - break; - } - } - } - - @Override - public VolatileCosmeticHelper getCosmeticHelper(Class<? extends Cosmetic> tClass) { - return cosmeticHelpers.get(tClass); - } - - @Override - public Collection<VolatileCosmeticHelper> getCosmeticHelpers() { - return cosmeticHelpers.values(); - } - - @Override - public void injectPlayer(Player player) { - ServerPlayer ply = ((CraftPlayer) player).getHandle(); - VolatileChannelHandler cdh = new VolatileChannelHandler(player, this); - - ChannelPipeline pipeline = ply.connection.getConnection().channel.pipeline(); - for (String name : pipeline.toMap().keySet()) { - if (pipeline.get(name) instanceof Connection) { - pipeline.addBefore(name, "mc_cosmetics_packet_handler", cdh); - break; - } - } - } - - @Override - public void removePlayer(Player player) { - Channel channel = ((CraftPlayer) player).getHandle().connection.getConnection().channel; - channel.eventLoop().submit(() -> { - channel.pipeline().remove("mc_cosmetics_packet_handler"); - return null; - }); - } - - public void broadcast(Packet<?>... packets) { - for(Player player : Bukkit.getOnlinePlayers()) { - var connection = ((CraftPlayer) player).getHandle().connection; - for(Packet<?> packet : packets) { - connection.send(packet); - } - } - } - - public void broadcast(Player player, Packet<?>... packets) { - var connection = ((CraftPlayer) player).getHandle().connection; - for(Packet<?> packet : packets) { - connection.send(packet); - } - } - - public void broadcastAroundAndSelf(Player wearer, Packet<?>... packets) { - final var level = ((CraftWorld) wearer.getWorld()).getHandle(); - final var trackedEntity = level.getChunkSource().chunkMap.entityMap.get(wearer.getEntityId()); - - if(trackedEntity == null) { - broadcast(wearer.getWorld(), packets); - return; - } - - for(Packet<?> packet : packets) - trackedEntity.broadcastAndSend(packet); - } - - public void broadcastAround(Player wearer, Packet<?>... packets) { - final var level = ((CraftWorld) wearer.getWorld()).getHandle(); - final var trackedEntity = level.getChunkSource().chunkMap.entityMap.get(wearer.getEntityId()); - - if(trackedEntity == null) { - broadcast(wearer.getWorld(), packets); - return; - } - - for(Packet<?> packet : packets) - trackedEntity.broadcast(packet); - } - - public void broadcast(World world, Packet<?>... packets) { - for(Player player : world.getPlayers()) { - var connection = ((CraftPlayer) player).getHandle().connection; - for(Packet<?> packet : packets) { - connection.send(packet); - } - } - } - - public Entity getEntity(World world, int id) { - ServerLevel level = ((CraftWorld) world).getHandle(); - - try { - var getter = entityGetter != null ? - (LevelEntityGetter<net.minecraft.world.entity.Entity>) entityGetter.invoke(level) : - level.entityManager.getEntityGetter(); - - final var entity = getter.get(id); - return entity == null ? null : entity.getBukkitEntity(); - } catch(Exception | Error ex) { - ex.printStackTrace(); - return null; - } - } - - @Override - public Mannequin createMannequin(WardrobeTracker tracker, Player player, Location location) { - return new MannequinEntity(tracker,this,player,location); - } - - @Override - public void removeFakeEntity(int id) { - ClientboundRemoveEntitiesPacket packet = new ClientboundRemoveEntitiesPacket(id); - broadcast(packet); - } - - @Override - public void setBodyYaw(LivingEntity entity, double yaw) { - ((CraftLivingEntity) entity).getHandle().yBodyRot = (float) yaw; - } - - @Override - public float getBodyYaw(LivingEntity entity) { - return ((CraftLivingEntity) entity).getHandle().yBodyRot; - } -} diff --git a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileHatImpl.java b/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileHatImpl.java deleted file mode 100644 index c5831f673937a33a5b519e7a2a1a96fb61a32043..0000000000000000000000000000000000000000 --- a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileHatImpl.java +++ /dev/null @@ -1,199 +0,0 @@ -package io.lumine.cosmetics.nms.v1_19_R2.cosmetic; - -import com.google.common.collect.Maps; -import com.mojang.datafixers.util.Pair; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; -import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; -import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.managers.hats.Hat; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R2; -import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.logging.Log; -import io.lumine.utils.reflection.Reflector; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket; -import net.minecraft.world.entity.EquipmentSlot; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class VolatileHatImpl implements VolatileEquipmentHelper { - - @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R2 nmsHandler; - //private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - - public VolatileHatImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R2 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - @Override - public void apply(CosmeticProfile profile) { - - if (profile == null) - return; - - Player player = profile.getPlayer(); - - final var maybeEquipped = profile.getEquipped(Hat.class); - if(maybeEquipped.isEmpty()) { - return; - } - var opt = maybeEquipped.get().getCosmetic(); - - if(!(opt instanceof Hat hat)) - return; - - var nmsHat = CraftItemStack.asNMSCopy(hat.getCosmetic(maybeEquipped.get())); - - //playerTracker.put(player.getEntityId(), player); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsHat))); - - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - @Override - public void unapply(CosmeticProfile profile) { - final var nmsPlayer = ((CraftPlayer) profile.getPlayer()).getHandle(); - final var item = nmsPlayer.getItemBySlot(EquipmentSlot.HEAD); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(nmsPlayer.getId(), List.of(Pair.of(EquipmentSlot.HEAD, item))); - nmsHandler.broadcastAroundAndSelf(nmsPlayer.getBukkitEntity(), equipmentPacket); - } - - @Override - public void equipMannequin(Mannequin mannequin, EquippedCosmetic cosmetic) { - if(!(cosmetic.getCosmetic() instanceof Hat hat)) { - return; - } - - final var entityId = mannequin.getEntityId(); - final var player = mannequin.getPlayer(); - - var nmsHat = CraftItemStack.asNMSCopy(hat.getCosmetic(cosmetic)); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(entityId, - List.of(Pair.of(EquipmentSlot.HEAD, nmsHat))); - - nmsHandler.broadcast(player, equipmentPacket); - } - - @Override - public void unequipMannequin(Mannequin mannequin) { - final var nmsPlayer = ((CraftPlayer) mannequin.getPlayer()).getHandle(); - final var item = nmsPlayer.getItemBySlot(EquipmentSlot.HEAD); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(nmsPlayer.getId(), List.of(Pair.of(EquipmentSlot.HEAD, item))); - nmsHandler.broadcast(nmsPlayer.getBukkitEntity(), equipmentPacket); - } - - @Override - public boolean read(Player sender, Object packet, boolean isCanceled) { - if(packet instanceof ServerboundAcceptTeleportationPacket) { - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(sender); - if(profile == null || profile.isHidden(Hat.class)) - return true; - handleSpawn(profile); - } - return true; - } - - @Override - public List<Object> write(Player receiver, Object packet) { - /* - if(packet instanceof ClientboundAddPlayerPacket playerPacket) { - int id = playerPacket.getEntityId(); - Profile profile = getProfile(receiver, id); - if(profile != null && !profile.isHidden(Hat.class)) { - handleSpawn(profile); - } - } else */ - - if(packet instanceof ClientboundSetEquipmentPacket equipmentPacket) { - int id = equipmentPacket.getEntity(); - Profile profile = getProfile(receiver, id); - if(profile != null && !profile.isHidden(Hat.class)) { - modifyPacket(profile, equipmentPacket); - } - } - - return null; - } - - private Profile getProfile(Player receiver, int id) { - final var entity = nmsHandler.getEntity(receiver.getWorld(), id); - if(!(entity instanceof Player player)) - return null; - return plugin.getProfiles().getProfile(player); - } - - public void handleSpawn(Profile profile) { - - final var maybeEquipped = profile.getEquipped(Hat.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic hat)) { - return; - } - - final var player = profile.getPlayer(); - final var nmsHat = CraftItemStack.asNMSCopy(hat.getCosmetic(equip)); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsHat))); - - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, "c"); - - private void modifyPacket(Profile profile, ClientboundSetEquipmentPacket packet) { - final var maybeEquipped = profile.getEquipped(Hat.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic hat)) { - return; - } - - final var nmsItem = CraftItemStack.asNMSCopy(hat.getCosmetic(equip)); - - var slots = (List<Pair<EquipmentSlot,net.minecraft.world.item.ItemStack>>) packet.getSlots(); - List<Pair<EquipmentSlot,net.minecraft.world.item.ItemStack>> newSlots = new ArrayList<>(); - - boolean foundHead = false; - for(var pair : slots) { - final EquipmentSlot slot = pair.getFirst(); - - if(slot == EquipmentSlot.HEAD) { - foundHead = true; - newSlots.add(Pair.of(pair.getFirst(), nmsItem)); - } else { - newSlots.add(pair); - } - } - if(!foundHead) { - newSlots.add(Pair.of(EquipmentSlot.HEAD, nmsItem)); - } - - refEq.set(packet, "c", newSlots); - } - -} diff --git a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileOffhandImpl.java b/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileOffhandImpl.java deleted file mode 100644 index 0a7b6271f6415fb69b7a97d89c5349a17a461c0d..0000000000000000000000000000000000000000 --- a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileOffhandImpl.java +++ /dev/null @@ -1,173 +0,0 @@ -package io.lumine.cosmetics.nms.v1_19_R2.cosmetic; - -import com.google.common.collect.Maps; -import com.mojang.datafixers.util.Pair; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; -import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; -import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.managers.hats.Hat; -import io.lumine.cosmetics.managers.offhand.Offhand; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R2; -import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.reflection.Reflector; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.world.entity.EquipmentSlot; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class VolatileOffhandImpl implements VolatileEquipmentHelper { - - @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R2 nmsHandler; - private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - - public VolatileOffhandImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R2 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - @Override - public void apply(CosmeticProfile profile) { - - if (profile == null) - return; - - Player player = profile.getPlayer(); - - final var maybeEquipped = profile.getEquipped(Offhand.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic offhand)) - return; - - var nmsOffhand = CraftItemStack.asNMSCopy(offhand.getCosmetic(equip)); - - playerTracker.put(player.getEntityId(), player); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), List.of(Pair.of(EquipmentSlot.OFFHAND, nmsOffhand))); - - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - - } - - @Override - public void unapply(CosmeticProfile profile) { - final var nmsPlayer = ((CraftPlayer) profile.getPlayer()).getHandle(); - final var item = nmsPlayer.getItemBySlot(EquipmentSlot.OFFHAND); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(nmsPlayer.getId(), List.of(Pair.of(EquipmentSlot.OFFHAND, item))); - nmsHandler.broadcastAroundAndSelf(nmsPlayer.getBukkitEntity(), equipmentPacket); - } - - @Override - public void equipMannequin(Mannequin mannequin, EquippedCosmetic cosmetic) { - if(!(cosmetic.getCosmetic() instanceof Offhand offhand)) { - return; - } - - final var entityId = mannequin.getEntityId(); - final var player = mannequin.getPlayer(); - - var nmsHat = CraftItemStack.asNMSCopy(offhand.getCosmetic(cosmetic)); - - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(entityId, List.of(Pair.of(EquipmentSlot.OFFHAND, nmsHat))); - - nmsHandler.broadcast(player, equipmentPacket); - } - - @Override - public void unequipMannequin(Mannequin mannequin) { - final var nmsPlayer = ((CraftPlayer) mannequin.getPlayer()).getHandle(); - final var item = nmsPlayer.getItemBySlot(EquipmentSlot.OFFHAND); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(nmsPlayer.getId(), List.of(Pair.of(EquipmentSlot.OFFHAND, item))); - nmsHandler.broadcast(nmsPlayer.getBukkitEntity(), equipmentPacket); - } - - @Override - public List<Object> write(Player receiver, Object packet) { - if(packet instanceof ClientboundSetEquipmentPacket equipmentPacket) { - int id = equipmentPacket.getEntity(); - Profile profile = getProfile(receiver, id); - if(profile != null && !profile.isHidden(Offhand.class)) - modifyPacket(profile, equipmentPacket); - } - - return null; - } - - private Profile getProfile(Player receiver, int id) { - final var entity = nmsHandler.getEntity(receiver.getWorld(), id); - if(!(entity instanceof Player player)) - return null; - return plugin.getProfiles().getProfile(player); - } - - public void handleSpawn(Profile profile) { - final var maybeEquipped = profile.getEquipped(Offhand.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic offhand)) - return; - - final var player = profile.getPlayer(); - final var nmsOffhand = CraftItemStack.asNMSCopy(offhand.getCosmetic(equip)); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), List.of(Pair.of(EquipmentSlot.OFFHAND, nmsOffhand))); - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, "c"); - - private void modifyPacket(Profile profile, ClientboundSetEquipmentPacket packet) { - final var maybeEquipped = profile.getEquipped(Hat.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equip = maybeEquipped.get(); - var opt = equip.getCosmetic(); - - if(!(opt instanceof ItemCosmetic hat)) { - return; - } - - final var nmsItem = CraftItemStack.asNMSCopy(hat.getCosmetic(equip)); - - var slots = (List<Pair<EquipmentSlot,net.minecraft.world.item.ItemStack>>) packet.getSlots(); - List<Pair<EquipmentSlot,net.minecraft.world.item.ItemStack>> newSlots = new ArrayList<>(); - - boolean foundHead = false; - for(var pair : slots) { - final EquipmentSlot slot = pair.getFirst(); - - if(slot == EquipmentSlot.HEAD) { - foundHead = true; - newSlots.add(Pair.of(pair.getFirst(), nmsItem)); - } else { - newSlots.add(pair); - } - } - if(!foundHead) { - newSlots.add(Pair.of(EquipmentSlot.HEAD, nmsItem)); - } - refEq.set(packet, "c", newSlots); - } - -} diff --git a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileSprayImpl.java b/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileSprayImpl.java deleted file mode 100644 index 57e60298334d89d787eb3dda63bc53cf9e0a5584..0000000000000000000000000000000000000000 --- a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileSprayImpl.java +++ /dev/null @@ -1,90 +0,0 @@ -package io.lumine.cosmetics.nms.v1_19_R2.cosmetic; - -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R2; -import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper; -import lombok.Getter; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; -import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; -import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; -import net.minecraft.world.entity.decoration.ItemFrame; -import net.minecraft.world.level.saveddata.maps.MapItemSavedData; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.BlockFace; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.MapMeta; - -public class VolatileSprayImpl implements VolatileSprayHelper { - - @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R2 nmsHandler; - - public VolatileSprayImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R2 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - private static final ItemStack map = new ItemStack(Material.FILLED_MAP); - private static final MapMeta mapMeta = (MapMeta) map.getItemMeta(); - - @Override - public int drawSpray(Spray spray, Location location, BlockFace face, int rotation) { - var world = ((CraftWorld) location.getWorld()).getHandle(); - var pos = new BlockPos(location.getX(), location.getY(), location.getZ()); - - var image = spray.getImage(); - - mapMeta.setMapId(image.getMapNumber()); - map.setItemMeta(mapMeta); - - var nmsMap = CraftItemStack.asNMSCopy(map); - - final int dir = switch(face) { - case DOWN -> 0; - case UP -> 1; - case NORTH -> 2; - case SOUTH -> 3; - case WEST -> 4; - case EAST -> 5; - default -> 1; - }; - - var frame = new ItemFrame(world, pos, Direction.UP); - frame.setItem(nmsMap); - frame.setInvisible(true); - frame.setRotation(rotation); - - var packetAdd = new ClientboundAddEntityPacket(frame, dir); - var packetData = new ClientboundSetEntityDataPacket(frame.getId(), frame.getEntityData().getNonDefaultValues()); - var packetMap = constructMapPacket(image.getMapNumber(), image.getPixels()); - - nmsHandler.broadcast(packetAdd, packetData, packetMap); - - return frame.getId(); - } - - private static final int startX = 0; - private static final int startY = 0; - private static final int mapWidth = 128; - private static final int mapHeight = 128; - private static final byte mapScale = 1; - private static final boolean mapLocked = true; - - private ClientboundMapItemDataPacket constructMapPacket(int id, byte[] pixels) { - var mapData = constructMapData(startX, startY, mapWidth, mapHeight, pixels); - var packet = new ClientboundMapItemDataPacket(id, mapScale, mapLocked, null, mapData); - - return packet; - } - - private MapItemSavedData.MapPatch constructMapData(int startX, int startY, int width, int height, byte[] pixels) { - return new MapItemSavedData.MapPatch(startX, startY, width, height, pixels); - } - -} diff --git a/v1_19_R3/.gitignore b/v1_19_R3/.gitignore deleted file mode 100644 index e3425b9cc114cdcb390fb9c7201b1ffdce23d875..0000000000000000000000000000000000000000 --- a/v1_19_R3/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/.flattened-pom.xml diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/NMSFields.java b/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/NMSFields.java deleted file mode 100644 index bd7a9f239f9b5e86a1db4edeb29227e9d5284986..0000000000000000000000000000000000000000 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/NMSFields.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.lumine.cosmetics.nms.v1_19_R3; - -public class NMSFields { - - public static final String PLAYER_CONNECTION = "h"; - -} diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/network/VolatileChannelHandler.java b/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/network/VolatileChannelHandler.java deleted file mode 100644 index 55bd332d18018142d91c953253cb4da209420bc8..0000000000000000000000000000000000000000 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/network/VolatileChannelHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package io.lumine.cosmetics.nms.v1_19_R3.network; - -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R3; -import io.netty.channel.ChannelDuplexHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelPromise; -import lombok.Getter; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; - -public class VolatileChannelHandler extends ChannelDuplexHandler { - - private final VolatileCodeEnabled_v1_19_R3 nmsHandler; - @Getter private final Player player; - - public VolatileChannelHandler(Player player, VolatileCodeEnabled_v1_19_R3 nmsHandler) { - this.player = player; - this.nmsHandler = nmsHandler; - } - - @Override - public void write(ChannelHandlerContext ctx, Object obj, ChannelPromise promise) { - - try { - - List<Object> packets = new ArrayList<>(); - - for(final var helper : nmsHandler.getCosmeticHelpers()) { - final var writes = helper.write(player, obj); - if(writes != null) - packets.addAll(writes); - } - - if(!packets.contains(obj)) - super.write(ctx, obj, promise); - packets.remove(obj); - - for (var p : packets) { - super.write(ctx, p, promise.channel().newPromise()); - } - }catch (Exception e) { - e.printStackTrace(); - } - - } - - @Override - public void channelRead(ChannelHandlerContext ctx, Object obj) throws Exception { - - boolean isCanceled = false; - for(final var helper : nmsHandler.getCosmeticHelpers()) { - isCanceled |= !helper.read(player, obj, isCanceled); - } - - if(!isCanceled) - super.channelRead(ctx, obj); - } - -} diff --git a/v1_20_R1/.gitignore b/v1_20_R1/.gitignore deleted file mode 100644 index e3425b9cc114cdcb390fb9c7201b1ffdce23d875..0000000000000000000000000000000000000000 --- a/v1_20_R1/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/.flattened-pom.xml diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/NMSFields.java b/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/NMSFields.java deleted file mode 100644 index 65e1df983caba325b1a46df0271a17341675b1e4..0000000000000000000000000000000000000000 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/NMSFields.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.lumine.cosmetics.nms.v1_20_R1; - -public class NMSFields { - - public static final String PLAYER_CONNECTION = "h"; - -} diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileBackImpl.java b/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileBackImpl.java deleted file mode 100644 index ace9801b89e2e3c98f3ad78d3de8de1800c6b624..0000000000000000000000000000000000000000 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileBackImpl.java +++ /dev/null @@ -1,298 +0,0 @@ -package io.lumine.cosmetics.nms.v1_20_R1.cosmetic; - -import com.google.common.collect.Maps; -import com.mojang.datafixers.util.Pair; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; -import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; -import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.managers.back.BackAccessory; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_20_R1; -import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.*; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.decoration.ArmorStand; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; -import org.bukkit.entity.Player; - -import java.util.List; -import java.util.Map; - -public class VolatileBackImpl implements VolatileEquipmentHelper { - - @Getter - private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_20_R1 nmsHandler; - private final Map<Player, ArmorStand> activeProfile = Maps.newConcurrentMap(); - private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - - public VolatileBackImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_20_R1 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - @Override - public void apply(CosmeticProfile profile) { - if (profile == null) - return; - Player player = profile.getPlayer(); - - var maybeEquipped = profile.getEquipped(BackAccessory.class); - if(maybeEquipped.isEmpty()) { - return; - } - var equipped = maybeEquipped.get(); - var cosmetic = equipped.getCosmetic(); - - if (!(cosmetic instanceof ItemCosmetic back)) { - return; - } - - var nmsPlayer = ((CraftPlayer) player).getHandle(); - var nmsBack = CraftItemStack.asNMSCopy(back.getCosmetic(equipped)); - - ArmorStand stand = activeProfile.get(player); - if(stand == null) { - playerTracker.put(player.getEntityId(), player); - stand = new ArmorStand(EntityType.ARMOR_STAND, ((CraftWorld) player.getWorld()).getHandle()); - stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + nmsPlayer.getPassengersRidingOffset() + stand.getMyRidingOffset(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); - stand.setMarker(true); - stand.setInvisible(true); - stand.setSilent(true); - - activeProfile.put(player, stand); - - var mobPacket = new ClientboundAddEntityPacket(stand); - var dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); - var passengersPacket = createPassengerPacket(player.getEntityId(), stand.getId()); - - nmsHandler.broadcastAroundAndSelf(player, mobPacket, dataPacket, passengersPacket); - } - - stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); - - var equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsBack))); - - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - @Override - public void unapply(CosmeticProfile profile) { - Player player = profile.getPlayer(); - ArmorStand stand = activeProfile.remove(player); - if(stand == null) - return; - playerTracker.remove(player.getEntityId()); - ClientboundRemoveEntitiesPacket removePacket = new ClientboundRemoveEntitiesPacket(stand.getId()); - nmsHandler.broadcastAroundAndSelf(player, removePacket); - } - - @Override - public void equipMannequin(Mannequin mannequin, EquippedCosmetic cosmetic) { - if(!(cosmetic.getCosmetic() instanceof BackAccessory back)) { - return; - } - - final var entityId = mannequin.getEntityId(); - final var player = mannequin.getPlayer(); - var nmsBack = CraftItemStack.asNMSCopy(back.getCosmetic(cosmetic)); - - var mannequinLocation = mannequin.getLocation(); - - mannequin.removeExtraEntity(BackAccessory.class); - - var stand = new ArmorStand(EntityType.ARMOR_STAND, ((CraftWorld) player.getWorld()).getHandle()); - stand.moveTo(mannequinLocation.getX(), mannequinLocation.getY() + stand.getMyRidingOffset(), mannequinLocation.getZ(), mannequinLocation.getYaw(), 0); - stand.setMarker(true); - stand.setInvisible(true); - stand.setSilent(true); - - mannequin.addExtraEntity(BackAccessory.class, stand.getId()); - - var mobPacket = new ClientboundAddEntityPacket(stand); - var dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); - var passengersPacket = createPassengerPacket(entityId, stand.getId()); - - nmsHandler.broadcast(player, mobPacket, dataPacket, passengersPacket); - - stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); - - var equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsBack))); - - nmsHandler.broadcast(player, equipmentPacket); - } - - @Override - public void unequipMannequin(Mannequin mannequin) { - mannequin.removeExtraEntity(BackAccessory.class); - } - - @Override - public boolean read(Player sender, Object packet, boolean isCanceled) { - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(sender); - if(profile == null || profile.isHidden(BackAccessory.class)) - return true; - if(packet instanceof ServerboundMovePlayerPacket) { - handleRotate(profile); - }else if(packet instanceof ServerboundAcceptTeleportationPacket) { - final var list = handleSpawn(profile); - if(list == null) - return true; - final var connection = ((CraftPlayer) sender).getHandle().connection; - for(Object obj : list) { - connection.send((Packet<?>) obj); - } - } - return true; - } - - @Override - public List<Object> write(Player receiver, Object packet) { - if(packet instanceof ClientboundAddPlayerPacket playerPacket) { - int id = playerPacket.getEntityId(); - if(playerTracker.containsKey(id)) { - final var spawnedPlayer = playerTracker.get(id); - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); - if(profile == null || profile.isHidden(BackAccessory.class)) - return null; - return handleSpawn(profile); - } - }else if(packet instanceof ClientboundRemoveEntitiesPacket removePacket) { - for(int id : removePacket.getEntityIds()) { - if(playerTracker.containsKey(id)) { - return handleDespawn(playerTracker.get(id)); - } - } - } - /* - else if(packet instanceof ClientboundMoveEntityPacket moveEntityPacket) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - moveEntityPacket.write(byteBuf); - int id = byteBuf.readVarInt(); - if(playerTracker.containsKey(id)) { - final var spawnedPlayer = playerTracker.get(id); - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); - if(profile == null || profile.isHidden(BackAccessory.class)) - return null; - return handleMove(profile, moveEntityPacket); - } - }else if(packet instanceof ClientboundTeleportEntityPacket teleportEntityPacket) { - int id = teleportEntityPacket.getId(); - if(playerTracker.containsKey(id)) { - final var spawnedPlayer = playerTracker.get(id); - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); - if(profile == null || profile.isHidden(BackAccessory.class)) - return null; - return handleTeleport(profile); - } - }*/ - - return null; - } - - private void handleRotate(Profile profile) { - if(!hasBack(profile)) - return; - - final var wearer = profile.getPlayer(); - final var nmsPlayer = ((CraftPlayer) wearer).getHandle(); - final var stand = activeProfile.get(wearer); - - ClientboundRotateHeadPacket packet = new ClientboundRotateHeadPacket(stand, VolatileEquipmentHelper.toByte(nmsPlayer.getYRot())); - nmsHandler.broadcastAroundAndSelf(wearer, packet); - } - - private List<Object> handleSpawn(Profile profile) { - if(!hasBack(profile)) - return null; - - final var wearer = profile.getPlayer(); - final var stand = activeProfile.get(wearer); - - var mobPacket = new ClientboundAddEntityPacket(stand); - ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, stand.getItemBySlot(EquipmentSlot.HEAD)))); - ClientboundSetPassengersPacket passengersPacket = createPassengerPacket(wearer.getEntityId(), stand.getId()); - - return List.of(mobPacket, dataPacket, equipmentPacket, passengersPacket); - } - - private List<Object> handleDespawn(Player player) { - final var stand = activeProfile.get(player); - if(stand == null) - return null; - ClientboundRemoveEntitiesPacket removePacket = new ClientboundRemoveEntitiesPacket(stand.getId()); - return List.of(removePacket); - } - - private List<Object> handleMove(Profile profile, ClientboundMoveEntityPacket moveEntityPacket) { - if(!hasBack(profile)) - return null; - - final var wearer = profile.getPlayer(); - final var stand = activeProfile.get(wearer); - - ClientboundMoveEntityPacket move; - if(moveEntityPacket.hasPosition() && moveEntityPacket.hasRotation()) { - move = new ClientboundMoveEntityPacket.PosRot( - stand.getId(), - moveEntityPacket.getXa(), - moveEntityPacket.getYa(), - moveEntityPacket.getZa(), - moveEntityPacket.getyRot(), - moveEntityPacket.getxRot(), - false); - }else if(moveEntityPacket.hasPosition()) { - move = new ClientboundMoveEntityPacket.Pos( - stand.getId(), - moveEntityPacket.getXa(), - moveEntityPacket.getYa(), - moveEntityPacket.getZa(), - false); - }else { - move = new ClientboundMoveEntityPacket.Rot( - stand.getId(), - moveEntityPacket.getyRot(), - moveEntityPacket.getxRot(), - false); - } - return List.of(move); - } - - private List<Object> handleTeleport(Profile profile) { - if(!hasBack(profile)) - return null; - - final var wearer = profile.getPlayer(); - final var nmsPlayer = ((CraftPlayer) wearer).getHandle(); - final var stand = activeProfile.get(wearer); - stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + nmsPlayer.getPassengersRidingOffset() + stand.getMyRidingOffset(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); - - return List.of(new ClientboundTeleportEntityPacket(stand)); - } - - private boolean hasBack(Profile profile) { - if(profile == null) - return false; - - var maybeBack = profile.getEquipped(BackAccessory.class); - return maybeBack.isPresent() && maybeBack.get().getCosmetic() instanceof ItemCosmetic && activeProfile.containsKey(profile.getPlayer()); - } - - private ClientboundSetPassengersPacket createPassengerPacket(int mount, int... driver) { - FriendlyByteBuf bb = new FriendlyByteBuf(Unpooled.buffer()); - bb.writeVarInt(mount); - bb.writeVarIntArray(driver); - return new ClientboundSetPassengersPacket(bb); - } - -} \ No newline at end of file diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileGestureImpl.java b/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileGestureImpl.java deleted file mode 100644 index 8258354fd28269936efb02e989060092791b8345..0000000000000000000000000000000000000000 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileGestureImpl.java +++ /dev/null @@ -1,178 +0,0 @@ -package io.lumine.cosmetics.nms.v1_20_R1.cosmetic; - -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import com.mojang.datafixers.util.Pair; -import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.manager.HideableCosmetic; -import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.managers.gestures.Gesture; -import io.lumine.cosmetics.managers.gestures.GestureManager; -import io.lumine.cosmetics.managers.gestures.QuitMethod; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_20_R1; -import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.*; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.animal.horse.Horse; -import net.minecraft.world.item.ItemStack; -import org.bukkit.attribute.Attribute; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.attribute.CraftAttributeMap; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class VolatileGestureImpl implements VolatileEquipmentHelper { - - private static final List<Pair<EquipmentSlot, ItemStack>> empty = new ArrayList<>(); - - static { - for(final var slot : EquipmentSlot.values()) - empty.add(Pair.of(slot, ItemStack.EMPTY)); - } - - @Getter - private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_20_R1 nmsHandler; - private final Set<Player> activeProfile = Sets.newConcurrentHashSet(); - private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - - private Horse horse; - - public VolatileGestureImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_20_R1 nmsHandler) { - this.plugin = plugin; - this.nmsHandler = nmsHandler; - } - - @Override - public void apply(CosmeticProfile profile) { - if (profile == null) - return; - Player player = profile.getPlayer(); - if(activeProfile.contains(player)) - return; - - final var maybeEquipped = profile.getEquipped(Gesture.class); - if(maybeEquipped.isEmpty()) { - return; - } - var opt = maybeEquipped.get().getCosmetic(); - - if(!(opt instanceof Gesture gesture)) - return; - - playerTracker.put(player.getEntityId(), player); - activeProfile.add(player); - if(!gesture.isCanMove()) - getHorsed(player); - player.setInvisible(true); - - for(final var value : ((Profile) profile).getEquipped().values()) { - final var manager = value.getCosmetic().getManager(); - if(!(manager instanceof HideableCosmetic hide)) - continue; - hide.hide(profile, gesture); - } - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), empty); - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - } - - @Override - public void unapply(CosmeticProfile profile) { - if (profile == null) - return; - Player player = profile.getPlayer(); - if(!activeProfile.contains(player)) - return; - - activeProfile.remove(player); - playerTracker.remove(player.getEntityId()); - nmsHandler.broadcast(player, new ClientboundRemoveEntitiesPacket(horse.getId())); - - final var nmsPlayer = ((CraftPlayer) player).getHandle(); - List<Pair<EquipmentSlot, ItemStack>> equipment = new ArrayList<>(); - for(EquipmentSlot slot : EquipmentSlot.values()) - equipment.add(Pair.of(slot, nmsPlayer.getItemBySlot(slot))); - ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), equipment); - nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); - - player.setInvisible(false); - for(final var value : ((Profile) profile).getEquipped().values()) { - final var manager = value.getCosmetic().getManager(); - if(!(manager instanceof HideableCosmetic hide)) - continue; - hide.show(profile); - } - } - - private ClientboundSetPassengersPacket createPassengerPacket(int mount, int... driver) { - FriendlyByteBuf bb = new FriendlyByteBuf(Unpooled.buffer()); - bb.writeVarInt(mount); - bb.writeVarIntArray(driver); - return new ClientboundSetPassengersPacket(bb); - } - - private void getHorsed(Player player) { - final var nmsPlayer = ((CraftPlayer) player).getHandle(); - - if(horse == null) { - horse = new Horse(EntityType.HORSE, ((CraftWorld) player.getWorld()).getHandle()); - horse.setInvisible(true); - horse.setHealth(0); - horse.getAttribute(CraftAttributeMap.toMinecraft(Attribute.GENERIC_MAX_HEALTH)).setBaseValue(0); - } - horse.setPos(nmsPlayer.getX(), nmsPlayer.getY() - horse.getPassengersRidingOffset() - nmsPlayer.getMyRidingOffset(), nmsPlayer.getZ()); - - var mobPacket = new ClientboundAddEntityPacket(horse); - var dataPacket = new ClientboundSetEntityDataPacket(horse.getId(), horse.getEntityData().getNonDefaultValues()); - var attributesPacket = new ClientboundUpdateAttributesPacket(horse.getId(), horse.getAttributes().getSyncableAttributes()); - var passengersPacket = createPassengerPacket(horse.getId(), nmsPlayer.getId()); - - nmsHandler.broadcast(player, mobPacket, dataPacket, attributesPacket, passengersPacket); - } - - @Override - public boolean read(Player sender, Object packet, boolean isCanceled) { - if(!plugin.getGestureManager().getTicking().containsKey(sender)) { - return true; - } - - if(packet instanceof ServerboundPlayerInputPacket inputPacket) { - final var manager = (GestureManager) plugin.getGestureManager(); - if(inputPacket.isShiftKeyDown()) - manager.quit(sender, QuitMethod.SNEAK); - if(inputPacket.isJumping()) - manager.quit(sender, QuitMethod.JUMP); - }else if(packet instanceof ServerboundSetCarriedItemPacket setSlotPacket) { - int oSlot = sender.getInventory().getHeldItemSlot(); - if(oSlot != setSlotPacket.getSlot()) { - nmsHandler.broadcast(sender, new ClientboundSetCarriedItemPacket(oSlot)); - return false; - } - } - return true; - } - - @Override - public List<Object> write(Player receiver, Object packet) { - if(packet instanceof ClientboundSetEquipmentPacket equipmentPacket) { - int id = equipmentPacket.getEntity(); - final var spawnedPlayer = playerTracker.get(id); - if(spawnedPlayer == null) - return null; - final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); - if(profile != null) - return List.of(new ClientboundSetEquipmentPacket(id, empty)); - } - return null; - } -} diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/network/VolatileChannelHandler.java b/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/network/VolatileChannelHandler.java deleted file mode 100644 index 52f5921856fb393cd866472a632fcb4f7ecd18af..0000000000000000000000000000000000000000 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/network/VolatileChannelHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package io.lumine.cosmetics.nms.v1_20_R1.network; - -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_20_R1; -import io.netty.channel.ChannelDuplexHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelPromise; -import lombok.Getter; -import org.bukkit.entity.Player; - -import java.util.ArrayList; -import java.util.List; - -public class VolatileChannelHandler extends ChannelDuplexHandler { - - private final VolatileCodeEnabled_v1_20_R1 nmsHandler; - @Getter private final Player player; - - public VolatileChannelHandler(Player player, VolatileCodeEnabled_v1_20_R1 nmsHandler) { - this.player = player; - this.nmsHandler = nmsHandler; - } - - @Override - public void write(ChannelHandlerContext ctx, Object obj, ChannelPromise promise) { - - try { - - List<Object> packets = new ArrayList<>(); - - for(final var helper : nmsHandler.getCosmeticHelpers()) { - final var writes = helper.write(player, obj); - if(writes != null) - packets.addAll(writes); - } - - if(!packets.contains(obj)) - super.write(ctx, obj, promise); - packets.remove(obj); - - for (var p : packets) { - super.write(ctx, p, promise.channel().newPromise()); - } - }catch (Exception e) { - e.printStackTrace(); - } - - } - - @Override - public void channelRead(ChannelHandlerContext ctx, Object obj) throws Exception { - - boolean isCanceled = false; - for(final var helper : nmsHandler.getCosmeticHelpers()) { - isCanceled |= !helper.read(player, obj, isCanceled); - } - - if(!isCanceled) - super.channelRead(ctx, obj); - } - -} diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/wardrobe/MannequinEntity.java b/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/wardrobe/MannequinEntity.java deleted file mode 100644 index 080a9f2e101bae3e847014dfb416557ad54ccbcd..0000000000000000000000000000000000000000 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/wardrobe/MannequinEntity.java +++ /dev/null @@ -1,131 +0,0 @@ -package io.lumine.cosmetics.nms.v1_20_R1.wardrobe; - -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.mojang.authlib.GameProfile; -import com.mojang.datafixers.util.Pair; - -import io.lumine.cosmetics.api.cosmetics.Cosmetic; -import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.api.players.wardrobe.WardrobeTracker; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_20_R1; -import io.netty.buffer.Unpooled; -import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; -import net.minecraft.network.protocol.game.ClientboundAnimatePacket; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.EquipmentSlot; - -public class MannequinEntity implements Mannequin { - - private final VolatileCodeEnabled_v1_20_R1 handler; - @Getter private final WardrobeTracker tracker; - @Getter private final UUID uniqueId; - @Getter private final Player player; - @Getter private final Location location; - @Getter private float rotation; - - @Getter private ServerPlayer fakePlayer; - private Map<Class<? extends Cosmetic>,Integer> extraEntities = Maps.newConcurrentMap(); - - public MannequinEntity(WardrobeTracker tracker, VolatileCodeEnabled_v1_20_R1 handler, Player player, Location location) { - this.tracker = tracker; - this.handler = handler; - this.player = player; - this.location = location; - this.uniqueId = UUID.randomUUID(); - - var serverPlayer = ((CraftPlayer) player).getHandle(); - var level = ((CraftWorld) location.getWorld()).getHandle(); - - this.rotation = serverPlayer.getYRot() + 180; - - if(rotation > 180) { - rotation = rotation - 360; - } - - var gameProfile = serverPlayer.getGameProfile(); - - gameProfile = new GameProfile(uniqueId, "Wardrobe"); - gameProfile.getProperties().putAll(serverPlayer.getGameProfile().getProperties()); - - this.fakePlayer = new ServerPlayer(level.getServer(), level, gameProfile); - - var spawn = new FriendlyByteBuf(Unpooled.buffer()); - - spawn.writeVarInt(fakePlayer.getId()); - spawn.writeUUID(fakePlayer.getUUID()); - spawn.writeDouble(location.getX()); - spawn.writeDouble(location.getY()); - spawn.writeDouble(location.getZ()); - spawn.writeByte((byte)(int)(serverPlayer.getYRot() * 256.0F / 360.0F)); - spawn.writeByte((byte)(int)(serverPlayer.getXRot() * 256.0F / 360.0F)); - - var packetPlayerInfo = new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, fakePlayer); - var packetAddPlayer = new ClientboundAddPlayerPacket(spawn); - - var equipmentPacket = new ClientboundSetEquipmentPacket(fakePlayer.getId(), - List.of(Pair.of(EquipmentSlot.HEAD, serverPlayer.getItemBySlot(EquipmentSlot.HEAD)), - Pair.of(EquipmentSlot.CHEST, serverPlayer.getItemBySlot(EquipmentSlot.CHEST)), - Pair.of(EquipmentSlot.LEGS, serverPlayer.getItemBySlot(EquipmentSlot.LEGS)), - Pair.of(EquipmentSlot.FEET, serverPlayer.getItemBySlot(EquipmentSlot.FEET)), - Pair.of(EquipmentSlot.MAINHAND, serverPlayer.getItemBySlot(EquipmentSlot.MAINHAND)), - Pair.of(EquipmentSlot.OFFHAND, serverPlayer.getItemBySlot(EquipmentSlot.OFFHAND)))); - - var head = (byte)(int)(rotation * 256.0F / 360.0F); - var rotatePacket = new ClientboundRotateHeadPacket(fakePlayer, head); - - var swingPacket = new ClientboundAnimatePacket(fakePlayer, 0); - - handler.broadcast(player, packetPlayerInfo, packetAddPlayer, equipmentPacket, rotatePacket, swingPacket); - - for(var eq : handler.getPlugin().getProfiles().getProfile(player).getEquipped().values()) { - eq.getCosmetic().getManager().equipMannequin(this, eq); - } - } - - public void despawn() { - var packetPlayerInfo = new ClientboundPlayerInfoRemovePacket(Lists.newArrayList(fakePlayer.getUUID())); - var packetRemovePlayer = new ClientboundRemoveEntitiesPacket(fakePlayer.getId()); - - handler.broadcast(player, packetPlayerInfo, packetRemovePlayer); - - for(var i : extraEntities.values()) { - var removePacket = new ClientboundRemoveEntitiesPacket(i); - handler.broadcast(player, removePacket); - } - } - - public void addExtraEntity(Class<? extends Cosmetic> type, int id) { - extraEntities.put(type, id); - } - - public void removeExtraEntity(Class<? extends Cosmetic> type) { - var id = extraEntities.remove(type); - - if(id != null) { - var removePacket = new ClientboundRemoveEntitiesPacket(id); - handler.broadcast(player, removePacket); - } - } - - public int getEntityId() { - return fakePlayer.getId(); - } - -} diff --git a/v1_18_R2/.gitignore b/v1_21_R2/.gitignore similarity index 100% rename from v1_18_R2/.gitignore rename to v1_21_R2/.gitignore diff --git a/v1_19_R3/pom.xml b/v1_21_R2/pom.xml similarity index 87% rename from v1_19_R3/pom.xml rename to v1_21_R2/pom.xml index 04f8b5ad95730742094553275e18b8021c222df8..2233a4e446cdf859ec4ba65647c2c009208af6a6 100644 --- a/v1_19_R3/pom.xml +++ b/v1_21_R2/pom.xml @@ -1,10 +1,10 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <artifactId>MCCosmetics-v1_19_R3</artifactId> + <artifactId>MythicCosmetics-v1_21_R2</artifactId> <parent> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> + <artifactId>MythicCosmetics-Plugin</artifactId> <version>${mccosmetics.version}</version> </parent> @@ -13,7 +13,7 @@ <plugin> <groupId>net.md-5</groupId> <artifactId>specialsource-maven-plugin</artifactId> - <version>1.2.3</version> + <version>2.0.3</version> <executions> <execution> <phase>package</phase> @@ -22,9 +22,9 @@ </goals> <id>remap-obf</id> <configuration> - <srgIn>org.spigotmc:minecraft-server:1.19.4-R0.1-SNAPSHOT:txt:maps-mojang</srgIn> + <srgIn>org.spigotmc:minecraft-server:1.21.3-R0.1-SNAPSHOT:txt:maps-mojang</srgIn> <reverse>true</reverse> - <remappedDependencies>org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies> + <remappedDependencies>org.spigotmc:spigot:1.21.3-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies> <remappedArtifactAttached>true</remappedArtifactAttached> <remappedClassifierName>remapped-obf</remappedClassifierName> </configuration> @@ -37,8 +37,8 @@ <id>remap-spigot</id> <configuration> <inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile> - <srgIn>org.spigotmc:minecraft-server:1.19.4-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn> - <remappedDependencies>org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies> + <srgIn>org.spigotmc:minecraft-server:1.21.3-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn> + <remappedDependencies>org.spigotmc:spigot:1.21.3-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies> </configuration> </execution> </executions> @@ -91,15 +91,21 @@ <dependencies> <!-- Modules --> + <dependency> + <groupId>io.lumine</groupId> + <artifactId>Mythic-Dist</artifactId> + <version>${mythic.version}</version> + <scope>provided</scope> + </dependency> <dependency> <groupId>io.lumine</groupId> <artifactId>LumineUtils</artifactId> <version>${lumineutils.version}</version> - <scope>provided</scope> + <scope>provided</scope> </dependency> <dependency> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics</artifactId> + <artifactId>MythicCosmetics</artifactId> <version>${project.parent.version}</version> <scope>provided</scope> </dependency> @@ -114,7 +120,7 @@ <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot-api</artifactId> - <version>1.19.4-R0.1-SNAPSHOT</version> + <version>1.21.3-R0.1-SNAPSHOT</version> <classifier>shaded</classifier> <scope>provided</scope> </dependency> @@ -123,7 +129,7 @@ <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot</artifactId> - <version>1.19.4-R0.1-SNAPSHOT</version> + <version>1.21.3-R0.1-SNAPSHOT</version> <classifier>remapped-mojang</classifier> <scope>provided</scope> <exclusions> diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_19_R3.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_21_R2.java similarity index 87% rename from v1_19_R3/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_19_R3.java rename to v1_21_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_21_R2.java index f6c47402663038c78d69ebfd82ed78306686ff82..6cc39150a37ce349ced9e6a90966d04078b5c0c2 100644 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_19_R3.java +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_21_R2.java @@ -11,28 +11,27 @@ import io.lumine.cosmetics.managers.hats.Hat; import io.lumine.cosmetics.managers.offhand.Offhand; import io.lumine.cosmetics.managers.sprays.Spray; import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper; -import io.lumine.cosmetics.nms.v1_19_R3.NMSFields; -import io.lumine.cosmetics.nms.v1_19_R3.network.VolatileChannelHandler; -import io.lumine.cosmetics.nms.v1_19_R3.wardrobe.MannequinEntity; -import io.lumine.cosmetics.nms.v1_19_R3.cosmetic.*; -import io.lumine.utils.reflection.Reflector; -import io.netty.channel.Channel; -import io.netty.channel.ChannelPipeline; +import io.lumine.cosmetics.nms.v1_21_R2.cosmetic.*; +import io.lumine.cosmetics.nms.v1_21_R2.network.VolatileChannelHandler; +import io.lumine.cosmetics.nms.v1_21_R2.wardrobe.MannequinEntity; +import io.lumine.mythic.bukkit.utils.reflection.Reflector; +import io.lumine.mythic.core.volatilecode.v1_21_R2.VolatileFields; import lombok.Getter; import net.minecraft.network.Connection; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerCommonPacketListenerImpl; import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.world.level.entity.LevelEntityGetter; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -41,14 +40,14 @@ import java.lang.reflect.Method; import java.util.Collection; import java.util.Map; -public class VolatileCodeEnabled_v1_19_R3 implements VolatileCodeHandler { +public class VolatileCodeEnabled_v1_21_R2 implements VolatileCodeHandler { @Getter private final MCCosmeticsPlugin plugin; private final Map<Class<? extends Cosmetic>, VolatileCosmeticHelper> cosmeticHelpers = Maps.newConcurrentMap(); private Method entityGetter; - public VolatileCodeEnabled_v1_19_R3(MCCosmeticsPlugin plugin) { + public VolatileCodeEnabled_v1_21_R2(MCCosmeticsPlugin plugin) { this.plugin = plugin; cosmeticHelpers.put(Hat.class, new VolatileHatImpl(plugin, this)); cosmeticHelpers.put(BackAccessory.class, new VolatileBackImpl(plugin, this)); @@ -74,8 +73,8 @@ public class VolatileCodeEnabled_v1_19_R3 implements VolatileCodeHandler { return cosmeticHelpers.values(); } - private Reflector<ServerGamePacketListenerImpl> refConnection - = new Reflector<ServerGamePacketListenerImpl>(ServerGamePacketListenerImpl.class, NMSFields.PLAYER_CONNECTION); + private Reflector<ServerCommonPacketListenerImpl> refConnection + = new Reflector<>(ServerCommonPacketListenerImpl.class, VolatileFields.PLAYER_CONNECTION); @Override public void injectPlayer(Player player) { @@ -83,7 +82,7 @@ public class VolatileCodeEnabled_v1_19_R3 implements VolatileCodeHandler { VolatileChannelHandler cdh = new VolatileChannelHandler(player, this); var listener = ((CraftPlayer) player).getHandle().connection; - var connection = (Connection) refConnection.get(listener, NMSFields.PLAYER_CONNECTION); + var connection = (Connection) refConnection.get(listener, VolatileFields.PLAYER_CONNECTION); var pipeline = connection.channel.pipeline(); for (String name : pipeline.toMap().keySet()) { @@ -97,7 +96,7 @@ public class VolatileCodeEnabled_v1_19_R3 implements VolatileCodeHandler { @Override public void removePlayer(Player player) { var listener = ((CraftPlayer) player).getHandle().connection; - var connection = (Connection) refConnection.get(listener, NMSFields.PLAYER_CONNECTION); + var connection = (Connection) refConnection.get(listener, VolatileFields.PLAYER_CONNECTION); var channel = connection.channel; channel.eventLoop().submit(() -> { channel.pipeline().remove("mc_cosmetics_packet_handler"); diff --git a/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/NMSFields.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/NMSFields.java new file mode 100644 index 0000000000000000000000000000000000000000..c406dba17344e5094816a63d038b9e9f6d0fa0e8 --- /dev/null +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/NMSFields.java @@ -0,0 +1,7 @@ +package io.lumine.cosmetics.nms.v1_21_R2; + +public class NMSFields { + + public static final String EQUIPMENT_SLOTS = "d"; + +} diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileBackImpl.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileBackImpl.java similarity index 75% rename from v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileBackImpl.java rename to v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileBackImpl.java index 60bae4851c21033ef863171b4390818effa1dbdd..0d1523986c636cf630a67c0b300f9902987c8520 100644 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileBackImpl.java +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileBackImpl.java @@ -1,18 +1,15 @@ -package io.lumine.cosmetics.nms.v1_19_R3.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R2.cosmetic; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mojang.datafixers.util.Pair; import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.constants.CosmeticType; -import io.lumine.cosmetics.logging.MCLogger; import io.lumine.cosmetics.managers.back.BackAccessory; -import io.lumine.cosmetics.managers.offhand.Offhand; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R3; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; import io.lumine.cosmetics.players.Profile; import io.netty.buffer.Unpooled; @@ -22,25 +19,26 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.*; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.PositionMoveRotation; +import net.minecraft.world.entity.Relative; import net.minecraft.world.entity.decoration.ArmorStand; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import net.minecraft.world.phys.Vec3; +import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemStack; import org.bukkit.entity.Player; -import java.util.List; -import java.util.Map; +import java.util.*; public class VolatileBackImpl implements VolatileEquipmentHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R3 nmsHandler; + private final VolatileCodeEnabled_v1_21_R2 nmsHandler; private final Map<Player, ArmorStand> activeProfile = Maps.newConcurrentMap(); private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - public VolatileBackImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R3 nmsHandler) { + public VolatileBackImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R2 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @@ -69,18 +67,20 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { if(stand == null) { playerTracker.put(player.getEntityId(), player); stand = new ArmorStand(EntityType.ARMOR_STAND, ((CraftWorld) player.getWorld()).getHandle()); - stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + nmsPlayer.getPassengersRidingOffset() + stand.getMyRidingOffset(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); + stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + stand.getPassengerRidingPosition(nmsPlayer).y(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); stand.setMarker(true); stand.setInvisible(true); stand.setSilent(true); activeProfile.put(player, stand); - var mobPacket = new ClientboundAddEntityPacket(stand); + var mobPacket = new ClientboundAddEntityPacket(stand.getId(), stand.getUUID(), nmsPlayer.getX(), nmsPlayer.getY() + stand.getPassengerRidingPosition(nmsPlayer).y(), nmsPlayer.getZ(), 0, 0, EntityType.ARMOR_STAND, 0, Vec3.ZERO, 0); var dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); var passengersPacket = createPassengerPacket(player.getEntityId(), stand.getId()); - nmsHandler.broadcastAroundAndSelf(player, mobPacket, dataPacket, passengersPacket); + final Collection<Packet<? super ClientGamePacketListener>> packets = Lists.newArrayList(mobPacket, dataPacket, passengersPacket); + final var bundlePacket = new ClientboundBundlePacket(packets); + nmsHandler.broadcastAroundAndSelf(player, bundlePacket); } stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); @@ -116,25 +116,23 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { mannequin.removeExtraEntity(BackAccessory.class); var stand = new ArmorStand(EntityType.ARMOR_STAND, ((CraftWorld) player.getWorld()).getHandle()); - stand.moveTo(mannequinLocation.getX(), mannequinLocation.getY() + stand.getMyRidingOffset(), mannequinLocation.getZ(), mannequinLocation.getYaw(), 0); + stand.moveTo(mannequinLocation.getX(), mannequinLocation.getY(), mannequinLocation.getZ(), mannequinLocation.getYaw(), 0); stand.setMarker(true); stand.setInvisible(true); stand.setSilent(true); + stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); mannequin.addExtraEntity(BackAccessory.class, stand.getId()); - - var mobPacket = new ClientboundAddEntityPacket(stand); + + var mobPacket = new ClientboundAddEntityPacket(stand.getId(), stand.getUUID(), mannequinLocation.getX(), mannequinLocation.getY(), mannequinLocation.getZ(), 0, 0, EntityType.ARMOR_STAND, 0, Vec3.ZERO, 0); var dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); var passengersPacket = createPassengerPacket(entityId, stand.getId()); - - nmsHandler.broadcast(player, mobPacket, dataPacket, passengersPacket); - - stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); - var equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsBack))); - nmsHandler.broadcast(player, equipmentPacket); - } + final Collection<Packet<? super ClientGamePacketListener>> packets = Lists.newArrayList(mobPacket, dataPacket, passengersPacket, equipmentPacket); + final var bundlePacket = new ClientboundBundlePacket(packets); + nmsHandler.broadcast(player, bundlePacket); + } @Override public void unequipMannequin(Mannequin mannequin) { @@ -162,8 +160,12 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { @Override public List<Object> write(Player receiver, Object packet) { - if(packet instanceof ClientboundAddPlayerPacket playerPacket) { - int id = playerPacket.getEntityId(); + if(packet instanceof ClientboundAddEntityPacket playerPacket) { + if(playerPacket.getType() != EntityType.PLAYER) { + return null; + } + + int id = playerPacket.getId(); if(playerTracker.containsKey(id)) { final var spawnedPlayer = playerTracker.get(id); final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); @@ -217,13 +219,13 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { } private List<Object> handleSpawn(Profile profile) { - if(!hasBack(profile)) + if(!hasBack(profile)) { return null; - + } final var wearer = profile.getPlayer(); final var stand = activeProfile.get(wearer); - var mobPacket = new ClientboundAddEntityPacket(stand); + var mobPacket = new ClientboundAddEntityPacket(stand, 0, stand.blockPosition()); ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, stand.getItemBySlot(EquipmentSlot.HEAD)))); ClientboundSetPassengersPacket passengersPacket = createPassengerPacket(wearer.getEntityId(), stand.getId()); @@ -253,36 +255,53 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { moveEntityPacket.getXa(), moveEntityPacket.getYa(), moveEntityPacket.getZa(), - moveEntityPacket.getyRot(), - moveEntityPacket.getxRot(), + encodeRot(moveEntityPacket.getyRot()), + encodeRot(moveEntityPacket.getxRot()), false); - }else if(moveEntityPacket.hasPosition()) { + } else if(moveEntityPacket.hasPosition()) { move = new ClientboundMoveEntityPacket.Pos( stand.getId(), moveEntityPacket.getXa(), moveEntityPacket.getYa(), moveEntityPacket.getZa(), false); - }else { + } else { move = new ClientboundMoveEntityPacket.Rot( stand.getId(), - moveEntityPacket.getyRot(), - moveEntityPacket.getxRot(), + encodeRot(moveEntityPacket.getyRot()), + encodeRot(moveEntityPacket.getxRot()), false); } return List.of(move); } + protected byte encodeRot(float rot) { + return (byte) (rot / 360f * 255); + } + private List<Object> handleTeleport(Profile profile) { - if(!hasBack(profile)) + if(!hasBack(profile)) { return null; + } final var wearer = profile.getPlayer(); final var nmsPlayer = ((CraftPlayer) wearer).getHandle(); final var stand = activeProfile.get(wearer); - stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + nmsPlayer.getPassengersRidingOffset() + stand.getMyRidingOffset(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); - return List.of(new ClientboundTeleportEntityPacket(stand)); + final var x = nmsPlayer.getX(); + final var y = nmsPlayer.getY() + stand.getPassengerRidingPosition(nmsPlayer).y(); + final var z = nmsPlayer.getZ(); + + stand.moveTo(x, y, z, nmsPlayer.getYRot(), 0); + + final Set<Relative> set = new HashSet<>(); + + final var delta = new Vec3(0,0,0); + final var positionMoveRotation = new PositionMoveRotation(new Vec3(x,y,z), delta, 0, nmsPlayer.getXRot()); + + final var packet = new ClientboundTeleportEntityPacket(stand.getId(), positionMoveRotation, set, false); + + return List.of(packet); } private boolean hasBack(Profile profile) { @@ -297,7 +316,7 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { FriendlyByteBuf bb = new FriendlyByteBuf(Unpooled.buffer()); bb.writeVarInt(mount); bb.writeVarIntArray(driver); - return new ClientboundSetPassengersPacket(bb); + return ClientboundSetPassengersPacket.STREAM_CODEC.decode(bb); } } \ No newline at end of file diff --git a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileGestureImpl.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileGestureImpl.java similarity index 88% rename from v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileGestureImpl.java rename to v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileGestureImpl.java index d27c988ea5b4afb1e11ccb642fba9402c867678f..96d704a1b49a9233102e1468151d229aafb680d9 100644 --- a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileGestureImpl.java +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileGestureImpl.java @@ -1,4 +1,4 @@ -package io.lumine.cosmetics.nms.v1_19_R2.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R2.cosmetic; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -9,7 +9,7 @@ import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.managers.gestures.Gesture; import io.lumine.cosmetics.managers.gestures.GestureManager; import io.lumine.cosmetics.managers.gestures.QuitMethod; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R2; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; import io.lumine.cosmetics.players.Profile; import io.netty.buffer.Unpooled; @@ -21,9 +21,10 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.animal.horse.Horse; import net.minecraft.world.item.ItemStack; import org.bukkit.attribute.Attribute; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R2.attribute.CraftAttributeMap; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R2.attribute.CraftAttribute; +import org.bukkit.craftbukkit.v1_21_R2.attribute.CraftAttributeMap; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -42,19 +43,20 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R2 nmsHandler; + private final VolatileCodeEnabled_v1_21_R2 nmsHandler; private final Set<Player> activeProfile = Sets.newConcurrentHashSet(); private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); private Horse horse; - public VolatileGestureImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R2 nmsHandler) { + public VolatileGestureImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R2 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @Override public void apply(CosmeticProfile profile) { + /* if (profile == null) return; Player player = profile.getPlayer(); @@ -84,10 +86,13 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { } ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), empty); nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); + + */ } @Override public void unapply(CosmeticProfile profile) { + /* if (profile == null) return; Player player = profile.getPlayer(); @@ -112,25 +117,32 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { continue; hide.show(profile); } + + */ } private ClientboundSetPassengersPacket createPassengerPacket(int mount, int... driver) { + /* FriendlyByteBuf bb = new FriendlyByteBuf(Unpooled.buffer()); bb.writeVarInt(mount); bb.writeVarIntArray(driver); return new ClientboundSetPassengersPacket(bb); + + */ + return null; } private void getHorsed(Player player) { + /* final var nmsPlayer = ((CraftPlayer) player).getHandle(); if(horse == null) { horse = new Horse(EntityType.HORSE, ((CraftWorld) player.getWorld()).getHandle()); horse.setInvisible(true); horse.setHealth(0); - horse.getAttribute(CraftAttributeMap.toMinecraft(Attribute.GENERIC_MAX_HEALTH)).setBaseValue(0); + horse.getAttribute(CraftAttribute.bukkitToMinecraft(Attribute.MAX_HEALTH)).setBaseValue(0); } - horse.setPos(nmsPlayer.getX(), nmsPlayer.getY() - horse.getPassengersRidingOffset() - nmsPlayer.getMyRidingOffset(), nmsPlayer.getZ()); + horse.setPos(nmsPlayer.getX(), nmsPlayer.getY() - nmsPlayer.getMyRidingOffset(horse), nmsPlayer.getZ()); var mobPacket = new ClientboundAddEntityPacket(horse); var dataPacket = new ClientboundSetEntityDataPacket(horse.getId(), horse.getEntityData().getNonDefaultValues()); @@ -138,17 +150,20 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { var passengersPacket = createPassengerPacket(horse.getId(), nmsPlayer.getId()); nmsHandler.broadcast(player, mobPacket, dataPacket, attributesPacket, passengersPacket); + + */ } @Override public boolean read(Player sender, Object packet, boolean isCanceled) { + /* if(!plugin.getGestureManager().getTicking().containsKey(sender)) { return true; } if(packet instanceof ServerboundPlayerInputPacket inputPacket) { final var manager = (GestureManager) plugin.getGestureManager(); - if(inputPacket.isShiftKeyDown()) + if(inputPacket.input() == ServerboundPlayerInputPacket.) manager.quit(sender, QuitMethod.SNEAK); if(inputPacket.isJumping()) manager.quit(sender, QuitMethod.JUMP); @@ -159,11 +174,13 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { return false; } } + */ return true; } @Override public List<Object> write(Player receiver, Object packet) { + /* if(packet instanceof ClientboundSetEquipmentPacket equipmentPacket) { int id = equipmentPacket.getEntity(); final var spawnedPlayer = playerTracker.get(id); @@ -173,6 +190,7 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { if(profile != null) return List.of(new ClientboundSetEquipmentPacket(id, empty)); } + */ return null; } } diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileHatImpl.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileHatImpl.java similarity index 92% rename from v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileHatImpl.java rename to v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileHatImpl.java index 52b2cd7fa0c9dca261de446850c15c03538d7129..81dd85286990d8a48d1da7337ef65ced72b4ef9b 100644 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileHatImpl.java +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileHatImpl.java @@ -1,4 +1,4 @@ -package io.lumine.cosmetics.nms.v1_20_R1.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R2.cosmetic; import com.mojang.datafixers.util.Pair; import io.lumine.cosmetics.MCCosmeticsPlugin; @@ -7,16 +7,17 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.managers.hats.Hat; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_20_R1; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; +import io.lumine.cosmetics.nms.v1_21_R2.NMSFields; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.reflection.Reflector; +import io.lumine.mythic.bukkit.utils.reflection.Reflector; import lombok.Getter; import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; import net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket; import net.minecraft.world.entity.EquipmentSlot; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemStack; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -25,10 +26,10 @@ import java.util.List; public class VolatileHatImpl implements VolatileEquipmentHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_20_R1 nmsHandler; + private final VolatileCodeEnabled_v1_21_R2 nmsHandler; //private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - public VolatileHatImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_20_R1 nmsHandler) { + public VolatileHatImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R2 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @@ -152,7 +153,7 @@ public class VolatileHatImpl implements VolatileEquipmentHelper { nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); } - private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, "c"); + private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, NMSFields.EQUIPMENT_SLOTS); private void modifyPacket(Profile profile, ClientboundSetEquipmentPacket packet) { final var maybeEquipped = profile.getEquipped(Hat.class); @@ -186,7 +187,7 @@ public class VolatileHatImpl implements VolatileEquipmentHelper { newSlots.add(Pair.of(EquipmentSlot.HEAD, nmsItem)); } - refEq.set(packet, "c", newSlots); + refEq.set(packet, NMSFields.EQUIPMENT_SLOTS, newSlots); } } diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileOffhandImpl.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileOffhandImpl.java similarity index 88% rename from v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileOffhandImpl.java rename to v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileOffhandImpl.java index acf735f7f8d6cb7e23654302346acc4dec23f3de..b65d6918c236ae5c9735084d8a460129595ef2e6 100644 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileOffhandImpl.java +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileOffhandImpl.java @@ -1,4 +1,4 @@ -package io.lumine.cosmetics.nms.v1_20_R1.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R2.cosmetic; import com.google.common.collect.Maps; import com.mojang.datafixers.util.Pair; @@ -9,15 +9,16 @@ import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.managers.hats.Hat; import io.lumine.cosmetics.managers.offhand.Offhand; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_20_R1; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; +import io.lumine.cosmetics.nms.v1_21_R2.NMSFields; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.reflection.Reflector; +import io.lumine.mythic.bukkit.utils.reflection.Reflector; import lombok.Getter; import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; import net.minecraft.world.entity.EquipmentSlot; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemStack; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -27,10 +28,10 @@ import java.util.Map; public class VolatileOffhandImpl implements VolatileEquipmentHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_20_R1 nmsHandler; + private final VolatileCodeEnabled_v1_21_R2 nmsHandler; private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - public VolatileOffhandImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_20_R1 nmsHandler) { + public VolatileOffhandImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R2 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @@ -131,10 +132,10 @@ public class VolatileOffhandImpl implements VolatileEquipmentHelper { nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); } - private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, "c"); + private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, NMSFields.EQUIPMENT_SLOTS); private void modifyPacket(Profile profile, ClientboundSetEquipmentPacket packet) { - final var maybeEquipped = profile.getEquipped(Hat.class); + final var maybeEquipped = profile.getEquipped(Offhand.class); if(maybeEquipped.isEmpty()) { return; } @@ -154,7 +155,7 @@ public class VolatileOffhandImpl implements VolatileEquipmentHelper { for(var pair : slots) { final EquipmentSlot slot = pair.getFirst(); - if(slot == EquipmentSlot.HEAD) { + if(slot == EquipmentSlot.OFFHAND) { foundHead = true; newSlots.add(Pair.of(pair.getFirst(), nmsItem)); } else { @@ -162,9 +163,9 @@ public class VolatileOffhandImpl implements VolatileEquipmentHelper { } } if(!foundHead) { - newSlots.add(Pair.of(EquipmentSlot.HEAD, nmsItem)); + newSlots.add(Pair.of(EquipmentSlot.OFFHAND, nmsItem)); } - refEq.set(packet, "c", newSlots); + refEq.set(packet, NMSFields.EQUIPMENT_SLOTS, newSlots); } } diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileSprayImpl.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileSprayImpl.java similarity index 86% rename from v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileSprayImpl.java rename to v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileSprayImpl.java index 87c67368d6b1cfd94e8db3fc0ab4d3570d4e3361..c69b1bc4351be2a1b86f67181fd2c121012f600b 100644 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileSprayImpl.java +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/cosmetic/VolatileSprayImpl.java @@ -1,8 +1,8 @@ -package io.lumine.cosmetics.nms.v1_19_R3.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R2.cosmetic; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R3; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2; import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper; import lombok.Getter; import net.minecraft.core.BlockPos; @@ -11,21 +11,22 @@ import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; import net.minecraft.world.entity.decoration.ItemFrame; +import net.minecraft.world.level.saveddata.maps.MapId; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.BlockFace; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemStack; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.MapMeta; public class VolatileSprayImpl implements VolatileSprayHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R3 nmsHandler; + private final VolatileCodeEnabled_v1_21_R2 nmsHandler; - public VolatileSprayImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R3 nmsHandler) { + public VolatileSprayImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R2 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @@ -60,7 +61,7 @@ public class VolatileSprayImpl implements VolatileSprayHelper { frame.setInvisible(true); frame.setRotation(rotation); - var packetAdd = new ClientboundAddEntityPacket(frame, dir); + var packetAdd = new ClientboundAddEntityPacket(frame, dir, pos); var packetData = new ClientboundSetEntityDataPacket(frame.getId(), frame.getEntityData().getNonDefaultValues()); var packetMap = constructMapPacket(image.getMapNumber(), image.getPixels()); @@ -78,7 +79,7 @@ public class VolatileSprayImpl implements VolatileSprayHelper { private ClientboundMapItemDataPacket constructMapPacket(int id, byte[] pixels) { var mapData = constructMapData(startX, startY, mapWidth, mapHeight, pixels); - var packet = new ClientboundMapItemDataPacket(id, mapScale, mapLocked, null, mapData); + var packet = new ClientboundMapItemDataPacket(new MapId(id), mapScale, mapLocked, null, mapData); return packet; } diff --git a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/network/VolatileChannelHandler.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/network/VolatileChannelHandler.java similarity index 87% rename from v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/network/VolatileChannelHandler.java rename to v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/network/VolatileChannelHandler.java index f1e30f7bfb958e704437254a1035aaeb0ef4d1ac..734ff2bf287b9cba9f7813bc772209de23953bf5 100644 --- a/v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/network/VolatileChannelHandler.java +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/network/VolatileChannelHandler.java @@ -1,6 +1,6 @@ -package io.lumine.cosmetics.nms.v1_18_R2.network; +package io.lumine.cosmetics.nms.v1_21_R2.network; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; @@ -12,10 +12,10 @@ import java.util.List; public class VolatileChannelHandler extends ChannelDuplexHandler { - private final VolatileCodeEnabled_v1_18_R2 nmsHandler; + private final VolatileCodeEnabled_v1_21_R2 nmsHandler; @Getter private final Player player; - public VolatileChannelHandler(Player player, VolatileCodeEnabled_v1_18_R2 nmsHandler) { + public VolatileChannelHandler(Player player, VolatileCodeEnabled_v1_21_R2 nmsHandler) { this.player = player; this.nmsHandler = nmsHandler; } diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/wardrobe/MannequinEntity.java b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/wardrobe/MannequinEntity.java similarity index 56% rename from v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/wardrobe/MannequinEntity.java rename to v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/wardrobe/MannequinEntity.java index 150b43880bd2f0a8e013501c1fd80d3ed02f3f62..703d7be489519fa8597646cb6340cdbd3c81a6e2 100644 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/wardrobe/MannequinEntity.java +++ b/v1_21_R2/src/main/java/io/lumine/cosmetics/nms/v1_21_R2/wardrobe/MannequinEntity.java @@ -1,12 +1,20 @@ -package io.lumine.cosmetics.nms.v1_19_R3.wardrobe; +package io.lumine.cosmetics.nms.v1_21_R2.wardrobe; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; +import io.lumine.mythic.bukkit.MythicBukkit; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.RemoteChatSession; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.protocol.game.*; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.GameType; +import net.minecraft.world.phys.Vec3; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer; import org.bukkit.entity.Player; import com.google.common.collect.Lists; @@ -17,38 +25,33 @@ import com.mojang.datafixers.util.Pair; import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.api.players.wardrobe.WardrobeTracker; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R3; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R2; import io.netty.buffer.Unpooled; import lombok.Getter; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; -import net.minecraft.network.protocol.game.ClientboundAnimatePacket; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EquipmentSlot; +import javax.annotation.Nullable; + public class MannequinEntity implements Mannequin { - private final VolatileCodeEnabled_v1_19_R3 handler; + private final VolatileCodeEnabled_v1_21_R2 handler; @Getter private final WardrobeTracker tracker; @Getter private final UUID uniqueId; @Getter private final Player player; @Getter private final Location location; @Getter private float rotation; - @Getter private ServerPlayer fakePlayer; + @Getter private int fakePlayerId; private Map<Class<? extends Cosmetic>,Integer> extraEntities = Maps.newConcurrentMap(); - public MannequinEntity(WardrobeTracker tracker, VolatileCodeEnabled_v1_19_R3 handler, Player player, Location location) { + public MannequinEntity(WardrobeTracker tracker, VolatileCodeEnabled_v1_21_R2 handler, Player player, Location location) { this.tracker = tracker; this.handler = handler; this.player = player; this.location = location; + this.fakePlayerId = MythicBukkit.inst().getVolatileCodeHandler().getEntityHandler().getNextEntityId(); this.uniqueId = UUID.randomUUID(); var serverPlayer = ((CraftPlayer) player).getHandle(); @@ -64,23 +67,25 @@ public class MannequinEntity implements Mannequin { gameProfile = new GameProfile(uniqueId, "Wardrobe"); gameProfile.getProperties().putAll(serverPlayer.getGameProfile().getProperties()); - - this.fakePlayer = new ServerPlayer(level.getServer(), level, gameProfile); - - var spawn = new FriendlyByteBuf(Unpooled.buffer()); - - spawn.writeVarInt(fakePlayer.getId()); - spawn.writeUUID(fakePlayer.getUUID()); - spawn.writeDouble(location.getX()); - spawn.writeDouble(location.getY()); - spawn.writeDouble(location.getZ()); - spawn.writeByte((byte)(int)(serverPlayer.getYRot() * 256.0F / 360.0F)); - spawn.writeByte((byte)(int)(serverPlayer.getXRot() * 256.0F / 360.0F)); - - var packetPlayerInfo = new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, fakePlayer); - var packetAddPlayer = new ClientboundAddPlayerPacket(spawn); - - var equipmentPacket = new ClientboundSetEquipmentPacket(fakePlayer.getId(), + + final var buf = new RegistryFriendlyByteBuf(Unpooled.buffer(), RegistryAccess.EMPTY); + + final EnumSet<ClientboundPlayerInfoUpdatePacket.Action> actionSet = EnumSet.of(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER); + buf.writeEnumSet(actionSet, ClientboundPlayerInfoUpdatePacket.Action.class); + + var fakePlayerEntry = List.of(new ClientboundPlayerInfoUpdatePacket.Entry(uniqueId, gameProfile, false, 0, GameType.CREATIVE, null, 0, null)); + buf.writeCollection(fakePlayerEntry, (var0x, var1) -> { + var0x.writeUUID(var1.profileId()); + + GameProfile var2 = (GameProfile)Objects.requireNonNull(var1.profile()); + var0x.writeUtf(var2.getName(), 16); + ByteBufCodecs.GAME_PROFILE_PROPERTIES.encode(var0x, var2.getProperties()); + }); + + var packetPlayerInfo = ClientboundPlayerInfoUpdatePacket.STREAM_CODEC.decode(buf); + + var packetAddPlayer = new ClientboundAddEntityPacket(fakePlayerId, uniqueId, location.getX(), location.getY(), location.getZ(), serverPlayer.getXRot(), serverPlayer.getYRot(), EntityType.PLAYER, 0, Vec3.ZERO, serverPlayer.getYHeadRot()); + var equipmentPacket = new ClientboundSetEquipmentPacket(fakePlayerId, List.of(Pair.of(EquipmentSlot.HEAD, serverPlayer.getItemBySlot(EquipmentSlot.HEAD)), Pair.of(EquipmentSlot.CHEST, serverPlayer.getItemBySlot(EquipmentSlot.CHEST)), Pair.of(EquipmentSlot.LEGS, serverPlayer.getItemBySlot(EquipmentSlot.LEGS)), @@ -89,9 +94,16 @@ public class MannequinEntity implements Mannequin { Pair.of(EquipmentSlot.OFFHAND, serverPlayer.getItemBySlot(EquipmentSlot.OFFHAND)))); var head = (byte)(int)(rotation * 256.0F / 360.0F); - var rotatePacket = new ClientboundRotateHeadPacket(fakePlayer, head); - - var swingPacket = new ClientboundAnimatePacket(fakePlayer, 0); + + var rotateByteBuf = new FriendlyByteBuf(Unpooled.buffer()); + rotateByteBuf.writeVarInt(fakePlayerId); + rotateByteBuf.writeByte(head); + var rotatePacket = ClientboundRotateHeadPacket.STREAM_CODEC.decode(rotateByteBuf); + + var animateByteBuf = new FriendlyByteBuf(Unpooled.buffer()); + animateByteBuf.writeVarInt(fakePlayerId); + animateByteBuf.writeByte(ClientboundAnimatePacket.SWING_MAIN_HAND); + var swingPacket = ClientboundAnimatePacket.STREAM_CODEC.decode(animateByteBuf); handler.broadcast(player, packetPlayerInfo, packetAddPlayer, equipmentPacket, rotatePacket, swingPacket); @@ -101,8 +113,8 @@ public class MannequinEntity implements Mannequin { } public void despawn() { - var packetPlayerInfo = new ClientboundPlayerInfoRemovePacket(Lists.newArrayList(fakePlayer.getUUID())); - var packetRemovePlayer = new ClientboundRemoveEntitiesPacket(fakePlayer.getId()); + var packetPlayerInfo = new ClientboundPlayerInfoRemovePacket(Lists.newArrayList(uniqueId)); + var packetRemovePlayer = new ClientboundRemoveEntitiesPacket(fakePlayerId); handler.broadcast(player, packetPlayerInfo, packetRemovePlayer); @@ -126,7 +138,7 @@ public class MannequinEntity implements Mannequin { } public int getEntityId() { - return fakePlayer.getId(); + return fakePlayerId; } } diff --git a/v1_19_R2/.gitignore b/v1_21_R3/.gitignore similarity index 100% rename from v1_19_R2/.gitignore rename to v1_21_R3/.gitignore diff --git a/v1_20_R1/pom.xml b/v1_21_R3/pom.xml similarity index 87% rename from v1_20_R1/pom.xml rename to v1_21_R3/pom.xml index aa51cd53ef34eb89023064a8d17d90bd9429750b..e345449b7a905a8846d6db3c88c639fe6af6dcc4 100644 --- a/v1_20_R1/pom.xml +++ b/v1_21_R3/pom.xml @@ -1,10 +1,10 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> - <artifactId>MCCosmetics-v1_20_R1</artifactId> + <artifactId>MythicCosmetics-v1_21_R3</artifactId> <parent> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics-Plugin</artifactId> + <artifactId>MythicCosmetics-Plugin</artifactId> <version>${mccosmetics.version}</version> </parent> @@ -13,7 +13,7 @@ <plugin> <groupId>net.md-5</groupId> <artifactId>specialsource-maven-plugin</artifactId> - <version>1.2.3</version> + <version>2.0.3</version> <executions> <execution> <phase>package</phase> @@ -22,9 +22,9 @@ </goals> <id>remap-obf</id> <configuration> - <srgIn>org.spigotmc:minecraft-server:1.20.1-R0.1-SNAPSHOT:txt:maps-mojang</srgIn> + <srgIn>org.spigotmc:minecraft-server:1.21.4-R0.1-SNAPSHOT:txt:maps-mojang</srgIn> <reverse>true</reverse> - <remappedDependencies>org.spigotmc:spigot:1.20.1-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies> + <remappedDependencies>org.spigotmc:spigot:1.21.4-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies> <remappedArtifactAttached>true</remappedArtifactAttached> <remappedClassifierName>remapped-obf</remappedClassifierName> </configuration> @@ -37,8 +37,8 @@ <id>remap-spigot</id> <configuration> <inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile> - <srgIn>org.spigotmc:minecraft-server:1.20.1-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn> - <remappedDependencies>org.spigotmc:spigot:1.20.1-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies> + <srgIn>org.spigotmc:minecraft-server:1.21.4-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn> + <remappedDependencies>org.spigotmc:spigot:1.21.4-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies> </configuration> </execution> </executions> @@ -91,15 +91,21 @@ <dependencies> <!-- Modules --> + <dependency> + <groupId>io.lumine</groupId> + <artifactId>Mythic-Dist</artifactId> + <version>${mythic.version}</version> + <scope>provided</scope> + </dependency> <dependency> <groupId>io.lumine</groupId> <artifactId>LumineUtils</artifactId> <version>${lumineutils.version}</version> - <scope>provided</scope> + <scope>provided</scope> </dependency> <dependency> <groupId>io.lumine</groupId> - <artifactId>MCCosmetics</artifactId> + <artifactId>MythicCosmetics</artifactId> <version>${project.parent.version}</version> <scope>provided</scope> </dependency> @@ -114,7 +120,7 @@ <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot-api</artifactId> - <version>1.20.1-R0.1-SNAPSHOT</version> + <version>1.21.4-R0.1-SNAPSHOT</version> <classifier>shaded</classifier> <scope>provided</scope> </dependency> @@ -123,7 +129,7 @@ <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot</artifactId> - <version>1.20.1-R0.1-SNAPSHOT</version> + <version>1.21.4-R0.1-SNAPSHOT</version> <classifier>remapped-mojang</classifier> <scope>provided</scope> <exclusions> diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_20_R1.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_21_R3.java similarity index 87% rename from v1_20_R1/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_20_R1.java rename to v1_21_R3/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_21_R3.java index b9cf5fa4f5c58a830aa8015625d5537db94345c3..757c5a079453e969aed86937ccf6d745ec1806a0 100644 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_20_R1.java +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_21_R3.java @@ -11,27 +11,27 @@ import io.lumine.cosmetics.managers.hats.Hat; import io.lumine.cosmetics.managers.offhand.Offhand; import io.lumine.cosmetics.managers.sprays.Spray; import io.lumine.cosmetics.nms.cosmetic.VolatileCosmeticHelper; -import io.lumine.cosmetics.nms.v1_20_R1.NMSFields; -import io.lumine.cosmetics.nms.v1_20_R1.cosmetic.*; -import io.lumine.cosmetics.nms.v1_20_R1.network.VolatileChannelHandler; -import io.lumine.cosmetics.nms.v1_20_R1.wardrobe.MannequinEntity; -import io.lumine.cosmetics.nms.v1_20_R1.cosmetic.*; -import io.lumine.utils.reflection.Reflector; +import io.lumine.cosmetics.nms.v1_21_R3.cosmetic.*; +import io.lumine.cosmetics.nms.v1_21_R3.cosmetic.*; +import io.lumine.cosmetics.nms.v1_21_R3.network.VolatileChannelHandler; +import io.lumine.cosmetics.nms.v1_21_R3.wardrobe.MannequinEntity; +import io.lumine.mythic.bukkit.utils.reflection.Reflector; +import io.lumine.mythic.core.volatilecode.v1_21_R3.VolatileFields; import lombok.Getter; import net.minecraft.network.Connection; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.server.network.ServerCommonPacketListenerImpl; import net.minecraft.world.level.entity.LevelEntityGetter; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R3.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_21_R3.entity.CraftPlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -40,14 +40,14 @@ import java.lang.reflect.Method; import java.util.Collection; import java.util.Map; -public class VolatileCodeEnabled_v1_20_R1 implements VolatileCodeHandler { +public class VolatileCodeEnabled_v1_21_R3 implements VolatileCodeHandler { @Getter private final MCCosmeticsPlugin plugin; private final Map<Class<? extends Cosmetic>, VolatileCosmeticHelper> cosmeticHelpers = Maps.newConcurrentMap(); private Method entityGetter; - public VolatileCodeEnabled_v1_20_R1(MCCosmeticsPlugin plugin) { + public VolatileCodeEnabled_v1_21_R3(MCCosmeticsPlugin plugin) { this.plugin = plugin; cosmeticHelpers.put(Hat.class, new VolatileHatImpl(plugin, this)); cosmeticHelpers.put(BackAccessory.class, new VolatileBackImpl(plugin, this)); @@ -73,8 +73,8 @@ public class VolatileCodeEnabled_v1_20_R1 implements VolatileCodeHandler { return cosmeticHelpers.values(); } - private Reflector<ServerGamePacketListenerImpl> refConnection - = new Reflector<ServerGamePacketListenerImpl>(ServerGamePacketListenerImpl.class, NMSFields.PLAYER_CONNECTION); + private Reflector<ServerCommonPacketListenerImpl> refConnection + = new Reflector<>(ServerCommonPacketListenerImpl.class, VolatileFields.PLAYER_CONNECTION); @Override public void injectPlayer(Player player) { @@ -82,7 +82,7 @@ public class VolatileCodeEnabled_v1_20_R1 implements VolatileCodeHandler { VolatileChannelHandler cdh = new VolatileChannelHandler(player, this); var listener = ((CraftPlayer) player).getHandle().connection; - var connection = (Connection) refConnection.get(listener, NMSFields.PLAYER_CONNECTION); + var connection = (Connection) refConnection.get(listener, VolatileFields.PLAYER_CONNECTION); var pipeline = connection.channel.pipeline(); for (String name : pipeline.toMap().keySet()) { @@ -96,7 +96,7 @@ public class VolatileCodeEnabled_v1_20_R1 implements VolatileCodeHandler { @Override public void removePlayer(Player player) { var listener = ((CraftPlayer) player).getHandle().connection; - var connection = (Connection) refConnection.get(listener, NMSFields.PLAYER_CONNECTION); + var connection = (Connection) refConnection.get(listener, VolatileFields.PLAYER_CONNECTION); var channel = connection.channel; channel.eventLoop().submit(() -> { channel.pipeline().remove("mc_cosmetics_packet_handler"); diff --git a/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/NMSFields.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/NMSFields.java new file mode 100644 index 0000000000000000000000000000000000000000..d9114687c5120990bdfd1d8ea5b5649dd8823e95 --- /dev/null +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/NMSFields.java @@ -0,0 +1,7 @@ +package io.lumine.cosmetics.nms.v1_21_R3; + +public class NMSFields { + + public static final String EQUIPMENT_SLOTS = "d"; + +} diff --git a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileBackImpl.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileBackImpl.java similarity index 75% rename from v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileBackImpl.java rename to v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileBackImpl.java index dbab01974e5bbc180c82d70fc87e0dcaabde56c9..edcc1600f3dcfab5f541b6f810642008b0d9e264 100644 --- a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/cosmetic/VolatileBackImpl.java +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileBackImpl.java @@ -1,5 +1,6 @@ -package io.lumine.cosmetics.nms.v1_19_R2.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R3.cosmetic; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mojang.datafixers.util.Pair; import io.lumine.cosmetics.MCCosmeticsPlugin; @@ -8,7 +9,7 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.managers.back.BackAccessory; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R2; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; import io.lumine.cosmetics.players.Profile; import io.netty.buffer.Unpooled; @@ -18,24 +19,26 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.*; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.PositionMoveRotation; +import net.minecraft.world.entity.Relative; import net.minecraft.world.entity.decoration.ArmorStand; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack; +import net.minecraft.world.phys.Vec3; +import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R3.inventory.CraftItemStack; import org.bukkit.entity.Player; -import java.util.List; -import java.util.Map; +import java.util.*; public class VolatileBackImpl implements VolatileEquipmentHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R2 nmsHandler; + private final VolatileCodeEnabled_v1_21_R3 nmsHandler; private final Map<Player, ArmorStand> activeProfile = Maps.newConcurrentMap(); private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - public VolatileBackImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R2 nmsHandler) { + public VolatileBackImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R3 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @@ -64,18 +67,20 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { if(stand == null) { playerTracker.put(player.getEntityId(), player); stand = new ArmorStand(EntityType.ARMOR_STAND, ((CraftWorld) player.getWorld()).getHandle()); - stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + nmsPlayer.getPassengersRidingOffset() + stand.getMyRidingOffset(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); + stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + stand.getPassengerRidingPosition(nmsPlayer).y(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); stand.setMarker(true); stand.setInvisible(true); stand.setSilent(true); activeProfile.put(player, stand); - var mobPacket = new ClientboundAddEntityPacket(stand); + var mobPacket = new ClientboundAddEntityPacket(stand.getId(), stand.getUUID(), nmsPlayer.getX(), nmsPlayer.getY() + stand.getPassengerRidingPosition(nmsPlayer).y(), nmsPlayer.getZ(), 0, 0, EntityType.ARMOR_STAND, 0, Vec3.ZERO, 0); var dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); var passengersPacket = createPassengerPacket(player.getEntityId(), stand.getId()); - nmsHandler.broadcastAroundAndSelf(player, mobPacket, dataPacket, passengersPacket); + final Collection<Packet<? super ClientGamePacketListener>> packets = Lists.newArrayList(mobPacket, dataPacket, passengersPacket); + final var bundlePacket = new ClientboundBundlePacket(packets); + nmsHandler.broadcastAroundAndSelf(player, bundlePacket); } stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); @@ -111,25 +116,23 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { mannequin.removeExtraEntity(BackAccessory.class); var stand = new ArmorStand(EntityType.ARMOR_STAND, ((CraftWorld) player.getWorld()).getHandle()); - stand.moveTo(mannequinLocation.getX(), mannequinLocation.getY() + stand.getMyRidingOffset(), mannequinLocation.getZ(), mannequinLocation.getYaw(), 0); + stand.moveTo(mannequinLocation.getX(), mannequinLocation.getY(), mannequinLocation.getZ(), mannequinLocation.getYaw(), 0); stand.setMarker(true); stand.setInvisible(true); stand.setSilent(true); + stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); mannequin.addExtraEntity(BackAccessory.class, stand.getId()); - - var mobPacket = new ClientboundAddEntityPacket(stand); + + var mobPacket = new ClientboundAddEntityPacket(stand.getId(), stand.getUUID(), mannequinLocation.getX(), mannequinLocation.getY(), mannequinLocation.getZ(), 0, 0, EntityType.ARMOR_STAND, 0, Vec3.ZERO, 0); var dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); var passengersPacket = createPassengerPacket(entityId, stand.getId()); - - nmsHandler.broadcast(player, mobPacket, dataPacket, passengersPacket); - - stand.setItemSlot(EquipmentSlot.HEAD, nmsBack); - var equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, nmsBack))); - nmsHandler.broadcast(player, equipmentPacket); - } + final Collection<Packet<? super ClientGamePacketListener>> packets = Lists.newArrayList(mobPacket, dataPacket, passengersPacket, equipmentPacket); + final var bundlePacket = new ClientboundBundlePacket(packets); + nmsHandler.broadcast(player, bundlePacket); + } @Override public void unequipMannequin(Mannequin mannequin) { @@ -157,8 +160,12 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { @Override public List<Object> write(Player receiver, Object packet) { - if(packet instanceof ClientboundAddPlayerPacket playerPacket) { - int id = playerPacket.getEntityId(); + if(packet instanceof ClientboundAddEntityPacket playerPacket) { + if(playerPacket.getType() != EntityType.PLAYER) { + return null; + } + + int id = playerPacket.getId(); if(playerTracker.containsKey(id)) { final var spawnedPlayer = playerTracker.get(id); final var profile = MCCosmeticsPlugin.inst().getProfiles().getProfile(spawnedPlayer); @@ -212,13 +219,13 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { } private List<Object> handleSpawn(Profile profile) { - if(!hasBack(profile)) + if(!hasBack(profile)) { return null; - + } final var wearer = profile.getPlayer(); final var stand = activeProfile.get(wearer); - var mobPacket = new ClientboundAddEntityPacket(stand); + var mobPacket = new ClientboundAddEntityPacket(stand, 0, stand.blockPosition()); ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(stand.getId(), stand.getEntityData().getNonDefaultValues()); ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(stand.getId(), List.of(Pair.of(EquipmentSlot.HEAD, stand.getItemBySlot(EquipmentSlot.HEAD)))); ClientboundSetPassengersPacket passengersPacket = createPassengerPacket(wearer.getEntityId(), stand.getId()); @@ -248,36 +255,53 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { moveEntityPacket.getXa(), moveEntityPacket.getYa(), moveEntityPacket.getZa(), - moveEntityPacket.getyRot(), - moveEntityPacket.getxRot(), + encodeRot(moveEntityPacket.getyRot()), + encodeRot(moveEntityPacket.getxRot()), false); - }else if(moveEntityPacket.hasPosition()) { + } else if(moveEntityPacket.hasPosition()) { move = new ClientboundMoveEntityPacket.Pos( stand.getId(), moveEntityPacket.getXa(), moveEntityPacket.getYa(), moveEntityPacket.getZa(), false); - }else { + } else { move = new ClientboundMoveEntityPacket.Rot( stand.getId(), - moveEntityPacket.getyRot(), - moveEntityPacket.getxRot(), + encodeRot(moveEntityPacket.getyRot()), + encodeRot(moveEntityPacket.getxRot()), false); } return List.of(move); } + protected byte encodeRot(float rot) { + return (byte) (rot / 360f * 255); + } + private List<Object> handleTeleport(Profile profile) { - if(!hasBack(profile)) + if(!hasBack(profile)) { return null; + } final var wearer = profile.getPlayer(); final var nmsPlayer = ((CraftPlayer) wearer).getHandle(); final var stand = activeProfile.get(wearer); - stand.moveTo(nmsPlayer.getX(), nmsPlayer.getY() + nmsPlayer.getPassengersRidingOffset() + stand.getMyRidingOffset(), nmsPlayer.getZ(), nmsPlayer.getYRot(), 0); - return List.of(new ClientboundTeleportEntityPacket(stand)); + final var x = nmsPlayer.getX(); + final var y = nmsPlayer.getY() + stand.getPassengerRidingPosition(nmsPlayer).y(); + final var z = nmsPlayer.getZ(); + + stand.moveTo(x, y, z, nmsPlayer.getYRot(), 0); + + final Set<Relative> set = new HashSet<>(); + + final var delta = new Vec3(0,0,0); + final var positionMoveRotation = new PositionMoveRotation(new Vec3(x,y,z), delta, 0, nmsPlayer.getXRot()); + + final var packet = new ClientboundTeleportEntityPacket(stand.getId(), positionMoveRotation, set, false); + + return List.of(packet); } private boolean hasBack(Profile profile) { @@ -292,7 +316,7 @@ public class VolatileBackImpl implements VolatileEquipmentHelper { FriendlyByteBuf bb = new FriendlyByteBuf(Unpooled.buffer()); bb.writeVarInt(mount); bb.writeVarIntArray(driver); - return new ClientboundSetPassengersPacket(bb); + return ClientboundSetPassengersPacket.STREAM_CODEC.decode(bb); } } \ No newline at end of file diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileGestureImpl.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileGestureImpl.java similarity index 83% rename from v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileGestureImpl.java rename to v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileGestureImpl.java index b0006dd5fac101f0482f9666463bf7219d7bf30c..ff9cef58a9e73188f989b6b814ee7b367cc77035 100644 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileGestureImpl.java +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileGestureImpl.java @@ -1,29 +1,21 @@ -package io.lumine.cosmetics.nms.v1_19_R3.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R3.cosmetic; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.mojang.datafixers.util.Pair; import io.lumine.cosmetics.MCCosmeticsPlugin; -import io.lumine.cosmetics.api.cosmetics.manager.HideableCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; -import io.lumine.cosmetics.managers.gestures.Gesture; -import io.lumine.cosmetics.managers.gestures.GestureManager; -import io.lumine.cosmetics.managers.gestures.QuitMethod; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R3; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; -import io.lumine.cosmetics.players.Profile; -import io.netty.buffer.Unpooled; import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.game.*; -import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.animal.horse.Horse; import net.minecraft.world.item.ItemStack; -import org.bukkit.attribute.Attribute; -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R3.attribute.CraftAttributeMap; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R3.attribute.CraftAttribute; +import org.bukkit.craftbukkit.v1_21_R3.attribute.CraftAttributeMap; +import org.bukkit.craftbukkit.v1_21_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -42,19 +34,20 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R3 nmsHandler; + private final VolatileCodeEnabled_v1_21_R3 nmsHandler; private final Set<Player> activeProfile = Sets.newConcurrentHashSet(); private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); private Horse horse; - public VolatileGestureImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R3 nmsHandler) { + public VolatileGestureImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R3 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @Override public void apply(CosmeticProfile profile) { + /* if (profile == null) return; Player player = profile.getPlayer(); @@ -84,10 +77,13 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { } ClientboundSetEquipmentPacket equipmentPacket = new ClientboundSetEquipmentPacket(player.getEntityId(), empty); nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); + + */ } @Override public void unapply(CosmeticProfile profile) { + /* if (profile == null) return; Player player = profile.getPlayer(); @@ -112,25 +108,32 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { continue; hide.show(profile); } + + */ } private ClientboundSetPassengersPacket createPassengerPacket(int mount, int... driver) { + /* FriendlyByteBuf bb = new FriendlyByteBuf(Unpooled.buffer()); bb.writeVarInt(mount); bb.writeVarIntArray(driver); return new ClientboundSetPassengersPacket(bb); + + */ + return null; } private void getHorsed(Player player) { + /* final var nmsPlayer = ((CraftPlayer) player).getHandle(); if(horse == null) { horse = new Horse(EntityType.HORSE, ((CraftWorld) player.getWorld()).getHandle()); horse.setInvisible(true); horse.setHealth(0); - horse.getAttribute(CraftAttributeMap.toMinecraft(Attribute.GENERIC_MAX_HEALTH)).setBaseValue(0); + horse.getAttribute(CraftAttribute.bukkitToMinecraft(Attribute.MAX_HEALTH)).setBaseValue(0); } - horse.setPos(nmsPlayer.getX(), nmsPlayer.getY() - horse.getPassengersRidingOffset() - nmsPlayer.getMyRidingOffset(), nmsPlayer.getZ()); + horse.setPos(nmsPlayer.getX(), nmsPlayer.getY() - nmsPlayer.getMyRidingOffset(horse), nmsPlayer.getZ()); var mobPacket = new ClientboundAddEntityPacket(horse); var dataPacket = new ClientboundSetEntityDataPacket(horse.getId(), horse.getEntityData().getNonDefaultValues()); @@ -138,17 +141,20 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { var passengersPacket = createPassengerPacket(horse.getId(), nmsPlayer.getId()); nmsHandler.broadcast(player, mobPacket, dataPacket, attributesPacket, passengersPacket); + + */ } @Override public boolean read(Player sender, Object packet, boolean isCanceled) { + /* if(!plugin.getGestureManager().getTicking().containsKey(sender)) { return true; } if(packet instanceof ServerboundPlayerInputPacket inputPacket) { final var manager = (GestureManager) plugin.getGestureManager(); - if(inputPacket.isShiftKeyDown()) + if(inputPacket.input() == ServerboundPlayerInputPacket.) manager.quit(sender, QuitMethod.SNEAK); if(inputPacket.isJumping()) manager.quit(sender, QuitMethod.JUMP); @@ -159,11 +165,13 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { return false; } } + */ return true; } @Override public List<Object> write(Player receiver, Object packet) { + /* if(packet instanceof ClientboundSetEquipmentPacket equipmentPacket) { int id = equipmentPacket.getEntity(); final var spawnedPlayer = playerTracker.get(id); @@ -173,6 +181,7 @@ public class VolatileGestureImpl implements VolatileEquipmentHelper { if(profile != null) return List.of(new ClientboundSetEquipmentPacket(id, empty)); } + */ return null; } } diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileHatImpl.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileHatImpl.java similarity index 90% rename from v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileHatImpl.java rename to v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileHatImpl.java index ce5e16be76a220b9782fd4c5f0a99c4b37931683..0dac2e93b86bd6b9315941c546a6230f6cdadf40 100644 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileHatImpl.java +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileHatImpl.java @@ -1,6 +1,5 @@ -package io.lumine.cosmetics.nms.v1_19_R3.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R3.cosmetic; -import com.google.common.collect.Maps; import com.mojang.datafixers.util.Pair; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; @@ -8,22 +7,18 @@ import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.managers.hats.Hat; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R3; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; +import io.lumine.cosmetics.nms.v1_21_R3.NMSFields; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.logging.Log; -import io.lumine.utils.reflection.Reflector; -import io.netty.buffer.Unpooled; +import io.lumine.mythic.bukkit.utils.reflection.Reflector; import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; import net.minecraft.network.protocol.game.ServerboundAcceptTeleportationPacket; import net.minecraft.world.entity.EquipmentSlot; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_21_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R3.inventory.CraftItemStack; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; @@ -31,10 +26,10 @@ import java.util.List; public class VolatileHatImpl implements VolatileEquipmentHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R3 nmsHandler; + private final VolatileCodeEnabled_v1_21_R3 nmsHandler; //private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - public VolatileHatImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R3 nmsHandler) { + public VolatileHatImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R3 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @@ -158,7 +153,7 @@ public class VolatileHatImpl implements VolatileEquipmentHelper { nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); } - private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, "c"); + private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, NMSFields.EQUIPMENT_SLOTS); private void modifyPacket(Profile profile, ClientboundSetEquipmentPacket packet) { final var maybeEquipped = profile.getEquipped(Hat.class); @@ -192,7 +187,7 @@ public class VolatileHatImpl implements VolatileEquipmentHelper { newSlots.add(Pair.of(EquipmentSlot.HEAD, nmsItem)); } - refEq.set(packet, "c", newSlots); + refEq.set(packet, NMSFields.EQUIPMENT_SLOTS, newSlots); } } diff --git a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileOffhandImpl.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileOffhandImpl.java similarity index 87% rename from v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileOffhandImpl.java rename to v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileOffhandImpl.java index 8f96447db06e2c50a966f57c0a007523fdfbde2d..462aa18afbeac9214f58a827f2a3c495a539170f 100644 --- a/v1_19_R3/src/main/java/io/lumine/cosmetics/nms/v1_19_R3/cosmetic/VolatileOffhandImpl.java +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileOffhandImpl.java @@ -1,4 +1,4 @@ -package io.lumine.cosmetics.nms.v1_19_R3.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R3.cosmetic; import com.google.common.collect.Maps; import com.mojang.datafixers.util.Pair; @@ -7,20 +7,17 @@ import io.lumine.cosmetics.api.cosmetics.EquippedCosmetic; import io.lumine.cosmetics.api.cosmetics.ItemCosmetic; import io.lumine.cosmetics.api.players.CosmeticProfile; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; -import io.lumine.cosmetics.managers.hats.Hat; import io.lumine.cosmetics.managers.offhand.Offhand; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R3; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3; import io.lumine.cosmetics.nms.cosmetic.VolatileEquipmentHelper; +import io.lumine.cosmetics.nms.v1_21_R3.NMSFields; import io.lumine.cosmetics.players.Profile; -import io.lumine.utils.reflection.Reflector; -import io.netty.buffer.Unpooled; +import io.lumine.mythic.bukkit.utils.reflection.Reflector; import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; import net.minecraft.world.entity.EquipmentSlot; -import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_19_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_21_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R3.inventory.CraftItemStack; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -30,10 +27,10 @@ import java.util.Map; public class VolatileOffhandImpl implements VolatileEquipmentHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_19_R3 nmsHandler; + private final VolatileCodeEnabled_v1_21_R3 nmsHandler; private final Map<Integer, Player> playerTracker = Maps.newConcurrentMap(); - public VolatileOffhandImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_19_R3 nmsHandler) { + public VolatileOffhandImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R3 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @@ -134,10 +131,10 @@ public class VolatileOffhandImpl implements VolatileEquipmentHelper { nmsHandler.broadcastAroundAndSelf(player, equipmentPacket); } - private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, "c"); + private static Reflector<ClientboundSetEquipmentPacket> refEq = new Reflector(ClientboundSetEquipmentPacket.class, NMSFields.EQUIPMENT_SLOTS); private void modifyPacket(Profile profile, ClientboundSetEquipmentPacket packet) { - final var maybeEquipped = profile.getEquipped(Hat.class); + final var maybeEquipped = profile.getEquipped(Offhand.class); if(maybeEquipped.isEmpty()) { return; } @@ -157,7 +154,7 @@ public class VolatileOffhandImpl implements VolatileEquipmentHelper { for(var pair : slots) { final EquipmentSlot slot = pair.getFirst(); - if(slot == EquipmentSlot.HEAD) { + if(slot == EquipmentSlot.OFFHAND) { foundHead = true; newSlots.add(Pair.of(pair.getFirst(), nmsItem)); } else { @@ -165,9 +162,9 @@ public class VolatileOffhandImpl implements VolatileEquipmentHelper { } } if(!foundHead) { - newSlots.add(Pair.of(EquipmentSlot.HEAD, nmsItem)); + newSlots.add(Pair.of(EquipmentSlot.OFFHAND, nmsItem)); } - refEq.set(packet, "c", newSlots); + refEq.set(packet, NMSFields.EQUIPMENT_SLOTS, newSlots); } } diff --git a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileSprayImpl.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileSprayImpl.java similarity index 86% rename from v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileSprayImpl.java rename to v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileSprayImpl.java index 9dd9d68f4b2511ff0406215feb68bfd0de07df2e..b946a9d2ef382ab27cb19138c475558561e33f82 100644 --- a/v1_20_R1/src/main/java/io/lumine/cosmetics/nms/v1_20_R1/cosmetic/VolatileSprayImpl.java +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/cosmetic/VolatileSprayImpl.java @@ -1,8 +1,8 @@ -package io.lumine.cosmetics.nms.v1_20_R1.cosmetic; +package io.lumine.cosmetics.nms.v1_21_R3.cosmetic; import io.lumine.cosmetics.MCCosmeticsPlugin; import io.lumine.cosmetics.managers.sprays.Spray; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_20_R1; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3; import io.lumine.cosmetics.nms.cosmetic.VolatileSprayHelper; import lombok.Getter; import net.minecraft.core.BlockPos; @@ -11,21 +11,22 @@ import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket; import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; import net.minecraft.world.entity.decoration.ItemFrame; +import net.minecraft.world.level.saveddata.maps.MapId; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.BlockFace; -import org.bukkit.craftbukkit.v1_20_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R3.inventory.CraftItemStack; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.MapMeta; public class VolatileSprayImpl implements VolatileSprayHelper { @Getter private final MCCosmeticsPlugin plugin; - private final VolatileCodeEnabled_v1_20_R1 nmsHandler; + private final VolatileCodeEnabled_v1_21_R3 nmsHandler; - public VolatileSprayImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_20_R1 nmsHandler) { + public VolatileSprayImpl(MCCosmeticsPlugin plugin, VolatileCodeEnabled_v1_21_R3 nmsHandler) { this.plugin = plugin; this.nmsHandler = nmsHandler; } @@ -60,7 +61,7 @@ public class VolatileSprayImpl implements VolatileSprayHelper { frame.setInvisible(true); frame.setRotation(rotation); - var packetAdd = new ClientboundAddEntityPacket(frame, dir); + var packetAdd = new ClientboundAddEntityPacket(frame, dir, pos); var packetData = new ClientboundSetEntityDataPacket(frame.getId(), frame.getEntityData().getNonDefaultValues()); var packetMap = constructMapPacket(image.getMapNumber(), image.getPixels()); @@ -78,7 +79,7 @@ public class VolatileSprayImpl implements VolatileSprayHelper { private ClientboundMapItemDataPacket constructMapPacket(int id, byte[] pixels) { var mapData = constructMapData(startX, startY, mapWidth, mapHeight, pixels); - var packet = new ClientboundMapItemDataPacket(id, mapScale, mapLocked, null, mapData); + var packet = new ClientboundMapItemDataPacket(new MapId(id), mapScale, mapLocked, null, mapData); return packet; } diff --git a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/network/VolatileChannelHandler.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/network/VolatileChannelHandler.java similarity index 87% rename from v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/network/VolatileChannelHandler.java rename to v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/network/VolatileChannelHandler.java index 017ae708279545c0ff73e661ede9817f16e6fda6..88f0b6e935b468792829f9c337b49911ed93185b 100644 --- a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/network/VolatileChannelHandler.java +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/network/VolatileChannelHandler.java @@ -1,6 +1,6 @@ -package io.lumine.cosmetics.nms.v1_19_R2.network; +package io.lumine.cosmetics.nms.v1_21_R3.network; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R2; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; @@ -12,10 +12,10 @@ import java.util.List; public class VolatileChannelHandler extends ChannelDuplexHandler { - private final VolatileCodeEnabled_v1_19_R2 nmsHandler; + private final VolatileCodeEnabled_v1_21_R3 nmsHandler; @Getter private final Player player; - public VolatileChannelHandler(Player player, VolatileCodeEnabled_v1_19_R2 nmsHandler) { + public VolatileChannelHandler(Player player, VolatileCodeEnabled_v1_21_R3 nmsHandler) { this.player = player; this.nmsHandler = nmsHandler; } diff --git a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/wardrobe/MannequinEntity.java b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/wardrobe/MannequinEntity.java similarity index 56% rename from v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/wardrobe/MannequinEntity.java rename to v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/wardrobe/MannequinEntity.java index 5064d53f997cfcf5f346bdf98886a70d7f86b471..1407bad3fd199637dac52b7a87cb96f05afe4174 100644 --- a/v1_19_R2/src/main/java/io/lumine/cosmetics/nms/v1_19_R2/wardrobe/MannequinEntity.java +++ b/v1_21_R3/src/main/java/io/lumine/cosmetics/nms/v1_21_R3/wardrobe/MannequinEntity.java @@ -1,12 +1,20 @@ -package io.lumine.cosmetics.nms.v1_19_R2.wardrobe; +package io.lumine.cosmetics.nms.v1_21_R3.wardrobe; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; +import io.lumine.mythic.bukkit.MythicBukkit; +import io.netty.buffer.Unpooled; +import net.minecraft.core.RegistryAccess; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.protocol.game.*; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.GameType; +import net.minecraft.world.phys.Vec3; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_19_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_21_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_21_R3.entity.CraftPlayer; import org.bukkit.entity.Player; import com.google.common.collect.Lists; @@ -17,70 +25,62 @@ import com.mojang.datafixers.util.Pair; import io.lumine.cosmetics.api.cosmetics.Cosmetic; import io.lumine.cosmetics.api.players.wardrobe.Mannequin; import io.lumine.cosmetics.api.players.wardrobe.WardrobeTracker; -import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_19_R2; -import io.netty.buffer.Unpooled; +import io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_21_R3; import lombok.Getter; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.game.ClientboundAddPlayerPacket; -import net.minecraft.network.protocol.game.ClientboundAnimatePacket; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EquipmentSlot; public class MannequinEntity implements Mannequin { - private final VolatileCodeEnabled_v1_19_R2 handler; + private final VolatileCodeEnabled_v1_21_R3 handler; @Getter private final WardrobeTracker tracker; @Getter private final UUID uniqueId; @Getter private final Player player; @Getter private final Location location; @Getter private float rotation; - @Getter private ServerPlayer fakePlayer; + @Getter private int fakePlayerId; private Map<Class<? extends Cosmetic>,Integer> extraEntities = Maps.newConcurrentMap(); - public MannequinEntity(WardrobeTracker tracker, VolatileCodeEnabled_v1_19_R2 handler, Player player, Location location) { + public MannequinEntity(WardrobeTracker tracker, VolatileCodeEnabled_v1_21_R3 handler, Player player, Location location) { this.tracker = tracker; this.handler = handler; this.player = player; this.location = location; + this.fakePlayerId = MythicBukkit.inst().getVolatileCodeHandler().getEntityHandler().getNextEntityId(); this.uniqueId = UUID.randomUUID(); - + var serverPlayer = ((CraftPlayer) player).getHandle(); var level = ((CraftWorld) location.getWorld()).getHandle(); this.rotation = serverPlayer.getYRot() + 180; - - if(rotation > 180) { + + if(rotation > 180) { rotation = rotation - 360; } - + var gameProfile = serverPlayer.getGameProfile(); - + gameProfile = new GameProfile(uniqueId, "Wardrobe"); gameProfile.getProperties().putAll(serverPlayer.getGameProfile().getProperties()); - - this.fakePlayer = new ServerPlayer(level.getServer(), level, gameProfile); - - var spawn = new FriendlyByteBuf(Unpooled.buffer()); - - spawn.writeVarInt(fakePlayer.getId()); - spawn.writeUUID(fakePlayer.getUUID()); - spawn.writeDouble(location.getX()); - spawn.writeDouble(location.getY()); - spawn.writeDouble(location.getZ()); - spawn.writeByte((byte)(int)(serverPlayer.getYRot() * 256.0F / 360.0F)); - spawn.writeByte((byte)(int)(serverPlayer.getXRot() * 256.0F / 360.0F)); - - var packetPlayerInfo = new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, fakePlayer); - var packetAddPlayer = new ClientboundAddPlayerPacket(spawn); - - var equipmentPacket = new ClientboundSetEquipmentPacket(fakePlayer.getId(), + + final var buf = new RegistryFriendlyByteBuf(Unpooled.buffer(), RegistryAccess.EMPTY); + + final EnumSet<ClientboundPlayerInfoUpdatePacket.Action> actionSet = EnumSet.of(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER); + buf.writeEnumSet(actionSet, ClientboundPlayerInfoUpdatePacket.Action.class); + + var fakePlayerEntry = List.of(new ClientboundPlayerInfoUpdatePacket.Entry(uniqueId, gameProfile, false, 0, GameType.CREATIVE, null, true, 0, null)); + buf.writeCollection(fakePlayerEntry, (var0x, var1) -> { + var0x.writeUUID(var1.profileId()); + + GameProfile var2 = (GameProfile) Objects.requireNonNull(var1.profile()); + var0x.writeUtf(var2.getName(), 16); + ByteBufCodecs.GAME_PROFILE_PROPERTIES.encode(var0x, var2.getProperties()); + }); + + var packetPlayerInfo = ClientboundPlayerInfoUpdatePacket.STREAM_CODEC.decode(buf); + + var packetAddPlayer = new ClientboundAddEntityPacket(fakePlayerId, uniqueId, location.getX(), location.getY(), location.getZ(), serverPlayer.getXRot(), serverPlayer.getYRot(), EntityType.PLAYER, 0, Vec3.ZERO, serverPlayer.getYHeadRot()); + var equipmentPacket = new ClientboundSetEquipmentPacket(fakePlayerId, List.of(Pair.of(EquipmentSlot.HEAD, serverPlayer.getItemBySlot(EquipmentSlot.HEAD)), Pair.of(EquipmentSlot.CHEST, serverPlayer.getItemBySlot(EquipmentSlot.CHEST)), Pair.of(EquipmentSlot.LEGS, serverPlayer.getItemBySlot(EquipmentSlot.LEGS)), @@ -89,20 +89,27 @@ public class MannequinEntity implements Mannequin { Pair.of(EquipmentSlot.OFFHAND, serverPlayer.getItemBySlot(EquipmentSlot.OFFHAND)))); var head = (byte)(int)(rotation * 256.0F / 360.0F); - var rotatePacket = new ClientboundRotateHeadPacket(fakePlayer, head); - - var swingPacket = new ClientboundAnimatePacket(fakePlayer, 0); - + + var rotateByteBuf = new FriendlyByteBuf(Unpooled.buffer()); + rotateByteBuf.writeVarInt(fakePlayerId); + rotateByteBuf.writeByte(head); + var rotatePacket = ClientboundRotateHeadPacket.STREAM_CODEC.decode(rotateByteBuf); + + var animateByteBuf = new FriendlyByteBuf(Unpooled.buffer()); + animateByteBuf.writeVarInt(fakePlayerId); + animateByteBuf.writeByte(ClientboundAnimatePacket.SWING_MAIN_HAND); + var swingPacket = ClientboundAnimatePacket.STREAM_CODEC.decode(animateByteBuf); + handler.broadcast(player, packetPlayerInfo, packetAddPlayer, equipmentPacket, rotatePacket, swingPacket); - + for(var eq : handler.getPlugin().getProfiles().getProfile(player).getEquipped().values()) { eq.getCosmetic().getManager().equipMannequin(this, eq); } } public void despawn() { - var packetPlayerInfo = new ClientboundPlayerInfoRemovePacket(Lists.newArrayList(fakePlayer.getUUID())); - var packetRemovePlayer = new ClientboundRemoveEntitiesPacket(fakePlayer.getId()); + var packetPlayerInfo = new ClientboundPlayerInfoRemovePacket(Lists.newArrayList(uniqueId)); + var packetRemovePlayer = new ClientboundRemoveEntitiesPacket(fakePlayerId); handler.broadcast(player, packetPlayerInfo, packetRemovePlayer); @@ -126,7 +133,7 @@ public class MannequinEntity implements Mannequin { } public int getEntityId() { - return fakePlayer.getId(); + return fakePlayerId; } }