Skip to content

Commit

Permalink
附魔效果消耗工具耐久
Browse files Browse the repository at this point in the history
  • Loading branch information
DancingSnow0517 committed Sep 29, 2024
1 parent 28ba86d commit ff40135
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@
import net.minecraft.tags.BlockTags;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantedItemInUse;
import net.minecraft.world.item.enchantment.effects.EnchantmentEntityEffect;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;

import javax.annotation.ParametersAreNonnullByDefault;
import java.util.function.Consumer;

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
Expand All @@ -41,7 +42,8 @@ public void apply(ServerLevel level, int i, EnchantedItemInUse enchantedItemInUs
player,
BlockPos.containing(vec3),
max,
enchantedItemInUse.itemStack()
enchantedItemInUse.itemStack(),
enchantedItemInUse.onBreak()
);
}

Expand All @@ -57,7 +59,7 @@ public MapCodec<? extends EnchantmentEntityEffect> codec() {
* @param sourceBlock 源方块坐标
* @param max 最大采集数量
*/
private static void chainMine(Level level, Player player, BlockPos sourceBlock, int max, ItemStack tool) {
private static void chainMine(ServerLevel level, Player player, BlockPos sourceBlock, int max, ItemStack tool, Consumer<Item> onBreak) {
BlockPos.breadthFirstTraversal(
sourceBlock,
Integer.MAX_VALUE,
Expand All @@ -69,6 +71,9 @@ private static void chainMine(Level level, Player player, BlockPos sourceBlock,
BlockEntity blockEntity = level.getBlockEntity(blockPos);
level.removeBlock(blockPos, false);
blockState.getBlock().playerDestroy(level, player, blockPos, blockState, blockEntity, tool);
if (!sourceBlock.equals(blockPos)) {
tool.hurtAndBreak(1, level, player, onBreak);
}
return true;
}
return sourceBlock.equals(blockPos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public void apply(ServerLevel level, int enchantmentLevel, EnchantedItemInUse en
cropBlock.playerWillDestroy(level, pos, targetBlockState, player);
cropBlock.playerDestroy(level, player, pos, targetBlockState, entity, tool);
level.setBlockAndUpdate(pos, cropBlock.getStateForAge(0));
tool.hurtAndBreak(1, level, player, enchantedItemInUse.onBreak());
}
} else return;
int max = enchantmentLevel * 2 + 1;
Expand All @@ -79,15 +80,8 @@ public void apply(ServerLevel level, int enchantmentLevel, EnchantedItemInUse en
BlockState newState = block.getStateForAge(0);
cropBlock.playerWillDestroy(level, currentIterating, targetBlockState, player);
cropBlock.playerDestroy(level, player, currentIterating, targetBlockState, level.getBlockEntity(currentIterating), tool);
level.setBlock(currentIterating, newState, 11);
level.markAndNotifyBlock(
currentIterating,
level.getChunkAt(currentIterating),
state,
newState,
11,
512
);
level.setBlockAndUpdate(currentIterating, newState);
tool.hurtAndBreak(1, level, player, enchantedItemInUse.onBreak());
}
}

Expand Down

0 comments on commit ff40135

Please sign in to comment.