Skip to content

Commit d9d85db

Browse files
committed
Add player_stop_using_item event
Paper Only
1 parent cb11d6d commit d9d85db

File tree

7 files changed

+118
-5
lines changed

7 files changed

+118
-5
lines changed

src/main/java/com/laytonsmith/abstraction/bukkit/BukkitConvertor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ public void Startup(CommandHelperPlugin chp) {
374374
chp.registerEvents(BLOCK_LISTENER);
375375
chp.registerEvents(ENTITY_LISTENER);
376376
chp.registerEventsDynamic(INVENTORY_LISTENER);
377-
chp.registerEvents(PLAYER_LISTENER);
377+
chp.registerEventsDynamic(PLAYER_LISTENER);
378378
chp.registerEvents(SERVER_LISTENER);
379379
chp.registerEvents(VEHICLE_LISTENER);
380380
chp.registerEvents(WEATHER_LISTENER);

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

+24
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import com.laytonsmith.abstraction.events.MCPlayerQuitEvent;
6868
import com.laytonsmith.abstraction.events.MCPlayerResourcePackEvent;
6969
import com.laytonsmith.abstraction.events.MCPlayerRespawnEvent;
70+
import com.laytonsmith.abstraction.events.MCPlayerStopUsingItemEvent;
7071
import com.laytonsmith.abstraction.events.MCPlayerTeleportEvent;
7172
import com.laytonsmith.abstraction.events.MCPlayerToggleFlightEvent;
7273
import com.laytonsmith.abstraction.events.MCPlayerToggleSneakEvent;
@@ -75,6 +76,7 @@
7576
import com.laytonsmith.annotations.abstraction;
7677
import com.laytonsmith.core.Static;
7778
import io.papermc.paper.advancement.AdvancementDisplay;
79+
import io.papermc.paper.event.player.PlayerStopUsingItemEvent;
7880
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
7981
import org.bukkit.Bukkit;
8082
import org.bukkit.Location;
@@ -1192,4 +1194,26 @@ public String getTitle() {
11921194
return null;
11931195
}
11941196
}
1197+
1198+
@abstraction(type = Implementation.Type.BUKKIT)
1199+
public static class BukkitMCPlayerStopUsingItemEvent extends BukkitMCPlayerEvent implements MCPlayerStopUsingItemEvent {
1200+
1201+
PlayerStopUsingItemEvent e;
1202+
1203+
public BukkitMCPlayerStopUsingItemEvent(PlayerStopUsingItemEvent event) {
1204+
super(event);
1205+
this.e = event;
1206+
}
1207+
1208+
@Override
1209+
public MCItemStack getItem() {
1210+
return new BukkitMCItemStack(this.e.getItem());
1211+
}
1212+
1213+
@Override
1214+
public int getTicksHeldFor() {
1215+
return this.e.getTicksHeldFor();
1216+
}
1217+
1218+
}
11951219
}

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

+10
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,21 @@
2424
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerQuitEvent;
2525
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerRespawnEvent;
2626
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerResourcePackEvent;
27+
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerStopUsingItemEvent;
2728
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerTeleportEvent;
2829
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerToggleFlightEvent;
2930
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerToggleSneakEvent;
3031
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCPlayerToggleSprintEvent;
3132
import com.laytonsmith.abstraction.bukkit.events.BukkitPlayerEvents.BukkitMCWorldChangedEvent;
33+
import com.laytonsmith.annotations.EventIdentifier;
3234
import com.laytonsmith.commandhelper.CommandHelperPlugin;
3335
import com.laytonsmith.core.events.Driver;
3436
import com.laytonsmith.core.events.EventUtils;
3537
import com.laytonsmith.core.events.drivers.PlayerEvents;
38+
import io.papermc.paper.event.player.PlayerStopUsingItemEvent;
3639
import org.bukkit.Bukkit;
3740
import org.bukkit.Location;
41+
import org.bukkit.event.Event;
3842
import org.bukkit.event.EventHandler;
3943
import org.bukkit.event.EventPriority;
4044
import org.bukkit.event.Listener;
@@ -393,4 +397,10 @@ public void onPlayerAdvancementDoneEvent(PlayerAdvancementDoneEvent event) {
393397
BukkitMCPlayerAdvancementDoneEvent pade = new BukkitMCPlayerAdvancementDoneEvent(event);
394398
EventUtils.TriggerListener(Driver.PLAYER_ADVANCEMENT_DONE, "player_advancement_done", pade);
395399
}
400+
401+
@EventIdentifier(event = Driver.PLAYER_STOP_USING_ITEM, className = "io.papermc.paper.event.player.PlayerStopUsingItemEvent")
402+
public void onPlayerStopUsingItemEvent(Event event) {
403+
BukkitMCPlayerStopUsingItemEvent psuie = new BukkitMCPlayerStopUsingItemEvent((PlayerStopUsingItemEvent) event);
404+
EventUtils.TriggerListener(Driver.PLAYER_STOP_USING_ITEM, "player_stop_using_item", psuie);
405+
}
396406
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.laytonsmith.abstraction.events;
2+
3+
import com.laytonsmith.abstraction.MCItemStack;
4+
5+
public interface MCPlayerStopUsingItemEvent extends MCPlayerEvent {
6+
MCItemStack getItem();
7+
int getTicksHeldFor();
8+
}

src/main/java/com/laytonsmith/commandhelper/CommandHelperPlugin.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -475,10 +475,14 @@ public void registerEventsDynamic(Listener listener) {
475475
try {
476476
eventClass = (Class<? extends Event>) Class.forName(identifier.className());
477477
} catch (ClassNotFoundException | ClassCastException e) {
478-
MSLog.GetLogger().e(MSLog.Tags.RUNTIME, "Could not listen for " + identifier.event().name()
479-
+ " because the class " + identifier.className() + " could not be found."
480-
+ " This problem is not expected to occur, so please report it on the bug"
481-
+ " tracker if it does.", Target.UNKNOWN);
478+
// Event may only exist in Paper (io.papermc.paper or com.destroytokyo.paper)
479+
// so when running Spigot, ignore events that are not in org.bukkit.event or org.spigotmc.event.
480+
if(identifier.className().startsWith("org") || ((BukkitMCServer) myServer).isPaper()) {
481+
MSLog.GetLogger().e(MSLog.Tags.RUNTIME, "Could not listen for " + identifier.event().name()
482+
+ " because the class " + identifier.className() + " could not be found."
483+
+ " This problem is not expected to occur, so please report it on the bug"
484+
+ " tracker if it does.", Target.UNKNOWN);
485+
}
482486
continue;
483487
}
484488
}

src/main/java/com/laytonsmith/core/events/Driver.java

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public enum Driver {
9595
PLAYER_PORTAL_TRAVEL,
9696
PLAYER_QUIT,
9797
PLAYER_SPAWN,
98+
PLAYER_STOP_USING_ITEM(MCVersion.MC1_18_X),
9899
PLAYER_TOGGLE_FLIGHT,
99100
PLAYER_TOGGLE_SNEAK,
100101
PLAYER_TOGGLE_SPRINT,

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

+66
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.laytonsmith.abstraction.events.MCPlayerQuitEvent;
4444
import com.laytonsmith.abstraction.events.MCPlayerResourcePackEvent;
4545
import com.laytonsmith.abstraction.events.MCPlayerRespawnEvent;
46+
import com.laytonsmith.abstraction.events.MCPlayerStopUsingItemEvent;
4647
import com.laytonsmith.abstraction.events.MCPlayerTeleportEvent;
4748
import com.laytonsmith.abstraction.events.MCPlayerToggleFlightEvent;
4849
import com.laytonsmith.abstraction.events.MCPlayerToggleSneakEvent;
@@ -2958,4 +2959,69 @@ public BindableEvent convert(CArray manualObject, Target t) {
29582959
return null;
29592960
}
29602961
}
2962+
2963+
@api
2964+
public static class player_stop_using_item extends AbstractEvent {
2965+
2966+
@Override
2967+
public String getName() {
2968+
return "player_stop_using_item";
2969+
}
2970+
2971+
@Override
2972+
public Driver driver() {
2973+
return Driver.PLAYER_STOP_USING_ITEM;
2974+
}
2975+
2976+
@Override
2977+
public String docs() {
2978+
return "{}"
2979+
+ " Fires when a player stops using an item, such as shields, bows, crossbows, tridents, brushes,"
2980+
+ " goat horns, or spyglasses. Edible items will also fire this if the player stops consuming"
2981+
+ " before completion. This event cannot be cancelled and is only available on Paper 1.18.2+."
2982+
+ " {player | item: The item that was used. | ticks: The number of ticks the item was used.)}"
2983+
+ " {}"
2984+
+ " {}";
2985+
}
2986+
2987+
@Override
2988+
protected PrefilterBuilder getPrefilterBuilder() {
2989+
return new PrefilterBuilder<MCPlayerStopUsingItemEvent>()
2990+
.set("player", "The player that was using the item.", new PlayerPrefilterMatcher<>())
2991+
.set("itemname", "The item type being used", new ItemStackPrefilterMatcher<>() {
2992+
@Override
2993+
protected MCItemStack getItemStack(MCPlayerStopUsingItemEvent event) {
2994+
return event.getItem();
2995+
}
2996+
});
2997+
}
2998+
2999+
@Override
3000+
public Map<String, Mixed> evaluate(BindableEvent event) throws EventException {
3001+
if(event instanceof MCPlayerStopUsingItemEvent e) {
3002+
Map<String, Mixed> map = new HashMap<>();
3003+
map.put("player", new CString(e.getPlayer().getName(), Target.UNKNOWN));
3004+
map.put("item", ObjectGenerator.GetGenerator().item(e.getItem(), Target.UNKNOWN));
3005+
map.put("ticks", new CInt(e.getTicksHeldFor(), Target.UNKNOWN));
3006+
return map;
3007+
} else {
3008+
throw new EventException("Event received was not an MCPlayerStopUsingItemEvent.");
3009+
}
3010+
}
3011+
3012+
@Override
3013+
public boolean modifyEvent(String key, Mixed value, BindableEvent event) {
3014+
return false;
3015+
}
3016+
3017+
@Override
3018+
public MSVersion since() {
3019+
return MSVersion.V3_3_5;
3020+
}
3021+
3022+
@Override
3023+
public BindableEvent convert(CArray manualObject, Target t) {
3024+
return null;
3025+
}
3026+
}
29613027
}

0 commit comments

Comments
 (0)