私はbukkit/spigotプラグインにカスタムイベントを持っています。これは、PlayerInteractEventを拡張して、プレイヤーの近くの近くにある胸を開こうとします。bukkitプラグインでsetCancelled()というクラス/プラグインを確認するにはどうすればいいですか?
現在、このコードではこのイベントを使用して、プレーヤーに胸を開くことができる他のプラグイン(たとえば、悲嘆防止など)オブジェクトがないことを確認しています。プレーヤーが胸を開くことができる場合、私のプラグインはアイテムを胸に入れようとします。私がすることが
String callerClassName = new Exception().getStackTrace()[1].getClassName();
String calleeClassName = new Exception().getStackTrace()[0].getClassName();
を使用することができ、私はクラスを取得するためにそれを見ることができますthis questionから
(周りの仕事として)特定のプラグイン(理想的には)またはクラスによって呼び出されます場合、私はsetCancelled()
を無視したいと思いますクラス名を取得する。これが何をしているか以外に、しかし、それを行うには良い方法がありそうであることをその質問の状態に関するすべてのコメントを
StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
:代わりに私は、この呼び出しの周りのものを使用することができます。
Bukkitにはこれを行うためのより良い方法がありますか?参考のため
、これは私のカスタムのプレイヤーがイベントを対話の全体です:
public class FakePlayerInteractEvent extends PlayerInteractEvent {
public FakePlayerInteractEvent(Player player, Action rightClickBlock, ItemStack itemInHand, Block clickedBlock, BlockFace blockFace) {
super(player, rightClickBlock, itemInHand, clickedBlock, blockFace);
}
}
とイベントの使用を取り巻くコード:
PlayerInteractEvent fakeEvent = AutomaticInventory.getInstance().new FakePlayerInteractEvent(player, Action.RIGHT_CLICK_BLOCK, player.getInventory().getItemInMainHand(), block, BlockFace.UP);
Bukkit.getServer().getPluginManager().callEvent(fakeEvent);
if(!fakeEvent.isCancelled()){ ... do stuff }
はい、より良い解決策があります。私はいくつかのことをチェックするとすぐに答えとして詳細を掲載します。 – Frelling