make glow work for all entities + better 1.8 support
This commit is contained in:
parent
ffc4bd9d8f
commit
c97f4a697e
9 changed files with 62 additions and 15 deletions
|
@ -141,10 +141,10 @@ public class ZNPCsPlus extends JavaPlugin {
|
|||
for (NPCType type : NPCType.values()) {
|
||||
NPC npc = new NPC(world, type, new PacketLocation(x * 3, 200, z * 3, 0, 0));
|
||||
if (type.getType() == EntityTypes.PLAYER) {
|
||||
npc.setProperty(NPCProperty.GLOW, NamedTextColor.RED);
|
||||
npc.setProperty(NPCProperty.FIRE, true);
|
||||
NPCSkin.forName("Notch", (skin, ex) -> npc.setProperty(NPCProperty.SKIN, skin));
|
||||
}
|
||||
npc.setProperty(NPCProperty.GLOW, NamedTextColor.RED);
|
||||
npc.setProperty(NPCProperty.FIRE, true);
|
||||
NPCRegistry.register("debug_npc" + (z * wrap + x), npc);
|
||||
if (x++ > wrap) {
|
||||
x = 0;
|
||||
|
|
|
@ -11,7 +11,7 @@ public class V1_8Factory implements MetadataFactory {
|
|||
|
||||
@Override
|
||||
public EntityData effects(boolean onFire, boolean glowing) {
|
||||
return new EntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (glowing ? 0x40 : 0)));
|
||||
return new EntityData(0, EntityDataTypes.BYTE, onFire ? 0x01 : 0);
|
||||
}
|
||||
|
||||
protected EntityData createSkinLayers(int index) {
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
package lol.pyr.znpcsplus.metadata;
|
||||
|
||||
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
|
||||
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
|
||||
|
||||
public class V1_9Factory extends V1_8Factory {
|
||||
@Override
|
||||
public EntityData skinLayers() {
|
||||
return createSkinLayers(13);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityData effects(boolean onFire, boolean glowing) {
|
||||
return new EntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (glowing ? 0x40 : 0)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ public class NPCProperty<T> {
|
|||
BY_NAME.put(this.name, this);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
public String name() {
|
||||
return name;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,10 +33,10 @@ public class NPCType {
|
|||
static {
|
||||
ImmutableList.Builder<NPCType> builder = new ImmutableList.Builder<>();
|
||||
|
||||
builder.add(new NPCType(EntityTypes.PLAYER, NPCProperty.SKIN));
|
||||
builder.add(new NPCType(EntityTypes.CREEPER));
|
||||
builder.add(new NPCType(EntityTypes.ZOMBIE));
|
||||
builder.add(new NPCType(EntityTypes.SKELETON));
|
||||
builder.add(new NPCType(EntityTypes.PLAYER, NPCProperty.GLOW, NPCProperty.FIRE, NPCProperty.SKIN, NPCProperty.SKIN_LAYERS));
|
||||
builder.add(new NPCType(EntityTypes.CREEPER, NPCProperty.GLOW, NPCProperty.FIRE));
|
||||
builder.add(new NPCType(EntityTypes.ZOMBIE, NPCProperty.GLOW, NPCProperty.FIRE));
|
||||
builder.add(new NPCType(EntityTypes.SKELETON, NPCProperty.GLOW, NPCProperty.FIRE));
|
||||
|
||||
npcTypes = builder.build();
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ public interface PacketFactory {
|
|||
void removeTabPlayer(Player player, PacketEntity entity);
|
||||
void createTeam(Player player, PacketEntity entity);
|
||||
void removeTeam(Player player, PacketEntity entity);
|
||||
void sendAllMetadata(Player player, PacketEntity entity);
|
||||
void sendMetadata(Player player, PacketEntity entity, EntityData... data);
|
||||
|
||||
PacketFactory factory = get();
|
||||
|
@ -39,6 +40,7 @@ public interface PacketFactory {
|
|||
private static Map<ServerVersion, LazyLoader<? extends PacketFactory>> buildFactoryMap() {
|
||||
HashMap<ServerVersion, LazyLoader<? extends PacketFactory>> map = new HashMap<>();
|
||||
map.put(ServerVersion.V_1_8, LazyLoader.of(V1_8Factory::new));
|
||||
map.put(ServerVersion.V_1_9, LazyLoader.of(V1_9Factory::new));
|
||||
map.put(ServerVersion.V_1_14, LazyLoader.of(V1_14Factory::new));
|
||||
map.put(ServerVersion.V_1_19, LazyLoader.of(V1_19Factory::new));
|
||||
return map;
|
||||
|
|
|
@ -3,15 +3,18 @@ package lol.pyr.znpcsplus.packets;
|
|||
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity;
|
||||
import lol.pyr.znpcsplus.entity.PacketEntity;
|
||||
import lol.pyr.znpcsplus.entity.PacketLocation;
|
||||
import lol.pyr.znpcsplus.npc.NPCProperty;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public class V1_14Factory extends V1_8Factory {
|
||||
public class V1_14Factory extends V1_9Factory {
|
||||
@Override
|
||||
public void spawnEntity(Player player, PacketEntity entity) {
|
||||
PacketLocation location = entity.getLocation();
|
||||
sendPacket(player, new WrapperPlayServerSpawnEntity(entity.getEntityId(), Optional.of(entity.getUuid()), entity.getType(),
|
||||
location.toVector3d(), location.getPitch(), location.getYaw(), location.getYaw(), 0, Optional.empty()));
|
||||
if (entity.getOwner().hasProperty(NPCProperty.GLOW)) createTeam(player, entity);
|
||||
sendAllMetadata(player, entity);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,16 +28,12 @@ import java.util.Optional;
|
|||
public class V1_8Factory implements PacketFactory {
|
||||
@Override
|
||||
public void spawnPlayer(Player player, PacketEntity entity) {
|
||||
NPC owner = entity.getOwner();
|
||||
addTabPlayer(player, entity);
|
||||
createTeam(player, entity);
|
||||
PacketLocation location = entity.getLocation();
|
||||
sendPacket(player, new WrapperPlayServerSpawnPlayer(entity.getEntityId(),
|
||||
entity.getUuid(), location.toVector3d(), location.getYaw(), location.getPitch(), List.of()));
|
||||
if (owner.getProperty(NPCProperty.SKIN_LAYERS)) sendMetadata(player, entity, MetadataFactory.get().skinLayers());
|
||||
boolean glow = owner.hasProperty(NPCProperty.GLOW);
|
||||
boolean fire = owner.getProperty(NPCProperty.FIRE);
|
||||
if (glow || fire) sendMetadata(player, entity, MetadataFactory.get().effects(fire, glow));
|
||||
sendAllMetadata(player, entity);
|
||||
ZNPCsPlus.SCHEDULER.scheduleSyncDelayedTask(() -> removeTabPlayer(player, entity), 60);
|
||||
}
|
||||
|
||||
|
@ -51,6 +47,7 @@ public class V1_8Factory implements PacketFactory {
|
|||
location.getYaw(), location.getPitch(), location.getPitch(), new Vector3d(), List.of()) :
|
||||
new WrapperPlayServerSpawnEntity(entity.getEntityId(), Optional.of(entity.getUuid()), entity.getType(), location.toVector3d(),
|
||||
location.getPitch(), location.getYaw(), location.getYaw(), 0, Optional.empty()));
|
||||
sendAllMetadata(player, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -92,7 +89,8 @@ public class V1_8Factory implements PacketFactory {
|
|||
owner.hasProperty(NPCProperty.GLOW) ? owner.getProperty(NPCProperty.GLOW) : NamedTextColor.WHITE,
|
||||
WrapperPlayServerTeams.OptionData.NONE
|
||||
)));
|
||||
sendPacket(player, new WrapperPlayServerTeams("npc_team_" + entity.getEntityId(), WrapperPlayServerTeams.TeamMode.ADD_ENTITIES, (WrapperPlayServerTeams.ScoreBoardTeamInfo) null, Integer.toString(entity.getEntityId())));
|
||||
sendPacket(player, new WrapperPlayServerTeams("npc_team_" + entity.getEntityId(), WrapperPlayServerTeams.TeamMode.ADD_ENTITIES, (WrapperPlayServerTeams.ScoreBoardTeamInfo) null,
|
||||
entity.getType() == EntityTypes.PLAYER ? Integer.toString(entity.getEntityId()) : entity.getUuid().toString()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -100,6 +98,13 @@ public class V1_8Factory implements PacketFactory {
|
|||
sendPacket(player, new WrapperPlayServerTeams("npc_team_" + entity.getEntityId(), WrapperPlayServerTeams.TeamMode.REMOVE, (WrapperPlayServerTeams.ScoreBoardTeamInfo) null));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendAllMetadata(Player player, PacketEntity entity) {
|
||||
NPC owner = entity.getOwner();
|
||||
if (entity.getType() == EntityTypes.PLAYER && owner.getProperty(NPCProperty.SKIN_LAYERS)) sendMetadata(player, entity, MetadataFactory.get().skinLayers());
|
||||
if (owner.getProperty(NPCProperty.FIRE)) sendMetadata(player, entity, MetadataFactory.get().effects(true, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMetadata(Player player, PacketEntity entity, EntityData... data) {
|
||||
PacketEvents.getAPI().getPlayerManager().sendPacket(player, new WrapperPlayServerEntityMetadata(entity.getEntityId(), List.of(data)));
|
||||
|
|
31
src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java
Normal file
31
src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java
Normal file
|
@ -0,0 +1,31 @@
|
|||
package lol.pyr.znpcsplus.packets;
|
||||
|
||||
import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes;
|
||||
import lol.pyr.znpcsplus.entity.PacketEntity;
|
||||
import lol.pyr.znpcsplus.metadata.MetadataFactory;
|
||||
import lol.pyr.znpcsplus.npc.NPC;
|
||||
import lol.pyr.znpcsplus.npc.NPCProperty;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class V1_9Factory extends V1_8Factory {
|
||||
@Override
|
||||
public void sendAllMetadata(Player player, PacketEntity entity) {
|
||||
NPC owner = entity.getOwner();
|
||||
if (entity.getType() == EntityTypes.PLAYER && owner.getProperty(NPCProperty.SKIN_LAYERS)) sendMetadata(player, entity, MetadataFactory.get().skinLayers());
|
||||
boolean glow = owner.hasProperty(NPCProperty.GLOW);
|
||||
boolean fire = owner.getProperty(NPCProperty.FIRE);
|
||||
if (glow || fire) sendMetadata(player, entity, MetadataFactory.get().effects(fire, glow));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void spawnEntity(Player player, PacketEntity entity) {
|
||||
super.spawnEntity(player, entity);
|
||||
if (entity.getOwner().hasProperty(NPCProperty.GLOW)) createTeam(player, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroyEntity(Player player, PacketEntity entity) {
|
||||
super.destroyEntity(player, entity);
|
||||
if (entity.getType() != EntityTypes.PLAYER && entity.getOwner().hasProperty(NPCProperty.GLOW)) removeTeam(player, entity);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue