From da471c33353e4bdbc2dad0c89830abbb4ca1b221 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sun, 22 Jun 2025 21:41:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(bukkit):=20=E5=AE=9E=E7=8E=B0=E6=94=BE?= =?UTF-8?q?=E7=BD=AE=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/PlaceBlockBehavior.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PlaceBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PlaceBlockBehavior.java index 7b55beec3..ec7d34fc2 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PlaceBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PlaceBlockBehavior.java @@ -1,6 +1,9 @@ package net.momirealms.craftengine.bukkit.block.behavior; +import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; +import net.momirealms.craftengine.bukkit.item.BukkitItemManager; +import net.momirealms.craftengine.bukkit.item.behavior.BlockItemBehavior; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityTypes; @@ -10,16 +13,24 @@ import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.core.block.BlockBehavior; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; +import net.momirealms.craftengine.core.block.UpdateOption; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; +import net.momirealms.craftengine.core.item.CustomItem; +import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.item.behavior.ItemBehavior; +import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.Direction; import net.momirealms.craftengine.core.util.ResourceConfigUtils; import net.momirealms.craftengine.core.world.BlockPos; +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.Callable; import java.util.function.Function; @@ -70,6 +81,23 @@ public class PlaceBlockBehavior extends FacingTriggerableBlockBehavior { ))); if (!flag) { + Item item = BukkitItemManager.instance().wrap(FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(itemStack)); + Optional> optionalCustomItem = item.getCustomItem(); + if (optionalCustomItem.isPresent()) { + CustomItem customItem = optionalCustomItem.get(); + for (ItemBehavior itemBehavior : customItem.behaviors()) { + if (itemBehavior instanceof BlockItemBehavior blockItemBehavior) { + Optional optionalBlock = BukkitBlockManager.instance().blockById(blockItemBehavior.block()); + if (optionalBlock.isEmpty()) { + CraftEngine.instance().logger().warn("Failed to place unknown block " + blockItemBehavior.block()); + continue; + } + Location placeLocation = new Location(FastNMS.INSTANCE.method$Level$getCraftWorld(level), blockPos1.x(), blockPos1.y(), blockPos1.z()); + CraftEngineBlocks.place(placeLocation, optionalBlock.get().defaultState(), UpdateOption.UPDATE_ALL_IMMEDIATE, true); + return true; + } + } + } double d = FastNMS.INSTANCE.method$EntityType$getHeight(MEntityTypes.ITEM) / 2.0; double d1 = blockPos1.x() + 0.5; double d2 = blockPos1.y() + 0.5 - d;