mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-09 00:42:03 +01:00
Change waypoints to onAttach
This commit is contained in:
parent
3e708f0d80
commit
3186f6de5e
@ -20,121 +20,124 @@ import net.citizensnpcs.util.StringHelper;
|
|||||||
|
|
||||||
@TraitName("waypoints")
|
@TraitName("waypoints")
|
||||||
public class Waypoints extends Trait {
|
public class Waypoints extends Trait {
|
||||||
private WaypointProvider provider = new LinearWaypointProvider(npc);
|
private WaypointProvider provider;
|
||||||
private String providerName = "linear";
|
private String providerName = "linear";
|
||||||
|
|
||||||
public Waypoints() {
|
public Waypoints() {
|
||||||
super("waypoints");
|
super("waypoints");
|
||||||
}
|
}
|
||||||
|
|
||||||
private WaypointProvider create(Class<? extends WaypointProvider> clazz) {
|
private WaypointProvider create(Class<? extends WaypointProvider> clazz) {
|
||||||
try {
|
try {
|
||||||
return clazz.newInstance();
|
return clazz.newInstance();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void describeProviders(CommandSender sender) {
|
public void onAttach() {
|
||||||
Messaging.sendTr(sender, Messages.AVAILABLE_WAYPOINT_PROVIDERS);
|
provider = new LinearWaypointProvider(npc);
|
||||||
for (String name : PROVIDERS.keySet()) {
|
}
|
||||||
Messaging.send(sender, " - " + StringHelper.wrap(name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
public void describeProviders(CommandSender sender) {
|
||||||
* Returns the current {@link WaypointProvider}. May be null during initialisation.
|
Messaging.sendTr(sender, Messages.AVAILABLE_WAYPOINT_PROVIDERS);
|
||||||
*
|
for (String name : PROVIDERS.keySet()) {
|
||||||
* @return The current provider
|
Messaging.send(sender, " - " + StringHelper.wrap(name));
|
||||||
*/
|
}
|
||||||
public WaypointProvider getCurrentProvider() {
|
}
|
||||||
return provider;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The current provider name
|
* Returns the current {@link WaypointProvider}. May be null during
|
||||||
*/
|
* initialisation.
|
||||||
public String getCurrentProviderName() {
|
*
|
||||||
return providerName;
|
* @return The current provider
|
||||||
}
|
*/
|
||||||
|
public WaypointProvider getCurrentProvider() {
|
||||||
|
return provider;
|
||||||
|
}
|
||||||
|
|
||||||
public Editor getEditor(CommandSender player, CommandContext args) {
|
/**
|
||||||
return provider.createEditor(player, args);
|
* @return The current provider name
|
||||||
}
|
*/
|
||||||
|
public String getCurrentProviderName() {
|
||||||
|
return providerName;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
public Editor getEditor(CommandSender player, CommandContext args) {
|
||||||
public void load(DataKey key) throws NPCLoadException {
|
return provider.createEditor(player, args);
|
||||||
provider = null;
|
}
|
||||||
providerName = key.getString("provider", "linear");
|
|
||||||
for (Entry<String, Class<? extends WaypointProvider>> entry : PROVIDERS.entrySet()) {
|
|
||||||
if (entry.getKey().equals(providerName)) {
|
|
||||||
provider = create(entry.getValue());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (provider == null)
|
|
||||||
return;
|
|
||||||
if (npc != null) {
|
|
||||||
provider.onSpawn(npc);
|
|
||||||
}
|
|
||||||
PersistenceLoader.load(provider, key.getRelative(providerName));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSpawn() {
|
public void load(DataKey key) throws NPCLoadException {
|
||||||
if (provider != null) {
|
provider = null;
|
||||||
provider.onSpawn(getNPC());
|
providerName = key.getString("provider", "linear");
|
||||||
}
|
for (Entry<String, Class<? extends WaypointProvider>> entry : PROVIDERS.entrySet()) {
|
||||||
}
|
if (entry.getKey().equals(providerName)) {
|
||||||
|
provider = create(entry.getValue());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (provider == null)
|
||||||
|
return;
|
||||||
|
if (npc != null) {
|
||||||
|
provider.onSpawn(npc);
|
||||||
|
}
|
||||||
|
PersistenceLoader.load(provider, key.getRelative(providerName));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(DataKey key) {
|
public void onSpawn() {
|
||||||
if (provider == null)
|
if (provider != null) {
|
||||||
return;
|
provider.onSpawn(getNPC());
|
||||||
PersistenceLoader.save(provider, key.getRelative(providerName));
|
}
|
||||||
key.setString("provider", providerName);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Sets the current {@link WaypointProvider} using the given name.
|
public void save(DataKey key) {
|
||||||
*
|
if (provider == null)
|
||||||
* @param name
|
return;
|
||||||
* The name of the waypoint provider, registered using {@link #registerWaypointProvider(Class, String)}
|
PersistenceLoader.save(provider, key.getRelative(providerName));
|
||||||
* @return Whether the operation succeeded
|
key.setString("provider", providerName);
|
||||||
*/
|
}
|
||||||
public boolean setWaypointProvider(String name) {
|
|
||||||
name = name.toLowerCase();
|
|
||||||
Class<? extends WaypointProvider> clazz = PROVIDERS.get(name);
|
|
||||||
if (provider != null) {
|
|
||||||
provider.onRemove();
|
|
||||||
}
|
|
||||||
if (clazz == null || (provider = create(clazz)) == null)
|
|
||||||
return false;
|
|
||||||
providerName = name;
|
|
||||||
if (npc != null && npc.isSpawned()) {
|
|
||||||
provider.onSpawn(npc);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a {@link WaypointProvider}, which can be subsequently used by NPCs.
|
* Sets the current {@link WaypointProvider} using the given name.
|
||||||
*
|
*
|
||||||
* @param clazz
|
* @param name The name of the waypoint provider, registered using
|
||||||
* The class of the waypoint provider
|
* {@link #registerWaypointProvider(Class, String)}
|
||||||
* @param name
|
* @return Whether the operation succeeded
|
||||||
* The name of the waypoint provider
|
*/
|
||||||
*/
|
public boolean setWaypointProvider(String name) {
|
||||||
public static void registerWaypointProvider(Class<? extends WaypointProvider> clazz, String name) {
|
name = name.toLowerCase();
|
||||||
PROVIDERS.put(name, clazz);
|
Class<? extends WaypointProvider> clazz = PROVIDERS.get(name);
|
||||||
}
|
if (provider != null) {
|
||||||
|
provider.onRemove();
|
||||||
|
}
|
||||||
|
if (clazz == null || (provider = create(clazz)) == null)
|
||||||
|
return false;
|
||||||
|
providerName = name;
|
||||||
|
if (npc != null && npc.isSpawned()) {
|
||||||
|
provider.onSpawn(npc);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private static final Map<String, Class<? extends WaypointProvider>> PROVIDERS = Maps.newHashMap();
|
/**
|
||||||
|
* Registers a {@link WaypointProvider}, which can be subsequently used by NPCs.
|
||||||
|
*
|
||||||
|
* @param clazz The class of the waypoint provider
|
||||||
|
* @param name The name of the waypoint provider
|
||||||
|
*/
|
||||||
|
public static void registerWaypointProvider(Class<? extends WaypointProvider> clazz, String name) {
|
||||||
|
PROVIDERS.put(name, clazz);
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
private static final Map<String, Class<? extends WaypointProvider>> PROVIDERS = Maps.newHashMap();
|
||||||
PROVIDERS.put("linear", LinearWaypointProvider.class);
|
|
||||||
PROVIDERS.put("wander", WanderWaypointProvider.class);
|
static {
|
||||||
PROVIDERS.put("guided", GuidedWaypointProvider.class);
|
PROVIDERS.put("linear", LinearWaypointProvider.class);
|
||||||
}
|
PROVIDERS.put("wander", WanderWaypointProvider.class);
|
||||||
|
PROVIDERS.put("guided", GuidedWaypointProvider.class);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user