diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index c26a51dd8..c322f3857 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -13,6 +13,7 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientMouseHandler; import com.atsuishio.superbwarfare.init.*; +import com.atsuishio.superbwarfare.item.ItemScreenProvider; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.network.message.send.*; import com.atsuishio.superbwarfare.tools.NBTTool; @@ -272,14 +273,21 @@ public class ClickHandler { if (key == ModKeyMappings.DISMOUNT.getKey().getValue()) { handleDismountPress(player); } - if (key == ModKeyMappings.EDIT_MODE.getKey().getValue() && ClientEventHandler.burstFireAmount == 0 - && stack.getItem() instanceof GunItem gunItem && gunItem.isCustomizable(stack)) { - ClientEventHandler.holdFire = false; + if (key == ModKeyMappings.EDIT_MODE.getKey().getValue()) { + if (ClientEventHandler.burstFireAmount == 0 && stack.getItem() instanceof GunItem gunItem && gunItem.isCustomizable(stack)) { + ClientEventHandler.holdFire = false; - if (!isEditing) { - player.playSound(ModSounds.EDIT_MODE.get(), 1, 1); + if (!isEditing) { + player.playSound(ModSounds.EDIT_MODE.get(), 1, 1); + } + isEditing = !isEditing; + } + if (stack.getItem() instanceof ItemScreenProvider provider) { + var screen = provider.getItemScreen(stack, player); + if (screen != null) { + Minecraft.getInstance().setScreen(screen); + } } - isEditing = !isEditing; } if (key == ModKeyMappings.BREATH.getKey().getValue() && !exhaustion && zoom) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/FiringParametersScreen.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/FiringParametersScreen.java index c4021b603..d0cec3d57 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/FiringParametersScreen.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/FiringParametersScreen.java @@ -1,10 +1,12 @@ package com.atsuishio.superbwarfare.client.screens; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; +import org.jetbrains.annotations.NotNull; // TODO 完成这个screen @OnlyIn(Dist.CLIENT) @@ -13,8 +15,13 @@ public class FiringParametersScreen extends Screen { public static final Component TITLE = Component.translatable("item.superbwarfare.firing_parameters"); private final ItemStack stack; - protected FiringParametersScreen(ItemStack stack) { + public FiringParametersScreen(ItemStack stack) { super(TITLE); this.stack = stack; } + + @Override + public void render(@NotNull GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) { + super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick); + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/FiringParameters.java b/src/main/java/com/atsuishio/superbwarfare/item/FiringParameters.java index 29dd6d742..dcfb155fb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/FiringParameters.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/FiringParameters.java @@ -1,7 +1,9 @@ package com.atsuishio.superbwarfare.item; +import com.atsuishio.superbwarfare.client.screens.FiringParametersScreen; import com.atsuishio.superbwarfare.component.ModDataComponents; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; @@ -13,12 +15,15 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import org.jetbrains.annotations.NotNull; +import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import java.util.List; -public class FiringParameters extends Item { +public class FiringParameters extends Item implements ItemScreenProvider { public record Parameters(BlockPos pos, boolean isDepressed) { } @@ -84,4 +89,10 @@ public class FiringParameters extends Item { : "tips.superbwarfare.mortar.target_pos.lofted_trajectory" ).withStyle(ChatFormatting.GRAY)); } + + @OnlyIn(Dist.CLIENT) + @Override + public @Nullable Screen getItemScreen(ItemStack stack, Player player) { + return new FiringParametersScreen(stack); + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/ItemScreenProvider.java b/src/main/java/com/atsuishio/superbwarfare/item/ItemScreenProvider.java new file mode 100644 index 000000000..0809a56ee --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/item/ItemScreenProvider.java @@ -0,0 +1,14 @@ +package com.atsuishio.superbwarfare.item; + +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import org.jetbrains.annotations.Nullable; + +public interface ItemScreenProvider { + + @OnlyIn(Dist.CLIENT) + @Nullable Screen getItemScreen(ItemStack stack, Player player); +}