Skip to content

Commit

Permalink
Add dPlayer.spectate mech
Browse files Browse the repository at this point in the history
Yay forced cameras!
  • Loading branch information
Morphan1 committed Jan 4, 2015
1 parent c19c8ca commit d342ad3
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 4 deletions.
19 changes: 15 additions & 4 deletions src/main/java/net/aufdemrand/denizen/objects/dPlayer.java
Expand Up @@ -11,10 +11,7 @@
import net.aufdemrand.denizen.utilities.debugging.dB;
import net.aufdemrand.denizen.utilities.depends.Depends;
import net.aufdemrand.denizen.utilities.nbt.ImprovedOfflinePlayer;
import net.aufdemrand.denizen.utilities.packets.BossHealthBar;
import net.aufdemrand.denizen.utilities.packets.EntityEquipment;
import net.aufdemrand.denizen.utilities.packets.ItemChangeMessage;
import net.aufdemrand.denizen.utilities.packets.PlayerBars;
import net.aufdemrand.denizen.utilities.packets.*;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import net.minecraft.server.v1_8_R1.PacketPlayOutGameStateChange;
Expand Down Expand Up @@ -2197,6 +2194,20 @@ else if (split.length > 1) {
.sendPacket(new PacketPlayOutGameStateChange(4, 0.0F));
}

// <--[mechanism]
// @object dPlayer
// @name spectate
// @input dEntity
// @description
// Forces the player to spectate from the entity's point of view.
// Note: They cannot cancel the spectating without a re-log -- you
// must make them spectate themselves to cancel the effect.
// (i.e. - adjust <player> "spectate:<player>")
// -->
if (mechanism.matches("spectate") && mechanism.requireObject(dEntity.class)) {
PlayerSpectateEntity.setSpectating(getPlayerEntity(), value.asType(dEntity.class).getBukkitEntity());
}

// Iterate through this object's properties' mechanisms
for (Property property : PropertyParser.getProperties(this)) {
property.adjust(mechanism);
Expand Down
@@ -0,0 +1,34 @@
package net.aufdemrand.denizen.utilities.packets;

import net.aufdemrand.denizen.utilities.debugging.dB;
import net.minecraft.server.v1_8_R1.PacketPlayOutCamera;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

import java.lang.reflect.Field;
import java.util.Map;

public class PlayerSpectateEntity {

private static final Field entity_id;

static {
Map<String, Field> fields = PacketHelper.registerFields(PacketPlayOutCamera.class);
entity_id = fields.get("a");
}

public static PacketPlayOutCamera getCameraPacket(Entity entity) {
PacketPlayOutCamera cameraPacket = new PacketPlayOutCamera();
try {
entity_id.set(cameraPacket, entity.getEntityId());
} catch (Exception e) {
dB.echoError(e);
}
return cameraPacket;
}

public static void setSpectating(Player player, Entity entity) {
PacketPlayOutCamera cameraPacket = getCameraPacket(entity);
PacketHelper.sendPacket(player, cameraPacket);
}
}

0 comments on commit d342ad3

Please sign in to comment.