mirror of
https://github.com/PikaMug/Quests.git
synced 2024-11-21 18:15:32 +01:00
Add support for ZNPCsPlus 2.x (#2161)
This commit is contained in:
parent
2e6ab6c038
commit
90a38e06ae
12
core/pom.xml
12
core/pom.xml
@ -59,6 +59,12 @@
|
||||
<id>codemc-snapshots</id>
|
||||
<url>https://repo.codemc.io/repository/maven-snapshots/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<!-- Pyr's Repo (ZNPCsPlus 2.X) -->
|
||||
<id>pyr-snapshots</id>
|
||||
<name>Pyr's Repo</name>
|
||||
<url>https://repo.pyr.lol/snapshots</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
@ -140,6 +146,12 @@
|
||||
<version>271b087586</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>lol.pyr</groupId>
|
||||
<artifactId>znpcsplus-api</artifactId>
|
||||
<version>2.0.0-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.PikaMug</groupId>
|
||||
<artifactId>Unite</artifactId>
|
||||
|
@ -22,15 +22,7 @@ import me.pikamug.quests.convo.misc.QuestAcceptPrompt;
|
||||
import me.pikamug.quests.dependencies.BukkitDenizenTrigger;
|
||||
import me.pikamug.quests.dependencies.BukkitDependencies;
|
||||
import me.pikamug.quests.interfaces.ReloadCallback;
|
||||
import me.pikamug.quests.listeners.BukkitBlockListener;
|
||||
import me.pikamug.quests.listeners.BukkitCitizensListener;
|
||||
import me.pikamug.quests.listeners.BukkitCommandManager;
|
||||
import me.pikamug.quests.listeners.BukkitConvoListener;
|
||||
import me.pikamug.quests.listeners.BukkitItemListener;
|
||||
import me.pikamug.quests.listeners.BukkitPartiesListener;
|
||||
import me.pikamug.quests.listeners.BukkitPlayerListener;
|
||||
import me.pikamug.quests.listeners.BukkitUniteListener;
|
||||
import me.pikamug.quests.listeners.BukkitZnpcsListener;
|
||||
import me.pikamug.quests.listeners.*;
|
||||
import me.pikamug.quests.logging.BukkitQuestsLog4JFilter;
|
||||
import me.pikamug.quests.storage.implementation.jar.BukkitModuleJarStorage;
|
||||
import me.pikamug.quests.storage.implementation.ModuleStorageImpl;
|
||||
@ -109,6 +101,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
private BukkitItemListener itemListener;
|
||||
private BukkitCitizensListener citizensListener;
|
||||
private BukkitZnpcsListener znpcsListener;
|
||||
private BukkitZnpcsPlusListener znpcsPlusListener;
|
||||
private BukkitPlayerListener playerListener;
|
||||
private BukkitNpcEffectThread effectThread;
|
||||
private BukkitPlayerMoveThread moveThread;
|
||||
@ -148,6 +141,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
itemListener = new BukkitItemListener(this);
|
||||
citizensListener = new BukkitCitizensListener(this);
|
||||
znpcsListener = new BukkitZnpcsListener(this);
|
||||
znpcsPlusListener = new BukkitZnpcsPlusListener(this);
|
||||
playerListener = new BukkitPlayerListener(this);
|
||||
uniteListener = new BukkitUniteListener();
|
||||
partiesListener = new BukkitPartiesListener();
|
||||
@ -222,6 +216,9 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
if (depends.getZnpcsPlus() != null) {
|
||||
getServer().getPluginManager().registerEvents(getZnpcsListener(), this);
|
||||
}
|
||||
if (depends.getZnpcsPlusApi() != null) {
|
||||
getServer().getPluginManager().registerEvents(getZNpcsPlusListener(), this);
|
||||
}
|
||||
getServer().getPluginManager().registerEvents(getPlayerListener(), this);
|
||||
if (configSettings.getStrictPlayerMovement() > 0) {
|
||||
final long ticks = configSettings.getStrictPlayerMovement() * 20L;
|
||||
@ -522,6 +519,10 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
return znpcsListener;
|
||||
}
|
||||
|
||||
public BukkitZnpcsPlusListener getZNpcsPlusListener() {
|
||||
return znpcsPlusListener;
|
||||
}
|
||||
|
||||
public BukkitPlayerListener getPlayerListener() {
|
||||
return playerListener;
|
||||
}
|
||||
@ -606,8 +607,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
}
|
||||
|
||||
/**
|
||||
* Load quests, actions, conditions, and modules
|
||||
*
|
||||
* Load quests, actions, conditions, and modules<br>
|
||||
* At startup, this lets soft-depends (namely Citizens) fully load first
|
||||
*/
|
||||
private void delayLoadQuestInfo() {
|
||||
|
@ -101,7 +101,7 @@ public class ConditionEntityPrompt extends ConditionsEditorNumericPrompt {
|
||||
return text.toString();
|
||||
}
|
||||
case 2:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (context.getSessionData(Key.C_WHILE_RIDING_NPC) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -277,6 +277,9 @@ public class ConditionEntityPrompt extends ConditionsEditorNumericPrompt {
|
||||
final UUID uuid = UUID.fromString(s);
|
||||
if (plugin.getDependencies().getNpcEntity(uuid) != null && npcs != null) {
|
||||
npcs.add(uuid.toString());
|
||||
} else if (plugin.getDependencies().getZnpcsPlusApi() != null && npcs!= null
|
||||
&& plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) != null) {
|
||||
npcs.add(uuid.toString());
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
.replace("<input>", s));
|
||||
|
@ -105,7 +105,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY;
|
||||
}
|
||||
case 7:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
return ChatColor.BLUE;
|
||||
} else {
|
||||
return ChatColor.GRAY;
|
||||
@ -130,7 +130,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.YELLOW + BukkitLang.get("questEditorFinishMessage");
|
||||
case 4:
|
||||
if (context.getSessionData(Key.Q_START_NPC) == null || plugin.getDependencies().getCitizens() != null
|
||||
|| plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
|| plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
return ChatColor.YELLOW + BukkitLang.get("questEditorNPCStart");
|
||||
} else {
|
||||
return ChatColor.GRAY + BukkitLang.get("questEditorNPCStart");
|
||||
@ -148,7 +148,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY + BukkitLang.get("questWGSetRegion");
|
||||
}
|
||||
case 7:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
return ChatColor.YELLOW + BukkitLang.get("questEditorSetGUI");
|
||||
} else {
|
||||
return ChatColor.GRAY + BukkitLang.get("questEditorSetGUI");
|
||||
@ -192,9 +192,9 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
+ ChatColor.RESET + ChatColor.GRAY + ")";
|
||||
case 4:
|
||||
if (context.getSessionData(Key.Q_START_NPC) == null && (plugin.getDependencies().getCitizens() != null
|
||||
|| plugin.getDependencies().getZnpcsPlus() != null)) {
|
||||
|| plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null)) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
} else if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
final UUID uuid = UUID.fromString((String) Objects.requireNonNull(context
|
||||
.getSessionData(Key.Q_START_NPC)));
|
||||
return ChatColor.GRAY + "(" + ChatColor.AQUA + plugin.getDependencies().getNpcName(uuid)
|
||||
@ -224,7 +224,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("notInstalled") + ")";
|
||||
}
|
||||
case 7:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (context.getSessionData(Key.Q_GUIDISPLAY) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -268,7 +268,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
case 3:
|
||||
return new QuestFinishMessagePrompt(context);
|
||||
case 4:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
return new QuestNPCStartPrompt(context);
|
||||
} else {
|
||||
return new QuestMainPrompt(context);
|
||||
@ -290,7 +290,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return new QuestMainPrompt(context);
|
||||
}
|
||||
case 7:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
return new QuestGuiDisplayPrompt(context);
|
||||
} else {
|
||||
return new QuestMainPrompt(context);
|
||||
@ -501,7 +501,8 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
if (!input.equalsIgnoreCase(BukkitLang.get("cmdCancel")) && !input.equalsIgnoreCase(BukkitLang.get("cmdClear"))) {
|
||||
try {
|
||||
final UUID uuid = UUID.fromString(input);
|
||||
if (plugin.getDependencies().getNpcEntity(uuid) == null) {
|
||||
if (plugin.getDependencies().getNpcEntity(uuid) == null && (plugin.getDependencies().getZnpcsPlusApi() == null
|
||||
|| plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) == null)) {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
.replace("<input>", input));
|
||||
return new QuestNPCStartPrompt(context);
|
||||
|
@ -93,7 +93,7 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
public String getAdditionalText(final ConversationContext context, final int number) {
|
||||
switch(number) {
|
||||
case 1:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (context.getSessionData(pref + Key.S_DELIVERY_ITEMS) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -117,7 +117,7 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY + " (" + BukkitLang.get("notInstalled") + ")";
|
||||
}
|
||||
case 2:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (context.getSessionData(pref + Key.S_NPCS_TO_TALK_TO) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -136,7 +136,7 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("notInstalled") + ")";
|
||||
}
|
||||
case 3:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (context.getSessionData(pref + Key.S_NPCS_TO_KILL) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -185,21 +185,21 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
protected Prompt acceptValidatedInput(final @NotNull ConversationContext context, final Number input) {
|
||||
switch(input.intValue()) {
|
||||
case 1:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
return new QuestNpcsDeliveryListPrompt(context);
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorNoCitizens"));
|
||||
return new QuestStageMainPrompt(stageNum, context);
|
||||
}
|
||||
case 2:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
return new QuestNpcsIdsToTalkToPrompt(context);
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorNoCitizens"));
|
||||
return new QuestStageMainPrompt(stageNum, context);
|
||||
}
|
||||
case 3:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
return new QuestNpcsKillListPrompt(context);
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorNoCitizens"));
|
||||
@ -454,6 +454,9 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
final UUID uuid = UUID.fromString(s);
|
||||
if (plugin.getDependencies().getNpcEntity(uuid) != null && npcs != null) {
|
||||
npcs.add(uuid.toString());
|
||||
} else if (plugin.getDependencies().getZnpcsPlusApi() != null && npcs!= null
|
||||
&& plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) != null) {
|
||||
npcs.add(uuid.toString());
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
.replace("<input>", s));
|
||||
@ -570,6 +573,9 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
final UUID uuid = UUID.fromString(s);
|
||||
if (plugin.getDependencies().getNpcEntity(uuid) != null && npcs != null) {
|
||||
npcs.add(uuid.toString());
|
||||
} else if (plugin.getDependencies().getZnpcsPlusApi() != null && npcs!= null
|
||||
&& plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) != null) {
|
||||
npcs.add(uuid.toString());
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
.replace("<input>", s));
|
||||
@ -648,7 +654,7 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
public String getAdditionalText(final ConversationContext context, final int number) {
|
||||
switch(number) {
|
||||
case 1:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (context.getSessionData(pref + Key.S_NPCS_TO_KILL) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -792,6 +798,9 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
final UUID uuid = UUID.fromString(s);
|
||||
if (plugin.getDependencies().getNpcEntity(uuid) != null && npcs != null) {
|
||||
npcs.add(uuid.toString());
|
||||
} else if (plugin.getDependencies().getZnpcsPlusApi() != null && npcs!= null
|
||||
&& plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) != null) {
|
||||
npcs.add(uuid.toString());
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
.replace("<input>", s));
|
||||
|
@ -21,13 +21,17 @@ import com.herocraftonline.heroes.characters.Hero;
|
||||
import com.herocraftonline.heroes.characters.classes.HeroClass;
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import lol.pyr.znpcsplus.ZNPCsPlus;
|
||||
import lol.pyr.znpcsplus.api.NpcApi;
|
||||
import lol.pyr.znpcsplus.api.NpcApiProvider;
|
||||
import lol.pyr.znpcsplus.api.entity.EntityProperty;
|
||||
import lol.pyr.znpcsplus.api.npc.Npc;
|
||||
import me.clip.placeholderapi.PlaceholderAPIPlugin;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.reflect.denizen.DenizenAPI;
|
||||
import me.pikamug.quests.dependencies.reflect.worldguard.WorldGuardAPI;
|
||||
import me.pikamug.quests.listeners.BukkitCitizensListener;
|
||||
import me.pikamug.quests.listeners.BukkitZnpcsListener;
|
||||
import me.pikamug.quests.player.Quester;
|
||||
import me.pikamug.quests.dependencies.reflect.denizen.DenizenAPI;
|
||||
import me.pikamug.quests.dependencies.reflect.worldguard.WorldGuardAPI;
|
||||
import me.clip.placeholderapi.PlaceholderAPIPlugin;
|
||||
import me.pikamug.unite.api.objects.PartyProvider;
|
||||
import net.citizensnpcs.api.CitizensPlugin;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
@ -43,12 +47,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import ro.niconeko.astralbooks.api.AstralBooks;
|
||||
import ro.niconeko.astralbooks.api.AstralBooksAPI;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class BukkitDependencies implements Dependencies {
|
||||
@ -66,6 +65,7 @@ public class BukkitDependencies implements Dependencies {
|
||||
private static DenizenAPI denizen = null;
|
||||
private static AstralBooksAPI astralBooks = null;
|
||||
public static ZNPCsPlus znpcsPlus = null;
|
||||
public static NpcApi znpcsPlusApi = null;
|
||||
private static PartiesAPI parties = null;
|
||||
private int npcEffectThread = -1;
|
||||
|
||||
@ -204,6 +204,7 @@ public class BukkitDependencies implements Dependencies {
|
||||
public void linkZnpcsPlus() {
|
||||
if (isPluginAvailable("ZNPCsPlus")) {
|
||||
try {
|
||||
Class.forName("lol.pyr.znpcsplus.ZNPCsPlus");
|
||||
znpcsPlus = (ZNPCsPlus) plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus");
|
||||
boolean found = false;
|
||||
for (final RegisteredListener listener : HandlerList.getRegisteredListeners(plugin)) {
|
||||
@ -217,8 +218,27 @@ public class BukkitDependencies implements Dependencies {
|
||||
plugin.getLogger().info("Successfully linked Quests with ZNPCsPlus "
|
||||
+ znpcsPlus.getDescription().getVersion());
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
plugin.getLogger().warning("Incompatible version of ZNPCsPlus found. ZNPCsPlus in Quests not enabled.");
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public NpcApi getZnpcsPlusApi() {
|
||||
if (znpcsPlusApi == null) {
|
||||
linkZnpcsPlusApi();
|
||||
}
|
||||
return znpcsPlusApi;
|
||||
}
|
||||
|
||||
public void linkZnpcsPlusApi() {
|
||||
if (isPluginAvailable("ZNPCsPlus")) {
|
||||
try {
|
||||
Class.forName("lol.pyr.znpcsplus.ZNpcsPlus");
|
||||
znpcsPlusApi = NpcApiProvider.get();
|
||||
startNpcEffectThread();
|
||||
//noinspection ConstantConditions
|
||||
plugin.getLogger().info("Successfully linked Quests with ZNPCsPlus " + plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus").getDescription().getVersion());
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -308,6 +328,10 @@ public class BukkitDependencies implements Dependencies {
|
||||
if (opt.isPresent()) {
|
||||
return opt.get().getLocation();
|
||||
}
|
||||
} else if (znpcsPlusApi != null && znpcsPlusApi.getNpcRegistry().getByUuid(uuid) != null) {
|
||||
Npc znpc = znpcsPlusApi.getNpcRegistry().getByUuid(uuid).getNpc();
|
||||
if (znpc.getWorld() == null) return null;
|
||||
return znpc.getLocation().toBukkitLocation(znpc.getWorld());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -338,6 +362,12 @@ public class BukkitDependencies implements Dependencies {
|
||||
return opt.get().getNpcPojo().getHologramLines().get(0);
|
||||
}
|
||||
}
|
||||
} else if (znpcsPlusApi != null && getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) != null) {
|
||||
Npc znpc = getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid).getNpc();
|
||||
EntityProperty<String> displayNameProperty = getZnpcsPlusApi().getPropertyRegistry().getByName("display_name", String.class);
|
||||
if (displayNameProperty != null && znpc.hasProperty(displayNameProperty)) {
|
||||
return znpc.getProperty(displayNameProperty);
|
||||
}
|
||||
}
|
||||
return "NPC";
|
||||
}
|
||||
@ -424,5 +454,6 @@ public class BukkitDependencies implements Dependencies {
|
||||
getVaultEconomy();
|
||||
getVaultPermission();
|
||||
getZnpcsPlus();
|
||||
getZnpcsPlusApi();
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
package me.pikamug.quests.events.quester;
|
||||
|
||||
import lol.pyr.znpcsplus.api.npc.Npc;
|
||||
import me.pikamug.quests.player.BukkitQuester;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.HandlerList;
|
||||
@ -18,6 +19,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
public class BukkitQuesterPostViewEffectEvent extends BukkitQuesterEvent {
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
private final Entity entity;
|
||||
private final Npc npc;
|
||||
private final String effect;
|
||||
private final boolean redoable;
|
||||
|
||||
@ -26,6 +28,15 @@ public class BukkitQuesterPostViewEffectEvent extends BukkitQuesterEvent {
|
||||
this.entity = entity;
|
||||
this.effect = effect;
|
||||
this.redoable = redoable;
|
||||
this.npc=null;
|
||||
}
|
||||
|
||||
public BukkitQuesterPostViewEffectEvent(final BukkitQuester quester, Npc npc, String effect, boolean redoable) {
|
||||
super(quester);
|
||||
this.npc = npc;
|
||||
this.effect = effect;
|
||||
this.redoable = redoable;
|
||||
this.entity = null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -37,6 +48,15 @@ public class BukkitQuesterPostViewEffectEvent extends BukkitQuesterEvent {
|
||||
return entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the npc involved in this event (only if using ZNPCsPlus 2.0.0 or higher)
|
||||
*
|
||||
* @return npc who is involved in this event
|
||||
*/
|
||||
public Npc getNpc() {
|
||||
return npc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the effect involved in this event
|
||||
*
|
||||
|
@ -0,0 +1,271 @@
|
||||
package me.pikamug.quests.listeners;
|
||||
|
||||
import lol.pyr.znpcsplus.api.event.NpcInteractEvent;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.npc.Npc;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.enums.ObjectiveType;
|
||||
import me.pikamug.quests.player.BukkitQuestProgress;
|
||||
import me.pikamug.quests.player.Quester;
|
||||
import me.pikamug.quests.quests.BukkitQuest;
|
||||
import me.pikamug.quests.quests.Quest;
|
||||
import me.pikamug.quests.quests.components.BukkitStage;
|
||||
import me.pikamug.quests.util.BukkitItemUtil;
|
||||
import me.pikamug.quests.util.BukkitLang;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.conversations.Conversation;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class BukkitZnpcsPlusListener implements Listener {
|
||||
|
||||
private final BukkitQuestsPlugin plugin;
|
||||
|
||||
public BukkitZnpcsPlusListener(final BukkitQuestsPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onNPCInteract(final NpcInteractEvent event) {
|
||||
if (plugin.getDependencies().getZnpcsPlusApi() == null) {
|
||||
return;
|
||||
}
|
||||
// Needed because the NpcInteractEvent is fired async
|
||||
plugin.getServer().getScheduler().runTask(plugin, () -> {
|
||||
if (event.getClickType().equals(InteractionType.LEFT_CLICK)) {
|
||||
if (plugin.getQuestFactory().getSelectingNpcs().contains(event.getPlayer().getUniqueId())) {
|
||||
if (event.getNpc() == null) {
|
||||
plugin.getLogger().severe("ZNPCsPlus was null while selecting by left-click");
|
||||
return;
|
||||
}
|
||||
event.getPlayer().acceptConversationInput(String.valueOf(event.getNpc().getUuid()));
|
||||
}
|
||||
} else if (event.getClickType().equals(InteractionType.RIGHT_CLICK)) {
|
||||
if (plugin.getQuestFactory().getSelectingNpcs().contains(event.getPlayer().getUniqueId())) {
|
||||
if (event.getNpc() == null) {
|
||||
plugin.getLogger().severe("ZNPCsPlus was null while selecting by right-click");
|
||||
return;
|
||||
}
|
||||
event.getPlayer().acceptConversationInput(String.valueOf(event.getNpc().getUuid()));
|
||||
}
|
||||
if (!event.getPlayer().isConversing()) {
|
||||
final Player player = event.getPlayer();
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
final BukkitStage currentStage = (BukkitStage) quester.getCurrentStage(quest);
|
||||
if (currentStage.containsObjective(ObjectiveType.DELIVER_ITEM)) {
|
||||
final ItemStack hand = player.getItemInHand();
|
||||
int currentIndex = -1;
|
||||
final LinkedList<Integer> matches = new LinkedList<>();
|
||||
int reasonCode = 0;
|
||||
for (final ItemStack is : currentStage.getItemsToDeliver()) {
|
||||
currentIndex++;
|
||||
reasonCode = BukkitItemUtil.compareItems(is, hand, true);
|
||||
if (reasonCode == 0) {
|
||||
matches.add(currentIndex);
|
||||
}
|
||||
}
|
||||
final Npc clicked = event.getNpc();
|
||||
if (!matches.isEmpty()) {
|
||||
for (final Integer match : matches) {
|
||||
final UUID uuid = currentStage.getItemDeliveryTargets().get(match);
|
||||
if (uuid.equals(clicked.getUuid())) {
|
||||
quester.deliverToNPC(quest, uuid, hand);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (!hand.getType().equals(Material.AIR)) {
|
||||
for (final UUID uuid : currentStage.getItemDeliveryTargets()) {
|
||||
if (uuid.equals(clicked.getUuid())) {
|
||||
String text = "";
|
||||
final boolean hasMeta = hand.getItemMeta() != null;
|
||||
if (hasMeta) {
|
||||
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.ITALIC
|
||||
+ (hand.getItemMeta().hasDisplayName() ? hand.getItemMeta().getDisplayName()
|
||||
+ ChatColor.GRAY + " (" : "");
|
||||
}
|
||||
text += ChatColor.AQUA + "<item>" + (hand.getDurability() != 0 ? (":" + ChatColor.BLUE
|
||||
+ hand.getDurability()) : "") + ChatColor.GRAY;
|
||||
if (hasMeta) {
|
||||
text += (hand.getItemMeta().hasDisplayName() ? ")" : "");
|
||||
}
|
||||
text += " x " + ChatColor.DARK_AQUA + hand.getAmount() + ChatColor.GRAY;
|
||||
if (plugin.getConfigSettings().canTranslateNames() && !hasMeta
|
||||
&& !hand.getItemMeta().hasDisplayName()) {
|
||||
plugin.getLocaleManager().sendMessage(player, BukkitLang
|
||||
.get(player, "questInvalidDeliveryItem").replace("<item>", text), hand
|
||||
.getType(), hand.getDurability(), null);
|
||||
} else {
|
||||
player.sendMessage(BukkitLang.get(player, "questInvalidDeliveryItem")
|
||||
.replace("<item>", text).replace("<item>", BukkitItemUtil.getName(hand)));
|
||||
}
|
||||
switch (reasonCode) {
|
||||
case 1:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "one item is null"));
|
||||
break;
|
||||
case 0:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "ERROR"));
|
||||
break;
|
||||
case -1:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "name"));
|
||||
break;
|
||||
case -2:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "amount"));
|
||||
break;
|
||||
case -3:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "durability"));
|
||||
break;
|
||||
case -4:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "display name or lore"));
|
||||
break;
|
||||
case -5:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "enchantments"));
|
||||
break;
|
||||
case -6:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "stored enchants"));
|
||||
break;
|
||||
case -7:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "item flags"));
|
||||
break;
|
||||
case -8:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "book data"));
|
||||
break;
|
||||
case -9:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "potion type"));
|
||||
break;
|
||||
case -10:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "fish variant"));
|
||||
break;
|
||||
default:
|
||||
player.sendMessage(ChatColor.GRAY + BukkitLang.get(player, "difference")
|
||||
.replace("<data>", "unknown"));
|
||||
}
|
||||
if (hasMeta) {
|
||||
if (hand.getType().equals(Material.ENCHANTED_BOOK)) {
|
||||
final EnchantmentStorageMeta esMeta = (EnchantmentStorageMeta) hand.getItemMeta();
|
||||
if (esMeta.hasStoredEnchants()) {
|
||||
for (final Map.Entry<Enchantment, Integer> e : esMeta.getStoredEnchants()
|
||||
.entrySet()) {
|
||||
final HashMap<Enchantment, Integer> single = new HashMap<>();
|
||||
single.put(e.getKey(), e.getValue());
|
||||
plugin.getLocaleManager().sendMessage(player, ChatColor.GRAY + "\u2515 "
|
||||
+ ChatColor.DARK_GREEN + "<enchantment> <level>\n", single);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
boolean hasObjective = false;
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
}
|
||||
if (quester.getCurrentStage(quest).containsObjective(ObjectiveType.TALK_TO_NPC)) {
|
||||
if (quester.getCurrentStage(quest).getNpcsToInteract().contains(event.getNpc().getUuid())) {
|
||||
final int npcIndex = quester.getCurrentStage(quest).getNpcsToInteract().indexOf(event.getNpc()
|
||||
.getUuid());
|
||||
if (quester.getQuestDataOrDefault(quest) != null && npcIndex > -1
|
||||
&& !((BukkitQuestProgress) quester.getQuestDataOrDefault(quest)).npcsInteracted.get(npcIndex)) {
|
||||
hasObjective = true;
|
||||
}
|
||||
quester.interactWithNPC(quest, event.getNpc().getUuid());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasObjective || !plugin.getQuestNpcUuids().contains(event.getNpc().getUuid())) {
|
||||
return;
|
||||
}
|
||||
boolean hasAtLeastOneGUI = false;
|
||||
final LinkedList<Quest> npcQuests = new LinkedList<>();
|
||||
for (final Quest quest : plugin.getLoadedQuests()) {
|
||||
final BukkitQuest bukkitQuest = (BukkitQuest) quest;
|
||||
if (quester.getCurrentQuests().containsKey(bukkitQuest)) {
|
||||
continue;
|
||||
}
|
||||
if (bukkitQuest.getNpcStart() != null && bukkitQuest.getNpcStart().equals(event.getNpc().getUuid())) {
|
||||
if (plugin.getConfigSettings().canIgnoreLockedQuests()
|
||||
&& (!quester.getCompletedQuests().contains(bukkitQuest)
|
||||
|| bukkitQuest.getPlanner().getCooldown() > -1)) {
|
||||
if (bukkitQuest.testRequirements(quester)) {
|
||||
npcQuests.add(bukkitQuest);
|
||||
if (bukkitQuest.getGUIDisplay() != null) {
|
||||
hasAtLeastOneGUI = true;
|
||||
}
|
||||
}
|
||||
} else if (!quester.getCompletedQuests().contains(bukkitQuest) || bukkitQuest.getPlanner().getCooldown() > -1) {
|
||||
npcQuests.add(bukkitQuest);
|
||||
if (bukkitQuest.getGUIDisplay() != null) {
|
||||
hasAtLeastOneGUI = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (npcQuests.size() == 1) {
|
||||
final BukkitQuest quest = (BukkitQuest) npcQuests.get(0);
|
||||
if (quester.canAcceptOffer(quest, true)) {
|
||||
quester.setQuestIdToTake(quest.getId());
|
||||
if (!plugin.getConfigSettings().canConfirmAccept()) {
|
||||
quester.takeQuest(quest, false);
|
||||
} else {
|
||||
if (quest.getGUIDisplay() != null) {
|
||||
quester.showGUIDisplay(event.getNpc().getUuid(), npcQuests);
|
||||
} else {
|
||||
for (final String msg : extracted(quester).split("<br>")) {
|
||||
player.sendMessage(msg);
|
||||
}
|
||||
plugin.getConversationFactory().buildConversation(player).begin();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (npcQuests.size() > 1) {
|
||||
if (hasAtLeastOneGUI) {
|
||||
quester.showGUIDisplay(event.getNpc().getUuid(), npcQuests);
|
||||
} else {
|
||||
final Conversation c = plugin.getNpcConversationFactory().buildConversation(player);
|
||||
c.getContext().setSessionData("npcQuests", npcQuests);
|
||||
//c.getContext().setSessionData("npc", event.getNpc().getGameProfile().getName());
|
||||
c.getContext().setSessionData("npc", plugin.getDependencies().getNpcName(event.getNpc().getUuid()));
|
||||
c.begin();
|
||||
}
|
||||
} else {
|
||||
BukkitLang.send(player, ChatColor.YELLOW + BukkitLang.get(player, "noMoreQuest"));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String extracted(final Quester quester) {
|
||||
final Quest quest = plugin.getQuestById(quester.getQuestIdToTake());
|
||||
return MessageFormat.format("{0}- {1}{2}{3} -\n\n{4}{5}\n", ChatColor.GOLD, ChatColor.DARK_PURPLE,
|
||||
quest.getName(), ChatColor.GOLD, ChatColor.RESET, quest.getDescription());
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@ import com.alessiodp.parties.api.interfaces.PartyPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import lol.pyr.znpcsplus.api.npc.Npc;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import me.pikamug.localelib.LocaleManager;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
@ -568,6 +569,19 @@ public class BukkitQuester implements Quester {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (plugin.getDependencies().getZnpcsPlusApi() != null &&
|
||||
plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) != null) {
|
||||
Npc znpc = plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid).getNpc();
|
||||
if (znpc.getWorld() != null && znpc.getWorld().equals(getPlayer().getWorld()) &&
|
||||
znpc.getLocation().toBukkitLocation(znpc.getWorld()).distance(getPlayer().getLocation()) > 6.0) {
|
||||
if (giveReason) {
|
||||
final String msg = BukkitLang.get(getPlayer(), "mustSpeakTo")
|
||||
.replace("<npc>", ChatColor.DARK_PURPLE + plugin.getDependencies().getNpcName(znpc.getUuid()) + ChatColor.YELLOW);
|
||||
sendMessage(ChatColor.YELLOW + msg);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (getCurrentQuests().size() >= plugin.getConfigSettings().getMaxQuests()
|
||||
&& plugin.getConfigSettings().getMaxQuests() > 0) {
|
||||
@ -3347,10 +3361,8 @@ public class BukkitQuester implements Quester {
|
||||
final String display = getCurrentStage(quest).getPasswordDisplays().get(index);
|
||||
bukkitQuestData.passwordsSaid.set(index, true);
|
||||
|
||||
plugin.getServer().getScheduler().runTask(plugin, () -> {
|
||||
finishObjective(quest, new BukkitObjective(type, null, new ItemStack(Material.AIR, 1),
|
||||
new ItemStack(Material.AIR, 1)), null, null, null, null, null, display, null);
|
||||
});
|
||||
plugin.getServer().getScheduler().runTask(plugin, () -> finishObjective(quest, new BukkitObjective(type, null, new ItemStack(Material.AIR, 1),
|
||||
new ItemStack(Material.AIR, 1)), null, null, null, null, null, display, null));
|
||||
|
||||
final int finalIndex = index;
|
||||
dispatchedQuestIDs.addAll(dispatchMultiplayerEverything(quest, type,
|
||||
@ -4384,8 +4396,7 @@ public class BukkitQuester implements Quester {
|
||||
}
|
||||
|
||||
/**
|
||||
* Forcibly set Quester's current stage, then update Quest Journal
|
||||
*
|
||||
* Forcibly set Quester's current stage, then update Quest Journal<br>
|
||||
* Does not save changes to disk. Consider calling {@link #saveData()} followed by {@link #loadData()}
|
||||
*
|
||||
* @param key The quest to set stage of
|
||||
|
@ -16,6 +16,7 @@ import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.herocraftonline.heroes.characters.Hero;
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import lol.pyr.znpcsplus.api.npc.Npc;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.actions.Action;
|
||||
@ -422,6 +423,11 @@ public class BukkitQuest implements Quest {
|
||||
targetLocation = opt.get().getLocation();
|
||||
}
|
||||
}
|
||||
if (plugin.getDependencies().getZnpcsPlusApi() != null
|
||||
&& plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) != null) {
|
||||
Npc znpc = plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid).getNpc();
|
||||
targetLocation = znpc.getLocation().toBukkitLocation(znpc.getWorld());
|
||||
}
|
||||
} else if (stage.getPlayersToKill() != null && stage.getPlayersToKill() > 0) {
|
||||
if (quester.getPlayer() == null) {
|
||||
return;
|
||||
|
@ -154,7 +154,9 @@ public class BukkitQuestFactory implements QuestFactory, ConversationAbandonedLi
|
||||
context.setSessionData(Key.Q_NAME, bukkitQuest.getName());
|
||||
context.setSessionData(Key.Q_ASK_MESSAGE, bukkitQuest.getDescription());
|
||||
context.setSessionData(Key.Q_FINISH_MESSAGE, bukkitQuest.getFinished());
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (plugin.getDependencies().getCitizens() != null
|
||||
|| plugin.getDependencies().getZnpcsPlus() != null
|
||||
|| plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (bukkitQuest.getNpcStart() != null) {
|
||||
context.setSessionData(Key.Q_START_NPC, bukkitQuest.getNpcStart().toString());
|
||||
}
|
||||
|
@ -10,6 +10,8 @@
|
||||
|
||||
package me.pikamug.quests.tasks;
|
||||
|
||||
import lol.pyr.znpcsplus.api.npc.Npc;
|
||||
import lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import me.pikamug.quests.enums.BukkitPreBuiltParticle;
|
||||
import me.pikamug.quests.player.BukkitQuester;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
@ -20,6 +22,7 @@ import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
@ -54,6 +57,20 @@ public class BukkitNpcEffectThread implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
Collection<? extends NpcEntry> znpcs = plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getAllPlayerMade();
|
||||
for (NpcEntry npc : znpcs) {
|
||||
if (npc.getNpc().getWorld() == null || player.getLocation().getWorld() == null) {
|
||||
return;
|
||||
}
|
||||
if (npc.getNpc().getWorld().equals(player.getLocation().getWorld())) {
|
||||
if (npc.getNpc().getLocation().toBukkitLocation(npc.getNpc().getWorld())
|
||||
.distanceSquared(player.getLocation()) < 24) {
|
||||
showConfigEffect(plugin.getQuester(player.getUniqueId()), npc.getNpc());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -76,11 +93,36 @@ public class BukkitNpcEffectThread implements Runnable {
|
||||
showEffect(quester.getPlayer(), entity, plugin.getConfigSettings().getRedoEffect());
|
||||
|
||||
event = new BukkitQuesterPostViewEffectEvent(quester, entity,
|
||||
plugin.getConfigSettings().getEffect(), true);
|
||||
plugin.getConfigSettings().getRedoEffect(), true);
|
||||
plugin.getServer().getPluginManager().callEvent(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display config setting particle effect above an {@link Npc} one time
|
||||
* @param quester Target quester to let view the effect
|
||||
* @param npc Target NPC to place the effect above
|
||||
*/
|
||||
public void showConfigEffect(final BukkitQuester quester, final Npc npc) {
|
||||
if (npc == null) return;
|
||||
final BukkitQuesterPostViewEffectEvent event;
|
||||
if (quester.canAcceptQuest(npc.getUuid())) {
|
||||
if (npc.getWorld() == null) return;
|
||||
showEffect(quester.getPlayer(), npc.getLocation().toBukkitLocation(npc.getWorld()).add(0, 2, 0), plugin.getConfigSettings().getEffect());
|
||||
|
||||
event = new BukkitQuesterPostViewEffectEvent(quester, npc,
|
||||
plugin.getConfigSettings().getEffect(), false);
|
||||
plugin.getServer().getPluginManager().callEvent(event);
|
||||
} else if (quester.canAcceptCompletedRedoableQuest(npc.getUuid())) {
|
||||
if (npc.getWorld() == null) return;
|
||||
showEffect(quester.getPlayer(), npc.getLocation().toBukkitLocation(npc.getWorld()).add(0, 2, 0), plugin.getConfigSettings().getRedoEffect());
|
||||
|
||||
event = new BukkitQuesterPostViewEffectEvent(quester, npc,
|
||||
plugin.getConfigSettings().getRedoEffect(), true);
|
||||
plugin.getServer().getPluginManager().callEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display specified particle effect above a Citizens NPC one time
|
||||
@ -111,13 +153,21 @@ public class BukkitNpcEffectThread implements Runnable {
|
||||
* @param effectType Value of {@link org.bukkit.Particle} or {@link BukkitPreBuiltParticle}
|
||||
*/
|
||||
public void showEffect(final Player player, final Entity entity, final String effectType) {
|
||||
if (player == null || entity == null) {
|
||||
showEffect(player, entity.getLocation().add(0, 2, 0), effectType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display specified particle effect at a location one time
|
||||
* @param player Target player to let view the effect
|
||||
* @param location Target location to place the effect at
|
||||
* @param effectType Value of {@link org.bukkit.Particle} or {@link BukkitPreBuiltParticle}
|
||||
*/
|
||||
public void showEffect(final Player player, final Location location, final String effectType) {
|
||||
if (player == null || location == null) {
|
||||
return;
|
||||
}
|
||||
final Location eyeLoc = entity.getLocation();
|
||||
eyeLoc.setY(eyeLoc.getY() + 2);
|
||||
try {
|
||||
BukkitParticleProvider.sendToPlayer(player, eyeLoc, effectType.toUpperCase());
|
||||
BukkitParticleProvider.sendToPlayer(player, location, effectType.toUpperCase());
|
||||
} catch (final NoClassDefFoundError e) {
|
||||
// Unsupported Minecraft version
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user