From 44d33495db59e7a480b1cae41ab0a538ec3f1421 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sun, 30 Mar 2025 13:01:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E5=85=85=E7=94=B5=E7=AB=99?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/CreativeChargingStationBlock.java | 59 ++++++++++- .../CreativeChargingStationBlockEntity.java | 33 ++++++- .../client/ClientRenderHandler.java | 6 +- .../ChargingStationBlockEntityRenderer.java | 2 +- ...iveChargingStationBlockEntityRenderer.java | 97 +++++++++++++++++++ .../client/screens/ChargingStationScreen.java | 5 +- .../item/ChargingStationBlockItem.java | 11 +++ .../CreativeChargingStationBlockItem.java | 12 +++ .../send/ShowChargingRangeMessage.java | 36 +++++++ .../assets/superbwarfare/lang/en_us.json | 5 + .../assets/superbwarfare/lang/zh_cn.json | 5 + 11 files changed, 257 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/client/renderer/block/CreativeChargingStationBlockEntityRenderer.java create mode 100644 src/main/java/com/atsuishio/superbwarfare/network/message/send/ShowChargingRangeMessage.java diff --git a/src/main/java/com/atsuishio/superbwarfare/block/CreativeChargingStationBlock.java b/src/main/java/com/atsuishio/superbwarfare/block/CreativeChargingStationBlock.java index 3100150cb..bc993b06b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/block/CreativeChargingStationBlock.java +++ b/src/main/java/com/atsuishio/superbwarfare/block/CreativeChargingStationBlock.java @@ -3,8 +3,15 @@ package com.atsuishio.superbwarfare.block; import com.atsuishio.superbwarfare.block.entity.CreativeChargingStationBlockEntity; import com.atsuishio.superbwarfare.init.ModBlockEntities; import com.mojang.serialization.MapCodec; +import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.*; @@ -14,7 +21,10 @@ 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.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.phys.BlockHitResult; +import net.neoforged.neoforge.capabilities.Capabilities; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -23,9 +33,11 @@ import javax.annotation.ParametersAreNonnullByDefault; public class CreativeChargingStationBlock extends BaseEntityBlock { public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; + public static final BooleanProperty SHOW_RANGE = BooleanProperty.create("show_range"); public CreativeChargingStationBlock() { this(Properties.of().sound(SoundType.METAL).strength(3.0f).requiresCorrectToolForDrops()); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(SHOW_RANGE, false)); } public CreativeChargingStationBlock(BlockBehaviour.Properties properties) { @@ -76,14 +88,57 @@ public class CreativeChargingStationBlock extends BaseEntityBlock { super.onRemove(pState, pLevel, pPos, pNewState, pMovedByPiston); } + @Override + @ParametersAreNonnullByDefault + protected @NotNull ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (cap == null) return ItemInteractionResult.FAIL; + + if (cap.canReceive() && cap.getEnergyStored() < cap.getMaxEnergyStored()) { + cap.receiveEnergy(Integer.MAX_VALUE, false); + if (!level.isClientSide) { + player.displayClientMessage(Component.translatable("des.superbwarfare.creative_charging_station.charge.success").withStyle(ChatFormatting.GREEN), true); + } + } else if (cap.canExtract()) { + cap.extractEnergy(Integer.MAX_VALUE, false); + if (!level.isClientSide) { + player.displayClientMessage(Component.translatable("des.superbwarfare.creative_charging_station.extract.success").withStyle(ChatFormatting.GREEN), true); + } + } else { + if (!level.isClientSide) { + player.displayClientMessage(Component.translatable("des.superbwarfare.creative_charging_station.fail").withStyle(ChatFormatting.RED), true); + } + return ItemInteractionResult.FAIL; + } + + return ItemInteractionResult.SUCCESS; + } + + // TODO 如何交互? + @Override + @ParametersAreNonnullByDefault + protected @NotNull InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { + var blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof CreativeChargingStationBlockEntity station) { + if (level.isClientSide) { + return InteractionResult.SUCCESS; + } + + station.showRange = !station.showRange; + level.sendBlockUpdated(pos, state, state, Block.UPDATE_CLIENTS); + return InteractionResult.SUCCESS; + } + return InteractionResult.sidedSuccess(level.isClientSide); + } + @Override protected void createBlockStateDefinition(StateDefinition.Builder pBuilder) { - pBuilder.add(FACING); + pBuilder.add(FACING).add(SHOW_RANGE); } @Nullable @Override public BlockState getStateForPlacement(BlockPlaceContext pContext) { - return this.defaultBlockState().setValue(FACING, pContext.getHorizontalDirection().getOpposite()); + return this.defaultBlockState().setValue(FACING, pContext.getHorizontalDirection().getOpposite()).setValue(SHOW_RANGE, false); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/block/entity/CreativeChargingStationBlockEntity.java b/src/main/java/com/atsuishio/superbwarfare/block/entity/CreativeChargingStationBlockEntity.java index a6b094f67..4069f3a50 100644 --- a/src/main/java/com/atsuishio/superbwarfare/block/entity/CreativeChargingStationBlockEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/block/entity/CreativeChargingStationBlockEntity.java @@ -4,6 +4,11 @@ import com.atsuishio.superbwarfare.capability.energy.InfinityEnergyStorage; import com.atsuishio.superbwarfare.init.ModBlockEntities; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.block.entity.BlockEntity; @@ -11,8 +16,10 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.energy.IEnergyStorage; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; import java.util.List; /** @@ -22,6 +29,27 @@ public class CreativeChargingStationBlockEntity extends BlockEntity { public static final int CHARGE_RADIUS = 8; + public boolean showRange = false; + + @Override + public @NotNull CompoundTag getUpdateTag(HolderLookup.@NotNull Provider registries) { + CompoundTag tag = new CompoundTag(); + tag.putBoolean("ShowRange", this.showRange); + saveAdditional(tag, registries); + return tag; + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + @ParametersAreNonnullByDefault + public void onDataPacket(Connection connection, ClientboundBlockEntityDataPacket packet, HolderLookup.Provider registries) { + super.onDataPacket(connection, packet, registries); + this.showRange = packet.getTag().getBoolean("ShowRange"); + } public CreativeChargingStationBlockEntity(BlockPos pos, BlockState state) { super(ModBlockEntities.CREATIVE_CHARGING_STATION.get(), pos, state); @@ -64,11 +92,6 @@ public class CreativeChargingStationBlockEntity extends BlockEntity { } } - @Override - public ClientboundBlockEntityDataPacket getUpdatePacket() { - return ClientboundBlockEntityDataPacket.create(this); - } - private final IEnergyStorage energyStorage = new InfinityEnergyStorage(); @Nullable diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java index 804d60a3e..0df4485ea 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java @@ -1,9 +1,6 @@ package com.atsuishio.superbwarfare.client; -import com.atsuishio.superbwarfare.client.renderer.block.ChargingStationBlockEntityRenderer; -import com.atsuishio.superbwarfare.client.renderer.block.ContainerBlockEntityRenderer; -import com.atsuishio.superbwarfare.client.renderer.block.FuMO25BlockEntityRenderer; -import com.atsuishio.superbwarfare.client.renderer.block.SmallContainerBlockEntityRenderer; +import com.atsuishio.superbwarfare.client.renderer.block.*; import com.atsuishio.superbwarfare.client.tooltip.*; import com.atsuishio.superbwarfare.client.tooltip.component.*; import com.atsuishio.superbwarfare.init.ModBlockEntities; @@ -34,6 +31,7 @@ public class ClientRenderHandler { event.registerBlockEntityRenderer(ModBlockEntities.CONTAINER.get(), context -> new ContainerBlockEntityRenderer()); event.registerBlockEntityRenderer(ModBlockEntities.FUMO_25.get(), context -> new FuMO25BlockEntityRenderer()); event.registerBlockEntityRenderer(ModBlockEntities.CHARGING_STATION.get(), context -> new ChargingStationBlockEntityRenderer()); + event.registerBlockEntityRenderer(ModBlockEntities.CREATIVE_CHARGING_STATION.get(), context -> new CreativeChargingStationBlockEntityRenderer()); event.registerBlockEntityRenderer(ModBlockEntities.SMALL_CONTAINER.get(), context -> new SmallContainerBlockEntityRenderer()); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ChargingStationBlockEntityRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ChargingStationBlockEntityRenderer.java index efe99a013..bb0697c93 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ChargingStationBlockEntityRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ChargingStationBlockEntityRenderer.java @@ -18,7 +18,7 @@ import javax.annotation.ParametersAreNonnullByDefault; public class ChargingStationBlockEntityRenderer implements BlockEntityRenderer { @Override - public void render(ChargingStationBlockEntity blockEntity, float partialTick, @NotNull PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay) { + public void render(ChargingStationBlockEntity blockEntity, float partialTick, @NotNull PoseStack poseStack, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) { if (!blockEntity.getBlockState().getValue(ChargingStationBlock.SHOW_RANGE)) return; poseStack.pushPose(); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/CreativeChargingStationBlockEntityRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/CreativeChargingStationBlockEntityRenderer.java new file mode 100644 index 000000000..5ac99009d --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/CreativeChargingStationBlockEntityRenderer.java @@ -0,0 +1,97 @@ +package com.atsuishio.superbwarfare.client.renderer.block; + +import com.atsuishio.superbwarfare.block.ChargingStationBlock; +import com.atsuishio.superbwarfare.block.entity.CreativeChargingStationBlockEntity; +import com.atsuishio.superbwarfare.client.renderer.CustomRenderType; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.ParametersAreNonnullByDefault; + +@OnlyIn(Dist.CLIENT) +public class CreativeChargingStationBlockEntityRenderer implements BlockEntityRenderer { + + @Override + public void render(CreativeChargingStationBlockEntity blockEntity, float partialTick, @NotNull PoseStack poseStack, @NotNull MultiBufferSource bufferSource, int packedLight, int packedOverlay) { + if (!blockEntity.getBlockState().hasProperty(ChargingStationBlock.SHOW_RANGE) || !blockEntity.getBlockState().getValue(ChargingStationBlock.SHOW_RANGE)) + return; + + poseStack.pushPose(); + var pos = blockEntity.getBlockPos(); + poseStack.translate(-pos.getX(), -pos.getY(), -pos.getZ()); + + var aabb = new AABB(pos).inflate(CreativeChargingStationBlockEntity.CHARGE_RADIUS); + + float startX = (float) aabb.minX - 0.001f; + float startY = (float) aabb.minY - 0.001f; + float startZ = (float) aabb.minZ - 0.001f; + float endX = (float) aabb.maxX + 0.001f; + float endY = (float) aabb.maxY + 0.001f; + float endZ = (float) aabb.maxZ + 0.001f; + + var red = 0.0f; + var green = 1.0f; + var blue = 0.0f; + var alpha = 0.2f; + + + var builder = bufferSource.getBuffer(CustomRenderType.BLOCK_OVERLAY); + var m4f = poseStack.last().pose(); + + // east + builder.addVertex(m4f, startX, startY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, startX, endY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, endY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, startY, startZ).setColor(red, green, blue, alpha); + + // west + builder.addVertex(m4f, startX, startY, endZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, startY, endZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, endY, endZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, startX, endY, endZ).setColor(red, green, blue, alpha); + + // south + builder.addVertex(m4f, endX, startY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, endY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, endY, endZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, startY, endZ).setColor(red, green, blue, alpha); + + // north + builder.addVertex(m4f, startX, startY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, startX, startY, endZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, startX, endY, endZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, startX, endY, startZ).setColor(red, green, blue, alpha); + + // top + builder.addVertex(m4f, startX, endY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, endY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, endY, endZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, startX, endY, endZ).setColor(red, green, blue, alpha); + + // bottom + builder.addVertex(m4f, startX, startY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, startY, startZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, endX, startY, endZ).setColor(red, green, blue, alpha); + builder.addVertex(m4f, startX, startY, endZ).setColor(red, green, blue, alpha); + + poseStack.popPose(); + } + + @Override + public boolean shouldRenderOffScreen(@NotNull CreativeChargingStationBlockEntity blockEntity) { + return true; + } + + @Override + @ParametersAreNonnullByDefault + public boolean shouldRender(CreativeChargingStationBlockEntity blockEntity, Vec3 pCameraPos) { + return true; + } + +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/ChargingStationScreen.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/ChargingStationScreen.java index 0398d6ec2..db26430ae 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/ChargingStationScreen.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/ChargingStationScreen.java @@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.client.screens; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.block.entity.ChargingStationBlockEntity; import com.atsuishio.superbwarfare.menu.ChargingStationMenu; +import com.atsuishio.superbwarfare.network.message.send.ShowChargingRangeMessage; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; import net.minecraft.client.gui.narration.NarrationElementOutput; @@ -12,6 +13,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.network.PacketDistributor; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -91,8 +93,7 @@ public class ChargingStationScreen extends AbstractContainerScreen getTooltipImage(@NotNull ItemStack pStack) { return Optional.of(new ChargingStationImageComponent(pStack)); } + + @Override + @ParametersAreNonnullByDefault + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("des.superbwarfare.charging_station").withStyle(ChatFormatting.GRAY)); + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/CreativeChargingStationBlockItem.java b/src/main/java/com/atsuishio/superbwarfare/item/CreativeChargingStationBlockItem.java index c3161366c..d53cb34de 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/CreativeChargingStationBlockItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/CreativeChargingStationBlockItem.java @@ -2,11 +2,18 @@ package com.atsuishio.superbwarfare.item; import com.atsuishio.superbwarfare.capability.energy.InfinityEnergyStorage; import com.atsuishio.superbwarfare.init.ModBlocks; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.TooltipFlag; import net.neoforged.neoforge.energy.IEnergyStorage; import org.jetbrains.annotations.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; + public class CreativeChargingStationBlockItem extends BlockItem { public CreativeChargingStationBlockItem() { @@ -19,4 +26,9 @@ public class CreativeChargingStationBlockItem extends BlockItem { return energy; } + @Override + @ParametersAreNonnullByDefault + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("des.superbwarfare.creative_charging_station").withStyle(ChatFormatting.GRAY)); + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/ShowChargingRangeMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/ShowChargingRangeMessage.java new file mode 100644 index 000000000..3f3a69f4f --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/ShowChargingRangeMessage.java @@ -0,0 +1,36 @@ +package com.atsuishio.superbwarfare.network.message.send; + +import com.atsuishio.superbwarfare.Mod; +import com.atsuishio.superbwarfare.menu.ChargingStationMenu; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import org.jetbrains.annotations.NotNull; + +public record ShowChargingRangeMessage(boolean operation) implements CustomPacketPayload { + public static final Type TYPE = new Type<>(Mod.loc("show_charging_range")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BOOL, + ShowChargingRangeMessage::operation, + ShowChargingRangeMessage::new + ); + + + public static void handler(ShowChargingRangeMessage message, final IPayloadContext context) { + var player = context.player(); + var menu = player.containerMenu; + if (menu instanceof ChargingStationMenu chargingStationMenu) { + if (!chargingStationMenu.stillValid(player)) return; + + chargingStationMenu.setShowRange(message.operation); + } + } + + @Override + public @NotNull Type type() { + return TYPE; + } +} diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 1583dabd4..440446f4d 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -235,10 +235,15 @@ "block.superbwarfare.silver_block": "Silver Block", "block.superbwarfare.cemented_carbide_block": "Cemented Carbide Block", "block.superbwarfare.charging_station": "Charging Station", + "des.superbwarfare.charging_station": "Charge nearby entities and adjacent blocks", "container.superbwarfare.charging_station.show_range": "Show Range", "container.superbwarfare.charging_station.hide_range": "Hide Range", "des.superbwarfare.charging_station.energy": "Energy: %1$s / %2$s FE", "block.superbwarfare.creative_charging_station": "Creative Charging Station", + "des.superbwarfare.creative_charging_station": "Charge nearby entities and adjacent blocks, can also be used as a power source item", + "des.superbwarfare.creative_charging_station.charge.success": "Successfully charged this item!", + "des.superbwarfare.creative_charging_station.extract.success": "Successfully cleared energy from this item!", + "des.superbwarfare.creative_charging_station.fail": "Unable to operate this item!", "block.superbwarfare.fumo_25": "FuMO25 Fire Control Radar", "des.superbwarfare.fumo_25.current_pos": "Current Pos: %1$s", "des.superbwarfare.fumo_25.current_target": "Target: %1$s", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 454b171b7..327cc7ef0 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -235,8 +235,13 @@ "block.superbwarfare.cemented_carbide_block": "硬质合金块", "block.superbwarfare.steel_block": "钢块", "block.superbwarfare.charging_station": "充电站", + "des.superbwarfare.charging_station": "充能附近的实体和相邻方块", "des.superbwarfare.charging_station.energy": "能量:%1$s / %2$s FE", "block.superbwarfare.creative_charging_station": "创造模式充电站", + "des.superbwarfare.creative_charging_station": "充能附近的实体和相邻方块,也可以作为电源物品使用", + "des.superbwarfare.creative_charging_station.charge.success": "成功充能该物品!", + "des.superbwarfare.creative_charging_station.extract.success": "成功清空该物品的能量!", + "des.superbwarfare.creative_charging_station.fail": "无法操作该物品!", "block.superbwarfare.fumo_25": "FuMO25火控雷达", "des.superbwarfare.fumo_25.current_pos": "当前坐标:%1$s", "des.superbwarfare.fumo_25.current_target": "目标:%1$s",