Skip to content

Commit

Permalink
Player's main hand support (#2294)
Browse files Browse the repository at this point in the history
* `PlayerTag,main_hand`

* `on player changes main hand`

* hand -> new_hand

* remove mirrorBukkitPlayer call

* better matching, remove outdated regex

* remove line
  • Loading branch information
acikek committed Jan 18, 2022
1 parent 8a91c01 commit 7ea6850
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
Expand Up @@ -153,6 +153,7 @@ public static void registerMainEvents() {
ScriptEvent.registerScriptEvent(PlayerAnimatesScriptEvent.class);
ScriptEvent.registerScriptEvent(PlayerBreaksBlockScriptEvent.class);
ScriptEvent.registerScriptEvent(PlayerBreaksItemScriptEvent.class);
ScriptEvent.registerScriptEvent(PlayerChangesMainHandScriptEvent.class);
ScriptEvent.registerScriptEvent(PlayerChangesGamemodeScriptEvent.class);
ScriptEvent.registerScriptEvent(PlayerChangesSignScriptEvent.class);
ScriptEvent.registerScriptEvent(PlayerChangesWorldScriptEvent.class);
Expand Down
@@ -0,0 +1,74 @@
package com.denizenscript.denizen.events.player;

import com.denizenscript.denizen.objects.*;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.player.PlayerChangedMainHandEvent;
import org.bukkit.inventory.MainHand;

import java.util.Arrays;

public class PlayerChangesMainHandScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// player changes main hand
//
// @Group Player
//
// @Triggers when a player changes their main hand.
//
// @Context
// <context.old_hand> returns the player's old main hand, either LEFT or RIGHT.
// <context.new_hand> returns the player's new main hand.
//
// @Player Always.
//
// -->

public PlayerChangesMainHandScriptEvent() {
instance = this;
registerCouldMatcher("player changes main hand");
}

public static PlayerChangesMainHandScriptEvent instance;
public PlayerChangedMainHandEvent event;

@Override
public String getName() {
return "PlayerChangesMainHand";
}

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(event.getPlayer());
}

@Override
public ObjectTag getContext(String name) {
switch (name) {
case "old_hand":
return new ElementTag(event.getMainHand().toString());
// workaround for spigot bug
case "new_hand":
return new ElementTag(event.getMainHand() == MainHand.LEFT ? "RIGHT" : "LEFT");
}
return super.getContext(name);
}

@EventHandler
public void onPlayerChangesMainHand(PlayerChangedMainHandEvent event) {
this.event = event;
fire(event);
}
}
Expand Up @@ -1691,6 +1691,16 @@ else if (attribute.startsWith("percent", 2)) {
return null;
});

// <--[tag]
// @attribute <PlayerTag.main_hand>
// @returns ElementTag
// @description
// Returns the player's main hand, either LEFT or RIGHT.
// -->
registerOnlineOnlyTag(ElementTag.class, "main_hand", (attribute, object) -> {
return new ElementTag(object.getPlayerEntity().getMainHand().toString());
});

/////////////////////
// CITIZENS ATTRIBUTES
/////////////////
Expand Down

0 comments on commit 7ea6850

Please sign in to comment.