添加第三人称越肩射击

This commit is contained in:
Atsuihsio 2024-09-29 13:19:45 +08:00
parent 161cc52fb5
commit 9a8901823b
9 changed files with 89 additions and 10 deletions

View file

@ -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

View file

@ -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"
]
}

View file

@ -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)) {

View file

@ -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<Item> forgeTag(String name) {

View file

@ -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;
}

View file

@ -29,6 +29,7 @@ public class ModTags {
public static final TagKey<Item> NORMAL_GUN = tag("normal_gun");
public static final TagKey<Item> OPEN_BOLT = tag("open_bolt");
public static final TagKey<Item> CANNOT_RELOAD = tag("cannot_reload");
public static final TagKey<Item> IS_AUTO_WEAPON = tag("is_auto_weapon");
private static TagKey<Item> tag(String name) {
return ItemTags.create(new ResourceLocation(ModUtils.MODID, name));

View file

@ -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

View file

@ -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();
}
}

View file

@ -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<Component> 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))