Skip to content

Commit

Permalink
Add playerfilter API
Browse files Browse the repository at this point in the history
  • Loading branch information
fullwall committed Mar 12, 2023
1 parent 8c8b24b commit 3f97618
Show file tree
Hide file tree
Showing 9 changed files with 127 additions and 85 deletions.
27 changes: 14 additions & 13 deletions pom.xml
Expand Up @@ -20,26 +20,21 @@
<repository>
<id>sk89q-repo</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>${bukkit.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>me.clip</groupId>
Expand All @@ -53,6 +48,12 @@
<version>${worldguard.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.MilkBowl</groupId>
<artifactId>VaultAPI</artifactId>
<version>1.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ch.ethz.globis.phtree</groupId>
<artifactId>phtree</artifactId>
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/net/citizensnpcs/api/LocationLookup.java
Expand Up @@ -121,6 +121,12 @@ public boolean remove(UUID key, String value) {
return sent.getOrDefault(key, Collections.emptyMap()).remove(value) != null;
}

public void removeAllValues(String value) {
for (Map<String, T> map : sent.values()) {
map.remove(value);
}
}

public void set(UUID key, String value, T marker) {
if (marker instanceof Location || marker instanceof World) {
throw new IllegalArgumentException("Invalid marker");
Expand Down
@@ -1,6 +1,7 @@
package net.citizensnpcs.api.ai;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.bukkit.Location;
Expand Down Expand Up @@ -320,6 +321,10 @@ public BlockExaminer[] examiners() {
return examiners.toArray(new BlockExaminer[examiners.size()]);
}

public boolean hasExaminer(Class<? extends BlockExaminer> clazz) {
return Arrays.asList(examiners).stream().anyMatch(e -> clazz.isAssignableFrom(e.getClass()));
}

/**
* @see #lookAtFunction(Function)
*/
Expand Down
36 changes: 6 additions & 30 deletions src/main/java/net/citizensnpcs/api/astar/pathfinder/Path.java
Expand Up @@ -4,11 +4,10 @@
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;

import com.google.common.base.Function;
Expand All @@ -19,7 +18,6 @@
import net.citizensnpcs.api.astar.Plan;
import net.citizensnpcs.api.astar.pathfinder.PathPoint.PathCallback;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.util.SpigotUtil;

public class Path implements Plan {
private List<Block> blockList;
Expand Down Expand Up @@ -50,29 +48,10 @@ private PathEntry[] cull(Iterable<VectorNode> unfiltered) {
return path.toArray(new PathEntry[path.size()]);
}

public void debug() {
for (Player player : Bukkit.getOnlinePlayers()) {
for (PathEntry entry : path) {
if (SpigotUtil.isUsing1_13API()) {
player.sendBlockChange(entry.vector.toLocation(player.getWorld()), YELLOW_FLOWER.createBlockData());
} else {
player.sendBlockChange(entry.vector.toLocation(player.getWorld()), YELLOW_FLOWER, (byte) 0);
}
}
}
}

public void debugEnd() {
for (Player player : Bukkit.getOnlinePlayers()) {
for (PathEntry entry : path) {
Block block = entry.vector.toLocation(player.getWorld()).getBlock();
if (SpigotUtil.isUsing1_13API()) {
player.sendBlockChange(block.getLocation(), block.getBlockData());
} else {
player.sendBlockChange(block.getLocation(), block.getType(), block.getData());
}
}
}
public List<Block> getBlocks(World world) {
return Arrays.asList(path).stream()
.map(p -> world.getBlockAt(p.vector.getBlockX(), p.vector.getBlockY(), p.vector.getBlockZ()))
.collect(Collectors.toList());
}

public Vector getCurrentVector() {
Expand Down Expand Up @@ -154,7 +133,4 @@ public String toString() {
return vector.toString();
}
}

private static Material YELLOW_FLOWER = SpigotUtil.isUsing1_13API() ? Material.SUNFLOWER
: Material.valueOf("YELLOW_FLOWER");
}
37 changes: 12 additions & 25 deletions src/main/java/net/citizensnpcs/api/command/CommandManager.java
Expand Up @@ -5,6 +5,7 @@
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
Expand Down Expand Up @@ -178,6 +179,8 @@ private void executeCommand(String[] args, CommandSender sender, Object[] method
val = CommandContext.parseLocation(context.getSenderLocation(), val.toString());
} else if (desiredType == UUID.class) {
val = UUID.fromString(val.toString());
} else if (desiredType == Duration.class) {
val = SpigotUtil.parseDuration(val.toString());
}
methodArgs[entry.getKey()] = val;
}
Expand Down Expand Up @@ -590,7 +593,7 @@ public void setInjector(Injector injector) {
this.injector = injector;
}

public static class CommandInfo {
public class CommandInfo {
private List<Annotation> annotations = Lists.newArrayList();
private final Command commandAnnotation;
public Object instance;
Expand All @@ -605,11 +608,11 @@ public CommandInfo(Command commandAnnotation, Method method) {
}

public void addArgAnnotation(int idx, Class<?> paramType, Arg arg) {
this.methodArguments.put(idx, new InjectedCommandArgument(paramType, arg));
this.methodArguments.put(idx, new InjectedCommandArgument(injector, paramType, arg));
}

public void addFlagAnnotation(int idx, Class<?> paramType, Flag flag) {
this.methodArguments.put(idx, new InjectedCommandArgument(paramType, flag));
this.methodArguments.put(idx, new InjectedCommandArgument(injector, paramType, flag));
}

private Collection<String> calculateValueFlags() {
Expand Down Expand Up @@ -687,29 +690,21 @@ private static class InjectedCommandArgument {
private final Class<?> paramType;
private FlagValidator<?> validator;

public InjectedCommandArgument(Class<?> paramType, Arg arg) {
public InjectedCommandArgument(Injector injector, Class<?> paramType, Arg arg) {
this.paramType = paramType;
this.names = new String[] {};
this.index = arg.value();
this.completions = arg.completions();
this.defaultValue = arg.defValue().isEmpty() ? null : arg.defValue();
if (arg.validator() != FlagValidator.Identity.class) {
try {
this.validator = arg.validator().getConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
this.validator = (FlagValidator<?>) injector.getInstance(arg.validator());
}
if (arg.completionsProvider() != CompletionsProvider.Identity.class) {
try {
this.completionsProvider = arg.completionsProvider().getConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
this.completionsProvider = (CompletionsProvider) injector.getInstance(arg.completionsProvider());
}
}

public InjectedCommandArgument(Class<?> paramType, Flag flag) {
public InjectedCommandArgument(Injector injector, Class<?> paramType, Flag flag) {
this.paramType = paramType;
this.names = flag.value();
for (int i = 0; i < this.names.length; i++) {
Expand All @@ -718,18 +713,10 @@ public InjectedCommandArgument(Class<?> paramType, Flag flag) {
this.completions = flag.completions();
this.defaultValue = flag.defValue().isEmpty() ? null : flag.defValue();
if (flag.validator() != FlagValidator.Identity.class) {
try {
this.validator = flag.validator().getConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
this.validator = (FlagValidator<?>) injector.getInstance(flag.validator());
}
if (flag.completionsProvider() != CompletionsProvider.Identity.class) {
try {
this.completionsProvider = flag.completionsProvider().getConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
this.completionsProvider = (CompletionsProvider) injector.getInstance(flag.completionsProvider());
}
}

Expand Down
30 changes: 14 additions & 16 deletions src/main/java/net/citizensnpcs/api/command/Injector.java
@@ -1,16 +1,19 @@
package net.citizensnpcs.api.command;

import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;

import net.citizensnpcs.api.util.Messaging;

public class Injector {
private final Class<?>[] argClasses;
private final Object[] args;
private final List<Object> args;

public Injector(Object... args) {
this.args = args;
this.args = Arrays.asList(args);
argClasses = new Class[args.length];
for (int i = 0; i < args.length; ++i) {
argClasses[i] = args[i].getClass();
Expand All @@ -19,29 +22,24 @@ public Injector(Object... args) {

public Object getInstance(Class<?> clazz) {
try {
Constructor<?> ctr = clazz.getConstructor(argClasses);
ctr.setAccessible(true);
return ctr.newInstance(args);
return LOOKUP.findConstructor(clazz, MethodType.methodType(void.class, argClasses))
.invokeWithArguments(args);
} catch (NoSuchMethodException e) {
try {
return clazz.newInstance();
Constructor<?> ctr = clazz.getDeclaredConstructor();
ctr.setAccessible(true);
return ctr.newInstance();
} catch (Exception ex) {
Messaging.severe("Error initializing commands class " + clazz + ": ");
ex.printStackTrace();
return null;
}
} catch (InvocationTargetException e) {
Messaging.severe("Error initializing commands class " + clazz + ": ");
e.printStackTrace();
return null;
} catch (InstantiationException e) {
Messaging.severe("Error initializing commands class " + clazz + ": ");
e.printStackTrace();
return null;
} catch (IllegalAccessException e) {
} catch (Throwable e) {
Messaging.severe("Error initializing commands class " + clazz + ": ");
e.printStackTrace();
return null;
}
}

private static MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
}
1 change: 1 addition & 0 deletions src/main/java/net/citizensnpcs/api/npc/NPC.java
Expand Up @@ -491,6 +491,7 @@ public enum Metadata {
* The packet update delay. Integer defaults to setting value.
*/
PACKET_UPDATE_DELAY("packet-update-delay"),
PATHFINDER_FALL_DISTANCE("pathfinder-fall-distance"),
/**
* Whether to open doors while pathfinding. Boolean.
*/
Expand Down

0 comments on commit 3f97618

Please sign in to comment.