Delay post-death actions till the next tick to prevent 'Removing entity while ticking' errors and other anomalies involving arrows

This commit is contained in:
selfslaughter 2020-05-18 18:59:44 +10:00
parent 1d44c941a5
commit a5f899e376

View File

@ -91,19 +91,22 @@ public class OnEntityDamageByEntityEvent implements Listener {
player.setHealth(20); player.setHealth(20);
event.setCancelled(true); event.setCancelled(true);
// try moving everything to the next tick to prevent "Removing entity while ticking" errors
Player finalDamager = damager;
player.getServer().getScheduler().runTask(BlockHunt.plugin, () -> {
DisguiseAPI.undisguiseToAll(player); DisguiseAPI.undisguiseToAll(player);
MemoryStorage.pBlock.remove(player); MemoryStorage.pBlock.remove(player);
if (!arena.seekers.contains(player)) { if (!arena.seekers.contains(player)) {
if (MemoryStorage.shop.getFile().get(damager.getName() + ".tokens") == null) { if (MemoryStorage.shop.getFile().get(finalDamager.getName() + ".tokens") == null) {
MemoryStorage.shop.getFile().set(damager.getName() + ".tokens", 0); MemoryStorage.shop.getFile().set(finalDamager.getName() + ".tokens", 0);
MemoryStorage.shop.save(); MemoryStorage.shop.save();
} }
int damagerTokens = MemoryStorage.shop.getFile().getInt(damager.getName() + ".tokens"); int damagerTokens = MemoryStorage.shop.getFile().getInt(finalDamager.getName() + ".tokens");
MemoryStorage.shop.getFile().set(damager.getName() + ".tokens", damagerTokens + arena.killTokens); MemoryStorage.shop.getFile().set(finalDamager.getName() + ".tokens", damagerTokens + arena.killTokens);
MemoryStorage.shop.save(); MemoryStorage.shop.save();
MessageManager.sendFMessage(damager, ConfigC.normal_addedToken, "amount-" + arena.killTokens); MessageManager.sendFMessage(finalDamager, ConfigC.normal_addedToken, "amount-" + arena.killTokens);
if (MemoryStorage.shop.getFile().get(player.getName() + ".tokens") == null) { if (MemoryStorage.shop.getFile().get(player.getName() + ".tokens") == null) {
MemoryStorage.shop.getFile().set(player.getName() + ".tokens", 0); MemoryStorage.shop.getFile().set(player.getName() + ".tokens", 0);
@ -118,7 +121,7 @@ public class OnEntityDamageByEntityEvent implements Listener {
arena.seekers.add(player); arena.seekers.add(player);
player.setWalkSpeed(0.3F); player.setWalkSpeed(0.3F);
ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameHiderDied, "playername-" + player.getDisplayName(), "killer-" + damager.getDisplayName()); ArenaHandler.sendFMessage(arena, ConfigC.normal_ingameHiderDied, "playername-" + player.getDisplayName(), "killer-" + finalDamager.getDisplayName());
int hidercount = (arena.playersInArena.size() - arena.seekers.size()); int hidercount = (arena.playersInArena.size() - arena.seekers.size());
if ((hidercount <= 3) && (hidercount > 0)) { if ((hidercount <= 3) && (hidercount > 0)) {
@ -156,6 +159,7 @@ public class OnEntityDamageByEntityEvent implements Listener {
player.showPlayer(BlockHunt.plugin, otherplayer); // Make other players visible to new player player.showPlayer(BlockHunt.plugin, otherplayer); // Make other players visible to new player
} }
} }
});
} }
} }
} }