mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-09-29 15:47:40 +02:00
Allow easier trait registration
This commit is contained in:
parent
044c961522
commit
c221abc75d
@ -4,7 +4,6 @@ import java.io.File;
|
|||||||
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.DataKey;
|
import net.citizensnpcs.api.DataKey;
|
||||||
import net.citizensnpcs.api.Factory;
|
|
||||||
import net.citizensnpcs.api.exception.NPCLoadException;
|
import net.citizensnpcs.api.exception.NPCLoadException;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.trait.Character;
|
import net.citizensnpcs.api.npc.trait.Character;
|
||||||
@ -92,12 +91,7 @@ public class Citizens extends JavaPlugin {
|
|||||||
|
|
||||||
// TODO possibly separate this out some more
|
// TODO possibly separate this out some more
|
||||||
private void setupNPCs() throws NPCLoadException {
|
private void setupNPCs() throws NPCLoadException {
|
||||||
traitManager.registerTraitFactory("location", new Factory<SpawnLocation>() {
|
traitManager.registerTrait("location", SpawnLocation.class);
|
||||||
@Override
|
|
||||||
public SpawnLocation create() {
|
|
||||||
return new SpawnLocation();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
int spawned = 0;
|
int spawned = 0;
|
||||||
for (DataKey key : saves.getKey("npc").getIntegerSubKeys()) {
|
for (DataKey key : saves.getKey("npc").getIntegerSubKeys()) {
|
||||||
int id = Integer.parseInt(key.name());
|
int id = Integer.parseInt(key.name());
|
||||||
|
@ -4,7 +4,6 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.Factory;
|
|
||||||
import net.citizensnpcs.api.event.NPCDespawnEvent;
|
import net.citizensnpcs.api.event.NPCDespawnEvent;
|
||||||
import net.citizensnpcs.api.event.NPCSpawnEvent;
|
import net.citizensnpcs.api.event.NPCSpawnEvent;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
@ -177,24 +176,4 @@ public class CitizensNPC implements NPC {
|
|||||||
public CraftNPC getHandle() {
|
public CraftNPC getHandle() {
|
||||||
return mcEntity;
|
return mcEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ReflectionTraitFactory implements Factory<Trait> {
|
|
||||||
private final Class<? extends Trait> clazz;
|
|
||||||
|
|
||||||
public ReflectionTraitFactory(Class<? extends Trait> clazz) {
|
|
||||||
this.clazz = clazz;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Trait create() {
|
|
||||||
try {
|
|
||||||
return clazz.newInstance();
|
|
||||||
} catch (InstantiationException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -20,9 +20,31 @@ public class CitizensTraitManager implements TraitManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerTraitFactory(String name, Factory<? extends Trait> factory) {
|
public void registerTrait(String name, Class<? extends Trait> clazz) {
|
||||||
|
registerTraitWithFactory(name, new ReflectionFactory(clazz));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerTraitWithFactory(String name, Factory<? extends Trait> factory) {
|
||||||
if (registered.get(name) != null)
|
if (registered.get(name) != null)
|
||||||
throw new IllegalArgumentException("trait factory already registered");
|
throw new IllegalArgumentException("trait factory already registered");
|
||||||
registered.put(name, factory);
|
registered.put(name, factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class ReflectionFactory implements Factory<Trait> {
|
||||||
|
private final Class<? extends Trait> clazz;
|
||||||
|
|
||||||
|
private ReflectionFactory(Class<? extends Trait> clazz) {
|
||||||
|
this.clazz = clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Trait create() {
|
||||||
|
try {
|
||||||
|
return clazz.newInstance();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
11
src/net/citizensnpcs/test/StorageTest.java
Normal file
11
src/net/citizensnpcs/test/StorageTest.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package net.citizensnpcs.test;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class StorageTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testYaml() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user