implement villager properties
This commit is contained in:
parent
fb3a22a355
commit
df5fd8078f
7 changed files with 134 additions and 34 deletions
|
@ -2,28 +2,28 @@ package lol.pyr.znpcsplus.util;
|
||||||
|
|
||||||
public enum VillagerProfession {
|
public enum VillagerProfession {
|
||||||
NONE(0),
|
NONE(0),
|
||||||
ARMORER(3),
|
ARMORER(1),
|
||||||
BUTCHER(4),
|
BUTCHER(2),
|
||||||
CARTOGRAPHER(1),
|
CARTOGRAPHER(3),
|
||||||
CLERIC(2),
|
CLERIC(4),
|
||||||
FARMER(0),
|
FARMER(5),
|
||||||
FISHERMAN(0),
|
FISHERMAN(6),
|
||||||
FLETCHER(0),
|
FLETCHER(7),
|
||||||
LEATHER_WORKER(4),
|
LEATHER_WORKER(8),
|
||||||
LIBRARIAN(1),
|
LIBRARIAN(9),
|
||||||
MASON(-1),
|
MASON(10),
|
||||||
NITWIT(5),
|
NITWIT(11),
|
||||||
SHEPHERD(0),
|
SHEPHERD(12),
|
||||||
TOOL_SMITH(3),
|
TOOL_SMITH(13),
|
||||||
WEAPON_SMITH(3);
|
WEAPON_SMITH(14);
|
||||||
|
|
||||||
private final int legacyId;
|
private final int id;
|
||||||
|
|
||||||
VillagerProfession(int legacyId) {
|
VillagerProfession(int id) {
|
||||||
this.legacyId = legacyId;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLegacyId() {
|
public int getId() {
|
||||||
return legacyId;
|
return id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,20 @@
|
||||||
package lol.pyr.znpcsplus.util;
|
package lol.pyr.znpcsplus.util;
|
||||||
|
|
||||||
public enum VillagerType {
|
public enum VillagerType {
|
||||||
DESERT,
|
DESERT(0),
|
||||||
JUNGLE,
|
JUNGLE(1),
|
||||||
PLAINS,
|
PLAINS(2),
|
||||||
SAVANNA,
|
SAVANNA(3),
|
||||||
SNOW,
|
SNOW(4),
|
||||||
SWAMP,
|
SWAMP(5),
|
||||||
TAIGA
|
TAIGA(6);
|
||||||
|
private final int id;
|
||||||
|
|
||||||
|
VillagerType(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,9 @@ import lol.pyr.znpcsplus.api.entity.EntityProperty;
|
||||||
import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry;
|
import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry;
|
||||||
import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
|
import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
|
||||||
import lol.pyr.znpcsplus.entity.properties.*;
|
import lol.pyr.znpcsplus.entity.properties.*;
|
||||||
|
import lol.pyr.znpcsplus.entity.properties.villager.VillagerLevelProperty;
|
||||||
|
import lol.pyr.znpcsplus.entity.properties.villager.VillagerProfessionProperty;
|
||||||
|
import lol.pyr.znpcsplus.entity.properties.villager.VillagerTypeProperty;
|
||||||
import lol.pyr.znpcsplus.entity.serializers.*;
|
import lol.pyr.znpcsplus.entity.serializers.*;
|
||||||
import lol.pyr.znpcsplus.packets.PacketFactory;
|
import lol.pyr.znpcsplus.packets.PacketFactory;
|
||||||
import lol.pyr.znpcsplus.skin.cache.MojangSkinCache;
|
import lol.pyr.znpcsplus.skin.cache.MojangSkinCache;
|
||||||
|
@ -109,11 +112,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
registerType("wolf_collar_color", DyeColor.RED); // TODO
|
registerType("wolf_collar_color", DyeColor.RED); // TODO
|
||||||
registerType("wolf_angry", false); // TODO
|
registerType("wolf_angry", false); // TODO
|
||||||
|
|
||||||
// Villager
|
|
||||||
registerType("villager_type", VillagerType.PLAINS);
|
|
||||||
registerType("villager_profession", VillagerProfession.NONE);
|
|
||||||
registerType("villager_level", VillagerLevel.STONE);
|
|
||||||
|
|
||||||
// Show Golem
|
// Show Golem
|
||||||
registerType("pumpkin", true); // TODO
|
registerType("pumpkin", true); // TODO
|
||||||
|
|
||||||
|
@ -395,6 +393,19 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
// Pose
|
// Pose
|
||||||
register(new NpcPoseProperty());
|
register(new NpcPoseProperty());
|
||||||
|
|
||||||
|
// Villager
|
||||||
|
final int villagerIndex;
|
||||||
|
if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) villagerIndex = 18;
|
||||||
|
else if (ver.isNewerThanOrEquals(ServerVersion.V_1_15)) villagerIndex = 17;
|
||||||
|
else if (ver.isNewerThanOrEquals(ServerVersion.V_1_14)) villagerIndex = 16;
|
||||||
|
else if (ver.isNewerThanOrEquals(ServerVersion.V_1_10)) villagerIndex = 13;
|
||||||
|
else if (ver.isNewerThanOrEquals(ServerVersion.V_1_9)) villagerIndex = 12;
|
||||||
|
else villagerIndex = 16;
|
||||||
|
register(new VillagerTypeProperty("villager_type", villagerIndex, VillagerType.PLAINS));
|
||||||
|
register(new VillagerProfessionProperty("villager_profession", villagerIndex, VillagerProfession.NONE));
|
||||||
|
register(new VillagerLevelProperty("villager_level", villagerIndex, VillagerLevel.STONE));
|
||||||
|
linkProperties("villager_type", "villager_profession", "villager_level");
|
||||||
|
|
||||||
// Cat
|
// Cat
|
||||||
int catIndex;
|
int catIndex;
|
||||||
if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) catIndex = 19;
|
if (ver.isNewerThanOrEquals(ServerVersion.V_1_17)) catIndex = 19;
|
||||||
|
@ -470,11 +481,10 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
register(new BooleanProperty("piglin_dancing", piglinIndex, false, legacyBooleans));
|
register(new BooleanProperty("piglin_dancing", piglinIndex, false, legacyBooleans));
|
||||||
|
|
||||||
// Pillager
|
// Pillager
|
||||||
int pillagerIndex = zombificationIndex;
|
register(new BooleanProperty("pillager_charging", zombificationIndex, false, legacyBooleans));
|
||||||
register(new BooleanProperty("pillager_charging", pillagerIndex, false, legacyBooleans));
|
|
||||||
|
|
||||||
// Vindicator
|
// Vindicator
|
||||||
int vindicatorIndex = pillagerIndex-1;
|
int vindicatorIndex = zombificationIndex -1;
|
||||||
register(new BooleanProperty("celebrating", vindicatorIndex, false, legacyBooleans));
|
register(new BooleanProperty("celebrating", vindicatorIndex, false, legacyBooleans));
|
||||||
|
|
||||||
if (!ver.isNewerThanOrEquals(ServerVersion.V_1_17)) return;
|
if (!ver.isNewerThanOrEquals(ServerVersion.V_1_17)) return;
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package lol.pyr.znpcsplus.entity.properties.villager;
|
||||||
|
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.villager.VillagerData;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.villager.profession.VillagerProfessions;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.villager.type.VillagerTypes;
|
||||||
|
import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
|
||||||
|
import lol.pyr.znpcsplus.entity.PacketEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public abstract class VillagerDataProperty<T> extends EntityPropertyImpl<T> {
|
||||||
|
private final int index;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public VillagerDataProperty(String name, int index, T def) {
|
||||||
|
super(name, def, (Class<T>) def.getClass());
|
||||||
|
this.index = index;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void apply(Player player, PacketEntity entity, boolean isSpawned, Map<Integer, EntityData> properties) {
|
||||||
|
EntityData oldData = properties.get(index);
|
||||||
|
VillagerData old = oldData == null ? new VillagerData(VillagerTypes.PLAINS, VillagerProfessions.NONE, 1) : (VillagerData) oldData.getValue();
|
||||||
|
properties.put(index, newEntityData(index, EntityDataTypes.VILLAGER_DATA, apply(old, entity.getProperty(this))));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract VillagerData apply(VillagerData data, T value);
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package lol.pyr.znpcsplus.entity.properties.villager;
|
||||||
|
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.villager.VillagerData;
|
||||||
|
import lol.pyr.znpcsplus.util.VillagerLevel;
|
||||||
|
|
||||||
|
public class VillagerLevelProperty extends VillagerDataProperty<VillagerLevel> {
|
||||||
|
public VillagerLevelProperty(String name, int index, VillagerLevel def) {
|
||||||
|
super(name, index, def);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected VillagerData apply(VillagerData data, VillagerLevel value) {
|
||||||
|
data.setLevel(value.ordinal() + 1);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package lol.pyr.znpcsplus.entity.properties.villager;
|
||||||
|
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.villager.VillagerData;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.villager.profession.VillagerProfessions;
|
||||||
|
import lol.pyr.znpcsplus.util.VillagerProfession;
|
||||||
|
|
||||||
|
public class VillagerProfessionProperty extends VillagerDataProperty<VillagerProfession> {
|
||||||
|
public VillagerProfessionProperty(String name, int index, VillagerProfession def) {
|
||||||
|
super(name, index, def);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected VillagerData apply(VillagerData data, VillagerProfession value) {
|
||||||
|
data.setProfession(VillagerProfessions.getById(value.getId()));
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package lol.pyr.znpcsplus.entity.properties.villager;
|
||||||
|
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.villager.VillagerData;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.villager.type.VillagerTypes;
|
||||||
|
import lol.pyr.znpcsplus.util.VillagerType;
|
||||||
|
|
||||||
|
public class VillagerTypeProperty extends VillagerDataProperty<VillagerType> {
|
||||||
|
public VillagerTypeProperty(String name, int index, VillagerType def) {
|
||||||
|
super(name, index, def);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected VillagerData apply(VillagerData data, VillagerType value) {
|
||||||
|
data.setType(VillagerTypes.getById(value.getId()));
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue