9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 18:09:27 +00:00

完善活板门行为

This commit is contained in:
XiaoMoMi
2025-06-18 18:38:19 +08:00
parent 499beaf6c6
commit 9220c2f989
2 changed files with 17 additions and 3 deletions

View File

@@ -7,6 +7,7 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflect
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBlocks;
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MFluids;
import net.momirealms.craftengine.bukkit.util.BlockStateUtils;
import net.momirealms.craftengine.bukkit.util.InteractUtils;
import net.momirealms.craftengine.bukkit.util.LocationUtils;
import net.momirealms.craftengine.bukkit.world.BukkitWorld;
import net.momirealms.craftengine.core.block.BlockBehavior;
@@ -31,6 +32,7 @@ import org.bukkit.Bukkit;
import org.bukkit.GameEvent;
import org.bukkit.block.Block;
import org.bukkit.event.block.BlockRedstoneEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.Nullable;
@@ -96,7 +98,7 @@ public class TrapDoorBlockBehavior extends WaterLoggedBlockBehavior {
.with(this.halfProperty, clickedFace == Direction.UP ? SingleBlockHalf.BOTTOM : SingleBlockHalf.TOP);
}
if (FastNMS.INSTANCE.method$SignalGetter$hasNeighborSignal(level, clickedPos)) {
state = state.with(this.poweredProperty, true);
state = state.with(this.poweredProperty, true).with(this.openProperty, true);
}
if (this.waterloggedProperty != null && FastNMS.INSTANCE.method$FluidState$getType(FastNMS.INSTANCE.method$Level$getFluidState(level, clickedPos)) == MFluids.WATER) {
state = state.with(this.waterloggedProperty, true);
@@ -110,16 +112,25 @@ public class TrapDoorBlockBehavior extends WaterLoggedBlockBehavior {
return InteractionResult.PASS;
}
if (context.getItem() == null) {
this.toggle(state, context.getLevel(), context.getClickedPos(), context.getPlayer());
playerToggle(context, state);
return InteractionResult.SUCCESS;
} else if (!context.getPlayer().isSecondaryUseActive()) {
this.toggle(state, context.getLevel(), context.getClickedPos(), context.getPlayer());
playerToggle(context, state);
return InteractionResult.SUCCESS_AND_CANCEL;
} else {
return InteractionResult.PASS;
}
}
@SuppressWarnings("unchecked")
private void playerToggle(UseOnContext context, ImmutableBlockState state) {
Player player = context.getPlayer();
this.toggle(state, context.getLevel(), context.getClickedPos(), player);
if (!InteractUtils.isInteractable((org.bukkit.entity.Player) player.platformPlayer(), BlockStateUtils.fromBlockData(state.vanillaBlockState().handle()), context.getHitResult(), (Item<ItemStack>) context.getItem())) {
player.swingHand(context.getHand());
}
}
@Override
public boolean isPathFindable(Object thisBlock, Object[] args, Callable<Object> superMethod) {
Object type = VersionHelper.isOrAbove1_20_5() ? args[1] : args[3];

View File

@@ -315,6 +315,9 @@ items:
hardness: 3.0
resistance: 3.0
burnable: true
tags:
- minecraft:mineable/axe
- minecraft:trapdoors
states:
template: "default:block_state/trapdoor"
arguments: