mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-11-24 03:25:13 +01:00
Changes to Behaviour
This commit is contained in:
parent
18d9853f00
commit
cc8d9c10a8
@ -3,6 +3,7 @@ package net.citizensnpcs.trait;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import net.citizensnpcs.api.CitizensAPI;
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.ai.Goal;
|
import net.citizensnpcs.api.ai.Goal;
|
||||||
@ -10,14 +11,15 @@ import net.citizensnpcs.api.ai.GoalController.GoalEntry;
|
|||||||
import net.citizensnpcs.api.ai.SimpleGoalEntry;
|
import net.citizensnpcs.api.ai.SimpleGoalEntry;
|
||||||
import net.citizensnpcs.api.exception.NPCLoadException;
|
import net.citizensnpcs.api.exception.NPCLoadException;
|
||||||
import net.citizensnpcs.api.scripting.CompileCallback;
|
import net.citizensnpcs.api.scripting.CompileCallback;
|
||||||
|
import net.citizensnpcs.api.scripting.Script;
|
||||||
import net.citizensnpcs.api.scripting.ScriptFactory;
|
import net.citizensnpcs.api.scripting.ScriptFactory;
|
||||||
import net.citizensnpcs.api.trait.Trait;
|
import net.citizensnpcs.api.trait.Trait;
|
||||||
import net.citizensnpcs.api.util.DataKey;
|
import net.citizensnpcs.api.util.DataKey;
|
||||||
|
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Joiner;
|
|
||||||
import com.google.common.base.Splitter;
|
import com.google.common.base.Splitter;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
@ -32,13 +34,11 @@ public class Behaviour extends Trait {
|
|||||||
};
|
};
|
||||||
private final File rootFolder = new File(CitizensAPI.getScriptFolder(), "behaviours");
|
private final File rootFolder = new File(CitizensAPI.getScriptFolder(), "behaviours");
|
||||||
private final List<File> scripts = Lists.newArrayList();
|
private final List<File> scripts = Lists.newArrayList();
|
||||||
{
|
|
||||||
if (!rootFolder.exists())
|
|
||||||
rootFolder.mkdirs();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Behaviour() {
|
public Behaviour() {
|
||||||
super("behaviour");
|
super("behaviour");
|
||||||
|
if (!rootFolder.exists())
|
||||||
|
rootFolder.mkdirs();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addScripts(Iterable<String> scripts) {
|
public void addScripts(Iterable<String> scripts) {
|
||||||
@ -53,7 +53,7 @@ public class Behaviour extends Trait {
|
|||||||
if (!key.keyExists("scripts"))
|
if (!key.keyExists("scripts"))
|
||||||
return;
|
return;
|
||||||
String scripts = key.getString("scripts");
|
String scripts = key.getString("scripts");
|
||||||
addScripts(Splitter.on(",").split(scripts));
|
addScripts(Splitter.on(',').split(scripts));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -100,7 +100,13 @@ public class Behaviour extends Trait {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(DataKey key) {
|
public void save(DataKey key) {
|
||||||
key.setString("scripts", Joiner.on(",").join(scripts));
|
key.removeKey("scripts");
|
||||||
|
StringBuilder fileNames = new StringBuilder();
|
||||||
|
for (File file : scripts) {
|
||||||
|
fileNames.append(file.getName() + ',');
|
||||||
|
}
|
||||||
|
if (fileNames.length() > 0)
|
||||||
|
key.setString("scripts", fileNames.substring(0, fileNames.length() - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BehaviourCallback implements CompileCallback {
|
public class BehaviourCallback implements CompileCallback {
|
||||||
@ -123,13 +129,20 @@ public class Behaviour extends Trait {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScriptCompiled(File file, ScriptFactory script) {
|
public void onScriptCompiled(final File file, final ScriptFactory script) {
|
||||||
synchronized (goals) {
|
final Script instance = script.newInstance();
|
||||||
fileInUse = file;
|
Bukkit.getScheduler().callSyncMethod(CitizensAPI.getPlugin(), new Callable<Object>() {
|
||||||
script.newInstance().invoke("addGoals", this, npc);
|
@Override
|
||||||
scripts.add(file);
|
public Object call() throws Exception {
|
||||||
fileInUse = null;
|
synchronized (Behaviour.this) {
|
||||||
}
|
fileInUse = file;
|
||||||
|
instance.invoke("addGoals", this, npc);
|
||||||
|
scripts.add(file);
|
||||||
|
fileInUse = null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user