Skip to content

Commit acf43a8

Browse files
committed
Update to Latest Version of Placeholder API, Added books display
1 parent 18e1fcd commit acf43a8

7 files changed

Lines changed: 90 additions & 27 deletions

File tree

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>InteractiveChat</groupId>
66
<artifactId>InteractiveChat</artifactId>
7-
<version>3.0.0</version>
7+
<version>3.0.1</version>
88
<build>
99
<sourceDirectory>src</sourceDirectory>
1010
<resources>
@@ -87,7 +87,7 @@
8787
<dependency>
8888
<groupId>me.clip</groupId>
8989
<artifactId>placeholderapi</artifactId>
90-
<version>2.10.6</version>
90+
<version>2.10.9</version>
9191
<scope>provided</scope>
9292
</dependency>
9393
<dependency>

src/com/loohp/interactivechat/InteractiveChat.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ public class InteractiveChat extends JavaPlugin {
133133

134134
public static ConcurrentHashMap<Long, HashSet<String>> cooldownbypass = new ConcurrentHashMap<Long, HashSet<String>>();
135135

136-
public static ConcurrentHashMap<Long, Inventory> itemDisplay = new ConcurrentHashMap<Long, Inventory>();
137-
public static ConcurrentHashMap<Long, Inventory> inventoryDisplay = new ConcurrentHashMap<Long, Inventory>();
138-
public static ConcurrentHashMap<Long, Inventory> enderDisplay = new ConcurrentHashMap<Long, Inventory>();
136+
public static BiMap<Long, Inventory> itemDisplay = Maps.synchronizedBiMap(HashBiMap.create());
137+
public static BiMap<Long, Inventory> inventoryDisplay = Maps.synchronizedBiMap(HashBiMap.create());
138+
public static BiMap<Long, Inventory> enderDisplay = Maps.synchronizedBiMap(HashBiMap.create());
139139

140140
public static ConcurrentHashMap<Player, ConcurrentHashMap<String, Long>> placeholderCooldowns = new ConcurrentHashMap<Player, ConcurrentHashMap<String, Long>>();
141141
public static ConcurrentHashMap<Player, Long> universalCooldowns = new ConcurrentHashMap<Player, Long>();

src/com/loohp/interactivechat/Listeners/Events.java

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.loohp.interactivechat.Listeners;
22

33
import java.io.IOException;
4+
import java.util.ArrayList;
45
import java.util.HashMap;
6+
import java.util.List;
57
import java.util.Map;
68
import java.util.Map.Entry;
79
import java.util.UUID;
810

911
import org.bukkit.Bukkit;
12+
import org.bukkit.Material;
1013
import org.bukkit.entity.Player;
1114
import org.bukkit.event.EventHandler;
1215
import org.bukkit.event.EventPriority;
@@ -17,6 +20,8 @@
1720
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
1821
import org.bukkit.event.player.PlayerJoinEvent;
1922
import org.bukkit.event.player.PlayerQuitEvent;
23+
import org.bukkit.inventory.ItemStack;
24+
import org.bukkit.inventory.meta.BookMeta;
2025

2126
import com.loohp.interactivechat.InteractiveChat;
2227
import com.loohp.interactivechat.ObjectHolders.CommandPlaceholderInfo;
@@ -29,6 +34,7 @@
2934
import com.loohp.interactivechat.Utils.MessageUtils;
3035

3136
import me.clip.placeholderapi.PlaceholderAPI;
37+
import net.md_5.bungee.api.chat.BaseComponent;
3238

3339
public class Events implements Listener {
3440

@@ -253,7 +259,7 @@ private void translateAltColorCode(PlayerCommandPreprocessEvent event) {
253259
}
254260

255261
@EventHandler(priority=EventPriority.LOWEST)
256-
public void onInventoryClickLowest(InventoryClickEvent event) {
262+
public void onInventoryClick(InventoryClickEvent event) {
257263
if (event.getClickedInventory() == null) {
258264
return;
259265
}
@@ -263,22 +269,40 @@ public void onInventoryClickLowest(InventoryClickEvent event) {
263269
if (event.getView().getTopInventory() == null) {
264270
return;
265271
}
266-
if (InteractiveChat.inventoryDisplay.containsValue(event.getView().getTopInventory())) {
272+
boolean block = false;
273+
if (!block && InteractiveChat.inventoryDisplay.inverse().containsKey(event.getView().getTopInventory())) {
267274
event.setCancelled(true);
268-
return;
275+
block = true;
269276
}
270-
if (InteractiveChat.enderDisplay.containsValue(event.getView().getTopInventory())) {
277+
if (!block && InteractiveChat.enderDisplay.inverse().containsKey(event.getView().getTopInventory())) {
271278
event.setCancelled(true);
272-
return;
279+
block = true;
273280
}
274-
if (InteractiveChat.itemDisplay.containsValue(event.getView().getTopInventory())) {
281+
if (!block && InteractiveChat.itemDisplay.inverse().containsKey(event.getView().getTopInventory())) {
275282
event.setCancelled(true);
276-
return;
283+
block = true;
284+
}
285+
if (block && event.getRawSlot() < event.getView().getTopInventory().getSize()) {
286+
if (event.getCurrentItem() != null) {
287+
if (event.getCurrentItem().getType().equals(Material.WRITTEN_BOOK)) {
288+
((Player) event.getWhoClicked()).openBook(event.getCurrentItem().clone());
289+
} else if (event.getCurrentItem().getType().equals(Material.WRITABLE_BOOK)) {
290+
ItemStack book = new ItemStack(Material.WRITTEN_BOOK);
291+
BookMeta ori = (BookMeta) event.getCurrentItem().getItemMeta();
292+
BookMeta dis = (BookMeta) book.getItemMeta();
293+
List<BaseComponent[]> pages = new ArrayList<>(ori.spigot().getPages());
294+
dis.spigot().setPages(pages);
295+
dis.setTitle("Temp Book");
296+
dis.setAuthor("InteractiveChat");
297+
book.setItemMeta(dis);
298+
((Player) event.getWhoClicked()).openBook(book);
299+
}
300+
}
277301
}
278302
}
279-
303+
/*
280304
@EventHandler(priority=EventPriority.HIGHEST)
281-
public void onInventoryClick(InventoryClickEvent event) {
305+
public void onInventoryClickHighest(InventoryClickEvent event) {
282306
if (event.getClickedInventory() == null) {
283307
return;
284308
}
@@ -288,18 +312,18 @@ public void onInventoryClick(InventoryClickEvent event) {
288312
if (event.getView().getTopInventory() == null) {
289313
return;
290314
}
291-
if (InteractiveChat.inventoryDisplay.containsValue(event.getView().getTopInventory())) {
315+
if (InteractiveChat.inventoryDisplay.inverse().containsKey(event.getView().getTopInventory())) {
292316
event.setCancelled(true);
293317
return;
294318
}
295-
if (InteractiveChat.enderDisplay.containsValue(event.getView().getTopInventory())) {
319+
if (InteractiveChat.enderDisplay.inverse().containsKey(event.getView().getTopInventory())) {
296320
event.setCancelled(true);
297321
return;
298322
}
299-
if (InteractiveChat.itemDisplay.containsValue(event.getView().getTopInventory())) {
323+
if (InteractiveChat.itemDisplay.inverse().containsKey(event.getView().getTopInventory())) {
300324
event.setCancelled(true);
301325
return;
302326
}
303327
}
304-
328+
*/
305329
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.loohp.interactivechat.ObjectHolders;
2+
3+
public class ValuePairs<F, S> {
4+
5+
private F first;
6+
private S second;
7+
8+
public ValuePairs(F first, S second) {
9+
this.first = first;
10+
this.second = second;
11+
}
12+
13+
public F getFirst() {
14+
return first;
15+
}
16+
17+
public S getSecond() {
18+
return second;
19+
}
20+
21+
}

src/com/loohp/interactivechat/PluginMessaging/BungeeMessageListener.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,12 @@ public void onPluginMessageReceived(String channel, Player pluginMessagingPlayer
137137
if (player2 == null) {
138138
break;
139139
}
140-
String placeholder = DataTypeIO.readString(input, StandardCharsets.UTF_8);
141-
String text = DataTypeIO.readString(input, StandardCharsets.UTF_8);
142-
player2.getRemotePlaceholdersMapping().put(placeholder, text);
140+
int size1 = input.readInt();
141+
for (int i = 0; i < size1; i++) {
142+
String placeholder = DataTypeIO.readString(input, StandardCharsets.UTF_8);
143+
String text = DataTypeIO.readString(input, StandardCharsets.UTF_8);
144+
player2.getRemotePlaceholdersMapping().put(placeholder, text);
145+
}
143146
break;
144147
case 0x06:
145148
String message = DataTypeIO.readString(input, StandardCharsets.UTF_8);

src/com/loohp/interactivechat/PluginMessaging/BungeeMessageSender.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.IOException;
44
import java.nio.charset.StandardCharsets;
5+
import java.util.List;
56
import java.util.Random;
67
import java.util.UUID;
78

@@ -13,6 +14,7 @@
1314
import com.google.common.io.ByteArrayDataOutput;
1415
import com.google.common.io.ByteStreams;
1516
import com.loohp.interactivechat.InteractiveChat;
17+
import com.loohp.interactivechat.ObjectHolders.ValuePairs;
1618
import com.loohp.interactivechat.Utils.CompressionUtils;
1719
import com.loohp.interactivechat.Utils.CustomArrayUtils;
1820
import com.loohp.interactivechat.Utils.DataTypeIO;
@@ -82,11 +84,14 @@ public static boolean forwardEnderchest(UUID player, String title, Inventory end
8284
return forwardData(0x04, out.toByteArray());
8385
}
8486

85-
public static boolean forwardPlaceholders(UUID player, String placeholder, String text) throws IOException {
87+
public static boolean forwardPlaceholders(UUID player, List<ValuePairs<String, String>> pairs) throws IOException {
8688
ByteArrayDataOutput out = ByteStreams.newDataOutput();
8789
DataTypeIO.writeUUID(out, player);
88-
DataTypeIO.writeString(out, placeholder, StandardCharsets.UTF_8);
89-
DataTypeIO.writeString(out, text, StandardCharsets.UTF_8);
90+
out.writeInt(pairs.size());
91+
for (ValuePairs<String, String> pair : pairs) {
92+
DataTypeIO.writeString(out, pair.getFirst(), StandardCharsets.UTF_8);
93+
DataTypeIO.writeString(out, pair.getSecond(), StandardCharsets.UTF_8);
94+
}
9095
return forwardData(0x05, out.toByteArray());
9196
}
9297

src/com/loohp/interactivechat/Utils/PlaceholderParser.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,37 @@
11
package com.loohp.interactivechat.Utils;
22

33
import java.io.IOException;
4+
import java.util.ArrayList;
5+
import java.util.Collection;
46
import java.util.HashMap;
7+
import java.util.List;
58
import java.util.Map;
69
import java.util.Map.Entry;
710
import java.util.Set;
811
import java.util.stream.Collectors;
912

1013
import org.bukkit.entity.Player;
1114

15+
import com.loohp.interactivechat.InteractiveChat;
1216
import com.loohp.interactivechat.ObjectHolders.PlayerWrapper;
17+
import com.loohp.interactivechat.ObjectHolders.ValuePairs;
1318
import com.loohp.interactivechat.PluginMessaging.BungeeMessageSender;
1419

1520
import me.clip.placeholderapi.PlaceholderAPI;
21+
import me.clip.placeholderapi.PlaceholderAPIPlugin;
1622
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
1723

1824
public class PlaceholderParser {
1925

2026
public static String parse(PlayerWrapper player, String str) {
2127
if (player.isLocal()) {
22-
for (Entry<String, String> entry : getAllPlaceholdersContained(player.getLocalPlayer(), str).entrySet()) {
28+
if (InteractiveChat.bungeecordMode) {
29+
List<ValuePairs<String, String>> pairs = new ArrayList<>();
30+
for (Entry<String, String> entry : getAllPlaceholdersContained(player.getLocalPlayer(), str).entrySet()) {
31+
pairs.add(new ValuePairs<>(entry.getKey(), entry.getValue()));
32+
}
2333
try {
24-
BungeeMessageSender.forwardPlaceholders(player.getUniqueId(), entry.getKey(), entry.getValue());
34+
BungeeMessageSender.forwardPlaceholders(player.getUniqueId(), pairs);
2535
} catch (IOException e) {
2636
e.printStackTrace();
2737
}
@@ -36,7 +46,7 @@ public static String parse(PlayerWrapper player, String str) {
3646
}
3747

3848
public static Map<String, String> getAllPlaceholdersContained(Player player, String str) {
39-
Set<PlaceholderExpansion> expansions = PlaceholderAPI.getExpansions();
49+
Collection<PlaceholderExpansion> expansions = PlaceholderAPIPlugin.getInstance().getLocalExpansionManager().getExpansions();
4050
Set<String> identifier = expansions.parallelStream().map(each -> each.getIdentifier()).collect(Collectors.toSet());
4151
Map<String, String> matchingPlaceholders = new HashMap<>();
4252
for (String word : str.split(" ")) {

0 commit comments

Comments
 (0)