mirror of
https://github.com/Artillex-Studios/AxMinions.git
synced 2025-02-18 01:31:40 +01:00
More filter support
This commit is contained in:
parent
ad9972258a
commit
05b3427050
@ -1,8 +1,23 @@
|
||||
package com.artillexstudios.axminions.minions.actions.filters;
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class Filter<T> {
|
||||
private final ObjectArrayList<Transformer<?, ?>> transformers = new ObjectArrayList<>();
|
||||
private final List<Transformer<?, ?>> unmodifiableTransformers = Collections.unmodifiableList(transformers);
|
||||
|
||||
public abstract boolean isAllowed(T object);
|
||||
|
||||
public abstract Class<?> inputClass();
|
||||
|
||||
public void addTransformer(Transformer<?, ?> transformer) {
|
||||
this.transformers.add(transformer);
|
||||
}
|
||||
|
||||
public List<Transformer<?, ?>> transformers() {
|
||||
return this.unmodifiableTransformers;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
package com.artillexstudios.axminions.minions.actions.filters;
|
||||
|
||||
public interface Transformer<T, Z> {
|
||||
|
||||
Z transform(T object);
|
||||
|
||||
Class<?> inputClass();
|
||||
|
||||
Class<?> outputClass();
|
||||
}
|
@ -1,11 +1,14 @@
|
||||
package com.artillexstudios.axminions.minions.actions.filters.implementation;
|
||||
|
||||
import com.artillexstudios.axminions.minions.actions.filters.Filter;
|
||||
import com.artillexstudios.axminions.minions.actions.filters.Transformer;
|
||||
import com.artillexstudios.axminions.utils.LogUtils;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@ -13,9 +16,43 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public final class MaterialFilter extends Filter<Material> {
|
||||
private final ObjectArrayList<Material> allowed = new ObjectArrayList<>(); // TODO: Check performance vs hashset
|
||||
private final HashSet<Material> allowed = new HashSet<>();
|
||||
|
||||
public MaterialFilter(Map<Object, Object> configuration) {
|
||||
this.addTransformer(new Transformer<Location, Material>() {
|
||||
@Override
|
||||
public Material transform(Location object) {
|
||||
return object.getBlock().getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> inputClass() {
|
||||
return Location.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> outputClass() {
|
||||
return Material.class;
|
||||
}
|
||||
});
|
||||
|
||||
this.addTransformer(new Transformer<Block, Material>() {
|
||||
@Override
|
||||
public Material transform(Block object) {
|
||||
return object.getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> inputClass() {
|
||||
return Block.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> outputClass() {
|
||||
return Material.class;
|
||||
}
|
||||
});
|
||||
|
||||
List<String> whitelist = (List<String>) configuration.get("whitelist");
|
||||
if (whitelist != null) {
|
||||
for (String s : whitelist) {
|
||||
@ -37,7 +74,7 @@ public final class MaterialFilter extends Filter<Material> {
|
||||
if (blacklist != null) {
|
||||
for (String s : blacklist) {
|
||||
if (s.equals("*")) {
|
||||
this.allowed.removeAll(List.of(Material.values()));
|
||||
List.of(Material.values()).forEach(this.allowed::remove);
|
||||
} else {
|
||||
List<Material> materials = match(s);
|
||||
if (materials == null) {
|
||||
@ -45,7 +82,7 @@ public final class MaterialFilter extends Filter<Material> {
|
||||
continue;
|
||||
}
|
||||
|
||||
this.allowed.removeAll(materials);
|
||||
materials.forEach(this.allowed::remove);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -73,7 +110,7 @@ public final class MaterialFilter extends Filter<Material> {
|
||||
|
||||
@Override
|
||||
public boolean isAllowed(Material object) {
|
||||
return Collections.binarySearch(this.allowed, object) >= 0;
|
||||
return this.allowed.contains(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user