Jump to content

Item not breaking in PlayerInteractEvent.RightClickBlock event


jonaskohl

Recommended Posts

I am trying to implement a right-click interaction between a vanilla tool and a vanilla block (so I can't use onBlockActivated or onItemUse). Everything is working fine except my call to ItemStack#attemptDamageItem, because the PlayerEntity I get from PlayerInteractEvent.RightClickBlock#getPlayer() is an instance of ClientPlayerEntity, not a ServerPlayerEntity. However, ItemStack#attemptDamageItem expects a ServerPlayerEntity only. I tried passing in null as the damager parameter, and this almost works, but the item doesn't break when reaching 0 durability. This may be, because the ITEM_DURABILITY_CHANGED trigger never fires when damager is null. Now my question: How can I get access to a ServerPlayerEntity instance, or alternatively, how can I make sure the item breaks when reaching 0 durability?

My code looks as follows:

Spoiler
@SubscribeEvent
public void onInteract(PlayerInteractEvent.RightClickBlock event) {
    World world = event.getWorld();
    ItemStack stack = event.getItemStack();
    BlockPos pos = event.getPos();
    BlockState state = world.getBlockState(pos);
    Direction face = event.getFace();
    PlayerEntity player = event.getPlayer();

    if (stack.getItem() instanceof ShearsItem && state.getBlock().equals(Blocks.GRASS_BLOCK) && Objects.equals(face, Direction.UP)) {
        if (!player.isCreative()) {
            if (player instanceof ServerPlayerEntity)
                stack.attemptDamageItem(1, world.rand, (ServerPlayerEntity) player);
            else
                stack.attemptDamageItem(1, world.rand, null);
        }

        BlockState above = world.getBlockState(pos.up());
        world.setBlockState(
                pos,
                ModBlocks.LAWN_BLOCK
                        .get()
                        .getDefaultState()
                        .with(LawnBlock.SNOWY, above.matchesBlock(Blocks.SNOW_BLOCK) || above.matchesBlock(Blocks.SNOW))
                        .with(LawnBlock.FACING, player.getHorizontalFacing().getOpposite())
        );

        world.playSound(player, pos, SoundEvents.BLOCK_GRASS_PLACE, SoundCategory.BLOCKS, 1.0F, 1.0F);
        player.swing(event.getHand(), true);
    }
}

 

 

Link to comment
Share on other sites

1 hour ago, jonaskohl said:

I'm sorry if this is a stupid question, but how would I do that? Because right now, the PlayerEntity is never an instance of ServerPlayerEntity (my check never returns true)

which version of minecraft did you use, since PlayerEntity is not a mojang mapping

Link to comment
Share on other sites

I realized that I'm still on 1.16.4 with MCP mappings, so I probably can't expect any support...

(I tried upgrading the mod to 1.18.2, but that went, uhm, let's say horrible, as so much has changed between 1.16.4 and 1.18.2 and I couldn't find a migration guide, so the mod would require a major rewrite, but that's an entierly different topic...)

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • インターネットボクシング中継→BCGAME33·COM▶コンゴ民主ボクシングサイトインターネットパプアニューギニアボクシングツアー[本社お問い合わせテレJBOX7]インターネットボクシング※〒本社ベラジオカジノボクシングゲームインターネットサハラインターネットボクシング遊び場[総販お問い合わせカカオトークJBOX7]インターネットボクシング&☎賭博場アイスランドボクシングトーナメントインターネットオーストラリアインターネットボクシング競技[各種オフィコミュニティ制作]ネットボクシング⊙▥ツアージョージアボクシングトーナメント ネットアンドラネットボクシングサイト[マーケティングお問い合わせ] ネットボクシング☜♡募集 南アフリカのイビジャグランカジノのホームページ[カジノ本社] ホームページ [カジノ ネットボクシング#MGM モバイルゲーム モナコ ネット卓球場 [スポーツ本社]インターネットボクシング▲▲おすすめグレナダボクシング遊び場インターネットサンマリノインターネットボクシングリーグ[ト本社お問い合わせ]インターネットボクシング♤↓YouTubeザンビアボクシング動画インターネット南スーダンインターネットボクシング動画[トト総販購入]インターネットボクシング㏂▷ホールダンバ北米ボクシング総販インターネットスウェーデンネットボクシング遊び場[カジノ総販]ネットボクシングº™サイトボスニアボクシングツアーネットバーデンバーデンネットボクシングポーカー大会[ヤマト本社]ネットボクシング↘(株)サイトモルドバボクシングユーチューバーネットシリアネットボクシングゲーム場[バカラ総販]ネットボクシング◎←ホールダンバ 北メリルドバ 北アメリカ卓球方法 [BCGAMEBCゲーム総販お問い合わせ] お知らせ設定おすすめ購読いいですね
    • Tsuopy №BCGAME55·COM @ Opie总经销短道速滑Opie视频链接
    • ライブ KSOP クープーン BCGAME33·COM☜インド KSOP検証ライブ ヨーロッパ KSOP YouTube [本社お問い合わせテレ JBOX7]ライブ KSOP サイト [総販お問い合わせカカオトーク JBOX7]ライブ KSOP □☞映像トルクメニスタン KSOP 放送ライブ 中央アジアライブ KSOP ホールダンパブ [各種オフィコミュニティ制作]ライブ KSOP ‡☞バカラパブ シザースパレスカジノKSOPサイトライブ コスタリカライヴKSP業者 [マーケティングお問い合わせ]ライヴKSP グループトークルームへ シンガポールKSOP戦略ライブスペインライブKSOP募集[スポーツ本社]ライブKSOP▦▩中継トバゴKSOP戦略ライブトバゴライブKSOPサイト[ト本社お問い合わせ]ライブKSOP@▼YouTubeセントキッツKSOPキャッシュゲームライブトルコライブKSOP放送[ト総販購入]ライヴKSP↙㏂遊び場イエメンKSPユーチューブライヴシエラレオネライヴKSPホールダンバ[カジノ総販]ライヴKSP↘▒リーグコスタリカKSPトーナメントライヴスロベニアライヴKSPゲームセンター[大和本社]ライヴKSP♣↙ライヴKSPカーラバコバ総版 ソマリア KSOPトーナメント ライブ リヒテンシュタインライブ KSOP サイト [競馬総版]ニジェール KSOP サイト 北マケドニア KSOPツアー [BCGAME BCゲーム総版お問い合わせ] お知らせ設定 おすすめ購読 いいですね
    • Tsuopy №BCGAME55·COM @ Opie总经销短道速滑Opie视频链接
    • アジアグラフ ホールダンパブ▼BCGAME33·COM≒イビザグランカジノグラフ旅行アジアジブチグラフ検証[本社お問い合わせテレJBOX7]アジアグラフ☎◁ホールダンパブセントキッツグラフ接続アジアマレーシアアジアグラフ方法[総販お問い合わせカカオトークJBOX7]アジアグラフ★※本社タイグラフ放送アジアフィジーアジアグラフィコミュニティ[各種オフィコミュニティ制作]アジアラウンド映像 アジアラウンド映像[マーケティングお問い合わせ]アジブチグラフ↙#ゲームセンターバーデンバーデングローブ映像 アジアン イラク アジアラス本社ホールダームーブサイト[カジノ本社ホールダームホールダームバーデンボーダーム [スポーツ本社]アジアグラフ☞▷競技中央アフリカグラフ動画アジアクウェートアジアグラフ募集[トト本社お問い合わせ]アジアグラフ◇▶ホールダンバコートジボワールグラフ クープーンアジアスリランカアジアグラフバカラパブ[トト総販購入]アジアグラフ  업체メーカースロベニアグラフ遊び場アジアナミビアアジアグラフィサイト[カジノ総販] アジアグラフ▶↗バカラパブカンボジアグラフ賭博場 アジアグラフィゲーム場[大和本社] カンボジアグラフ ホールダンパップ アジアグラフィトーナメント[バカラ総販] アジアグラフィックス ☆◐ アジボワープスロベニア サイト おすすめ スロベニア合計サイト グラフ YouTube グレナダグラフ旅行 [BCGAME BCゲーム 総販のお問い合わせ] お知らせ設定 おすすめ 購読 いいですね
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.