Skip to content

Commit

Permalink
Add respawn and vision player mecs (#144)
Browse files Browse the repository at this point in the history
  • Loading branch information
mergu authored and mcmonkey4eva committed Jul 8, 2018
1 parent c83f445 commit 6a241d8
Show file tree
Hide file tree
Showing 7 changed files with 192 additions and 0 deletions.
Expand Up @@ -5,6 +5,7 @@
import org.bukkit.Location;
import org.bukkit.block.banner.Pattern;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.EquipmentSlot;
Expand All @@ -18,6 +19,10 @@ public interface PacketHelper {

void setFieldOfView(Player player, float fov);

void respawn(Player player);

void setVision(Player player, EntityType entityType);

void showDemoScreen(Player player);

void showBlockAction(Player player, Location location, int action, int state);
Expand Down
29 changes: 29 additions & 0 deletions plugin/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java
Expand Up @@ -2201,6 +2201,35 @@ public void adjust(Mechanism mechanism) {

Element value = mechanism.getValue();

// <--[mechanism]
// @object dPlayer
// @name respawn
// @input None
// @description
// Forces the player to respawn if they are on the death screen.
// -->
if (mechanism.matches("respawn")) {
NMSHandler.getInstance().getPacketHelper().respawn(getPlayerEntity());
}

// <--[mechanism]
// @object dPlayer
// @name vision
// @input Element
// @description
// Changes the player's vision to the provided entity type. Valid types:
// ENDERMAN, CAVE_SPIDER, SPIDER, CREEPER
// Provide no value to reset the player's vision.
// -->
if (mechanism.matches("vision")) {
if (mechanism.hasValue() && mechanism.requireEnum(false, EntityType.values())) {
NMSHandler.getInstance().getPacketHelper().setVision(getPlayerEntity(), EntityType.valueOf(value.asString().toUpperCase()));
}
else {
NMSHandler.getInstance().getPacketHelper().forceSpectate(getPlayerEntity(), getPlayerEntity());
}
}

// <--[mechanism]
// @object dPlayer
// @name level
Expand Down
Expand Up @@ -11,10 +11,12 @@
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import net.minecraft.server.v1_10_R1.*;
import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.block.banner.Pattern;
import org.bukkit.craftbukkit.v1_10_R1.CraftEquipmentSlot;
import org.bukkit.craftbukkit.v1_10_R1.CraftServer;
import org.bukkit.craftbukkit.v1_10_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
Expand Down Expand Up @@ -46,6 +48,35 @@ public void setFieldOfView(Player player, float fov) {
sendPacket(player, packet);
}

@Override
public void respawn(Player player) {
((CraftPlayer) player).getHandle().playerConnection.a(new PacketPlayInClientCommand(PacketPlayInClientCommand.EnumClientCommand.PERFORM_RESPAWN));
}

@Override
public void setVision(Player player, EntityType entityType) {
final EntityLiving entity;
if (entityType == EntityType.CREEPER) {
entity = new EntityCreeper(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.SPIDER || entityType == EntityType.CAVE_SPIDER) {
entity = new EntitySpider(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.ENDERMAN) {
entity = new EntityEnderman(((CraftWorld) player.getWorld()).getHandle());
}
else {
return;
}

// Spectating an entity then immediately respawning the player prevents a client shader update,
// allowing the player to retain whatever vision the mob they spectated had.
sendPacket(player, new PacketPlayOutSpawnEntityLiving(entity));
sendPacket(player, new PacketPlayOutCamera(entity));
((CraftServer) Bukkit.getServer()).getHandle().moveToWorld(((CraftPlayer) player).getHandle(),
((CraftWorld) player.getWorld()).getHandle().dimension, true, player.getLocation(), false);
}

@Override
public void showDemoScreen(Player player) {
sendPacket(player, new PacketPlayOutGameStateChange(5, 0.0F));
Expand Down
Expand Up @@ -11,10 +11,12 @@
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import net.minecraft.server.v1_11_R1.*;
import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.block.banner.Pattern;
import org.bukkit.craftbukkit.v1_11_R1.CraftEquipmentSlot;
import org.bukkit.craftbukkit.v1_11_R1.CraftServer;
import org.bukkit.craftbukkit.v1_11_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
Expand Down Expand Up @@ -46,6 +48,35 @@ public void setFieldOfView(Player player, float fov) {
sendPacket(player, packet);
}

@Override
public void respawn(Player player) {
((CraftPlayer) player).getHandle().playerConnection.a(new PacketPlayInClientCommand(PacketPlayInClientCommand.EnumClientCommand.PERFORM_RESPAWN));
}

@Override
public void setVision(Player player, EntityType entityType) {
final EntityLiving entity;
if (entityType == EntityType.CREEPER) {
entity = new EntityCreeper(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.SPIDER || entityType == EntityType.CAVE_SPIDER) {
entity = new EntitySpider(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.ENDERMAN) {
entity = new EntityEnderman(((CraftWorld) player.getWorld()).getHandle());
}
else {
return;
}

// Spectating an entity then immediately respawning the player prevents a client shader update,
// allowing the player to retain whatever vision the mob they spectated had.
sendPacket(player, new PacketPlayOutSpawnEntityLiving(entity));
sendPacket(player, new PacketPlayOutCamera(entity));
((CraftServer) Bukkit.getServer()).getHandle().moveToWorld(((CraftPlayer) player).getHandle(),
((CraftWorld) player.getWorld()).getHandle().dimension, true, player.getLocation(), false);
}

@Override
public void showDemoScreen(Player player) {
sendPacket(player, new PacketPlayOutGameStateChange(5, 0.0F));
Expand Down
Expand Up @@ -11,10 +11,12 @@
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import net.minecraft.server.v1_12_R1.*;
import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.block.banner.Pattern;
import org.bukkit.craftbukkit.v1_12_R1.CraftEquipmentSlot;
import org.bukkit.craftbukkit.v1_12_R1.CraftServer;
import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
Expand Down Expand Up @@ -46,6 +48,36 @@ public void setFieldOfView(Player player, float fov) {
sendPacket(player, packet);
}

@Override
public void respawn(Player player) {
((CraftPlayer) player).getHandle().playerConnection.a(
new PacketPlayInClientCommand(PacketPlayInClientCommand.EnumClientCommand.PERFORM_RESPAWN));
}

@Override
public void setVision(Player player, EntityType entityType) {
final EntityLiving entity;
if (entityType == EntityType.CREEPER) {
entity = new EntityCreeper(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.SPIDER || entityType == EntityType.CAVE_SPIDER) {
entity = new EntitySpider(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.ENDERMAN) {
entity = new EntityEnderman(((CraftWorld) player.getWorld()).getHandle());
}
else {
return;
}

// Spectating an entity then immediately respawning the player prevents a client shader update,
// allowing the player to retain whatever vision the mob they spectated had.
sendPacket(player, new PacketPlayOutSpawnEntityLiving(entity));
sendPacket(player, new PacketPlayOutCamera(entity));
((CraftServer) Bukkit.getServer()).getHandle().moveToWorld(((CraftPlayer) player).getHandle(),
((CraftWorld) player.getWorld()).getHandle().dimension, true, player.getLocation(), false);
}

@Override
public void showDemoScreen(Player player) {
sendPacket(player, new PacketPlayOutGameStateChange(5, 0.0F));
Expand Down
Expand Up @@ -9,15 +9,18 @@
import net.aufdemrand.denizen.nms.util.jnbt.ListTag;
import net.aufdemrand.denizen.nms.util.jnbt.Tag;
import net.minecraft.server.v1_8_R3.*;
import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.block.banner.Pattern;
import org.bukkit.craftbukkit.v1_8_R3.CraftEquipmentSlot;
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.EntityEquipment;
Expand Down Expand Up @@ -45,6 +48,35 @@ public void setFieldOfView(Player player, float fov) {
sendPacket(player, packet);
}

@Override
public void respawn(Player player) {
((CraftPlayer) player).getHandle().playerConnection.a(new PacketPlayInClientCommand(PacketPlayInClientCommand.EnumClientCommand.PERFORM_RESPAWN));
}

@Override
public void setVision(Player player, EntityType entityType) {
final EntityLiving entity;
if (entityType == EntityType.CREEPER) {
entity = new EntityCreeper(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.SPIDER || entityType == EntityType.CAVE_SPIDER) {
entity = new EntitySpider(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.ENDERMAN) {
entity = new EntityEnderman(((CraftWorld) player.getWorld()).getHandle());
}
else {
return;
}

// Spectating an entity then immediately respawning the player prevents a client shader update,
// allowing the player to retain whatever vision the mob they spectated had.
sendPacket(player, new PacketPlayOutSpawnEntityLiving(entity));
sendPacket(player, new PacketPlayOutCamera(entity));
((CraftServer) Bukkit.getServer()).getHandle().moveToWorld(((CraftPlayer) player).getHandle(),
((CraftWorld) player.getWorld()).getHandle().dimension, true, player.getLocation(), false);
}

@Override
public void showDemoScreen(Player player) {
sendPacket(player, new PacketPlayOutGameStateChange(5, 0.0F));
Expand Down
Expand Up @@ -11,15 +11,18 @@
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import net.minecraft.server.v1_9_R2.*;
import org.bukkit.Bukkit;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.block.banner.Pattern;
import org.bukkit.craftbukkit.v1_9_R2.CraftEquipmentSlot;
import org.bukkit.craftbukkit.v1_9_R2.CraftServer;
import org.bukkit.craftbukkit.v1_9_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.EntityEquipment;
Expand Down Expand Up @@ -47,6 +50,35 @@ public void setFieldOfView(Player player, float fov) {
sendPacket(player, packet);
}

@Override
public void respawn(Player player) {
((CraftPlayer) player).getHandle().playerConnection.a(new PacketPlayInClientCommand(PacketPlayInClientCommand.EnumClientCommand.PERFORM_RESPAWN));
}

@Override
public void setVision(Player player, EntityType entityType) {
final EntityLiving entity;
if (entityType == EntityType.CREEPER) {
entity = new EntityCreeper(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.SPIDER || entityType == EntityType.CAVE_SPIDER) {
entity = new EntitySpider(((CraftWorld) player.getWorld()).getHandle());
}
else if (entityType == EntityType.ENDERMAN) {
entity = new EntityEnderman(((CraftWorld) player.getWorld()).getHandle());
}
else {
return;
}

// Spectating an entity then immediately respawning the player prevents a client shader update,
// allowing the player to retain whatever vision the mob they spectated had.
sendPacket(player, new PacketPlayOutSpawnEntityLiving(entity));
sendPacket(player, new PacketPlayOutCamera(entity));
((CraftServer) Bukkit.getServer()).getHandle().moveToWorld(((CraftPlayer) player).getHandle(),
((CraftWorld) player.getWorld()).getHandle().dimension, true, player.getLocation(), false);
}

@Override
public void showDemoScreen(Player player) {
sendPacket(player, new PacketPlayOutGameStateChange(5, 0.0F));
Expand Down

0 comments on commit 6a241d8

Please sign in to comment.