2017-12-30 08:36:36 +01:00
|
|
|
package net.citizensnpcs.npc;
|
|
|
|
|
2019-08-20 08:35:41 +02:00
|
|
|
import java.util.Collection;
|
2018-07-19 14:18:47 +02:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
2017-12-30 08:36:36 +01:00
|
|
|
import com.google.common.base.Preconditions;
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
import com.google.common.collect.Maps;
|
2018-07-19 14:18:47 +02:00
|
|
|
|
2023-03-05 17:28:44 +01:00
|
|
|
import net.citizensnpcs.Citizens;
|
2017-12-30 08:36:36 +01:00
|
|
|
import net.citizensnpcs.api.npc.NPC;
|
|
|
|
import net.citizensnpcs.api.trait.Trait;
|
|
|
|
import net.citizensnpcs.api.trait.TraitFactory;
|
|
|
|
import net.citizensnpcs.api.trait.TraitInfo;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.api.trait.trait.Equipment;
|
|
|
|
import net.citizensnpcs.api.trait.trait.Inventory;
|
|
|
|
import net.citizensnpcs.api.trait.trait.MobType;
|
|
|
|
import net.citizensnpcs.api.trait.trait.Owner;
|
2023-03-07 16:58:03 +01:00
|
|
|
import net.citizensnpcs.api.trait.trait.PlayerFilter;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.api.trait.trait.Spawned;
|
|
|
|
import net.citizensnpcs.api.trait.trait.Speech;
|
|
|
|
import net.citizensnpcs.trait.Age;
|
|
|
|
import net.citizensnpcs.trait.Anchors;
|
|
|
|
import net.citizensnpcs.trait.ArmorStandTrait;
|
2023-01-03 13:55:27 +01:00
|
|
|
import net.citizensnpcs.trait.BoundingBoxTrait;
|
2020-07-17 03:52:00 +02:00
|
|
|
import net.citizensnpcs.trait.ClickRedirectTrait;
|
2019-09-23 14:29:31 +02:00
|
|
|
import net.citizensnpcs.trait.CommandTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.Controllable;
|
|
|
|
import net.citizensnpcs.trait.CurrentLocation;
|
2021-02-07 11:45:10 +01:00
|
|
|
import net.citizensnpcs.trait.DropsTrait;
|
2021-02-18 16:29:15 +01:00
|
|
|
import net.citizensnpcs.trait.EnderCrystalTrait;
|
2020-06-27 09:41:47 +02:00
|
|
|
import net.citizensnpcs.trait.EndermanTrait;
|
2018-10-06 11:11:57 +02:00
|
|
|
import net.citizensnpcs.trait.FollowTrait;
|
2018-11-12 07:53:52 +01:00
|
|
|
import net.citizensnpcs.trait.GameModeTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.Gravity;
|
2020-06-30 12:17:14 +02:00
|
|
|
import net.citizensnpcs.trait.HologramTrait;
|
2023-02-05 17:40:01 +01:00
|
|
|
import net.citizensnpcs.trait.HomeTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.HorseModifiers;
|
|
|
|
import net.citizensnpcs.trait.LookClose;
|
2022-12-24 18:37:54 +01:00
|
|
|
import net.citizensnpcs.trait.MirrorTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.MountTrait;
|
|
|
|
import net.citizensnpcs.trait.OcelotModifiers;
|
2023-01-03 13:55:27 +01:00
|
|
|
import net.citizensnpcs.trait.PacketNPC;
|
2023-02-21 16:59:33 +01:00
|
|
|
import net.citizensnpcs.trait.PausePathfindingTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.Poses;
|
|
|
|
import net.citizensnpcs.trait.Powered;
|
|
|
|
import net.citizensnpcs.trait.RabbitType;
|
2022-12-03 14:32:58 +01:00
|
|
|
import net.citizensnpcs.trait.RotationTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.Saddle;
|
2019-07-12 09:39:38 +02:00
|
|
|
import net.citizensnpcs.trait.ScoreboardTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.ScriptTrait;
|
|
|
|
import net.citizensnpcs.trait.SheepTrait;
|
2022-06-14 15:38:15 +02:00
|
|
|
import net.citizensnpcs.trait.SitTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.SkinLayers;
|
2020-04-18 06:24:29 +02:00
|
|
|
import net.citizensnpcs.trait.SkinTrait;
|
2022-10-25 11:07:11 +02:00
|
|
|
import net.citizensnpcs.trait.SleepTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.SlimeSize;
|
2021-09-20 14:59:54 +02:00
|
|
|
import net.citizensnpcs.trait.SneakTrait;
|
2018-07-19 14:18:47 +02:00
|
|
|
import net.citizensnpcs.trait.VillagerProfession;
|
|
|
|
import net.citizensnpcs.trait.WitherTrait;
|
|
|
|
import net.citizensnpcs.trait.WolfModifiers;
|
|
|
|
import net.citizensnpcs.trait.WoolColor;
|
2017-12-30 08:36:36 +01:00
|
|
|
import net.citizensnpcs.trait.text.Text;
|
|
|
|
import net.citizensnpcs.trait.waypoint.Waypoints;
|
|
|
|
|
|
|
|
public class CitizensTraitFactory implements TraitFactory {
|
|
|
|
private final List<TraitInfo> defaultTraits = Lists.newArrayList();
|
|
|
|
private final Map<String, TraitInfo> registered = Maps.newHashMap();
|
|
|
|
|
2023-03-05 17:28:44 +01:00
|
|
|
public CitizensTraitFactory(Citizens plugin) {
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(Age.class));
|
|
|
|
registerTrait(TraitInfo.create(ArmorStandTrait.class));
|
|
|
|
registerTrait(TraitInfo.create(Anchors.class));
|
2023-01-03 13:55:27 +01:00
|
|
|
registerTrait(TraitInfo.create(BoundingBoxTrait.class));
|
2020-07-17 03:52:00 +02:00
|
|
|
registerTrait(TraitInfo.create(ClickRedirectTrait.class));
|
2019-09-23 14:29:31 +02:00
|
|
|
registerTrait(TraitInfo.create(CommandTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(Controllable.class));
|
2018-10-06 11:11:57 +02:00
|
|
|
registerTrait(TraitInfo.create(CurrentLocation.class));
|
2021-02-07 11:45:10 +01:00
|
|
|
registerTrait(TraitInfo.create(DropsTrait.class));
|
2021-02-18 16:29:15 +01:00
|
|
|
registerTrait(TraitInfo.create(EnderCrystalTrait.class));
|
2020-06-27 09:41:47 +02:00
|
|
|
registerTrait(TraitInfo.create(EndermanTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(Equipment.class));
|
2018-10-06 11:11:57 +02:00
|
|
|
registerTrait(TraitInfo.create(FollowTrait.class));
|
2018-11-12 07:53:52 +01:00
|
|
|
registerTrait(TraitInfo.create(GameModeTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(Gravity.class));
|
2023-02-05 17:40:01 +01:00
|
|
|
registerTrait(TraitInfo.create(HomeTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(HorseModifiers.class));
|
2020-06-30 12:17:14 +02:00
|
|
|
registerTrait(TraitInfo.create(HologramTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(Inventory.class));
|
|
|
|
registerTrait(TraitInfo.create(LookClose.class));
|
2022-12-24 18:37:54 +01:00
|
|
|
registerTrait(TraitInfo.create(MirrorTrait.class));
|
2021-09-20 14:59:54 +02:00
|
|
|
registerTrait(TraitInfo.create(MountTrait.class));
|
|
|
|
registerTrait(TraitInfo.create(MobType.class).asDefaultTrait());
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(OcelotModifiers.class));
|
|
|
|
registerTrait(TraitInfo.create(Owner.class));
|
2023-01-03 13:55:27 +01:00
|
|
|
registerTrait(TraitInfo.create(PacketNPC.class));
|
2023-02-21 16:59:33 +01:00
|
|
|
registerTrait(TraitInfo.create(PausePathfindingTrait.class));
|
2023-03-07 16:58:03 +01:00
|
|
|
registerTrait(TraitInfo.create(PlayerFilter.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(Poses.class));
|
|
|
|
registerTrait(TraitInfo.create(Powered.class));
|
|
|
|
registerTrait(TraitInfo.create(RabbitType.class));
|
2022-11-29 23:13:55 +01:00
|
|
|
registerTrait(TraitInfo.create(RotationTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(Saddle.class));
|
2019-07-12 09:39:38 +02:00
|
|
|
registerTrait(TraitInfo.create(ScoreboardTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(ScriptTrait.class));
|
2022-10-25 11:07:11 +02:00
|
|
|
registerTrait(TraitInfo.create(SitTrait.class));
|
|
|
|
registerTrait(TraitInfo.create(SleepTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(SheepTrait.class));
|
|
|
|
registerTrait(TraitInfo.create(SkinLayers.class));
|
2020-04-18 06:24:29 +02:00
|
|
|
registerTrait(TraitInfo.create(SkinTrait.class));
|
2021-09-20 14:59:54 +02:00
|
|
|
registerTrait(TraitInfo.create(SneakTrait.class));
|
2017-12-30 08:36:36 +01:00
|
|
|
registerTrait(TraitInfo.create(SlimeSize.class));
|
|
|
|
registerTrait(TraitInfo.create(Spawned.class));
|
|
|
|
registerTrait(TraitInfo.create(Speech.class));
|
|
|
|
registerTrait(TraitInfo.create(Text.class));
|
|
|
|
registerTrait(TraitInfo.create(Waypoints.class));
|
|
|
|
registerTrait(TraitInfo.create(WitherTrait.class));
|
|
|
|
registerTrait(TraitInfo.create(WoolColor.class));
|
|
|
|
registerTrait(TraitInfo.create(WolfModifiers.class));
|
|
|
|
registerTrait(TraitInfo.create(VillagerProfession.class));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void addDefaultTraits(NPC npc) {
|
|
|
|
for (TraitInfo info : defaultTraits) {
|
|
|
|
npc.addTrait(create(info));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private <T extends Trait> T create(TraitInfo info) {
|
|
|
|
return info.tryCreateInstance();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void deregisterTrait(TraitInfo info) {
|
|
|
|
Preconditions.checkNotNull(info, "info cannot be null");
|
|
|
|
registered.remove(info.getTraitName());
|
|
|
|
}
|
|
|
|
|
2019-08-20 08:35:41 +02:00
|
|
|
@Override
|
|
|
|
public Collection<TraitInfo> getRegisteredTraits() {
|
|
|
|
return registered.values();
|
|
|
|
}
|
|
|
|
|
2017-12-30 08:36:36 +01:00
|
|
|
@Override
|
|
|
|
public <T extends Trait> T getTrait(Class<T> clazz) {
|
|
|
|
for (TraitInfo entry : registered.values()) {
|
|
|
|
if (clazz == entry.getTraitClass()) {
|
|
|
|
return create(entry);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
public <T extends Trait> T getTrait(String name) {
|
|
|
|
TraitInfo info = registered.get(name.toLowerCase());
|
|
|
|
if (info == null)
|
|
|
|
return null;
|
|
|
|
return (T) create(info);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Class<? extends Trait> getTraitClass(String name) {
|
|
|
|
TraitInfo info = registered.get(name.toLowerCase());
|
|
|
|
return info == null ? null : info.getTraitClass();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void registerTrait(TraitInfo info) {
|
|
|
|
Preconditions.checkNotNull(info, "info cannot be null");
|
2022-11-06 16:19:08 +01:00
|
|
|
info.checkValid();
|
2017-12-30 08:36:36 +01:00
|
|
|
if (registered.containsKey(info.getTraitName())) {
|
2020-09-11 03:29:42 +02:00
|
|
|
throw new IllegalArgumentException("Trait name " + info.getTraitName() + " already registered");
|
2017-12-30 08:36:36 +01:00
|
|
|
}
|
|
|
|
registered.put(info.getTraitName(), info);
|
|
|
|
if (info.isDefaultTrait()) {
|
|
|
|
defaultTraits.add(info);
|
|
|
|
}
|
|
|
|
}
|
2012-07-19 17:10:30 +02:00
|
|
|
}
|