mirror of
https://github.com/PikaMug/Quests.git
synced 2024-11-01 00:11:00 +01:00
Added NPC Effects
This commit is contained in:
parent
42c348c9f6
commit
91e1fd840d
22
.gitattributes
vendored
Normal file
22
.gitattributes
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
||||
# Custom for Visual Studio
|
||||
*.cs diff=csharp
|
||||
*.sln merge=union
|
||||
*.csproj merge=union
|
||||
*.vbproj merge=union
|
||||
*.fsproj merge=union
|
||||
*.dbproj merge=union
|
||||
|
||||
# Standard to msysgit
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
20
.gitignore
vendored
20
.gitignore
vendored
@ -1,3 +1,17 @@
|
||||
/lib/Quests/build/
|
||||
/lib/Quests/dist/
|
||||
/lib/Quests/nbproject/private/
|
||||
nbproject/
|
||||
nbproject/private/
|
||||
build/
|
||||
nbbuild/
|
||||
dist/
|
||||
nbdist/
|
||||
nbactions.xml
|
||||
nb-configuration.xml
|
||||
nbproject\project.properties
|
||||
|
||||
# Class Files #
|
||||
*.class
|
||||
|
||||
# Package Files #
|
||||
*.jar
|
||||
*.war
|
||||
*.ear
|
@ -3,4 +3,4 @@ do.depend=false
|
||||
do.jar=true
|
||||
javac.debug=true
|
||||
javadoc.preview=true
|
||||
user.properties.file=/Users/136-aclarke/Library/Application Support/NetBeans/7.2.1/build.properties
|
||||
user.properties.file=C:\\Users\\Alex\\AppData\\Roaming\\NetBeans\\7.2.1\\build.properties
|
||||
|
@ -27,9 +27,10 @@ dist.jar=${dist.dir}/Quests.jar
|
||||
dist.javadoc.dir=${dist.dir}/javadoc
|
||||
endorsed.classpath=
|
||||
excludes=
|
||||
file.reference.craftbukkit-1.5.1-R0.1.jar=lib/craftbukkit-1.5.1-R0.1.jar
|
||||
file.reference.denizen-0.8.8-PRERELEASE.jar=lib\\denizen-0.8.8-PRERELEASE.jar
|
||||
file.reference.mcMMO.jar=lib\\mcMMO.jar
|
||||
file.reference.ProtocolLib-2.4.1.jar=lib/ProtocolLib-2.4.1.jar
|
||||
file.reference.mysql-connector-java-5.1.24-bin.jar=C:\\Users\\Alex\\Documents\\Coding\\libraries\\mysql-connector-java-5.1.24-bin.jar
|
||||
file.reference.Vault.jar=lib/Vault.jar
|
||||
includes=**
|
||||
jar.archive.disabled=${jnlp.enabled}
|
||||
@ -41,7 +42,8 @@ javac.classpath=\
|
||||
${libs.CitizensAPI.classpath}:\
|
||||
${file.reference.mcMMO.jar}:\
|
||||
${file.reference.denizen-0.8.8-PRERELEASE.jar}:\
|
||||
${file.reference.ProtocolLib-2.4.1.jar}
|
||||
${file.reference.mysql-connector-java-5.1.24-bin.jar}:\
|
||||
${file.reference.craftbukkit-1.5.1-R0.1.jar}
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
|
BIN
src/.DS_Store
vendored
Normal file
BIN
src/.DS_Store
vendored
Normal file
Binary file not shown.
@ -25,6 +25,8 @@ allow-quitting: true
|
||||
debug-mode: false
|
||||
kill-delay: 600
|
||||
snoop: true
|
||||
show-npc-effects: true
|
||||
npc-effect: "note"
|
||||
quester-blacklist:
|
||||
- "SomeGuy12345"
|
||||
- "somePrefix*"
|
||||
|
160
src/me/blackvein/quests/NpcEffectThread.java
Normal file
160
src/me/blackvein/quests/NpcEffectThread.java
Normal file
@ -0,0 +1,160 @@
|
||||
package me.blackvein.quests;
|
||||
|
||||
import java.util.List;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class NpcEffectThread implements Runnable{
|
||||
|
||||
final Quests plugin;
|
||||
|
||||
public NpcEffectThread(Quests quests){
|
||||
|
||||
plugin = quests;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(){
|
||||
|
||||
for(Player player : plugin.getServer().getOnlinePlayers()){
|
||||
|
||||
Quester quester = plugin.getQuester(player.getName());
|
||||
List<Entity> nearby = player.getNearbyEntities(32.0, 32.0, 32.0);
|
||||
if(nearby.isEmpty() == false){
|
||||
|
||||
for(Entity e : nearby){
|
||||
|
||||
if(plugin.citizens.getNPCRegistry().isNPC(e)){
|
||||
|
||||
NPC npc = plugin.citizens.getNPCRegistry().getNPC(e);
|
||||
if(plugin.hasQuest(npc, quester))
|
||||
showEffect(player, npc);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void showEffect(Player player, NPC npc){
|
||||
|
||||
if(Quests.effect.equalsIgnoreCase("enchant")){
|
||||
|
||||
try{
|
||||
ParticleEffect.ENCHANTMENT_TABLE.sendToPlayer(player, npc.getBukkitEntity().getEyeLocation(), 0, 1, 0, 1, 10);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("crit")){
|
||||
|
||||
try{
|
||||
ParticleEffect.CRIT.sendToPlayer(player, npc.getBukkitEntity().getEyeLocation(), 0, 0, 0, (float)0.35, 3);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("spell")){
|
||||
|
||||
try{
|
||||
ParticleEffect.INSTANT_SPELL.sendToPlayer(player, npc.getBukkitEntity().getEyeLocation(), 0, 0, 0, 1, 3);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("magiccrit")){
|
||||
|
||||
try{
|
||||
ParticleEffect.MAGIC_CRIT.sendToPlayer(player, npc.getBukkitEntity().getEyeLocation(), 0, 0, 0, (float)0.35, 3);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("mobspell")){
|
||||
|
||||
try{
|
||||
ParticleEffect.MOB_SPELL.sendToPlayer(player, npc.getBukkitEntity().getEyeLocation(), 0, 0, 0, 1, 3);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("note")){
|
||||
|
||||
try{
|
||||
Location old = npc.getBukkitEntity().getEyeLocation();
|
||||
Location newLoc = new Location(player.getWorld(), old.getX(), old.getY() + (float)0.5, old.getZ());
|
||||
ParticleEffect.NOTE.sendToPlayer(player, newLoc, 0, 0, 0, 1, 1);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("portal")){
|
||||
|
||||
try{
|
||||
ParticleEffect.PORTAL.sendToPlayer(player, npc.getBukkitEntity().getEyeLocation(), 0, 0, 0, 1, 5);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("dust")){
|
||||
|
||||
try{
|
||||
Location old = npc.getBukkitEntity().getEyeLocation();
|
||||
Location newLoc = new Location(player.getWorld(), old.getX(), old.getY() + (float)0.5, old.getZ());
|
||||
ParticleEffect.RED_DUST.sendToPlayer(player, newLoc, 0, 0, 0, 1, 1);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("witch")){
|
||||
|
||||
try{
|
||||
ParticleEffect.WITCH_MAGIC.sendToPlayer(player, npc.getBukkitEntity().getEyeLocation(), 0, 0, 0, 1, 3);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("snowball")){
|
||||
|
||||
try{
|
||||
Location old = npc.getBukkitEntity().getEyeLocation();
|
||||
Location newLoc = new Location(player.getWorld(), old.getX(), old.getY() + (float)0.5, old.getZ());
|
||||
ParticleEffect.SNOWBALL_POOF.sendToPlayer(player, newLoc, 0, 0, 0, 1, 3);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("splash")){
|
||||
|
||||
try{
|
||||
Location old = npc.getBukkitEntity().getEyeLocation();
|
||||
Location newLoc = new Location(player.getWorld(), old.getX(), old.getY() + (float)0.5, old.getZ());
|
||||
ParticleEffect.SPLASH.sendToPlayer(player, newLoc, 0, 0, 0, 1, 4);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if(Quests.effect.equalsIgnoreCase("smoke")){
|
||||
|
||||
try{
|
||||
ParticleEffect.TOWN_AURA.sendToPlayer(player, npc.getBukkitEntity().getEyeLocation(), 0, 1, 0, 1, 20);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else{
|
||||
|
||||
Quests.log.severe("[Quests] No particle effect specified!");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -16,7 +16,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class NpcListener implements Listener {
|
||||
|
||||
Quests plugin;
|
||||
final Quests plugin;
|
||||
|
||||
public NpcListener(Quests newPlugin) {
|
||||
|
||||
@ -143,7 +143,15 @@ public class NpcListener implements Listener {
|
||||
if (p.getShooter() instanceof Player) {
|
||||
|
||||
Player player = (Player) p.getShooter();
|
||||
if (plugin.checkQuester(player.getName()) == false) {
|
||||
boolean okay = true;
|
||||
|
||||
if (plugin.citizens != null) {
|
||||
if (plugin.citizens.getNPCRegistry().isNPC(player)) {
|
||||
okay = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (okay) {
|
||||
|
||||
Quester quester = plugin.getQuester(player.getName());
|
||||
if (quester.hasObjective("killNPC")) {
|
||||
@ -151,15 +159,21 @@ public class NpcListener implements Listener {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else if (damager instanceof Player) {
|
||||
|
||||
boolean okay = true;
|
||||
|
||||
if (plugin.citizens != null) {
|
||||
if (plugin.citizens.getNPCRegistry().isNPC(damager)) {
|
||||
okay = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (okay) {
|
||||
|
||||
Player player = (Player) damager;
|
||||
|
||||
if (plugin.checkQuester(player.getName()) == false) {
|
||||
|
||||
Quester quester = plugin.getQuester(player.getName());
|
||||
if (quester.hasObjective("killNPC")) {
|
||||
quester.killNPC(evt.getNPC());
|
||||
@ -173,4 +187,6 @@ public class NpcListener implements Listener {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
66
src/me/blackvein/quests/ParticleEffect.java
Normal file
66
src/me/blackvein/quests/ParticleEffect.java
Normal file
@ -0,0 +1,66 @@
|
||||
package me.blackvein.quests;
|
||||
|
||||
import net.minecraft.server.v1_5_R2.Packet63WorldParticles;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.v1_5_R2.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public enum ParticleEffect {
|
||||
|
||||
HUGE_EXPLOSION("hugeexplosion"),
|
||||
LARGE_EXPLODE("largeexplode"),
|
||||
FIREWORKS_SPARK("fireworksSpark"),
|
||||
BUBBLE("bubble"),
|
||||
SUSPEND("suspend"),
|
||||
DEPTH_SUSPEND("depthSuspend"),
|
||||
TOWN_AURA("townaura"),
|
||||
CRIT("crit"),
|
||||
MAGIC_CRIT("magicCrit"),
|
||||
MOB_SPELL("mobSpell"),
|
||||
MOB_SPELL_AMBIENT("mobSpellAmbient"),
|
||||
SPELL("spell"),
|
||||
INSTANT_SPELL("instantSpell"),
|
||||
WITCH_MAGIC("witchMagic"),
|
||||
NOTE("note"),
|
||||
PORTAL("portal"),
|
||||
ENCHANTMENT_TABLE("enchantmenttable"),
|
||||
EXPLODE("explode"),
|
||||
FLAME("flame"),
|
||||
LAVA("lava"),
|
||||
FOOTSTEP("footstep"),
|
||||
SPLASH("splash"),
|
||||
LARGE_SMOKE("largesmoke"),
|
||||
CLOUD("cloud"),
|
||||
RED_DUST("reddust"),
|
||||
SNOWBALL_POOF("snowballpoof"),
|
||||
DRIP_WATER("dripWater"),
|
||||
DRIP_LAVA("dripLava"),
|
||||
SNOW_SHOVEL("snowshovel"),
|
||||
SLIME("slime"),
|
||||
HEART("heart"),
|
||||
ANGRY_VILLAGER("angryVillager"),
|
||||
HAPPY_VILLAGER("happerVillager"),
|
||||
ICONCRACK("iconcrack_"),
|
||||
TILECRACK("tilecrack_");
|
||||
|
||||
private String particleName;
|
||||
|
||||
ParticleEffect(String particleName) {
|
||||
this.particleName = particleName;
|
||||
}
|
||||
|
||||
public void sendToPlayer(Player player, Location location, float offsetX, float offsetY, float offsetZ, float speed, int count) throws Exception {
|
||||
Packet63WorldParticles packet = new Packet63WorldParticles();
|
||||
ReflectionUtilities.setValue(packet, "a", particleName);
|
||||
ReflectionUtilities.setValue(packet, "b", (float) location.getX());
|
||||
ReflectionUtilities.setValue(packet, "c", (float) location.getY());
|
||||
ReflectionUtilities.setValue(packet, "d", (float) location.getZ());
|
||||
ReflectionUtilities.setValue(packet, "e", offsetX);
|
||||
ReflectionUtilities.setValue(packet, "f", offsetY);
|
||||
ReflectionUtilities.setValue(packet, "g", offsetZ);
|
||||
ReflectionUtilities.setValue(packet, "h", speed);
|
||||
ReflectionUtilities.setValue(packet, "i", count);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
}
|
@ -2,6 +2,7 @@ package me.blackvein.quests;
|
||||
|
||||
import java.io.File;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
@ -25,7 +26,7 @@ import org.bukkit.event.player.PlayerFishEvent.State;
|
||||
|
||||
public class PlayerListener implements Listener {
|
||||
|
||||
Quests plugin;
|
||||
final Quests plugin;
|
||||
|
||||
public PlayerListener(Quests newPlugin) {
|
||||
|
||||
@ -450,6 +451,7 @@ public class PlayerListener implements Listener {
|
||||
if (p.getShooter() instanceof Player) {
|
||||
|
||||
Player player = (Player) p.getShooter();
|
||||
|
||||
if (plugin.checkQuester(player.getName()) == false) {
|
||||
|
||||
boolean okay = true;
|
||||
|
@ -393,14 +393,14 @@ public class QuestFactory implements ConversationAbandonedListener {
|
||||
@Override
|
||||
public String getPromptText(ConversationContext context) {
|
||||
|
||||
return ChatColor.YELLOW + "Enter NPC ID, or 0 to clear the NPC start, or -1 to cancel";
|
||||
return ChatColor.YELLOW + "Enter NPC ID, or -1 to clear the NPC start, or -2 to cancel";
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Prompt acceptValidatedInput(ConversationContext context, Number input) {
|
||||
|
||||
if (input.intValue() > 0) {
|
||||
if (input.intValue() > -1) {
|
||||
|
||||
if (quests.citizens.getNPCRegistry().getById(input.intValue()) == null) {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + "No NPC exists with that id!");
|
||||
@ -410,10 +410,10 @@ public class QuestFactory implements ConversationAbandonedListener {
|
||||
context.setSessionData("npcStart", input.intValue());
|
||||
return new CreateMenuPrompt();
|
||||
|
||||
} else if (input.intValue() == 0) {
|
||||
} else if (input.intValue() == -1) {
|
||||
context.setSessionData("npcStart", null);
|
||||
return new CreateMenuPrompt();
|
||||
} else if (input.intValue() == -1) {
|
||||
} else if (input.intValue() == -2) {
|
||||
return new CreateMenuPrompt();
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + "No NPC exists with that id!");
|
||||
@ -854,9 +854,6 @@ public class QuestFactory implements ConversationAbandonedListener {
|
||||
LinkedList<String> shearColors;
|
||||
LinkedList<Integer> shearAmounts;
|
||||
|
||||
LinkedList<Integer> npcKillIds;
|
||||
LinkedList<Integer> npcKillAmounts;
|
||||
|
||||
String script;
|
||||
String event;
|
||||
Long delay;
|
||||
@ -912,9 +909,6 @@ public class QuestFactory implements ConversationAbandonedListener {
|
||||
shearColors = null;
|
||||
shearAmounts = null;
|
||||
|
||||
npcKillIds = null;
|
||||
npcKillAmounts = null;
|
||||
|
||||
script = null;
|
||||
event = null;
|
||||
delay = null;
|
||||
@ -992,11 +986,6 @@ public class QuestFactory implements ConversationAbandonedListener {
|
||||
shearAmounts = (LinkedList<Integer>) cc.getSessionData(pref + "shearAmounts");
|
||||
}
|
||||
|
||||
if (cc.getSessionData(pref + "npcIdsToKill") != null) {
|
||||
npcKillIds = (LinkedList<Integer>) cc.getSessionData(pref + "npcIdsToKill");
|
||||
npcKillAmounts = (LinkedList<Integer>) cc.getSessionData(pref + "npcAmountsToKill");
|
||||
}
|
||||
|
||||
if (cc.getSessionData(pref + "event") != null) {
|
||||
event = (String) cc.getSessionData(pref + "event");
|
||||
}
|
||||
@ -1042,8 +1031,6 @@ public class QuestFactory implements ConversationAbandonedListener {
|
||||
stage.set("mob-tame-amounts", tameAmounts);
|
||||
stage.set("sheep-to-shear", shearColors);
|
||||
stage.set("sheep-amounts", shearAmounts);
|
||||
stage.set("npc-ids-to-kill", npcKillIds);
|
||||
stage.set("npc-kill-amounts", npcKillAmounts);
|
||||
stage.set("script-to-run", script);
|
||||
stage.set("event", event);
|
||||
stage.set("delay", delay);
|
||||
|
@ -363,7 +363,7 @@ public class Quester {
|
||||
|
||||
if (((Boolean) e.getValue()) == false) {
|
||||
|
||||
unfinishedObjectives.add(ChatColor.GREEN + "Talk to " + n.getName());
|
||||
unfinishedObjectives.add(ChatColor.GREEN + "Talk to " + n.getFullName());
|
||||
|
||||
} else {
|
||||
|
||||
@ -383,11 +383,11 @@ public class Quester {
|
||||
|
||||
if (citizenNumKilled.get(citizensKilled.indexOf(n2)) < currentStage.citizenNumToKill.get(currentStage.citizensToKill.indexOf(n))) {
|
||||
|
||||
unfinishedObjectives.add(ChatColor.GREEN + "Kill " + n.getName() + ChatColor.GREEN + citizenNumKilled.get(currentStage.citizensToKill.indexOf(n)) + "/" + currentStage.citizenNumToKill.get(currentStage.citizensToKill.indexOf(n)));
|
||||
unfinishedObjectives.add(ChatColor.GREEN + "Kill " + n.getName() + ChatColor.GREEN + " " + citizenNumKilled.get(currentStage.citizensToKill.indexOf(n)) + "/" + currentStage.citizenNumToKill.get(currentStage.citizensToKill.indexOf(n)));
|
||||
|
||||
} else {
|
||||
|
||||
finishedObjectives.add(ChatColor.GRAY + "Kill " + n.getName() + currentStage.citizenNumToKill.get(currentStage.citizensToKill.indexOf(n)) + "/" + currentStage.citizenNumToKill.get(currentStage.citizensToKill.indexOf(n)));
|
||||
finishedObjectives.add(ChatColor.GRAY + "Kill " + n.getName() + " " + currentStage.citizenNumToKill.get(currentStage.citizensToKill.indexOf(n)) + "/" + currentStage.citizenNumToKill.get(currentStage.citizensToKill.indexOf(n)));
|
||||
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
public static Permission permission = null;
|
||||
public static mcMMO mcmmo = null;
|
||||
public static boolean snoop = true;
|
||||
public static boolean npcEffects = true;
|
||||
public static String effect = "note";
|
||||
List<String> questerBlacklist = new LinkedList<String>();
|
||||
ConversationFactory conversationFactory;
|
||||
QuestFactory questFactory;
|
||||
@ -48,6 +50,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
Vault vault = null;
|
||||
public CitizensPlugin citizens;
|
||||
PlayerListener pListener;
|
||||
NpcEffectThread effListener;
|
||||
NpcListener npcListener;
|
||||
public Denizen denizen = null;
|
||||
QuestTaskTrigger trigger;
|
||||
@ -69,6 +72,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
public void onEnable() {
|
||||
|
||||
pListener = new PlayerListener(this);
|
||||
effListener = new NpcEffectThread(this);
|
||||
npcListener = new NpcListener(this);
|
||||
|
||||
this.conversationFactory = new ConversationFactory(this)
|
||||
@ -154,6 +158,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
|
||||
getServer().getPluginManager().registerEvents(pListener, this);
|
||||
if(npcEffects)
|
||||
getServer().getScheduler().scheduleSyncRepeatingTask(this, effListener, 20, 20);
|
||||
printInfo("[Quests] Enabled.");
|
||||
|
||||
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
|
||||
@ -233,7 +239,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
@Override
|
||||
public String getPrefix(ConversationContext context) {
|
||||
|
||||
return ChatColor.GREEN + "Quests: " + ChatColor.GRAY;
|
||||
return "" + ChatColor.GRAY;
|
||||
|
||||
}
|
||||
}
|
||||
@ -247,16 +253,15 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
showQuestReqs = config.getBoolean("show-requirements");
|
||||
allowQuitting = config.getBoolean("allow-quitting");
|
||||
snoop = config.getBoolean("snoop", true);
|
||||
npcEffects = config.getBoolean("show-npc-effects", true);
|
||||
effect = config.getString("npc-effect", "note");
|
||||
debug = config.getBoolean("debug-mode");
|
||||
killDelay = config.getInt("kill-delay");
|
||||
for (String s : config.getStringList("quester-blacklist")) {
|
||||
|
||||
for (String s : config.getStringList("quester-blacklist"))
|
||||
questerBlacklist.add(s);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void printHelp(Player player) {
|
||||
|
||||
player.sendMessage(ChatColor.GOLD + "- Quests -");
|
||||
@ -3906,4 +3911,20 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean hasQuest(NPC npc, Quester quester){
|
||||
|
||||
for(Quest quest : quests){
|
||||
|
||||
if(quest.npcStart != null && quester.completedQuests.contains(quest.name) == false){
|
||||
|
||||
if(quest.npcStart.getId() == npc.getId())
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
19
src/me/blackvein/quests/ReflectionUtilities.java
Normal file
19
src/me/blackvein/quests/ReflectionUtilities.java
Normal file
@ -0,0 +1,19 @@
|
||||
package me.blackvein.quests;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public class ReflectionUtilities {
|
||||
|
||||
public static void setValue(Object instance, String fieldName, Object value) throws Exception {
|
||||
Field field = instance.getClass().getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
field.set(instance, value);
|
||||
}
|
||||
|
||||
public static Object getValue(Object instance, String fieldName) throws Exception {
|
||||
Field field = instance.getClass().getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
return field.get(instance);
|
||||
}
|
||||
|
||||
}
|
12
src/me/blackvein/quests/particles
Normal file
12
src/me/blackvein/quests/particles
Normal file
@ -0,0 +1,12 @@
|
||||
enchant
|
||||
crit
|
||||
spell
|
||||
magiccrit
|
||||
mobspell
|
||||
note
|
||||
portal
|
||||
dust
|
||||
witch
|
||||
snowball
|
||||
splash
|
||||
smoke
|
@ -46,7 +46,7 @@ public class CreateStagePrompt extends FixedSetPrompt {
|
||||
|
||||
public CreateStagePrompt(int stageNum, QuestFactory qf, CitizensPlugin cit) {
|
||||
|
||||
super("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21");
|
||||
super("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20");
|
||||
this.stageNum = stageNum;
|
||||
this.pref = "stage" + stageNum;
|
||||
this.citizens = cit;
|
||||
@ -279,62 +279,42 @@ public class CreateStagePrompt extends FixedSetPrompt {
|
||||
|
||||
}
|
||||
|
||||
if(questFactory.quests.citizens != null){
|
||||
|
||||
if (context.getSessionData(pref + "npcIdsToKill") == null) {
|
||||
text += PINK + "" + BOLD + "15 " + RESET + PURPLE + "- Kill NPCs " + GRAY + "(None set)\n";
|
||||
} else {
|
||||
text += PINK + "" + BOLD + "15 " + RESET + PURPLE + "- Kill NPCs\n";
|
||||
|
||||
LinkedList<Integer> npcs = (LinkedList<Integer>) context.getSessionData(pref + "npcIdsToKill");
|
||||
LinkedList<Integer> amounts = (LinkedList<Integer>) context.getSessionData(pref + "npcAmountsToKill");
|
||||
|
||||
for (int i = 0; i < npcs.size(); i++) {
|
||||
text += GRAY + " - " + BLUE + citizens.getNPCRegistry().getById(npcs.get(i)).getName() + GRAY + " x " + AQUA + amounts.get(i) + "\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
text += GRAY + "" + BOLD + "15 " + RESET + GRAY + "- Kill NPCs " + GRAY + "(Citizens not installed)\n";
|
||||
}
|
||||
|
||||
if (context.getSessionData(pref + "event") == null) {
|
||||
text += PINK + "" + BOLD + "16 " + RESET + PURPLE + "- Event " + GRAY + "(None set)\n";
|
||||
text += PINK + "" + BOLD + "15 " + RESET + PURPLE + "- Event " + GRAY + "(None set)\n";
|
||||
} else {
|
||||
text += PINK + "" + BOLD + "16 " + RESET + PURPLE + "- Event " + GRAY + "(" + AQUA + context.getSessionData(pref + "event") + GRAY + ")\n";
|
||||
text += PINK + "" + BOLD + "15 " + RESET + PURPLE + "- Event " + GRAY + "(" + AQUA + context.getSessionData(pref + "event") + GRAY + ")\n";
|
||||
}
|
||||
|
||||
if (context.getSessionData(pref + "delay") == null) {
|
||||
text += PINK + "" + BOLD + "17 " + RESET + PURPLE + "- Delay " + GRAY + "(None set)\n";
|
||||
text += PINK + "" + BOLD + "16 " + RESET + PURPLE + "- Delay " + GRAY + "(None set)\n";
|
||||
} else {
|
||||
long time = (Long) context.getSessionData(pref + "delay");
|
||||
text += PINK + "" + BOLD + "17 " + RESET + PURPLE + "- Delay " + GRAY + "(" + AQUA + Quests.getTime(time) + GRAY + ")\n";
|
||||
text += PINK + "" + BOLD + "16 " + RESET + PURPLE + "- Delay " + GRAY + "(" + AQUA + Quests.getTime(time) + GRAY + ")\n";
|
||||
}
|
||||
|
||||
if(context.getSessionData(pref + "delay") == null){
|
||||
text += GRAY + "" + BOLD + "18 " + RESET + GRAY + "- Delay Message " + GRAY + "(No delay set)\n";
|
||||
text += GRAY + "" + BOLD + "17 " + RESET + GRAY + "- Delay Message " + GRAY + "(No delay set)\n";
|
||||
}else if(context.getSessionData(pref + "delayMessage") == null){
|
||||
text += PINK + "" + BOLD + "18 " + RESET + PURPLE + "- Delay Message " + GRAY + "(None set)\n";
|
||||
text += PINK + "" + BOLD + "17 " + RESET + PURPLE + "- Delay Message " + GRAY + "(None set)\n";
|
||||
}else{
|
||||
text += PINK + "" + BOLD + "18 " + RESET + PURPLE + "- Delay Message " + GRAY + "(" + AQUA + "\"" + context.getSessionData(pref + "delayMessage") + "\"" + GRAY + ")\n";
|
||||
text += PINK + "" + BOLD + "17 " + RESET + PURPLE + "- Delay Message " + GRAY + "(" + AQUA + "\"" + context.getSessionData(pref + "delayMessage") + "\"" + GRAY + ")\n";
|
||||
}
|
||||
|
||||
|
||||
if(questFactory.quests.denizen == null){
|
||||
text += GRAY + "" + BOLD + "19 " + RESET + GRAY + "- Denizen Script " + GRAY + "(Denizen not installed)\n";
|
||||
text += GRAY + "" + BOLD + "18 " + RESET + GRAY + "- Denizen Script " + GRAY + "(Denizen not installed)\n";
|
||||
}else{
|
||||
|
||||
if(context.getSessionData(pref + "denizen") == null){
|
||||
text += GRAY + "" + BOLD + "19 " + RESET + PURPLE + "- Denizen Script " + GRAY + "(None set)\n";
|
||||
text += GRAY + "" + BOLD + "18 " + RESET + PURPLE + "- Denizen Script " + GRAY + "(None set)\n";
|
||||
}else{
|
||||
text += PINK + "" + BOLD + "19 " + RESET + PURPLE + "- Denizen Script " + GRAY + "(" + AQUA + context.getSessionData(pref + "denizen") + GRAY + "\n";
|
||||
text += PINK + "" + BOLD + "18 " + RESET + PURPLE + "- Denizen Script " + GRAY + "(" + AQUA + context.getSessionData(pref + "denizen") + GRAY + "\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
text += RED + "" + BOLD + "20 " + RESET + PURPLE + "- Delete Stage\n";
|
||||
text += GREEN + "" + BOLD + "21 " + RESET + PURPLE + "- Done\n";
|
||||
text += RED + "" + BOLD + "19 " + RESET + PURPLE + "- Delete Stage\n";
|
||||
text += GREEN + "" + BOLD + "20 " + RESET + PURPLE + "- Done\n";
|
||||
|
||||
return text;
|
||||
|
||||
@ -382,31 +362,24 @@ public class CreateStagePrompt extends FixedSetPrompt {
|
||||
} else if (input.equalsIgnoreCase("14")) {
|
||||
return new ShearListPrompt();
|
||||
} else if (input.equalsIgnoreCase("15")) {
|
||||
if(questFactory.quests.citizens != null)
|
||||
return new NPCKillListPrompt();
|
||||
else{
|
||||
context.getForWhom().sendRawMessage(RED + "Citizens is not installed!");
|
||||
return new CreateStagePrompt(stageNum, questFactory, citizens);
|
||||
}
|
||||
} else if (input.equalsIgnoreCase("16")) {
|
||||
return new EventPrompt();
|
||||
} else if (input.equalsIgnoreCase("17")) {
|
||||
} else if (input.equalsIgnoreCase("16")) {
|
||||
return new DelayPrompt();
|
||||
} else if (input.equalsIgnoreCase("18")) {
|
||||
} else if (input.equalsIgnoreCase("17")) {
|
||||
if(context.getSessionData(pref + "delay") == null){
|
||||
context.getForWhom().sendRawMessage(RED + "You must set a delay first!");
|
||||
return new CreateStagePrompt(stageNum, questFactory, citizens);
|
||||
}else
|
||||
return new DelayMessagePrompt();
|
||||
} else if (input.equalsIgnoreCase("19")) {
|
||||
} else if (input.equalsIgnoreCase("18")) {
|
||||
if(questFactory.quests.denizen == null){
|
||||
context.getForWhom().sendRawMessage(RED + "Denizen is not installed!");
|
||||
return new CreateStagePrompt(stageNum, questFactory, citizens);
|
||||
}else
|
||||
return new DenizenPrompt();
|
||||
} else if (input.equalsIgnoreCase("20")) {
|
||||
} else if (input.equalsIgnoreCase("19")) {
|
||||
return new DeletePrompt();
|
||||
} else if (input.equalsIgnoreCase("21")) {
|
||||
} else if (input.equalsIgnoreCase("20")) {
|
||||
return new StagesPrompt(questFactory);
|
||||
} else {
|
||||
return new CreateStagePrompt(stageNum, questFactory, citizens);
|
||||
@ -3468,196 +3441,4 @@ public class CreateStagePrompt extends FixedSetPrompt {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private class NPCKillListPrompt extends FixedSetPrompt {
|
||||
|
||||
public NPCKillListPrompt() {
|
||||
|
||||
super("1", "2", "3", "4", "5", "6");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPromptText(ConversationContext context) {
|
||||
|
||||
String text = GOLD + "- Kill NPCs -\n";
|
||||
if (context.getSessionData(pref + "npcIdsToKill") == null) {
|
||||
text += BLUE + "" + BOLD + "1" + RESET + YELLOW + " - Set NPC IDs (None set)\n";
|
||||
text += GRAY + "2 - Set kill amounts (No NPC IDs set)\n";
|
||||
text += BLUE + "" + BOLD + "3" + RESET + YELLOW + " - Clear\n";
|
||||
text += BLUE + "" + BOLD + "4" + RESET + YELLOW + " - Done";
|
||||
} else {
|
||||
|
||||
text += BLUE + "" + BOLD + "1" + RESET + YELLOW + " - Set NPC IDs\n";
|
||||
for (int i : getNPCIds(context)) {
|
||||
|
||||
text += GRAY + " - " + AQUA + citizens.getNPCRegistry().getById(i).getName() + " (" + i + ")\n";
|
||||
|
||||
}
|
||||
|
||||
if (context.getSessionData(pref + "npcAmountsToKill") == null) {
|
||||
text += BLUE + "" + BOLD + "2" + RESET + YELLOW + " - Set kill amounts (None set)\n";
|
||||
} else {
|
||||
|
||||
text += BLUE + "" + BOLD + "2" + RESET + YELLOW + " - Set kill amounts\n";
|
||||
for (Integer i : getKillAmounts(context)) {
|
||||
|
||||
text += GRAY + " - " + AQUA + i + "\n";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
text += BLUE + "" + BOLD + "3" + RESET + YELLOW + " - Clear\n";
|
||||
text += BLUE + "" + BOLD + "4" + RESET + YELLOW + " - Done";
|
||||
|
||||
}
|
||||
|
||||
return text;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
|
||||
|
||||
if (input.equalsIgnoreCase("1")) {
|
||||
return new NPCIDsToKillPrompt();
|
||||
} else if (input.equalsIgnoreCase("2")) {
|
||||
if (context.getSessionData(pref + "npcIdsToKill") == null) {
|
||||
context.getForWhom().sendRawMessage(RED + "You must set NPC ids first!");
|
||||
return new NPCKillListPrompt();
|
||||
} else {
|
||||
return new NPCAmountsToKillPrompt();
|
||||
}
|
||||
} else if (input.equalsIgnoreCase("3")) {
|
||||
context.getForWhom().sendRawMessage(YELLOW + "Kill NPCs objective cleared.");
|
||||
context.setSessionData(pref + "npcIdsToKill", null);
|
||||
context.setSessionData(pref + "npcAmountsToKill", null);
|
||||
return new NPCKillListPrompt();
|
||||
} else if (input.equalsIgnoreCase("4")) {
|
||||
|
||||
int one;
|
||||
int two;
|
||||
|
||||
if (context.getSessionData(pref + "npcIdsToKill") != null) {
|
||||
one = ((List<Integer>) context.getSessionData(pref + "npcIdsToKill")).size();
|
||||
} else {
|
||||
one = 0;
|
||||
}
|
||||
|
||||
if (context.getSessionData(pref + "npcAmountsToKill") != null) {
|
||||
two = ((List<Integer>) context.getSessionData(pref + "npcAmountsToKill")).size();
|
||||
} else {
|
||||
two = 0;
|
||||
}
|
||||
|
||||
if (one == two) {
|
||||
|
||||
return new CreateStagePrompt(stageNum, questFactory, citizens);
|
||||
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(RED + "The list sizes are not equal!");
|
||||
return new NPCKillListPrompt();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
private List<Integer> getNPCIds(ConversationContext context) {
|
||||
return (List<Integer>) context.getSessionData(pref + "npcIdsToKill");
|
||||
}
|
||||
|
||||
private List<Integer> getKillAmounts(ConversationContext context) {
|
||||
return (List<Integer>) context.getSessionData(pref + "npcAmountsToKill");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class NPCIDsToKillPrompt extends StringPrompt {
|
||||
|
||||
@Override
|
||||
public String getPromptText(ConversationContext context) {
|
||||
|
||||
return YELLOW + "Enter NPC IDs, separating each one by a space, or enter \'cancel\' to return.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Prompt acceptInput(ConversationContext context, String input) {
|
||||
|
||||
if (input.equalsIgnoreCase("cancel") == false) {
|
||||
|
||||
String[] args = input.split(" ");
|
||||
LinkedList<Integer> npcs = new LinkedList<Integer>();
|
||||
for (String s : args) {
|
||||
|
||||
try {
|
||||
|
||||
Integer i = Integer.parseInt(s);
|
||||
|
||||
if (citizens.getNPCRegistry().getById(i) != null) {
|
||||
npcs.add(i);
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(PINK + "" + i + RED + " is not a valid NPC ID!");
|
||||
return new NPCIDsToKillPrompt();
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
context.getForWhom().sendRawMessage(RED + "Invalid entry " + PINK + s + RED + ". Input was not a list of numbers!");
|
||||
return new NPCIDsToKillPrompt();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
context.setSessionData(pref + "npcIdsToKill", npcs);
|
||||
|
||||
}
|
||||
|
||||
return new NPCKillListPrompt();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private class NPCAmountsToKillPrompt extends StringPrompt {
|
||||
|
||||
@Override
|
||||
public String getPromptText(ConversationContext context) {
|
||||
|
||||
return YELLOW + "Enter kill amounts, separating each one by a space, or enter \'cancel\' to return.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Prompt acceptInput(ConversationContext context, String input) {
|
||||
|
||||
if (input.equalsIgnoreCase("cancel") == false) {
|
||||
|
||||
String[] args = input.split(" ");
|
||||
LinkedList<Integer> amounts = new LinkedList<Integer>();
|
||||
for (String s : args) {
|
||||
|
||||
try {
|
||||
|
||||
Integer i = Integer.parseInt(s);
|
||||
amounts.add(i);
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
context.getForWhom().sendRawMessage(RED + "Invalid entry " + PINK + s + RED + ". Input was not a list of numbers!");
|
||||
return new NPCAmountsToKillPrompt();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
context.setSessionData(pref + "npcAmountsToKill", amounts);
|
||||
|
||||
}
|
||||
|
||||
return new NPCKillListPrompt();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -166,9 +166,6 @@ public class StagesPrompt extends StringPrompt{
|
||||
cc.setSessionData(newPref + "shearColors", cc.getSessionData(pref + "shearColors"));
|
||||
cc.setSessionData(newPref + "shearAmounts", cc.getSessionData(pref + "shearAmounts"));
|
||||
|
||||
cc.setSessionData(newPref + "npcIdsToKill", cc.getSessionData(pref + "npcIdsToKill"));
|
||||
cc.setSessionData(newPref + "npcAmountsToKill", cc.getSessionData(pref + "npcAmountsToKill"));
|
||||
|
||||
cc.setSessionData(newPref + "event", cc.getSessionData(pref + "event"));
|
||||
|
||||
cc.setSessionData(newPref + "delay", cc.getSessionData(pref + "delay"));
|
||||
@ -225,9 +222,6 @@ public class StagesPrompt extends StringPrompt{
|
||||
cc.setSessionData(pref + "shearColors", null);
|
||||
cc.setSessionData(pref + "shearAmounts", null);
|
||||
|
||||
cc.setSessionData(pref + "npcIdsToKill", null);
|
||||
cc.setSessionData(pref + "npcAmountsToKill", null);
|
||||
|
||||
cc.setSessionData(pref + "event", null);
|
||||
|
||||
cc.setSessionData(pref + "delay", null);
|
||||
|
@ -44,9 +44,6 @@ stage#tameAmounts
|
||||
stage#shearColors
|
||||
stage#shearAmounts
|
||||
|
||||
stage#npcIdsToKill
|
||||
stage#npcAmountsToKill
|
||||
|
||||
stage#event
|
||||
|
||||
stage#delay
|
||||
|
Loading…
Reference in New Issue
Block a user