Work around "server-side-only blocking after respawn".

This commit is contained in:
asofold 2017-05-04 14:26:20 +02:00
parent 6584398d21
commit b62f310717
1 changed files with 29 additions and 0 deletions

View File

@ -25,6 +25,7 @@ import java.util.UUID;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -46,6 +47,8 @@ import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.event.player.PlayerToggleSprintEvent;
import org.bukkit.event.player.PlayerVelocityEvent;
import org.bukkit.event.world.WorldUnloadEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector;
@ -2087,6 +2090,32 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
data.resetSetBack(); // To force dataOnJoin to set it to loc.
// Handle respawn like join.
dataOnJoin(player, event.getRespawnLocation(), data, MovingConfig.getConfig(player), true);
// Patch up issues.
if (Bridge1_9.hasGetItemInOffHand() && player.isBlocking()) {
// Attempt to fix server-side-only blocking after respawn.
redoShield(player);
}
}
/**
* Attempt to fix server-side-only blocking after respawn.
* @param player
*/
private void redoShield(final Player player) {
// Does not work: DataManager.getPlayerData(player).requestUpdateInventory();
final PlayerInventory inv = player.getInventory();
ItemStack stack = inv.getItemInOffHand();
if (stack != null && stack.getType() == Material.SHIELD) {
// Shield in off-hand.
inv.setItemInOffHand(stack);
return;
}
stack = inv.getItemInMainHand();
if (stack != null && stack.getType() == Material.SHIELD) {
// Shield in off-hand.
inv.setItemInMainHand(stack);
return;
}
}
@Override