-
-
Notifications
You must be signed in to change notification settings - Fork 103
/
BookScriptContainer.java
94 lines (88 loc) · 3.52 KB
/
BookScriptContainer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package com.denizenscript.denizen.scripts.containers.core;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizen.tags.BukkitTagContext;
import com.denizenscript.denizen.utilities.FormattedTextHelper;
import com.denizenscript.denizencore.objects.core.ScriptTag;
import com.denizenscript.denizencore.scripts.containers.ScriptContainer;
import com.denizenscript.denizencore.tags.TagContext;
import com.denizenscript.denizencore.tags.TagManager;
import com.denizenscript.denizencore.utilities.YamlConfiguration;
import org.bukkit.Material;
import org.bukkit.inventory.meta.BookMeta;
import java.util.List;
public class BookScriptContainer extends ScriptContainer {
// <--[language]
// @name Book Script Containers
// @group Script Container System
// @description
// Book script containers are similar to item script containers, except they are specifically
// for the book items. They work with with the ItemTag object, and can be fetched
// with the Object Fetcher by using the ItemTag constructor book_script_name
// Example: - give <player> my_book
//
// <code>
// Book_Script_Name:
//
// type: book
//
// # The 'custom name' can be anything you wish.
// # | All book scripts MUST have this key!
// title: custom name
//
// # The 'custom name' can be anything you wish.
// # | All book scripts MUST have this key!
// author: custom name
//
// # Defaults to true. Set to false to spawn a 'book and quill' instead of a 'written book'.
// # | Some book scripts might have this key!
// signed: true/false
//
// # Each -line in the text section represents an entire page.
// # To create a newline, use the tag <n>. To create a paragraph, use <p>.
// # | All book scripts MUST have this key!
// text:
// - page
// - ...
// </code>
//
// -->
public BookScriptContainer(YamlConfiguration configurationSection, String scriptContainerName) {
super(configurationSection, scriptContainerName);
canRunScripts = false;
}
public ItemTag getBookFrom(TagContext context) {
ItemTag stack = new ItemTag(Material.WRITTEN_BOOK);
return writeBookTo(stack, context);
}
public ItemTag writeBookTo(ItemTag book, TagContext context) {
if (context == null) {
context = new BukkitTagContext(null, null, new ScriptTag(this));
}
// Get current ItemMeta from the book
BookMeta bookInfo = (BookMeta) book.getItemMeta();
if (contains("title")) {
String title = getString("title");
title = TagManager.tag(title, context);
bookInfo.setTitle(title);
}
if (contains("signed")) {
if (getString("signed").equalsIgnoreCase("false")) {
book.getItemStack().setType(Material.WRITABLE_BOOK);
}
}
if (contains("author")) {
String author = getString("author");
author = TagManager.tag(author, context);
bookInfo.setAuthor(author);
}
if (contains("text")) {
List<String> pages = getStringList("text");
for (String page : pages) {
page = TagManager.tag(page, context);
bookInfo.spigot().addPage(FormattedTextHelper.parse(page));
}
}
book.getItemStack().setItemMeta(bookInfo);
return book;
}
}