Update BookBuilder

master
sky 2020-03-25 00:24:44 +08:00
parent 6f63102ec5
commit 075f505616
8 changed files with 221 additions and 51 deletions

View File

@ -6,7 +6,7 @@ plugins {
} }
group = 'me.skymc' group = 'me.skymc'
version = '5.22' version = '5.23'
sourceCompatibility = 1.8 sourceCompatibility = 1.8
targetCompatibility = 1.8 targetCompatibility = 1.8

View File

@ -3,6 +3,7 @@ package io.izzel.taboolib;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import io.izzel.taboolib.common.loader.StartupLoader;
import io.izzel.taboolib.module.command.TCommandHandler; import io.izzel.taboolib.module.command.TCommandHandler;
import io.izzel.taboolib.module.config.TConfig; import io.izzel.taboolib.module.config.TConfig;
import io.izzel.taboolib.module.config.TConfigWatcher; import io.izzel.taboolib.module.config.TConfigWatcher;
@ -29,6 +30,8 @@ public abstract class PluginLoader {
private static List<PluginLoader> registerLoader = Lists.newArrayList(); private static List<PluginLoader> registerLoader = Lists.newArrayList();
private static Set<String> plugins = Sets.newHashSet(); private static Set<String> plugins = Sets.newHashSet();
private static Map<String, Object> redefine = Maps.newHashMap(); private static Map<String, Object> redefine = Maps.newHashMap();
private static boolean firstLoading = false;
private static boolean firstStarting = false;
static { static {
registerLoader.add(new PluginLoader() { registerLoader.add(new PluginLoader() {
@ -43,6 +46,11 @@ public abstract class PluginLoader {
TabooLibLoader.setupClasses(plugin); TabooLibLoader.setupClasses(plugin);
// 加载插件类 // 加载插件类
TabooLibLoader.preLoadClass(plugin, TabooLibLoader.getPluginClassSafely(plugin)); TabooLibLoader.preLoadClass(plugin, TabooLibLoader.getPluginClassSafely(plugin));
// 首次运行
if (!firstLoading) {
firstLoading = true;
StartupLoader.onLoading();
}
} }
@Override @Override
@ -53,6 +61,11 @@ public abstract class PluginLoader {
TabooLibLoader.postLoadClass(plugin, TabooLibLoader.getPluginClassSafely(plugin)); TabooLibLoader.postLoadClass(plugin, TabooLibLoader.getPluginClassSafely(plugin));
// 注册插件命令 // 注册插件命令
TCommandHandler.registerCommand(plugin); TCommandHandler.registerCommand(plugin);
// 首次运行
if (!firstStarting) {
firstStarting = true;
StartupLoader.onStarting();
}
} }
@Override @Override

View File

@ -1,28 +1,35 @@
package io.izzel.taboolib.common.listener; package io.izzel.taboolib.common.listener;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import io.izzel.taboolib.TabooLib;
import io.izzel.taboolib.TabooLibAPI; import io.izzel.taboolib.TabooLibAPI;
import io.izzel.taboolib.common.loader.Startup;
import io.izzel.taboolib.common.loader.StartupLoader;
import io.izzel.taboolib.module.command.lite.CommandBuilder;
import io.izzel.taboolib.module.db.local.Local; import io.izzel.taboolib.module.db.local.Local;
import io.izzel.taboolib.module.db.local.LocalPlayer; import io.izzel.taboolib.module.db.local.LocalPlayer;
import io.izzel.taboolib.module.hologram.Hologram; import io.izzel.taboolib.module.hologram.Hologram;
import io.izzel.taboolib.module.hologram.THologram; import io.izzel.taboolib.module.hologram.THologram;
import io.izzel.taboolib.module.inject.TListener; import io.izzel.taboolib.module.inject.TListener;
import io.izzel.taboolib.module.locale.TLocale;
import io.izzel.taboolib.module.locale.logger.TLogger; import io.izzel.taboolib.module.locale.logger.TLogger;
import io.izzel.taboolib.module.tellraw.TellrawJson; import io.izzel.taboolib.module.tellraw.TellrawJson;
import io.izzel.taboolib.util.Files; import io.izzel.taboolib.util.Files;
import io.izzel.taboolib.util.book.BookFormatter;
import io.izzel.taboolib.util.item.Items; import io.izzel.taboolib.util.item.Items;
import io.izzel.taboolib.util.lite.Signs; import io.izzel.taboolib.util.lite.Signs;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.server.ServerCommandEvent; import org.bukkit.event.server.ServerCommandEvent;
import org.bukkit.inventory.meta.BookMeta;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author sky * @author sky
@ -30,50 +37,121 @@ import java.util.Arrays;
@TListener @TListener
public class ListenerCommand implements Listener { public class ListenerCommand implements Listener {
@EventHandler static {
public void cmd(PlayerCommandPreprocessEvent e) { StartupLoader.register(ListenerCommand.class);
if (e.getMessage().equalsIgnoreCase("/tabooLib")) { }
e.setCancelled(true);
TLocale.Display.sendTitle(e.getPlayer(), "§fTabooLib", "§7TabooLib Enabled."); abstract class Module {
}
if (e.getMessage().equalsIgnoreCase("/tellrawTest") && e.getPlayer().hasPermission("*")) { abstract public String[] name();
e.setCancelled(true);
TellrawJson.create() abstract public void run(Player player);
.append("§8[§3§lTabooLib§8] §7TellrawJson Test: §f[") }
.append(Items.getName(e.getPlayer().getItemInHand())).hoverItem(e.getPlayer().getItemInHand())
.append("§f]") List<Module> testUtil = Lists.newArrayList(
.send(e.getPlayer()); new Module() {
} @Override
if (e.getMessage().equalsIgnoreCase("/fakesignTest") && e.getPlayer().hasPermission("*")) { public String[] name() {
e.setCancelled(true); return new String[] {"json", "tellrawJson"};
Signs.fakeSign(e.getPlayer(), lines -> { }
e.getPlayer().sendMessage("§8[§3§lTabooLib§8] §7FakeSign Lines: §f" + Arrays.toString(lines));
@Override
public void run(Player player) {
TellrawJson.create()
.append("§8[§fTabooLib§8] §7TellrawJson: §f[")
.append(Items.getName(player.getItemInHand())).hoverItem(player.getItemInHand())
.append("§f]")
.send(player);
}
},
new Module() {
@Override
public String[] name() {
return new String[] {"sign", "fakeSign"};
}
@Override
public void run(Player player) {
Signs.fakeSign(player, lines -> player.sendMessage("§8[§fTabooLib§8] §7FakeSign: §f" + Arrays.toString(lines)));
}
},
new Module() {
@Override
public String[] name() {
return new String[] {"hd", "hologram"};
}
@Override
public void run(Player player) {
player.sendMessage("§8[§fTabooLib§8] §7Hologram.");
Location location = player.getEyeLocation().add(player.getLocation().getDirection());
Hologram hologram = THologram.create(location, "TabooLib", player)
.flash(Lists.newArrayList(
"§bT§fabooLib",
"§bTa§fbooLib",
"§bTab§fooLib",
"§bTabo§foLib",
"§bTaboo§fLib",
"§bTabooL§fib",
"§bTabooLi§fb",
"§bTabooLib",
"§bTabooLi§fb",
"§bTabooL§fib",
"§bTaboo§fLib",
"§bTabo§foLib",
"§bTab§fooLib",
"§bTa§fbooLib",
"§bT§fabooLib",
"§fTabooLib"
), 1).deleteOn(30);
}
},
new Module() {
@Override
public String[] name() {
return new String[] {"book", "bookBuilder"};
}
@Override
public void run(Player player) {
BookFormatter.writtenBook()
.generation(BookMeta.Generation.COPY_OF_COPY)
.addPage(TellrawJson.create()
.append("BookBuilder")
.hoverText("HoverText"))
.open(player);
}
}); });
}
if (e.getMessage().equalsIgnoreCase("/hologramTest") && e.getPlayer().hasPermission("*")) { @Startup.Starting
e.setCancelled(true); public void init() {
e.getPlayer().sendMessage("§8[§3§lTabooLib§8] §7Hologram Test."); // 版本命令
Location location = e.getPlayer().getEyeLocation().add(e.getPlayer().getLocation().getDirection()); CommandBuilder.create("taboolib", TabooLib.getPlugin())
Hologram hologram = THologram.create(location, "TabooLib", e.getPlayer()) .aliases("lib")
.flash(Lists.newArrayList( .execute((sender, args) -> {
"§bT§fabooLib", sender.sendMessage("§8[§fTabooLib§8] §7Currently Version: §fv" + TabooLib.getVersion());
"§bTa§fbooLib", }).build();
"§bTab§fooLib", // 调试命令
"§bTabo§foLib", CommandBuilder.create("taboolibtest", TabooLib.getPlugin())
"§bTaboo§fLib", .permission("*")
"§bTabooL§fib", .aliases("libtest")
"§bTabooLi§fb", .tab((sender, args) -> testUtil.stream().flatMap(module -> Arrays.stream(module.name())).filter(name -> name.toLowerCase().startsWith(args[0])).collect(Collectors.toList()))
"§bTabooLib", .execute((sender, args) -> {
"§bTabooLi§fb", if (sender instanceof Player) {
"§bTabooL§fib", if (args.length == 0) {
"§bTaboo§fLib", sender.sendMessage("§8[§fTabooLib§8] §7/libtest §8[...]");
"§bTabo§foLib", return;
"§bTab§fooLib", }
"§bTa§fbooLib", for (Module module : testUtil) {
"§bT§fabooLib", for (String name : module.name()) {
"§fTabooLib" if (name.equalsIgnoreCase(args[0])) {
), 1).deleteOn(30); module.run((Player) sender);
} return;
}
}
}
}
}).build();
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)

View File

@ -0,0 +1,21 @@
package io.izzel.taboolib.common.loader;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public @interface Startup {
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface Loading {
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface Starting {
}
}

View File

@ -0,0 +1,47 @@
package io.izzel.taboolib.common.loader;
import com.google.common.collect.Lists;
import io.izzel.taboolib.TabooLib;
import io.izzel.taboolib.module.inject.TInjectHelper;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.List;
/**
* @Author sky
* @Since 2020-03-24 23:54
*/
public class StartupLoader {
static List<Class<?>> classList = Lists.newArrayList();
public static void register(Class<?> clazz) {
classList.add(clazz);
}
public static void onLoading() {
run(Startup.Loading.class);
}
public static void onStarting() {
run(Startup.Starting.class);
}
static void run(Class<? extends Annotation> annotation) {
for (Class pluginClass : classList) {
for (Method declaredMethod : pluginClass.getDeclaredMethods()) {
if (declaredMethod.isAnnotationPresent(annotation)) {
declaredMethod.setAccessible(true);
for (Object instance : TInjectHelper.getInstance(declaredMethod, pluginClass, TabooLib.getPlugin())) {
try {
declaredMethod.invoke(instance);
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}
}
}
}

View File

@ -3,7 +3,7 @@ package io.izzel.taboolib.util.book;
import io.izzel.taboolib.module.nms.NMS; import io.izzel.taboolib.module.nms.NMS;
import io.izzel.taboolib.util.book.builder.BookBuilder; import io.izzel.taboolib.util.book.builder.BookBuilder;
import io.izzel.taboolib.util.book.builder.PageBuilder; import io.izzel.taboolib.util.book.builder.PageBuilder;
import org.bukkit.Material; import io.izzel.taboolib.util.lite.Materials;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -27,11 +27,11 @@ public class BookFormatter {
} }
public static BookBuilder writtenBook() { public static BookBuilder writtenBook() {
return new BookBuilder(new ItemStack(Material.WRITTEN_BOOK)); return new BookBuilder(Materials.WRITTEN_BOOK.parseItem(), "null", "null");
} }
public static BookBuilder writtenBook(String title, String author) { public static BookBuilder writtenBook(String title, String author) {
return new BookBuilder(new ItemStack(Material.WRITTEN_BOOK), title, author); return new BookBuilder(Materials.WRITTEN_BOOK.parseItem(), title, author);
} }
public static ItemStack writeToBook(List<String> lines) { public static ItemStack writeToBook(List<String> lines) {

View File

@ -2,8 +2,10 @@ package io.izzel.taboolib.util.book.builder;
import io.izzel.taboolib.module.tellraw.TellrawJson; import io.izzel.taboolib.module.tellraw.TellrawJson;
import io.izzel.taboolib.util.book.BookAsm; import io.izzel.taboolib.util.book.BookAsm;
import io.izzel.taboolib.util.book.BookFormatter;
import io.izzel.taboolib.util.chat.BaseComponent; import io.izzel.taboolib.util.chat.BaseComponent;
import io.izzel.taboolib.util.chat.ComponentSerializer; import io.izzel.taboolib.util.chat.ComponentSerializer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta; import org.bukkit.inventory.meta.BookMeta;
@ -133,6 +135,14 @@ public class BookBuilder {
return book; return book;
} }
public BookBuilder open(Player... players) {
ItemStack build = build();
for (Player player : players) {
BookFormatter.forceOpen(player, build);
}
return this;
}
public BookMeta getMeta() { public BookMeta getMeta() {
return meta; return meta;
} }

View File

@ -3,6 +3,7 @@ package io.izzel.taboolib.util.item;
import io.izzel.taboolib.Version; import io.izzel.taboolib.Version;
import io.izzel.taboolib.module.locale.TLocale; import io.izzel.taboolib.module.locale.TLocale;
import io.izzel.taboolib.util.ArrayUtil; import io.izzel.taboolib.util.ArrayUtil;
import io.izzel.taboolib.util.lite.Materials;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
@ -46,12 +47,12 @@ public class ItemBuilder {
} }
public ItemBuilder(OfflinePlayer player) { public ItemBuilder(OfflinePlayer player) {
this(Material.SKULL_ITEM, 1, 3); this(Materials.PLAYER_HEAD.parseMaterial(), 1, 3);
this.skullOwner(player.getName()); this.skullOwner(player.getName());
} }
public ItemBuilder material(int id) { public ItemBuilder material(int id) {
itemStack.setType(Material.getMaterial(id)); itemStack.setType(Items.asMaterial(String.valueOf(id)));
return this; return this;
} }