暂时移除左轮单双动机制,期待后人智慧

This commit is contained in:
Atsuishio 2025-04-23 17:17:40 +08:00 committed by Light_Quanta
parent de0b314cf1
commit 9a565d00dc
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
12 changed files with 20 additions and 81 deletions

View file

@ -10,12 +10,10 @@ import com.atsuishio.superbwarfare.item.gun.data.GunData;
import com.atsuishio.superbwarfare.tools.InventoryTool;
import com.atsuishio.superbwarfare.tools.NBTTool;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.ChatFormatting;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.LayeredDraw;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
@ -123,26 +121,15 @@ public class AmmoBarOverlay implements LayeredDraw.Layer {
12,
12);
} else {
if (stack.getItem() != ModItems.TRACHELIUM.get()) {
guiGraphics.blit(fireMode,
w - 95,
h - 21,
0,
0,
8,
8,
8,
8);
} else {
guiGraphics.drawString(
Minecraft.getInstance().font,
data.DA.get() ? Component.translatable("des.superbwarfare.revolver.sa").withStyle(ChatFormatting.BOLD) : Component.translatable("des.superbwarfare.revolver.da").withStyle(ChatFormatting.BOLD),
w - 96,
h - 20,
0xFFFFFF,
false
);
}
guiGraphics.blit(fireMode,
w - 95,
h - 21,
0,
0,
8,
8,
8,
8);
}
if (stack.getItem() != ModItems.MINIGUN.get() && stack.getItem() != ModItems.TRACHELIUM.get()) {

View file

@ -116,7 +116,7 @@ public class Qbz95ItemRenderer extends GeoItemRenderer<Qbz95Item> {
bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom);
}
AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0, 1.04375, 0.3);
AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0.02, 1.12375, 0.3);
ItemModelHelper.handleGunAttachments(bone, itemStack, name);

View file

@ -104,8 +104,6 @@ public class ModItemTagProvider extends ItemTagsProvider {
.addTag(ModTags.Items.LAUNCHER_GRENADE);
this.tag(ModTags.Items.LAUNCHER_GRENADE).add(ModItems.M_79.get(), ModItems.SECONDARY_CATACLYSM.get());
this.tag(ModTags.Items.REVOLVER).add(ModItems.TRACHELIUM.get());
this.tag(ModTags.Items.MILITARY_ARMOR).add(ModItems.RU_CHEST_6B43.get(), ModItems.US_CHEST_IOTV.get());
this.tag(ModTags.Items.BLUEPRINT).addTags(ModTags.Items.COMMON_BLUEPRINT, ModTags.Items.RARE_BLUEPRINT, ModTags.Items.EPIC_BLUEPRINT,

View file

@ -195,19 +195,6 @@ public class ClientEventHandler {
return player.getVehicle() instanceof VehicleEntity vehicle && vehicle.allowFreeCam() && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON && ModKeyMappings.FREE_CAMERA.isDown();
}
private static boolean revolverPre(GunData data) {
Player player = Minecraft.getInstance().player;
if (player == null) return false;
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.REVOLVER)) {
return true;
} else if (stack.is(ModTags.Items.REVOLVER) && (data.DA.get() || data.canImmediatelyShoot.get())) {
return true;
} else {
return revolverPreTime >= 1;
}
}
private static boolean isMoving() {
Player player = Minecraft.getInstance().player;
return Minecraft.getInstance().options.keyLeft.isDown()
@ -566,11 +553,10 @@ public class ClientEventHandler {
int cooldown = (int) Math.round(1000 / rps);
//左轮类
if (clientTimer.getProgress() == 0 && stack.is(ModTags.Items.REVOLVER) && ((holdFire && !data.DA.get())
|| (data.bolt.actionTimer.get() < 7 && data.bolt.actionTimer.get() > 2) || data.canImmediatelyShoot.get())) {
if (clientTimer.getProgress() == 0 && stack.is(ModItems.TRACHELIUM.get()) && holdFire) {
revolverPreTime = Mth.clamp(revolverPreTime + 0.3 * times, 0, 1);
revolverWheelPreTime = Mth.clamp(revolverWheelPreTime + 0.32 * times, 0, revolverPreTime > 0.7 ? 1 : 0.55);
} else if (!data.DA.get() && !data.canImmediatelyShoot.get()) {
} else {
revolverPreTime = Mth.clamp(revolverPreTime - 1.2 * times, 0, 1);
}
@ -590,8 +576,7 @@ public class ClientEventHandler {
&& !data.charging()
&& data.hasEnoughAmmoToShoot(player)
&& !player.getCooldowns().isOnCooldown(stack.getItem())
&& !GunData.from(stack).bolt.needed.get()
&& revolverPre(data))
&& !GunData.from(stack).bolt.needed.get())
)) {
if (mode == 0) {
if (clientTimer.getProgress() == 0) {
@ -703,7 +688,7 @@ public class ClientEventHandler {
}
// 判断是否为栓动武器BoltActionTime > 0并在开火后给一个需要上膛的状态
if (data.defaultActionTime() > 0 && data.ammo.get() > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
if (data.defaultActionTime() > 0 && data.ammo.get() > 1) {
data.bolt.needed.set(true);
}

View file

@ -60,9 +60,6 @@ public class GunEventHandler {
if (data.bolt.actionTimer.get() == 1) {
data.bolt.needed.set(false);
if (stack.is(ModTags.Items.REVOLVER)) {
data.canImmediatelyShoot.set(true);
}
}
}
}
@ -83,9 +80,7 @@ public class GunEventHandler {
double shooterHeight = player.getEyePosition().distanceTo((Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(new Vec3(0, -1, 0).scale(10)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
if (stack.is(ModTags.Items.REVOLVER)) return;
Mod.queueServerWork((int) (data.defaultActionTime() / 2 + 1.5 * shooterHeight), () -> {
Mod.queueServerWork((int) (data.bolt.actionTimer.get() / 2 + 1.5 * shooterHeight), () -> {
if (stack.is(ModTags.Items.SHOTGUN)) {
SoundTool.playLocalSound(serverPlayer, ModSounds.SHELL_CASING_SHOTGUN.get(), (float) Math.max(0.75 - 0.12 * shooterHeight, 0), 1);
} else if (stack.is(ModTags.Items.SNIPER_RIFLE)) {

View file

@ -25,8 +25,6 @@ public class ModTags {
public static final TagKey<Item> LAUNCHER = tag("launcher");
public static final TagKey<Item> LAUNCHER_GRENADE = tag("launcher/grenade");
public static final TagKey<Item> REVOLVER = tag("revolver");
public static final TagKey<Item> NORMAL_GUN = tag("normal_gun");
public static final TagKey<Item> MILITARY_ARMOR = tag("military_armor");

View file

@ -532,14 +532,9 @@ public abstract class GunItem extends Item implements CustomRendererItem {
data.holdOpen.set(true);
}
// TODO 替换左轮判断方式
if (data.stack.is(ModTags.Items.REVOLVER)) {
data.canImmediatelyShoot.set(true);
}
// TODO 替换左轮判断方式
// 判断是否为栓动武器BoltActionTime > 0并在开火后给一个需要上膛的状态
if (data.defaultActionTime() > 0 && data.ammo.get() > (data.stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
if (data.defaultActionTime() > 0 && data.ammo.get() > 1) {
data.bolt.needed.set(true);
}
}

View file

@ -1,6 +1,5 @@
package com.atsuishio.superbwarfare.item.gun.data;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.data.subdata.*;
import com.atsuishio.superbwarfare.item.gun.data.value.*;
@ -66,8 +65,6 @@ public class GunData {
exp = new DoubleValue(data, "Exp");
upgradePoint = new DoubleValue(data, "UpgradePoint");
canImmediatelyShoot = new BooleanValue(data, "CanImmediatelyShoot");
DA = new BooleanValue(data, "DA");
isEmpty = new BooleanValue(data, "IsEmpty");
closeHammer = new BooleanValue(data, "CloseHammer");
stopped = new BooleanValue(data, "Stopped");
@ -416,7 +413,7 @@ public class GunData {
int ammoNeeded = mag - ammo + (extraOne ? 1 : 0);
// 空仓换弹的栓动武器应该在换弹后取消待上膛标记
if (ammo == 0 && defaultActionTime() > 0 && !stack.is(ModTags.Items.REVOLVER)) {
if (ammo == 0 && defaultActionTime() > 0) {
bolt.needed.set(false);
}
@ -461,8 +458,6 @@ public class GunData {
return charge.time() > 0;
}
public final BooleanValue canImmediatelyShoot;
public final BooleanValue DA;
public final BooleanValue isEmpty;
public final BooleanValue closeHammer;
public final BooleanValue stopped;

View file

@ -242,11 +242,6 @@ public class Trachelium extends GunItem implements GeoItem {
}
}
@Override
public int getCustomBoltActionTime(ItemStack stack) {
return GunData.from(stack).DA.get() ? 12 : 0;
}
@Override
public boolean canSwitchScope(ItemStack stack) {
return GunData.from(stack).attachment.get(AttachmentType.SCOPE) == 2;

View file

@ -2,7 +2,6 @@ package com.atsuishio.superbwarfare.network.message.send;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.event.GunEventHandler;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.data.GunData;
import io.netty.buffer.ByteBuf;
@ -59,7 +58,7 @@ public record FireKeyMessage(int msgType, double power, boolean zoom) implements
var data = GunData.from(stack);
if (data.defaultActionTime() > 0
&& data.ammo.get() > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0)
&& data.ammo.get() > 0
&& data.bolt.actionTimer.get() == 0
&& !(data.reload.normal() || data.reload.empty())
&& !data.reloading()

View file

@ -108,15 +108,6 @@ public record FireModeMessage(int msgType) implements CustomPacketPayload {
SoundTool.playLocalSound(serverPlayer, ModSounds.CANNON_ZOOM_OUT.get());
}
}
if (stack.getItem() == ModItems.TRACHELIUM.get() && !data.bolt.needed.get()) {
data.DA.set(!data.DA.get());
if (!data.canImmediatelyShoot.get()) {
data.bolt.needed.set(true);
}
}
data.save();
}
}

View file

@ -11,5 +11,6 @@
"BypassesArmor": 0.3,
"SoundRadius": 10,
"RPM": 240,
"AmmoType": "@RifleAmmo"
"AmmoType": "@RifleAmmo",
"ShootDelay": 6
}