From 3394bdf549dc8d2df6db1757eca83da6984217ab Mon Sep 17 00:00:00 2001 From: _tud Date: Thu, 11 Aug 2022 07:03:56 +0300 Subject: [PATCH 1/9] Add changers to ExprBookPages --- .../skript/expressions/ExprBookPages.java | 127 ++++++++++++++---- 1 file changed, 99 insertions(+), 28 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index 53ebef188c6..e8b0992f4b7 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -21,6 +21,7 @@ import ch.njol.skript.Skript; import ch.njol.skript.aliases.Aliases; import ch.njol.skript.aliases.ItemType; +import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; @@ -30,36 +31,43 @@ import ch.njol.skript.lang.SkriptParser; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; +import ch.njol.util.coll.CollectionUtils; import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; +import org.bukkit.inventory.meta.ItemMeta; import org.eclipse.jdt.annotation.Nullable; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Name("Book Pages") @Description("The pages of a book.") -@Examples({"on book sign:", - "\tmessage \"Book Pages: %pages of event-item%\"", - "\tmessage \"Book Page 1: %page 1 of event-item%\""}) -@Since("2.2-dev31") +@Examples({ + "on book sign:", + "\tmessage \"Book Pages: %pages of event-item%\"", + "\tmessage \"Book Page 1: %page 1 of event-item%\"", + "set page 1 of player's held item to \"Book writing\"" +}) +@Since("2.2-dev31, INSERT VERSION (changers)") public class ExprBookPages extends SimpleExpression { - + + private static final ItemType bookItem = Aliases.javaItemType("book with text"); + static { Skript.registerExpression(ExprBookPages.class, String.class, ExpressionType.PROPERTY, - "[all] [the] [book] (pages|content) of %itemtypes%", - "%itemtypes%'s [book] (pages|content)", - "[book] page %number% of %itemtypes%", - "%itemtypes%'s [book] page %number%"); + "[all] [the] [book] (pages|content) of %itemtypes%", + "%itemtypes%'[s] [book] (pages|content)", + "[book] page %number% of %itemtypes%", + "%itemtypes%'[s] [book] page %number%"); } - - private static final ItemType bookItem = Aliases.javaItemType("book with text"); - + @SuppressWarnings("null") private Expression book; @Nullable private Expression page; - + @SuppressWarnings("null") @Nullable @Override @@ -68,46 +76,109 @@ protected String[] get(Event e) { if (itemStack == null || !bookItem.isOfType(itemStack)) return null; List pages = ((BookMeta) itemStack.getItemMeta()).getPages(); - if (page != null){ + if (page != null) { Number pageNumber = page.getSingle(e); - if (pageNumber == null){ + if (pageNumber == null) return null; - } int page = pageNumber.intValue(); - if ((page) > pages.size() || page < 1){ + if ((page) > pages.size() || page < 1) return null; - } return new String[]{pages.get(page - 1)}; - }else{ + } else { return pages.toArray(new String[pages.size()]); } } - + + @Nullable + @Override + public Class[] acceptChange(ChangeMode mode) { + switch (mode) { + case SET: + case RESET: + case DELETE: + return CollectionUtils.array(page == null ? String[].class : String.class); + case ADD: + return page == null ? CollectionUtils.array(String[].class) : null; + default: + return null; + } + } + + @Override + public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { + List itemTypes = new ArrayList<>(Arrays.asList(book.getArray(e))); + Number pageNumber = page == null ? -1 : page.getSingle(e); + if (pageNumber == null) return; + int page = pageNumber.intValue(); + String[] newPages = delta == null ? null : new String[delta.length]; + if (newPages != null) + for (int i = 0; i < delta.length; i++) + newPages[i] = delta[i] + ""; + for (ItemType itemType : itemTypes) { + if (itemType == null) return; + ItemMeta meta = itemType.getItemMeta(); + if (!(meta instanceof BookMeta)) return; + BookMeta bookMeta = (BookMeta) meta; + List currentPages = new ArrayList<>(bookMeta.getPages()); + int pageCount = bookMeta.getPageCount(); + switch (mode) { + case DELETE: + case RESET: + if (this.page == null) { + currentPages = Arrays.asList(""); + } else { + if (page <= 0 || page > pageCount) + return; + currentPages.remove(page - 1); + } + break; + case SET: + if (newPages.length == 0) return; + if (this.page == null) { + currentPages = Arrays.asList(newPages); + } else { + if (page <= 0) + return; + while (currentPages.size() < page) { + currentPages.add(""); + } + currentPages.set(page - 1, newPages[0]); + } + break; + case ADD: + currentPages.addAll(Arrays.asList(newPages)); + break; + } + bookMeta.setPages(currentPages); + itemType.setItemMeta(bookMeta); + } + } + @Override public boolean isSingle() { return page != null; } - + @Override public Class getReturnType() { return String.class; } - + @Override public String toString(@Nullable Event e, boolean debug) { return "book pages of " + book.toString(e, debug); } - + @SuppressWarnings({"unchecked", "null"}) @Override public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { - if (matchedPattern == 0 || matchedPattern == 1){ + if (matchedPattern == 0 || matchedPattern == 1) { book = (Expression) exprs[0]; - }else{ - if (matchedPattern == 2){ - page =(Expression) exprs[0]; + } else { + if (matchedPattern == 2) { + page = (Expression) exprs[0]; book = (Expression) exprs[1]; - }else{ + } else { book = (Expression) exprs[0]; page = (Expression) exprs[1]; } From eccad0a0fe08934f221f7319e361beb1cddb4b9f Mon Sep 17 00:00:00 2001 From: UnderscoreTud Date: Thu, 11 Aug 2022 07:36:32 +0300 Subject: [PATCH 2/9] Convert ExprBookPages into a PropertyExpression --- .../skript/expressions/ExprBookPages.java | 58 +++++++++---------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index e8b0992f4b7..45b9846e693 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -26,6 +26,7 @@ import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; +import ch.njol.skript.expressions.base.PropertyExpression; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser; @@ -51,42 +52,42 @@ "set page 1 of player's held item to \"Book writing\"" }) @Since("2.2-dev31, INSERT VERSION (changers)") -public class ExprBookPages extends SimpleExpression { - - private static final ItemType bookItem = Aliases.javaItemType("book with text"); +public class ExprBookPages extends PropertyExpression { static { Skript.registerExpression(ExprBookPages.class, String.class, ExpressionType.PROPERTY, - "[all] [the] [book] (pages|content) of %itemtypes%", + "[(all [[of] the]|the)] [book] (pages|content) of %itemtypes%", "%itemtypes%'[s] [book] (pages|content)", "[book] page %number% of %itemtypes%", "%itemtypes%'[s] [book] page %number%"); } - @SuppressWarnings("null") - private Expression book; @Nullable private Expression page; @SuppressWarnings("null") @Nullable @Override - protected String[] get(Event e) { - ItemStack itemStack = book.getSingle(e).getRandom(); - if (itemStack == null || !bookItem.isOfType(itemStack)) - return null; - List pages = ((BookMeta) itemStack.getItemMeta()).getPages(); - if (page != null) { - Number pageNumber = page.getSingle(e); - if (pageNumber == null) - return null; - int page = pageNumber.intValue(); - if ((page) > pages.size() || page < 1) - return null; - return new String[]{pages.get(page - 1)}; - } else { - return pages.toArray(new String[pages.size()]); + protected String[] get(Event e, ItemType[] source) { + List pages = new ArrayList<>(); + for (ItemType itemType : source) { + ItemMeta meta = itemType.getItemMeta(); + if (!(meta instanceof BookMeta)) + continue; + BookMeta bookMeta = (BookMeta) meta; + if (page == null) { + pages.addAll(bookMeta.getPages()); + } else { + Number pageNumber = page.getSingle(e); + if (pageNumber == null) + continue; + int page = pageNumber.intValue(); + if (page <= 0 || page > bookMeta.getPageCount()) + continue; + pages.add(bookMeta.getPage(page)); + } } + return pages.toArray(new String[0]); } @Nullable @@ -106,7 +107,7 @@ public Class[] acceptChange(ChangeMode mode) { @Override public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - List itemTypes = new ArrayList<>(Arrays.asList(book.getArray(e))); + List itemTypes = new ArrayList<>(Arrays.asList(getExpr().getArray(e))); Number pageNumber = page == null ? -1 : page.getSingle(e); if (pageNumber == null) return; int page = pageNumber.intValue(); @@ -154,11 +155,6 @@ public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { } } - @Override - public boolean isSingle() { - return page != null; - } - @Override public Class getReturnType() { return String.class; @@ -166,20 +162,20 @@ public Class getReturnType() { @Override public String toString(@Nullable Event e, boolean debug) { - return "book pages of " + book.toString(e, debug); + return "book pages of " + getExpr().toString(e, debug); } @SuppressWarnings({"unchecked", "null"}) @Override public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { if (matchedPattern == 0 || matchedPattern == 1) { - book = (Expression) exprs[0]; + setExpr((Expression) exprs[0]); } else { if (matchedPattern == 2) { page = (Expression) exprs[0]; - book = (Expression) exprs[1]; + setExpr((Expression) exprs[1]); } else { - book = (Expression) exprs[0]; + setExpr((Expression) exprs[0]); page = (Expression) exprs[1]; } } From 20ec65b8039f56b1bd3d80fbecb73a722a90cbfb Mon Sep 17 00:00:00 2001 From: _tud Date: Thu, 11 Aug 2022 21:40:03 +0300 Subject: [PATCH 3/9] Format stuff --- .../skript/expressions/ExprBookPages.java | 47 ++++++++++--------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index 45b9846e693..1f3984e6c46 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -68,7 +68,7 @@ public class ExprBookPages extends PropertyExpression { @SuppressWarnings("null") @Nullable @Override - protected String[] get(Event e, ItemType[] source) { + protected String[] get(Event event, ItemType[] source) { List pages = new ArrayList<>(); for (ItemType itemType : source) { ItemMeta meta = itemType.getItemMeta(); @@ -78,7 +78,7 @@ protected String[] get(Event e, ItemType[] source) { if (page == null) { pages.addAll(bookMeta.getPages()); } else { - Number pageNumber = page.getSingle(e); + Number pageNumber = page.getSingle(event); if (pageNumber == null) continue; int page = pageNumber.intValue(); @@ -106,51 +106,52 @@ public Class[] acceptChange(ChangeMode mode) { } @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - List itemTypes = new ArrayList<>(Arrays.asList(getExpr().getArray(e))); - Number pageNumber = page == null ? -1 : page.getSingle(e); - if (pageNumber == null) return; - int page = pageNumber.intValue(); + public void change(Event event, @Nullable Object[] delta, ChangeMode mode) { + ItemType[] itemTypes = getExpr().getArray(event); + int page = this.page == null ? -1 : this.page.getOptionalSingle(event).orElse(-1).intValue(); String[] newPages = delta == null ? null : new String[delta.length]; if (newPages != null) for (int i = 0; i < delta.length; i++) newPages[i] = delta[i] + ""; for (ItemType itemType : itemTypes) { - if (itemType == null) return; + if (itemType == null) + continue; ItemMeta meta = itemType.getItemMeta(); - if (!(meta instanceof BookMeta)) return; + if (!(meta instanceof BookMeta)) + continue; BookMeta bookMeta = (BookMeta) meta; - List currentPages = new ArrayList<>(bookMeta.getPages()); + List pages = new ArrayList<>(bookMeta.getPages()); int pageCount = bookMeta.getPageCount(); switch (mode) { case DELETE: case RESET: if (this.page == null) { - currentPages = Arrays.asList(""); + pages = Arrays.asList(""); } else { if (page <= 0 || page > pageCount) - return; - currentPages.remove(page - 1); + continue; + pages.remove(page - 1); } break; case SET: - if (newPages.length == 0) return; + if (newPages.length == 0) + continue; if (this.page == null) { - currentPages = Arrays.asList(newPages); + pages = Arrays.asList(newPages); } else { if (page <= 0) - return; - while (currentPages.size() < page) { - currentPages.add(""); + continue; + while (pages.size() < page) { + pages.add(""); } - currentPages.set(page - 1, newPages[0]); + pages.set(page - 1, newPages[0]); } break; case ADD: - currentPages.addAll(Arrays.asList(newPages)); + pages.addAll(Arrays.asList(newPages)); break; } - bookMeta.setPages(currentPages); + bookMeta.setPages(pages); itemType.setItemMeta(bookMeta); } } @@ -161,8 +162,8 @@ public Class getReturnType() { } @Override - public String toString(@Nullable Event e, boolean debug) { - return "book pages of " + getExpr().toString(e, debug); + public String toString(@Nullable Event event, boolean debug) { + return "book pages of " + getExpr().toString(event, debug); } @SuppressWarnings({"unchecked", "null"}) From afec1c24cf46f015bc86d05840baa0cbc083f130 Mon Sep 17 00:00:00 2001 From: _tud Date: Sun, 28 Aug 2022 12:49:53 +0300 Subject: [PATCH 4/9] format --- .../skript/expressions/ExprBookPages.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index 1f3984e6c46..89363dbf7ea 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -65,9 +65,26 @@ public class ExprBookPages extends PropertyExpression { @Nullable private Expression page; - @SuppressWarnings("null") - @Nullable @Override + @SuppressWarnings("unchecked") + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { + if (matchedPattern == 0 || matchedPattern == 1) { + setExpr((Expression) exprs[0]); + } else { + if (matchedPattern == 2) { + page = (Expression) exprs[0]; + setExpr((Expression) exprs[1]); + } else { + setExpr((Expression) exprs[0]); + page = (Expression) exprs[1]; + } + } + return true; + } + + @Override + @Nullable + @SuppressWarnings("null") protected String[] get(Event event, ItemType[] source) { List pages = new ArrayList<>(); for (ItemType itemType : source) { @@ -90,8 +107,8 @@ protected String[] get(Event event, ItemType[] source) { return pages.toArray(new String[0]); } - @Nullable @Override + @Nullable public Class[] acceptChange(ChangeMode mode) { switch (mode) { case SET: @@ -165,21 +182,4 @@ public Class getReturnType() { public String toString(@Nullable Event event, boolean debug) { return "book pages of " + getExpr().toString(event, debug); } - - @SuppressWarnings({"unchecked", "null"}) - @Override - public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { - if (matchedPattern == 0 || matchedPattern == 1) { - setExpr((Expression) exprs[0]); - } else { - if (matchedPattern == 2) { - page = (Expression) exprs[0]; - setExpr((Expression) exprs[1]); - } else { - setExpr((Expression) exprs[0]); - page = (Expression) exprs[1]; - } - } - return true; - } } From 7ccd4d7fe3af8426978ac94000407e55eea243d2 Mon Sep 17 00:00:00 2001 From: _tud Date: Thu, 20 Oct 2022 10:37:46 +0300 Subject: [PATCH 5/9] changes --- .../skript/expressions/ExprBookPages.java | 69 +++++++++++-------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index 89363dbf7ea..5605d466706 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -19,14 +19,12 @@ package ch.njol.skript.expressions; import ch.njol.skript.Skript; -import ch.njol.skript.aliases.Aliases; import ch.njol.skript.aliases.ItemType; import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Examples; import ch.njol.skript.doc.Name; import ch.njol.skript.doc.Since; -import ch.njol.skript.expressions.base.PropertyExpression; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; import ch.njol.skript.lang.SkriptParser; @@ -34,13 +32,13 @@ import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; import org.bukkit.event.Event; -import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; import org.bukkit.inventory.meta.ItemMeta; import org.eclipse.jdt.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; @Name("Book Pages") @@ -52,7 +50,7 @@ "set page 1 of player's held item to \"Book writing\"" }) @Since("2.2-dev31, INSERT VERSION (changers)") -public class ExprBookPages extends PropertyExpression { +public class ExprBookPages extends SimpleExpression { static { Skript.registerExpression(ExprBookPages.class, String.class, ExpressionType.PROPERTY, @@ -62,6 +60,7 @@ public class ExprBookPages extends PropertyExpression { "%itemtypes%'[s] [book] page %number%"); } + private Expression items; @Nullable private Expression page; @@ -69,13 +68,13 @@ public class ExprBookPages extends PropertyExpression { @SuppressWarnings("unchecked") public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { if (matchedPattern == 0 || matchedPattern == 1) { - setExpr((Expression) exprs[0]); + items = (Expression) exprs[0]; } else { if (matchedPattern == 2) { page = (Expression) exprs[0]; - setExpr((Expression) exprs[1]); + items = (Expression) exprs[1]; } else { - setExpr((Expression) exprs[0]); + items = (Expression) exprs[0]; page = (Expression) exprs[1]; } } @@ -85,14 +84,13 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Override @Nullable @SuppressWarnings("null") - protected String[] get(Event event, ItemType[] source) { + protected String[] get(Event event) { List pages = new ArrayList<>(); - for (ItemType itemType : source) { - ItemMeta meta = itemType.getItemMeta(); - if (!(meta instanceof BookMeta)) + for (ItemType itemType : items.getArray(event)) { + if (itemType == null || !(itemType.getItemMeta() instanceof BookMeta)) continue; - BookMeta bookMeta = (BookMeta) meta; - if (page == null) { + BookMeta bookMeta = (BookMeta) itemType.getItemMeta(); + if (isAllPages()) { pages.addAll(bookMeta.getPages()); } else { Number pageNumber = page.getSingle(event); @@ -113,37 +111,39 @@ public Class[] acceptChange(ChangeMode mode) { switch (mode) { case SET: case RESET: - case DELETE: - return CollectionUtils.array(page == null ? String[].class : String.class); + return CollectionUtils.array(isAllPages() ? String[].class : String.class); case ADD: - return page == null ? CollectionUtils.array(String[].class) : null; + return isAllPages() ? CollectionUtils.array(String[].class) : null; default: return null; } } @Override - public void change(Event event, @Nullable Object[] delta, ChangeMode mode) { - ItemType[] itemTypes = getExpr().getArray(event); - int page = this.page == null ? -1 : this.page.getOptionalSingle(event).orElse(-1).intValue(); + public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { + if ((mode == ChangeMode.SET || mode == ChangeMode.ADD) && delta == null) + return; + ItemType[] itemTypes = items.getArray(event); + int page = !isAllPages() ? this.page.getOptionalSingle(event).orElse(-1).intValue() : -1; String[] newPages = delta == null ? null : new String[delta.length]; + if (newPages != null) for (int i = 0; i < delta.length; i++) newPages[i] = delta[i] + ""; + for (ItemType itemType : itemTypes) { - if (itemType == null) - continue; - ItemMeta meta = itemType.getItemMeta(); - if (!(meta instanceof BookMeta)) + if (itemType == null || !(itemType.getItemMeta() instanceof BookMeta)) continue; - BookMeta bookMeta = (BookMeta) meta; + + BookMeta bookMeta = (BookMeta) itemType.getItemMeta(); List pages = new ArrayList<>(bookMeta.getPages()); int pageCount = bookMeta.getPageCount(); + switch (mode) { case DELETE: case RESET: - if (this.page == null) { - pages = Arrays.asList(""); + if (isAllPages()) { + pages = Collections.singletonList(""); } else { if (page <= 0 || page > pageCount) continue; @@ -153,14 +153,13 @@ public void change(Event event, @Nullable Object[] delta, ChangeMode mode) { case SET: if (newPages.length == 0) continue; - if (this.page == null) { + if (isAllPages()) { pages = Arrays.asList(newPages); } else { if (page <= 0) continue; - while (pages.size() < page) { + while (pages.size() < page) pages.add(""); - } pages.set(page - 1, newPages[0]); } break; @@ -168,11 +167,21 @@ public void change(Event event, @Nullable Object[] delta, ChangeMode mode) { pages.addAll(Arrays.asList(newPages)); break; } + bookMeta.setPages(pages); itemType.setItemMeta(bookMeta); } } + private boolean isAllPages() { + return page == null; + } + + @Override + public boolean isSingle() { + return items.isSingle() && !isAllPages(); + } + @Override public Class getReturnType() { return String.class; @@ -180,6 +189,6 @@ public Class getReturnType() { @Override public String toString(@Nullable Event event, boolean debug) { - return "book pages of " + getExpr().toString(event, debug); + return (page != null ? "page " + page.toString(event, debug) : "the book pages") + " of " + items.toString(event, debug); } } From 90271522cabe3063b961d1c6f1f67b95d94426bf Mon Sep 17 00:00:00 2001 From: _tud Date: Thu, 20 Oct 2022 10:38:32 +0300 Subject: [PATCH 6/9] import for ParseResult --- src/main/java/ch/njol/skript/expressions/ExprBookPages.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index 5605d466706..80682cd6ad2 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -27,13 +27,12 @@ import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.ExpressionType; -import ch.njol.skript.lang.SkriptParser; +import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; import ch.njol.util.coll.CollectionUtils; import org.bukkit.event.Event; import org.bukkit.inventory.meta.BookMeta; -import org.bukkit.inventory.meta.ItemMeta; import org.eclipse.jdt.annotation.Nullable; import java.util.ArrayList; @@ -66,7 +65,7 @@ public class ExprBookPages extends SimpleExpression { @Override @SuppressWarnings("unchecked") - public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { if (matchedPattern == 0 || matchedPattern == 1) { items = (Expression) exprs[0]; } else { From 352776f67bcf79566836a14cbdd351cd9ba6708e Mon Sep 17 00:00:00 2001 From: _tud Date: Thu, 17 Nov 2022 02:27:20 +0300 Subject: [PATCH 7/9] optimizations --- .../skript/expressions/ExprBookPages.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index 80682cd6ad2..362f9dc3c45 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -108,8 +108,10 @@ protected String[] get(Event event) { @Nullable public Class[] acceptChange(ChangeMode mode) { switch (mode) { - case SET: case RESET: + case DELETE: + return CollectionUtils.array(); + case SET: return CollectionUtils.array(isAllPages() ? String[].class : String.class); case ADD: return isAllPages() ? CollectionUtils.array(String[].class) : null; @@ -119,6 +121,7 @@ public Class[] acceptChange(ChangeMode mode) { } @Override + @SuppressWarnings("ConstantConditions") public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { if ((mode == ChangeMode.SET || mode == ChangeMode.ADD) && delta == null) return; @@ -135,15 +138,28 @@ public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { continue; BookMeta bookMeta = (BookMeta) itemType.getItemMeta(); - List pages = new ArrayList<>(bookMeta.getPages()); + List pages = null; + if (isAllPages()) { + switch (mode) { + case DELETE: + case RESET: + pages = Collections.singletonList(""); + break; + case SET: + pages = Arrays.asList(newPages); + break; + default: + assert false; + } + } else { + pages = new ArrayList<>(bookMeta.getPages()); + } int pageCount = bookMeta.getPageCount(); switch (mode) { case DELETE: case RESET: - if (isAllPages()) { - pages = Collections.singletonList(""); - } else { + if (!isAllPages()) { if (page <= 0 || page > pageCount) continue; pages.remove(page - 1); @@ -152,9 +168,7 @@ public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { case SET: if (newPages.length == 0) continue; - if (isAllPages()) { - pages = Arrays.asList(newPages); - } else { + if (!isAllPages()) { if (page <= 0) continue; while (pages.size() < page) From 32aba408561f704378bab4b873926fe8c501f1b3 Mon Sep 17 00:00:00 2001 From: _tud Date: Thu, 24 Nov 2022 07:05:39 +0300 Subject: [PATCH 8/9] Requested Changes --- .../skript/expressions/ExprBookPages.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index 362f9dc3c45..052d5cfdd4c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -53,7 +53,7 @@ public class ExprBookPages extends SimpleExpression { static { Skript.registerExpression(ExprBookPages.class, String.class, ExpressionType.PROPERTY, - "[(all [[of] the]|the)] [book] (pages|content) of %itemtypes%", + "[all [[of] the]|the] [book] (pages|content) of %itemtypes%", "%itemtypes%'[s] [book] (pages|content)", "[book] page %number% of %itemtypes%", "%itemtypes%'[s] [book] page %number%"); @@ -68,21 +68,18 @@ public class ExprBookPages extends SimpleExpression { public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { if (matchedPattern == 0 || matchedPattern == 1) { items = (Expression) exprs[0]; + } else if (matchedPattern == 2) { + page = (Expression) exprs[0]; + items = (Expression) exprs[1]; } else { - if (matchedPattern == 2) { - page = (Expression) exprs[0]; - items = (Expression) exprs[1]; - } else { - items = (Expression) exprs[0]; - page = (Expression) exprs[1]; - } + items = (Expression) exprs[0]; + page = (Expression) exprs[1]; } - return true; + return true; } @Override @Nullable - @SuppressWarnings("null") protected String[] get(Event event) { List pages = new ArrayList<>(); for (ItemType itemType : items.getArray(event)) { @@ -129,12 +126,13 @@ public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { int page = !isAllPages() ? this.page.getOptionalSingle(event).orElse(-1).intValue() : -1; String[] newPages = delta == null ? null : new String[delta.length]; - if (newPages != null) + if (newPages != null) { for (int i = 0; i < delta.length; i++) newPages[i] = delta[i] + ""; + } for (ItemType itemType : itemTypes) { - if (itemType == null || !(itemType.getItemMeta() instanceof BookMeta)) + if (!(itemType.getItemMeta() instanceof BookMeta)) continue; BookMeta bookMeta = (BookMeta) itemType.getItemMeta(); From 591ac2bf7d3139026a4583f859c744176237b3ef Mon Sep 17 00:00:00 2001 From: _tud Date: Tue, 27 Dec 2022 00:09:04 +0300 Subject: [PATCH 9/9] requested changes --- .../java/ch/njol/skript/expressions/ExprBookPages.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java index 052d5cfdd4c..ec5df08f3f6 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprBookPages.java +++ b/src/main/java/ch/njol/skript/expressions/ExprBookPages.java @@ -56,7 +56,8 @@ public class ExprBookPages extends SimpleExpression { "[all [[of] the]|the] [book] (pages|content) of %itemtypes%", "%itemtypes%'[s] [book] (pages|content)", "[book] page %number% of %itemtypes%", - "%itemtypes%'[s] [book] page %number%"); + "%itemtypes%'[s] [book] page %number%" + ); } private Expression items; @@ -75,7 +76,7 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye items = (Expression) exprs[0]; page = (Expression) exprs[1]; } - return true; + return true; } @Override @@ -83,7 +84,7 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye protected String[] get(Event event) { List pages = new ArrayList<>(); for (ItemType itemType : items.getArray(event)) { - if (itemType == null || !(itemType.getItemMeta() instanceof BookMeta)) + if (!(itemType.getItemMeta() instanceof BookMeta)) continue; BookMeta bookMeta = (BookMeta) itemType.getItemMeta(); if (isAllPages()) { @@ -120,7 +121,7 @@ public Class[] acceptChange(ChangeMode mode) { @Override @SuppressWarnings("ConstantConditions") public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { - if ((mode == ChangeMode.SET || mode == ChangeMode.ADD) && delta == null) + if (delta == null && (mode == ChangeMode.SET || mode == ChangeMode.ADD)) return; ItemType[] itemTypes = items.getArray(event); int page = !isAllPages() ? this.page.getOptionalSingle(event).orElse(-1).intValue() : -1; @@ -202,4 +203,5 @@ public Class getReturnType() { public String toString(@Nullable Event event, boolean debug) { return (page != null ? "page " + page.toString(event, debug) : "the book pages") + " of " + items.toString(event, debug); } + }