Change waypoints to onAttach

This commit is contained in:
fullwall 2019-12-21 19:09:50 +09:00
parent 3e708f0d80
commit 3186f6de5e

View File

@ -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);
}
} }