Skip to content

Instantly share code, notes, and snippets.

@NiclasOlofsson
Last active July 2, 2016 16:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NiclasOlofsson/5ac69d743c58b8910697732b322fc2e3 to your computer and use it in GitHub Desktop.
Save NiclasOlofsson/5ac69d743c58b8910697732b322fc2e3 to your computer and use it in GitHub Desktop.
Hologram class based on invisible players.
public class Hologram : Mob
{
public UUID Uuid { get; private set; }
public string Name { get; private set; }
public bool Silent { get; set; }
public bool HideNameTag { get; set; }
public bool NoAi { get; set; }
public Hologram(Level level) : base(63, level)
{
Uuid = new UUID(Guid.NewGuid().ToByteArray());
Width = 0.6;
Length = 0.6;
Height = 1.80;
IsSpawned = false;
IsInvisible = true;
HealthManager = new ActionHealthManager(this, (source) =>
{
});
}
[Wired]
public void SetNameTag(string nameTag)
{
NameTag = nameTag;
BroadcastSetEntityData();
}
public override MetadataDictionary GetMetadata()
{
MetadataDictionary metadata = base.GetMetadata();
metadata[0] = new MetadataByte(GetDataValue());
metadata[1] = new MetadataShort(HealthManager.Air);
metadata[2] = new MetadataString(NameTag ?? Name);
metadata[3] = new MetadataByte(!HideNameTag);
metadata[4] = new MetadataByte(Silent);
metadata[7] = new MetadataInt(0); // Potion Color
metadata[8] = new MetadataByte(0); // Potion Ambient
metadata[15] = new MetadataByte(NoAi);
metadata[16] = new MetadataByte(0); // Player flags
metadata[23] = new MetadataInt(-1); // Leads EID (target or holder?)
metadata[24] = new MetadataByte(0); // Leads on/off
return metadata;
}
public override void SpawnToPlayers(Player[] players)
{
{
McpeAddPlayer message = McpeAddPlayer.CreateObject();
message.uuid = Uuid;
message.username = NameTag ?? Name;
message.entityId = EntityId;
message.x = KnownPosition.X;
message.y = (float) (KnownPosition.Y - Height);
message.z = KnownPosition.Z;
message.yaw = KnownPosition.Yaw;
message.headYaw = KnownPosition.HeadYaw;
message.pitch = KnownPosition.Pitch;
message.metadata = GetMetadata();
Level.RelayBroadcast(players, message);
}
}
public override void DespawnFromPlayers(Player[] players)
{
McpeRemoveEntity mcpeRemovePlayer = McpeRemoveEntity.CreateObject();
mcpeRemovePlayer.entityId = EntityId;
Level.RelayBroadcast(players, mcpeRemovePlayer);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment