Update BookModifier

This commit is contained in:
Alexander
2021-07-29 00:44:34 +01:00
parent a2117efc02
commit 2ebfecfac8

View File

@@ -15,9 +15,8 @@ import org.bukkit.ChatColor;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.inventory.meta.BookMeta.Generation;
import vg.civcraft.mc.civmodcore.nbt.NBTSerializable;
import vg.civcraft.mc.civmodcore.nbt.NBTType;
import vg.civcraft.mc.civmodcore.nbt.wrappers.NBTCompound;
import vg.civcraft.mc.civmodcore.utilities.MoreClassUtils;
@CommandAlias(SetCommand.ALIAS)
@Modifier(slug = "BOOK", order = 1000)
@@ -38,24 +37,23 @@ public final class BookModifier extends ModifierData {
private int bookHash;
@Override
public BookModifier construct(ItemStack item) {
BookMeta meta = MoreClassUtils.castOrNull(BookMeta.class, item.getItemMeta());
if (meta == null) {
public BookModifier construct(final ItemStack item) {
if (!(item.getItemMeta() instanceof BookMeta bookMeta)) {
return null;
}
BookModifier modifier = new BookModifier();
if (meta.hasTitle()) {
modifier.setTitle(meta.getTitle());
final var modifier = new BookModifier();
if (bookMeta.hasTitle()) {
modifier.setTitle(bookMeta.getTitle());
}
if (meta.hasAuthor()) {
modifier.setAuthor(meta.getAuthor());
if (bookMeta.hasAuthor()) {
modifier.setAuthor(bookMeta.getAuthor());
}
if (meta.hasGeneration()) {
modifier.setGeneration(Objects.requireNonNull(meta.getGeneration()));
if (bookMeta.hasGeneration()) {
modifier.setGeneration(Objects.requireNonNull(bookMeta.getGeneration()));
}
if (meta.hasPages()) {
if (bookMeta.hasPages()) {
modifier.setHasPages(true);
modifier.setBookHash(bookHash(meta.getPages()));
modifier.setBookHash(bookHash(bookMeta.getPages()));
}
return modifier;
}
@@ -67,49 +65,62 @@ public final class BookModifier extends ModifierData {
@Override
public boolean conforms(ItemStack item) {
BookMeta meta = MoreClassUtils.castOrNull(BookMeta.class, item.getItemMeta());
if (meta == null) {
if (!(item.getItemMeta() instanceof BookMeta bookMeta)) {
return false;
}
if (meta.hasTitle() != hasTitle()) {
if (bookMeta.hasTitle() != hasTitle()) {
return false;
}
if (meta.hasAuthor() != hasAuthor()) {
if (bookMeta.hasAuthor() != hasAuthor()) {
return false;
}
if (hasGeneration()) {
if (meta.getGeneration() != getGeneration()) {
if (bookMeta.getGeneration() != getGeneration()) {
return false;
}
}
if (meta.hasPages() != hasPages()) {
if (bookMeta.hasPages() != hasPages()) {
return false;
}
if (meta.hasPages()) {
if (bookHash(meta.getPages()) != getBookHash()) {
return false;
}
if (bookMeta.hasPages()) {
return bookHash(bookMeta.getPages()) == getBookHash();
}
return true;
}
@Override
public void toNBT(@Nonnull final NBTCompound nbt) {
nbt.setString(TITLE_KEY, this.title);
nbt.setString(AUTHOR_KEY, this.author);
nbt.setString(GENERATION_KEY, this.generation.name());
if (hasTitle()) {
nbt.setString(TITLE_KEY, this.title);
}
if (hasAuthor()) {
nbt.setString(AUTHOR_KEY, this.author);
}
if (hasGeneration()) {
nbt.setString(GENERATION_KEY, this.generation.name());
}
nbt.setBoolean(HAS_PAGES_KEY, this.hasPages);
nbt.setInt(BOOK_HASH_KEY, this.bookHash);
if (hasPages()) {
nbt.setInt(BOOK_HASH_KEY, this.bookHash);
}
}
@Nonnull
public static BookModifier fromNBT(@Nonnull final NBTCompound nbt) {
final var modifier = new BookModifier();
modifier.title = nbt.getString(TITLE_KEY);
modifier.author = nbt.getString(AUTHOR_KEY);
modifier.generation = EnumUtils.getEnum(Generation.class, nbt.getString(GENERATION_KEY));
modifier.hasPages = nbt.getBoolean(HAS_PAGES_KEY);
modifier.bookHash = nbt.getInt(BOOK_HASH_KEY);
if (nbt.hasKeyOfType(TITLE_KEY, NBTType.STRING)) {
modifier.setTitle(nbt.getString(TITLE_KEY));
}
if (nbt.hasKeyOfType(AUTHOR_KEY, NBTType.STRING)) {
modifier.setTitle(nbt.getString(AUTHOR_KEY));
}
if (nbt.hasKeyOfType(GENERATION_KEY, NBTType.STRING)) {
modifier.setGeneration(EnumUtils.getEnum(Generation.class, nbt.getString(GENERATION_KEY)));
}
modifier.setHasPages(nbt.getBoolean(HAS_PAGES_KEY));
if (modifier.hasPages()) {
modifier.setBookHash(nbt.getInt(BOOK_HASH_KEY));
}
return modifier;
}
@@ -123,7 +134,7 @@ public final class BookModifier extends ModifierData {
@Override
public List<String> getDisplayInfo() {
List<String> lines = new ArrayList<>();
final var lines = new ArrayList<String>(2);
lines.add(ChatColor.DARK_AQUA + "Author: " + ChatColor.GRAY + (hasAuthor() ? getAuthor() : ""));
if (hasGeneration()) {
lines.add(ChatColor.DARK_AQUA + "Generation: " + ChatColor.GRAY + getGeneration().name());
@@ -154,7 +165,7 @@ public final class BookModifier extends ModifierData {
return this.title;
}
public void setTitle(String title) {
public void setTitle(final String title) {
this.title = title;
}
@@ -166,7 +177,7 @@ public final class BookModifier extends ModifierData {
return this.author;
}
public void setAuthor(String author) {
public void setAuthor(final String author) {
this.author = author;
}
@@ -178,7 +189,7 @@ public final class BookModifier extends ModifierData {
return this.generation;
}
public void setGeneration(Generation generation) {
public void setGeneration(final Generation generation) {
this.generation = generation;
}
@@ -186,7 +197,7 @@ public final class BookModifier extends ModifierData {
return this.hasPages;
}
public void setHasPages(boolean hasPages) {
public void setHasPages(final boolean hasPages) {
this.hasPages = hasPages;
}
@@ -194,11 +205,11 @@ public final class BookModifier extends ModifierData {
return this.bookHash;
}
public void setBookHash(int bookHash) {
public void setBookHash(final int bookHash) {
this.bookHash = bookHash;
}
private static int bookHash(List<String> pages) {
private static int bookHash(final List<String> pages) {
if (CollectionUtils.isEmpty(pages)) {
return 0;
}