Skip to content

Commit 4a665f4

Browse files
committed
Use paper adventure lib for
1 parent a218ffa commit 4a665f4

File tree

6 files changed

+138
-76
lines changed

6 files changed

+138
-76
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,5 +955,11 @@
955955
<version>4.0.0</version>
956956
<scope>compile</scope>
957957
</dependency>
958+
<dependency>
959+
<groupId>org.maxgamer.quickshop.externalhelper</groupId>
960+
<artifactId>PaperAdventureLib</artifactId>
961+
<version>1.0-SNAPSHOT</version>
962+
<scope>compile</scope>
963+
</dependency>
958964
</dependencies>
959965
</project>

src/main/java/org/maxgamer/quickshop/shop/ContainerShop.java

Lines changed: 86 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import com.lishid.openinv.OpenInv;
2323
import io.papermc.lib.PaperLib;
2424
import lombok.EqualsAndHashCode;
25+
import net.kyori.adventure.text.Component;
26+
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
2527
import org.bukkit.*;
2628
import org.bukkit.block.Block;
2729
import org.bukkit.block.BlockFace;
@@ -42,6 +44,8 @@
4244
import org.jetbrains.annotations.Nullable;
4345
import org.maxgamer.quickshop.QuickShop;
4446
import org.maxgamer.quickshop.event.*;
47+
import org.maxgamer.quickshop.externalhelper.paperadventurelib.PaperAdventureLib;
48+
import org.maxgamer.quickshop.externalhelper.paperadventurelib.SignAdventure;
4549
import org.maxgamer.quickshop.util.PriceLimiter;
4650
import org.maxgamer.quickshop.util.Util;
4751

@@ -605,15 +609,78 @@ public boolean inventoryAvailable() {
605609
return true;
606610
}
607611

608-
@Override
609-
public String[] getSignText() {
612+
// @Override
613+
// public Component[] getSignText() {
614+
// Util.ensureThread(false);
615+
// Component[] lines = new Component[4];
616+
//
617+
// //Line 1
618+
// OfflinePlayer player = plugin.getServer().getOfflinePlayer(this.getOwner());
619+
// String statusStringKey = inventoryAvailable() ? "signs.status-available" : "signs.status-unavailable";
620+
// lines[0] = Component.text(plugin.text().of("signs.header", this.ownerName(false), plugin.text().of(statusStringKey).forLocale()).forLocale());
621+
//
622+
// //Line 2
623+
// String tradingStringKey;
624+
// String noRemainingStringKey;
625+
// int shopRemaining;
626+
//
627+
// switch (shopType) {
628+
// case BUYING:
629+
// shopRemaining = getRemainingSpace();
630+
// tradingStringKey = isStackingShop() ? "signs.stack-buying" : "signs.buying";
631+
// noRemainingStringKey = "signs.out-of-space";
632+
// break;
633+
// case SELLING:
634+
// shopRemaining = getRemainingStock();
635+
// tradingStringKey = isStackingShop() ? "signs.stack-selling" : "signs.selling";
636+
// noRemainingStringKey = "signs.out-of-stock";
637+
// break;
638+
// default:
639+
// shopRemaining = 0;
640+
// tradingStringKey = "MissingKey for shop type:" + shopType;
641+
// noRemainingStringKey = "MissingKey for shop type:" + shopType;
642+
// }
643+
// switch (shopRemaining) {
644+
// //Unlimited
645+
// case -1:
646+
// lines[1] = Component.text(plugin.text().of(tradingStringKey, plugin.text().of("signs.unlimited").forLocale()).forLocale());
647+
// break;
648+
// //No remaining
649+
// case 0:
650+
// lines[1] =Component.text(plugin.text().of(noRemainingStringKey).forLocale());
651+
// break;
652+
// //Has remaining
653+
// default:
654+
// lines[1] = Component.text(plugin.text().of(tradingStringKey, Integer.toString(shopRemaining)).forLocale());
655+
// }
656+
//
657+
// //line 3
658+
// lines[2] = Component.text(plugin.text().of("signs.item", Util.getItemStackName(this.getItem())).forLocale());
659+
//
660+
// //line 4
661+
// if (this.isStackingShop()) {
662+
// lines[3] = Component.text(plugin.text().of("signs.stack-price",
663+
// Util.format(this.getPrice(), this), Integer.toString(item.getAmount()),
664+
// Util.getItemStackName(item)).forLocale());
665+
// } else {
666+
// lines[3] = Component.text( plugin.text().of("signs.price", Util.format(this.getPrice(), this)).forLocale());
667+
// }
668+
//
669+
// //New pattern for recognizing shop sign
670+
// lines[1] = Component.text(shopSignPrefix + lines[1] + " ");
671+
//
672+
// return lines;
673+
// }
674+
675+
@Override
676+
public Component[] getSignText() {
610677
Util.ensureThread(false);
611-
String[] lines = new String[4];
678+
Component[] lines = new Component[4];
612679

613680
//Line 1
614681
OfflinePlayer player = plugin.getServer().getOfflinePlayer(this.getOwner());
615682
String statusStringKey = inventoryAvailable() ? "signs.status-available" : "signs.status-unavailable";
616-
lines[0] = plugin.text().of("signs.header", this.ownerName(false), plugin.text().of(statusStringKey).forLocale()).forLocale();
683+
lines[0] = Component.text(plugin.text().of("signs.header", this.ownerName(false), plugin.text().of(statusStringKey).forLocale()).forLocale());
617684

618685
//Line 2
619686
String tradingStringKey;
@@ -639,50 +706,55 @@ public String[] getSignText() {
639706
switch (shopRemaining) {
640707
//Unlimited
641708
case -1:
642-
lines[1] = plugin.text().of(tradingStringKey, plugin.text().of("signs.unlimited").forLocale()).forLocale();
709+
lines[1] = Component.text(plugin.text().of(tradingStringKey, plugin.text().of("signs.unlimited").forLocale()).forLocale());
643710
break;
644711
//No remaining
645712
case 0:
646-
lines[1] =plugin.text().of(noRemainingStringKey).forLocale();
713+
lines[1] =Component.text(plugin.text().of(noRemainingStringKey).forLocale());
647714
break;
648715
//Has remaining
649716
default:
650-
lines[1] = plugin.text().of(tradingStringKey, Integer.toString(shopRemaining)).forLocale();
717+
lines[1] = Component.text(plugin.text().of(tradingStringKey, Integer.toString(shopRemaining)).forLocale());
651718
}
652719

653720
//line 3
654-
lines[2] = plugin.text().of("signs.item", Util.getItemStackName(this.getItem())).forLocale();
721+
lines[2] = Component.text(plugin.text().of("signs.item", Util.getItemStackName(this.getItem())).forLocale());
655722

656723
//line 4
657724
if (this.isStackingShop()) {
658-
lines[3] = plugin.text().of("signs.stack-price",
725+
lines[3] = Component.text(plugin.text().of("signs.stack-price",
659726
Util.format(this.getPrice(), this), Integer.toString(item.getAmount()),
660-
Util.getItemStackName(item)).forLocale();
727+
Util.getItemStackName(item)).forLocale());
661728
} else {
662-
lines[3] = plugin.text().of("signs.price", Util.format(this.getPrice(), this)).forLocale();
729+
lines[3] = Component.text( plugin.text().of("signs.price", Util.format(this.getPrice(), this)).forLocale());
663730
}
664731

665732
//New pattern for recognizing shop sign
666-
lines[1] = shopSignPrefix + lines[1] + " ";
733+
lines[1] = Component.text(shopSignPrefix + lines[1] + " ");
667734

668735
return lines;
669736
}
670737

738+
671739
/**
672740
* Changes all lines of text on a sign near the shop
673741
*
674742
* @param lines The array of lines to change. Index is line number.
675743
*/
676744
@Override
677-
public void setSignText(@NotNull String[] lines) {
745+
public void setSignText(@NotNull Component[] lines) {
678746
Util.ensureThread(false);
679747
List<Sign> signs = this.getSigns();
680748
for (Sign sign : signs) {
681749
if (Arrays.equals(sign.getLines(), lines)) {
682750
continue;
683751
}
684752
for (int i = 0; i < lines.length; i++) {
685-
sign.setLine(i, lines[i]);
753+
if(PaperAdventureLib.isSupported()){
754+
SignAdventure.set(sign,i,lines[i]);
755+
}else{
756+
sign.setLine(i, LegacyComponentSerializer.legacySection().serialize(lines[i]));
757+
}
686758
}
687759
if (plugin.getGameVersion().isSignTextDyeSupport()) {
688760
DyeColor dyeColor = Util.getDyeColor();

src/main/java/org/maxgamer/quickshop/shop/Shop.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.maxgamer.quickshop.shop;
2121

22+
import net.kyori.adventure.text.Component;
2223
import org.bukkit.Location;
2324
import org.bukkit.block.Block;
2425
import org.bukkit.block.Sign;
@@ -164,6 +165,7 @@ public interface Shop {
164165
*/
165166
void sell(@NotNull UUID seller, @NotNull Inventory sellerInventory, @NotNull Location loc2Drop, int paramInt);
166167

168+
167169
/**
168170
* Generate new sign texts on shop's sign.
169171
*/
@@ -180,17 +182,17 @@ public interface Shop {
180182
* Line 3: Price
181183
*/
182184
@NotNull
183-
default String[] getSignText() {
185+
default Component[] getSignText() {
184186
//backward support
185187
throw new UnsupportedOperationException();
186188
}
187189

188190
/**
189191
* Set texts on shop's sign
190192
*
191-
* @param paramArrayOfString The texts you want set
193+
* @param contents The texts you want set
192194
*/
193-
void setSignText(@NotNull String[] paramArrayOfString);
195+
void setSignText(@NotNull Component[] contents);
194196

195197
/**
196198
* Update shop data to database

src/main/java/org/maxgamer/quickshop/shop/ShopManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import com.google.common.collect.Sets;
2727
import io.papermc.lib.PaperLib;
2828
import lombok.Getter;
29+
import net.kyori.adventure.text.Component;
30+
import net.kyori.adventure.translation.Translatable;
2931
import org.apache.commons.lang.StringUtils;
3032
import org.bukkit.*;
3133
import org.bukkit.block.*;
@@ -1102,6 +1104,8 @@ public void actionSell(
11021104
Util.getItemStackName(shop.getItem())).forLocale();
11031105
}
11041106

1107+
plugin.adventure().sender(Component.translatable(T))
1108+
11051109
MsgUtil.TransactionMessage transactionMessage = new MsgUtil.TransactionMessage(msg, Util.serialize(shop.getItem()), null);
11061110

11071111
MsgUtil.send(shop, shop.getOwner(), transactionMessage);

src/main/java/org/maxgamer/quickshop/util/MsgUtil.java

Lines changed: 10 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@
2626
import lombok.Builder;
2727
import lombok.Data;
2828
import lombok.Getter;
29-
import net.kyori.adventure.key.Key;
30-
import net.kyori.adventure.nbt.api.BinaryTagHolder;
3129
import net.kyori.adventure.text.Component;
32-
import net.kyori.adventure.text.event.HoverEvent;
3330
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
3431
import org.apache.commons.lang.StringUtils;
3532
import org.bukkit.Bukkit;
@@ -60,7 +57,6 @@
6057
import java.io.File;
6158
import java.io.IOException;
6259
import java.io.InputStreamReader;
63-
import java.lang.reflect.InvocationTargetException;
6460
import java.sql.ResultSet;
6561
import java.sql.SQLException;
6662
import java.text.DecimalFormat;
@@ -119,26 +115,12 @@ public static boolean flush(@NotNull OfflinePlayer p) {
119115
if (data == null) {
120116
MsgUtil.sendDirectMessage(p.getPlayer(), msg.getMessage());
121117
} else {
122-
plugin.adventure().sender(player).sendMessage(
123-
Component.text(msg.getMessage())
124-
.hoverEvent(HoverEvent.showItem(
125-
HoverEvent.ShowItem.of(
126-
Key.key(data.getType().getKey().getNamespace(),data.getType().getKey().getKey()),
127-
data.getAmount(),
128-
BinaryTagHolder.of(ReflectFactory.convertBukkitItemStackToJson(data))))));
129-
130-
//plugin.getQuickChat().sendItemHologramChat(player, msg.getMessage(), data);
118+
plugin.adventure().sender(player).sendMessage(
119+
Component.text(msg.getMessage())
120+
.hoverEvent(Util.generateItemHoverEvent(data)));
131121
}
132122
} catch (InvalidConfigurationException e) {
133123
MsgUtil.sendDirectMessage(p.getPlayer(), msg.getMessage());
134-
} catch (InvocationTargetException e) {
135-
e.printStackTrace();
136-
} catch (IllegalAccessException e) {
137-
e.printStackTrace();
138-
} catch (NoSuchMethodException e) {
139-
e.printStackTrace();
140-
} catch (InstantiationException e) {
141-
e.printStackTrace();
142124
}
143125
}
144126
}
@@ -517,11 +499,7 @@ public static void send(@NotNull UUID player, @NotNull TransactionMessage transa
517499
ItemStack data = Util.deserialize(transactionMessage.getHoverItem());
518500
plugin.adventure().sender(p.getPlayer()).sendMessage(
519501
Component.text(transactionMessage.getMessage())
520-
.hoverEvent(HoverEvent.showItem(
521-
HoverEvent.ShowItem.of(
522-
Key.key(data.getType().getKey().getNamespace(),data.getType().getKey().getKey()),
523-
data.getAmount(),
524-
BinaryTagHolder.of(ReflectFactory.convertBukkitItemStackToJson(data))))));
502+
.hoverEvent(Util.generateItemHoverEvent(data)));
525503
// plugin.getQuickChat().sendItemHologramChat(p.getPlayer(), transactionMessage.getMessage(), Objects.requireNonNull(Util.deserialize(transactionMessage.getHoverItem())));
526504
} catch (Exception any) {
527505
Util.debugLog("Unknown error, send by plain text.");
@@ -557,24 +535,11 @@ public static void send(@NotNull Shop shop, @NotNull UUID player, @NotNull Trans
557535
if (p.getPlayer() != null) {
558536
if (transactionMessage.getHoverItem() != null) {
559537
try {
560-
try {
561538
ItemStack data = Util.deserialize(transactionMessage.getHoverItem());
562539
plugin.adventure().sender(p.getPlayer()).sendMessage(
563540
Component.text(transactionMessage.getMessage())
564-
.hoverEvent(HoverEvent.showItem(
565-
HoverEvent.ShowItem.of(
566-
Key.key(data.getType().getKey().getNamespace(),data.getType().getKey().getKey()),
567-
data.getAmount(),
568-
BinaryTagHolder.of(ReflectFactory.convertBukkitItemStackToJson(data))))));
569-
} catch (InvocationTargetException e) {
570-
e.printStackTrace();
571-
} catch (IllegalAccessException e) {
572-
e.printStackTrace();
573-
} catch (NoSuchMethodException e) {
574-
e.printStackTrace();
575-
} catch (InstantiationException e) {
576-
e.printStackTrace();
577-
}
541+
.hoverEvent(Util.generateItemHoverEvent(data)));
542+
578543
// plugin.getQuickChat().sendItemHologramChat(p.getPlayer(), transactionMessage.getMessage(), Objects.requireNonNull(Util.deserialize(transactionMessage.getHoverItem())));
579544
} catch (Exception any) {
580545
Util.debugLog("Unknown error, send by plain text.");
@@ -943,24 +908,10 @@ public static void sendShopInfo(@NotNull Player p, @NotNull Shop shop) {
943908
chatSheetPrinter.printLine(plugin.text().of(p,"menu.shop-information").forLocale());
944909
chatSheetPrinter.printLine(plugin.text().of(p,"menu.owner", shop.ownerName()).forLocale());
945910
// Enabled
946-
947-
try {
948-
plugin.adventure().sender(p).sendMessage(
949-
Component.text(ChatColor.DARK_PURPLE + plugin.text().of(p,"tableformat.left_begin").forLocale() + plugin.text().of(p,"menu.item", Util.getItemStackName(items)) + " ")
950-
.hoverEvent(HoverEvent.showItem(
951-
HoverEvent.ShowItem.of(
952-
Key.key(items.getType().getKey().getNamespace(),items.getType().getKey().getKey()),
953-
items.getAmount(),
954-
BinaryTagHolder.of(ReflectFactory.convertBukkitItemStackToJson(items))))));
955-
} catch (InvocationTargetException e) {
956-
e.printStackTrace();
957-
} catch (IllegalAccessException e) {
958-
e.printStackTrace();
959-
} catch (NoSuchMethodException e) {
960-
e.printStackTrace();
961-
} catch (InstantiationException e) {
962-
e.printStackTrace();
963-
}
911+
String msg = ChatColor.DARK_PURPLE + plugin.text().of(p,"tableformat.left_begin").forLocale() + plugin.text().of(p,"menu.item", Util.getItemStackName(items)) + " ";
912+
plugin.adventure().sender(p).sendMessage(
913+
Component.text(msg)
914+
.hoverEvent(Util.generateItemHoverEvent(items)));
964915
//plugin.getQuickChat().sendItemHologramChat(player, msg.getMessage(), data);
965916

966917
//plugin.getQuickChat().send(p, plugin.getQuickChat().getItemHologramChat(shop, items, p);

src/main/java/org/maxgamer/quickshop/util/Util.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@
2525
import lombok.Getter;
2626
import lombok.NonNull;
2727
import lombok.SneakyThrows;
28+
import net.kyori.adventure.key.Key;
29+
import net.kyori.adventure.nbt.api.BinaryTagHolder;
2830
import net.kyori.adventure.text.Component;
31+
import net.kyori.adventure.text.event.HoverEvent;
2932
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
3033
import org.apache.commons.lang.StringUtils;
3134
import org.bukkit.*;
@@ -52,6 +55,8 @@
5255
import org.jetbrains.annotations.Nullable;
5356
import org.maxgamer.quickshop.QuickShop;
5457
import org.maxgamer.quickshop.database.MySQLCore;
58+
import org.maxgamer.quickshop.externalhelper.paperadventurelib.ItemStackAdventure;
59+
import org.maxgamer.quickshop.externalhelper.paperadventurelib.PaperAdventureLib;
5560
import org.maxgamer.quickshop.shop.DisplayItem;
5661
import org.maxgamer.quickshop.shop.Shop;
5762
import org.yaml.snakeyaml.DumperOptions;
@@ -1392,4 +1397,26 @@ public static void mainThreadRun(@NotNull Runnable runnable) {
13921397
}
13931398
}
13941399

1400+
public static HoverEvent<?> generateItemHoverEvent(ItemStack stack){
1401+
if(PaperAdventureLib.isSupported())
1402+
return ItemStackAdventure.convertHoverItem(stack);
1403+
try {
1404+
return HoverEvent.showItem(
1405+
HoverEvent.ShowItem.of(
1406+
Key.key(stack.getType().getKey().getNamespace(), stack.getType().getKey().getKey()),
1407+
stack.getAmount(),
1408+
BinaryTagHolder.of(ReflectFactory.convertBukkitItemStackToJson(stack))));
1409+
} catch (InvocationTargetException e) {
1410+
e.printStackTrace();
1411+
} catch (IllegalAccessException e) {
1412+
e.printStackTrace();
1413+
} catch (NoSuchMethodException e) {
1414+
e.printStackTrace();
1415+
} catch (InstantiationException e) {
1416+
e.printStackTrace();
1417+
}finally {
1418+
return HoverEvent.showText(Component.text("Failed to generate item preview. Consider switch to Paper."));
1419+
}
1420+
}
1421+
13951422
}

0 commit comments

Comments
 (0)