3d viewer hotbar#62
Conversation
📝 WalkthroughОбзорДобавлена поддержка нового типа команды Изменения
Предполагаемые затраты на код-ревью🎯 2 (Простой) | ⏱️ ~10 минут
Стихотворение
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (298)
frontend/public/minecraft-assets/items/acacia_boat.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/acacia_chest_boat.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/acacia_door.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/acacia_hanging_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/acacia_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/amethyst_shard.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/angler_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/apple.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/archer_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/armor_stand.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/arms_up_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/arrow.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/axolotl_bucket.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/baked_potato.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bamboo.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bamboo_chest_raft.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bamboo_door.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bamboo_hanging_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bamboo_raft.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bamboo_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/barrier.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/beef.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/beetroot.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/beetroot_seeds.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/beetroot_soup.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bell.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/birch_boat.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/birch_chest_boat.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/birch_door.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/birch_hanging_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/birch_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/black_candle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/black_dye.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/blade_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/blaze_powder.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/blaze_rod.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/blue_candle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/blue_dye.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bone.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bone_meal.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/book.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bow.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bow_pulling_0.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bow_pulling_1.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bow_pulling_2.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bowl.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bread.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/brewer_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/brewing_stand.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/brick.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/broken_elytra.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/brown_candle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/brown_dye.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/brush.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bucket.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bundle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/bundle_filled.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/burn_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cake.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/campfire.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/candle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/carrot.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/carrot_on_a_stick.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cauldron.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/chain.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/chainmail_boots.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/chainmail_chestplate.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/chainmail_helmet.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/chainmail_leggings.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/charcoal.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cherry_boat.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cherry_chest_boat.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cherry_door.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cherry_hanging_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cherry_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/chest_minecart.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/chicken.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/chorus_fruit.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clay_ball.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_00.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_01.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_02.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_03.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_04.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_05.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_06.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_07.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_08.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_09.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_10.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_11.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_12.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_13.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_14.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_15.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_16.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_17.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_18.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_19.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_20.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_21.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_22.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_23.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_24.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_25.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_26.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_27.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_28.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_29.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_30.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_31.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_32.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_33.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_34.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_35.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_36.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_37.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_38.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_39.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_40.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_41.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_42.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_43.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_44.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_45.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_46.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_47.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_48.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_49.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_50.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_51.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_52.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_53.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_54.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_55.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_56.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_57.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_58.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_59.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_60.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_61.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_62.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/clock_63.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/coal.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/coast_armor_trim_smithing_template.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cocoa_beans.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cod.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cod_bucket.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/command_block_minecart.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/comparator.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_00.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_01.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_02.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_03.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_04.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_05.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_06.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_07.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_08.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_09.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_10.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_11.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_12.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_13.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_14.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_15.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_16.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_17.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_18.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_19.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_20.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_21.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_22.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_23.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_24.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_25.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_26.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_27.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_28.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_29.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_30.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/compass_31.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cooked_beef.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cooked_chicken.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cooked_cod.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cooked_mutton.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cooked_porkchop.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cooked_rabbit.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cooked_salmon.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cookie.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/copper_ingot.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/creeper_banner_pattern.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crimson_door.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crimson_hanging_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crimson_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crossbow_arrow.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crossbow_firework.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crossbow_pulling_0.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crossbow_pulling_1.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crossbow_pulling_2.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/crossbow_standby.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cyan_candle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/cyan_dye.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/danger_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/dark_oak_boat.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/dark_oak_chest_boat.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/dark_oak_door.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/dark_oak_hanging_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/dark_oak_sign.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_axe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_boots.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_chestplate.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_helmet.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_hoe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_horse_armor.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_leggings.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_pickaxe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_shovel.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/diamond_sword.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/disc_fragment_5.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/dragon_breath.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/dried_kelp.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/dune_armor_trim_smithing_template.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/echo_shard.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/egg.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/elytra.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/emerald.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_armor_slot_boots.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_armor_slot_chestplate.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_armor_slot_helmet.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_armor_slot_leggings.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_armor_slot_shield.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_amethyst_shard.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_axe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_diamond.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_emerald.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_hoe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_ingot.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_lapis_lazuli.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_pickaxe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_quartz.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_redstone_dust.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_shovel.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_smithing_template_armor_trim.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_smithing_template_netherite_upgrade.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/empty_slot_sword.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/enchanted_book.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/end_crystal.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/ender_eye.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/ender_pearl.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/experience_bottle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/explorer_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/eye_armor_trim_smithing_template.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/feather.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/fermented_spider_eye.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/filled_map.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/filled_map_markings.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/fire_charge.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/firework_rocket.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/firework_star.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/firework_star_overlay.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/fishing_rod.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/fishing_rod_cast.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/flint.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/flint_and_steel.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/flower_banner_pattern.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/flower_pot.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/friend_pottery_sherd.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/furnace_minecart.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/ghast_tear.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/glass_bottle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/glistering_melon_slice.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/globe_banner_pattern.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/glow_berries.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/glow_ink_sac.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/glow_item_frame.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/glowstone_dust.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/goat_horn.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/gold_ingot.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/gold_nugget.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_apple.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_axe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_boots.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_carrot.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_chestplate.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_helmet.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_hoe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_horse_armor.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_leggings.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_pickaxe.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_shovel.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/golden_sword.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/gray_candle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/gray_dye.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/green_candle.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/green_dye.pngis excluded by!**/*.pngfrontend/public/minecraft-assets/items/gunpowder.pngis excluded by!**/*.png
📒 Files selected for processing (2)
backend/src/core/BotProcess.js(2 hunks)backend/src/core/services/MinecraftViewerService.js(1 hunks)
🔇 Additional comments (1)
backend/src/core/services/MinecraftViewerService.js (1)
113-114: Проксирование событияviewer:blockUpdateвыглядит корректнымОбработка нового типа IPC-сообщения и ретрансляция его в
viewerNamespaceсделаны в том же стиле, что и остальные viewer-события (spawn,move,health,chat), что упрощает поддержку и не меняет существующие контракты.
| case 'hotbar_slot': | ||
| if (command.slot !== undefined && command.slot >= 0 && command.slot <= 8) { | ||
| bot.setQuickBarSlot(command.slot); | ||
| sendLog(`[Viewer] Hotbar slot changed to ${command.slot}`); | ||
| } | ||
| break; |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Усилить валидацию hotbar_slot и логировать неверные значения
Сейчас проверяется только диапазон и !== undefined; при этом дробные/строковые значения могут «тихо» игнорироваться, а причины будут неочевидны на стороне клиента. Имеет смысл нормализовать значение до числа, проверить, что это целое в диапазоне 0–8, и явно залогировать некорректные случаи.
- case 'hotbar_slot':
- if (command.slot !== undefined && command.slot >= 0 && command.slot <= 8) {
- bot.setQuickBarSlot(command.slot);
- sendLog(`[Viewer] Hotbar slot changed to ${command.slot}`);
- }
- break;
+ case 'hotbar_slot': {
+ const slot = Number(command.slot);
+ if (Number.isInteger(slot) && slot >= 0 && slot <= 8) {
+ bot.setQuickBarSlot(slot);
+ sendLog(`[Viewer] Hotbar slot changed to ${slot}`);
+ } else {
+ sendLog(`[Viewer] Invalid hotbar slot value: ${command.slot}`);
+ }
+ break;
+ }📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| case 'hotbar_slot': | |
| if (command.slot !== undefined && command.slot >= 0 && command.slot <= 8) { | |
| bot.setQuickBarSlot(command.slot); | |
| sendLog(`[Viewer] Hotbar slot changed to ${command.slot}`); | |
| } | |
| break; | |
| case 'hotbar_slot': { | |
| const slot = Number(command.slot); | |
| if (Number.isInteger(slot) && slot >= 0 && slot <= 8) { | |
| bot.setQuickBarSlot(slot); | |
| sendLog(`[Viewer] Hotbar slot changed to ${slot}`); | |
| } else { | |
| sendLog(`[Viewer] Invalid hotbar slot value: ${command.slot}`); | |
| } | |
| break; | |
| } |
🤖 Prompt for AI Agents
In backend/src/core/BotProcess.js around lines 321 to 326, the current
hotbar_slot handling only checks !== undefined and range, allowing non-integer
or string values to be silently ignored; normalize the incoming command.slot to
a Number, verify it's a finite integer (e.g., Number.isInteger) and within 0–8,
call bot.setQuickBarSlot only for valid integers, and add a
processLogger/sendLog entry for invalid values that includes the raw received
value and reason (e.g., "not a number", "not integer", or "out of range") so the
client/server can see why it was rejected.
| bot.on('blockUpdate', (oldBlock, newBlock) => { | ||
| if (process.send && oldBlock && newBlock) { | ||
| process.send({ | ||
| type: 'viewer:blockUpdate', | ||
| payload: { | ||
| position: { | ||
| x: newBlock.position.x, | ||
| y: newBlock.position.y, | ||
| z: newBlock.position.z | ||
| }, | ||
| oldBlock: { | ||
| type: oldBlock.type, | ||
| name: oldBlock.name | ||
| }, | ||
| newBlock: { | ||
| type: newBlock.type, | ||
| name: newBlock.name | ||
| } | ||
| } | ||
| }); | ||
| } | ||
| }); |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Корректная отправка viewer:blockUpdate, возможны перфоманс‑риски при большом потоке событий
Сам формат отправляемых данных (позиция, старый и новый блок с type/name) выглядит аккуратным и хорошо подходит для инкрементального обновления 3D‑вьюера через MinecraftViewerService. Однако при массовых изменениях мира (например, большие регионы, WorldEdit и т.п.) частота blockUpdate может дать значительную нагрузку на IPC и фронтенд.
Если в будущем появятся проблемы с производительностью, можно рассмотреть опциональную фильтрацию (по радиусу от бота или по текущему viewerRenderDistance) или троттлинг/агрегацию таких событий, но это не блокер для текущего PR.
🤖 Prompt for AI Agents
In backend/src/core/BotProcess.js around lines 1120 to 1141, the
viewer:blockUpdate payload is correct but unbounded emission of blockUpdate
events can overload IPC/frontend during large world changes; add optional
protection by filtering events (e.g., ignore blocks outside a configurable
radius from the bot or beyond viewerRenderDistance) and/or implement simple
throttling/aggregation (batch updates for N ms or coalesce updates per position)
controlled by a config flag so the default behavior remains unchanged while
enabling performance mode for heavy-change scenarios.
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.