diff --git a/build.gradle b/build.gradle index 4218823..777d63d 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.1.2' +version = '2.2.0' repositories { mavenCentral() @@ -61,7 +61,6 @@ dependencies { compileOnly 'com.github.angeschossen:LandsAPI:6.5.1' compileOnly 'com.github.TechFortress:GriefPrevention:16.18' compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT' - compileOnly 'com.comphenix.protocol:ProtocolLib:4.8.0' compileOnly 'me.clip:placeholderapi:2.11.2' compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.7' compileOnly 'com.github.LoneDev6:api-itemsadder:3.2.3-r8' @@ -71,7 +70,7 @@ dependencies { compileOnly 'com.github.Zrips:Jobs:4.17.2' compileOnly fileTree(dir:'libs',includes:['*.jar']) implementation('net.kyori:adventure-api:4.12.0') - implementation('net.kyori:adventure-platform-bukkit:4.1.2') + implementation('net.kyori:adventure-platform-bukkit:4.2.0') implementation('net.kyori:adventure-text-minimessage:4.12.0') implementation("de.tr7zw:item-nbt-api:2.11.1") implementation("org.bstats:bstats-bukkit:3.0.0") diff --git a/src/main/java/net/momirealms/customcrops/CustomCrops.java b/src/main/java/net/momirealms/customcrops/CustomCrops.java index bf86cd0..74da901 100644 --- a/src/main/java/net/momirealms/customcrops/CustomCrops.java +++ b/src/main/java/net/momirealms/customcrops/CustomCrops.java @@ -19,6 +19,8 @@ package net.momirealms.customcrops; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; +import de.tr7zw.changeme.nbtapi.utils.MinecraftVersion; +import de.tr7zw.changeme.nbtapi.utils.VersionChecker; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.momirealms.customcrops.commands.PluginCommand; import net.momirealms.customcrops.config.ConfigUtil; @@ -31,6 +33,7 @@ import net.momirealms.customcrops.utils.AdventureUtil; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; +import org.kingdoms.main.ConfigManager; import java.util.Objects; @@ -38,6 +41,7 @@ public final class CustomCrops extends JavaPlugin { public static BukkitAudiences adventure; public static CustomCrops plugin; + public static String version; public static ProtocolManager protocolManager; private PlaceholderManager placeholderManager; @@ -78,8 +82,15 @@ public final class CustomCrops extends JavaPlugin { adventure = BukkitAudiences.create(plugin); protocolManager = ProtocolLibrary.getProtocolManager(); + version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; AdventureUtil.consoleMessage("[CustomCrops] Running on " + Bukkit.getVersion()); + MinecraftVersion.disableBStats(); + MinecraftVersion.disablePackageWarning(); + MinecraftVersion.disableUpdateCheck(); + MinecraftVersion.getVersion(); + VersionChecker.hideOk = true; + if (Bukkit.getPluginManager().getPlugin("ItemsAdder") != null) { MainConfig.customPlugin = "itemsadder"; AdventureUtil.consoleMessage("[CustomCrops] Custom Item Plugin Platform: <#BA55D3>ItemsAdder"); @@ -107,7 +118,10 @@ public final class CustomCrops extends JavaPlugin { } AdventureUtil.consoleMessage("[CustomCrops] Plugin Enabled!"); - new Metrics(this, 16593); + + if (MainConfig.metrics) { + new Metrics(this, 16593); + } } @Override diff --git a/src/main/java/net/momirealms/customcrops/config/MainConfig.java b/src/main/java/net/momirealms/customcrops/config/MainConfig.java index c12c22c..3a8f134 100644 --- a/src/main/java/net/momirealms/customcrops/config/MainConfig.java +++ b/src/main/java/net/momirealms/customcrops/config/MainConfig.java @@ -126,12 +126,14 @@ public class MainConfig { public static int saveInterval; public static boolean dryMakesCropDead; public static double dryDeadChance; + public static boolean metrics; public static void load() { ConfigUtil.update("config.yml"); YamlConfiguration config = ConfigUtil.getConfig("config.yml"); lang = config.getString("lang","english"); + metrics = config.getBoolean("metrics", true); whiteOrBlack = config.getString("worlds.mode","whitelist").equals("whitelist"); worldNameList = config.getStringList("worlds.list"); diff --git a/src/main/java/net/momirealms/customcrops/managers/timer/CrowTask.java b/src/main/java/net/momirealms/customcrops/managers/timer/CrowTask.java index 03ddf3b..2d01686 100644 --- a/src/main/java/net/momirealms/customcrops/managers/timer/CrowTask.java +++ b/src/main/java/net/momirealms/customcrops/managers/timer/CrowTask.java @@ -50,53 +50,28 @@ public class CrowTask extends BukkitRunnable { Location relative = crop.clone().subtract(from); this.vectorDown = new Vector(relative.getX() / 100, -0.1, relative.getZ() / 100); this.vectorUp = new Vector(relative.getX() / 100, 0.1, relative.getZ() / 100); - try { - CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getSpawnPacket(entityID, from)); - CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getMetaPacket(entityID)); - CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getEquipPacket(entityID, armorStandUtil.getCropManager().getCustomInterface().getItemStack(BasicItemConfig.crowFly))); - } - catch (InvocationTargetException ignore) { - } + CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getSpawnPacket(entityID, from)); + CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getMetaPacket(entityID)); + CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getEquipPacket(entityID, armorStandUtil.getCropManager().getCustomInterface().getItemStack(BasicItemConfig.crowFly))); } @Override public void run() { timer++; if (timer < 100) { - try { - CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getTeleportPacket(entityID, from.add(vectorDown), yaw)); - } - catch (InvocationTargetException e) { - //release - } + CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getTeleportPacket(entityID, from.add(vectorDown), yaw)); } else if (timer == 100){ - try { - CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getEquipPacket(entityID, armorStandUtil.getCropManager().getCustomInterface().getItemStack(BasicItemConfig.crowLand))); - } - catch (InvocationTargetException ignore) { - } + CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getEquipPacket(entityID, armorStandUtil.getCropManager().getCustomInterface().getItemStack(BasicItemConfig.crowLand))); } else if (timer == 150) { - try { - CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getEquipPacket(entityID, armorStandUtil.getCropManager().getCustomInterface().getItemStack(BasicItemConfig.crowFly))); - } - catch (InvocationTargetException ignore) { - } + CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getEquipPacket(entityID, armorStandUtil.getCropManager().getCustomInterface().getItemStack(BasicItemConfig.crowFly))); } else if (timer > 150) { - try { - CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getTeleportPacket(entityID, from.add(vectorUp), yaw)); - } - catch (InvocationTargetException ignore) { - } + CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getTeleportPacket(entityID, from.add(vectorUp), yaw)); } if (timer > 300) { - try { - CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getDestroyPacket(entityID)); - } - catch (InvocationTargetException ignore) { - } + CustomCrops.protocolManager.sendServerPacket(player, armorStandUtil.getDestroyPacket(entityID)); cancel(); } } diff --git a/src/main/java/net/momirealms/customcrops/utils/ArmorStandUtil.java b/src/main/java/net/momirealms/customcrops/utils/ArmorStandUtil.java index dc4d017..138bdeb 100644 --- a/src/main/java/net/momirealms/customcrops/utils/ArmorStandUtil.java +++ b/src/main/java/net/momirealms/customcrops/utils/ArmorStandUtil.java @@ -21,7 +21,9 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.Pair; +import com.comphenix.protocol.wrappers.WrappedDataValue; import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.google.common.collect.Lists; import net.momirealms.customcrops.CustomCrops; import net.momirealms.customcrops.config.BasicItemConfig; import net.momirealms.customcrops.config.MainConfig; @@ -33,10 +35,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.UUID; +import java.util.*; public class ArmorStandUtil { @@ -52,20 +51,12 @@ public class ArmorStandUtil { public void playWaterAnimation(Player player, Location location) { int id = new Random().nextInt(1000000000); - try { - CustomCrops.protocolManager.sendServerPacket(player, getSpawnPacket(id, location)); - CustomCrops.protocolManager.sendServerPacket(player, getMetaPacket(id)); - CustomCrops.protocolManager.sendServerPacket(player, getEquipPacket(id, cropManager.getCustomInterface().getItemStack(BasicItemConfig.waterEffect))); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomCrops.protocolManager.sendServerPacket(player, getSpawnPacket(id, location)); + CustomCrops.protocolManager.sendServerPacket(player, getMetaPacket(id)); + CustomCrops.protocolManager.sendServerPacket(player, getEquipPacket(id, cropManager.getCustomInterface().getItemStack(BasicItemConfig.waterEffect))); Bukkit.getScheduler().runTaskLaterAsynchronously(CustomCrops.plugin, () -> { - try { - CustomCrops.protocolManager.sendServerPacket(player, getDestroyPacket(id)); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } + CustomCrops.protocolManager.sendServerPacket(player, getDestroyPacket(id)); }, MainConfig.timeToWork/2); } @@ -99,7 +90,17 @@ public class ArmorStandUtil { public PacketContainer getMetaPacket(int id) { PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA); metaPacket.getIntegers().write(0, id); - metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher().getWatchableObjects()); + if (CustomCrops.version.equals("v1_19_R2")) { + WrappedDataWatcher wrappedDataWatcher = createDataWatcher(); + List wrappedDataValueList = Lists.newArrayList(); + wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> { + final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject(); + wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue())); + }); + metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList); + } else { + metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher().getWatchableObjects()); + } return metaPacket; } diff --git a/src/main/java/net/momirealms/customcrops/utils/HologramUtil.java b/src/main/java/net/momirealms/customcrops/utils/HologramUtil.java index b5ab5e8..63544a5 100644 --- a/src/main/java/net/momirealms/customcrops/utils/HologramUtil.java +++ b/src/main/java/net/momirealms/customcrops/utils/HologramUtil.java @@ -20,7 +20,9 @@ package net.momirealms.customcrops.utils; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.comphenix.protocol.wrappers.WrappedDataValue; import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.google.common.collect.Lists; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; @@ -65,7 +67,18 @@ public class HologramUtil { wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(0, serializer2), mask1); wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(15, serializer2), mask2); metaPacket.getModifier().write(0,id); - metaPacket.getWatchableCollectionModifier().write(0, wrappedDataWatcher.getWatchableObjects()); + + if (CustomCrops.version.equals("v1_19_R2")) { + List wrappedDataValueList = Lists.newArrayList(); + wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> { + final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject(); + wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue())); + }); + metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList); + } else { + metaPacket.getWatchableCollectionModifier().write(0, wrappedDataWatcher.getWatchableObjects()); + } + try { CustomCrops.protocolManager.sendServerPacket(player, spawnPacket); CustomCrops.protocolManager.sendServerPacket(player, metaPacket); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 8a6a0ea..14bc0c7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,7 +1,7 @@ # Don't change # 请不要修改 -config-version: '19' - +config-version: '20' +metrics: true # lang: english / spanish / chinese lang: english @@ -142,7 +142,7 @@ mechanics: world: world auto-season-change: - # If enabled, setseason command would only work for only one day + # If enabled, season would be automatically calculated according to game time when reloading # 自动切换季节,如果启用则setseason指令仅对当天有效 enable: true # duration of each season