Adds a command for changing book generation, and updates README #5
This commit is contained in:
@@ -17,6 +17,7 @@ import net.knarcraft.bookswithoutborders.command.CommandSave;
|
||||
import net.knarcraft.bookswithoutborders.command.CommandSavePublic;
|
||||
import net.knarcraft.bookswithoutborders.command.CommandSetAuthor;
|
||||
import net.knarcraft.bookswithoutborders.command.CommandSetBookPrice;
|
||||
import net.knarcraft.bookswithoutborders.command.CommandSetGeneration;
|
||||
import net.knarcraft.bookswithoutborders.command.CommandSetLore;
|
||||
import net.knarcraft.bookswithoutborders.command.CommandSetTitle;
|
||||
import net.knarcraft.bookswithoutborders.command.CommandUnSign;
|
||||
@@ -167,6 +168,7 @@ public class BooksWithoutBorders extends JavaPlugin {
|
||||
registerCommand("booksWithoutBorders", new CommandBooksWithoutBorders());
|
||||
registerCommand("reload", new CommandReload());
|
||||
registerCommand("formatBook", new CommandFormat());
|
||||
registerCommand("setBookGeneration", new CommandSetGeneration());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -84,6 +84,7 @@ public class CommandBooksWithoutBorders implements TabExecutor {
|
||||
showCommandInfo("saveBook", sender);
|
||||
showCommandInfo("savePublicBook", sender);
|
||||
showCommandInfo("setAuthor", sender);
|
||||
showCommandInfo("setBookGeneration", sender);
|
||||
showCommandInfo("setBookPrice", sender);
|
||||
showCommandInfo("setLore", sender);
|
||||
showCommandInfo("setTitle", sender);
|
||||
|
@@ -110,7 +110,8 @@ public class CommandCopy implements TabExecutor {
|
||||
*/
|
||||
private boolean copyNextGenerationBook(BookMeta bookMeta, Player player, int copies) {
|
||||
//Copy the vanilla behavior of refusing copying any further
|
||||
if (bookMeta.getGeneration() == BookMeta.Generation.COPY_OF_COPY) {
|
||||
if (bookMeta.getGeneration() == BookMeta.Generation.COPY_OF_COPY ||
|
||||
bookMeta.getGeneration() == BookMeta.Generation.TATTERED) {
|
||||
BooksWithoutBorders.sendErrorMessage(player, "You cannot copy this book any further. " +
|
||||
"You must have the original or a direct copy.");
|
||||
return false;
|
||||
|
@@ -0,0 +1,74 @@
|
||||
package net.knarcraft.bookswithoutborders.command;
|
||||
|
||||
import net.knarcraft.bookswithoutborders.BooksWithoutBorders;
|
||||
import net.knarcraft.bookswithoutborders.utility.InventoryHelper;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BookMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Command executor for the set generation command
|
||||
*/
|
||||
public class CommandSetGeneration implements TabExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label,
|
||||
@NotNull String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
BooksWithoutBorders.sendErrorMessage(sender, "This command can only be used by a player!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (InventoryHelper.notHoldingOneWrittenBookCheck(player, "You must be holding a written book to" +
|
||||
" change its generation!", "You cannot change the generation of two books at once!")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (args.length < 1) {
|
||||
BooksWithoutBorders.sendErrorMessage(player, "You must specify the new generation for your book!");
|
||||
return false;
|
||||
}
|
||||
|
||||
BookMeta.Generation generation;
|
||||
try {
|
||||
generation = BookMeta.Generation.valueOf(args[0]);
|
||||
} catch (IllegalArgumentException exception) {
|
||||
BooksWithoutBorders.sendErrorMessage(player, "Invalid book generation specified!");
|
||||
return false;
|
||||
}
|
||||
|
||||
ItemStack heldBook = InventoryHelper.getHeldBook(player, true);
|
||||
BookMeta bookMeta = (BookMeta) heldBook.getItemMeta();
|
||||
if (bookMeta != null) {
|
||||
bookMeta.setGeneration(generation);
|
||||
heldBook.setItemMeta(bookMeta);
|
||||
return true;
|
||||
} else {
|
||||
BooksWithoutBorders.sendErrorMessage(player, "Unable to get book metadata!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label,
|
||||
@NotNull String[] args) {
|
||||
if (args.length == 1) {
|
||||
List<String> generations = new ArrayList<>();
|
||||
for (BookMeta.Generation generation : BookMeta.Generation.values()) {
|
||||
generations.add(generation.name());
|
||||
}
|
||||
return generations;
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
}
|
@@ -5,7 +5,7 @@ Options:
|
||||
Max_Number_of_Duplicates: 5
|
||||
# The separator used to separate the book title and the book author
|
||||
Title-Author_Separator: ","
|
||||
# The separator used to denote a new line in the book lore
|
||||
# The separator used to denote a new line in the book/item lore
|
||||
Lore_line_separator: "~"
|
||||
# A list of books given to new players the first time they join the server
|
||||
Books_for_new_players: [ ]
|
||||
|
@@ -53,6 +53,10 @@ commands:
|
||||
description: Encrypts the book the player is holding. "key" is required and can be any phrase or number excluding spaces. "style" is not required. Possible values are "DNA" or ""
|
||||
usage: /<command> <key> [encryption style]
|
||||
permission: bookswithoutborders.encrypt
|
||||
setbookgeneration:
|
||||
description: Sets the generation of the held book
|
||||
usage: /<command> <generation>
|
||||
permission: bookswithoutborders.setgeneration
|
||||
setbookprice:
|
||||
description: Sets the per-book-price to create a book via commands. If "Item", the item in the player's hand in the amount of [quantity] will be the price. If "Eco", a Vault based economy will be used for price. If neither <Item/Eco> or <quantity> are specified, the current price to create books will be removed.
|
||||
usage: /<command> <item/eco> <quantity>
|
||||
@@ -115,6 +119,7 @@ permissions:
|
||||
bookswithoutborders.bypassbookprice: true
|
||||
bookswithoutborders.setbookprice: true
|
||||
bookswithoutborders.reload: true
|
||||
bookswithoutborders.setgeneration: true
|
||||
bookswithoutborders.use:
|
||||
description: Allows player to use commands to save/load/delete in their personal directory
|
||||
children:
|
||||
@@ -129,6 +134,7 @@ permissions:
|
||||
bookswithoutborders.setauthor: true
|
||||
bookswithoutborders.setlore: true
|
||||
bookswithoutborders.format: true
|
||||
bookswithoutborders.setgeneration: true
|
||||
bookswithoutborders.format:
|
||||
description: Allows a player to format a book
|
||||
bookswithoutborders.save:
|
||||
@@ -172,4 +178,6 @@ permissions:
|
||||
bookswithoutborders.setbookprice:
|
||||
description: Allows player to set the cost of creating a book
|
||||
bookswithoutborders.reload:
|
||||
description: Allows player to reload this plugin
|
||||
description: Allows player to reload this plugin
|
||||
bookswithoutborders.setgeneration:
|
||||
description: Allows player to change the generation of a book (Original, Copy, Copy of Copy)
|
Reference in New Issue
Block a user