Fix /npc shop edit multiline item descriptions
This commit is contained in:
parent
9bb88a6db1
commit
ba74dc8ad2
|
@ -44,8 +44,6 @@ public class HologramTrait extends Trait {
|
||||||
private BiFunction<String, Player, String> customHologramSupplier;
|
private BiFunction<String, Player, String> customHologramSupplier;
|
||||||
@Persist
|
@Persist
|
||||||
private HologramDirection direction = HologramDirection.BOTTOM_UP;
|
private HologramDirection direction = HologramDirection.BOTTOM_UP;
|
||||||
@Persist(reify = true)
|
|
||||||
private HologramFilter filter;
|
|
||||||
private double lastEntityHeight = 0;
|
private double lastEntityHeight = 0;
|
||||||
private boolean lastNameplateVisible;
|
private boolean lastNameplateVisible;
|
||||||
@Persist
|
@Persist
|
||||||
|
@ -323,6 +321,7 @@ public class HologramTrait extends Trait {
|
||||||
if (updatePosition && !useDisplayEntities) {
|
if (updatePosition && !useDisplayEntities) {
|
||||||
nameLine.hologram.teleport(currentLoc.clone().add(0, getEntityHeight(), 0), TeleportCause.PLUGIN);
|
nameLine.hologram.teleport(currentLoc.clone().add(0, getEntityHeight(), 0), TeleportCause.PLUGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateName) {
|
if (updateName) {
|
||||||
nameLine.setText(npc.getRawName());
|
nameLine.setText(npc.getRawName());
|
||||||
}
|
}
|
||||||
|
@ -453,17 +452,6 @@ public class HologramTrait extends Trait {
|
||||||
TOP_DOWN;
|
TOP_DOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class HologramFilter {
|
|
||||||
private HologramFilter() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Builder {
|
|
||||||
public HologramFilter build() {
|
|
||||||
return new HologramFilter();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class HologramLine implements Function<Player, String> {
|
private class HologramLine implements Function<Player, String> {
|
||||||
NPC hologram;
|
NPC hologram;
|
||||||
double mb, mt;
|
double mb, mt;
|
||||||
|
|
|
@ -135,13 +135,16 @@ public class ShopTrait extends Trait {
|
||||||
public void display(Player sender) {
|
public void display(Player sender) {
|
||||||
if (viewPermission != null && !sender.hasPermission(viewPermission))
|
if (viewPermission != null && !sender.hasPermission(viewPermission))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!Setting.SHOP_GLOBAL_VIEW_PERMISSION.asString().isEmpty()
|
if (!Setting.SHOP_GLOBAL_VIEW_PERMISSION.asString().isEmpty()
|
||||||
&& !sender.hasPermission(Setting.SHOP_GLOBAL_VIEW_PERMISSION.asString()))
|
&& !sender.hasPermission(Setting.SHOP_GLOBAL_VIEW_PERMISSION.asString()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (pages.size() == 0) {
|
if (pages.size() == 0) {
|
||||||
Messaging.sendError(sender, "Empty shop");
|
Messaging.sendError(sender, "Empty shop");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
InventoryMenu.createSelfRegistered(new NPCShopViewer(this, sender)).present(sender);
|
InventoryMenu.createSelfRegistered(new NPCShopViewer(this, sender)).present(sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,6 +297,8 @@ public class ShopTrait extends Trait {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class NPCShopItem implements Cloneable, Persistable {
|
public static class NPCShopItem implements Cloneable, Persistable {
|
||||||
|
@Persist
|
||||||
|
private String alreadyPurchasedMessage;
|
||||||
@Persist
|
@Persist
|
||||||
private String clickToConfirmMessage;
|
private String clickToConfirmMessage;
|
||||||
@Persist
|
@Persist
|
||||||
|
@ -304,16 +309,14 @@ public class ShopTrait extends Trait {
|
||||||
private ItemStack display;
|
private ItemStack display;
|
||||||
@Persist
|
@Persist
|
||||||
private boolean maxRepeatsOnShiftClick;
|
private boolean maxRepeatsOnShiftClick;
|
||||||
|
@Persist(keyType = UUID.class)
|
||||||
|
private final Map<UUID, Integer> purchases = Maps.newHashMap();
|
||||||
@Persist
|
@Persist
|
||||||
private final List<NPCShopAction> result = Lists.newArrayList();
|
private final List<NPCShopAction> result = Lists.newArrayList();
|
||||||
@Persist
|
@Persist
|
||||||
private String resultMessage;
|
private String resultMessage;
|
||||||
@Persist
|
@Persist
|
||||||
private int timesPurchasable = 0;
|
private int timesPurchasable = 0;
|
||||||
@Persist
|
|
||||||
private String alreadyPurchasedMessage;
|
|
||||||
@Persist(keyType = UUID.class)
|
|
||||||
private final Map<UUID, Integer> purchases = Maps.newHashMap();
|
|
||||||
|
|
||||||
public List<Transaction> apply(List<NPCShopAction> actions, Function<NPCShopAction, Transaction> func) {
|
public List<Transaction> apply(List<NPCShopAction> actions, Function<NPCShopAction, Transaction> func) {
|
||||||
List<Transaction> pending = Lists.newArrayList();
|
List<Transaction> pending = Lists.newArrayList();
|
||||||
|
@ -402,16 +405,15 @@ public class ShopTrait extends Trait {
|
||||||
|
|
||||||
public void onClick(NPCShop shop, InventoryClickEvent event, boolean secondClick) {
|
public void onClick(NPCShop shop, InventoryClickEvent event, boolean secondClick) {
|
||||||
Player player = (Player) event.getWhoClicked();
|
Player player = (Player) event.getWhoClicked();
|
||||||
if (purchases.containsKey(player.getUniqueId()) && timesPurchasable > 0 && purchases.get(player.getUniqueId()) == timesPurchasable) {
|
if (purchases.containsKey(player.getUniqueId()) && timesPurchasable > 0
|
||||||
|
&& purchases.get(player.getUniqueId()) == timesPurchasable) {
|
||||||
if (alreadyPurchasedMessage != null) {
|
if (alreadyPurchasedMessage != null) {
|
||||||
Messaging.sendColorless(event.getWhoClicked(),
|
Messaging.sendColorless(event.getWhoClicked(), placeholders(alreadyPurchasedMessage, player));
|
||||||
placeholders(alreadyPurchasedMessage, player));
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (clickToConfirmMessage != null && !secondClick) {
|
if (clickToConfirmMessage != null && !secondClick) {
|
||||||
Messaging.sendColorless(event.getWhoClicked(),
|
Messaging.sendColorless(event.getWhoClicked(), placeholders(clickToConfirmMessage, player));
|
||||||
placeholders(clickToConfirmMessage, player));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int max = Integer.MAX_VALUE;
|
int max = Integer.MAX_VALUE;
|
||||||
|
@ -429,8 +431,7 @@ public class ShopTrait extends Trait {
|
||||||
List<Transaction> take = apply(cost, action -> action.take(event.getWhoClicked(), repeats));
|
List<Transaction> take = apply(cost, action -> action.take(event.getWhoClicked(), repeats));
|
||||||
if (take == null) {
|
if (take == null) {
|
||||||
if (costMessage != null) {
|
if (costMessage != null) {
|
||||||
Messaging.sendColorless(event.getWhoClicked(),
|
Messaging.sendColorless(event.getWhoClicked(), placeholders(costMessage, player));
|
||||||
placeholders(costMessage, player));
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -439,11 +440,11 @@ public class ShopTrait extends Trait {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (resultMessage != null) {
|
if (resultMessage != null) {
|
||||||
Messaging.sendColorless(event.getWhoClicked(),
|
Messaging.sendColorless(event.getWhoClicked(), placeholders(resultMessage, player));
|
||||||
placeholders(resultMessage, player));
|
|
||||||
}
|
}
|
||||||
if (timesPurchasable > 0) {
|
if (timesPurchasable > 0) {
|
||||||
int timesPurchasedAlready = purchases.get(player.getUniqueId()) == null ? 0 : purchases.get(player.getUniqueId());
|
int timesPurchasedAlready = purchases.get(player.getUniqueId()) == null ? 0
|
||||||
|
: purchases.get(player.getUniqueId());
|
||||||
purchases.put(player.getUniqueId(), ++timesPurchasedAlready);
|
purchases.put(player.getUniqueId(), ++timesPurchasedAlready);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -496,17 +497,18 @@ public class ShopTrait extends Trait {
|
||||||
if (modified.display != null) {
|
if (modified.display != null) {
|
||||||
ctx.getSlot(9 * 4 + 4).setItemStack(modified.getDisplayItem(null));
|
ctx.getSlot(9 * 4 + 4).setItemStack(modified.getDisplayItem(null));
|
||||||
}
|
}
|
||||||
ctx.getSlot(9 * 3 + 2).setItemStack(new ItemStack(Material.EGG),
|
ctx.getSlot(9 * 3 + 2).setItemStack(new ItemStack(Material.EGG), "Only purchasable once per player",
|
||||||
"Only purchasable once per player",
|
"Times purchasable: " + modified.timesPurchasable
|
||||||
"Times purchasable: " + modified.timesPurchasable + (modified.timesPurchasable == 0 ? " (no limit)" : ""));
|
+ (modified.timesPurchasable == 0 ? " (no limit)" : ""));
|
||||||
ctx.getSlot(9 * 3 + 2).setClickHandler(
|
ctx.getSlot(9 * 3 + 2).setClickHandler(e -> ctx.getMenu()
|
||||||
e -> ctx.getMenu().transition(InputMenus.stringSetter(() -> String.valueOf(modified.timesPurchasable), s -> {
|
.transition(InputMenus.stringSetter(() -> String.valueOf(modified.timesPurchasable), s -> {
|
||||||
modified.timesPurchasable = Integer.parseInt(s);
|
modified.timesPurchasable = Integer.parseInt(s);
|
||||||
ctx.getSlot(9 * 4 + 2).setDescription("Times purchasable: " + modified.timesPurchasable + (modified.timesPurchasable == 0 ? " (no limit)" : ""));
|
ctx.getSlot(9 * 4 + 2).setDescription("Times purchasable: " + modified.timesPurchasable
|
||||||
|
+ (modified.timesPurchasable == 0 ? " (no limit)" : ""));
|
||||||
})));
|
})));
|
||||||
|
|
||||||
ctx.getSlot(9 * 4 + 2).setItemStack(new ItemStack(Util.getFallbackMaterial("OAK_SIGN", "SIGN")),
|
ctx.getSlot(9 * 4 + 2).setItemStack(new ItemStack(Util.getFallbackMaterial("OAK_SIGN", "SIGN")),
|
||||||
"Set message to send on already purchased, currently:\n",
|
"Set already purchased message, currently:\n",
|
||||||
modified.alreadyPurchasedMessage == null ? "Unset" : modified.alreadyPurchasedMessage);
|
modified.alreadyPurchasedMessage == null ? "Unset" : modified.alreadyPurchasedMessage);
|
||||||
ctx.getSlot(9 * 4 + 2).setClickHandler(
|
ctx.getSlot(9 * 4 + 2).setClickHandler(
|
||||||
e -> ctx.getMenu().transition(InputMenus.stringSetter(() -> modified.alreadyPurchasedMessage, s -> {
|
e -> ctx.getMenu().transition(InputMenus.stringSetter(() -> modified.alreadyPurchasedMessage, s -> {
|
||||||
|
@ -514,8 +516,8 @@ public class ShopTrait extends Trait {
|
||||||
ctx.getSlot(9 * 4 + 2).setDescription(modified.alreadyPurchasedMessage);
|
ctx.getSlot(9 * 4 + 2).setDescription(modified.alreadyPurchasedMessage);
|
||||||
})));
|
})));
|
||||||
|
|
||||||
ctx.getSlot(9 * 3 + 3).setItemStack(new ItemStack(Util.getFallbackMaterial("OAK_SIGN", "SIGN")),
|
ctx.getSlot(9 * 3 + 3).setItemStack(new ItemStack(Util.getFallbackMaterial("EMERALD", "OAK_SIGN", "SIGN")),
|
||||||
"Set message to send on successful click, currently:\n",
|
"Set successful click message, currently:\n",
|
||||||
modified.resultMessage == null ? "Unset" : modified.resultMessage);
|
modified.resultMessage == null ? "Unset" : modified.resultMessage);
|
||||||
ctx.getSlot(9 * 3 + 3).setClickHandler(
|
ctx.getSlot(9 * 3 + 3).setClickHandler(
|
||||||
e -> ctx.getMenu().transition(InputMenus.stringSetter(() -> modified.resultMessage, s -> {
|
e -> ctx.getMenu().transition(InputMenus.stringSetter(() -> modified.resultMessage, s -> {
|
||||||
|
@ -524,7 +526,7 @@ public class ShopTrait extends Trait {
|
||||||
})));
|
})));
|
||||||
|
|
||||||
ctx.getSlot(9 * 3 + 6).setItemStack(new ItemStack(Util.getFallbackMaterial("BARRIER", "FIRE")),
|
ctx.getSlot(9 * 3 + 6).setItemStack(new ItemStack(Util.getFallbackMaterial("BARRIER", "FIRE")),
|
||||||
"Set message to send on unsuccessful click, currently:\n",
|
"Set unsuccessful click message, currently:\n",
|
||||||
modified.costMessage == null ? "Unset" : modified.costMessage);
|
modified.costMessage == null ? "Unset" : modified.costMessage);
|
||||||
ctx.getSlot(9 * 3 + 6).setClickHandler(
|
ctx.getSlot(9 * 3 + 6).setClickHandler(
|
||||||
e -> ctx.getMenu().transition(InputMenus.stringSetter(() -> modified.costMessage, s -> {
|
e -> ctx.getMenu().transition(InputMenus.stringSetter(() -> modified.costMessage, s -> {
|
||||||
|
@ -590,8 +592,8 @@ public class ShopTrait extends Trait {
|
||||||
? Joiner.on("<br>").skipNulls().join(modified.display.getItemMeta().getLore())
|
? Joiner.on("<br>").skipNulls().join(modified.display.getItemMeta().getLore())
|
||||||
: "", description -> {
|
: "", description -> {
|
||||||
ItemMeta meta = modified.display.getItemMeta();
|
ItemMeta meta = modified.display.getItemMeta();
|
||||||
meta.setLore(Lists.newArrayList(
|
meta.setLore(Lists
|
||||||
Splitter.on("<br>").split(Messaging.parseComponents(description))));
|
.newArrayList(Splitter.on('\n').split(Messaging.parseComponents(description))));
|
||||||
modified.display.setItemMeta(meta);
|
modified.display.setItemMeta(meta);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue