From 915ea1a3708c5808e69d933bf0bc5ae7a444bf4d Mon Sep 17 00:00:00 2001 From: pintux98 Date: Thu, 30 May 2019 16:14:10 +0200 Subject: [PATCH] Fixed Trails and (Maybe) bungeecord --- MultiArena-TheBridge/config.yml | 2 +- .../src/cx/sfy/TheBridge/Main.java | 1 + .../TheBridge/listeners/PlayerListener.java | 61 +++++++++---------- .../src/cx/sfy/TheBridge/nms/GenericNMS.java | 2 +- .../cx/sfy/TheBridge/packets/Reflection.java | 39 ++++++------ 5 files changed, 48 insertions(+), 57 deletions(-) diff --git a/MultiArena-TheBridge/config.yml b/MultiArena-TheBridge/config.yml index 5ea14a0..8e57463 100644 --- a/MultiArena-TheBridge/config.yml +++ b/MultiArena-TheBridge/config.yml @@ -110,7 +110,7 @@ items: &7to lobby. archievements: enabled: false - material: NOTEBLOCK + material: ARROW data: 0 amount: 1 slot: 7 diff --git a/MultiArena-TheBridge/src/cx/sfy/TheBridge/Main.java b/MultiArena-TheBridge/src/cx/sfy/TheBridge/Main.java index 61412e4..b226020 100644 --- a/MultiArena-TheBridge/src/cx/sfy/TheBridge/Main.java +++ b/MultiArena-TheBridge/src/cx/sfy/TheBridge/Main.java @@ -154,6 +154,7 @@ public class Main extends JavaPlugin { refl = new PacketMain(this); instance = this; stop = false; + getServer().getMessenger().registerOutgoingPluginChannel(Main.get(), "BungeeCord"); getConfig().options().copyDefaults(true); saveConfig(); File s = new File(getDataFolder() + "/cages"); diff --git a/MultiArena-TheBridge/src/cx/sfy/TheBridge/listeners/PlayerListener.java b/MultiArena-TheBridge/src/cx/sfy/TheBridge/listeners/PlayerListener.java index 97b5581..3efea4e 100644 --- a/MultiArena-TheBridge/src/cx/sfy/TheBridge/listeners/PlayerListener.java +++ b/MultiArena-TheBridge/src/cx/sfy/TheBridge/listeners/PlayerListener.java @@ -1,5 +1,7 @@ package cx.sfy.TheBridge.listeners; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -9,9 +11,9 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.World; import org.bukkit.block.Sign; import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; @@ -43,11 +45,8 @@ import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.bukkit.projectiles.ProjectileSource; import org.bukkit.scheduler.BukkitRunnable; - -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; +import org.bukkit.scheduler.BukkitTask; import cx.sfy.TheBridge.Main; import cx.sfy.TheBridge.cosmetics.Cage; @@ -75,35 +74,26 @@ public class PlayerListener implements Listener { this.plugin = plugin; } - public void runTask() { - Bukkit.getScheduler().runTaskTimer(this.plugin, () -> { - for (GameDuo gd : plugin.getGm().getGames()) { - for (Location loc : gd.getBuild()) { - World world = loc.getWorld(); - - if (world == null) { - continue; - } - - for (Projectile proj : world.getEntitiesByClass(Projectile.class)) { - ProjectileSource p = proj.getShooter(); - - if (!(p instanceof Player)) { - continue; - } + private BukkitTask task; - createTrail(proj.getLocation(), - plugin.getArm().getArrowByName(PlayerStat.getPlayerStat((Player) p).getArrow())); - } - } + public void runTask(Player p, Entity e) { + task = Bukkit.getServer().getScheduler().runTaskTimerAsynchronously(this.plugin, () -> { + Location loc = e.getLocation(); + if (e.isOnGround()) { + task.cancel(); } - }, 5, 5); + createTrail(loc, plugin.getArm().getArrowByName(PlayerStat.getPlayerStat(p).getArrow())); + }, 0, 1); } @EventHandler public void onShoot(ProjectileLaunchEvent e) { - if (e.getEntity() instanceof Arrow) { - runTask(); + if (e.getEntity().getShooter() instanceof Player) { + if (e.getEntity() instanceof Arrow) { + Player p = (Player) e.getEntity().getShooter(); + if (plugin.getGm().getGameByPlayer(p) != null || plugin.getGm().getGameFourByPlayer(p) != null) + runTask(p, e.getEntity()); + } } } @@ -424,13 +414,18 @@ public class PlayerListener implements Listener { plugin.getConfig().getString("items.lobby.nameItem").replaceAll("&", "§"), plugin.getConfig().getString("items.lobby.loreItem").replaceAll("&", "§")); if (item.equals(random)) { - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("Connect"); - out.writeUTF(plugin.getConfig().getString("items.lobby.server")); + String broadcastMessage = "Yolo"; + ByteArrayOutputStream bo = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(bo); + byte[] data = broadcastMessage.getBytes(); try { - p.sendPluginMessage(Main.get(), "BungeeCord", out.toByteArray()); + out.writeUTF("Forward"); + out.writeUTF(plugin.getConfig().getString("items.lobby.server")); + out.writeShort(data.length); + out.write(data); + p.sendPluginMessage(Main.get(), "BungeeCord", bo.toByteArray()); } catch (Exception ex) { - e.setCancelled(true); + ex.printStackTrace(); plugin.getServer().getConsoleSender() .sendMessage(ChatColor.RED + "Server " + ChatColor.YELLOW + plugin.getConfig().getString("items.lobby.server") + ChatColor.RED diff --git a/MultiArena-TheBridge/src/cx/sfy/TheBridge/nms/GenericNMS.java b/MultiArena-TheBridge/src/cx/sfy/TheBridge/nms/GenericNMS.java index 4278255..8b4c3d3 100644 --- a/MultiArena-TheBridge/src/cx/sfy/TheBridge/nms/GenericNMS.java +++ b/MultiArena-TheBridge/src/cx/sfy/TheBridge/nms/GenericNMS.java @@ -104,7 +104,7 @@ public class GenericNMS implements NMS { @Override public void sendParticle(Location loc, Arrow particle) { - Reflection.sendParticle(loc, particle.getTrail(), 50, 0.3); + Reflection.sendParticle(loc, particle.getTrail(), 50, 0.2); } } diff --git a/MultiArena-TheBridge/src/cx/sfy/TheBridge/packets/Reflection.java b/MultiArena-TheBridge/src/cx/sfy/TheBridge/packets/Reflection.java index db824c7..af4ccc7 100644 --- a/MultiArena-TheBridge/src/cx/sfy/TheBridge/packets/Reflection.java +++ b/MultiArena-TheBridge/src/cx/sfy/TheBridge/packets/Reflection.java @@ -22,7 +22,6 @@ import org.bukkit.plugin.SimplePluginManager; import org.bukkit.scoreboard.Scoreboard; import org.json.simple.JSONObject; -import cx.sfy.TheBridge.Main; import cx.sfy.TheBridge.utils.V1_8; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.ComponentBuilder; @@ -117,32 +116,28 @@ public class Reflection { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void sendParticle(Location loc, String particle, int radius, double offset) { int[] in = new int[1]; - + SplittableRandom sr = new SplittableRandom(); - + loc.add(sr.nextDouble(-offset, offset), sr.nextDouble(-offset, offset), sr.nextDouble(-offset, offset)); - + Collection ents = loc.getWorld().getNearbyEntities(loc, radius, radius, radius); - Bukkit.getScheduler().runTaskAsynchronously(Main.get(), () -> { - try { - Class enumParticles = Classes.EnumParticle.getType(); - Object packet = Classes.PacketPlayOutWorldParticles.getType() - .getConstructor( - new Class[] { enumParticles, boolean.class, float.class, float.class, float.class, - float.class, float.class, float.class, float.class, int.class, int[].class }) - .newInstance(Enum.valueOf(enumParticles, (particle != null ? particle.toUpperCase() : "FLAME")), - true, (float) loc.getX(), (float) loc.getY(), (float) loc.getZ(), 0F, 0F, 0F, 2F, 20, - in); - for (Entity p : ents) { - if (!(p instanceof Player)) { - continue; - } - sendPlayerPacket((Player) p, packet); + try { + Class enumParticles = Classes.EnumParticle.getType(); + Object packet = Classes.PacketPlayOutWorldParticles.getType() + .getConstructor(new Class[] { enumParticles, boolean.class, float.class, float.class, float.class, + float.class, float.class, float.class, float.class, int.class, int[].class }) + .newInstance(Enum.valueOf(enumParticles, (particle != null ? particle.toUpperCase() : "FLAME")), + true, (float) loc.getX(), (float) loc.getY(), (float) loc.getZ(), 0F, 0F, 0F, 1F, 15, in); + for (Entity p : ents) { + if (!(p instanceof Player)) { + continue; } - } catch (Exception e) { - e.printStackTrace(); + sendPlayerPacket((Player) p, packet); } - }); + } catch (Exception e) { + e.printStackTrace(); + } }