
为什么物品fg_machine的物品状态正常,放置后却变成了透明的?
BlockInit.java:
package com.GaoHY.GaoHY_mod.Init;
import com.GaoHY.GaoHY_mod.blockentities.FGMachineBlockEntity;
import com.GaoHY.GaoHY_mod.g_mod;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.valueproviders.UniformInt;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.DropExperienceBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityTicker;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.minecraft.world.level.block.BaseEntityBlock;
import javax.annotation.Nullable;
import java.util.function.Supplier;
public class BlockInit {
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, g_mod.MODID);
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, g_mod.MODID);
public static final RegistryObject<Block> FU_BLOCK = registerBlock("fu_block",
() -> new Block(BlockBehaviour.Properties.copy(Blocks.STONE)
.strength(3.0f, 6.0f)
.requiresCorrectToolForDrops()),
g_mod.TUTORIAL_TAB
);
public static final RegistryObject<Block> FU_GRASS = registerBlock("fu_grass",
() -> new Block(BlockBehaviour.Properties.copy(Blocks.GRASS_BLOCK)
.strength(0.7f, 10.0f)),
g_mod.TUTORIAL_TAB
);
public static final RegistryObject<Block> FU_ORE = registerBlock("fu_ore",
() -> new DropExperienceBlock(BlockBehaviour.Properties.copy(Blocks.STONE)
.strength(5f)
.requiresCorrectToolForDrops()
.lightLevel(state -> 15),
UniformInt.of(3, 10)),
g_mod.TUTORIAL_TAB
);
public static final RegistryObject<Block> DEEP_FU_ORE = registerBlock("deep_fu_ore",
() -> new DropExperienceBlock(BlockBehaviour.Properties.copy(Blocks.STONE)
.strength(7f)
.requiresCorrectToolForDrops()
.lightLevel(state -> 15),
UniformInt.of(5, 15)),
g_mod.TUTORIAL_TAB
);
public static final RegistryObject<Block> FG_MACHINE = registerBlock("fg_machine",
() -> new BaseEntityBlock(BlockBehaviour.Properties.copy(Blocks.IRON_BLOCK)
.strength(3.5f, 10.0f)) {
@Override
public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
if (!level.isClientSide && player instanceof ServerPlayer) {
BlockEntity blockEntity = level.getBlockEntity(pos);
if (blockEntity instanceof MenuProvider) {
NetworkHooks.openScreen((ServerPlayer) player, (MenuProvider) blockEntity, pos);
}
}
return InteractionResult.sidedSuccess(level.isClientSide);
}
@Override
public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = level.getBlockEntity(pos);
if (blockEntity instanceof FGMachineBlockEntity) {
((FGMachineBlockEntity) blockEntity).drops();
}
}
super.onRemove(state, level, pos, newState, isMoving);
}
@Nullable
@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return new FGMachineBlockEntity(pos, state);
}
@Nullable
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> type) {
return createTickerHelper(type, BlockEntityInit.FG_MACHINE_BLOCK_ENTITY.get(), FGMachineBlockEntity::tick);
}
},
g_mod.TUTORIAL_TAB
);
private static <T extends Block> RegistryObject<T> registerBlock(String name, Supplier<T> block, CreativeModeTab tab) {
RegistryObject<T> toReturn = BLOCKS.register(name, block);
registerBlockItem(name, toReturn, tab);
return toReturn;
}
private static <T extends Block> void registerBlockItem(String name, RegistryObject<T> block, CreativeModeTab tab) {
ITEMS.register(name, () -> new BlockItem(block.get(),
new Item.Properties().tab(tab))); // 添加.tab(tab)
}
}
BlockEntityInit.java:
// BlockEntityInit.java
package com.GaoHY.GaoHY_mod.Init;
import com.GaoHY.GaoHY_mod.g_mod;
import com.GaoHY.GaoHY_mod.blockentities.FGMachineBlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class BlockEntityInit {
public static final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITIES =
DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, g_mod.MODID);
public static final RegistryObject<BlockEntityType<FGMachineBlockEntity>> FG_MACHINE_BLOCK_ENTITY =
BLOCK_ENTITIES.register("fg_machine_block_entity",
() -> BlockEntityType.Builder.of(FGMachineBlockEntity::new, BlockInit.FG_MACHINE.get()).build(null));
}