Skip to content

Instantly share code, notes, and snippets.

@qruz-hq
Last active July 3, 2016 15:11
Show Gist options
  • Save qruz-hq/8fd8f9d65058ad300075940c43a70b21 to your computer and use it in GitHub Desktop.
Save qruz-hq/8fd8f9d65058ad300075940c43a70b21 to your computer and use it in GitHub Desktop.
Completly freeze players
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