添加集装箱开启提示

This commit is contained in:
17146 2024-11-28 21:13:52 +08:00
parent f8fe42a253
commit 38c751818d
5 changed files with 50 additions and 14 deletions

View file

@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.block;
import com.atsuishio.superbwarfare.block.entity.ContainerBlockEntity; import com.atsuishio.superbwarfare.block.entity.ContainerBlockEntity;
import com.atsuishio.superbwarfare.init.ModBlockEntities; import com.atsuishio.superbwarfare.init.ModBlockEntities;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@ -47,20 +48,32 @@ public class ContainerBlock extends BaseEntityBlock {
public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) { public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) {
if (!pLevel.isClientSide) { if (!pLevel.isClientSide) {
ItemStack stack = pPlayer.getItemInHand(pHand); ItemStack stack = pPlayer.getItemInHand(pHand);
if (stack.is(ModItems.CROWBAR.get()) && canOpen(pLevel, pPos)) { if (stack.is(ModItems.CROWBAR.get())) {
if (!hasEntity(pLevel, pPos)) {
pPlayer.displayClientMessage(Component.translatable("des.superbwarfare.container.fail.empty"), true);
return InteractionResult.PASS;
}
if (canOpen(pLevel, pPos)) {
pLevel.setBlockAndUpdate(pPos, pState.setValue(OPENED, true)); pLevel.setBlockAndUpdate(pPos, pState.setValue(OPENED, true));
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} else {
pPlayer.displayClientMessage(Component.translatable("des.superbwarfare.container.fail.open"), true);
}
} else {
pPlayer.displayClientMessage(Component.translatable("des.superbwarfare.container.fail.crowbar"), true);
} }
pPlayer.displayClientMessage(Component.literal("打不开哼哼啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"), true);
} }
return InteractionResult.PASS; return InteractionResult.PASS;
} }
public boolean canOpen(Level pLevel, BlockPos pPos) { public boolean hasEntity(Level pLevel, BlockPos pPos) {
BlockEntity blockEntity = pLevel.getBlockEntity(pPos); BlockEntity blockEntity = pLevel.getBlockEntity(pPos);
if (!(blockEntity instanceof ContainerBlockEntity containerBlockEntity)) return false; if (!(blockEntity instanceof ContainerBlockEntity containerBlockEntity)) return false;
if (containerBlockEntity.entity == null && containerBlockEntity.entityType == null) return false; return containerBlockEntity.entity != null || containerBlockEntity.entityType != null;
}
public boolean canOpen(Level pLevel, BlockPos pPos) {
boolean flag = true; boolean flag = true;
for (int i = -4; i < 5; i++) { for (int i = -4; i < 5; i++) {
@ -93,15 +106,23 @@ public class ContainerBlock extends BaseEntityBlock {
super.appendHoverText(pStack, pLevel, pTooltip, pFlag); super.appendHoverText(pStack, pLevel, pTooltip, pFlag);
CompoundTag compoundtag = BlockItem.getBlockEntityData(pStack); CompoundTag compoundtag = BlockItem.getBlockEntityData(pStack);
if (compoundtag != null) { if (compoundtag != null) {
if (compoundtag.contains("Entity")) {
pTooltip.add(Component.literal("Entity: " + compoundtag.getString("Entity")));
}
if (compoundtag.contains("EntityType")) { if (compoundtag.contains("EntityType")) {
pTooltip.add(Component.literal("EntityType: " + compoundtag.getString("EntityType"))); String s = getTranslationKey(compoundtag.getString("EntityType"));
pTooltip.add(Component.translatable(s == null ? "des.superbwarfare.container.empty" : s).withStyle(ChatFormatting.GRAY));
} }
} }
} }
@Nullable
public String getTranslationKey(String path) {
String[] parts = path.split(":");
if (parts.length > 1) {
return "entity." + parts[0] + "." + parts[1];
} else {
return null;
}
}
@Override @Override
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
return state.getValue(OPENED) ? box(1, 0, 1, 15, 14, 15) : box(0, 0, 0, 16, 15, 16); return state.getValue(OPENED) ? box(1, 0, 1, 15, 14, 15) : box(0, 0, 0, 16, 15, 16);

View file

@ -102,12 +102,14 @@ public class ModTabs {
.icon(() -> new ItemStack(ModItems.TARGET_DEPLOYER.get())) .icon(() -> new ItemStack(ModItems.TARGET_DEPLOYER.get()))
.withTabsBefore(AMMO_TAB.getKey()) .withTabsBefore(AMMO_TAB.getKey())
.displayItems((param, output) -> ModItems.ITEMS.getEntries().forEach(registryObject -> { .displayItems((param, output) -> ModItems.ITEMS.getEntries().forEach(registryObject -> {
if (registryObject.get() == ModItems.CONTAINER.get()) {
output.accept(ContainerBlockItem.createMk42Instance());
output.accept(ContainerBlockItem.createMle1934Instance());
} else {
output.accept(registryObject.get()); output.accept(registryObject.get());
if (registryObject.get() == ModItems.ARMOR_PLATE.get()) { if (registryObject.get() == ModItems.ARMOR_PLATE.get()) {
output.accept(ArmorPlate.getInfiniteInstance()); output.accept(ArmorPlate.getInfiniteInstance());
} }
if (registryObject.get() == ModItems.CONTAINER.get()) {
output.accept(ContainerBlockItem.createMk42Instance());
} }
})) }))
.build()); .build());

View file

@ -61,6 +61,7 @@ public class ContainerBlockItem extends BlockItem implements GeoItem {
ItemStack stack = new ItemStack(ModBlocks.CONTAINER.get()); ItemStack stack = new ItemStack(ModBlocks.CONTAINER.get());
CompoundTag tag = new CompoundTag(); CompoundTag tag = new CompoundTag();
tag.put("Entity", entity.serializeNBT()); tag.put("Entity", entity.serializeNBT());
tag.putString("EntityType", EntityType.getKey(entity.getType()).toString());
BlockItem.setBlockEntityData(stack, ModBlockEntities.CONTAINER.get(), tag); BlockItem.setBlockEntityData(stack, ModBlockEntities.CONTAINER.get(), tag);
return stack; return stack;
} }
@ -76,4 +77,8 @@ public class ContainerBlockItem extends BlockItem implements GeoItem {
public static ItemStack createMk42Instance() { public static ItemStack createMk42Instance() {
return createInstance(ModEntities.MK_42.get()); return createInstance(ModEntities.MK_42.get());
} }
public static ItemStack createMle1934Instance() {
return createInstance(ModEntities.MLE_1934.get());
}
} }

View file

@ -150,6 +150,10 @@
"item.superbwarfare.javelin_missile": "Javelin Missile", "item.superbwarfare.javelin_missile": "Javelin Missile",
"block.superbwarfare.container": "Container", "block.superbwarfare.container": "Container",
"des.superbwarfare.container.empty": "空的",
"des.superbwarfare.container.fail.empty": "这个箱子是空的",
"des.superbwarfare.container.fail.open": "没有足够的空间",
"des.superbwarfare.container.fail.crowbar": "或许应该换个工具试试",
"item.superbwarfare.firing_parameters": "Firing Parameters", "item.superbwarfare.firing_parameters": "Firing Parameters",
"item.superbwarfare.ancient_cpu": "Ancient CPU", "item.superbwarfare.ancient_cpu": "Ancient CPU",
"item.superbwarfare.target_deployer": "Target", "item.superbwarfare.target_deployer": "Target",

View file

@ -150,6 +150,10 @@
"item.superbwarfare.javelin_missile": "标枪导弹", "item.superbwarfare.javelin_missile": "标枪导弹",
"block.superbwarfare.container": "集装箱", "block.superbwarfare.container": "集装箱",
"des.superbwarfare.container.empty": "空的",
"des.superbwarfare.container.fail.empty": "这个箱子是空的",
"des.superbwarfare.container.fail.open": "没有足够的空间",
"des.superbwarfare.container.fail.crowbar": "或许应该换个工具试试",
"item.superbwarfare.firing_parameters": "射击诸元", "item.superbwarfare.firing_parameters": "射击诸元",
"item.superbwarfare.ancient_cpu": "古代处理器", "item.superbwarfare.ancient_cpu": "古代处理器",
"item.superbwarfare.target_deployer": "标靶", "item.superbwarfare.target_deployer": "标靶",