From 22a54742d6938b55917bc4c9e15a740f562dba2a Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Tue, 18 Jun 2024 00:44:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=BB=9A=E8=BD=AE=E7=BC=A9?= =?UTF-8?q?=E6=94=BE=E7=9E=84=E5=87=86=E5=80=8D=E7=8E=87=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=88=A0=E9=99=A4=E8=BF=AB=E5=87=BB=E7=82=AEGUI?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E8=BF=AB=E5=87=BB=E7=82=AE=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../java/net/mcreator/target/TargetMod.java | 3 +- .../mcreator/target/client/ClickHandler.java | 32 +++- .../target/client/gui/MortarGUIScreen.java | 137 ------------------ .../mcreator/target/entity/MortarEntity.java | 37 ++--- .../target/event/ClientEventHandler.java | 4 +- .../target/init/TargetModScreens.java | 2 - .../mcreator/target/init/TargetModSounds.java | 3 +- .../message/AdjustMortarAngleMessage.java | 61 ++++++++ .../network/message/AdjustZoomFovMessage.java | 53 +++++++ .../message/MortarGUIButtonMessage.java | 95 ------------ src/main/resources/assets/target/sounds.json | 8 + .../assets/target/sounds/adjust_fov.ogg | Bin 0 -> 6502 bytes .../resources/data/target/guns/kraber.json | 2 + .../resources/data/target/guns/m_98b.json | 4 +- .../resources/data/target/guns/mk_14.json | 2 + 16 files changed, 174 insertions(+), 271 deletions(-) delete mode 100644 src/main/java/net/mcreator/target/client/gui/MortarGUIScreen.java create mode 100644 src/main/java/net/mcreator/target/network/message/AdjustMortarAngleMessage.java create mode 100644 src/main/java/net/mcreator/target/network/message/AdjustZoomFovMessage.java delete mode 100644 src/main/java/net/mcreator/target/network/message/MortarGUIButtonMessage.java create mode 100644 src/main/resources/assets/target/sounds/adjust_fov.ogg diff --git a/build.gradle b/build.gradle index 2a142afa0..9749e755d 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ def getGitCommitHash() { return stdout.toString().trim() } -version = '0.1.3-SNAPSHOT-' + getGitCommitHash() +version = '0.1.4-SNAPSHOT-' + getGitCommitHash() group = 'com.Atsushio.target' archivesBaseName = 'target' diff --git a/src/main/java/net/mcreator/target/TargetMod.java b/src/main/java/net/mcreator/target/TargetMod.java index 1786b0b31..d7b9aa4fb 100644 --- a/src/main/java/net/mcreator/target/TargetMod.java +++ b/src/main/java/net/mcreator/target/TargetMod.java @@ -95,13 +95,14 @@ public class TargetMod { addNetworkMessage(DoubleJumpMessage.class, DoubleJumpMessage::buffer, DoubleJumpMessage::new, DoubleJumpMessage::handler); addNetworkMessage(GunsDataMessage.class, GunsDataMessage::encode, GunsDataMessage::decode, GunsDataMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(FireMessage.class, FireMessage::buffer, FireMessage::new, FireMessage::handler); - addNetworkMessage(MortarGUIButtonMessage.class, MortarGUIButtonMessage::buffer, MortarGUIButtonMessage::new, MortarGUIButtonMessage::handler); addNetworkMessage(FireModeMessage.class, FireModeMessage::buffer, FireModeMessage::new, FireModeMessage::handler); addNetworkMessage(GunRecycleGuiButtonMessage.class, GunRecycleGuiButtonMessage::buffer, GunRecycleGuiButtonMessage::new, GunRecycleGuiButtonMessage::handler); addNetworkMessage(ReloadMessage.class, ReloadMessage::buffer, ReloadMessage::new, ReloadMessage::handler); addNetworkMessage(PlayerGunKillMessage.class, PlayerGunKillMessage::encode, PlayerGunKillMessage::decode, PlayerGunKillMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(ClientIndicatorMessage.class, ClientIndicatorMessage::encode, ClientIndicatorMessage::decode, ClientIndicatorMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(SensitivityMessage.class, SensitivityMessage::encode, SensitivityMessage::decode, SensitivityMessage::handler); + addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler); + addNetworkMessage(AdjustMortarAngleMessage.class, AdjustMortarAngleMessage::encode, AdjustMortarAngleMessage::decode, AdjustMortarAngleMessage::handler); event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)), Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), TargetModPotion.SHOCK.get()))); diff --git a/src/main/java/net/mcreator/target/client/ClickHandler.java b/src/main/java/net/mcreator/target/client/ClickHandler.java index a456bf25c..bb7fe83fb 100644 --- a/src/main/java/net/mcreator/target/client/ClickHandler.java +++ b/src/main/java/net/mcreator/target/client/ClickHandler.java @@ -2,18 +2,22 @@ package net.mcreator.target.client; import com.mojang.blaze3d.platform.InputConstants; import net.mcreator.target.TargetMod; +import net.mcreator.target.entity.MortarEntity; +import net.mcreator.target.entity.Target1Entity; +import net.mcreator.target.entity.TargetEntity; import net.mcreator.target.init.TargetModKeyMappings; import net.mcreator.target.init.TargetModMobEffects; import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.gun.GunItem; import net.mcreator.target.network.TargetModVariables; -import net.mcreator.target.network.message.FireMessage; -import net.mcreator.target.network.message.SensitivityMessage; -import net.mcreator.target.network.message.ZoomMessage; +import net.mcreator.target.network.message.*; +import net.mcreator.target.tools.TraceTool; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -106,11 +110,29 @@ public class ClickHandler { @SubscribeEvent public static void onMouseScrolling(InputEvent.MouseScrollingEvent event) { - if (notInGame()) return; - Player player = Minecraft.getInstance().player; + ItemStack stack = player.getMainHandItem(); + var tag = stack.getOrCreateTag(); + double scroll = event.getScrollDelta(); + + if (notInGame()) return; if (player == null) return; + if (stack.is(TargetModTags.Items.GUN) && (player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).zoom) { + if (tag.getDouble("min_zoom") != 0 && tag.getDouble("max_zoom") != 0) { + TargetMod.PACKET_HANDLER.sendToServer(new AdjustZoomFovMessage(scroll)); + } + event.setCanceled(true); + } + + Entity looking = TraceTool.findLookingEntity(player, 6); + if (looking == null) return; + if (looking instanceof MortarEntity && player.isShiftKeyDown()){ + TargetMod.PACKET_HANDLER.sendToServer(new AdjustMortarAngleMessage(scroll)); + event.setCanceled(true); + } + + if (Minecraft.getInstance().player.hasEffect(TargetModMobEffects.SHOCK.get())) { event.setCanceled(true); } diff --git a/src/main/java/net/mcreator/target/client/gui/MortarGUIScreen.java b/src/main/java/net/mcreator/target/client/gui/MortarGUIScreen.java deleted file mode 100644 index 649e54069..000000000 --- a/src/main/java/net/mcreator/target/client/gui/MortarGUIScreen.java +++ /dev/null @@ -1,137 +0,0 @@ -package net.mcreator.target.client.gui; - -import com.mojang.blaze3d.systems.RenderSystem; -import net.mcreator.target.TargetMod; -import net.mcreator.target.network.message.MortarGUIButtonMessage; -import net.mcreator.target.tools.TraceTool; -import net.mcreator.target.world.inventory.MortarGUIMenu; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; - -import java.text.DecimalFormat; -import java.util.HashMap; - -public class MortarGUIScreen extends AbstractContainerScreen { - private final static HashMap GUI_STATE = MortarGUIMenu.GUI_STATE; - private final int x, y, z; - private final Player entity; - Button button_angle_add_1; - Button button_angle_reduce_1; - Button button_angle_add_10; - Button button_angle_reduce_10; - Button button_angle_reduce_05; - Button button_angle_add_05; - - public MortarGUIScreen(MortarGUIMenu container, Inventory inventory, Component text) { - super(container, inventory, text); - this.x = container.x; - this.y = container.y; - this.z = container.z; - this.entity = container.entity; - this.imageWidth = 0; - this.imageHeight = 166; - } - - private static final ResourceLocation texture = new ResourceLocation("target:textures/screens/mortar_gui.png"); - - @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - this.renderBackground(guiGraphics); - super.render(guiGraphics, mouseX, mouseY, partialTicks); - this.renderTooltip(guiGraphics, mouseX, mouseY); - } - - @Override - protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) { - RenderSystem.setShaderColor(1, 1, 1, 1); - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight); - RenderSystem.disableBlend(); - } - - @Override - public boolean keyPressed(int key, int b, int c) { - if (key == 256) { - if (this.minecraft != null && this.minecraft.player != null) { - this.minecraft.player.closeContainer(); - } - return true; - } - return super.keyPressed(key, b, c); - } - - @Override - public void containerTick() { - super.containerTick(); - } - - private String getAngleString(Entity entity) { - if (entity == null) return ""; - Entity mortar = TraceTool.findLookingEntity(entity, 6); - if (mortar == null) return ""; - return "Angle: " + new DecimalFormat("##.#").format(-mortar.getXRot()); - } - - @Override - protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) { - guiGraphics.drawString(this.font, getAngleString(entity), -18, 98, -1, false); - - Entity looking = TraceTool.findLookingEntity(entity, 6); - var range = looking == null ? 0 : -looking.getXRot(); - - guiGraphics.drawString(this.font, Component.literal("Range:" + (int) RangeHelper.getRange(range)), -18, 108, -16711885, false); - } - - @Override - public void onClose() { - super.onClose(); - } - - @Override - public void init() { - super.init(); - button_angle_add_1 = Button.builder(Component.translatable("gui.target.mortar_gui.button_angle_add_1"), e -> { - TargetMod.PACKET_HANDLER.sendToServer(new MortarGUIButtonMessage(0, x, y, z)); - MortarGUIButtonMessage.handleButtonAction(entity, 0); - }).bounds(this.leftPos + 42, this.topPos + 124, 29, 20).build(); - GUI_STATE.put("button:button_angle_add_1", button_angle_add_1); - this.addRenderableWidget(button_angle_add_1); - button_angle_reduce_1 = Button.builder(Component.translatable("gui.target.mortar_gui.button_angle_reduce_1"), e -> { - TargetMod.PACKET_HANDLER.sendToServer(new MortarGUIButtonMessage(1, x, y, z)); - MortarGUIButtonMessage.handleButtonAction(entity, 1); - }).bounds(this.leftPos - 73, this.topPos + 124, 30, 20).build(); - GUI_STATE.put("button:button_angle_reduce_1", button_angle_reduce_1); - this.addRenderableWidget(button_angle_reduce_1); - button_angle_add_10 = Button.builder(Component.translatable("gui.target.mortar_gui.button_angle_add_10"), e -> { - TargetMod.PACKET_HANDLER.sendToServer(new MortarGUIButtonMessage(2, x, y, z)); - MortarGUIButtonMessage.handleButtonAction(entity, 2); - }).bounds(this.leftPos + 43, this.topPos + 151, 28, 20).build(); - GUI_STATE.put("button:button_angle_add_10", button_angle_add_10); - this.addRenderableWidget(button_angle_add_10); - button_angle_reduce_10 = Button.builder(Component.translatable("gui.target.mortar_gui.button_angle_reduce_10"), e -> { - TargetMod.PACKET_HANDLER.sendToServer(new MortarGUIButtonMessage(3, x, y, z)); - MortarGUIButtonMessage.handleButtonAction(entity, 3); - }).bounds(this.leftPos - 73, this.topPos + 151, 30, 20).build(); - GUI_STATE.put("button:button_angle_reduce_10", button_angle_reduce_10); - this.addRenderableWidget(button_angle_reduce_10); - button_angle_reduce_05 = Button.builder(Component.translatable("gui.target.mortar_gui.button_angle_reduce_05"), e -> { - TargetMod.PACKET_HANDLER.sendToServer(new MortarGUIButtonMessage(4, x, y, z)); - MortarGUIButtonMessage.handleButtonAction(entity, 4); - }).bounds(this.leftPos - 73, this.topPos + 97, 30, 20).build(); - GUI_STATE.put("button:button_angle_reduce_05", button_angle_reduce_05); - this.addRenderableWidget(button_angle_reduce_05); - button_angle_add_05 = Button.builder(Component.translatable("gui.target.mortar_gui.button_angle_add_05"), e -> { - TargetMod.PACKET_HANDLER.sendToServer(new MortarGUIButtonMessage(5, x, y, z)); - MortarGUIButtonMessage.handleButtonAction(entity, 5); - }).bounds(this.leftPos + 42, this.topPos + 97, 29, 20).build(); - GUI_STATE.put("button:button_angle_add_05", button_angle_add_05); - this.addRenderableWidget(button_angle_add_05); - } -} diff --git a/src/main/java/net/mcreator/target/entity/MortarEntity.java b/src/main/java/net/mcreator/target/entity/MortarEntity.java index 079b308fd..81da7a8d4 100644 --- a/src/main/java/net/mcreator/target/entity/MortarEntity.java +++ b/src/main/java/net/mcreator/target/entity/MortarEntity.java @@ -159,36 +159,19 @@ public class MortarEntity extends PathfinderMob implements GeoEntity, AnimatedEn @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { super.mobInteract(player, hand); - double x = this.getX(); - double y = this.getY(); - double z = this.getZ(); ItemStack mainHandItem = player.getMainHandItem(); - if (mainHandItem.getItem() == ItemStack.EMPTY.getItem()) { - if (player.isShiftKeyDown()) { - this.setYRot(player.getYRot()); - this.setXRot(this.getXRot()); - this.setYBodyRot(this.getYRot()); - this.setYHeadRot(this.getYRot()); - this.yRotO = this.getYRot(); - this.xRotO = this.getXRot(); - this.yBodyRotO = this.getYRot(); - this.yHeadRotO = this.getYRot(); - } else if (player instanceof ServerPlayer serverPlayer) { - NetworkHooks.openScreen(serverPlayer, new MenuProvider() { - @Override - public Component getDisplayName() { - return Component.literal("MortarGUI"); - } - - @Override - public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) { - return new MortarGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(BlockPos.containing(x, y, z))); - } - }, BlockPos.containing(x, y, z)); - } + if (player.isShiftKeyDown()) { + this.setYRot(player.getYRot()); + this.setXRot(this.getXRot()); + this.setYBodyRot(this.getYRot()); + this.setYHeadRot(this.getYRot()); + this.yRotO = this.getYRot(); + this.xRotO = this.getXRot(); + this.yBodyRotO = this.getYRot(); + this.yHeadRotO = this.getYRot(); } - if (mainHandItem.getItem() == TargetModItems.MORTAR_SHELLS.get() && !player.getCooldowns().isOnCooldown(TargetModItems.MORTAR_SHELLS.get())) { + if (mainHandItem.getItem() == TargetModItems.MORTAR_SHELLS.get() && !player.getCooldowns().isOnCooldown(TargetModItems.MORTAR_SHELLS.get()) && !player.isShiftKeyDown()) { player.getCooldowns().addCooldown(TargetModItems.MORTAR_SHELLS.get(), 30); if (!player.isCreative()) { player.getInventory().clearOrCountMatchingItems(p -> TargetModItems.MORTAR_SHELLS.get() == p.getItem(), 1, player.inventoryMenu.getCraftSlots()); diff --git a/src/main/java/net/mcreator/target/event/ClientEventHandler.java b/src/main/java/net/mcreator/target/event/ClientEventHandler.java index cfbb895f3..02b4c3726 100644 --- a/src/main/java/net/mcreator/target/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/target/event/ClientEventHandler.java @@ -1,6 +1,7 @@ package net.mcreator.target.event; import net.mcreator.target.init.TargetModAttributes; +import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModMobEffects; import net.mcreator.target.init.TargetModTags; import net.mcreator.target.network.TargetModVariables; @@ -385,7 +386,8 @@ public class ClientEventHandler { ItemStack stack = player.getMainHandItem(); double p = player.getPersistentData().getDouble("zoom_pos"); - double zoom = stack.getOrCreateTag().getDouble("zoom"); + + double zoom = stack.getOrCreateTag().getDouble("zoom") + stack.getOrCreateTag().getDouble("custom_zoom"); if (stack.is(TargetModTags.Items.GUN)) { event.setFOV(event.getFOV() / (1.0 + p * (zoom - 1))); diff --git a/src/main/java/net/mcreator/target/init/TargetModScreens.java b/src/main/java/net/mcreator/target/init/TargetModScreens.java index 3bd00aae7..c7b8fcf18 100644 --- a/src/main/java/net/mcreator/target/init/TargetModScreens.java +++ b/src/main/java/net/mcreator/target/init/TargetModScreens.java @@ -1,7 +1,6 @@ package net.mcreator.target.init; import net.mcreator.target.client.gui.GunRecycleGuiScreen; -import net.mcreator.target.client.gui.MortarGUIScreen; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -13,7 +12,6 @@ public class TargetModScreens { @SubscribeEvent public static void clientLoad(FMLClientSetupEvent event) { event.enqueueWork(() -> { - MenuScreens.register(TargetModMenus.MORTAR_GUI.get(), MortarGUIScreen::new); MenuScreens.register(TargetModMenus.GUN_RECYCLE_GUI.get(), GunRecycleGuiScreen::new); }); } diff --git a/src/main/java/net/mcreator/target/init/TargetModSounds.java b/src/main/java/net/mcreator/target/init/TargetModSounds.java index 2f7362b5f..01fc0f30d 100644 --- a/src/main/java/net/mcreator/target/init/TargetModSounds.java +++ b/src/main/java/net/mcreator/target/init/TargetModSounds.java @@ -181,5 +181,6 @@ public class TargetModSounds { public static final RegistryObject M_870_VERYFAR = REGISTRY.register("m_870_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "m_870_veryfar"))); public static final RegistryObject M_870_PREPARE_ALT = REGISTRY.register("m_870_preparealt", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "m_870_preparealt"))); public static final RegistryObject M_870_RELOAD_LOOP = REGISTRY.register("m_870_reloadloop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "m_870_reloadloop"))); - public static final RegistryObject BULLET_SUPPLY = REGISTRY.register("bulletsupply", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "bulletsupply"))); + public static final RegistryObject BULLET_SUPPLY = REGISTRY.register("bullet_supply", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "bullet_supply"))); + public static final RegistryObject ADJUST_FOV = REGISTRY.register("adjust_fov", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "adjust_fov"))); } diff --git a/src/main/java/net/mcreator/target/network/message/AdjustMortarAngleMessage.java b/src/main/java/net/mcreator/target/network/message/AdjustMortarAngleMessage.java new file mode 100644 index 000000000..cfb489932 --- /dev/null +++ b/src/main/java/net/mcreator/target/network/message/AdjustMortarAngleMessage.java @@ -0,0 +1,61 @@ +package net.mcreator.target.network.message; + +import net.mcreator.target.client.gui.RangeHelper; +import net.mcreator.target.entity.MortarEntity; +import net.mcreator.target.init.TargetModAttributes; +import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; +import net.mcreator.target.tools.SoundTool; +import net.mcreator.target.tools.TraceTool; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class AdjustMortarAngleMessage { + private final double scroll; + + public AdjustMortarAngleMessage(double scroll) { + this.scroll = scroll; + } + + public static void encode(AdjustMortarAngleMessage message, FriendlyByteBuf byteBuf) { + byteBuf.writeDouble(message.scroll); + } + + public static AdjustMortarAngleMessage decode(FriendlyByteBuf byteBuf) { + return new AdjustMortarAngleMessage(byteBuf.readDouble()); + } + + public static void handler(AdjustMortarAngleMessage message, Supplier context) { + context.get().enqueueWork(() -> { + ServerPlayer player = context.get().getSender(); + if (player == null) { + return; + } + + Entity looking = TraceTool.findLookingEntity(player, 6); + if (looking == null) return; + + double angle = 0; + + if (looking instanceof LivingEntity living){ + living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).setBaseValue(Mth.clamp(living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() + message.scroll,20,89)); + angle = living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue(); + } + + var range = -looking.getXRot(); + + player.displayClientMessage(Component.literal("Angle:" + new java.text.DecimalFormat("##.#").format(angle) + " Range:" + new java.text.DecimalFormat("##.#").format((int) RangeHelper.getRange(range)) + "M"), true); + SoundTool.playLocalSound(player, TargetModSounds.ADJUST_FOV.get(), 1f, 0.7f); + }); + context.get().setPacketHandled(true); + } + +} diff --git a/src/main/java/net/mcreator/target/network/message/AdjustZoomFovMessage.java b/src/main/java/net/mcreator/target/network/message/AdjustZoomFovMessage.java new file mode 100644 index 000000000..6ec91516a --- /dev/null +++ b/src/main/java/net/mcreator/target/network/message/AdjustZoomFovMessage.java @@ -0,0 +1,53 @@ +package net.mcreator.target.network.message; + +import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.TargetModTags; +import net.mcreator.target.tools.SoundTool; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class AdjustZoomFovMessage { + private final double scroll; + + public AdjustZoomFovMessage(double scroll) { + this.scroll = scroll; + } + + public static void encode(AdjustZoomFovMessage message, FriendlyByteBuf byteBuf) { + byteBuf.writeDouble(message.scroll); + } + + public static AdjustZoomFovMessage decode(FriendlyByteBuf byteBuf) { + return new AdjustZoomFovMessage(byteBuf.readDouble()); + } + + public static void handler(AdjustZoomFovMessage message, Supplier context) { + context.get().enqueueWork(() -> { + ServerPlayer player = context.get().getSender(); + if (player == null) { + return; + } + + ItemStack stack = player.getMainHandItem(); + var tag = stack.getOrCreateTag(); + if (!stack.is(TargetModTags.Items.GUN)) { + return; + } + + double min_zoom = tag.getDouble("min_zoom") - tag.getDouble("zoom"); + double max_zoom = tag.getDouble("max_zoom") - tag.getDouble("zoom"); + tag.putDouble("custom_zoom", Mth.clamp(tag.getDouble("custom_zoom") + 0.5 * message.scroll, min_zoom,max_zoom)); + if (tag.getDouble("custom_zoom") > min_zoom && tag.getDouble("custom_zoom") < max_zoom) { + SoundTool.playLocalSound(player, TargetModSounds.ADJUST_FOV.get(), 1f, 0.7f); + } + }); + context.get().setPacketHandled(true); + } + +} diff --git a/src/main/java/net/mcreator/target/network/message/MortarGUIButtonMessage.java b/src/main/java/net/mcreator/target/network/message/MortarGUIButtonMessage.java deleted file mode 100644 index 9d6f296c5..000000000 --- a/src/main/java/net/mcreator/target/network/message/MortarGUIButtonMessage.java +++ /dev/null @@ -1,95 +0,0 @@ -package net.mcreator.target.network.message; - -import net.mcreator.target.init.TargetModAttributes; -import net.mcreator.target.tools.TraceTool; -import net.minecraft.core.BlockPos; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraftforge.network.NetworkEvent; - -import java.util.function.Supplier; - -public class MortarGUIButtonMessage { - private final int buttonID, x, y, z; - - public MortarGUIButtonMessage(FriendlyByteBuf buffer) { - this.buttonID = buffer.readInt(); - this.x = buffer.readInt(); - this.y = buffer.readInt(); - this.z = buffer.readInt(); - } - - public MortarGUIButtonMessage(int buttonID, int x, int y, int z) { - this.buttonID = buttonID; - this.x = x; - this.y = y; - this.z = z; - } - - public static void buffer(MortarGUIButtonMessage message, FriendlyByteBuf buffer) { - buffer.writeInt(message.buttonID); - buffer.writeInt(message.x); - buffer.writeInt(message.y); - buffer.writeInt(message.z); - } - - public static void handler(MortarGUIButtonMessage message, Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> { - Player entity = context.getSender(); - - if (entity == null) return; - - int buttonID = message.buttonID; - int x = message.x; - int y = message.y; - int z = message.z; - - if (!entity.level().isLoaded(new BlockPos(x, y, z))) return; - - handleButtonAction(entity, buttonID); - }); - context.setPacketHandled(true); - } - - public static void handleButtonAction(Player player, int buttonID) { - Entity looking = TraceTool.findLookingEntity(player, 6); - if (looking == null) return; - if (looking instanceof LivingEntity living) { - switch (buttonID) { - case 0 -> { - if (living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() < 89) { - living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).setBaseValue((living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() + 1)); - } - } - case 1 -> { - if (living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() > 21) { - living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).setBaseValue((living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() - 1)); - } - } - case 2 -> { - if (living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() < 78) { - living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).setBaseValue((living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() + 10)); - } - } - case 3 -> { - if (living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() > 31) { - living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).setBaseValue((living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() - 10)); - } - } - case 4 -> { - if (living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() > 20.5) { - living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).setBaseValue((living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() - 0.5)); - } - } - case 5 -> { - if (living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() < 88.5) { - living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).setBaseValue((living.getAttribute(TargetModAttributes.MORTAR_PITCH.get()).getBaseValue() + 0.5)); - } - } - } - } - } -} diff --git a/src/main/resources/assets/target/sounds.json b/src/main/resources/assets/target/sounds.json index f4b870dff..a9bcebb93 100644 --- a/src/main/resources/assets/target/sounds.json +++ b/src/main/resources/assets/target/sounds.json @@ -1514,5 +1514,13 @@ "stream": false } ] + }, + "adjust_fov": { + "sounds": [ + { + "name": "target:adjust_fov", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/target/sounds/adjust_fov.ogg b/src/main/resources/assets/target/sounds/adjust_fov.ogg new file mode 100644 index 0000000000000000000000000000000000000000..dc94024a88feb7ecc739aa178b1fabaf4bed6206 GIT binary patch literal 6502 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/target/guns/kraber.json b/src/main/resources/data/target/guns/kraber.json index e0afd8f98..437902623 100644 --- a/src/main/resources/data/target/guns/kraber.json +++ b/src/main/resources/data/target/guns/kraber.json @@ -1,6 +1,8 @@ { "zoom_speed": 0.6, "zoom": 6, + "min_zoom": 4, + "max_zoom": 10, "bipod": 1, "dev": 6, "recoil_x": 0.008, diff --git a/src/main/resources/data/target/guns/m_98b.json b/src/main/resources/data/target/guns/m_98b.json index fa2d99c8b..5c3343bf9 100644 --- a/src/main/resources/data/target/guns/m_98b.json +++ b/src/main/resources/data/target/guns/m_98b.json @@ -1,6 +1,8 @@ { "zoom_speed": 0.75, - "zoom": 8, + "zoom": 6, + "min_zoom": 4, + "max_zoom": 8, "dev": 6, "recoil_x": 0.007, "recoil_y": 0.013, diff --git a/src/main/resources/data/target/guns/mk_14.json b/src/main/resources/data/target/guns/mk_14.json index 8ba89e2dc..f94cdd75c 100644 --- a/src/main/resources/data/target/guns/mk_14.json +++ b/src/main/resources/data/target/guns/mk_14.json @@ -1,6 +1,8 @@ { "zoom_speed": 0.85, "zoom": 4, + "min_zoom": 1.25, + "max_zoom": 6, "dev": 6, "bipod": 1, "recoil_x": 0.006,