fix: npc not spawning on mojang downtime

This commit is contained in:
Simon Giesel 2020-05-06 09:08:40 +02:00
parent 780e7dc597
commit 91ba9794ac
4 changed files with 12 additions and 16 deletions

View file

@ -10,6 +10,7 @@
"cliffbreak",
"mkdir",
"teamcolors",
"testremove",
"unban",
"varo"
],

View file

@ -83,12 +83,7 @@ public class VaroCommand implements CommandExecutor {
sender.sendMessage(MessageUtils.getRichTextComponent("§5" + "Team 10", ""));
} else if (args.length == 1 && args[0].equals("test")) {
if (sender instanceof Player) {
try {
plugin.npcManager.createClone((Player) sender, false);
} catch (IOException e) {
sender.sendMessage(
"§c§lFehler:§r§c beim Verbinden mit der Mojang-API ist ein Fehler aufgetreten. Eventuell sind die Mojang Server down.");
}
} else {
sender.sendMessage("§c§lFehler:§r§c Dieses Kommando kann nur durch einen Spieler ausgeführt werden.");
}
@ -103,7 +98,7 @@ public class VaroCommand implements CommandExecutor {
sender.sendMessage("§a/varo start: §rStarte das Varo Projekt!");
sender.sendMessage("§a/varo unban [Spieler]: §rSpieler wieder auf den Server lassen");
sender.sendMessage("§a/varo teamcolors: §rZeige verfügbare Team-Farben an");
sender.sendMessage("§a/varo test: §rSpawne einen Klon");
sender.sendMessage("§a/varo test: §rErstelle einen Klon");
sender.sendMessage("§a/varo testremove: §rLösche den Klon");
sender.sendMessage("\n§6==========================================");
}

View file

@ -27,11 +27,7 @@ public class PlayerJoinQuitListener implements Listener {
@EventHandler()
public void onPlayerQuit(final PlayerQuitEvent e) {
e.setQuitMessage(null);
try {
plugin.npcManager.createClone(e.getPlayer(), true);
} catch (IOException ex) {
ex.printStackTrace();
}
Bukkit.broadcast(
MessageUtils.getRichTextComponent(e.getPlayer().getName(), "§f hat den Server verlassen.", true));
}

View file

@ -13,6 +13,7 @@ import org.bukkit.craftbukkit.v1_15_R1.CraftServer;
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import org.json.simple.JSONArray;
@ -57,7 +58,7 @@ public class NPCManager {
this.afkTeam.setColor(ChatColor.GRAY);
}
public void createClone(final Player player, final boolean shouldHaveAFKPrefix) throws IOException {
public void createClone(final Player player, final boolean shouldHaveAFKPrefix) {
final Location location = player.getLocation();
final MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
final WorldServer nmsWorld = ((CraftWorld) player.getWorld()).getHandle();
@ -72,7 +73,6 @@ public class NPCManager {
properties.get("signature").toString()));
} catch (IOException | ParseException e) {
plugin.getLogger().info(e.getMessage());
throw new IOException();
}
final EntityPlayer npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile,
new PlayerInteractManager(nmsWorld));
@ -87,7 +87,12 @@ public class NPCManager {
for (Player connectionPlayer : Bukkit.getOnlinePlayers()) {
final PlayerConnection connection = ((CraftPlayer) connectionPlayer).getHandle().playerConnection;
new BukkitRunnable() {
@Override
public void run() {
connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, npc));
}
}.runTaskLater(plugin, 20);
connection.sendPacket(new PacketPlayOutNamedEntitySpawn(npc));
connection.sendPacket(
new PacketPlayOutEntityHeadRotation(npc, (byte) ((location.getYaw() * 256.0F) / 360.0F)));
@ -123,7 +128,6 @@ public class NPCManager {
for (Player connectionPlayer : Bukkit.getOnlinePlayers()) {
final PlayerConnection connection = ((CraftPlayer) connectionPlayer).getHandle().playerConnection;
connection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, npc));
connection.sendPacket(new PacketPlayOutEntityDestroy(npc.getId()));
}
this.players.remove(npc);