mirror of
https://github.com/PikaMug/Quests.git
synced 2025-02-11 01:51:20 +01:00
General API for NPC support (#2320)
* prepare for a generic NpcDependency * buildable NpcDependency * add EntityNpcDependency * hasNpc -> isNpc * apply EntityNpcDependency at some places * add FancyNpcs support * fix null check in ZnpcsPlusDependency * fire ZnpcsPlus interact event synchronously * comment on why to runTask on ZnpcsPlusListener * add kill NPC event for Citizens * small refactor in onNpcInteract * add LegacyZnpcsPlusDependency * remove FancyNpcs better make a separated addon * remove FancyNpcs from softdepend
This commit is contained in:
parent
d643ab1ebf
commit
c52227042f
@ -47,7 +47,7 @@
|
||||
<repository>
|
||||
<!-- PlaceholderAPI -->
|
||||
<id>papi-repo</id>
|
||||
<url>https://repo.extendedclip.com/releases</url>
|
||||
<url>https://repo.extendedclip.com/releases/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<!-- Heroes, Vault -->
|
||||
|
@ -23,16 +23,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.BukkitZnpcsApiListener;
|
||||
import me.pikamug.quests.listeners.BukkitZnpcsListener;
|
||||
import me.pikamug.quests.listeners.*;
|
||||
import me.pikamug.quests.logging.BukkitQuestsLog4JFilter;
|
||||
import me.pikamug.quests.module.CustomObjective;
|
||||
import me.pikamug.quests.module.CustomRequirement;
|
||||
@ -68,18 +59,9 @@ import org.bukkit.permissions.Permission;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.*;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@ -111,9 +93,6 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
private BukkitConvoListener convoListener;
|
||||
private BukkitBlockListener blockListener;
|
||||
private BukkitItemListener itemListener;
|
||||
private BukkitCitizensListener citizensListener;
|
||||
private BukkitZnpcsListener znpcsListener;
|
||||
private BukkitZnpcsApiListener znpcsPlusListener;
|
||||
private BukkitPlayerListener playerListener;
|
||||
private BukkitNpcEffectThread effectThread;
|
||||
private BukkitPlayerMoveThread moveThread;
|
||||
@ -152,9 +131,6 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
convoListener = new BukkitConvoListener();
|
||||
blockListener = new BukkitBlockListener(this);
|
||||
itemListener = new BukkitItemListener(this);
|
||||
citizensListener = new BukkitCitizensListener(this);
|
||||
znpcsListener = new BukkitZnpcsListener(this);
|
||||
znpcsPlusListener = new BukkitZnpcsApiListener(this);
|
||||
playerListener = new BukkitPlayerListener(this);
|
||||
uniteListener = new BukkitUniteListener();
|
||||
partiesListener = new BukkitPartiesListener();
|
||||
@ -238,11 +214,6 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
// 11 - Register listeners
|
||||
getServer().getPluginManager().registerEvents(getBlockListener(), this);
|
||||
getServer().getPluginManager().registerEvents(getItemListener(), this);
|
||||
depends.linkCitizens();
|
||||
if (depends.getZnpcsPlus() != null) {
|
||||
getServer().getPluginManager().registerEvents(getZnpcsListener(), this);
|
||||
}
|
||||
depends.linkZnpcsPlusApi();
|
||||
getServer().getPluginManager().registerEvents(getPlayerListener(), this);
|
||||
if (configSettings.getStrictPlayerMovement() > 0) {
|
||||
final long ticks = configSettings.getStrictPlayerMovement() * 20L;
|
||||
@ -430,10 +401,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
}
|
||||
}
|
||||
final BukkitQuester quester = new BukkitQuester(this, id);
|
||||
if (depends.getCitizens() != null) {
|
||||
if (depends.getCitizens().getNPCRegistry().getByUniqueId(id) != null) {
|
||||
return quester;
|
||||
}
|
||||
if (depends.isNpc(id)) {
|
||||
return quester;
|
||||
}
|
||||
final BukkitQuester q = new BukkitQuester(this, id);
|
||||
questers.add(q);
|
||||
@ -535,18 +504,6 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
return itemListener;
|
||||
}
|
||||
|
||||
public BukkitCitizensListener getCitizensListener() {
|
||||
return citizensListener;
|
||||
}
|
||||
|
||||
public BukkitZnpcsListener getZnpcsListener() {
|
||||
return znpcsListener;
|
||||
}
|
||||
|
||||
public BukkitZnpcsApiListener getZNpcsPlusListener() {
|
||||
return znpcsPlusListener;
|
||||
}
|
||||
|
||||
public BukkitPlayerListener getPlayerListener() {
|
||||
return playerListener;
|
||||
}
|
||||
@ -677,20 +634,6 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
|
||||
quester.findCompassTarget();
|
||||
questers.add(quester);
|
||||
}
|
||||
if (depends.getCitizens() != null) {
|
||||
if (depends.getCitizens().getNPCRegistry() == null) {
|
||||
getLogger().log(Level.SEVERE,
|
||||
"Citizens was enabled but NPCRegistry was null. Disabling linkage.");
|
||||
depends.unlinkCitizens();
|
||||
}
|
||||
}
|
||||
if (depends.getZnpcsPlusApi() != null) {
|
||||
if (depends.getZnpcsPlusApi().getNpcRegistry() == null) {
|
||||
getLogger().log(Level.SEVERE,
|
||||
"ZNPCsPlus was enabled but NpcRegistry was null. Disabling linkage.");
|
||||
depends.unlinkZnpcsPlusApi();
|
||||
}
|
||||
}
|
||||
customLoader.init();
|
||||
questLoader.importQuests();
|
||||
if (getConfigSettings().canDisableCommandFeedback()) {
|
||||
|
@ -10,12 +10,12 @@
|
||||
|
||||
package me.pikamug.quests.conditions;
|
||||
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.player.Quester;
|
||||
import me.pikamug.quests.quests.Quest;
|
||||
import me.pikamug.quests.util.BukkitItemUtil;
|
||||
import me.pikamug.quests.util.BukkitMiscUtil;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@ -214,15 +214,14 @@ public class BukkitCondition implements Condition {
|
||||
} else if (!npcsWhileRiding.isEmpty()) {
|
||||
boolean atLeastOne = false;
|
||||
for (final UUID n : npcsWhileRiding) {
|
||||
if (plugin.getDependencies().getCitizens() == null) {
|
||||
plugin.getLogger().warning("Citizens must be installed for condition ride NPC UUID " + n);
|
||||
if (!plugin.getDependencies().hasAnyEntityNpcDependencies()) {
|
||||
plugin.getLogger().warning("An Entity NPC plugin must be installed for condition ride NPC UUID " + n);
|
||||
return false;
|
||||
}
|
||||
if (player.getVehicle() == null) {
|
||||
return false;
|
||||
}
|
||||
if (player.getVehicle().equals(plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(n)
|
||||
.getEntity())) {
|
||||
if (player.getVehicle().equals(plugin.getDependencies().getNpcEntity(n))) {
|
||||
atLeastOne = true;
|
||||
break;
|
||||
}
|
||||
|
@ -27,11 +27,7 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Vehicle;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
|
||||
public class ConditionEntityPrompt extends ConditionsEditorNumericPrompt {
|
||||
@ -101,7 +97,7 @@ public class ConditionEntityPrompt extends ConditionsEditorNumericPrompt {
|
||||
return text.toString();
|
||||
}
|
||||
case 2:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
if (context.getSessionData(Key.C_WHILE_RIDING_NPC) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -275,10 +271,7 @@ public class ConditionEntityPrompt extends ConditionsEditorNumericPrompt {
|
||||
for (final String s : input.split(" ")) {
|
||||
try {
|
||||
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) {
|
||||
if (npcs != null && plugin.getDependencies().isNpc(uuid)) {
|
||||
npcs.add(uuid.toString());
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
|
@ -45,11 +45,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
|
||||
@ -108,7 +104,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY;
|
||||
}
|
||||
case 7:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
return ChatColor.BLUE;
|
||||
} else {
|
||||
return ChatColor.GRAY;
|
||||
@ -132,8 +128,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
case 3:
|
||||
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().getZnpcsPlusApi() != null) {
|
||||
if (context.getSessionData(Key.Q_START_NPC) == null || plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
return ChatColor.YELLOW + BukkitLang.get("questEditorNPCStart");
|
||||
} else {
|
||||
return ChatColor.GRAY + BukkitLang.get("questEditorNPCStart");
|
||||
@ -151,7 +146,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY + BukkitLang.get("questWGSetRegion");
|
||||
}
|
||||
case 7:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
return ChatColor.YELLOW + BukkitLang.get("questEditorSetGUI");
|
||||
} else {
|
||||
return ChatColor.GRAY + BukkitLang.get("questEditorSetGUI");
|
||||
@ -194,10 +189,9 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(Key.Q_FINISH_MESSAGE)
|
||||
+ ChatColor.RESET + ChatColor.GRAY + ")";
|
||||
case 4:
|
||||
if (context.getSessionData(Key.Q_START_NPC) == null && (plugin.getDependencies().getCitizens() != null
|
||||
|| plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null)) {
|
||||
if (context.getSessionData(Key.Q_START_NPC) == null && plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
} else if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
final UUID uuid = UUID.fromString((String) Objects.requireNonNull(context
|
||||
.getSessionData(Key.Q_START_NPC)));
|
||||
return ChatColor.GRAY + "(" + ChatColor.AQUA + plugin.getDependencies().getNpcName(uuid)
|
||||
@ -227,7 +221,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("notInstalled") + ")";
|
||||
}
|
||||
case 7:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
if (context.getSessionData(Key.Q_GUIDISPLAY) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -271,8 +265,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
case 3:
|
||||
return new QuestFinishMessagePrompt(context);
|
||||
case 4:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null
|
||||
|| plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
return new QuestNPCStartPrompt(context);
|
||||
} else {
|
||||
return new QuestMainPrompt(context);
|
||||
@ -295,8 +288,7 @@ public class QuestMainPrompt extends QuestsEditorNumericPrompt {
|
||||
return new QuestMainPrompt(context);
|
||||
}
|
||||
case 7:
|
||||
if (plugin.getDependencies().getCitizens() != null || plugin.getDependencies().getZnpcsPlus() != null
|
||||
|| plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
return new QuestGuiDisplayPrompt(context);
|
||||
} else {
|
||||
return new QuestMainPrompt(context);
|
||||
@ -507,8 +499,7 @@ 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 && (plugin.getDependencies().getZnpcsPlusApi() == null
|
||||
|| plugin.getDependencies().getZnpcsPlusApi().getNpcRegistry().getByUuid(uuid) == null)) {
|
||||
if (!plugin.getDependencies().isNpc(uuid)) {
|
||||
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 || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
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 || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
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 || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
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 || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
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 || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
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 || plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
return new QuestNpcsKillListPrompt(context);
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorNoCitizens"));
|
||||
@ -453,10 +453,7 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
for (final String s : input.split(" ")) {
|
||||
try {
|
||||
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) {
|
||||
if (npcs != null && plugin.getDependencies().isNpc(uuid)) {
|
||||
npcs.add(uuid.toString());
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
@ -575,10 +572,7 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
for (final String s : args) {
|
||||
try {
|
||||
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) {
|
||||
if (npcs != null && plugin.getDependencies().isNpc(uuid)) {
|
||||
npcs.add(uuid.toString());
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
@ -658,8 +652,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
|
||||
|| plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
if (context.getSessionData(pref + Key.S_NPCS_TO_KILL) == null) {
|
||||
return ChatColor.GRAY + "(" + BukkitLang.get("noneSet") + ")";
|
||||
} else {
|
||||
@ -801,10 +794,7 @@ public class QuestNpcsPrompt extends QuestsEditorNumericPrompt {
|
||||
for (final String s : args) {
|
||||
try {
|
||||
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) {
|
||||
if (npcs != null && plugin.getDependencies().isNpc(uuid)) {
|
||||
npcs.add(uuid.toString());
|
||||
} else {
|
||||
context.getForWhom().sendRawMessage(ChatColor.RED + BukkitLang.get("stageEditorInvalidNPC")
|
||||
|
@ -11,6 +11,7 @@
|
||||
package me.pikamug.quests.dependencies;
|
||||
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.npc.citizens.CitizensDependency;
|
||||
import me.pikamug.quests.player.Quester;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
|
||||
@ -28,12 +29,12 @@ public class BukkitDenizenTrigger {
|
||||
return false;
|
||||
}
|
||||
if (plugin.getDependencies().getDenizenApi().containsScript(scriptName)) {
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (plugin.getDependencies().getNpcDependency("Citizens") != null) {
|
||||
if (uuid == null) {
|
||||
plugin.getLogger().severe("NPC UUID was null for Denizen script named " + scriptName);
|
||||
return false;
|
||||
}
|
||||
final NPC npc = plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid);
|
||||
final NPC npc = ((CitizensDependency) plugin.getDependencies().getNpcDependency("Citizens")).getCitizens().getNPCRegistry().getByUniqueId(uuid);
|
||||
plugin.getDependencies().getDenizenApi().runTaskScript(scriptName, quester.getPlayer(), npc);
|
||||
} else {
|
||||
plugin.getDependencies().getDenizenApi().runTaskScript(scriptName, quester.getPlayer(), null);
|
||||
|
@ -2,9 +2,9 @@
|
||||
* Copyright (c) PikaMug and contributors
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
||||
* LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
@ -19,66 +19,60 @@ import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.herocraftonline.heroes.Heroes;
|
||||
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.npc.EntityNpcDependency;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import me.pikamug.quests.dependencies.npc.citizens.CitizensDependency;
|
||||
import me.pikamug.quests.dependencies.npc.znpcsplus.ZnpcsPlusDependency;
|
||||
import me.pikamug.quests.dependencies.npc.znpcsplus.legacy.LegacyZnpcsPlusDependency;
|
||||
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.BukkitZnpcsApiListener;
|
||||
import me.pikamug.quests.player.Quester;
|
||||
import me.pikamug.quests.util.BukkitConfigUtil;
|
||||
import me.pikamug.unite.api.objects.PartyProvider;
|
||||
import net.citizensnpcs.api.CitizensPlugin;
|
||||
import net.milkbowl.vault.economy.Economy;
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.plugin.RegisteredListener;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import ro.niconeko.astralbooks.api.AstralBooks;
|
||||
import ro.niconeko.astralbooks.api.AstralBooksAPI;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class BukkitDependencies implements Dependencies {
|
||||
|
||||
private final BukkitQuestsPlugin plugin;
|
||||
|
||||
private static final Set<PartyProvider> partyProviders = new HashSet<>();
|
||||
private static final List<NpcDependency> npcDependencies = new ArrayList<>();
|
||||
public static PlaceholderAPIPlugin placeholder = null;
|
||||
private static Economy economy = null;
|
||||
private static Permission permission = null;
|
||||
private static PartyProvider partyProvider = null;
|
||||
private static final Set<PartyProvider> partyProviders = new HashSet<>();
|
||||
private static WorldGuardAPI worldGuard = null;
|
||||
private static mcMMO mcmmo = null;
|
||||
private static Heroes heroes = null;
|
||||
public static PlaceholderAPIPlugin placeholder = null;
|
||||
public static CitizensPlugin citizens = null;
|
||||
private static DenizenAPI denizen = null;
|
||||
private static AstralBooksAPI astralBooks = null;
|
||||
public static ZNPCsPlus znpcsPlusLegacy = null;
|
||||
public static NpcApi znpcsPlusApi = null;
|
||||
private static PartiesAPI parties = null;
|
||||
private final BukkitQuestsPlugin plugin;
|
||||
private int npcEffectThread = -1;
|
||||
|
||||
|
||||
public BukkitDependencies(final BukkitQuestsPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
|
||||
public Economy getVaultEconomy() {
|
||||
if (economy == null && isPluginAvailable("Vault")) {
|
||||
if (!setupEconomy()) {
|
||||
@ -87,7 +81,7 @@ public class BukkitDependencies implements Dependencies {
|
||||
}
|
||||
return economy;
|
||||
}
|
||||
|
||||
|
||||
public Permission getVaultPermission() {
|
||||
if (permission == null && isPluginAvailable("Vault")) {
|
||||
if (!setupPermissions()) {
|
||||
@ -114,14 +108,14 @@ public class BukkitDependencies implements Dependencies {
|
||||
}
|
||||
return partyProviders;
|
||||
}
|
||||
|
||||
|
||||
public WorldGuardAPI getWorldGuardApi() {
|
||||
if (worldGuard == null && isPluginAvailable("WorldGuard")) {
|
||||
worldGuard = new WorldGuardAPI(plugin.getServer().getPluginManager().getPlugin("WorldGuard"));
|
||||
}
|
||||
return worldGuard;
|
||||
}
|
||||
|
||||
|
||||
public mcMMO getMcmmoClassic() {
|
||||
if (mcmmo == null && isPluginAvailable("mcMMO")) {
|
||||
try {
|
||||
@ -133,61 +127,82 @@ public class BukkitDependencies implements Dependencies {
|
||||
}
|
||||
return mcmmo;
|
||||
}
|
||||
|
||||
|
||||
public Heroes getHeroes() {
|
||||
if (heroes == null && isPluginAvailable("Heroes")) {
|
||||
heroes = (Heroes) plugin.getServer().getPluginManager().getPlugin("Heroes");
|
||||
}
|
||||
return heroes;
|
||||
}
|
||||
|
||||
|
||||
public PlaceholderAPIPlugin getPlaceholderApi() {
|
||||
if (placeholder == null && isPluginAvailable("PlaceholderAPI")) {
|
||||
placeholder = (PlaceholderAPIPlugin) plugin.getServer().getPluginManager().getPlugin("PlaceholderAPI");
|
||||
}
|
||||
return placeholder;
|
||||
}
|
||||
|
||||
public CitizensPlugin getCitizens() {
|
||||
if (citizens == null) {
|
||||
linkCitizens();
|
||||
}
|
||||
return citizens;
|
||||
|
||||
public List<NpcDependency> getNpcDependencies() {
|
||||
return npcDependencies;
|
||||
}
|
||||
|
||||
public void linkCitizens() {
|
||||
|
||||
public boolean hasAnyNpcDependencies() {
|
||||
return !npcDependencies.isEmpty();
|
||||
}
|
||||
|
||||
public boolean hasAnyEntityNpcDependencies() {
|
||||
for (final NpcDependency npcDependency : npcDependencies) {
|
||||
if (npcDependency instanceof EntityNpcDependency) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public NpcDependency getNpcDependency(final String dependencyName) {
|
||||
for (final NpcDependency npcDependency : npcDependencies) {
|
||||
if (npcDependency.getDependencyName().equalsIgnoreCase(dependencyName)) {
|
||||
return npcDependency;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void addNpcDependency(final NpcDependency npcDependency) {
|
||||
npcDependencies.add(npcDependency);
|
||||
plugin.getLogger().info("Successfully linked Quests with " + npcDependency.getDependencyName());
|
||||
startNpcEffectThread();
|
||||
}
|
||||
|
||||
private void initNpcDependency() {
|
||||
if (isPluginAvailable("Citizens")) {
|
||||
try {
|
||||
citizens = (CitizensPlugin) plugin.getServer().getPluginManager().getPlugin("Citizens");
|
||||
boolean found = false;
|
||||
for (final RegisteredListener listener : HandlerList.getRegisteredListeners(plugin)) {
|
||||
if (listener.getListener() instanceof BukkitCitizensListener) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
plugin.getServer().getPluginManager().registerEvents(plugin.getCitizensListener(), plugin);
|
||||
startNpcEffectThread();
|
||||
plugin.getLogger().info("Successfully linked Quests with Citizens "
|
||||
+ citizens.getDescription().getVersion());
|
||||
}
|
||||
addNpcDependency(new CitizensDependency(plugin));
|
||||
} catch (final Exception e) {
|
||||
plugin.getLogger().warning("Legacy version of Citizens found. Citizens in Quests not enabled.");
|
||||
}
|
||||
}
|
||||
if (isPluginAvailable("ZNPCsPlus")) {
|
||||
try {
|
||||
Class.forName("lol.pyr.znpcsplus.ZNPCsPlus"); // Check for 1.x classes
|
||||
addNpcDependency(new LegacyZnpcsPlusDependency(plugin));
|
||||
} catch (final Exception ignored) {
|
||||
}
|
||||
try {
|
||||
Class.forName("lol.pyr.znpcsplus.ZNpcsPlus"); // Check for 2.x classes
|
||||
addNpcDependency(new ZnpcsPlusDependency(plugin));
|
||||
} catch (final Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void unlinkCitizens() {
|
||||
citizens = null;
|
||||
}
|
||||
|
||||
|
||||
public DenizenAPI getDenizenApi() {
|
||||
if (denizen == null && isPluginAvailable("Denizen")) {
|
||||
denizen = new DenizenAPI();
|
||||
}
|
||||
return denizen;
|
||||
}
|
||||
|
||||
|
||||
public AstralBooksAPI getAstralBooksApi() {
|
||||
if (astralBooks == null && isPluginAvailable("AstralBooks")) {
|
||||
try {
|
||||
@ -200,59 +215,6 @@ public class BukkitDependencies implements Dependencies {
|
||||
return astralBooks;
|
||||
}
|
||||
|
||||
public ZNPCsPlus getZnpcsPlus() {
|
||||
if (znpcsPlusLegacy == null && isPluginAvailable("ZNPCsPlus")) {
|
||||
try {
|
||||
Class.forName("lol.pyr.znpcsplus.ZNPCsPlus");
|
||||
znpcsPlusLegacy = (ZNPCsPlus) plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus");
|
||||
startNpcEffectThread();
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
return znpcsPlusLegacy;
|
||||
}
|
||||
|
||||
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();
|
||||
boolean found = false;
|
||||
for (final RegisteredListener listener : HandlerList.getRegisteredListeners(plugin)) {
|
||||
if (listener.getListener() instanceof BukkitZnpcsApiListener) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
plugin.getServer().getPluginManager().registerEvents(plugin.getZNpcsPlusListener(), plugin);
|
||||
startNpcEffectThread();
|
||||
//noinspection ConstantConditions
|
||||
plugin.getLogger().info("Successfully linked Quests with ZNPCsPlus " + plugin.getServer().getPluginManager().getPlugin("ZNPCsPlus").getDescription().getVersion());
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void unlinkZnpcsPlusApi() {
|
||||
znpcsPlusApi = null;
|
||||
}
|
||||
|
||||
public Set<UUID> getZnpcsPlusUuids() {
|
||||
if (znpcsPlusLegacy != null && isPluginAvailable("ZNPCsPlus")) {
|
||||
return io.github.znetworkw.znpcservers.npc.NPC.all().stream()
|
||||
.map(io.github.znetworkw.znpcservers.npc.NPC::getUUID).collect(Collectors.toSet());
|
||||
}
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
public PartiesAPI getPartiesApi() {
|
||||
if (parties == null && isPluginAvailable("Parties")) {
|
||||
try {
|
||||
@ -264,13 +226,13 @@ public class BukkitDependencies implements Dependencies {
|
||||
}
|
||||
return parties;
|
||||
}
|
||||
|
||||
|
||||
public boolean isPluginAvailable(final String pluginName) {
|
||||
if (plugin.getServer().getPluginManager().getPlugin(pluginName) != null ) {
|
||||
if (plugin.getServer().getPluginManager().getPlugin(pluginName) != null) {
|
||||
try {
|
||||
if (!Objects.requireNonNull(plugin.getServer().getPluginManager().getPlugin(pluginName)).isEnabled()) {
|
||||
plugin.getLogger().warning(pluginName
|
||||
+ " was detected, but is not enabled! Fix "+ pluginName + " to allow linkage.");
|
||||
+ " was detected, but is not enabled! Fix " + pluginName + " to allow linkage.");
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
@ -317,76 +279,81 @@ public class BukkitDependencies implements Dependencies {
|
||||
}
|
||||
return partyProvider != null;
|
||||
}
|
||||
|
||||
|
||||
public boolean runDenizenScript(final String scriptName, final Quester quester, final UUID uuid) {
|
||||
return plugin.getDenizenTrigger().runDenizenScript(scriptName, quester, uuid);
|
||||
}
|
||||
|
||||
public @Nullable Location getNpcLocation(final UUID uuid) {
|
||||
if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) {
|
||||
return citizens.getNPCRegistry().getByUniqueId(uuid).getStoredLocation();
|
||||
} else if (znpcsPlusLegacy != null && getZnpcsPlusUuids().contains(uuid)) {
|
||||
final Optional<NPC> opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
|
||||
if (opt.isPresent()) {
|
||||
return opt.get().getLocation();
|
||||
Location location = null;
|
||||
for (final NpcDependency npcDependency : npcDependencies) {
|
||||
location = npcDependency.getLocation(uuid);
|
||||
if (location != null) {
|
||||
break;
|
||||
}
|
||||
} 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;
|
||||
return location;
|
||||
}
|
||||
|
||||
public @Nullable Entity getNpcEntity(final UUID uuid) {
|
||||
if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) {
|
||||
return citizens.getNPCRegistry().getByUniqueId(uuid).getEntity();
|
||||
} else if (znpcsPlusLegacy != null && getZnpcsPlusUuids().contains(uuid)) {
|
||||
final Optional<NPC> opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
|
||||
if (opt.isPresent()) {
|
||||
return (Entity) opt.get().getBukkitEntity();
|
||||
for (final NpcDependency npcDependency : npcDependencies) {
|
||||
if (!(npcDependency instanceof EntityNpcDependency)) {
|
||||
continue;
|
||||
}
|
||||
final Entity entity = ((EntityNpcDependency) npcDependency).getEntity(uuid);
|
||||
if (entity != null) {
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public @NotNull String getNpcName(final UUID uuid) {
|
||||
final Entity npc;
|
||||
String name = "NPC";
|
||||
if (citizens != null && citizens.getNPCRegistry().getByUniqueId(uuid) != null) {
|
||||
name = citizens.getNPCRegistry().getByUniqueId(uuid).getName();
|
||||
} else if (znpcsPlusLegacy != null && getZnpcsPlusUuids().contains(uuid)) {
|
||||
final Optional<NPC> opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
|
||||
if (opt.isPresent()) {
|
||||
npc = (Entity) opt.get().getBukkitEntity();
|
||||
if (npc.getCustomName() != null) {
|
||||
name = npc.getCustomName();
|
||||
} else {
|
||||
name = 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)) {
|
||||
name = znpc.getProperty(displayNameProperty);
|
||||
for (final NpcDependency npcDependency : npcDependencies) {
|
||||
final String npcName = npcDependency.getName(uuid);
|
||||
if (npcName != null) {
|
||||
name = npcName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return BukkitConfigUtil.parseString(name);
|
||||
}
|
||||
|
||||
public @Nullable UUID getUuidFromNpc(final Entity entity) {
|
||||
if (citizens != null && citizens.getNPCRegistry().isNPC(entity)) {
|
||||
return citizens.getNPCRegistry().getNPC(entity).getUniqueId();
|
||||
} else if (znpcsPlusLegacy != null && getZnpcsPlusUuids().contains(entity.getUniqueId())) {
|
||||
final Optional<NPC> opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(entity.getUniqueId())).findAny();
|
||||
if (opt.isPresent()) {
|
||||
return opt.get().getUUID();
|
||||
for (final NpcDependency npcDependency : npcDependencies) {
|
||||
if (!(npcDependency instanceof EntityNpcDependency)) {
|
||||
continue;
|
||||
}
|
||||
final UUID uuid = ((EntityNpcDependency) npcDependency).getId(entity);
|
||||
if (uuid != null) {
|
||||
return uuid;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isNpc(final UUID uuid) {
|
||||
for (final NpcDependency npcDependency : npcDependencies) {
|
||||
if (npcDependency.isNpc(uuid)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isNpc(final Entity entity) {
|
||||
for (final NpcDependency npcDependency : npcDependencies) {
|
||||
if (!(npcDependency instanceof EntityNpcDependency)) {
|
||||
continue;
|
||||
}
|
||||
if (((EntityNpcDependency) npcDependency).isNpc(entity)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void startNpcEffectThread() {
|
||||
if (npcEffectThread == -1 && plugin.getConfigSettings().canNpcEffects()) {
|
||||
npcEffectThread = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin,
|
||||
@ -402,7 +369,7 @@ public class BukkitDependencies implements Dependencies {
|
||||
public SkillType getMcMMOSkill(final String s) {
|
||||
return SkillType.getSkill(s);
|
||||
}
|
||||
|
||||
|
||||
public int getMcmmoSkillLevel(final SkillType st, final String player) {
|
||||
final McMMOPlayer mPlayer = UserManager.getPlayer(player);
|
||||
if (mPlayer == null) {
|
||||
@ -445,7 +412,7 @@ public class BukkitDependencies implements Dependencies {
|
||||
}
|
||||
|
||||
public void init() {
|
||||
getCitizens();
|
||||
initNpcDependency();
|
||||
getWorldGuardApi();
|
||||
getDenizenApi();
|
||||
getMcmmoClassic();
|
||||
@ -456,7 +423,5 @@ public class BukkitDependencies implements Dependencies {
|
||||
getPartyProvider();
|
||||
getVaultEconomy();
|
||||
getVaultPermission();
|
||||
getZnpcsPlus();
|
||||
getZnpcsPlusApi();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package me.pikamug.quests.dependencies.npc;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public interface EntityNpcDependency {
|
||||
boolean isNpc(final Entity entity);
|
||||
|
||||
@Nullable Entity getEntity(final UUID uuid);
|
||||
|
||||
@Nullable UUID getId(final Entity entity);
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package me.pikamug.quests.dependencies.npc;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiPredicate;
|
||||
|
||||
public interface NpcDependency {
|
||||
@NotNull String getDependencyName();
|
||||
|
||||
boolean isNpc(final UUID uuid);
|
||||
|
||||
@Nullable String getName(final UUID uuid);
|
||||
|
||||
@Nullable Location getLocation(final UUID uuid);
|
||||
|
||||
@NotNull List<UUID> getAllNpcIds();
|
||||
|
||||
@NotNull Map<UUID, Location> getNpcsByLocationPredicate(final BiPredicate<UUID, Location> predicate);
|
||||
|
||||
default @NotNull Map<UUID, Location> getNpcsByNearbyLocation(final Location location, final double radius) {
|
||||
if (location.getWorld() == null) return Collections.emptyMap();
|
||||
return getNpcsByLocationPredicate((uuid, npcLocation) ->
|
||||
npcLocation.getWorld().getName().equals(location.getWorld().getName()) && location.distance(npcLocation) < radius
|
||||
);
|
||||
}
|
||||
|
||||
default @NotNull Map<UUID, Location> getNpcsByNearbyLocationSquared(final Location location, final double radius) {
|
||||
if (location.getWorld() == null) return Collections.emptyMap();
|
||||
return getNpcsByLocationPredicate((uuid, npcLocation) ->
|
||||
npcLocation.getWorld().getName().equals(location.getWorld().getName()) && location.distanceSquared(npcLocation) < radius);
|
||||
}
|
||||
}
|
@ -1,24 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) PikaMug and contributors
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
||||
* LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
package me.pikamug.quests.dependencies.npc;
|
||||
|
||||
package me.pikamug.quests.listeners;
|
||||
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import io.github.znetworkw.znpcservers.npc.interaction.NPCInteractEvent;
|
||||
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.components.BukkitStage;
|
||||
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;
|
||||
@ -27,51 +15,38 @@ import org.bukkit.conversations.Conversation;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.entity.Projectile;
|
||||
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.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Listener for legacy ZNPCsPlus 1.x
|
||||
*/
|
||||
public class BukkitZnpcsListener implements Listener {
|
||||
public abstract class NpcListener implements Listener {
|
||||
protected final BukkitQuestsPlugin plugin;
|
||||
protected final NpcDependency npcDependency;
|
||||
|
||||
private final BukkitQuestsPlugin plugin;
|
||||
|
||||
public BukkitZnpcsListener(final BukkitQuestsPlugin plugin) {
|
||||
public NpcListener(final BukkitQuestsPlugin plugin, final NpcDependency npcDependency) {
|
||||
this.plugin = plugin;
|
||||
this.npcDependency = npcDependency;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onNPCInteract(final NPCInteractEvent event) {
|
||||
if (plugin.getDependencies().getZnpcsPlus() == null) {
|
||||
return;
|
||||
protected void onNpcInteract(Player player, UUID npcId, ClickType clickType) {
|
||||
if (plugin.getQuestFactory().getSelectingNpcs().contains(player.getUniqueId())) {
|
||||
if (npcId == null || !npcDependency.isNpc(npcId)) {
|
||||
plugin.getLogger().severe("NPC was null while selecting");
|
||||
return;
|
||||
}
|
||||
player.acceptConversationInput(String.valueOf(npcId));
|
||||
}
|
||||
if (event.isLeftClick()) {
|
||||
if (plugin.getQuestFactory().getSelectingNpcs().contains(event.getPlayer().getUniqueId())) {
|
||||
if (event.getNpc() == null) {
|
||||
plugin.getLogger().severe("ZNPC was null while selecting by left-click");
|
||||
return;
|
||||
}
|
||||
event.getPlayer().acceptConversationInput(String.valueOf(event.getNpc().getUUID()));
|
||||
}
|
||||
} else if (event.isRightClick()) {
|
||||
if (plugin.getQuestFactory().getSelectingNpcs().contains(event.getPlayer().getUniqueId())) {
|
||||
if (event.getNpc() == null) {
|
||||
plugin.getLogger().severe("ZNPC 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();
|
||||
if (clickType == ClickType.RIGHT) {
|
||||
if (!player.isConversing()) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
final BukkitStage currentStage = (BukkitStage) quester.getCurrentStage(quest);
|
||||
@ -87,18 +62,17 @@ public class BukkitZnpcsListener implements Listener {
|
||||
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())) {
|
||||
if (uuid.equals(npcId)) {
|
||||
quester.deliverToNPC(quest, uuid, hand);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (!hand.getType().equals(Material.AIR)) {
|
||||
for (final UUID uuid : currentStage.getItemDeliveryTargets()) {
|
||||
if (uuid.equals(clicked.getUUID())) {
|
||||
if (uuid.equals(npcId)) {
|
||||
String text = "";
|
||||
final boolean hasMeta = hand.getItemMeta() != null;
|
||||
if (hasMeta) {
|
||||
@ -200,18 +174,17 @@ public class BukkitZnpcsListener implements Listener {
|
||||
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.getCurrentStage(quest).getNpcsToInteract().contains(npcId)) {
|
||||
final int npcIndex = quester.getCurrentStage(quest).getNpcsToInteract().indexOf(npcId);
|
||||
if (quester.getQuestProgressOrDefault(quest) != null && npcIndex > -1
|
||||
&& !((BukkitQuestProgress) quester.getQuestProgressOrDefault(quest)).npcsInteracted.get(npcIndex)) {
|
||||
hasObjective = true;
|
||||
}
|
||||
quester.interactWithNPC(quest, event.getNpc().getUUID());
|
||||
quester.interactWithNPC(quest, npcId);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasObjective || !plugin.getQuestNpcUuids().contains(event.getNpc().getUUID())) {
|
||||
if (hasObjective || !plugin.getQuestNpcUuids().contains(npcId)) {
|
||||
return;
|
||||
}
|
||||
boolean hasAtLeastOneGUI = false;
|
||||
@ -221,7 +194,7 @@ public class BukkitZnpcsListener implements Listener {
|
||||
if (quester.getCurrentQuests().containsKey(bukkitQuest)) {
|
||||
continue;
|
||||
}
|
||||
if (bukkitQuest.getNpcStart() != null && bukkitQuest.getNpcStart().equals(event.getNpc().getUUID())) {
|
||||
if (bukkitQuest.getNpcStart() != null && bukkitQuest.getNpcStart().equals(npcId)) {
|
||||
if (plugin.getConfigSettings().canIgnoreLockedQuests()
|
||||
&& (!quester.getCompletedQuests().contains(bukkitQuest)
|
||||
|| bukkitQuest.getPlanner().getCooldown() > -1)) {
|
||||
@ -247,7 +220,7 @@ public class BukkitZnpcsListener implements Listener {
|
||||
quester.takeQuest(quest, false);
|
||||
} else {
|
||||
if (quest.getGUIDisplay() != null) {
|
||||
quester.showGUIDisplay(event.getNpc().getUUID(), npcQuests);
|
||||
quester.showGUIDisplay(npcId, npcQuests);
|
||||
} else {
|
||||
for (final String msg : extracted(quester).split("<br>")) {
|
||||
player.sendMessage(msg);
|
||||
@ -258,12 +231,12 @@ public class BukkitZnpcsListener implements Listener {
|
||||
}
|
||||
} else if (npcQuests.size() > 1) {
|
||||
if (hasAtLeastOneGUI) {
|
||||
quester.showGUIDisplay(event.getNpc().getUUID(), npcQuests);
|
||||
quester.showGUIDisplay(npcId, 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", ((Entity)event.getNpc().getBukkitEntity()).getCustomName());
|
||||
c.getContext().setSessionData("npc", npcDependency.getName(npcId));
|
||||
c.begin();
|
||||
}
|
||||
} else {
|
||||
@ -273,9 +246,48 @@ public class BukkitZnpcsListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
protected void onNpcKill(Entity damager, UUID npcId) {
|
||||
if (plugin.getDependencies().isNpc(damager)) {
|
||||
return;
|
||||
}
|
||||
final ObjectiveType type = ObjectiveType.KILL_NPC;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<>();
|
||||
Player player = null;
|
||||
if (damager instanceof Projectile && ((Projectile) damager).getShooter() instanceof Player) {
|
||||
player = (Player) ((Projectile) damager).getShooter();
|
||||
} else if (damager instanceof Player) {
|
||||
player = (Player) damager;
|
||||
}
|
||||
if (player != null) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.killNPC(quest, npcId);
|
||||
}
|
||||
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.killNPC(cq, npcId);
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
public enum ClickType {
|
||||
LEFT, RIGHT
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
package me.pikamug.quests.dependencies.npc.citizens;
|
||||
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.npc.EntityNpcDependency;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import net.citizensnpcs.api.CitizensPlugin;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.BiPredicate;
|
||||
|
||||
public class CitizensDependency implements NpcDependency, EntityNpcDependency {
|
||||
private final CitizensPlugin citizens;
|
||||
|
||||
public CitizensDependency(BukkitQuestsPlugin plugin) {
|
||||
this.citizens = (CitizensPlugin) Bukkit.getServer().getPluginManager().getPlugin("Citizens");
|
||||
plugin.getServer().getPluginManager().registerEvents(new CitizensListener(plugin, this), plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getDependencyName() {
|
||||
return "Citizens";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNpc(UUID uuid) {
|
||||
return citizens.getNPCRegistry().getByUniqueId(uuid) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String getName(UUID uuid) {
|
||||
NPC npc = citizens.getNPCRegistry().getByUniqueId(uuid);
|
||||
return npc != null ? npc.getName() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Location getLocation(UUID uuid) {
|
||||
NPC npc = citizens.getNPCRegistry().getByUniqueId(uuid);
|
||||
return npc != null ? npc.getStoredLocation() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull List<UUID> getAllNpcIds() {
|
||||
List<UUID> ids = new ArrayList<>();
|
||||
for (NPC npc : citizens.getNPCRegistry()) {
|
||||
ids.add(npc.getUniqueId());
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Map<UUID, Location> getNpcsByLocationPredicate(BiPredicate<UUID, Location> predicate) {
|
||||
Map<UUID, Location> npcs = new HashMap<>();
|
||||
for (NPC npc : citizens.getNPCRegistry()) {
|
||||
UUID uuid = npc.getUniqueId();
|
||||
Location location = npc.getStoredLocation();
|
||||
if (location.getWorld() == null) {
|
||||
continue;
|
||||
}
|
||||
if (predicate.test(uuid, location)) {
|
||||
npcs.put(uuid, location);
|
||||
}
|
||||
}
|
||||
return npcs;
|
||||
}
|
||||
|
||||
public CitizensPlugin getCitizens() {
|
||||
return citizens;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNpc(Entity entity) {
|
||||
return citizens.getNPCRegistry().isNPC(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Entity getEntity(UUID uuid) {
|
||||
NPC npc = citizens.getNPCRegistry().getByUniqueId(uuid);
|
||||
return npc != null ? npc.getEntity() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable UUID getId(Entity entity) {
|
||||
NPC npc = citizens.getNPCRegistry().getNPC(entity);
|
||||
return npc != null ? npc.getUniqueId() : null;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package me.pikamug.quests.dependencies.npc.citizens;
|
||||
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.npc.NpcListener;
|
||||
import net.citizensnpcs.api.event.NPCDeathEvent;
|
||||
import net.citizensnpcs.api.event.NPCLeftClickEvent;
|
||||
import net.citizensnpcs.api.event.NPCRightClickEvent;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class CitizensListener extends NpcListener {
|
||||
public CitizensListener(BukkitQuestsPlugin plugin, CitizensDependency npcDependency) {
|
||||
super(plugin, npcDependency);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onNPCRightClick(final NPCRightClickEvent event) {
|
||||
onNpcInteract(event.getClicker(), event.getNPC() != null ? event.getNPC().getUniqueId() : null, ClickType.RIGHT);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onNPCLeftClick(final NPCLeftClickEvent event) {
|
||||
onNpcInteract(event.getClicker(), event.getNPC() != null ? event.getNPC().getUniqueId() : null, ClickType.LEFT);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onNPCDeath(final NPCDeathEvent event) {
|
||||
if (event.getNPC() == null || event.getNPC().getEntity() == null
|
||||
|| event.getNPC().getEntity().getLastDamageCause() == null) {
|
||||
return;
|
||||
}
|
||||
if (event.getNPC().getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) {
|
||||
final EntityDamageByEntityEvent damageEvent
|
||||
= (EntityDamageByEntityEvent) event.getNPC().getEntity().getLastDamageCause();
|
||||
final Entity damager = damageEvent.getDamager();
|
||||
final UUID npcId = event.getNPC().getUniqueId();
|
||||
onNpcKill(damager, npcId);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
package me.pikamug.quests.dependencies.npc.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 lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.BiPredicate;
|
||||
|
||||
public class ZnpcsPlusDependency implements NpcDependency {
|
||||
private final NpcApi api;
|
||||
|
||||
public ZnpcsPlusDependency(BukkitQuestsPlugin plugin) {
|
||||
this.api = NpcApiProvider.get();
|
||||
plugin.getServer().getPluginManager().registerEvents(new ZnpcsPlusListener(plugin, this), plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getDependencyName() {
|
||||
return "ZNPCsPlus";
|
||||
}
|
||||
|
||||
private @Nullable Npc getNpc(UUID uuid) {
|
||||
NpcEntry npcEntry = api.getNpcRegistry().getByUuid(uuid);
|
||||
return npcEntry != null ? npcEntry.getNpc() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNpc(UUID uuid) {
|
||||
return getNpc(uuid) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String getName(UUID uuid) {
|
||||
Npc npc = getNpc(uuid);
|
||||
if (npc == null) return null;
|
||||
EntityProperty<String> displayNameProperty = api.getPropertyRegistry().getByName("display_name", String.class);
|
||||
if (displayNameProperty != null && npc.hasProperty(displayNameProperty)) {
|
||||
return npc.getProperty(displayNameProperty);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Location getLocation(UUID uuid) {
|
||||
Npc npc = getNpc(uuid);
|
||||
if (npc == null) return null;
|
||||
World world = npc.getWorld();
|
||||
if (world == null) return null;
|
||||
return npc.getLocation().toBukkitLocation(world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull List<UUID> getAllNpcIds() {
|
||||
List<UUID> ids = new ArrayList<>();
|
||||
for (NpcEntry npcEntry : api.getNpcRegistry().getAllPlayerMade()) {
|
||||
ids.add(npcEntry.getNpc().getUuid());
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Map<UUID, Location> getNpcsByLocationPredicate(BiPredicate<UUID, Location> predicate) {
|
||||
Map<UUID, Location> npcs = new HashMap<>();
|
||||
for (NpcEntry npcEntry : api.getNpcRegistry().getAllPlayerMade()) {
|
||||
Npc npc = npcEntry.getNpc();
|
||||
World world = npc.getWorld();
|
||||
if (world == null) {
|
||||
continue;
|
||||
}
|
||||
Location location = npc.getLocation().toBukkitLocation(world);
|
||||
if (predicate.test(npc.getUuid(), location)) {
|
||||
npcs.put(npc.getUuid(), location);
|
||||
}
|
||||
}
|
||||
return npcs;
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package me.pikamug.quests.dependencies.npc.znpcsplus;
|
||||
|
||||
import lol.pyr.znpcsplus.api.event.NpcInteractEvent;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.npc.NpcListener;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class ZnpcsPlusListener extends NpcListener {
|
||||
public ZnpcsPlusListener(BukkitQuestsPlugin plugin, ZnpcsPlusDependency npcDependency) {
|
||||
super(plugin, npcDependency);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onNPCInteract(final NpcInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
UUID npcUUID = event.getNpc() != null ? event.getNpc().getUuid() : null;
|
||||
|
||||
// Needed because the NpcInteractEvent is fired async
|
||||
plugin.getServer().getScheduler().runTask(plugin, () -> {
|
||||
if (event.getClickType().equals(InteractionType.LEFT_CLICK)) {
|
||||
onNpcInteract(player, npcUUID, ClickType.LEFT);
|
||||
} else if (event.getClickType().equals(InteractionType.RIGHT_CLICK)) {
|
||||
onNpcInteract(player, npcUUID, ClickType.RIGHT);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
package me.pikamug.quests.dependencies.npc.znpcsplus.legacy;
|
||||
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.npc.EntityNpcDependency;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiPredicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class LegacyZnpcsPlusDependency implements NpcDependency, EntityNpcDependency {
|
||||
|
||||
public LegacyZnpcsPlusDependency(BukkitQuestsPlugin plugin) {
|
||||
plugin.getServer().getPluginManager().registerEvents(new LegacyZnpcsPlusListener(plugin, this), plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getDependencyName() {
|
||||
return "ZNPCsPlus-Legacy";
|
||||
}
|
||||
|
||||
private @Nullable NPC getNpc(UUID uuid) {
|
||||
return NPC.all().stream().filter(npc -> npc.getUUID().equals(uuid)).findAny().orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNpc(UUID uuid) {
|
||||
return getNpc(uuid) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String getName(UUID uuid) {
|
||||
NPC npc = getNpc(uuid);
|
||||
if (npc == null) {
|
||||
return null;
|
||||
}
|
||||
Entity entity = (Entity) npc.getBukkitEntity();
|
||||
String customName = entity.getCustomName();
|
||||
if (customName == null) {
|
||||
customName = npc.getNpcPojo().getHologramLines().get(0);
|
||||
}
|
||||
return customName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Location getLocation(UUID uuid) {
|
||||
NPC npc = getNpc(uuid);
|
||||
return npc != null ? npc.getLocation() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull List<UUID> getAllNpcIds() {
|
||||
return NPC.all().stream().map(NPC::getUUID).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Map<UUID, Location> getNpcsByLocationPredicate(BiPredicate<UUID, Location> predicate) {
|
||||
return NPC.all().stream()
|
||||
.filter(npc -> predicate.test(npc.getUUID(), npc.getLocation()))
|
||||
.collect(Collectors.toMap(NPC::getUUID, NPC::getLocation));
|
||||
}
|
||||
|
||||
private @Nullable NPC getNpc(Entity entity) {
|
||||
return NPC.all().stream().filter(npc -> npc.getUUID().equals(entity.getUniqueId())).findAny().orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNpc(Entity entity) {
|
||||
return getNpc(entity) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Entity getEntity(UUID uuid) {
|
||||
NPC npc = getNpc(uuid);
|
||||
return npc != null ? (Entity) npc.getBukkitEntity() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable UUID getId(Entity entity) {
|
||||
NPC npc = getNpc(entity);
|
||||
return npc != null ? npc.getUUID() : null;
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package me.pikamug.quests.dependencies.npc.znpcsplus.legacy;
|
||||
|
||||
import io.github.znetworkw.znpcservers.npc.interaction.NPCInteractEvent;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.npc.NpcListener;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class LegacyZnpcsPlusListener extends NpcListener {
|
||||
public LegacyZnpcsPlusListener(BukkitQuestsPlugin plugin, LegacyZnpcsPlusDependency npcDependency) {
|
||||
super(plugin, npcDependency);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onNPCInteract(final NPCInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
UUID npcUUID = event.getNpc() != null ? event.getNpc().getUUID() : null;
|
||||
|
||||
if (event.isLeftClick()) {
|
||||
onNpcInteract(player, npcUUID, ClickType.LEFT);
|
||||
} else if (event.isRightClick()) {
|
||||
onNpcInteract(player, npcUUID, ClickType.RIGHT);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,340 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) PikaMug and contributors
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
||||
* LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package me.pikamug.quests.listeners;
|
||||
|
||||
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.components.BukkitStage;
|
||||
import me.pikamug.quests.quests.Quest;
|
||||
import me.pikamug.quests.util.BukkitItemUtil;
|
||||
import me.pikamug.quests.util.BukkitLang;
|
||||
import net.citizensnpcs.api.event.NPCDeathEvent;
|
||||
import net.citizensnpcs.api.event.NPCLeftClickEvent;
|
||||
import net.citizensnpcs.api.event.NPCRightClickEvent;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.conversations.Conversation;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class BukkitCitizensListener implements Listener {
|
||||
|
||||
private final BukkitQuestsPlugin plugin;
|
||||
|
||||
public BukkitCitizensListener(final BukkitQuestsPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onNPCRightClick(final NPCRightClickEvent event) {
|
||||
if (plugin.getDependencies().getCitizens() == null) {
|
||||
return;
|
||||
}
|
||||
if (plugin.getQuestFactory().getSelectingNpcs().contains(event.getClicker().getUniqueId())) {
|
||||
if (event.getNPC() == null) {
|
||||
plugin.getLogger().severe("NPC was null while selecting by right-click");
|
||||
return;
|
||||
}
|
||||
event.getClicker().acceptConversationInput(String.valueOf(event.getNPC().getUniqueId()));
|
||||
}
|
||||
if (!event.getClicker().isConversing()) {
|
||||
final Player player = event.getClicker();
|
||||
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.getUniqueId())) {
|
||||
quester.deliverToNPC(quest, uuid, hand);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (!hand.getType().equals(Material.AIR)) {
|
||||
for (final UUID uuid : currentStage.getItemDeliveryTargets()) {
|
||||
if (uuid.equals(clicked.getUniqueId())) {
|
||||
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 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().getUniqueId())) {
|
||||
final int npcIndex = quester.getCurrentStage(quest).getNpcsToInteract().indexOf(event.getNPC()
|
||||
.getUniqueId());
|
||||
if (quester.getQuestProgressOrDefault(quest) != null && npcIndex > -1) {
|
||||
final LinkedList<Boolean> interacted
|
||||
= ((BukkitQuestProgress) quester.getQuestProgressOrDefault(quest)).npcsInteracted;
|
||||
if (interacted.size() > npcIndex && !interacted.get(npcIndex)) {
|
||||
hasObjective = true;
|
||||
}
|
||||
}
|
||||
quester.interactWithNPC(quest, event.getNPC().getUniqueId());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasObjective || !plugin.getQuestNpcUuids().contains(event.getNPC().getUniqueId())) {
|
||||
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().getUniqueId())) {
|
||||
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 bukkitQuest = (BukkitQuest) npcQuests.get(0);
|
||||
if (quester.canAcceptOffer(bukkitQuest, true)) {
|
||||
quester.setQuestIdToTake(bukkitQuest.getId());
|
||||
if (!plugin.getConfigSettings().canConfirmAccept()) {
|
||||
quester.takeQuest(bukkitQuest, false);
|
||||
} else {
|
||||
if (bukkitQuest.getGUIDisplay() != null) {
|
||||
quester.showGUIDisplay(event.getNPC().getUniqueId(), 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().getUniqueId(), npcQuests);
|
||||
} else {
|
||||
final Conversation c = plugin.getNpcConversationFactory().buildConversation(player);
|
||||
c.getContext().setSessionData("npcQuests", npcQuests);
|
||||
c.getContext().setSessionData("npc", event.getNPC().getName());
|
||||
c.begin();
|
||||
}
|
||||
} else {
|
||||
BukkitLang.send(player, ChatColor.YELLOW + BukkitLang.get(player, "noMoreQuest"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onNPCLeftClick(final NPCLeftClickEvent event) {
|
||||
if (plugin.getDependencies().getCitizens() == null) {
|
||||
return;
|
||||
}
|
||||
if (plugin.getQuestFactory().getSelectingNpcs().contains(event.getClicker().getUniqueId())) {
|
||||
if (event.getNPC() == null) {
|
||||
plugin.getLogger().severe("NPC was null while selecting by left-click");
|
||||
return;
|
||||
}
|
||||
event.getClicker().acceptConversationInput(String.valueOf(event.getNPC().getUniqueId()));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onNPCDeath(final NPCDeathEvent event) {
|
||||
if (plugin.getDependencies().getCitizens() == null) {
|
||||
return;
|
||||
}
|
||||
if (event.getNPC() == null || event.getNPC().getEntity() == null
|
||||
|| event.getNPC().getEntity().getLastDamageCause() == null) {
|
||||
return;
|
||||
}
|
||||
if (event.getNPC().getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent) {
|
||||
final EntityDamageByEntityEvent damageEvent
|
||||
= (EntityDamageByEntityEvent) event.getNPC().getEntity().getLastDamageCause();
|
||||
final Entity damager = damageEvent.getDamager();
|
||||
if (plugin.getDependencies().getCitizens().getNPCRegistry().isNPC(damager)) {
|
||||
return;
|
||||
}
|
||||
final ObjectiveType type = ObjectiveType.KILL_NPC;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<>();
|
||||
Player player = null;
|
||||
if (damager instanceof Projectile && ((Projectile)damageEvent.getDamager()).getShooter() instanceof Player) {
|
||||
player = (Player) ((Projectile)damageEvent.getDamager()).getShooter();
|
||||
} else if (damager instanceof Player) {
|
||||
player = (Player) damager;
|
||||
}
|
||||
if (player != null) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
for (final Quest quest : quester.getCurrentQuests().keySet()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.killNPC(quest, event.getNPC().getUniqueId());
|
||||
}
|
||||
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.killNPC(cq, event.getNPC().getUniqueId());
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
@ -27,13 +27,7 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.Sheep;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.entity.Wolf;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -46,20 +40,8 @@ import org.bukkit.event.inventory.InventoryAction;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerBucketFillEvent;
|
||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.event.player.PlayerFishEvent;
|
||||
import org.bukkit.event.player.*;
|
||||
import org.bukkit.event.player.PlayerFishEvent.State;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.event.player.PlayerShearEntityEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
@ -698,7 +680,7 @@ public class BukkitPlayerListener implements Listener {
|
||||
return;
|
||||
}
|
||||
if (damager instanceof Player) {
|
||||
if (plugin.getDependencies().getCitizens() != null && CitizensAPI.getNPCRegistry().isNPC(target)) {
|
||||
if (!plugin.getDependencies().isNpc(target)) {
|
||||
return;
|
||||
}
|
||||
final Quester quester = plugin.getQuester(damager.getUniqueId());
|
||||
@ -792,10 +774,8 @@ public class BukkitPlayerListener implements Listener {
|
||||
return;
|
||||
}
|
||||
if (damager instanceof Player && target instanceof Player) {
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (CitizensAPI.getNPCRegistry().isNPC(damager) && CitizensAPI.getNPCRegistry().isNPC(target)) {
|
||||
return;
|
||||
}
|
||||
if (plugin.getDependencies().isNpc(damager) && plugin.getDependencies().isNpc(target)) {
|
||||
return;
|
||||
}
|
||||
final Quester quester = plugin.getQuester(damager.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.KILL_PLAYER;
|
||||
@ -968,10 +948,8 @@ public class BukkitPlayerListener implements Listener {
|
||||
if (event.getFrom().getBlock().equals(event.getTo().getBlock())) {
|
||||
return;
|
||||
}
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (CitizensAPI.getNPCRegistry().isNPC(event.getPlayer())) {
|
||||
return;
|
||||
}
|
||||
if (plugin.getDependencies().isNpc(event.getPlayer())) {
|
||||
return;
|
||||
}
|
||||
playerMove(event.getPlayer().getUniqueId(), event.getTo());
|
||||
}
|
||||
|
@ -1,274 +0,0 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Listener for ZNPCsPlus 2.x+
|
||||
*/
|
||||
public class BukkitZnpcsApiListener implements Listener {
|
||||
|
||||
private final BukkitQuestsPlugin plugin;
|
||||
|
||||
public BukkitZnpcsApiListener(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.getQuestProgressOrDefault(quest) != null && npcIndex > -1
|
||||
&& !((BukkitQuestProgress) quester.getQuestProgressOrDefault(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());
|
||||
}
|
||||
}
|
@ -14,8 +14,6 @@ import com.alessiodp.parties.api.interfaces.Party;
|
||||
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;
|
||||
@ -24,15 +22,12 @@ import me.pikamug.quests.config.BukkitConfigSettings;
|
||||
import me.pikamug.quests.config.ConfigSettings;
|
||||
import me.pikamug.quests.convo.misc.QuestAbandonPrompt;
|
||||
import me.pikamug.quests.dependencies.BukkitDependencies;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import me.pikamug.quests.entity.BukkitCountableMob;
|
||||
import me.pikamug.quests.enums.ObjectiveType;
|
||||
import me.pikamug.quests.events.quest.QuestQuitEvent;
|
||||
import me.pikamug.quests.events.quest.QuestTakeEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPostStartQuestEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPostUpdateObjectiveEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPreOpenGUIEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPreStartQuestEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPreUpdateObjectiveEvent;
|
||||
import me.pikamug.quests.events.quester.*;
|
||||
import me.pikamug.quests.item.BukkitQuestJournal;
|
||||
import me.pikamug.quests.module.CustomObjective;
|
||||
import me.pikamug.quests.module.CustomRequirement;
|
||||
@ -40,34 +35,17 @@ import me.pikamug.quests.nms.BukkitActionBarProvider;
|
||||
import me.pikamug.quests.nms.BukkitTitleProvider;
|
||||
import me.pikamug.quests.quests.BukkitQuest;
|
||||
import me.pikamug.quests.quests.Quest;
|
||||
import me.pikamug.quests.quests.components.BukkitObjective;
|
||||
import me.pikamug.quests.quests.components.BukkitRequirements;
|
||||
import me.pikamug.quests.quests.components.BukkitStage;
|
||||
import me.pikamug.quests.quests.components.Objective;
|
||||
import me.pikamug.quests.quests.components.Planner;
|
||||
import me.pikamug.quests.quests.components.Stage;
|
||||
import me.pikamug.quests.quests.components.*;
|
||||
import me.pikamug.quests.tasks.BukkitStageTimer;
|
||||
import me.pikamug.quests.util.*;
|
||||
import me.pikamug.quests.util.stack.BlockItemStack;
|
||||
import me.pikamug.quests.util.BukkitConfigUtil;
|
||||
import me.pikamug.quests.util.BukkitInventoryUtil;
|
||||
import me.pikamug.quests.util.BukkitItemUtil;
|
||||
import me.pikamug.quests.util.BukkitLang;
|
||||
import me.pikamug.quests.util.BukkitMiscUtil;
|
||||
import me.pikamug.quests.util.RomanNumeral;
|
||||
import me.pikamug.unite.api.objects.PartyProvider;
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.conversations.ConversationFactory;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
@ -77,19 +55,8 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
import java.util.function.BiFunction;
|
||||
@ -555,34 +522,15 @@ public class BukkitQuester implements Quester {
|
||||
if (!plugin.getConfigSettings().canAllowCommandsForNpcQuests() && bukkitQuest.getNpcStart() != null
|
||||
&& getPlayer().getLocation().getWorld() != null) {
|
||||
final UUID uuid = bukkitQuest.getNpcStart();
|
||||
Entity npc = null;
|
||||
if (plugin.getDependencies().getCitizens() != null
|
||||
&& plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid) != null) {
|
||||
npc = plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid).getEntity();
|
||||
} else if (plugin.getDependencies().getZnpcsPlus() != null
|
||||
&& plugin.getDependencies().getZnpcsPlusUuids().contains(uuid)) {
|
||||
final Optional<NPC> opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
|
||||
if (opt.isPresent()) {
|
||||
npc = (Entity) opt.get().getBukkitEntity();
|
||||
}
|
||||
}
|
||||
if (npc != null && npc.getLocation().getWorld() != null && npc.getLocation().getWorld().getName()
|
||||
.equals(getPlayer().getLocation().getWorld().getName())
|
||||
&& npc.getLocation().distance(getPlayer().getLocation()) > 6.0) {
|
||||
if (giveReason) {
|
||||
final String msg = BukkitLang.get(getPlayer(), "mustSpeakTo").replace("<npc>", npc.getName());
|
||||
sendMessage(ChatColor.YELLOW + msg);
|
||||
}
|
||||
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) {
|
||||
for (NpcDependency npcDependency : plugin.getDependencies().getNpcDependencies()) {
|
||||
Location npcLocation = npcDependency.getLocation(uuid);
|
||||
if (npcLocation == null) continue;
|
||||
|
||||
if (npcLocation.getWorld() != null
|
||||
&& npcLocation.getWorld().getName().equals(getPlayer().getLocation().getWorld().getName())
|
||||
&& npcLocation.distance(getPlayer().getLocation()) > 6.0) {
|
||||
if (giveReason) {
|
||||
final String msg = BukkitLang.get(getPlayer(), "mustSpeakTo")
|
||||
.replace("<npc>", plugin.getDependencies().getNpcName(znpc.getUuid()));
|
||||
final String msg = BukkitLang.get(getPlayer(), "mustSpeakTo").replace("<npc>", plugin.getDependencies().getNpcName(uuid));
|
||||
sendMessage(ChatColor.YELLOW + msg);
|
||||
}
|
||||
return false;
|
||||
@ -1892,12 +1840,16 @@ public class BukkitQuester implements Quester {
|
||||
} else if (!c.getNpcsWhileRiding().isEmpty()) {
|
||||
msg.append(BukkitLang.get("conditionEditorRideNPC"));
|
||||
for (final UUID u : c.getNpcsWhileRiding()) {
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
msg.append(ChatColor.AQUA).append("\n \u2515 ").append(CitizensAPI.getNPCRegistry()
|
||||
.getByUniqueId(u).getName());
|
||||
} else {
|
||||
msg.append(ChatColor.AQUA).append("\n \u2515 ").append(u);
|
||||
msg.append(ChatColor.AQUA).append("\n \u2515 ");
|
||||
String name = u.toString();
|
||||
for (NpcDependency npcDependency : plugin.getDependencies().getNpcDependencies()) {
|
||||
String npcName = npcDependency.getName(u);
|
||||
if (npcName != null) {
|
||||
name = npcName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
msg.append(name);
|
||||
}
|
||||
quester.sendMessage(msg.toString());
|
||||
} else if (!c.getPermissions().isEmpty()) {
|
||||
@ -2746,7 +2698,7 @@ public class BukkitQuester implements Quester {
|
||||
final String[] message = BukkitConfigUtil.parseStringWithPossibleLineBreaks(getCurrentStage(quest)
|
||||
.getDeliverMessages().get(new Random().nextInt(getCurrentStage(quest)
|
||||
.getDeliverMessages().size())), getCurrentStage(quest).getItemDeliveryTargets()
|
||||
.get(match), goal.getAmount() - progress);
|
||||
.get(match), goal.getAmount() - progress, plugin);
|
||||
player.sendMessage(message);
|
||||
}
|
||||
|
||||
@ -4081,9 +4033,6 @@ public class BukkitQuester implements Quester {
|
||||
if (npc == null || quests == null) {
|
||||
return;
|
||||
}
|
||||
if (plugin.getDependencies().getCitizens() == null) {
|
||||
return;
|
||||
}
|
||||
final String name = plugin.getDependencies().getNpcName(npc);
|
||||
final LinkedList<BukkitQuest> qs = new LinkedList<>();
|
||||
for (Quest q : quests) {
|
||||
|
@ -16,45 +16,22 @@ import com.gmail.nossr50.config.Config;
|
||||
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;
|
||||
import me.pikamug.quests.actions.BukkitAction;
|
||||
import me.pikamug.quests.dependencies.BukkitDependencies;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import me.pikamug.quests.events.quest.QuestUpdateCompassEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPostChangeStageEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPostCompleteQuestEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPostFailQuestEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPreChangeStageEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPreCompleteQuestEvent;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPreFailQuestEvent;
|
||||
import me.pikamug.quests.events.quester.*;
|
||||
import me.pikamug.quests.module.CustomRequirement;
|
||||
import me.pikamug.quests.module.CustomReward;
|
||||
import me.pikamug.quests.nms.BukkitTitleProvider;
|
||||
import me.pikamug.quests.player.BukkitQuester;
|
||||
import me.pikamug.quests.player.Quester;
|
||||
import me.pikamug.quests.quests.components.BukkitOptions;
|
||||
import me.pikamug.quests.quests.components.BukkitPlanner;
|
||||
import me.pikamug.quests.quests.components.BukkitRequirements;
|
||||
import me.pikamug.quests.quests.components.BukkitRewards;
|
||||
import me.pikamug.quests.quests.components.Options;
|
||||
import me.pikamug.quests.quests.components.Planner;
|
||||
import me.pikamug.quests.quests.components.Requirements;
|
||||
import me.pikamug.quests.quests.components.Rewards;
|
||||
import me.pikamug.quests.quests.components.Stage;
|
||||
import me.pikamug.quests.util.BukkitConfigUtil;
|
||||
import me.pikamug.quests.util.BukkitInventoryUtil;
|
||||
import me.pikamug.quests.util.BukkitItemUtil;
|
||||
import me.pikamug.quests.util.BukkitMiscUtil;
|
||||
import me.pikamug.quests.util.BukkitLang;
|
||||
import me.pikamug.quests.util.RomanNumeral;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import me.pikamug.quests.quests.components.*;
|
||||
import me.pikamug.quests.util.*;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
@ -66,13 +43,8 @@ import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
import java.util.stream.Collectors;
|
||||
@ -419,23 +391,13 @@ public class BukkitQuest implements Quest {
|
||||
targetLocation = (Location) stage.getLocationsToReach().getFirst();
|
||||
} else if (stage.getItemDeliveryTargets() != null && stage.getItemDeliveryTargets().size() > 0) {
|
||||
final UUID uuid = stage.getItemDeliveryTargets().getFirst();
|
||||
if (plugin.getDependencies().getCitizens() != null
|
||||
&& plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid) != null) {
|
||||
targetLocation = plugin.getDependencies().getCitizens().getNPCRegistry().getByUniqueId(uuid)
|
||||
.getStoredLocation();
|
||||
}
|
||||
if (plugin.getDependencies().getZnpcsPlus() != null
|
||||
&& plugin.getDependencies().getZnpcsPlusUuids().contains(uuid)) {
|
||||
final Optional<NPC> opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(uuid)).findAny();
|
||||
if (opt.isPresent()) {
|
||||
targetLocation = opt.get().getLocation();
|
||||
for (NpcDependency npcDependency : plugin.getDependencies().getNpcDependencies()) {
|
||||
Location npcLocation = npcDependency.getLocation(uuid);
|
||||
if (npcLocation != null) {
|
||||
targetLocation = npcLocation;
|
||||
break;
|
||||
}
|
||||
}
|
||||
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;
|
||||
@ -569,9 +531,9 @@ public class BukkitQuest implements Quest {
|
||||
final Player player = quester.getPlayer();
|
||||
if (quester.getCompletedQuests().contains(this)) {
|
||||
meta.setDisplayName(ChatColor.DARK_PURPLE + BukkitConfigUtil.parseString(getName()
|
||||
+ " " + ChatColor.GREEN + BukkitLang.get(player, "redoCompleted"), getNpcStart()));
|
||||
+ " " + ChatColor.GREEN + BukkitLang.get(player, "redoCompleted"), getNpcStart(), plugin));
|
||||
} else {
|
||||
meta.setDisplayName(ChatColor.DARK_PURPLE + BukkitConfigUtil.parseString(getName(), getNpcStart()));
|
||||
meta.setDisplayName(ChatColor.DARK_PURPLE + BukkitConfigUtil.parseString(getName(), getNpcStart(), plugin));
|
||||
}
|
||||
if (!meta.hasLore()) {
|
||||
final LinkedList<String> lines;
|
||||
|
@ -16,18 +16,9 @@ import me.pikamug.quests.convo.quests.menu.QuestMenuPrompt;
|
||||
import me.pikamug.quests.convo.quests.stages.QuestStageMenuPrompt;
|
||||
import me.pikamug.quests.interfaces.ReloadCallback;
|
||||
import me.pikamug.quests.module.CustomObjective;
|
||||
import me.pikamug.quests.quests.components.BukkitStage;
|
||||
import me.pikamug.quests.quests.components.Options;
|
||||
import me.pikamug.quests.quests.components.Planner;
|
||||
import me.pikamug.quests.quests.components.Requirements;
|
||||
import me.pikamug.quests.quests.components.Rewards;
|
||||
import me.pikamug.quests.quests.components.Stage;
|
||||
import me.pikamug.quests.quests.components.*;
|
||||
import me.pikamug.quests.util.*;
|
||||
import me.pikamug.quests.util.stack.BlockItemStack;
|
||||
import me.pikamug.quests.util.BukkitConfigUtil;
|
||||
import me.pikamug.quests.util.BukkitFakeConversable;
|
||||
import me.pikamug.quests.util.BukkitLang;
|
||||
import me.pikamug.quests.util.BukkitMiscUtil;
|
||||
import me.pikamug.quests.util.Key;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
@ -36,12 +27,7 @@ import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.conversations.ConversationAbandonedEvent;
|
||||
import org.bukkit.conversations.ConversationAbandonedListener;
|
||||
import org.bukkit.conversations.ConversationContext;
|
||||
import org.bukkit.conversations.ConversationFactory;
|
||||
import org.bukkit.conversations.ConversationPrefix;
|
||||
import org.bukkit.conversations.Prompt;
|
||||
import org.bukkit.conversations.*;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@ -50,13 +36,8 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
|
||||
@ -159,9 +140,7 @@ 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
|
||||
|| plugin.getDependencies().getZnpcsPlus() != null
|
||||
|| plugin.getDependencies().getZnpcsPlusApi() != null) {
|
||||
if (plugin.getDependencies().hasAnyNpcDependencies()) {
|
||||
if (bukkitQuest.getNpcStart() != null) {
|
||||
context.setSessionData(Key.Q_START_NPC, bukkitQuest.getNpcStart().toString());
|
||||
}
|
||||
|
@ -20,11 +20,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class BukkitConditionYamlStorage implements ConditionStorageImpl {
|
||||
@ -140,7 +136,7 @@ public class BukkitConditionYamlStorage implements ConditionStorageImpl {
|
||||
// Legacy
|
||||
if (BukkitConfigUtil.checkList(data.getList(conditionKey + "ride-npc"), Integer.class)) {
|
||||
final LinkedList<UUID> npcList = new LinkedList<>();
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (plugin.getDependencies().getNpcDependency("Citizens") != null) {
|
||||
for (final int i : data.getIntegerList(conditionKey + "ride-npc")) {
|
||||
final NPC npc = CitizensAPI.getNPCRegistry().getById(i);
|
||||
if (npc != null) {
|
||||
|
@ -10,25 +10,16 @@ import me.pikamug.quests.exceptions.QuestFormatException;
|
||||
import me.pikamug.quests.exceptions.StageFormatException;
|
||||
import me.pikamug.quests.quests.BukkitQuest;
|
||||
import me.pikamug.quests.quests.Quest;
|
||||
import me.pikamug.quests.quests.components.BukkitRequirements;
|
||||
import me.pikamug.quests.quests.components.BukkitRewards;
|
||||
import me.pikamug.quests.quests.components.BukkitStage;
|
||||
import me.pikamug.quests.quests.components.Options;
|
||||
import me.pikamug.quests.quests.components.Planner;
|
||||
import me.pikamug.quests.quests.components.*;
|
||||
import me.pikamug.quests.storage.implementation.QuestStorageImpl;
|
||||
import me.pikamug.quests.util.stack.BlockItemStack;
|
||||
import me.pikamug.quests.util.BukkitConfigUtil;
|
||||
import me.pikamug.quests.util.BukkitItemUtil;
|
||||
import me.pikamug.quests.util.BukkitMiscUtil;
|
||||
import me.pikamug.quests.util.BukkitLang;
|
||||
import me.pikamug.quests.util.BukkitMiscUtil;
|
||||
import me.pikamug.quests.util.stack.BlockItemStack;
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import net.citizensnpcs.api.npc.NPC;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
@ -43,13 +34,7 @@ import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class BukkitQuestYamlStorage implements QuestStorageImpl {
|
||||
@ -177,7 +162,7 @@ public class BukkitQuestYamlStorage implements QuestStorageImpl {
|
||||
final Collection<UUID> npcUuids = plugin.getQuestNpcUuids();
|
||||
npcUuids.add(uuid);
|
||||
plugin.setQuestNpcUuids(npcUuids);
|
||||
} else if (depends.getCitizens() != null && config.contains("quests." + questId + ".npc-giver-id")) {
|
||||
} else if (depends.getNpcDependency("Citizens") != null && config.contains("quests." + questId + ".npc-giver-id")) {
|
||||
// Legacy
|
||||
final int id = config.getInt("quests." + questId + ".npc-giver-id");
|
||||
if (CitizensAPI.getNPCRegistry().getById(id) != null) {
|
||||
@ -1218,7 +1203,7 @@ public class BukkitQuestYamlStorage implements QuestStorageImpl {
|
||||
if (BukkitConfigUtil.checkList(config.getList(path + ".npc-ids-to-talk-to"), Integer.class)) {
|
||||
npcIdsToTalkTo = config.getIntegerList(path + ".npc-ids-to-talk-to");
|
||||
for (final int i : npcIdsToTalkTo) {
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (plugin.getDependencies().getNpcDependency("Citizens") != null) {
|
||||
final NPC npc = CitizensAPI.getNPCRegistry().getById(i);
|
||||
if (npc != null) {
|
||||
final UUID npcUuid = npc.getUniqueId();
|
||||
@ -1285,7 +1270,7 @@ public class BukkitQuestYamlStorage implements QuestStorageImpl {
|
||||
final String msg = deliveryMessages.size() > index ? deliveryMessages.get(index)
|
||||
: deliveryMessages.get(deliveryMessages.size() - 1);
|
||||
index++;
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (plugin.getDependencies().getNpcDependency("Citizens") != null) {
|
||||
final NPC npc = CitizensAPI.getNPCRegistry().getById(npcId);
|
||||
if (npc != null) {
|
||||
bukkitStage.addItemToDeliver(stack);
|
||||
@ -1348,7 +1333,7 @@ public class BukkitQuestYamlStorage implements QuestStorageImpl {
|
||||
npcIdsToKill = config.getIntegerList(path + ".npc-ids-to-kill");
|
||||
npcAmountsToKill = config.getIntegerList(path + ".npc-kill-amounts");
|
||||
for (final int i : npcIdsToKill) {
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (plugin.getDependencies().getNpcDependency("Citizens") != null) {
|
||||
final NPC npc = CitizensAPI.getNPCRegistry().getById(i);
|
||||
if (npc != null) {
|
||||
if (npcAmountsToKill.get(npcIdsToKill.indexOf(i)) > 0) {
|
||||
|
@ -10,18 +10,16 @@
|
||||
|
||||
package me.pikamug.quests.tasks;
|
||||
|
||||
import lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import me.pikamug.quests.enums.BukkitPreBuiltParticle;
|
||||
import me.pikamug.quests.events.quester.BukkitQuesterPostViewEffectEvent;
|
||||
import me.pikamug.quests.nms.BukkitParticleProvider;
|
||||
import me.pikamug.quests.player.BukkitQuester;
|
||||
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.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class BukkitNpcEffectThread implements Runnable {
|
||||
@ -35,47 +33,10 @@ public class BukkitNpcEffectThread implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
for (final Player player : plugin.getServer().getOnlinePlayers()) {
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
final List<Entity> nearby = player.getNearbyEntities(32.0, 16.0, 32.0);
|
||||
if (!nearby.isEmpty()) {
|
||||
for (final Entity entity : nearby) {
|
||||
final UUID uuid = plugin.getDependencies().getUuidFromNpc(entity);
|
||||
if (uuid != null) {
|
||||
showConfigEffect(plugin.getQuester(player.getUniqueId()), uuid, entity.getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (plugin.getDependencies().getZnpcsPlus() != null) {
|
||||
for (io.github.znetworkw.znpcservers.npc.NPC npc : io.github.znetworkw.znpcservers.npc.NPC.all()) {
|
||||
final Location location = npc.getLocation();
|
||||
if (location.getWorld() == null || player.getLocation().getWorld() == null) {
|
||||
return;
|
||||
}
|
||||
if (location.getWorld().getName().equals(player.getLocation().getWorld().getName())) {
|
||||
if (location.distanceSquared(player.getLocation()) < 24) {
|
||||
final UUID uuid = plugin.getDependencies().getUuidFromNpc((Entity) npc.getBukkitEntity());
|
||||
if (uuid != null) {
|
||||
showConfigEffect(plugin.getQuester(player.getUniqueId()), uuid, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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().getUuid(),
|
||||
npc.getNpc().getLocation().toBukkitLocation(npc.getNpc().getWorld()).add(0, 2, 0));
|
||||
}
|
||||
}
|
||||
for (NpcDependency npcDependency : plugin.getDependencies().getNpcDependencies()) {
|
||||
Map<UUID, Location> npcLocations = npcDependency.getNpcsByNearbyLocationSquared(player.getLocation(), 24);
|
||||
for (Map.Entry<UUID, Location> entry : npcLocations.entrySet()) {
|
||||
showConfigEffect(plugin.getQuester(player.getUniqueId()), entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,10 +10,9 @@
|
||||
|
||||
package me.pikamug.quests.tasks;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import net.citizensnpcs.api.CitizensAPI;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class BukkitPlayerMoveThread implements Runnable {
|
||||
|
||||
@ -26,8 +25,8 @@ public class BukkitPlayerMoveThread implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
for (final Player player : plugin.getServer().getOnlinePlayers()) {
|
||||
if (plugin.getDependencies().getCitizens() != null) {
|
||||
if (CitizensAPI.getNPCRegistry().isNPC(player)) {
|
||||
for (NpcDependency npcDependency : plugin.getDependencies().getNpcDependencies()) {
|
||||
if (npcDependency.isNpc(player.getUniqueId())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -10,22 +10,18 @@
|
||||
|
||||
package me.pikamug.quests.util;
|
||||
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import lol.pyr.znpcsplus.api.entity.EntityProperty;
|
||||
import lol.pyr.znpcsplus.api.npc.Npc;
|
||||
import lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import me.pikamug.quests.dependencies.BukkitDependencies;
|
||||
import me.pikamug.quests.quests.Quest;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import me.pikamug.quests.BukkitQuestsPlugin;
|
||||
import me.pikamug.quests.dependencies.BukkitDependencies;
|
||||
import me.pikamug.quests.dependencies.npc.NpcDependency;
|
||||
import me.pikamug.quests.quests.Quest;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@ -135,8 +131,8 @@ public class BukkitConfigUtil {
|
||||
return parsed.split("\n");
|
||||
}
|
||||
|
||||
public static String[] parseStringWithPossibleLineBreaks(final String s, final UUID npc, int amount) {
|
||||
String parsed = parseString(s, npc);
|
||||
public static String[] parseStringWithPossibleLineBreaks(final String s, final UUID npc, int amount, final BukkitQuestsPlugin plugin) {
|
||||
String parsed = parseString(s, npc, plugin);
|
||||
if (parsed.contains("<amount>")) {
|
||||
parsed = parsed.replace("<amount>", String.valueOf(amount));
|
||||
}
|
||||
@ -166,38 +162,18 @@ public class BukkitConfigUtil {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
public static String parseString(final String s, final UUID npc) {
|
||||
public static String parseString(final String s, final UUID npc, final BukkitQuestsPlugin plugin) {
|
||||
String parsed = parseString(s);
|
||||
if (parsed.contains("<npc>")) {
|
||||
if (BukkitDependencies.citizens != null) {
|
||||
parsed = parsed.replace("<npc>", BukkitDependencies.citizens.getNPCRegistry().getByUniqueId(npc).getName());
|
||||
}
|
||||
if (BukkitDependencies.znpcsPlusLegacy != null) {
|
||||
String name = "null";
|
||||
final Optional<NPC> opt = NPC.all().stream().filter(npc1 -> npc1.getUUID().equals(npc)).findAny();
|
||||
if (opt.isPresent()) {
|
||||
final Entity znpc = (Entity) opt.get().getBukkitEntity();
|
||||
if (znpc.getCustomName() != null) {
|
||||
name = znpc.getCustomName();
|
||||
} else {
|
||||
name = opt.get().getNpcPojo().getHologramLines().get(0);
|
||||
}
|
||||
String name = "null";
|
||||
for (NpcDependency npcDependency : plugin.getDependencies().getNpcDependencies()) {
|
||||
String npcName = npcDependency.getName(npc);
|
||||
if (npcName != null) {
|
||||
name = npcName;
|
||||
break;
|
||||
}
|
||||
parsed = parsed.replace("<npc>", name);
|
||||
} else if (BukkitDependencies.znpcsPlusApi != null) {
|
||||
String name = "null";
|
||||
NpcEntry entry = BukkitDependencies.znpcsPlusApi.getNpcRegistry().getByUuid(npc);
|
||||
if (entry != null) {
|
||||
Npc znpc = entry.getNpc();
|
||||
EntityProperty<String> displayNameProperty = BukkitDependencies.znpcsPlusApi.getPropertyRegistry().getByName("display_name", String.class);
|
||||
if (displayNameProperty != null) {
|
||||
if (znpc.hasProperty(displayNameProperty)) {
|
||||
name = znpc.getProperty(displayNameProperty);
|
||||
}
|
||||
}
|
||||
}
|
||||
parsed = parsed.replace("<npc>", name);
|
||||
}
|
||||
parsed = parsed.replace("<npc>", name);
|
||||
}
|
||||
return parsed;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user