|
3 | 3 | import com.selfcoders.matterbukkit.matterbridgeapi.API; |
4 | 4 | import com.selfcoders.matterbukkit.matterbridgeapi.Message; |
5 | 5 | import org.bukkit.ChatColor; |
| 6 | +import org.bukkit.advancement.AdvancementDisplay; |
6 | 7 | import org.bukkit.configuration.file.FileConfiguration; |
7 | | -import org.bukkit.configuration.file.YamlConfiguration; |
8 | 8 | import org.bukkit.entity.Player; |
9 | 9 | import org.bukkit.event.EventHandler; |
10 | 10 | import org.bukkit.event.Listener; |
11 | 11 | import org.bukkit.event.entity.PlayerDeathEvent; |
12 | 12 | import org.bukkit.event.player.*; |
13 | 13 |
|
14 | 14 | import java.io.IOException; |
15 | | -import java.io.InputStreamReader; |
16 | | -import java.util.Arrays; |
17 | 15 | import java.util.logging.Level; |
18 | | -import java.util.stream.Collectors; |
19 | 16 |
|
20 | 17 | class EventListener implements Listener { |
21 | 18 | private final MatterBukkit plugin; |
22 | 19 | private final API matterBridgeApi; |
23 | 20 | private final String avatarUrl; |
24 | | - private final YamlConfiguration advancements; |
25 | 21 |
|
26 | 22 | EventListener(MatterBukkit plugin, API matterBridgeApi, String avatarUrl) { |
27 | 23 | this.plugin = plugin; |
28 | 24 | this.matterBridgeApi = matterBridgeApi; |
29 | 25 | this.avatarUrl = avatarUrl; |
30 | | - |
31 | | - advancements = YamlConfiguration.loadConfiguration(new InputStreamReader(plugin.getResource("advancements.yml"))); |
32 | 26 | } |
33 | 27 |
|
34 | 28 | @EventHandler |
@@ -87,40 +81,20 @@ public void onPlayerAdvancementDone(PlayerAdvancementDoneEvent event) { |
87 | 81 | return; |
88 | 82 | } |
89 | 83 |
|
90 | | - if (event.getAdvancement() == null || event.getAdvancement().getKey().getKey().contains("recipe/") || event.getPlayer() == null) { |
91 | | - return; |
92 | | - } |
93 | | - |
94 | | - // Taken from DiscordSRV: https://github.com/DiscordSRV/DiscordSRV/blob/v1.26.2/src/main/java/github/scarsz/discordsrv/listeners/PlayerAdvancementDoneListener.java#L108-L117 |
95 | | - try { |
96 | | - Object craftAdvancement = ((Object) event.getAdvancement()).getClass().getMethod("getHandle").invoke(event.getAdvancement()); |
97 | | - Object advancementDisplay = craftAdvancement.getClass().getMethod("c").invoke(craftAdvancement); |
98 | | - boolean display = (boolean) advancementDisplay.getClass().getMethod("i").invoke(advancementDisplay); |
| 84 | + AdvancementDisplay advancementDisplay = event.getAdvancement().getDisplay(); |
99 | 85 |
|
100 | | - if (!display) { |
101 | | - return; |
102 | | - } |
103 | | - } catch (NullPointerException exception) { |
| 86 | + if (advancementDisplay == null) { |
104 | 87 | return; |
105 | | - } catch (Exception exception) { |
106 | | - plugin.getLogger().log(Level.SEVERE, "Failed to check whether advancement should be displayed", exception); |
107 | 88 | } |
108 | 89 |
|
109 | | - String internalAdvancementName = event.getAdvancement().getKey().getKey(); |
110 | | - |
111 | | - String advancementName = advancements.getString(internalAdvancementName); |
112 | | - |
113 | | - if (advancementName == null) { |
114 | | - // Fallback if not defined in advancements.yml: turn "story/shitty_advancement_name" into "Shitty Advancement Name", taken from DiscordSRV |
115 | | - advancementName = Arrays.stream(internalAdvancementName.substring(internalAdvancementName.lastIndexOf("/") + 1).toLowerCase().split("_")) |
116 | | - .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1)) |
117 | | - .collect(Collectors.joining(" ")); |
| 90 | + if (!advancementDisplay.shouldAnnounceChat()) { |
| 91 | + return; |
118 | 92 | } |
119 | 93 |
|
120 | 94 | String text = config.getString("outgoing.advancement.format"); |
121 | 95 |
|
122 | 96 | text = text.replaceAll("%playername%", event.getPlayer().getName()) |
123 | | - .replaceAll("%advancement%", advancementName); |
| 97 | + .replaceAll("%advancement%", advancementDisplay.getTitle()); |
124 | 98 |
|
125 | 99 | try { |
126 | 100 | matterBridgeApi.sendMessage(text); |
|
0 commit comments