Last active
July 3, 2016 15:11
-
-
Save qruz-hq/8fd8f9d65058ad300075940c43a70b21 to your computer and use it in GitHub Desktop.
Completly freeze players
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package fr.finalsword.api.events.listeners; | |
import com.comphenix.protocol.PacketType; | |
import com.comphenix.protocol.ProtocolLibrary; | |
import com.comphenix.protocol.events.*; | |
import fr.finalsword.api.MYGAPI; | |
import fr.finalsword.api.events.listeners.freeze.FreezeState; | |
import net.minecraft.server.v1_8_R3.PacketPlayOutGameStateChange; | |
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; | |
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; | |
import org.bukkit.entity.ArmorStand; | |
import org.bukkit.entity.EntityType; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.EventHandler; | |
import org.bukkit.event.Listener; | |
import org.bukkit.event.player.PlayerMoveEvent; | |
import org.bukkit.event.player.PlayerToggleSneakEvent; | |
import org.bukkit.plugin.Plugin; | |
import org.bukkit.scheduler.BukkitRunnable; | |
import java.util.ArrayList; | |
import java.util.List; | |
/** | |
* @author Seveningful | |
*/ | |
public class FreezeEvents implements Listener { | |
private static List<FreezeState> freezedPlayers = new ArrayList<>(); | |
public static FreezeState getFreeze(Player p) | |
{ | |
if(isFreezed(p)) | |
return freezedPlayers.stream().filter(freezeState -> freezeState.getPlayer() == p).findFirst().get(); | |
return null; | |
} | |
public FreezeEvents() { | |
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(MYGAPI.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Client.USE_ENTITY){ | |
public void onPacketReceiving(PacketEvent e){ | |
if(e.getPacketType() == PacketType.Play.Client.USE_ENTITY) | |
{ | |
if(e.getPlayer().getEntityId() == e.getPacket().getIntegers().read(0) ) | |
e.setCancelled(true); | |
} | |
} | |
}); | |
} | |
public static void setFreezed(Player p, int seconds) | |
{ | |
ArmorStand armorStand = (ArmorStand) p.getWorld().spawnEntity(p.getLocation(), EntityType.ARMOR_STAND); | |
armorStand.setGravity(false); | |
armorStand.setCanPickupItems(false); | |
armorStand.setMarker(false); | |
armorStand.setVisible(false); | |
p.setSneaking(false); | |
FreezeState f = new FreezeState(p, armorStand, p.getGameMode()); | |
((CraftPlayer) p).getHandle().playerConnection.sendPacket(new PacketPlayOutGameStateChange(3, 3)); | |
((CraftPlayer) p).getHandle().setSpectatorTarget(((CraftEntity) armorStand).getHandle()); | |
freezedPlayers.add(f); | |
new BukkitRunnable(){ | |
@Override | |
public void run() { | |
freezedPlayers.remove(f); | |
armorStand.remove(); | |
((CraftPlayer)p).getHandle().playerConnection.sendPacket(new PacketPlayOutGameStateChange(3, f.getBaseGameMode().getValue())); | |
p.setFlying(false); | |
} | |
}.runTaskLater(MYGAPI.getInstance(), 20*seconds); | |
} | |
public static List<FreezeState> getFreezedPlayers() { | |
return freezedPlayers; | |
} | |
public static boolean isFreezed(Player p) | |
{ | |
return freezedPlayers.stream().filter(freezeState -> freezeState.getPlayer() == p).findFirst().isPresent(); | |
} | |
@EventHandler | |
public void onMove(PlayerMoveEvent e) | |
{ | |
if(isFreezed(e.getPlayer())) | |
{ | |
e.setCancelled(true); | |
((CraftPlayer)e.getPlayer()).getHandle().playerConnection.sendPacket(new PacketPlayOutGameStateChange(3, 3)); | |
((CraftPlayer) e.getPlayer()).getHandle().setSpectatorTarget(((CraftEntity) getFreeze(e.getPlayer()).getArmorStand()).getHandle()); | |
} | |
} | |
@EventHandler | |
public void onSneak(PlayerToggleSneakEvent e) | |
{ | |
if(isFreezed(e.getPlayer())) | |
{ | |
e.setCancelled(true); | |
((CraftPlayer)e.getPlayer()).getHandle().playerConnection.sendPacket(new PacketPlayOutGameStateChange(3, 3)); | |
((CraftPlayer) e.getPlayer()).getHandle().setSpectatorTarget(((CraftEntity) getFreeze(e.getPlayer()).getArmorStand()).getHandle()); | |
} | |
} | |
} | |
---------------------------------------------------------------- | |
package fr.finalsword.api.events.listeners.freeze; | |
import lombok.AllArgsConstructor; | |
import lombok.Getter; | |
import org.bukkit.GameMode; | |
import org.bukkit.entity.ArmorStand; | |
import org.bukkit.entity.Player; | |
/** | |
* @author Seveningful | |
*/ | |
@Getter | |
@AllArgsConstructor | |
public class FreezeState { | |
private Player player; | |
private ArmorStand armorStand; | |
private GameMode baseGameMode; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment