暂时移除左轮单双动机制,期待后人智慧
This commit is contained in:
parent
de0b314cf1
commit
9a565d00dc
12 changed files with 20 additions and 81 deletions
|
@ -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,7 +121,6 @@ public class AmmoBarOverlay implements LayeredDraw.Layer {
|
|||
12,
|
||||
12);
|
||||
} else {
|
||||
if (stack.getItem() != ModItems.TRACHELIUM.get()) {
|
||||
guiGraphics.blit(fireMode,
|
||||
w - 95,
|
||||
h - 21,
|
||||
|
@ -133,16 +130,6 @@ public class AmmoBarOverlay implements LayeredDraw.Layer {
|
|||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.getItem() != ModItems.MINIGUN.get() && stack.getItem() != ModItems.TRACHELIUM.get()) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,5 +11,6 @@
|
|||
"BypassesArmor": 0.3,
|
||||
"SoundRadius": 10,
|
||||
"RPM": 240,
|
||||
"AmmoType": "@RifleAmmo"
|
||||
"AmmoType": "@RifleAmmo",
|
||||
"ShootDelay": 6
|
||||
}
|
Loading…
Add table
Reference in a new issue