From 9a8901823b10ecb5ec5f991625c1a0772ae2bb9a Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sun, 29 Sep 2024 13:19:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AC=AC=E4=B8=89=E4=BA=BA?= =?UTF-8?q?=E7=A7=B0=E8=B6=8A=E8=82=A9=E5=B0=84=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2e07f3c482445536d45c00e6abf223465c01c841 | 3 +- .../tags/items/is_auto_weapon.json | 19 ++++++++ .../client/screens/CrossHairOverlay.java | 2 +- .../datagen/ModItemTagProvider.java | 3 ++ .../event/ClientEventHandler.java | 44 +++++++++++++++++-- .../mcreator/superbwarfare/init/ModTags.java | 1 + .../superbwarfare/mixins/CameraMixin.java | 9 ++++ .../mixins/GameRendererMixin.java | 3 +- .../superbwarfare/tools/TooltipTool.java | 15 +++++-- 9 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 src/generated/resources/data/superbwarfare/tags/items/is_auto_weapon.json diff --git a/src/generated/resources/.cache/2e07f3c482445536d45c00e6abf223465c01c841 b/src/generated/resources/.cache/2e07f3c482445536d45c00e6abf223465c01c841 index 073eda66b..17af12939 100644 --- a/src/generated/resources/.cache/2e07f3c482445536d45c00e6abf223465c01c841 +++ b/src/generated/resources/.cache/2e07f3c482445536d45c00e6abf223465c01c841 @@ -1,4 +1,4 @@ -// 1.20.1 2024-09-29T01:21:56.4028996 Tags for minecraft:item mod id superbwarfare +// 1.20.1 2024-09-29T03:35:49.8169729 Tags for minecraft:item mod id superbwarfare cf8d49a8d2872286d1a9c3d4a7e1c2b7690db0b8 data/forge/tags/items/dusts.json 0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/forge/tags/items/dusts/coal_coke.json 295ddf906b7133a0558d03e9a60eea18281fe430 data/forge/tags/items/dusts/iron.json @@ -29,6 +29,7 @@ af6fd64b4a685c353f243763db268f7b2304c009 data/forge/tags/items/storage_blocks/le 4d4dfd25a2a749e000e1bb742c2f984d4e094e5d data/superbwarfare/tags/items/cannot_reload.json 99a5a3a4bb6b5fb641dcd449937365ea174f3797 data/superbwarfare/tags/items/gun.json 62eb408544731ce4cfcd119d8a6cc74731189ac0 data/superbwarfare/tags/items/handgun.json +c28a85bbe8de35bb681cc50e6e29631410e79b06 data/superbwarfare/tags/items/is_auto_weapon.json 68ec25b0ccd68abbbe2f33ab7097572c2140c9da data/superbwarfare/tags/items/launcher.json b404c6fd99d2ca68c6738f225cb7d68ee443c10a data/superbwarfare/tags/items/machine_gun.json 4dc20b4a6b2978aba06811a61d1a8e693e1f7b04 data/superbwarfare/tags/items/normal_gun.json diff --git a/src/generated/resources/data/superbwarfare/tags/items/is_auto_weapon.json b/src/generated/resources/data/superbwarfare/tags/items/is_auto_weapon.json new file mode 100644 index 000000000..3d4f1b902 --- /dev/null +++ b/src/generated/resources/data/superbwarfare/tags/items/is_auto_weapon.json @@ -0,0 +1,19 @@ +{ + "values": [ + "superbwarfare:aa_12", + "superbwarfare:ak_47", + "superbwarfare:hk_416", + "superbwarfare:aa_12", + "superbwarfare:m_4", + "superbwarfare:qbz_95", + "superbwarfare:mk_14", + "superbwarfare:aa_12", + "superbwarfare:glock_18", + "superbwarfare:vector", + "superbwarfare:aa_12", + "superbwarfare:minigun", + "superbwarfare:devotion", + "superbwarfare:m_60", + "superbwarfare:rpk" + ] +} \ No newline at end of file diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java index 958b85b2d..8f0ab2ebc 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java @@ -73,7 +73,7 @@ public class CrossHairOverlay { float finPosX = ((w - finLength) / 2) + moveX; float finPosY = ((h - finLength) / 2) + moveY; - if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get())) { + if (shouldRenderCrossHair(player) || (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON && stack.is(ModItems.MINIGUN.get())) || (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && (ClientEventHandler.zoomTime > 0 || ClientEventHandler.pullPos > 0))) { preciseBlit(guiGraphics, new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0) { if (stack.is(ModTags.Items.SHOTGUN)) { diff --git a/src/main/java/net/mcreator/superbwarfare/datagen/ModItemTagProvider.java b/src/main/java/net/mcreator/superbwarfare/datagen/ModItemTagProvider.java index 5d8dd1058..81d9d2b60 100644 --- a/src/main/java/net/mcreator/superbwarfare/datagen/ModItemTagProvider.java +++ b/src/main/java/net/mcreator/superbwarfare/datagen/ModItemTagProvider.java @@ -87,6 +87,9 @@ public class ModItemTagProvider extends ItemTagsProvider { ModItems.SVD.get(), ModItems.M_98B.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get()); this.tag(ModTags.Items.LAUNCHER).add(ModItems.M_79.get(), ModItems.RPG.get(), ModItems.JAVELIN.get()); this.tag(ModTags.Items.CANNOT_RELOAD).add(ModItems.MINIGUN.get(), ModItems.BOCEK.get()); + this.tag(ModTags.Items.IS_AUTO_WEAPON).add(ModItems.AA_12.get(), ModItems.AK_47.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), + ModItems.QBZ_95.get(), ModItems.MK_14.get(), ModItems.AA_12.get(), ModItems.GLOCK_18.get(), ModItems.VECTOR.get(), ModItems.AA_12.get(), ModItems.MINIGUN.get(), + ModItems.DEVOTION.get(), ModItems.M_60.get(), ModItems.RPK.get()); } private static TagKey forgeTag(String name) { diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index d8fa57a54..3cc9e8e38 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -12,6 +12,7 @@ import net.mcreator.superbwarfare.network.message.ShootMessage; import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.MillisTimer; +import net.mcreator.superbwarfare.tools.SeekTool; import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; @@ -25,6 +26,8 @@ import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RenderGuiOverlayEvent; import net.minecraftforge.client.event.RenderHandEvent; @@ -80,6 +83,7 @@ public class ClientEventHandler { public static double gunSpread = 0; public static double fireSpread = 0; public static double cantFireTime = 0; + public static double lookDistance = 0; public static MillisTimer clientTimer = new MillisTimer(); @@ -509,9 +513,39 @@ public class ClientEventHandler { if (player == null) return; + double range; + Entity lookingEntity = SeekTool.seekEntity(player, player.level(), 520, 5); + + if (lookingEntity != null) { + range = player.distanceTo(lookingEntity); + } else { + range = player.position().distanceTo((Vec3.atLowerCornerOf(player.level().clip( + new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(520)), + ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos()))); + } + + if (lookDistance < range) { + lookDistance = Mth.clamp(lookDistance + 0.002 * Math.pow(range - lookDistance, 2) * Minecraft.getInstance().getDeltaFrameTime(),0.01, 520); + } else { + lookDistance = Mth.clamp(lookDistance - 0.002 * Math.pow(range - lookDistance, 2) * Minecraft.getInstance().getDeltaFrameTime(),0.01, 520); + } + + double angle = 0; + + if (lookDistance != 0) { + angle = Math.atan(0.6 / lookDistance) * Mth.RAD_TO_DEG; + } + +// player.displayClientMessage(Component.nullToEmpty(Component.literal(new DecimalFormat("##").format(lookDistance)) + " " + new DecimalFormat("##.#").format(angle)), true); + if (player.getMainHandItem().is(ModTags.Items.GUN) || (player.getVehicle() != null && (player.getVehicle() instanceof ICannonEntity))) { event.setPitch((float) (pitch + cameraRot[0] + 0.2 * turnRot[0] + 3 * velocityY)); - event.setYaw((float) (yaw + cameraRot[1] + 0.8 * turnRot[1])); + if (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK) { + event.setYaw((float) (yaw + cameraRot[1] + 0.8 * turnRot[1] - angle * zoomPos)); + } else { + event.setYaw((float) (yaw + cameraRot[1] + 0.8 * turnRot[1])); + } + event.setRoll((float) (roll + cameraRot[2] + 0.35 * turnRot[2])); } } @@ -538,7 +572,8 @@ public class ClientEventHandler { @SubscribeEvent public static void onFovUpdate(ViewportEvent.ComputeFov event) { - Player player = Minecraft.getInstance().player; + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; if (player == null) { return; } @@ -559,7 +594,10 @@ public class ClientEventHandler { double zoom = stack.getOrCreateTag().getDouble("zoom") + stack.getOrCreateTag().getDouble("custom_zoom"); - event.setFOV(event.getFOV() / (1.0 + p * (zoom - 1)) * (1 - 0.4 * breathTime)); + if (mc.options.getCameraType().isFirstPerson()) { + event.setFOV(event.getFOV() / (1.0 + p * (zoom - 1)) * (1 - 0.4 * breathTime)); + } else if (mc.options.getCameraType() == CameraType.THIRD_PERSON_BACK) + event.setFOV(event.getFOV() / (1.0 + p * 0.01) * (1 - 0.4 * breathTime)); fov = event.getFOV(); return; } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModTags.java b/src/main/java/net/mcreator/superbwarfare/init/ModTags.java index a6a1f1fd5..667c886b6 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModTags.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModTags.java @@ -29,6 +29,7 @@ public class ModTags { public static final TagKey NORMAL_GUN = tag("normal_gun"); public static final TagKey OPEN_BOLT = tag("open_bolt"); public static final TagKey CANNOT_RELOAD = tag("cannot_reload"); + public static final TagKey IS_AUTO_WEAPON = tag("is_auto_weapon"); private static TagKey tag(String name) { return ItemTags.create(new ResourceLocation(ModUtils.MODID, name)); diff --git a/src/main/java/net/mcreator/superbwarfare/mixins/CameraMixin.java b/src/main/java/net/mcreator/superbwarfare/mixins/CameraMixin.java index 912db2238..a074a6e73 100644 --- a/src/main/java/net/mcreator/superbwarfare/mixins/CameraMixin.java +++ b/src/main/java/net/mcreator/superbwarfare/mixins/CameraMixin.java @@ -3,8 +3,11 @@ package net.mcreator.superbwarfare.mixins; import net.mcreator.superbwarfare.entity.DroneEntity; import net.mcreator.superbwarfare.entity.Mk42Entity; import net.mcreator.superbwarfare.entity.Mle1934Entity; +import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModTags; import net.minecraft.client.Camera; +import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; @@ -63,10 +66,16 @@ public abstract class CameraMixin { public void ia$setup(BlockGetter area, Entity entity, boolean thirdPerson, boolean inverseView, float tickDelta, CallbackInfo ci) { if (thirdPerson && entity.getVehicle() instanceof Mk42Entity) { move(-getMaxZoom(8), 1.0, 0.0); + return; } if (thirdPerson && entity.getVehicle() instanceof Mle1934Entity) { move(-getMaxZoom(10), 1.3, 0.0); + return; } + if (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && entity instanceof Player player && player.getMainHandItem().is(ModTags.Items.GUN)) { + move(-getMaxZoom(-2.9 * Math.max(ClientEventHandler.pullPos, ClientEventHandler.zoomPos)), 0, -0.6 * Math.max(ClientEventHandler.pullPos, ClientEventHandler.zoomPos)); + } + } @Shadow diff --git a/src/main/java/net/mcreator/superbwarfare/mixins/GameRendererMixin.java b/src/main/java/net/mcreator/superbwarfare/mixins/GameRendererMixin.java index f56bf600a..7aa893880 100644 --- a/src/main/java/net/mcreator/superbwarfare/mixins/GameRendererMixin.java +++ b/src/main/java/net/mcreator/superbwarfare/mixins/GameRendererMixin.java @@ -2,6 +2,7 @@ package net.mcreator.superbwarfare.mixins; import com.mojang.blaze3d.vertex.PoseStack; import net.mcreator.superbwarfare.init.ModTags; +import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.world.entity.player.Player; @@ -20,7 +21,7 @@ public class GameRendererMixin { Player player = mc.player; if (player != null) { ItemStack stack = player.getMainHandItem(); - if (stack.is(ModTags.Items.GUN)) { + if (stack.is(ModTags.Items.GUN) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) { ci.cancel(); } } diff --git a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java index f145923db..d0dbe046c 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java @@ -2,6 +2,7 @@ package net.mcreator.superbwarfare.tools; import net.mcreator.superbwarfare.entity.DroneEntity; import net.mcreator.superbwarfare.init.ModPerks; +import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.perk.AmmoPerk; import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; @@ -36,10 +37,11 @@ public class TooltipTool { tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN))); - + if (stack.is(ModTags.Items.IS_AUTO_WEAPON)) { + addRpmTips(tooltip, stack); + } addLevelTips(tooltip, stack); addBypassTips(tooltip, stack); - addRpmTips(tooltip, stack); addPerkTips(tooltip, stack); } @@ -53,10 +55,13 @@ public class TooltipTool { .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal(new DecimalFormat("##.#").format(damage) + " * " + new DecimalFormat("##").format(ItemNBTTool.getDouble(stack, "projectile_amount", 0))).withStyle(ChatFormatting.GREEN))); + if (stack.is(ModTags.Items.IS_AUTO_WEAPON)) { + addRpmTips(tooltip, stack); + } addLevelTips(tooltip, stack); addBypassTips(tooltip, stack); addPerkTips(tooltip, stack); - addRpmTips(tooltip, stack); + } private static void addRpmTips(List tooltip, ItemStack stack) { @@ -191,10 +196,12 @@ public class TooltipTool { .append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN))); } + if (stack.is(ModTags.Items.IS_AUTO_WEAPON)) { + addRpmTips(tooltip, stack); + } addLevelTips(tooltip, stack); addBypassTips(tooltip, stack); addPerkTips(tooltip, stack); - addRpmTips(tooltip, stack); stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY))