fix decompilation artifacts & warnings
This commit is contained in:
parent
a417d6418b
commit
f72fd32bb0
44 changed files with 492 additions and 444 deletions
|
@ -16,8 +16,6 @@ public enum CacheCategory {
|
|||
SERVER_NETWORK("server.network"),
|
||||
SERVER("server");
|
||||
|
||||
private static final String EMPTY_STRING = "";
|
||||
|
||||
private final String subPackageName;
|
||||
|
||||
private final String packageName;
|
||||
|
|
|
@ -7,10 +7,6 @@ public enum CachePackage {
|
|||
CRAFT_BUKKIT("org.bukkit.craftbukkit." + Utils.getBukkitPackage()),
|
||||
MINECRAFT_SERVER("net.minecraft");
|
||||
|
||||
private static final String EMPTY_STRING = "";
|
||||
|
||||
private static final String DOT = ".";
|
||||
|
||||
private final String fixedPackageName;
|
||||
|
||||
CachePackage(String packageName) {
|
||||
|
|
|
@ -2,7 +2,6 @@ package io.github.znetworkw.znpcservers.cache;
|
|||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.UnmodifiableIterator;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
|
@ -53,8 +52,6 @@ public interface TypeCache {
|
|||
}
|
||||
|
||||
class CacheBuilder {
|
||||
private static final String EMPTY_STRING = "";
|
||||
|
||||
private final CachePackage cachePackage;
|
||||
|
||||
private final CacheCategory cacheCategory;
|
||||
|
@ -67,8 +64,6 @@ public interface TypeCache {
|
|||
|
||||
private final String additionalData;
|
||||
|
||||
private final Class<?> clazz;
|
||||
|
||||
private final ImmutableList<Class<?>[]> parameterTypes;
|
||||
|
||||
private final Class<?> expectType;
|
||||
|
@ -87,7 +82,6 @@ public interface TypeCache {
|
|||
this.fieldName = fieldName;
|
||||
this.additionalData = additionalData;
|
||||
this.parameterTypes = parameterTypes;
|
||||
this.clazz = null;
|
||||
this.expectType = expectType;
|
||||
}
|
||||
|
||||
|
@ -97,20 +91,18 @@ public interface TypeCache {
|
|||
|
||||
public CacheBuilder withClassName(String className) {
|
||||
return new CacheBuilder(this.cachePackage, this.cacheCategory,
|
||||
(List<String>) ImmutableList.builder().addAll(this.className)
|
||||
new ImmutableList.Builder<String>().addAll(this.className)
|
||||
.add(formatClass(className)).build(), this.fieldName, this.methods, this.additionalData, this.parameterTypes, this.expectType);
|
||||
}
|
||||
|
||||
public CacheBuilder withClassName(Class<?> clazz) {
|
||||
return new CacheBuilder(this.cachePackage, this.cacheCategory,
|
||||
|
||||
(List<String>) ImmutableList.builder().addAll(this.className).add((clazz == null) ? "" : clazz.getName()).build(), this.fieldName, this.methods, this.additionalData, this.parameterTypes, this.expectType);
|
||||
new ImmutableList.Builder<String>().addAll(this.className).add((clazz == null) ? "" : clazz.getName()).build(), this.fieldName, this.methods, this.additionalData, this.parameterTypes, this.expectType);
|
||||
}
|
||||
|
||||
public CacheBuilder withMethodName(String methodName) {
|
||||
return new CacheBuilder(this.cachePackage, this.cacheCategory, this.className, this.fieldName,
|
||||
|
||||
(List<String>) ImmutableList.builder().addAll(this.methods).add(methodName).build(), this.additionalData, this.parameterTypes, this.expectType);
|
||||
new ImmutableList.Builder<String>().addAll(this.methods).add(methodName).build(), this.additionalData, this.parameterTypes, this.expectType);
|
||||
}
|
||||
|
||||
public CacheBuilder withFieldName(String fieldName) {
|
||||
|
@ -123,8 +115,7 @@ public interface TypeCache {
|
|||
|
||||
public CacheBuilder withParameterTypes(Class<?>... types) {
|
||||
return new CacheBuilder(this.cachePackage, this.cacheCategory, this.className, this.fieldName, this.methods, this.additionalData,
|
||||
|
||||
ImmutableList.copyOf(Iterables.concat((Iterable) this.parameterTypes, (Iterable) ImmutableList.of(types))), this.expectType);
|
||||
ImmutableList.copyOf(Iterables.concat(this.parameterTypes, ImmutableList.of(types))), this.expectType);
|
||||
}
|
||||
|
||||
public CacheBuilder withExpectResult(Class<?> expectType) {
|
||||
|
@ -132,15 +123,11 @@ public interface TypeCache {
|
|||
}
|
||||
|
||||
protected String formatClass(String className) {
|
||||
switch (this.cachePackage) {
|
||||
case MINECRAFT_SERVER:
|
||||
case CRAFT_BUKKIT:
|
||||
return String.format(((this.cachePackage == CachePackage.CRAFT_BUKKIT) ?
|
||||
return switch (this.cachePackage) {
|
||||
case MINECRAFT_SERVER, CRAFT_BUKKIT -> String.format(((this.cachePackage == CachePackage.CRAFT_BUKKIT) ?
|
||||
this.cachePackage.getFixedPackageName() : this.cachePackage.getForCategory(this.cacheCategory, this.additionalData)) + ".%s", className);
|
||||
case DEFAULT:
|
||||
return className;
|
||||
}
|
||||
throw new IllegalArgumentException("Unexpected package " + this.cachePackage.name());
|
||||
case DEFAULT -> className;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -160,7 +147,7 @@ public interface TypeCache {
|
|||
for (String classes : cacheBuilder.className) {
|
||||
try {
|
||||
this.BUILDER_CLASS = Class.forName(classes);
|
||||
} catch (ClassNotFoundException classNotFoundException) {
|
||||
} catch (ClassNotFoundException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -219,7 +206,7 @@ public interface TypeCache {
|
|||
try {
|
||||
Method maybeGet;
|
||||
if (!Iterables.isEmpty(this.cacheBuilder.parameterTypes)) {
|
||||
maybeGet = this.BUILDER_CLASS.getDeclaredMethod(methodName, (Class[]) Iterables.get((Iterable) this.cacheBuilder.parameterTypes, 0));
|
||||
maybeGet = this.BUILDER_CLASS.getDeclaredMethod(methodName, Iterables.get(this.cacheBuilder.parameterTypes, 0));
|
||||
} else {
|
||||
maybeGet = this.BUILDER_CLASS.getDeclaredMethod(methodName);
|
||||
}
|
||||
|
@ -227,7 +214,7 @@ public interface TypeCache {
|
|||
continue;
|
||||
maybeGet.setAccessible(true);
|
||||
methodThis = maybeGet;
|
||||
} catch (NoSuchMethodException noSuchMethodException) {
|
||||
} catch (NoSuchMethodException ignored) {
|
||||
}
|
||||
}
|
||||
return methodThis;
|
||||
|
@ -279,15 +266,14 @@ public interface TypeCache {
|
|||
protected Constructor<?> onLoad() throws NoSuchMethodException {
|
||||
Constructor<?> constructor = null;
|
||||
if (Iterables.size(this.cacheBuilder.parameterTypes) > 1) {
|
||||
for (UnmodifiableIterator<Class<?>[]> unmodifiableIterator = this.cacheBuilder.parameterTypes.iterator(); unmodifiableIterator.hasNext(); ) {
|
||||
Class<?>[] keyParameters = unmodifiableIterator.next();
|
||||
for (Class<?>[] keyParameters : this.cacheBuilder.parameterTypes) {
|
||||
try {
|
||||
constructor = this.BUILDER_CLASS.getDeclaredConstructor(keyParameters);
|
||||
} catch (NoSuchMethodException noSuchMethodException) {
|
||||
} catch (NoSuchMethodException ignored) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
constructor = (Iterables.size(this.cacheBuilder.parameterTypes) > 0) ? this.BUILDER_CLASS.getDeclaredConstructor((Class[]) Iterables.get((Iterable) this.cacheBuilder.parameterTypes, 0)) : this.BUILDER_CLASS.getDeclaredConstructor();
|
||||
constructor = (Iterables.size(this.cacheBuilder.parameterTypes) > 0) ? this.BUILDER_CLASS.getDeclaredConstructor(Iterables.get(this.cacheBuilder.parameterTypes, 0)) : this.BUILDER_CLASS.getDeclaredConstructor();
|
||||
}
|
||||
if (constructor != null)
|
||||
constructor.setAccessible(true);
|
||||
|
@ -301,10 +287,10 @@ public interface TypeCache {
|
|||
}
|
||||
|
||||
protected Enum<?>[] onLoad() {
|
||||
Enum[] arrayOfEnum = (Enum[]) this.BUILDER_CLASS.getEnumConstants();
|
||||
Enum<?>[] arrayOfEnum = (Enum<?>[]) this.BUILDER_CLASS.getEnumConstants();
|
||||
for (Enum<?> enumConstant : arrayOfEnum)
|
||||
TypeCache.ClassCache.register(enumConstant.name(), enumConstant, this.BUILDER_CLASS);
|
||||
return (Enum<?>[]) arrayOfEnum;
|
||||
return arrayOfEnum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.bukkit.command.defaults.BukkitCommand;
|
|||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class Command extends BukkitCommand {
|
||||
private static final String WHITESPACE = " ";
|
||||
|
||||
|
@ -69,15 +70,13 @@ public class Command extends BukkitCommand {
|
|||
|
||||
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
|
||||
Optional<Map.Entry<CommandInformation, CommandInvoker>> subCommandOptional = this.subCommands.entrySet().stream().filter(command -> command.getKey().name().contentEquals((args.length > 0) ? args[0] : "")).findFirst();
|
||||
if (!subCommandOptional.isPresent()) {
|
||||
if (subCommandOptional.isEmpty()) {
|
||||
sender.sendMessage(ChatColor.RED + "can't find command: " + commandLabel + ".");
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
Map.Entry<CommandInformation, CommandInvoker> subCommand = subCommandOptional.get();
|
||||
((CommandInvoker) subCommand.getValue()).execute(new CommandSender(sender),
|
||||
|
||||
loadArgs(subCommand.getKey(), Arrays.asList(args)));
|
||||
subCommand.getValue().execute(new io.github.znetworkw.znpcservers.commands.CommandSender(sender), loadArgs(subCommand.getKey(), Arrays.asList(args)));
|
||||
} catch (CommandExecuteException e) {
|
||||
sender.sendMessage(ChatColor.RED + "can't execute command.");
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
|
|||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class CommandSender {
|
||||
static final Joiner LINE_SEPARATOR_JOINER = Joiner.on("\n");
|
||||
|
||||
|
|
|
@ -29,18 +29,16 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@SuppressWarnings({"UnstableApiUsage", "deprecation"})
|
||||
public class DefaultCommand extends Command {
|
||||
private static final String WHITESPACE = " ";
|
||||
|
||||
private static final Splitter SPACE_SPLITTER = Splitter.on(" ");
|
||||
|
||||
private static final Joiner SPACE_JOINER = Joiner.on(" ");
|
||||
|
||||
private static final SkinFunction DO_APPLY_SKIN;
|
||||
|
||||
static {
|
||||
DO_APPLY_SKIN = ((sender, npc, skin) -> NPCSkin.forName(skin, ()));
|
||||
}
|
||||
private static final SkinFunction DO_APPLY_SKIN = (sender, npc, skin) -> NPCSkin.forName(skin, (values, ex) -> {
|
||||
if (ex != null) throw new RuntimeException(ex);
|
||||
npc.changeSkin(NPCSkin.forValues(values));
|
||||
});
|
||||
|
||||
public DefaultCommand() {
|
||||
super("znpcs");
|
||||
|
@ -69,7 +67,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
boolean foundNPC = ConfigurationConstants.NPC_LIST.stream().anyMatch(npc -> (npc.getId() == id.intValue()));
|
||||
boolean foundNPC = ConfigurationConstants.NPC_LIST.stream().anyMatch(npc -> (npc.getId() == id));
|
||||
if (foundNPC) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_FOUND);
|
||||
return;
|
||||
|
@ -80,7 +78,7 @@ public class DefaultCommand extends Command {
|
|||
return;
|
||||
}
|
||||
NPCType npcType = NPCType.valueOf(args.get("type").toUpperCase());
|
||||
NPC npc = ZNPCsPlus.createNPC(id.intValue(), npcType, sender.getPlayer().getLocation(), name);
|
||||
NPC npc = ZNPCsPlus.createNPC(id, npcType, sender.getPlayer().getLocation(), name);
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.SUCCESS);
|
||||
if (npcType == NPCType.PLAYER) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.FETCHING_SKIN, name);
|
||||
|
@ -99,12 +97,12 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
ZNPCsPlus.deleteNPC(id.intValue());
|
||||
ZNPCsPlus.deleteNPC(id);
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.SUCCESS);
|
||||
}
|
||||
|
||||
|
@ -121,7 +119,7 @@ public class DefaultCommand extends Command {
|
|||
textComponent.setColor(ChatColor.GREEN);
|
||||
parts.add(textComponent);
|
||||
TextComponent textComponent2 = new TextComponent("[TELEPORT]");
|
||||
textComponent2.setBold(Boolean.valueOf(true));
|
||||
textComponent2.setBold(true);
|
||||
textComponent2.setColor(ChatColor.DARK_GREEN);
|
||||
textComponent2.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, (new ComponentBuilder("Click to teleport this npc!"))
|
||||
|
||||
|
@ -131,7 +129,7 @@ public class DefaultCommand extends Command {
|
|||
parts.add(textComponent2);
|
||||
parts.add(new TextComponent(" "));
|
||||
TextComponent textComponent3 = new TextComponent("[DELETE]");
|
||||
textComponent3.setBold(Boolean.valueOf(true));
|
||||
textComponent3.setBold(true);
|
||||
textComponent3.setColor(ChatColor.DARK_RED);
|
||||
textComponent3.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, (new ComponentBuilder("Click to delete this npc!"))
|
||||
|
||||
|
@ -155,7 +153,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -176,7 +174,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -202,7 +200,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -223,7 +221,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -244,7 +242,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -275,7 +273,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -289,7 +287,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -298,7 +296,7 @@ public class DefaultCommand extends Command {
|
|||
if (actionId == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else {
|
||||
if (actionId.intValue() >= foundNPC.getNpcPojo().getClickActions().size()) {
|
||||
if (actionId >= foundNPC.getNpcPojo().getClickActions().size()) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NO_ACTION_FOUND);
|
||||
return;
|
||||
}
|
||||
|
@ -316,21 +314,21 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
Integer actionId = Ints.tryParse(split.get(1));
|
||||
Integer actionDelay = Ints.tryParse(split.get(2));
|
||||
if (actionId == null || id == null || actionDelay == null) {
|
||||
if (actionId == null || actionDelay == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else {
|
||||
if (actionId.intValue() >= foundNPC.getNpcPojo().getClickActions().size()) {
|
||||
if (actionId >= foundNPC.getNpcPojo().getClickActions().size()) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NO_ACTION_FOUND);
|
||||
return;
|
||||
}
|
||||
foundNPC.getNpcPojo().getClickActions().get(actionId.intValue()).setDelay(actionDelay.intValue());
|
||||
foundNPC.getNpcPojo().getClickActions().get(actionId).setDelay(actionDelay);
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.SUCCESS);
|
||||
}
|
||||
} else if (args.containsKey("list")) {
|
||||
|
@ -339,7 +337,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -363,7 +361,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -388,7 +386,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -434,7 +432,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -480,7 +478,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -499,7 +497,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
@ -509,7 +507,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
foundNPC.getNpcPojo().setHologramHeight(givenHeight.doubleValue());
|
||||
foundNPC.getNpcPojo().setHologramHeight(givenHeight);
|
||||
foundNPC.getHologram().createHologram();
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.SUCCESS);
|
||||
}
|
||||
|
@ -553,7 +551,7 @@ public class DefaultCommand extends Command {
|
|||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.INVALID_NUMBER);
|
||||
return;
|
||||
}
|
||||
NPC foundNPC = NPC.find(id.intValue());
|
||||
NPC foundNPC = NPC.find(id);
|
||||
if (foundNPC == null) {
|
||||
Configuration.MESSAGES.sendMessage(sender.getCommandSender(), ConfigurationValue.NPC_NOT_FOUND);
|
||||
return;
|
||||
|
|
|
@ -2,6 +2,8 @@ package io.github.znetworkw.znpcservers.commands.list.inventory;
|
|||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.primitives.Ints;
|
||||
import io.github.znetworkw.znpcservers.configuration.Configuration;
|
||||
import io.github.znetworkw.znpcservers.configuration.ConfigurationConstants;
|
||||
import io.github.znetworkw.znpcservers.configuration.ConfigurationValue;
|
||||
|
@ -20,84 +22,82 @@ import org.bukkit.entity.Player;
|
|||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ConversationGUI extends ZInventory {
|
||||
private static final String WHITESPACE = " ";
|
||||
|
||||
private static final Splitter SPACE_SPLITTER = Splitter.on(" ");
|
||||
|
||||
private static final Joiner SPACE_JOINER = Joiner.on(" ");
|
||||
|
||||
public ConversationGUI(Player player) {
|
||||
super(player);
|
||||
setCurrentPage(new MainPage(this));
|
||||
this.setCurrentPage(new MainPage(this));
|
||||
}
|
||||
|
||||
@SuppressWarnings({"UnstableApiUsage", "deprecation"})
|
||||
static class MainPage extends ZInventoryPage {
|
||||
public MainPage(ZInventory inventory) {
|
||||
super(inventory, "Conversations", 5);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
for (int i = 0; i < ConfigurationConstants.NPC_CONVERSATIONS.size(); i++) {
|
||||
for (int i = 0; i < ConfigurationConstants.NPC_CONVERSATIONS.size(); ++i) {
|
||||
Conversation conversation = ConfigurationConstants.NPC_CONVERSATIONS.get(i);
|
||||
addItem(ItemStackBuilder.forMaterial(Material.PAPER).setName(ChatColor.GREEN + conversation.getName()).setLore(new String[]{"&7this conversation has &b" + conversation.getTexts().size() + " &7texts,", "&7it will activate when a player is on a &b" + conversation.getRadius() + "x" + conversation.getRadius() + " &7radius,", "&7or when a player interacts with an npc.", "&7when the conversation is finish, there is a &b" + conversation.getDelay() + "s &7delay to start again.", "&f&lUSES", " &bLeft-click &7to manage texts.", " &bRight-click &7to add a new text.", " &bQ &7to change the radius.", " &bMiddle-click &7to change the cooldown."}, ).build(), i, clickEvent -> {
|
||||
this.addItem(ItemStackBuilder.forMaterial(Material.PAPER).setName(ChatColor.GREEN + conversation.getName()).setLore("&7this conversation has &b" + conversation.getTexts().size() + " &7texts,", "&7it will activate when a player is on a &b" + conversation.getRadius() + "x" + conversation.getRadius() + " &7radius,", "&7or when a player interacts with an npc.", "&7when the conversation is finish, there is a &b" + conversation.getDelay() + "s &7delay to start again.", "&f&lUSES", " &bLeft-click &7to manage texts.", " &bRight-click &7to add a new text.", " &bQ &7to change the radius.", " &bMiddle-click &7to change the cooldown.").build(), i, clickEvent -> {
|
||||
if (clickEvent.getClick() == ClickType.DROP) {
|
||||
Utils.sendTitle(getPlayer(), "&b&lCHANGE RADIUS", "&7Type the new radius...");
|
||||
EventService.addService(ZUser.find(getPlayer()), AsyncPlayerChatEvent.class).addConsumer(()).addConsumer(());
|
||||
Utils.sendTitle(this.getPlayer(), "&b&lCHANGE RADIUS", "&7Type the new radius...");
|
||||
EventService.addService(ZUser.find(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> {
|
||||
if (!ConfigurationConstants.NPC_CONVERSATIONS.contains(conversation)) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND);
|
||||
} else {
|
||||
Integer radius = Ints.tryParse(event.getMessage());
|
||||
if (radius == null) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else if (radius < 0) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else {
|
||||
conversation.setRadius(radius);
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
}
|
||||
}
|
||||
}).addConsumer(event -> this.openInventory());
|
||||
} else if (clickEvent.isRightClick()) {
|
||||
Utils.sendTitle(getPlayer(), "&e&lADD LINE", "&7Type the new line...");
|
||||
EventService.addService(ZUser.find(getPlayer()), AsyncPlayerChatEvent.class).addConsumer(()).addConsumer(());
|
||||
Utils.sendTitle(this.getPlayer(), "&e&lADD LINE", "&7Type the new line...");
|
||||
EventService.addService(ZUser.find(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> {
|
||||
if (!ConfigurationConstants.NPC_CONVERSATIONS.contains(conversation)) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND);
|
||||
} else {
|
||||
conversation.getTexts().add(new ConversationKey(event.getMessage()));
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
}
|
||||
}).addConsumer(event -> this.openInventory());
|
||||
} else if (clickEvent.isLeftClick()) {
|
||||
(new EditConversationPage(getInventory(), conversation)).openInventory();
|
||||
new EditConversationPage(this.getInventory(), conversation).openInventory();
|
||||
} else if (clickEvent.getClick() == ClickType.MIDDLE) {
|
||||
Utils.sendTitle(getPlayer(), "&6&lCHANGE COOLDOWN", "&7Type the new cooldown...");
|
||||
EventService.addService(ZUser.find(getPlayer()), AsyncPlayerChatEvent.class).addConsumer(()).addConsumer(());
|
||||
Utils.sendTitle(this.getPlayer(), "&6&lCHANGE COOLDOWN", "&7Type the new cooldown...");
|
||||
EventService.addService(ZUser.find(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> {
|
||||
if (!ConfigurationConstants.NPC_CONVERSATIONS.contains(conversation)) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND);
|
||||
} else {
|
||||
Integer cooldown = Ints.tryParse(event.getMessage());
|
||||
if (cooldown == null) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else if (cooldown < 0) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else {
|
||||
conversation.setDelay(cooldown);
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
}
|
||||
}
|
||||
}).addConsumer(event -> this.openInventory());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
static class EditConversationPage extends ZInventoryPage {
|
||||
private final Conversation conversation;
|
||||
|
||||
public EditConversationPage(ZInventory inventory, Conversation conversation) {
|
||||
super(inventory, "Editing conversation " + conversation.getName(), 5);
|
||||
this.conversation = conversation;
|
||||
}
|
||||
|
||||
public void update() {
|
||||
for (int i = 0; i < this.conversation.getTexts().size(); i++) {
|
||||
ConversationKey conversationKey = this.conversation.getTexts().get(i);
|
||||
addItem(ItemStackBuilder.forMaterial(Material.NAME_TAG).setName(ChatColor.AQUA + conversationKey.getTextFormatted() + "....").setLore(new String[]{
|
||||
"&7this conversation text has a delay of &b" + conversationKey.getDelay() + "s &7to be executed,", "&7the sound for the text is &b" + ((conversationKey.getSoundName() == null) ? "NONE" : conversationKey.getSoundName()) + "&7,", "&7before sending the text there is a delay of &b" + conversationKey.getDelay() + "s", "&7the index for the text is &b" + i + "&7,", "&7and the conversation has currently &b" + conversationKey.getActions().size() + " actions&7.", "&f&lUSES", " &bLeft-click &7to change the position.", " &bRight-click &7to remove text.", " &bLeft-Shift-click &7to change the sound.", " &bMiddle-click &7to change the delay.",
|
||||
" &bRight-Shift-click &7to edit the text.", " &bQ &7to manage actions."}, ).build(), i, clickEvent -> {
|
||||
if (clickEvent.getClick() == ClickType.SHIFT_LEFT) {
|
||||
Utils.sendTitle(getPlayer(), "&c&lCHANGE SOUND", "&7Type the new sound...");
|
||||
EventService.addService(ZUser.find(getPlayer()), AsyncPlayerChatEvent.class).addConsumer(()).addConsumer(());
|
||||
} else if (clickEvent.getClick() == ClickType.SHIFT_RIGHT) {
|
||||
Utils.sendTitle(getPlayer(), "&a&lEDIT TEXT", "&7Type the new text...");
|
||||
EventService.addService(ZUser.find(getPlayer()), AsyncPlayerChatEvent.class).addConsumer(()).addConsumer(());
|
||||
} else if (clickEvent.isLeftClick()) {
|
||||
Utils.sendTitle(getPlayer(), "&e&lCHANGE POSITION &a>=0&c<=" + this.conversation.getTexts().size(), "&7Type the new position...");
|
||||
EventService.addService(ZUser.find(getPlayer()), AsyncPlayerChatEvent.class).addConsumer(()).addConsumer(());
|
||||
} else if (clickEvent.isRightClick()) {
|
||||
this.conversation.getTexts().remove(conversationKey);
|
||||
Configuration.MESSAGES.sendMessage(getPlayer(), ConfigurationValue.SUCCESS);
|
||||
openInventory();
|
||||
} else if (clickEvent.getClick() == ClickType.MIDDLE) {
|
||||
Utils.sendTitle(getPlayer(), "&d&lCHANGE DELAY", "&7Type the new delay...");
|
||||
EventService.addService(ZUser.find(getPlayer()), AsyncPlayerChatEvent.class).addConsumer(()).addConsumer(());
|
||||
} else if (clickEvent.getClick() == ClickType.DROP) {
|
||||
(new ConversationGUI.MainPage.ActionManagementPage(getInventory(), this.conversation, conversationKey)).openInventory();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class ActionManagementPage extends ZInventoryPage {
|
||||
private final Conversation conversation;
|
||||
|
||||
private final ConversationKey conversationKey;
|
||||
|
||||
public ActionManagementPage(ZInventory inventory, Conversation conversation, ConversationKey conversationKey) {
|
||||
|
@ -106,22 +106,117 @@ public class ConversationGUI extends ZInventory {
|
|||
this.conversationKey = conversationKey;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
for (int i = 0; i < this.conversationKey.getActions().size(); i++) {
|
||||
for (int i = 0; i < this.conversationKey.getActions().size(); ++i) {
|
||||
NPCAction znpcAction = this.conversationKey.getActions().get(i);
|
||||
addItem(ItemStackBuilder.forMaterial(Material.ANVIL).setName(ChatColor.AQUA + znpcAction.getAction().substring(0, Math.min(znpcAction.getAction().length(), 24)) + "....").setLore("&7this action type is &b" + znpcAction.getActionType(), "&f&lUSES", " &bRight-click &7to remove text.").build(), i, clickEvent -> {
|
||||
this.addItem(ItemStackBuilder.forMaterial(Material.ANVIL).setName(ChatColor.AQUA + znpcAction.getAction().substring(0, Math.min(znpcAction.getAction().length(), 24)) + "....").setLore("&7this action type is &b" + znpcAction.getActionType(), "&f&lUSES", " &bRight-click &7to remove text.").build(), i, clickEvent -> {
|
||||
if (clickEvent.isRightClick()) {
|
||||
this.conversationKey.getActions().remove(znpcAction);
|
||||
Configuration.MESSAGES.sendMessage(getPlayer(), ConfigurationValue.SUCCESS);
|
||||
openInventory();
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
this.openInventory();
|
||||
}
|
||||
});
|
||||
}
|
||||
addItem(ItemStackBuilder.forMaterial(Material.EMERALD).setName(ChatColor.AQUA + "ADD A NEW ACTION").setLore(new String[]{"&7click here..."}, ).build(), getRows() - 5, clickEvent -> {
|
||||
Utils.sendTitle(getPlayer(), "&d&lADD ACTION", "&7Type the action...");
|
||||
EventService.addService(ZUser.find(getPlayer()), AsyncPlayerChatEvent.class).addConsumer(()).addConsumer(());
|
||||
this.addItem(ItemStackBuilder.forMaterial(Material.EMERALD).setName(ChatColor.AQUA + "ADD A NEW ACTION").setLore("&7click here...").build(), this.getRows() - 5, clickEvent -> {
|
||||
Utils.sendTitle(this.getPlayer(), "&d&lADD ACTION", "&7Type the action...");
|
||||
EventService.addService(ZUser.find(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> {
|
||||
if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(this.conversationKey)) {
|
||||
List<String> stringList = SPACE_SPLITTER.splitToList(event.getMessage());
|
||||
if (stringList.size() < 2) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INCORRECT_USAGE);
|
||||
} else {
|
||||
this.conversationKey.getActions().add(new NPCAction(stringList.get(0).toUpperCase(), SPACE_JOINER.join(Iterables.skip(stringList, 1))));
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
}
|
||||
} else {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND);
|
||||
}
|
||||
}).addConsumer(event -> this.openInventory());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({"deprecation", "UnstableApiUsage"})
|
||||
static class EditConversationPage extends ZInventoryPage {
|
||||
private final Conversation conversation;
|
||||
|
||||
public EditConversationPage(ZInventory inventory, Conversation conversation) {
|
||||
super(inventory, "Editing conversation " + conversation.getName(), 5);
|
||||
this.conversation = conversation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
for (int i = 0; i < this.conversation.getTexts().size(); ++i) {
|
||||
ConversationKey conversationKey = this.conversation.getTexts().get(i);
|
||||
this.addItem(ItemStackBuilder.forMaterial(Material.NAME_TAG).setName(ChatColor.AQUA + conversationKey.getTextFormatted() + "....").setLore("&7this conversation text has a delay of &b" + conversationKey.getDelay() + "s &7to be executed,", "&7the sound for the text is &b" + (conversationKey.getSoundName() == null ? "NONE" : conversationKey.getSoundName()) + "&7,", "&7before sending the text there is a delay of &b" + conversationKey.getDelay() + "s", "&7the index for the text is &b" + i + "&7,", "&7and the conversation has currently &b" + conversationKey.getActions().size() + " actions&7.", "&f&lUSES", " &bLeft-click &7to change the position.", " &bRight-click &7to remove text.", " &bLeft-Shift-click &7to change the sound.", " &bMiddle-click &7to change the delay.", " &bRight-Shift-click &7to edit the text.", " &bQ &7to manage actions.").build(), i, clickEvent -> {
|
||||
if (clickEvent.getClick() == ClickType.SHIFT_LEFT) {
|
||||
Utils.sendTitle(this.getPlayer(), "&c&lCHANGE SOUND", "&7Type the new sound...");
|
||||
EventService.addService(ZUser.find(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> {
|
||||
if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(conversationKey)) {
|
||||
String sound = event.getMessage().trim();
|
||||
conversationKey.setSoundName(sound);
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
} else {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND);
|
||||
}
|
||||
}).addConsumer(event -> this.openInventory());
|
||||
} else if (clickEvent.getClick() == ClickType.SHIFT_RIGHT) {
|
||||
Utils.sendTitle(this.getPlayer(), "&a&lEDIT TEXT", "&7Type the new text...");
|
||||
EventService.addService(ZUser.find(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> {
|
||||
if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(conversationKey)) {
|
||||
conversationKey.getLines().clear();
|
||||
conversationKey.getLines().addAll(SPACE_SPLITTER.splitToList(event.getMessage()));
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
} else {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND);
|
||||
}
|
||||
}).addConsumer(event -> this.openInventory());
|
||||
} else if (clickEvent.isLeftClick()) {
|
||||
Utils.sendTitle(this.getPlayer(), "&e&lCHANGE POSITION &a>=0&c<=" + this.conversation.getTexts().size(), "&7Type the new position...");
|
||||
EventService.addService(ZUser.find(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> {
|
||||
if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(conversationKey)) {
|
||||
Integer position = Ints.tryParse(event.getMessage());
|
||||
if (position == null) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else if (position >= 0 && position <= this.conversation.getTexts().size() - 1) {
|
||||
Collections.swap(this.conversation.getTexts(), this.conversation.getTexts().indexOf(conversationKey), position);
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
} else {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_SIZE);
|
||||
}
|
||||
} else {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND);
|
||||
}
|
||||
}).addConsumer(event -> this.openInventory());
|
||||
} else if (clickEvent.isRightClick()) {
|
||||
this.conversation.getTexts().remove(conversationKey);
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
this.openInventory();
|
||||
} else if (clickEvent.getClick() == ClickType.MIDDLE) {
|
||||
Utils.sendTitle(this.getPlayer(), "&d&lCHANGE DELAY", "&7Type the new delay...");
|
||||
EventService.addService(ZUser.find(this.getPlayer()), AsyncPlayerChatEvent.class).addConsumer(event -> {
|
||||
if (ConfigurationConstants.NPC_CONVERSATIONS.contains(this.conversation) && this.conversation.getTexts().contains(conversationKey)) {
|
||||
Integer delay = Ints.tryParse(event.getMessage());
|
||||
if (delay == null) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else if (delay < 0) {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.INVALID_NUMBER);
|
||||
} else {
|
||||
conversationKey.setDelay(delay);
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.SUCCESS);
|
||||
}
|
||||
} else {
|
||||
Configuration.MESSAGES.sendMessage(this.getPlayer(), ConfigurationValue.NO_CONVERSATION_FOUND);
|
||||
}
|
||||
}).addConsumer(event -> this.openInventory());
|
||||
} else if (clickEvent.getClick() == ClickType.DROP) {
|
||||
new ActionManagementPage(this.getInventory(), this.conversation, conversationKey).openInventory();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,14 @@
|
|||
package io.github.znetworkw.znpcservers.configuration;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonParser;
|
||||
import lol.pyr.znpcsplus.ZNPCsPlus;
|
||||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import lol.pyr.znpcsplus.ZNPCsPlus;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.lang.reflect.Type;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
|
@ -21,107 +18,110 @@ import java.util.Map;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
public class Configuration {
|
||||
private static final Charset CHARSET = StandardCharsets.UTF_8;
|
||||
private final String name;
|
||||
private final Path path;
|
||||
private final Map<ConfigurationValue, Object> configurationValues;
|
||||
public static final Configuration CONFIGURATION = new Configuration("config");
|
||||
public static final Configuration MESSAGES = new Configuration("messages");
|
||||
public static final Configuration CONVERSATIONS = new Configuration("conversations");
|
||||
public static final Configuration DATA = new Configuration("data");
|
||||
public static final ImmutableList<Configuration> SAVE_CONFIGURATIONS = ImmutableList.of(CONVERSATIONS, DATA);
|
||||
static final String CONFIG_FORMAT = ".json";
|
||||
private static final JsonParser JSON_PARSER = new JsonParser();
|
||||
private static final Charset CHARSET = StandardCharsets.UTF_8;
|
||||
private final String name;
|
||||
private final Path path;
|
||||
private final Map<ConfigurationValue, Object> configurationValues;
|
||||
|
||||
protected Configuration(String name) {
|
||||
this(name, ZNPCsPlus.PLUGIN_FOLDER.toPath().resolve(name + ".json"));
|
||||
}
|
||||
|
||||
private Configuration(String name, Path path) {
|
||||
if (!path.getFileName().toString().endsWith(".json"))
|
||||
if (!path.getFileName().toString().endsWith(".json")) {
|
||||
throw new IllegalStateException("invalid configuration format for: " + path.getFileName());
|
||||
} else {
|
||||
this.name = name;
|
||||
this.path = path;
|
||||
this
|
||||
|
||||
.configurationValues = (Map<ConfigurationValue, Object>) ((ImmutableSet) ConfigurationValue.VALUES_BY_NAME.get(name)).stream().collect(Collectors.toMap(c -> c, ConfigurationValue::getValue));
|
||||
onLoad();
|
||||
this.configurationValues = ConfigurationValue.VALUES_BY_NAME.get(name).stream().collect(Collectors.toMap((c) -> c, ConfigurationValue::getValue));
|
||||
this.onLoad();
|
||||
}
|
||||
}
|
||||
|
||||
protected void onLoad() {
|
||||
synchronized (this.path) {
|
||||
synchronized(this.path) {
|
||||
try {
|
||||
Reader reader = Files.newBufferedReader(this.path, CHARSET);
|
||||
|
||||
try {
|
||||
JsonElement data = JSON_PARSER.parse(reader);
|
||||
if (data == null) {
|
||||
if (reader != null)
|
||||
reader.close();
|
||||
return;
|
||||
}
|
||||
for (ConfigurationValue configValue : this.configurationValues.keySet()) {
|
||||
boolean single = (this.configurationValues.size() == 1);
|
||||
JsonElement data = JsonParser.parseReader(reader);
|
||||
if (data != null) {
|
||||
for(ConfigurationValue configValue : this.configurationValues.keySet()) {
|
||||
boolean single = this.configurationValues.size() == 1;
|
||||
JsonElement jsonElement = single ? data : (data.isJsonObject() ? data.getAsJsonObject().get(configValue.name()) : null);
|
||||
if (jsonElement != null && !jsonElement.isJsonNull()) {
|
||||
if (!single && configValue.getPrimitiveType().isEnum()) {
|
||||
this.configurationValues.put(configValue, ZNPCsPlus.GSON.fromJson(jsonElement, configValue.getPrimitiveType()));
|
||||
continue;
|
||||
}
|
||||
this.configurationValues.put(configValue, ZNPCsPlus.GSON.fromJson(jsonElement,.Gson.Types.newParameterizedTypeWithOwner(null, configValue.getValue().getClass(), new Type[]{configValue.getPrimitiveType()})))
|
||||
} else {
|
||||
throw new RuntimeException();
|
||||
// what is this fuckery??
|
||||
// this.configurationValues.put(configValue, ZNPCsPlus.GSON.fromJson(jsonElement, $Gson$Types.newParameterizedTypeWithOwner((Type)null, configValue.getValue().getClass(), new Type[]{configValue.getPrimitiveType()})));
|
||||
}
|
||||
}
|
||||
if (reader != null)
|
||||
}
|
||||
|
||||
reader.close();
|
||||
} catch (Throwable throwable) {
|
||||
if (reader != null)
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
reader.close();
|
||||
} catch (Throwable var17) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (Throwable throwable1) {
|
||||
throwable.addSuppressed(throwable1);
|
||||
} catch (Throwable var16) {
|
||||
var17.addSuppressed(var16);
|
||||
}
|
||||
throw throwable;
|
||||
}
|
||||
} catch (NoSuchFileException noSuchFileException) {
|
||||
|
||||
} catch (IOException e) {
|
||||
throw var17;
|
||||
}
|
||||
} catch (NoSuchFileException ignored) {
|
||||
} catch (IOException var19) {
|
||||
throw new IllegalStateException("Failed to read config: " + this.name);
|
||||
} finally {
|
||||
save();
|
||||
this.save();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void save() {
|
||||
synchronized (this.path) {
|
||||
synchronized(this.path) {
|
||||
try {
|
||||
Writer writer = Files.newBufferedWriter(this.path, CHARSET);
|
||||
|
||||
try {
|
||||
ZNPCsPlus.GSON.toJson((this.configurationValues.size() == 1) ?
|
||||
this.configurationValues.values().iterator().next() : this.configurationValues, writer);
|
||||
if (writer != null)
|
||||
ZNPCsPlus.GSON.toJson(this.configurationValues.size() == 1 ? this.configurationValues.values().iterator().next() : this.configurationValues, writer);
|
||||
writer.close();
|
||||
} catch (Throwable throwable) {
|
||||
if (writer != null)
|
||||
} catch (Throwable var7) {
|
||||
try {
|
||||
writer.close();
|
||||
} catch (Throwable throwable1) {
|
||||
throwable.addSuppressed(throwable1);
|
||||
} catch (Throwable var6) {
|
||||
var7.addSuppressed(var6);
|
||||
}
|
||||
throw throwable;
|
||||
|
||||
throw var7;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
} catch (IOException var8) {
|
||||
throw new IllegalStateException("Failed to save config: " + this.name);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T getValue(ConfigurationValue configValue) {
|
||||
synchronized (this.path) {
|
||||
return (T) this.configurationValues.get(configValue);
|
||||
synchronized(this.path) {
|
||||
return (T)this.configurationValues.get(configValue);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendMessage(CommandSender sender, ConfigurationValue configValue, Object... replaces) {
|
||||
sender.sendMessage(Utils.toColor(String.format(getValue(configValue), replaces)));
|
||||
public void sendMessage(org.bukkit.command.CommandSender sender, ConfigurationValue configValue, Object... replaces) {
|
||||
sender.sendMessage(Utils.toColor(String.format(this.getValue(configValue), replaces)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,11 +8,11 @@ import java.util.List;
|
|||
public final class ConfigurationConstants {
|
||||
public static final String SPACE_SYMBOL = Configuration.CONFIGURATION.getValue(ConfigurationValue.REPLACE_SYMBOL);
|
||||
|
||||
public static final int VIEW_DISTANCE = Configuration.CONFIGURATION.<Integer>getValue(ConfigurationValue.VIEW_DISTANCE).intValue();
|
||||
public static final int VIEW_DISTANCE = Configuration.CONFIGURATION.<Integer>getValue(ConfigurationValue.VIEW_DISTANCE);
|
||||
|
||||
public static final int SAVE_DELAY = Configuration.CONFIGURATION.<Integer>getValue(ConfigurationValue.SAVE_NPCS_DELAY_SECONDS).intValue();
|
||||
public static final int SAVE_DELAY = Configuration.CONFIGURATION.<Integer>getValue(ConfigurationValue.SAVE_NPCS_DELAY_SECONDS);
|
||||
|
||||
public static final boolean RGB_ANIMATION = Configuration.CONFIGURATION.<Boolean>getValue(ConfigurationValue.ANIMATION_RGB).booleanValue();
|
||||
public static final boolean RGB_ANIMATION = Configuration.CONFIGURATION.<Boolean>getValue(ConfigurationValue.ANIMATION_RGB);
|
||||
|
||||
public static final List<NPCModel> NPC_LIST = Configuration.DATA.getValue(ConfigurationValue.NPC_LIST);
|
||||
|
||||
|
|
|
@ -12,14 +12,14 @@ import java.util.Map;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
public enum ConfigurationValue {
|
||||
NPC_LIST("data", new ArrayList(), NPCModel.class),
|
||||
VIEW_DISTANCE("config", Integer.valueOf(32), Integer.class),
|
||||
NPC_LIST("data", new ArrayList<>(), NPCModel.class),
|
||||
VIEW_DISTANCE("config", 32, Integer.class),
|
||||
REPLACE_SYMBOL("config", "-", String.class),
|
||||
SAVE_NPCS_DELAY_SECONDS("config", Integer.valueOf(600), Integer.class),
|
||||
MAX_PATH_LOCATIONS("config", Integer.valueOf(500), Integer.class),
|
||||
SAVE_NPCS_DELAY_SECONDS("config", 600, Integer.class),
|
||||
MAX_PATH_LOCATIONS("config", 500, Integer.class),
|
||||
NAMING_METHOD("config", NamingType.DEFAULT, NamingType.class),
|
||||
DEBUG_ENABLED("config", Boolean.TRUE, Boolean.class),
|
||||
LINE_SPACING("config", Double.valueOf(0.3D), Double.class),
|
||||
LINE_SPACING("config", 0.3D, Double.class),
|
||||
ANIMATION_RGB("config", Boolean.FALSE, Boolean.class),
|
||||
NO_PERMISSION("messages", "&cYou do not have permission to execute this command.", String.class),
|
||||
SUCCESS("messages", "&aDone...", String.class),
|
||||
|
@ -50,7 +50,7 @@ public enum ConfigurationValue {
|
|||
FETCHING_SKIN("messages", "&aFetching skin for name: &f%s&a, wait...", String.class),
|
||||
CANT_GET_SKIN("messages", "&ccan't fetch skin with name: %s.", String.class),
|
||||
GET_SKIN("messages", "&aSkin fetched.", String.class),
|
||||
CONVERSATION_LIST("conversations", new ArrayList(), Conversation.class);
|
||||
CONVERSATION_LIST("conversations", new ArrayList<>(), Conversation.class);
|
||||
|
||||
public static final Map<String, ImmutableSet<ConfigurationValue>> VALUES_BY_NAME;
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
|
|||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class PlayerListener implements Listener {
|
||||
public PlayerListener(Plugin serversNPC) {
|
||||
serversNPC.getServer().getPluginManager().registerEvents(this, serversNPC);
|
||||
|
|
|
@ -10,7 +10,7 @@ public final class FunctionFactory {
|
|||
|
||||
public static ImmutableList<NPCFunction> WITH_FUNCTION = ImmutableList.of(new GlowFunction());
|
||||
|
||||
public static ImmutableList<NPCFunction> ALL = ImmutableList.builder()
|
||||
public static ImmutableList<NPCFunction> ALL = new ImmutableList.Builder<NPCFunction>()
|
||||
.addAll(WITHOUT_FUNCTION)
|
||||
.addAll(WITH_FUNCTION)
|
||||
.build();
|
||||
|
@ -32,7 +32,7 @@ public final class FunctionFactory {
|
|||
}
|
||||
|
||||
public static boolean isTrue(NPC npc, NPCFunction function) {
|
||||
return npc.getNpcPojo().getFunctions().getOrDefault(function.getName(), Boolean.FALSE).booleanValue();
|
||||
return npc.getNpcPojo().getFunctions().getOrDefault(function.getName(), false);
|
||||
}
|
||||
|
||||
public static boolean isTrue(NPC npc, String function) {
|
||||
|
|
|
@ -4,7 +4,6 @@ import com.google.common.collect.ImmutableList;
|
|||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
import com.mojang.authlib.properties.PropertyMap;
|
||||
import lol.pyr.znpcsplus.ZNPCsPlus;
|
||||
import io.github.znetworkw.znpcservers.UnexpectedCallException;
|
||||
import io.github.znetworkw.znpcservers.cache.CacheRegistry;
|
||||
import io.github.znetworkw.znpcservers.npc.conversation.ConversationModel;
|
||||
|
@ -13,10 +12,10 @@ import io.github.znetworkw.znpcservers.npc.packet.PacketCache;
|
|||
import io.github.znetworkw.znpcservers.user.ZUser;
|
||||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
import io.github.znetworkw.znpcservers.utility.location.ZLocation;
|
||||
import lol.pyr.znpcsplus.ZNPCsPlus;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
@ -74,14 +73,14 @@ public class NPC {
|
|||
}
|
||||
|
||||
public static NPC find(int id) {
|
||||
return NPC_MAP.get(Integer.valueOf(id));
|
||||
return NPC_MAP.get(id);
|
||||
}
|
||||
|
||||
public static void unregister(int id) {
|
||||
NPC npc = find(id);
|
||||
if (npc == null)
|
||||
throw new IllegalStateException("can't find npc with id " + id);
|
||||
NPC_MAP.remove(Integer.valueOf(id));
|
||||
NPC_MAP.remove(id);
|
||||
npc.deleteViewers();
|
||||
}
|
||||
|
||||
|
@ -90,7 +89,7 @@ public class NPC {
|
|||
}
|
||||
|
||||
public void onLoad() {
|
||||
if (NPC_MAP.containsKey(Integer.valueOf(getNpcPojo().getId())))
|
||||
if (NPC_MAP.containsKey(getNpcPojo().getId()))
|
||||
throw new IllegalStateException("npc with id " + getNpcPojo().getId() + " already exists.");
|
||||
this.gameProfile = new GameProfile(UUID.randomUUID(), "[ZNPC] " + this.npcName);
|
||||
this.gameProfile.getProperties().put("textures", new Property("textures", this.npcPojo.getSkin(), this.npcPojo.getSignature()));
|
||||
|
@ -101,7 +100,7 @@ public class NPC {
|
|||
if (this.npcPojo.getPathName() != null)
|
||||
setPath(NPCPath.AbstractTypeWriter.find(this.npcPojo.getPathName()));
|
||||
this.npcPojo.getCustomizationMap().forEach((key, value) -> this.npcPojo.getNpcType().updateCustomization(this, key, value));
|
||||
NPC_MAP.put(Integer.valueOf(getNpcPojo().getId()), this);
|
||||
NPC_MAP.put(getNpcPojo().getId(), this);
|
||||
}
|
||||
|
||||
public NPCModel getNpcPojo() {
|
||||
|
@ -160,8 +159,8 @@ public class NPC {
|
|||
this.lastMove = System.nanoTime();
|
||||
this.npcPojo.setLocation(new ZLocation(location = new Location(location.getWorld(), location.getBlockX() + 0.5D, location.getY(), location.getBlockZ() + 0.5D, location.getYaw(), location.getPitch())));
|
||||
}
|
||||
CacheRegistry.SET_LOCATION_METHOD.load().invoke(this.nmsEntity, Double.valueOf(location.getX()), Double.valueOf(location.getY()), Double.valueOf(location.getZ()), Float.valueOf(location.getYaw()), Float.valueOf(location.getPitch()));
|
||||
Object npcTeleportPacket = ((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_TELEPORT_CONSTRUCTOR.load()).newInstance(this.nmsEntity);
|
||||
CacheRegistry.SET_LOCATION_METHOD.load().invoke(this.nmsEntity, location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
|
||||
Object npcTeleportPacket = CacheRegistry.PACKET_PLAY_OUT_ENTITY_TELEPORT_CONSTRUCTOR.load().newInstance(this.nmsEntity);
|
||||
this.viewers.forEach(player -> Utils.sendPackets(player, npcTeleportPacket));
|
||||
this.hologram.setLocation(location, this.npcPojo.getNpcType().getHoloHeight());
|
||||
} catch (ReflectiveOperationException operationException) {
|
||||
|
@ -183,11 +182,11 @@ public class NPC {
|
|||
try {
|
||||
Object dataWatcherObject = CacheRegistry.GET_DATA_WATCHER_METHOD.load().invoke(this.nmsEntity);
|
||||
if (Utils.versionNewer(9)) {
|
||||
CacheRegistry.SET_DATA_WATCHER_METHOD.load().invoke(dataWatcherObject, ((Constructor) CacheRegistry.DATA_WATCHER_OBJECT_CONSTRUCTOR
|
||||
.load()).newInstance(Integer.valueOf(this.npcSkin.getLayerIndex()), CacheRegistry.DATA_WATCHER_REGISTER_FIELD
|
||||
.load()), Byte.valueOf(127));
|
||||
CacheRegistry.SET_DATA_WATCHER_METHOD.load().invoke(dataWatcherObject, CacheRegistry.DATA_WATCHER_OBJECT_CONSTRUCTOR
|
||||
.load().newInstance(this.npcSkin.getLayerIndex(), CacheRegistry.DATA_WATCHER_REGISTER_FIELD
|
||||
.load()), (byte) 127);
|
||||
} else {
|
||||
CacheRegistry.WATCH_DATA_WATCHER_METHOD.load().invoke(dataWatcherObject, Integer.valueOf(10), Byte.valueOf(127));
|
||||
CacheRegistry.WATCH_DATA_WATCHER_METHOD.load().invoke(dataWatcherObject, 10, (byte) 127);
|
||||
}
|
||||
} catch (ReflectiveOperationException operationException) {
|
||||
throw new UnexpectedCallException(operationException);
|
||||
|
@ -204,17 +203,17 @@ public class NPC {
|
|||
this.uuid = (UUID) CacheRegistry.GET_UNIQUE_ID_METHOD.load().invoke(this.nmsEntity, new Object[0]);
|
||||
if (isPlayer) {
|
||||
try {
|
||||
this.tabConstructor = ((Constructor) CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load()).newInstance(CacheRegistry.ADD_PLAYER_FIELD.load(), Collections.singletonList(this.nmsEntity));
|
||||
this.tabConstructor = CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load().newInstance(CacheRegistry.ADD_PLAYER_FIELD.load(), Collections.singletonList(this.nmsEntity));
|
||||
} catch (Throwable e) {
|
||||
this.tabConstructor = ((Constructor) CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load()).newInstance(CacheRegistry.ADD_PLAYER_FIELD.load(), this.nmsEntity);
|
||||
this.updateTabConstructor = ((Constructor) CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load()).newInstance(CacheRegistry.UPDATE_LISTED_FIELD.load(), this.nmsEntity);
|
||||
this.tabConstructor = CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load().newInstance(CacheRegistry.ADD_PLAYER_FIELD.load(), this.nmsEntity);
|
||||
this.updateTabConstructor = CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load().newInstance(CacheRegistry.UPDATE_LISTED_FIELD.load(), this.nmsEntity);
|
||||
}
|
||||
setSecondLayerSkin();
|
||||
}
|
||||
this.npcPojo.setNpcType(npcType);
|
||||
setLocation(getLocation(), false);
|
||||
this.packets.flushCache("spawnPacket", "removeTab");
|
||||
this.entityID = ((Integer) CacheRegistry.GET_ENTITY_ID.load().invoke(this.nmsEntity, new Object[0])).intValue();
|
||||
this.entityID = (Integer) CacheRegistry.GET_ENTITY_ID.load().invoke(this.nmsEntity, new Object[0]);
|
||||
FunctionFactory.findFunctionsForNpc(this).forEach(function -> function.resolve(this));
|
||||
getPackets().getProxyInstance().update(this.packets);
|
||||
this.hologram.createHologram();
|
||||
|
@ -278,8 +277,8 @@ public class NPC {
|
|||
return;
|
||||
Location direction = rotation ? location : this.npcPojo.getLocation().bukkitLocation().clone().setDirection(location.clone().subtract(this.npcPojo.getLocation().bukkitLocation().clone()).toVector());
|
||||
try {
|
||||
Object lookPacket = ((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_LOOK_CONSTRUCTOR.load()).newInstance(Integer.valueOf(this.entityID), Byte.valueOf((byte) (int) (direction.getYaw() * 256.0F / 360.0F)), Byte.valueOf((byte) (int) (direction.getPitch() * 256.0F / 360.0F)), Boolean.TRUE);
|
||||
Object headRotationPacket = ((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_HEAD_ROTATION_CONSTRUCTOR.load()).newInstance(this.nmsEntity, Byte.valueOf((byte) (int) (direction.getYaw() * 256.0F / 360.0F)));
|
||||
Object lookPacket = CacheRegistry.PACKET_PLAY_OUT_ENTITY_LOOK_CONSTRUCTOR.load().newInstance(this.entityID, (byte) (int) (direction.getYaw() * 256.0F / 360.0F), (byte) (int) (direction.getPitch() * 256.0F / 360.0F), true);
|
||||
Object headRotationPacket = CacheRegistry.PACKET_PLAY_OUT_ENTITY_HEAD_ROTATION_CONSTRUCTOR.load().newInstance(this.nmsEntity, (byte) (int) (direction.getYaw() * 256.0F / 360.0F));
|
||||
if (player != null) {
|
||||
Utils.sendPackets(player, lookPacket, headRotationPacket);
|
||||
} else {
|
||||
|
|
|
@ -65,6 +65,7 @@ public class NPCAction {
|
|||
.toString();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
enum ActionType {
|
||||
CMD {
|
||||
public void run(ZUser user, String actionValue) {
|
||||
|
|
|
@ -20,7 +20,7 @@ public abstract class NPCFunction {
|
|||
return;
|
||||
ResultType resultType = runFunction(npc, functionContext);
|
||||
if (resultType == ResultType.SUCCESS)
|
||||
npc.getNpcPojo().getFunctions().put(getName(), Boolean.valueOf(!isTrue(npc)));
|
||||
npc.getNpcPojo().getFunctions().put(getName(), !isTrue(npc));
|
||||
}
|
||||
|
||||
protected ResultType resolve(NPC npc) {
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.bukkit.inventory.ItemStack;
|
|||
|
||||
import java.util.*;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class NPCModel {
|
||||
private static final String EMPTY_STRING = "";
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ import java.util.concurrent.ConcurrentMap;
|
|||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@SuppressWarnings("ALL")
|
||||
public interface NPCPath {
|
||||
void initialize(DataInputStream paramDataInputStream) throws IOException;
|
||||
|
||||
|
@ -251,7 +252,7 @@ public interface NPCPath {
|
|||
this.npcUser.setHasPath(false);
|
||||
write();
|
||||
}
|
||||
}1, 1);
|
||||
}, 1, 1);
|
||||
}
|
||||
|
||||
public MovementPath getPath(NPC npc) {
|
||||
|
|
|
@ -5,8 +5,6 @@ import io.github.znetworkw.znpcservers.skin.SkinFetcherResult;
|
|||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
|
||||
public class NPCSkin {
|
||||
private static final String EMPTY_STRING = "";
|
||||
|
||||
private static final String[] EMPTY_ARRAY = new String[]{"", ""};
|
||||
|
||||
private static final int LAYER_INDEX = SkinLayerValues.findLayerByVersion();
|
||||
|
|
|
@ -1,108 +1,100 @@
|
|||
package io.github.znetworkw.znpcservers.npc;
|
||||
|
||||
import io.github.znetworkw.znpcservers.UnexpectedCallException;
|
||||
import io.github.znetworkw.znpcservers.cache.CacheRegistry;
|
||||
import io.github.znetworkw.znpcservers.cache.TypeCache;
|
||||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
|
||||
import static io.github.znetworkw.znpcservers.cache.CacheRegistry.*;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public enum NPCType {
|
||||
PLAYER(CacheRegistry.ENTITY_PLAYER_CLASS, 0.0D, new String[0]),
|
||||
ARMOR_STAND(CacheRegistry.ENTITY_ARMOR_STAND_CLASS, 0.0D, new String[]{"setSmall", "setArms"}),
|
||||
CREEPER(CacheRegistry.ENTITY_CREEPER_CLASS, -0.15D, new String[]{"setPowered"}),
|
||||
BAT(CacheRegistry.ENTITY_BAT_CLASS, -0.5D, new String[]{"setAwake"}),
|
||||
BLAZE(CacheRegistry.ENTITY_BLAZE_CLASS, 0.0D, new String[0]),
|
||||
CAVE_SPIDER(CacheRegistry.ENTITY_CAVE_SPIDER_CLASS, -1.0D, new String[0]),
|
||||
COW(CacheRegistry.ENTITY_COW_CLASS, -0.25D, new String[]{"setAge"}),
|
||||
CHICKEN(CacheRegistry.ENTITY_CHICKEN_CLASS, -1.0D, new String[]{"setAge"}),
|
||||
ENDER_DRAGON(CacheRegistry.ENTITY_ENDER_DRAGON_CLASS, 1.5D, new String[0]),
|
||||
ENDERMAN(CacheRegistry.ENTITY_ENDERMAN_CLASS, 0.7D, new String[0]),
|
||||
ENDERMITE(CacheRegistry.ENTITY_ENDERMITE_CLASS, -1.5D, new String[0]),
|
||||
GHAST(CacheRegistry.ENTITY_GHAST_CLASS, 3.0D, new String[0]),
|
||||
IRON_GOLEM(CacheRegistry.ENTITY_IRON_GOLEM_CLASS, 0.75D, new String[0]),
|
||||
GIANT(CacheRegistry.ENTITY_GIANT_ZOMBIE_CLASS, 11.0D, new String[0]),
|
||||
GUARDIAN(CacheRegistry.ENTITY_GUARDIAN_CLASS, -0.7D, new String[0]),
|
||||
HORSE(CacheRegistry.ENTITY_HORSE_CLASS, 0.0D, new String[]{"setStyle", "setAge", "setColor", "setVariant"}),
|
||||
LLAMA(CacheRegistry.ENTITY_LLAMA_CLASS, 0.0D, new String[]{"setAge"}),
|
||||
MAGMA_CUBE(CacheRegistry.ENTITY_MAGMA_CUBE_CLASS, -1.25D, new String[]{"setSize"}),
|
||||
MUSHROOM_COW(CacheRegistry.ENTITY_MUSHROOM_COW_CLASS, -0.25D, new String[]{"setAge"}),
|
||||
OCELOT(CacheRegistry.ENTITY_OCELOT_CLASS, -1.0D, new String[]{"setCatType", "setAge"}),
|
||||
PARROT(CacheRegistry.ENTITY_PARROT_CLASS, -1.5D, new String[]{"setVariant"}),
|
||||
PIG(CacheRegistry.ENTITY_PIG_CLASS, -1.0D, new String[]{"setAge"}),
|
||||
PANDA(CacheRegistry.ENTITY_PANDA_CLASS, -0.6D, new String[]{"setAge", "setMainGene", "setHiddenGene"}),
|
||||
RABBIT(CacheRegistry.ENTITY_RABBIT_CLASS, -1.0D, new String[]{"setRabbitType"}),
|
||||
POLAR_BEAR(CacheRegistry.ENTITY_POLAR_BEAR_CLASS, -0.5D, new String[0]),
|
||||
SHEEP(CacheRegistry.ENTITY_SHEEP_CLASS, -0.5D, new String[]{"setAge", "setSheared", "setColor"}),
|
||||
SILVERFISH(CacheRegistry.ENTITY_SILVERFISH_CLASS, -1.5D, new String[0]),
|
||||
SNOWMAN(CacheRegistry.ENTITY_SNOWMAN_CLASS, 0.0D, new String[]{"setHasPumpkin", "setDerp"}),
|
||||
SKELETON(CacheRegistry.ENTITY_SKELETON_CLASS, 0.0D, new String[0]),
|
||||
SHULKER(CacheRegistry.ENTITY_SHULKER_CLASS, 0.0D, new String[0]),
|
||||
SLIME(CacheRegistry.ENTITY_SLIME_CLASS, -1.25D, new String[]{"setSize"}),
|
||||
SPIDER(CacheRegistry.ENTITY_SPIDER_CLASS, -1.0D, new String[0]),
|
||||
SQUID(CacheRegistry.ENTITY_SQUID_CLASS, -1.0D, new String[0]),
|
||||
VILLAGER(CacheRegistry.ENTITY_VILLAGER_CLASS, 0.0D, new String[]{"setProfession", "setVillagerType", "setAge"}),
|
||||
WITCH(CacheRegistry.ENTITY_WITCH_CLASS, 0.5D, new String[0]),
|
||||
WITHER(CacheRegistry.ENTITY_WITHER_CLASS, 1.75D, new String[0]),
|
||||
ZOMBIE(CacheRegistry.ENTITY_ZOMBIE_CLASS, 0.0D, new String[]{"setBaby"}),
|
||||
WOLF(CacheRegistry.ENTITY_WOLF_CLASS, -1.0D, new String[]{"setSitting", "setTamed", "setAngry", "setAge", "setCollarColor"}),
|
||||
FOX(CacheRegistry.ENTITY_FOX_CLASS, -1.0D, new String[]{"setFoxType", "setSitting", "setSleeping", "setAge", "setCrouching"}),
|
||||
BEE(CacheRegistry.ENTITY_BEE_CLASS, -1.0D, new String[]{"setAnger", "setHasNectar", "setHasStung"}),
|
||||
TURTLE(CacheRegistry.ENTITY_TURTLE, -1.0D, new String[0]),
|
||||
WARDEN(CacheRegistry.ENTITY_WARDEN, 1.0D, new String[0]),
|
||||
AXOLOTL(CacheRegistry.ENTITY_AXOLOTL_CLASS, -1.0D, new String[]{"setVariant", "setAge"}),
|
||||
GOAT(CacheRegistry.ENTITY_GOAT_CLASS, -0.5D, new String[]{"setScreamingGoat", "setAge"});
|
||||
PLAYER(ENTITY_PLAYER_CLASS, 0.0),
|
||||
ARMOR_STAND(ENTITY_ARMOR_STAND_CLASS, 0.0, "setSmall", "setArms"),
|
||||
CREEPER(ENTITY_CREEPER_CLASS, -0.15, "setPowered"),
|
||||
BAT(ENTITY_BAT_CLASS, -0.5, "setAwake"),
|
||||
BLAZE(ENTITY_BLAZE_CLASS, 0.0),
|
||||
CAVE_SPIDER(ENTITY_CAVE_SPIDER_CLASS, -1.0),
|
||||
COW(ENTITY_COW_CLASS, -0.25, "setAge"),
|
||||
CHICKEN(ENTITY_CHICKEN_CLASS, -1.0, "setAge"),
|
||||
ENDER_DRAGON(ENTITY_ENDER_DRAGON_CLASS, 1.5),
|
||||
ENDERMAN(ENTITY_ENDERMAN_CLASS, 0.7),
|
||||
ENDERMITE(ENTITY_ENDERMITE_CLASS, -1.5),
|
||||
GHAST(ENTITY_GHAST_CLASS, 3.0),
|
||||
IRON_GOLEM(ENTITY_IRON_GOLEM_CLASS, 0.75),
|
||||
GIANT(ENTITY_GIANT_ZOMBIE_CLASS, 11.0),
|
||||
GUARDIAN(ENTITY_GUARDIAN_CLASS, -0.7),
|
||||
HORSE(ENTITY_HORSE_CLASS, 0.0, "setStyle", "setAge", "setColor", "setVariant"),
|
||||
LLAMA(ENTITY_LLAMA_CLASS, 0.0, "setAge"),
|
||||
MAGMA_CUBE(ENTITY_MAGMA_CUBE_CLASS, -1.25, "setSize"),
|
||||
MUSHROOM_COW(ENTITY_MUSHROOM_COW_CLASS, -0.25, "setAge"),
|
||||
OCELOT(ENTITY_OCELOT_CLASS, -1.0, "setCatType", "setAge"),
|
||||
PARROT(ENTITY_PARROT_CLASS, -1.5, "setVariant"),
|
||||
PIG(ENTITY_PIG_CLASS, -1.0, "setAge"),
|
||||
PANDA(ENTITY_PANDA_CLASS, -0.6, "setAge", "setMainGene", "setHiddenGene"),
|
||||
RABBIT(ENTITY_RABBIT_CLASS, -1.0, "setRabbitType"),
|
||||
POLAR_BEAR(ENTITY_POLAR_BEAR_CLASS, -0.5),
|
||||
SHEEP(ENTITY_SHEEP_CLASS, -0.5, "setAge", "setSheared", "setColor"),
|
||||
SILVERFISH(ENTITY_SILVERFISH_CLASS, -1.5),
|
||||
SNOWMAN(ENTITY_SNOWMAN_CLASS, 0.0, "setHasPumpkin", "setDerp"),
|
||||
SKELETON(ENTITY_SKELETON_CLASS, 0.0),
|
||||
SHULKER(ENTITY_SHULKER_CLASS, 0.0),
|
||||
SLIME(ENTITY_SLIME_CLASS, -1.25, "setSize"),
|
||||
SPIDER(ENTITY_SPIDER_CLASS, -1.0),
|
||||
SQUID(ENTITY_SQUID_CLASS, -1.0),
|
||||
VILLAGER(ENTITY_VILLAGER_CLASS, 0.0, "setProfession", "setVillagerType", "setAge"),
|
||||
WITCH(ENTITY_WITCH_CLASS, 0.5),
|
||||
WITHER(ENTITY_WITHER_CLASS, 1.75),
|
||||
ZOMBIE(ENTITY_ZOMBIE_CLASS, 0.0, "setBaby"),
|
||||
WOLF(ENTITY_WOLF_CLASS, -1.0, "setSitting", "setTamed", "setAngry", "setAge", "setCollarColor"),
|
||||
FOX(ENTITY_FOX_CLASS, -1.0, "setFoxType", "setSitting", "setSleeping", "setAge", "setCrouching"),
|
||||
BEE(ENTITY_BEE_CLASS, -1.0, "setAnger", "setHasNectar", "setHasStung"),
|
||||
TURTLE(ENTITY_TURTLE, -1.0),
|
||||
WARDEN(ENTITY_WARDEN, 1.0),
|
||||
AXOLOTL(ENTITY_AXOLOTL_CLASS, -1.0, "setVariant", "setAge"),
|
||||
GOAT(ENTITY_GOAT_CLASS, -0.5, "setScreamingGoat", "setAge");
|
||||
|
||||
private static final String EMPTY_STRING = "";
|
||||
|
||||
private final double holoHeight;
|
||||
|
||||
private final CustomizationLoader customizationLoader;
|
||||
|
||||
private final Constructor<?> constructor;
|
||||
|
||||
private EntityType bukkitEntityType;
|
||||
|
||||
private Object nmsEntityType;
|
||||
|
||||
NPCType(Class<?> entityClass, String newName, double holoHeight, String... methods) {
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
||||
NPCType(Class<?> entityClass, String newName, double holoHeight, String ... methods) {
|
||||
this.holoHeight = holoHeight;
|
||||
this
|
||||
|
||||
.customizationLoader = (entityClass == null) ? null : new CustomizationLoader(this.bukkitEntityType = EntityType.valueOf((newName.length() > 0) ? newName : name()), Arrays.asList(methods));
|
||||
if (entityClass == null || entityClass
|
||||
.isAssignableFrom(CacheRegistry.ENTITY_PLAYER_CLASS)) {
|
||||
if (entityClass == null) {
|
||||
customizationLoader = null;
|
||||
} else {
|
||||
this.bukkitEntityType = EntityType.valueOf(newName.length() > 0 ? newName : this.name());
|
||||
customizationLoader = new CustomizationLoader(this.bukkitEntityType, Arrays.asList(methods));
|
||||
}
|
||||
if (entityClass == null || entityClass.isAssignableFrom(ENTITY_PLAYER_CLASS)) {
|
||||
this.constructor = null;
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (Utils.versionNewer(14)) {
|
||||
this.nmsEntityType = ((Optional) CacheRegistry.ENTITY_TYPES_A_METHOD.load().invoke(null, new Object[]{this.bukkitEntityType.getKey().getKey().toLowerCase()})).get();
|
||||
this.constructor = entityClass.getConstructor(CacheRegistry.ENTITY_TYPES_CLASS, CacheRegistry.WORLD_CLASS);
|
||||
this.nmsEntityType = ((Optional<?>) ENTITY_TYPES_A_METHOD.load().invoke(null, this.bukkitEntityType.getKey().getKey().toLowerCase())).get();
|
||||
this.constructor = entityClass.getConstructor(ENTITY_TYPES_CLASS, WORLD_CLASS);
|
||||
} else {
|
||||
this.constructor = entityClass.getConstructor(CacheRegistry.WORLD_CLASS);
|
||||
this.constructor = entityClass.getConstructor(WORLD_CLASS);
|
||||
}
|
||||
} catch (ReflectiveOperationException operationException) {
|
||||
}
|
||||
catch (ReflectiveOperationException operationException) {
|
||||
throw new UnexpectedCallException(operationException);
|
||||
}
|
||||
}
|
||||
|
||||
public static Object[] arrayToPrimitive(String[] strings, Method method) {
|
||||
Class<?>[] methodParameterTypes = method.getParameterTypes();
|
||||
Object[] newArray = new Object[methodParameterTypes.length];
|
||||
for (int i = 0; i < methodParameterTypes.length; i++) {
|
||||
TypeProperty typeProperty = TypeProperty.forType(methodParameterTypes[i]);
|
||||
if (typeProperty != null) {
|
||||
newArray[i] = typeProperty.getFunction().apply(strings[i]);
|
||||
} else {
|
||||
newArray[i] = TypeCache.ClassCache.find(strings[i], methodParameterTypes[i]);
|
||||
}
|
||||
}
|
||||
return newArray;
|
||||
NPCType(Class<?> entityClass, double holoHeight, String ... customization) {
|
||||
this(entityClass, EMPTY_STRING, holoHeight, customization);
|
||||
}
|
||||
|
||||
public double getHoloHeight() {
|
||||
|
@ -121,14 +113,26 @@ public enum NPCType {
|
|||
return this.customizationLoader;
|
||||
}
|
||||
|
||||
public static Object[] arrayToPrimitive(String[] strings, Method method) {
|
||||
Class<?>[] methodParameterTypes = method.getParameterTypes();
|
||||
Object[] newArray = new Object[methodParameterTypes.length];
|
||||
for (int i = 0; i < methodParameterTypes.length; ++i) {
|
||||
TypeProperty typeProperty = TypeProperty.forType(methodParameterTypes[i]);
|
||||
newArray[i] = typeProperty != null ? typeProperty.getFunction().apply(strings[i]) : TypeCache.ClassCache.find(strings[i], methodParameterTypes[i]);
|
||||
}
|
||||
return newArray;
|
||||
}
|
||||
|
||||
public void updateCustomization(NPC npc, String name, String[] values) {
|
||||
if (!this.customizationLoader.contains(name))
|
||||
if (!this.customizationLoader.contains(name)) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Method method = this.customizationLoader.getMethods().get(name);
|
||||
method.invoke(npc.getBukkitEntity(), arrayToPrimitive(values, method));
|
||||
method.invoke(npc.getBukkitEntity(), NPCType.arrayToPrimitive(values, method));
|
||||
npc.updateMetadata(npc.getViewers());
|
||||
} catch (IllegalAccessException | java.lang.reflect.InvocationTargetException e) {
|
||||
}
|
||||
catch (IllegalAccessException | InvocationTargetException e) {
|
||||
throw new IllegalStateException("can't invoke method: " + name, e);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,5 @@ public enum NamingType {
|
|||
}
|
||||
};
|
||||
|
||||
private static final int FIXED_LENGTH = 6;
|
||||
|
||||
public abstract String resolve(NPC paramNPC);
|
||||
}
|
||||
|
|
|
@ -43,14 +43,14 @@ public class ConversationModel {
|
|||
if (ConversationProcessor.isPlayerConversing(player.getUniqueId()))
|
||||
return;
|
||||
if (this.lastStarted.containsKey(player.getUniqueId())) {
|
||||
long lastConversationNanos = System.nanoTime() - this.lastStarted.get(player.getUniqueId()).longValue();
|
||||
long lastConversationNanos = System.nanoTime() - this.lastStarted.get(player.getUniqueId());
|
||||
if (lastConversationNanos < 1000000000L * getConversation().getDelay())
|
||||
return;
|
||||
}
|
||||
this.lastStarted.remove(player.getUniqueId());
|
||||
if (this.conversationType.canStart(npc, getConversation(), player)) {
|
||||
new ConversationProcessor(npc, this, player);
|
||||
this.lastStarted.put(player.getUniqueId(), Long.valueOf(System.nanoTime()));
|
||||
this.lastStarted.put(player.getUniqueId(), System.nanoTime());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -69,11 +69,11 @@ public class ConversationProcessor {
|
|||
try {
|
||||
Sound sound = Sound.valueOf(conversationKey.getSoundName().toUpperCase());
|
||||
ConversationProcessor.this.player.playSound(ConversationProcessor.this.player.getLocation(), sound, 0.2F, 1.0F);
|
||||
} catch (IllegalArgumentException illegalArgumentException) {
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
ConversationProcessor.this.conversationIndexDelay = System.nanoTime();
|
||||
ConversationProcessor.this.conversationIndex++;
|
||||
}
|
||||
}5, 20);
|
||||
}, 5, 20);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,8 +6,6 @@ import io.github.znetworkw.znpcservers.npc.FunctionFactory;
|
|||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import io.github.znetworkw.znpcservers.npc.NPCFunction;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
|
||||
public class GlowFunction extends NPCFunction {
|
||||
public GlowFunction() {
|
||||
super("glow");
|
||||
|
@ -25,9 +23,9 @@ public class GlowFunction extends NPCFunction {
|
|||
npc.getNpcPojo().setGlowName(glowColorName);
|
||||
npc.setGlowColor(glowColor);
|
||||
CacheRegistry.SET_DATA_WATCHER_METHOD.load().invoke(CacheRegistry.GET_DATA_WATCHER_METHOD
|
||||
.load().invoke(npc.getNmsEntity()), ((Constructor) CacheRegistry.DATA_WATCHER_OBJECT_CONSTRUCTOR
|
||||
.load()).newInstance(Integer.valueOf(0), CacheRegistry.DATA_WATCHER_REGISTER_FIELD
|
||||
.load()), Byte.valueOf(!FunctionFactory.isTrue(npc, this) ? 64 : 0));
|
||||
.load().invoke(npc.getNmsEntity()), CacheRegistry.DATA_WATCHER_OBJECT_CONSTRUCTOR
|
||||
.load().newInstance(0, CacheRegistry.DATA_WATCHER_REGISTER_FIELD
|
||||
.load()), (byte) (!FunctionFactory.isTrue(npc, this) ? 64 : 0));
|
||||
npc.getPackets().getProxyInstance().update(npc.getPackets());
|
||||
npc.deleteViewers();
|
||||
return NPCFunction.ResultType.SUCCESS;
|
||||
|
|
|
@ -12,7 +12,6 @@ import io.github.znetworkw.znpcservers.utility.Utils;
|
|||
import org.bukkit.Location;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -22,7 +21,7 @@ public class Hologram {
|
|||
|
||||
private static final boolean NEW_METHOD = (Utils.BUKKIT_VERSION > 12);
|
||||
|
||||
private static final double LINE_SPACING = ((Double) Configuration.CONFIGURATION.getValue(ConfigurationValue.LINE_SPACING)).doubleValue();
|
||||
private static final double LINE_SPACING = Configuration.CONFIGURATION.getValue(ConfigurationValue.LINE_SPACING);
|
||||
|
||||
private final List<HologramLine> hologramLines = new ArrayList<>();
|
||||
|
||||
|
@ -40,15 +39,15 @@ public class Hologram {
|
|||
Location location = this.npc.getLocation();
|
||||
for (String line : this.npc.getNpcPojo().getHologramLines()) {
|
||||
boolean visible = !line.equalsIgnoreCase("%space%");
|
||||
Object armorStand = ((Constructor) CacheRegistry.ENTITY_CONSTRUCTOR.load()).newInstance(CacheRegistry.GET_HANDLE_WORLD_METHOD.load().invoke(location.getWorld()),
|
||||
Double.valueOf(location.getX()), Double.valueOf(location.getY() - 0.15D + y), Double.valueOf(location.getZ()));
|
||||
Object armorStand = CacheRegistry.ENTITY_CONSTRUCTOR.load().newInstance(CacheRegistry.GET_HANDLE_WORLD_METHOD.load().invoke(location.getWorld()),
|
||||
location.getX(), location.getY() - 0.15D + y, location.getZ());
|
||||
if (visible) {
|
||||
CacheRegistry.SET_CUSTOM_NAME_VISIBLE_METHOD.load().invoke(armorStand, Boolean.valueOf(true));
|
||||
CacheRegistry.SET_CUSTOM_NAME_VISIBLE_METHOD.load().invoke(armorStand, true);
|
||||
updateLine(line, armorStand, null);
|
||||
}
|
||||
CacheRegistry.SET_INVISIBLE_METHOD.load().invoke(armorStand, Boolean.valueOf(true));
|
||||
this.hologramLines.add(new HologramLine(line.replace(ConfigurationConstants.SPACE_SYMBOL, " "), armorStand, ((Integer) CacheRegistry.GET_ENTITY_ID
|
||||
.load().invoke(armorStand, new Object[0])).intValue()));
|
||||
CacheRegistry.SET_INVISIBLE_METHOD.load().invoke(armorStand, true);
|
||||
this.hologramLines.add(new HologramLine(line.replace(ConfigurationConstants.SPACE_SYMBOL, " "), armorStand, (Integer) CacheRegistry.GET_ENTITY_ID
|
||||
.load().invoke(armorStand)));
|
||||
y += LINE_SPACING;
|
||||
}
|
||||
setLocation(location, 0.0D);
|
||||
|
@ -73,7 +72,7 @@ public class Hologram {
|
|||
public void delete(ZUser user) {
|
||||
this.hologramLines.forEach(hologramLine -> {
|
||||
try {
|
||||
Utils.sendPackets(user, this.npc.getPackets().getProxyInstance().getDestroyPacket(HologramLine.access$200(hologramLine)));
|
||||
Utils.sendPackets(user, this.npc.getPackets().getProxyInstance().getDestroyPacket(hologramLine.id));
|
||||
} catch (ReflectiveOperationException operationException) {
|
||||
throw new UnexpectedCallException(operationException);
|
||||
}
|
||||
|
@ -95,25 +94,26 @@ public class Hologram {
|
|||
public void updateLocation() {
|
||||
this.hologramLines.forEach(hologramLine -> {
|
||||
try {
|
||||
Object packet = ((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_TELEPORT_CONSTRUCTOR.load()).newInstance(new Object[]{HologramLine.access$100(hologramLine)});
|
||||
this.npc.getViewers().forEach(());
|
||||
} catch (ReflectiveOperationException operationException) {
|
||||
Object packet = CacheRegistry.PACKET_PLAY_OUT_ENTITY_TELEPORT_CONSTRUCTOR.load().newInstance(hologramLine.armorStand);
|
||||
this.npc.getViewers().forEach(player -> Utils.sendPackets(player, packet));
|
||||
}
|
||||
catch (ReflectiveOperationException operationException) {
|
||||
throw new UnexpectedCallException(operationException);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setLocation(Location location, double height) {
|
||||
location = location.clone().add(0.0D, height, 0.0D);
|
||||
location = location.clone().add(0.0, height, 0.0);
|
||||
try {
|
||||
double y = this.npc.getNpcPojo().getHologramHeight();
|
||||
for (HologramLine hologramLine : this.hologramLines) {
|
||||
CacheRegistry.SET_LOCATION_METHOD.load().invoke(hologramLine.armorStand, Double.valueOf(location.getX()), Double.valueOf(location.getY() - 0.15D + y),
|
||||
Double.valueOf(location.getZ()), Float.valueOf(location.getYaw()), Float.valueOf(location.getPitch()));
|
||||
CacheRegistry.SET_LOCATION_METHOD.load().invoke(hologramLine.armorStand, location.getX(), location.getY() - 0.15 + y, location.getZ(), location.getYaw(), location.getPitch());
|
||||
y += LINE_SPACING;
|
||||
}
|
||||
updateLocation();
|
||||
} catch (ReflectiveOperationException operationException) {
|
||||
this.updateLocation();
|
||||
}
|
||||
catch (ReflectiveOperationException operationException) {
|
||||
throw new UnexpectedCallException(operationException);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package io.github.znetworkw.znpcservers.npc.hologram.replacer;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.UnmodifiableIterator;
|
||||
import io.github.znetworkw.znpcservers.user.ZUser;
|
||||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
|
||||
|
@ -9,10 +8,8 @@ public interface LineReplacer {
|
|||
ImmutableList<LineReplacer> LINE_REPLACERS = ImmutableList.of(new RGBLine());
|
||||
|
||||
static String makeAll(ZUser user, String string) {
|
||||
for (UnmodifiableIterator<LineReplacer> unmodifiableIterator = LINE_REPLACERS.iterator(); unmodifiableIterator.hasNext(); ) {
|
||||
LineReplacer lineReplacer = unmodifiableIterator.next();
|
||||
if (!lineReplacer.isSupported())
|
||||
continue;
|
||||
for (LineReplacer lineReplacer : LINE_REPLACERS) {
|
||||
if (!lineReplacer.isSupported()) continue;
|
||||
string = lineReplacer.make(string);
|
||||
}
|
||||
return Utils.toColor((Utils.PLACEHOLDER_SUPPORT && user != null) ?
|
||||
|
|
|
@ -6,11 +6,8 @@ import net.md_5.bungee.api.ChatColor;
|
|||
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class RGBLine implements LineReplacer {
|
||||
private static final char HEX_COLOR_CHAR = '#';
|
||||
|
||||
private static final int HEX_COLOR_LENGTH = 6;
|
||||
|
||||
public String make(String string) {
|
||||
String rgbString = string;
|
||||
for (int i = 0; i < rgbString.length(); i++) {
|
||||
|
@ -31,7 +28,7 @@ public class RGBLine implements LineReplacer {
|
|||
if (success)
|
||||
try {
|
||||
rgbString = rgbString.substring(0, i) + ChatColor.of(hexCodeStringBuilder.toString()) + rgbString.substring(endIndex);
|
||||
} catch (Exception exception) {
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ import io.github.znetworkw.znpcservers.utility.ReflectionUtils;
|
|||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
|
@ -33,10 +32,11 @@ public interface Packet {
|
|||
@PacketValue(keyName = "hologramSpawnPacket", valueType = ValueType.ARGUMENTS)
|
||||
Object getHologramSpawnPacket(Object paramObject) throws ReflectiveOperationException;
|
||||
|
||||
@SuppressWarnings("SuspiciousTernaryOperatorInVarargsCall")
|
||||
@PacketValue(keyName = "destroyPacket", valueType = ValueType.ARGUMENTS)
|
||||
default Object getDestroyPacket(int entityId) throws ReflectiveOperationException {
|
||||
(new int[1])[0] = entityId;
|
||||
return ((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_DESTROY_CONSTRUCTOR.load()).newInstance(((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_DESTROY_CONSTRUCTOR.load()).getParameterTypes()[0].isArray() ? new int[1] : Integer.valueOf(entityId));
|
||||
return CacheRegistry.PACKET_PLAY_OUT_ENTITY_DESTROY_CONSTRUCTOR.load().newInstance(CacheRegistry.PACKET_PLAY_OUT_ENTITY_DESTROY_CONSTRUCTOR.load().getParameterTypes()[0].isArray() ? new int[1] : entityId);
|
||||
}
|
||||
|
||||
@PacketValue(keyName = "enumSlot", valueType = ValueType.ARGUMENTS)
|
||||
|
@ -47,15 +47,15 @@ public interface Packet {
|
|||
@PacketValue(keyName = "removeTab")
|
||||
default Object getTabRemovePacket(Object nmsEntity) throws ReflectiveOperationException {
|
||||
try {
|
||||
return ((Constructor) CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load()).newInstance(CacheRegistry.REMOVE_PLAYER_FIELD
|
||||
return CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load().newInstance(CacheRegistry.REMOVE_PLAYER_FIELD
|
||||
.load(),
|
||||
Collections.singletonList(nmsEntity));
|
||||
} catch (Throwable throwable) {
|
||||
boolean useOldMethod = (CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_REMOVE_CLASS != null);
|
||||
if (useOldMethod)
|
||||
return ((Constructor) CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_REMOVE_CONSTRUCTOR.load())
|
||||
return CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_REMOVE_CONSTRUCTOR.load()
|
||||
.newInstance(Collections.singletonList(CacheRegistry.GET_UNIQUE_ID_METHOD.load().invoke(nmsEntity)));
|
||||
return ((Constructor) CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load()).newInstance(CacheRegistry.REMOVE_PLAYER_FIELD
|
||||
return CacheRegistry.PACKET_PLAY_OUT_PLAYER_INFO_CONSTRUCTOR.load().newInstance(CacheRegistry.REMOVE_PLAYER_FIELD
|
||||
.load(), nmsEntity);
|
||||
}
|
||||
}
|
||||
|
@ -63,19 +63,20 @@ public interface Packet {
|
|||
@PacketValue(keyName = "equipPackets")
|
||||
ImmutableList<Object> getEquipPackets(NPC paramNPC) throws ReflectiveOperationException;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@PacketValue(keyName = "scoreboardPackets")
|
||||
default ImmutableList<Object> updateScoreboard(NPC npc) throws ReflectiveOperationException {
|
||||
ImmutableList.Builder<Object> builder = ImmutableList.builder();
|
||||
boolean isVersion17 = (Utils.BUKKIT_VERSION > 16);
|
||||
boolean isVersion9 = (Utils.BUKKIT_VERSION > 8);
|
||||
Object scoreboardTeamPacket = isVersion17 ? ((Constructor) CacheRegistry.SCOREBOARD_TEAM_CONSTRUCTOR.load()).newInstance(new Object[]{null, npc.getGameProfile().getName()}) : ((Constructor) CacheRegistry.PACKET_PLAY_OUT_SCOREBOARD_TEAM_CONSTRUCTOR_OLD.load()).newInstance();
|
||||
Object scoreboardTeamPacket = isVersion17 ? CacheRegistry.SCOREBOARD_TEAM_CONSTRUCTOR.load().newInstance(null, npc.getGameProfile().getName()) : CacheRegistry.PACKET_PLAY_OUT_SCOREBOARD_TEAM_CONSTRUCTOR_OLD.load().newInstance();
|
||||
if (!isVersion17) {
|
||||
Utils.setValue(scoreboardTeamPacket, "a", npc.getGameProfile().getName());
|
||||
Utils.setValue(scoreboardTeamPacket, isVersion9 ? "i" : "h", Integer.valueOf(1));
|
||||
Utils.setValue(scoreboardTeamPacket, isVersion9 ? "i" : "h", 1);
|
||||
}
|
||||
builder.add(isVersion17 ? CacheRegistry.PACKET_PLAY_OUT_SCOREBOARD_TEAM_CREATE_V1.load().invoke(null, scoreboardTeamPacket) : scoreboardTeamPacket);
|
||||
if (isVersion17) {
|
||||
scoreboardTeamPacket = ((Constructor) CacheRegistry.SCOREBOARD_TEAM_CONSTRUCTOR.load()).newInstance(new Object[]{null, npc.getGameProfile().getName()});
|
||||
scoreboardTeamPacket = CacheRegistry.SCOREBOARD_TEAM_CONSTRUCTOR.load().newInstance(null, npc.getGameProfile().getName());
|
||||
if (Utils.BUKKIT_VERSION > 17) {
|
||||
Utils.setValue(scoreboardTeamPacket, "d", npc.getGameProfile().getName());
|
||||
ReflectionUtils.findFieldForClassAndSet(scoreboardTeamPacket, CacheRegistry.ENUM_TAG_VISIBILITY, CacheRegistry.ENUM_TAG_VISIBILITY_NEVER_FIELD.load());
|
||||
|
@ -85,12 +86,12 @@ public interface Packet {
|
|||
Utils.setValue(scoreboardTeamPacket, "l", CacheRegistry.ENUM_TAG_VISIBILITY_NEVER_FIELD.load());
|
||||
}
|
||||
} else {
|
||||
scoreboardTeamPacket = ((Constructor) CacheRegistry.PACKET_PLAY_OUT_SCOREBOARD_TEAM_CONSTRUCTOR_OLD.load()).newInstance();
|
||||
scoreboardTeamPacket = CacheRegistry.PACKET_PLAY_OUT_SCOREBOARD_TEAM_CONSTRUCTOR_OLD.load().newInstance();
|
||||
Utils.setValue(scoreboardTeamPacket, "a", npc.getGameProfile().getName());
|
||||
Utils.setValue(scoreboardTeamPacket, "e", "never");
|
||||
Utils.setValue(scoreboardTeamPacket, isVersion9 ? "i" : "h", Integer.valueOf(0));
|
||||
Utils.setValue(scoreboardTeamPacket, isVersion9 ? "i" : "h", 0);
|
||||
}
|
||||
Collection<String> collection = isVersion17 ? (Collection<String>) CacheRegistry.SCOREBOARD_PLAYER_LIST.load().invoke(scoreboardTeamPacket, new Object[0]) : (Collection<String>) Utils.getValue(scoreboardTeamPacket, isVersion9 ? "h" : "g");
|
||||
Collection<String> collection = isVersion17 ? (Collection<String>) CacheRegistry.SCOREBOARD_PLAYER_LIST.load().invoke(scoreboardTeamPacket) : (Collection<String>) Utils.getValue(scoreboardTeamPacket, isVersion9 ? "h" : "g");
|
||||
if (npc.getNpcPojo().getNpcType() == NPCType.PLAYER) {
|
||||
collection.add(npc.getGameProfile().getName());
|
||||
} else {
|
||||
|
|
|
@ -10,6 +10,7 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class PacketCache {
|
||||
protected static final ImmutableMap<Method, PacketValue> VALUE_LOOKUP_BY_NAME;
|
||||
|
||||
|
@ -47,6 +48,7 @@ public class PacketCache {
|
|||
if (!VALUE_LOOKUP_BY_NAME.containsKey(method))
|
||||
throw new IllegalStateException("value not found for method: " + method.getName());
|
||||
PacketValue packetValue = VALUE_LOOKUP_BY_NAME.get(method);
|
||||
assert packetValue != null;
|
||||
String keyString = packetValue.valueType().resolve(packetValue.keyName(), args);
|
||||
return this.packetResultCache.computeIfAbsent(keyString, o -> {
|
||||
try {
|
||||
|
@ -65,7 +67,7 @@ public class PacketCache {
|
|||
|
||||
public void flushCache() {
|
||||
flushCache(VALUE_LOOKUP_BY_NAME.values().stream()
|
||||
.map(PacketValue::keyName).toArray(x$0 -> new String[x$0]));
|
||||
.map(PacketValue::keyName).toArray(String[]::new));
|
||||
}
|
||||
|
||||
private static class PacketHandler implements InvocationHandler {
|
||||
|
|
|
@ -6,7 +6,7 @@ import io.github.znetworkw.znpcservers.utility.Utils;
|
|||
import java.util.Comparator;
|
||||
|
||||
public final class PacketFactory {
|
||||
public static final ImmutableSet<Packet> ALL = ImmutableSet.of(new PacketV8(), new PacketV9(), new PacketV16(), new PacketV17(), new PacketV18(), new PacketV19(), (Object[]) new Packet[0]);
|
||||
public static final ImmutableSet<Packet> ALL = ImmutableSet.of(new PacketV8(), new PacketV9(), new PacketV16(), new PacketV17(), new PacketV18(), new PacketV19());
|
||||
|
||||
public static final Packet PACKET_FOR_CURRENT_VERSION = findPacketForVersion(Utils.BUKKIT_VERSION);
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import io.github.znetworkw.znpcservers.npc.ItemSlot;
|
|||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -20,9 +19,9 @@ public class PacketV16 extends PacketV9 {
|
|||
public ImmutableList<Object> getEquipPackets(NPC npc) throws ReflectiveOperationException {
|
||||
List<Pair<?, ?>> pairs = Lists.newArrayListWithCapacity((ItemSlot.values()).length);
|
||||
for (Map.Entry<ItemSlot, ItemStack> entry : npc.getNpcPojo().getNpcEquip().entrySet())
|
||||
pairs.add(new Pair(getItemSlot(entry
|
||||
pairs.add(new Pair<>(getItemSlot(entry
|
||||
.getKey().getSlot()),
|
||||
convertItemStack(npc.getEntityID(), entry.getKey(), entry.getValue())));
|
||||
return ImmutableList.of(((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_EQUIPMENT_CONSTRUCTOR_V1.load()).newInstance(Integer.valueOf(npc.getEntityID()), pairs));
|
||||
return ImmutableList.of(CacheRegistry.PACKET_PLAY_OUT_ENTITY_EQUIPMENT_CONSTRUCTOR_V1.load().newInstance(npc.getEntityID(), pairs));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,15 +6,13 @@ import io.github.znetworkw.znpcservers.npc.NPC;
|
|||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
|
||||
public class PacketV17 extends PacketV16 {
|
||||
public int version() {
|
||||
return 17;
|
||||
}
|
||||
|
||||
public Object getPlayerPacket(Object nmsWorld, GameProfile gameProfile) throws ReflectiveOperationException {
|
||||
return ((Constructor) CacheRegistry.PLAYER_CONSTRUCTOR_NEW.load()).newInstance(new Object[]{CacheRegistry.GET_SERVER_METHOD.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile});
|
||||
return CacheRegistry.PLAYER_CONSTRUCTOR_NEW.load().newInstance(CacheRegistry.GET_SERVER_METHOD.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile);
|
||||
}
|
||||
|
||||
public void updateGlowPacket(NPC npc, Object packet) throws ReflectiveOperationException {
|
||||
|
|
|
@ -4,8 +4,6 @@ import com.mojang.authlib.GameProfile;
|
|||
import io.github.znetworkw.znpcservers.cache.CacheRegistry;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
|
||||
public class PacketV19 extends PacketV18 {
|
||||
public int version() {
|
||||
return 19;
|
||||
|
@ -13,11 +11,11 @@ public class PacketV19 extends PacketV18 {
|
|||
|
||||
public Object getPlayerPacket(Object nmsWorld, GameProfile gameProfile) throws ReflectiveOperationException {
|
||||
try {
|
||||
return ((Constructor) CacheRegistry.PLAYER_CONSTRUCTOR_NEW_1.load()).newInstance(new Object[]{CacheRegistry.GET_SERVER_METHOD
|
||||
.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile, null});
|
||||
return CacheRegistry.PLAYER_CONSTRUCTOR_NEW_1.load().newInstance(CacheRegistry.GET_SERVER_METHOD
|
||||
.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile, null);
|
||||
} catch (Throwable e) {
|
||||
return ((Constructor) CacheRegistry.PLAYER_CONSTRUCTOR_NEW_2.load()).newInstance(new Object[]{CacheRegistry.GET_SERVER_METHOD
|
||||
.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile});
|
||||
return CacheRegistry.PLAYER_CONSTRUCTOR_NEW_2.load().newInstance(CacheRegistry.GET_SERVER_METHOD
|
||||
.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,19 +19,19 @@ public class PacketV8 implements Packet {
|
|||
|
||||
public Object getPlayerPacket(Object nmsWorld, GameProfile gameProfile) throws ReflectiveOperationException {
|
||||
Constructor<?> constructor = (Utils.BUKKIT_VERSION > 13) ? CacheRegistry.PLAYER_INTERACT_MANAGER_NEW_CONSTRUCTOR.load() : CacheRegistry.PLAYER_INTERACT_MANAGER_OLD_CONSTRUCTOR.load();
|
||||
return ((Constructor) CacheRegistry.PLAYER_CONSTRUCTOR_OLD.load()).newInstance(new Object[]{CacheRegistry.GET_SERVER_METHOD
|
||||
return CacheRegistry.PLAYER_CONSTRUCTOR_OLD.load().newInstance(CacheRegistry.GET_SERVER_METHOD
|
||||
.load().invoke(Bukkit.getServer()), nmsWorld, gameProfile, constructor
|
||||
|
||||
.newInstance(nmsWorld)});
|
||||
.newInstance(nmsWorld));
|
||||
}
|
||||
|
||||
public Object getSpawnPacket(Object nmsEntity, boolean isPlayer) throws ReflectiveOperationException {
|
||||
return isPlayer ? ((Constructor) CacheRegistry.PACKET_PLAY_OUT_NAMED_ENTITY_CONSTRUCTOR.load()).newInstance(nmsEntity) : ((Constructor) CacheRegistry.PACKET_PLAY_OUT_SPAWN_ENTITY_CONSTRUCTOR.load()).newInstance(nmsEntity);
|
||||
return isPlayer ? CacheRegistry.PACKET_PLAY_OUT_NAMED_ENTITY_CONSTRUCTOR.load().newInstance(nmsEntity) : CacheRegistry.PACKET_PLAY_OUT_SPAWN_ENTITY_CONSTRUCTOR.load().newInstance(nmsEntity);
|
||||
}
|
||||
|
||||
public Object convertItemStack(int entityId, ItemSlot itemSlot, ItemStack itemStack) throws ReflectiveOperationException {
|
||||
return ((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_EQUIPMENT_CONSTRUCTOR_OLD.load()).newInstance(Integer.valueOf(entityId),
|
||||
Integer.valueOf(itemSlot.getSlotOld()), CacheRegistry.AS_NMS_COPY_METHOD
|
||||
return CacheRegistry.PACKET_PLAY_OUT_ENTITY_EQUIPMENT_CONSTRUCTOR_OLD.load().newInstance(entityId,
|
||||
itemSlot.getSlotOld(), CacheRegistry.AS_NMS_COPY_METHOD
|
||||
.load().invoke(CacheRegistry.CRAFT_ITEM_STACK_CLASS, itemStack));
|
||||
}
|
||||
|
||||
|
@ -42,24 +42,24 @@ public class PacketV8 implements Packet {
|
|||
public Object getMetadataPacket(int entityId, Object nmsEntity) throws ReflectiveOperationException {
|
||||
Object dataWatcher = CacheRegistry.GET_DATA_WATCHER_METHOD.load().invoke(nmsEntity);
|
||||
try {
|
||||
return ((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_META_DATA_CONSTRUCTOR.load()).newInstance(Integer.valueOf(entityId), dataWatcher, Boolean.valueOf(true));
|
||||
return CacheRegistry.PACKET_PLAY_OUT_ENTITY_META_DATA_CONSTRUCTOR.load().newInstance(entityId, dataWatcher, true);
|
||||
} catch (Exception e2) {
|
||||
return ((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_META_DATA_CONSTRUCTOR_V1
|
||||
.load())
|
||||
.newInstance(Integer.valueOf(entityId), CacheRegistry.GET_DATAWATCHER_B_LIST
|
||||
return CacheRegistry.PACKET_PLAY_OUT_ENTITY_META_DATA_CONSTRUCTOR_V1
|
||||
.load()
|
||||
.newInstance(entityId, CacheRegistry.GET_DATAWATCHER_B_LIST
|
||||
.load().invoke(dataWatcher));
|
||||
}
|
||||
}
|
||||
|
||||
public Object getHologramSpawnPacket(Object armorStand) throws ReflectiveOperationException {
|
||||
return ((Constructor) CacheRegistry.PACKET_PLAY_OUT_SPAWN_ENTITY_CONSTRUCTOR.load()).newInstance(armorStand);
|
||||
return CacheRegistry.PACKET_PLAY_OUT_SPAWN_ENTITY_CONSTRUCTOR.load().newInstance(armorStand);
|
||||
}
|
||||
|
||||
public ImmutableList<Object> getEquipPackets(NPC npc) throws ReflectiveOperationException {
|
||||
ImmutableList.Builder<Object> builder = ImmutableList.builder();
|
||||
for (Map.Entry<ItemSlot, ItemStack> stackEntry : npc.getNpcPojo().getNpcEquip().entrySet()) {
|
||||
builder.add(((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_EQUIPMENT_CONSTRUCTOR_OLD.load()).newInstance(Integer.valueOf(npc.getEntityID()),
|
||||
Integer.valueOf(stackEntry.getKey().getSlotOld()),
|
||||
builder.add(CacheRegistry.PACKET_PLAY_OUT_ENTITY_EQUIPMENT_CONSTRUCTOR_OLD.load().newInstance(npc.getEntityID(),
|
||||
stackEntry.getKey().getSlotOld(),
|
||||
convertItemStack(npc.getEntityID(), stackEntry.getKey(), stackEntry.getValue())));
|
||||
}
|
||||
return builder.build();
|
||||
|
|
|
@ -7,7 +7,6 @@ import io.github.znetworkw.znpcservers.npc.NPC;
|
|||
import io.github.znetworkw.znpcservers.utility.Utils;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.Map;
|
||||
|
||||
public class PacketV9 extends PacketV8 {
|
||||
|
@ -22,7 +21,7 @@ public class PacketV9 extends PacketV8 {
|
|||
public ImmutableList<Object> getEquipPackets(NPC npc) throws ReflectiveOperationException {
|
||||
ImmutableList.Builder<Object> builder = ImmutableList.builder();
|
||||
for (Map.Entry<ItemSlot, ItemStack> stackEntry : npc.getNpcPojo().getNpcEquip().entrySet()) {
|
||||
builder.add(((Constructor) CacheRegistry.PACKET_PLAY_OUT_ENTITY_EQUIPMENT_CONSTRUCTOR_NEWEST_OLD.load()).newInstance(Integer.valueOf(npc.getEntityID()),
|
||||
builder.add(CacheRegistry.PACKET_PLAY_OUT_ENTITY_EQUIPMENT_CONSTRUCTOR_NEWEST_OLD.load().newInstance(npc.getEntityID(),
|
||||
getItemSlot(stackEntry.getKey().getSlot()),
|
||||
convertItemStack(npc.getEntityID(), stackEntry.getKey(), stackEntry.getValue())));
|
||||
}
|
||||
|
@ -33,7 +32,7 @@ public class PacketV9 extends PacketV8 {
|
|||
Object enumChatString = CacheRegistry.ENUM_CHAT_TO_STRING_METHOD.load().invoke(npc.getGlowColor());
|
||||
if (Utils.BUKKIT_VERSION > 12) {
|
||||
Utils.setValue(packet, npc.getGlowColor(), CacheRegistry.ENUM_CHAT_CLASS);
|
||||
Utils.setValue(packet, "c", ((Constructor) CacheRegistry.I_CHAT_BASE_COMPONENT_A_CONSTRUCTOR.load()).newInstance(enumChatString));
|
||||
Utils.setValue(packet, "c", CacheRegistry.I_CHAT_BASE_COMPONENT_A_CONSTRUCTOR.load().newInstance(enumChatString));
|
||||
} else {
|
||||
Utils.setValue(packet, "g", CacheRegistry.GET_ENUM_CHAT_ID_METHOD.load().invoke(npc.getGlowColor()));
|
||||
Utils.setValue(packet, "c", enumChatString);
|
||||
|
|
|
@ -7,10 +7,6 @@ import org.bukkit.World;
|
|||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class NPCLoadTask extends BukkitRunnable {
|
||||
private static final int DELAY = 40;
|
||||
|
||||
private static final int MAX_TRIES = 10;
|
||||
|
||||
private final NPC npc;
|
||||
|
||||
private int tries = 0;
|
||||
|
|
|
@ -15,14 +15,8 @@ import java.util.concurrent.ExecutorService;
|
|||
import java.util.concurrent.Executors;
|
||||
|
||||
public class SkinFetcher {
|
||||
private static final String EMPTY_STRING = "";
|
||||
|
||||
private static final String DEFAULT_CHARSET = "UTF-8";
|
||||
|
||||
private static final ExecutorService SKIN_EXECUTOR_SERVICE = Executors.newCachedThreadPool();
|
||||
|
||||
private static final JsonParser JSON_PARSER = new JsonParser();
|
||||
|
||||
private final SkinFetcherBuilder builder;
|
||||
|
||||
public SkinFetcher(SkinFetcherBuilder builder) {
|
||||
|
@ -53,7 +47,7 @@ public class SkinFetcher {
|
|||
try {
|
||||
Reader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
|
||||
try {
|
||||
completableFuture.complete(JSON_PARSER.parse(reader).getAsJsonObject());
|
||||
completableFuture.complete(JsonParser.parseReader(reader).getAsJsonObject());
|
||||
reader.close();
|
||||
} catch (Throwable throwable) {
|
||||
try {
|
||||
|
|
|
@ -10,7 +10,6 @@ import java.util.function.Consumer;
|
|||
|
||||
public class EventService<T extends Event> {
|
||||
private final Class<T> eventClass;
|
||||
|
||||
private final List<Consumer<T>> eventConsumers;
|
||||
|
||||
protected EventService(Class<T> eventClass, List<Consumer<T>> eventConsumers) {
|
||||
|
@ -18,29 +17,6 @@ public class EventService<T extends Event> {
|
|||
this.eventConsumers = eventConsumers;
|
||||
}
|
||||
|
||||
public static <T extends Event> EventService<T> addService(ZUser user, Class<T> eventClass) {
|
||||
if (hasService(user, eventClass))
|
||||
throw new IllegalStateException(eventClass.getSimpleName() + " is already register for " + user.getUUID().toString());
|
||||
EventService<T> service = new EventService<>(eventClass, new ArrayList<>());
|
||||
user.getEventServices().add(service);
|
||||
user.toPlayer().closeInventory();
|
||||
return service;
|
||||
}
|
||||
|
||||
public static <T extends Event> EventService<T> findService(ZUser user, Class<T> eventClass) {
|
||||
Objects.requireNonNull(EventService.class);
|
||||
Objects.requireNonNull(EventService.class);
|
||||
return user.getEventServices().stream().filter(eventService -> eventService.getEventClass().isAssignableFrom(eventClass)).map(EventService.class::cast)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
public static boolean hasService(ZUser user, Class<? extends Event> eventClass) {
|
||||
return user.getEventServices()
|
||||
.stream()
|
||||
.anyMatch(eventService -> (eventService.getEventClass() == eventClass));
|
||||
}
|
||||
|
||||
public Class<T> getEventClass() {
|
||||
return this.eventClass;
|
||||
}
|
||||
|
@ -50,11 +26,31 @@ public class EventService<T extends Event> {
|
|||
}
|
||||
|
||||
public EventService<T> addConsumer(Consumer<T> consumer) {
|
||||
getEventConsumers().add(consumer);
|
||||
this.getEventConsumers().add(consumer);
|
||||
return this;
|
||||
}
|
||||
|
||||
public void runAll(T event) {
|
||||
ZNPCsPlus.SCHEDULER.runTask(() -> this.eventConsumers.forEach(()));
|
||||
ZNPCsPlus.SCHEDULER.runTask(() -> this.eventConsumers.forEach(consumer -> consumer.accept(event)));
|
||||
}
|
||||
|
||||
public static <T extends Event> EventService<T> addService(ZUser user, Class<T> eventClass) {
|
||||
if (EventService.hasService(user, eventClass)) {
|
||||
throw new IllegalStateException(eventClass.getSimpleName() + " is already register for " + user.getUUID().toString());
|
||||
}
|
||||
EventService<T> service = new EventService<>(eventClass, new ArrayList<>());
|
||||
user.getEventServices().add(service);
|
||||
user.toPlayer().closeInventory();
|
||||
return service;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T extends Event> EventService<T> findService(ZUser user, Class<T> eventClass) {
|
||||
Objects.requireNonNull(EventService.class);
|
||||
return user.getEventServices().stream().filter(eventService -> eventService.getEventClass().isAssignableFrom(eventClass)).map(EventService.class::cast).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
public static boolean hasService(ZUser user, Class<? extends Event> eventClass) {
|
||||
return user.getEventServices().stream().anyMatch(eventService -> eventService.getEventClass() == eventClass);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,26 +1,21 @@
|
|||
package io.github.znetworkw.znpcservers.user;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import lol.pyr.znpcsplus.ZNPCsPlus;
|
||||
import io.github.znetworkw.znpcservers.cache.CacheRegistry;
|
||||
import io.github.znetworkw.znpcservers.npc.NPC;
|
||||
import io.github.znetworkw.znpcservers.npc.NPCAction;
|
||||
import io.github.znetworkw.znpcservers.npc.event.ClickType;
|
||||
import io.github.znetworkw.znpcservers.npc.event.NPCInteractEvent;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelHandler;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.MessageToMessageDecoder;
|
||||
import lol.pyr.znpcsplus.ZNPCsPlus;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class ZUser {
|
||||
private static final String CHANNEL_NAME = "npc_interact";
|
||||
|
||||
private static final int DEFAULT_DELAY = 1;
|
||||
|
||||
private static final Map<UUID, ZUser> USER_MAP = new HashMap<>();
|
||||
|
||||
private final Map<Integer, Long> lastClicked;
|
||||
|
@ -48,7 +43,7 @@ public class ZUser {
|
|||
.get(this.playerConnection = CacheRegistry.PLAYER_CONNECTION_FIELD.load().get(playerHandle)));
|
||||
if (channel.pipeline().names().contains("npc_interact"))
|
||||
channel.pipeline().remove("npc_interact");
|
||||
channel.pipeline().addAfter("decoder", "npc_interact", (ChannelHandler) new ZNPCSocketDecoder());
|
||||
channel.pipeline().addAfter("decoder", "npc_interact", new ZNPCSocketDecoder());
|
||||
} catch (IllegalAccessException | java.lang.reflect.InvocationTargetException e) {
|
||||
throw new IllegalStateException("can't create player " + uuid.toString(), e.getCause());
|
||||
}
|
||||
|
@ -123,16 +118,16 @@ public class ZUser {
|
|||
continue;
|
||||
if (npcAction.getDelay() > 0) {
|
||||
int actionId = npc.getNpcPojo().getClickActions().indexOf(npcAction);
|
||||
if (ZUser.this.lastClicked.containsKey(Integer.valueOf(actionId))) {
|
||||
long lastClickNanos = System.nanoTime() - ZUser.this.lastClicked.get(Integer.valueOf(actionId)).longValue();
|
||||
if (ZUser.this.lastClicked.containsKey(actionId)) {
|
||||
long lastClickNanos = System.nanoTime() - ZUser.this.lastClicked.get(actionId);
|
||||
if (lastClickNanos < npcAction.getFixedDelay())
|
||||
continue;
|
||||
}
|
||||
ZUser.this.lastClicked.put(Integer.valueOf(actionId), Long.valueOf(System.nanoTime()));
|
||||
ZUser.this.lastClicked.put(actionId, System.nanoTime());
|
||||
}
|
||||
npcAction.run(ZUser.this, npcAction.getAction());
|
||||
}
|
||||
}1);
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import io.github.znetworkw.znpcservers.cache.CacheRegistry;
|
|||
import io.github.znetworkw.znpcservers.configuration.ConfigurationConstants;
|
||||
import io.github.znetworkw.znpcservers.user.ZUser;
|
||||
import me.clip.placeholderapi.PlaceholderAPI;
|
||||
import org.apache.commons.lang.math.NumberUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -11,11 +12,9 @@ import org.bukkit.entity.Player;
|
|||
import java.lang.reflect.Field;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public final class Utils {
|
||||
public static final int BUKKIT_VERSION;
|
||||
|
||||
public static final long SECOND_INTERVAL_NANOS = 1000000000L;
|
||||
|
||||
public static boolean PLACEHOLDER_SUPPORT = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI");
|
||||
|
||||
static {
|
||||
|
|
|
@ -32,11 +32,12 @@ public class ZInventory {
|
|||
this.page = page;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public Inventory build(ZInventoryPage page) {
|
||||
if (page == null)
|
||||
throw new IllegalStateException("page is null");
|
||||
if (page.getRows() / 9 > 6)
|
||||
throw new IllegalArgumentException(String.format("Unexpected rows size. Has %d, max %d", Integer.valueOf(page.getRows()), Integer.valueOf(6)));
|
||||
throw new IllegalArgumentException(String.format("Unexpected rows size. Has %d, max %d", page.getRows(), 6));
|
||||
setCurrentPage(page);
|
||||
page.getInventoryItems().removeIf(zInventoryItem -> !zInventoryItem.isDefault());
|
||||
page.update();
|
||||
|
|
|
@ -9,6 +9,7 @@ import org.bukkit.inventory.ItemStack;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public abstract class ZInventoryPage {
|
||||
private final ZInventory zInventory;
|
||||
|
||||
|
@ -27,7 +28,7 @@ public abstract class ZInventoryPage {
|
|||
ZInventoryPage zInventoryPage = zInventory.getPage();
|
||||
addItem(ItemStackBuilder.forMaterial(Material.ARROW)
|
||||
.setName(ChatColor.GREEN + "Go back")
|
||||
.setLore(new String[]{ChatColor.GRAY + "click here..."}, ).build(), this.rows - 9, true, event -> {
|
||||
.setLore(ChatColor.GRAY + "click here...").build(), this.rows - 9, true, event -> {
|
||||
zInventory.setCurrentPage(zInventoryPage);
|
||||
openInventory();
|
||||
});
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.Arrays;
|
|||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class ItemStackBuilder {
|
||||
private final ItemStack itemStack;
|
||||
|
||||
|
|
|
@ -81,11 +81,11 @@ public class ZLocation {
|
|||
public JsonElement serialize(ZLocation src, Type typeOfSrc, JsonSerializationContext context) {
|
||||
JsonObject jsonObject = new JsonObject();
|
||||
jsonObject.addProperty("world", src.getWorldName());
|
||||
jsonObject.addProperty("x", Double.valueOf(src.getX()));
|
||||
jsonObject.addProperty("y", Double.valueOf(src.getY()));
|
||||
jsonObject.addProperty("z", Double.valueOf(src.getZ()));
|
||||
jsonObject.addProperty("yaw", Float.valueOf(src.getYaw()));
|
||||
jsonObject.addProperty("pitch", Float.valueOf(src.getPitch()));
|
||||
jsonObject.addProperty("x", src.getX());
|
||||
jsonObject.addProperty("y", src.getY());
|
||||
jsonObject.addProperty("z", src.getZ());
|
||||
jsonObject.addProperty("yaw", src.getYaw());
|
||||
jsonObject.addProperty("pitch", src.getPitch());
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,10 +16,10 @@ import io.github.znetworkw.znpcservers.npc.task.NPCManagerTask;
|
|||
import io.github.znetworkw.znpcservers.npc.task.NPCSaveTask;
|
||||
import io.github.znetworkw.znpcservers.user.ZUser;
|
||||
import io.github.znetworkw.znpcservers.utility.BungeeUtils;
|
||||
import io.github.znetworkw.znpcservers.utility.MetricsLite;
|
||||
import io.github.znetworkw.znpcservers.utility.SchedulerUtils;
|
||||
import io.github.znetworkw.znpcservers.utility.itemstack.ItemStackSerializer;
|
||||
import io.github.znetworkw.znpcservers.utility.location.ZLocation;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
@ -65,7 +65,7 @@ public class ZNPCsPlus extends JavaPlugin {
|
|||
|
||||
loadAllPaths();
|
||||
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
||||
new MetricsLite(this, PLUGIN_ID);
|
||||
new Metrics(this, PLUGIN_ID);
|
||||
new DefaultCommand();
|
||||
SCHEDULER = new SchedulerUtils(this);
|
||||
BUNGEE_UTILS = new BungeeUtils(this);
|
||||
|
|
Loading…
Reference in a new issue