Skip to content

Commit f8beb9c

Browse files
committed
Add player_advancement_done event
1 parent 82f4897 commit f8beb9c

File tree

4 files changed

+113
-0
lines changed

4 files changed

+113
-0
lines changed

src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitPlayerEvents.java

+34
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.laytonsmith.abstraction.MCHumanEntity;
88
import com.laytonsmith.abstraction.MCItemStack;
99
import com.laytonsmith.abstraction.MCLocation;
10+
import com.laytonsmith.abstraction.MCNamespacedKey;
1011
import com.laytonsmith.abstraction.MCPlayer;
1112
import com.laytonsmith.abstraction.MCWorld;
1213
import com.laytonsmith.abstraction.blocks.MCBlock;
@@ -16,6 +17,7 @@
1617
import com.laytonsmith.abstraction.bukkit.BukkitMCBookMeta;
1718
import com.laytonsmith.abstraction.bukkit.BukkitMCItemStack;
1819
import com.laytonsmith.abstraction.bukkit.BukkitMCLocation;
20+
import com.laytonsmith.abstraction.bukkit.BukkitMCNamespacedKey;
1921
import com.laytonsmith.abstraction.bukkit.BukkitMCWorld;
2022
import com.laytonsmith.abstraction.bukkit.blocks.BukkitMCBlock;
2123
import com.laytonsmith.abstraction.bukkit.blocks.BukkitMCMaterial;
@@ -31,6 +33,7 @@
3133
import com.laytonsmith.abstraction.enums.MCGameMode;
3234
import com.laytonsmith.abstraction.enums.MCResourcePackStatus;
3335
import com.laytonsmith.abstraction.enums.MCTeleportCause;
36+
import com.laytonsmith.abstraction.enums.MCVersion;
3437
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCAction;
3538
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCEnterBedResult;
3639
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCFishingState;
@@ -40,6 +43,7 @@
4043
import com.laytonsmith.abstraction.events.MCExpChangeEvent;
4144
import com.laytonsmith.abstraction.events.MCFoodLevelChangeEvent;
4245
import com.laytonsmith.abstraction.events.MCGamemodeChangeEvent;
46+
import com.laytonsmith.abstraction.events.MCPlayerAdvancementDoneEvent;
4347
import com.laytonsmith.abstraction.events.MCPlayerBucketEmptyEvent;
4448
import com.laytonsmith.abstraction.events.MCPlayerBucketEvent;
4549
import com.laytonsmith.abstraction.events.MCPlayerBucketFillEvent;
@@ -67,9 +71,11 @@
6771
import com.laytonsmith.abstraction.events.MCPlayerToggleSprintEvent;
6872
import com.laytonsmith.abstraction.events.MCWorldChangedEvent;
6973
import com.laytonsmith.annotations.abstraction;
74+
import com.laytonsmith.core.Static;
7075
import org.bukkit.Bukkit;
7176
import org.bukkit.Location;
7277
import org.bukkit.World;
78+
import org.bukkit.advancement.AdvancementDisplay;
7379
import org.bukkit.block.BlockFace;
7480
import org.bukkit.damage.DamageSource;
7581
import org.bukkit.damage.DamageType;
@@ -78,6 +84,7 @@
7884
import org.bukkit.event.entity.FoodLevelChangeEvent;
7985
import org.bukkit.event.entity.PlayerDeathEvent;
8086
import org.bukkit.event.player.AsyncPlayerChatEvent;
87+
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
8188
import org.bukkit.event.player.PlayerBedEnterEvent;
8289
import org.bukkit.event.player.PlayerBedLeaveEvent;
8390
import org.bukkit.event.player.PlayerBucketEmptyEvent;
@@ -1147,4 +1154,31 @@ public BukkitMCPlayerBucketEmptyEvent(PlayerBucketEmptyEvent event) {
11471154
this.pbee = event;
11481155
}
11491156
}
1157+
1158+
@abstraction(type = Implementation.Type.BUKKIT)
1159+
public static class BukkitMCPlayerAdvancementDoneEvent extends BukkitMCPlayerEvent implements MCPlayerAdvancementDoneEvent {
1160+
1161+
PlayerAdvancementDoneEvent e;
1162+
1163+
public BukkitMCPlayerAdvancementDoneEvent(PlayerAdvancementDoneEvent event) {
1164+
super(event);
1165+
this.e = event;
1166+
}
1167+
1168+
@Override
1169+
public MCNamespacedKey getAdvancementKey() {
1170+
return new BukkitMCNamespacedKey(e.getAdvancement().getKey());
1171+
}
1172+
1173+
@Override
1174+
public String getTitle() {
1175+
if(Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_18_X)) {
1176+
AdvancementDisplay display = e.getAdvancement().getDisplay();
1177+
if(display != null) {
1178+
return display.getTitle();
1179+
}
1180+
}
1181+
return null;
1182+
}
1183+
}
11501184
}

src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitPlayerListener.java

+8
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCExpChangeEvent;
77
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCFoodLevelChangeEvent;
88
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCGamemodeChangeEvent;
9+
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerAdvancementDoneEvent;
910
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerBucketEmptyEvent;
1011
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerBucketFillEvent;
1112
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerEnterBedEvent;
@@ -40,6 +41,7 @@
4041
import org.bukkit.event.block.Action;
4142
import org.bukkit.event.entity.FoodLevelChangeEvent;
4243
import org.bukkit.event.player.AsyncPlayerChatEvent;
44+
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
4345
import org.bukkit.event.player.PlayerBedEnterEvent;
4446
import org.bukkit.event.player.PlayerBedLeaveEvent;
4547
import org.bukkit.event.player.PlayerBucketEmptyEvent;
@@ -385,4 +387,10 @@ public void onBucketEmpty(PlayerBucketEmptyEvent event) {
385387
BukkitMCPlayerBucketEmptyEvent pbee = new BukkitMCPlayerBucketEmptyEvent(event);
386388
EventUtils.TriggerListener(Driver.PLAYER_BUCKET_EMPTY, "player_bucket_empty", pbee);
387389
}
390+
391+
@EventHandler(priority = EventPriority.LOWEST)
392+
public void onPlayerAdvancementDoneEvent(PlayerAdvancementDoneEvent event) {
393+
BukkitMCPlayerAdvancementDoneEvent pade = new BukkitMCPlayerAdvancementDoneEvent(event);
394+
EventUtils.TriggerListener(Driver.PLAYER_ADVANCEMENT_DONE, "player_advancement_done", pade);
395+
}
388396
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.laytonsmith.abstraction.events;
2+
3+
import com.laytonsmith.abstraction.MCNamespacedKey;
4+
5+
public interface MCPlayerAdvancementDoneEvent extends MCPlayerEvent {
6+
MCNamespacedKey getAdvancementKey();
7+
String getTitle();
8+
}

src/main/java/com/laytonsmith/core/events/drivers/PlayerEvents.java

+63
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.laytonsmith.abstraction.events.MCExpChangeEvent;
2525
import com.laytonsmith.abstraction.events.MCFoodLevelChangeEvent;
2626
import com.laytonsmith.abstraction.events.MCGamemodeChangeEvent;
27+
import com.laytonsmith.abstraction.events.MCPlayerAdvancementDoneEvent;
2728
import com.laytonsmith.abstraction.events.MCPlayerBucketEvent;
2829
import com.laytonsmith.abstraction.events.MCPlayerEnterBedEvent;
2930
import com.laytonsmith.abstraction.events.MCPlayerLeaveBedEvent;
@@ -2894,4 +2895,66 @@ public Driver driver() {
28942895
return Driver.PLAYER_BUCKET_EMPTY;
28952896
}
28962897
}
2898+
2899+
@api
2900+
public static class player_advancement_done extends AbstractEvent {
2901+
2902+
@Override
2903+
public String getName() {
2904+
return "player_advancement_done";
2905+
}
2906+
2907+
@Override
2908+
public Driver driver() {
2909+
return Driver.PLAYER_ADVANCEMENT_DONE;
2910+
}
2911+
2912+
@Override
2913+
public String docs() {
2914+
return "{}"
2915+
+ " Fires when a player completes all criteria to unlock an advancement or recipe."
2916+
+ " {player | advancement | title: The advancement display title, if one exists (MC 1.18.2+)}"
2917+
+ " {}"
2918+
+ " {}";
2919+
}
2920+
2921+
@Override
2922+
protected PrefilterBuilder getPrefilterBuilder() {
2923+
return new PrefilterBuilder<MCPlayerAdvancementDoneEvent>()
2924+
.set("advancement", "The namespaced key of the advancement completed", new MacroPrefilterMatcher<>() {
2925+
@Override
2926+
protected String getProperty(MCPlayerAdvancementDoneEvent event) {
2927+
return event.getAdvancementKey().toString();
2928+
}
2929+
});
2930+
}
2931+
2932+
@Override
2933+
public Map<String, Mixed> evaluate(BindableEvent event) throws EventException {
2934+
if(event instanceof MCPlayerAdvancementDoneEvent e) {
2935+
Map<String, Mixed> map = new HashMap<>();
2936+
map.put("player", new CString(e.getPlayer().getName(), Target.UNKNOWN));
2937+
map.put("advancement", new CString(e.getAdvancementKey().toString(), Target.UNKNOWN));
2938+
map.put("title", new CString(e.getTitle(), Target.UNKNOWN));
2939+
return map;
2940+
} else {
2941+
throw new EventException("Event received was not an MCPlayerAdvancementDoneEvent.");
2942+
}
2943+
}
2944+
2945+
@Override
2946+
public boolean modifyEvent(String key, Mixed value, BindableEvent event) {
2947+
return false;
2948+
}
2949+
2950+
@Override
2951+
public MSVersion since() {
2952+
return MSVersion.V3_3_5;
2953+
}
2954+
2955+
@Override
2956+
public BindableEvent convert(CArray manualObject, Target t) {
2957+
return null;
2958+
}
2959+
}
28972960
}

0 commit comments

Comments
 (0)