mirror of
https://github.com/SimplexDevelopment/SimplexCore.git
synced 2024-12-22 08:37:37 +00:00
BLEEDING-EDGE v1.3_04
This commit is contained in:
parent
997c333cc1
commit
45cf69bf94
@ -2,18 +2,22 @@ package io.github.simplexdev.api;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.Sign;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IUsableSign {
|
||||
Block getBlock();
|
||||
Sign getSign();
|
||||
|
||||
Location getSignLocation();
|
||||
|
||||
World getWorld();
|
||||
|
||||
String getSignText();
|
||||
List<String> getLines();
|
||||
|
||||
void executeOnInteract();
|
||||
boolean canInteract();
|
||||
|
||||
void execute();
|
||||
|
||||
String signTag();
|
||||
}
|
||||
|
@ -1,11 +0,0 @@
|
||||
package io.github.simplexdev.api.func;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface Guard {
|
||||
void verify();
|
||||
|
||||
default Guard after(Guard clause) {
|
||||
clause.verify();
|
||||
return this;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package io.github.simplexdev.api.func;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface VoidSupplier {
|
||||
void get();
|
||||
|
||||
default VoidSupplier after(VoidSupplier supplier) {
|
||||
supplier.get();
|
||||
return this;
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@ package io.github.simplexdev.simplexcore.ban;
|
||||
|
||||
import io.github.simplexdev.api.IBan;
|
||||
import io.github.simplexdev.simplexcore.chat.Messages;
|
||||
import io.github.simplexdev.api.func.Guard;
|
||||
import io.github.simplexdev.api.func.VoidSupplier;
|
||||
import io.github.simplexdev.simplexcore.utils.Constants;
|
||||
import io.github.simplexdev.simplexcore.utils.Utilities;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -20,7 +20,7 @@ public final class BanFactory {
|
||||
private String banReason;
|
||||
private long banDuration;
|
||||
|
||||
private BanFactory(Player player, CommandSender sender, Date banDate, BanType type) {
|
||||
public BanFactory(Player player, CommandSender sender, Date banDate, BanType type) {
|
||||
this.player = player;
|
||||
this.sender = sender;
|
||||
this.banDate = banDate;
|
||||
@ -31,10 +31,6 @@ public final class BanFactory {
|
||||
banId = createBanId();
|
||||
}
|
||||
|
||||
public static BanFactory define(Player player, CommandSender sender, Date banDate, BanType type) {
|
||||
return new BanFactory(player, sender, banDate, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* The values here are optional to define. They are defined by default, and this does not need to be used.
|
||||
*
|
||||
@ -96,7 +92,7 @@ public final class BanFactory {
|
||||
|
||||
}
|
||||
|
||||
private Guard assignBanDuration() {
|
||||
private VoidSupplier assignBanDuration() {
|
||||
return () -> {
|
||||
if (type.equals(BanType.PERMANENT)) {
|
||||
banDuration = Constants.getPlugin().getInstances().getTimeValues().YEAR() * 99;
|
||||
|
@ -1,19 +1,19 @@
|
||||
package io.github.simplexdev.simplexcore.chat;
|
||||
|
||||
import io.github.simplexdev.simplexcore.utils.Bean;
|
||||
import io.github.simplexdev.simplexcore.utils.Wrapper;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public final class ChatUtils {
|
||||
protected final Bean<? extends CommandSender> target;
|
||||
protected final Wrapper<? extends CommandSender> target;
|
||||
protected final TextComponentFactory factory = new TextComponentFactory();
|
||||
|
||||
private ChatUtils(Bean<? extends CommandSender> target) {
|
||||
private ChatUtils(Wrapper<? extends CommandSender> target) {
|
||||
this.target = target;
|
||||
}
|
||||
|
||||
public static <T extends CommandSender> ChatUtils target(T target) {
|
||||
return new ChatUtils(new Bean<>(target));
|
||||
return new ChatUtils(new Wrapper<>(target));
|
||||
}
|
||||
|
||||
public void msg(String message) {
|
||||
|
@ -34,11 +34,11 @@ public final class DependencyListener extends SimplexListener {
|
||||
Validate temp2 = () -> PAPI_NAMES.contains(event.getPlugin().getName());
|
||||
|
||||
if (temp.isValid()) {
|
||||
Constants.getDependencyManager().registerProtocolLib();
|
||||
Constants.getPlugin().getInstances().getDependencyManager().registerProtocolLib();
|
||||
}
|
||||
|
||||
if (temp2.isValid()) {
|
||||
Constants.getDependencyManager().registerPAPI();
|
||||
Constants.getPlugin().getInstances().getDependencyManager().registerPAPI();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,60 @@
|
||||
package io.github.simplexdev.simplexcore.sign;
|
||||
|
||||
import io.github.simplexdev.api.IUsableSign;
|
||||
import io.github.simplexdev.api.func.VoidSupplier;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Sign;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class AbstractSign implements IUsableSign {
|
||||
protected final Sign sign;
|
||||
protected final Location location;
|
||||
protected final World world;
|
||||
protected final List<String> lines;
|
||||
|
||||
protected String signTag = null;
|
||||
protected VoidSupplier executeScript = null;
|
||||
protected boolean canInteract = false;
|
||||
|
||||
protected AbstractSign(Sign sign) {
|
||||
this.sign = sign;
|
||||
this.location = sign.getLocation();
|
||||
this.world = sign.getWorld();
|
||||
this.lines = Arrays.asList(sign.getLines());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sign getSign() {
|
||||
return sign;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getSignLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
@Override
|
||||
public World getWorld() {
|
||||
return world;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getLines() {
|
||||
return lines;
|
||||
}
|
||||
|
||||
public void setSignTag(String signTag) {
|
||||
this.signTag = signTag();
|
||||
}
|
||||
|
||||
public void setExecuteScript(VoidSupplier executeScript) {
|
||||
this.executeScript = executeScript;
|
||||
}
|
||||
|
||||
public void setCanInteract(boolean canInteract) {
|
||||
this.canInteract = canInteract;
|
||||
}
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
package io.github.simplexdev.simplexcore.sign;
|
||||
|
||||
import io.github.simplexdev.api.IUsableSign;
|
||||
import io.github.simplexdev.api.func.VoidSupplier;
|
||||
import io.github.simplexdev.simplexcore.listener.SimplexListener;
|
||||
import io.github.simplexdev.simplexcore.plugin.SimplexAddon;
|
||||
import io.github.simplexdev.simplexcore.utils.Constants;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Sign;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class SignFactory {
|
||||
private static final List<Material> SIGN_TYPES = new ArrayList<>() {{
|
||||
add(Material.OAK_SIGN);
|
||||
add(Material.OAK_WALL_SIGN);
|
||||
add(Material.DARK_OAK_SIGN);
|
||||
add(Material.DARK_OAK_WALL_SIGN);
|
||||
add(Material.BIRCH_SIGN);
|
||||
add(Material.BIRCH_WALL_SIGN);
|
||||
add(Material.ACACIA_SIGN);
|
||||
add(Material.ACACIA_WALL_SIGN);
|
||||
add(Material.CRIMSON_SIGN);
|
||||
add(Material.CRIMSON_WALL_SIGN);
|
||||
add(Material.JUNGLE_SIGN);
|
||||
add(Material.JUNGLE_WALL_SIGN);
|
||||
add(Material.SPRUCE_SIGN);
|
||||
add(Material.SPRUCE_WALL_SIGN);
|
||||
add(Material.WARPED_SIGN);
|
||||
add(Material.WARPED_WALL_SIGN);
|
||||
}};
|
||||
|
||||
private SignData signData = null;
|
||||
|
||||
public void activateBasicSignDataListener() {
|
||||
signData = new SignData(Constants.getPlugin());
|
||||
}
|
||||
|
||||
public SignData getSignData() {
|
||||
return signData;
|
||||
}
|
||||
|
||||
public IUsableSign create(Sign sign, boolean canInteract, String tag, VoidSupplier execute) {
|
||||
return new AbstractSign(sign) {
|
||||
@Override
|
||||
public boolean canInteract() {
|
||||
return canInteract;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
execute.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String signTag() {
|
||||
return tag;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public IUsableSign addTagsToSign(Sign sign, Object... tags) {
|
||||
if (getSignData() != null) {
|
||||
AbstractSign abs = SignData.getUnlabeledSigns().get(sign);
|
||||
for (Object tag : tags) {
|
||||
if (tag instanceof VoidSupplier) {
|
||||
abs.setExecuteScript((VoidSupplier)tag);
|
||||
}
|
||||
if (tag instanceof String) {
|
||||
abs.setSignTag((String)tag);
|
||||
}
|
||||
if (tag instanceof Boolean) {
|
||||
abs.setCanInteract((Boolean)tag);
|
||||
}
|
||||
}
|
||||
return abs;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private AbstractSign createNoTag(Sign sign) {
|
||||
return new AbstractSign(sign) {
|
||||
@Override
|
||||
public boolean canInteract() {
|
||||
return canInteract;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
executeScript.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String signTag() {
|
||||
return signTag;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static class SignData extends SimplexListener {
|
||||
public SignData(SimplexAddon<?> plugin) {
|
||||
register(this, plugin);
|
||||
}
|
||||
|
||||
private static final Map<Sign, AbstractSign> signMap = new HashMap<>();
|
||||
|
||||
@EventHandler
|
||||
public void blockPlaceEvent(BlockPlaceEvent event) {
|
||||
if (SIGN_TYPES.contains(event.getBlockPlaced().getType())
|
||||
&& (event.getBlockPlaced() instanceof Sign)) {
|
||||
Sign sign = (Sign) event.getBlockPlaced();
|
||||
AbstractSign abs = new SignFactory().createNoTag(sign);
|
||||
signMap.put(sign, abs);
|
||||
}
|
||||
}
|
||||
|
||||
public static Map<Sign, AbstractSign> getUnlabeledSigns() {
|
||||
return signMap;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package io.github.simplexdev.simplexcore.utils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.reflections.Reflections;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Set;
|
||||
|
||||
public final class ReflectionTools {
|
||||
public ReflectionTools() {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Reflections reflect(Class<?> loadFrom) {
|
||||
return new Reflections(loadFrom.getName());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<Class<?>> getAnnotatedClasses(Class<?> loadFrom, Class<? extends Annotation> annotation) {
|
||||
return new Reflections(loadFrom.getName()).getTypesAnnotatedWith(annotation);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Field getField(Class<?> cls, String name) {
|
||||
try {
|
||||
Field field = cls.getField(name);
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Constructor<?> getConstructor(Class<?> cls, String name, Class<?>... initializers) {
|
||||
try {
|
||||
return cls.getDeclaredConstructor(initializers);
|
||||
} catch (NoSuchMethodException ignored) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Wrapper<?> initConstructor(Constructor<?> constructor, Object... initializers) {
|
||||
try {
|
||||
return new Wrapper<>(constructor.newInstance(initializers));
|
||||
} catch (InstantiationException | InvocationTargetException | IllegalAccessException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
package io.github.simplexdev.simplexcore.utils;
|
||||
|
||||
import io.github.simplexdev.api.func.Guard;
|
||||
import io.github.simplexdev.simplexcore.ban.BanType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -3,10 +3,10 @@ package io.github.simplexdev.simplexcore.utils;
|
||||
import org.apache.commons.lang.builder.EqualsBuilder;
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
public final class Bean<T> {
|
||||
public final class Wrapper<T> {
|
||||
protected T bean;
|
||||
|
||||
public Bean(T bean) {
|
||||
public Wrapper(T bean) {
|
||||
this.bean = bean;
|
||||
}
|
||||
|
||||
@ -25,7 +25,7 @@ public final class Bean<T> {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof Bean<?>)) {
|
||||
if (!(obj instanceof Wrapper<?>)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ public final class Bean<T> {
|
||||
return true;
|
||||
}
|
||||
|
||||
return new EqualsBuilder().append(((Bean<?>) obj).get(), get()).isEquals();
|
||||
return new EqualsBuilder().append(((Wrapper<?>) obj).get(), get()).isEquals();
|
||||
}
|
||||
|
||||
@Override
|
Loading…
Reference in New Issue
Block a user