无法替换一个块Minecraft mod 1.16.5 Forge



目前,我正在制作一个添加额外蜜蜂项目到游戏的mod。现在我想做一个可以打磨闪长岩、安山岩、花岗岩等的东西。作为一个工具。

但是当我右击一个块时,我似乎无法替换它。我看了很多帖子,没有发现什么好东西。所有的答案都过时了。

到目前为止,我尝试使用Block replaceBlock = Blocks.POLISHED_DIORITE;和world.setBlock。但它什么作用也没有。下面是我的代码:

package com.technowin.beeutil.item.custom;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.Objects;
public class Waxer extends Item {
public Waxer(Properties properties) {
super(properties);
}
@Override
public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) {
World world = context.getWorld();
if(!world.isRemote) {
PlayerEntity playerEntity = Objects.requireNonNull(context.getPlayer());
BlockState clickedBlock = world.getBlockState(context.getPos());
rightClickOnCertinBlockState(clickedBlock, context, playerEntity);
stack.damageItem(1, playerEntity, player -> player.sendBreakAnimation(context.getHand()));

}
return super.onItemUseFirst(stack, context);
}
private void rightClickOnCertinBlockState(BlockState clickedBlock,
ItemUseContext context, PlayerEntity playerEntity) {
if(blockIsValidForWaxDio(clickedBlock)) {
polishdioriteblock(playerEntity, context.getWorld(), context.getPos());
}
if(blockIsValidForWaxGra(clickedBlock)) {
polishgraniteblock(playerEntity, context.getWorld(), context.getPos());
}
}
private boolean blockIsValidForWaxDio(BlockState clickedBlock) {
return clickedBlock.getBlock() == Blocks.DIORITE;
}
private boolean blockIsValidForWaxGra(BlockState clickedBlock) {
return clickedBlock.getBlock() == Blocks.GRANITE;

}
private void polishdioriteblock(PlayerEntity playerEntity, World world, BlockPos pos) {
Block replaceBlock = Blocks.POLISHED_DIORITE;
}
private void polishgraniteblock(PlayerEntity playerEntity, World world, BlockPos pos) {
Block replaceBlock = Blocks.POLISHED_DIORITE;
}
}

注意:

我是新的minecraft mod,这是我的第二个mod。我不是Java大师。

这里您必须使用方法world.setBlockState(...):

@Override
public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) {
if (!context.getWorld().isRemote()) {
World world = context.getWorld();
BlockPos pos = context.getPos();
BlockState state = world.getBlockState(pos);
PlayerEntity playerEntity = Objects.requireNonNull(context.getPlayer());
if (state.getBlock() == Blocks.DIORITE) {
world.setBlockState(pos, Blocks.POLISHED_DIORITE.getDefaultState());
stack.damageItem(1, playerEntity, player -> player.sendBreakAnimation(context.getHand()));
} else if (state.getBlock() == Blocks.GRANITE) {
world.setBlockState(pos, Blocks.POLISHED_GRANITE.getDefaultState());
stack.damageItem(1, playerEntity, player -> player.sendBreakAnimation(context.getHand()));
}
}
return super.onItemUseFirst(stack, context);
}

最新更新