修复小鸟大陀螺,修复victor放大倍率错误,修复波塞克

This commit is contained in:
Atsuishio 2025-04-15 00:52:45 +08:00 committed by Light_Quanta
parent 1336c66699
commit 9402c35894
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
8 changed files with 40 additions and 36 deletions

View file

@ -336,7 +336,6 @@ public class ClickHandler {
if (!stack.is(ModItems.BOCEK.get())) { if (!stack.is(ModItems.BOCEK.get())) {
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1); player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
} else { } else {
player.playSound(ModSounds.BOCEK_PULL_1P.get(), 1, 1);
handTimer = 0; handTimer = 0;
} }
@ -367,13 +366,13 @@ public class ClickHandler {
public static void handleWeaponFireRelease() { public static void handleWeaponFireRelease() {
PacketDistributor.sendToServer(new FireMessage(1, handTimer, zoom)); PacketDistributor.sendToServer(new FireMessage(1, handTimer, zoom));
ClientEventHandler.holdFire = false; bowPull = false;
ClientEventHandler.holdFireVehicle = false; holdFire = false;
ClientEventHandler.customRpm = 0; holdFireVehicle = false;
customRpm = 0;
} }
public static void handleWeaponZoomPress(Player player, ItemStack stack) { public static void handleWeaponZoomPress(Player player, ItemStack stack) {
if (!(stack.getItem() instanceof GunItem)) return;
PacketDistributor.sendToServer(new ZoomMessage(0)); PacketDistributor.sendToServer(new ZoomMessage(0));
if (player.getVehicle() instanceof VehicleEntity pVehicle && player.getVehicle() instanceof WeaponVehicleEntity iVehicle && iVehicle.hasWeapon(pVehicle.getSeatIndex(player)) && iVehicle.banHand(player)) { if (player.getVehicle() instanceof VehicleEntity pVehicle && player.getVehicle() instanceof WeaponVehicleEntity iVehicle && iVehicle.hasWeapon(pVehicle.getSeatIndex(player)) && iVehicle.banHand(player)) {

View file

@ -45,22 +45,16 @@ public class AmmoBarOverlay implements LayeredDraw.Layer {
private static int getGunAmmoCount(Player player) { private static int getGunAmmoCount(Player player) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
// TODO 替换为直接使用背包弹药判断
if (stack.getItem() == ModItems.MINIGUN.get()) { if (stack.getItem() == ModItems.MINIGUN.get()) {
return GunData.from(stack).countAmmo(player); return GunData.from(stack).countAmmo(player);
} }
if (stack.getItem() == ModItems.BOCEK.get()) {
return GunData.from(stack).countAmmo(player);
}
return GunData.from(stack).ammo.get(); return GunData.from(stack).ammo.get();
} }
private static String getPlayerAmmoCount(Player player) { private static String getPlayerAmmoCount(Player player) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.getItem() == ModItems.MINIGUN.get() || stack.getItem() == ModItems.BOCEK.get()) { if (stack.getItem() == ModItems.MINIGUN.get()) {
return ""; return "";
} }
@ -180,7 +174,7 @@ public class AmmoBarOverlay implements LayeredDraw.Layer {
poseStack.pushPose(); poseStack.pushPose();
poseStack.scale(1.5f, 1.5f, 1f); poseStack.scale(1.5f, 1.5f, 1f);
if ((stack.getItem() == ModItems.MINIGUN.get() || stack.getItem() == ModItems.BOCEK.get()) && hasCreativeAmmo()) { if (stack.getItem() == ModItems.MINIGUN.get() && hasCreativeAmmo()) {
guiGraphics.drawString( guiGraphics.drawString(
Minecraft.getInstance().font, Minecraft.getInstance().font,
"", "",

View file

@ -87,11 +87,12 @@ public class BocekItemRenderer extends GeoItemRenderer<BocekItem> {
} }
if (name.equals("arrow")) { if (name.equals("arrow")) {
bone.setHidden(GunsTool.getGunIntTag(tag, "ArrowEmpty") > 0); bone.setHidden(GunsTool.getGunIntTag(tag, "ArrowEmpty") > 1);
} }
if (name.equals("jian")) { if (name.equals("jian")) {
bone.setHidden(!GunData.from(itemStack).hasAmmo(player)); var data = GunData.from(itemStack);
bone.setHidden(data.ammo.get() == 0);
} }
if (renderingArms) { if (renderingArms) {

View file

@ -319,7 +319,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
engineStartOver = false; engineStartOver = false;
} }
} }
} else { } else if (!onGround() && engineStartOver) {
this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - 0.0003f, 0.01f)); this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - 0.0003f, 0.01f));
destroyRot += 0.15f; destroyRot += 0.15f;

View file

@ -121,6 +121,7 @@ public class ClientEventHandler {
public static MillisTimer clientTimerVehicle = new MillisTimer(); public static MillisTimer clientTimerVehicle = new MillisTimer();
public static boolean holdFire = false; public static boolean holdFire = false;
public static boolean bowPull = false;
public static boolean zoom = false; public static boolean zoom = false;
public static boolean breath = false; public static boolean breath = false;
@ -1454,7 +1455,14 @@ public class ClientEventHandler {
private static void handleBowPullAnimation(LivingEntity entity, ItemStack stack) { private static void handleBowPullAnimation(LivingEntity entity, ItemStack stack) {
float times = 4 * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); float times = 4 * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
if (holdFire && entity instanceof Player player && !player.getCooldowns().isOnCooldown(stack.getItem())) { var data = GunData.from(stack);
if (holdFire && data.ammo.get() > 0 && !bowPull && stack.is(ModItems.BOCEK.get())) {
entity.playSound(ModSounds.BOCEK_PULL_1P.get(), 1, 1);
bowPull = true;
}
if (bowPull) {
pullTimer = Math.min(pullTimer + 0.024 * times, 1.4); pullTimer = Math.min(pullTimer + 0.024 * times, 1.4);
bowTimer = Math.min(bowTimer + 0.018 * times, 1); bowTimer = Math.min(bowTimer + 0.018 * times, 1);
handTimer = Math.min(handTimer + 0.018 * times, 1); handTimer = Math.min(handTimer + 0.018 * times, 1);

View file

@ -130,7 +130,7 @@ public class VectorItem extends GunItem implements GeoItem {
@Override @Override
public double getCustomZoom(ItemStack stack) { public double getCustomZoom(ItemStack stack) {
int scopeType = GunData.from(stack).attachment.get(AttachmentType.SCOPE); int scopeType = GunData.from(stack).attachment.get(AttachmentType.SCOPE);
return scopeType == 2 ? (NBTTool.getTag(stack).getBoolean("ScopeAlt") ? 0 : 2.75) : 0; return scopeType == 2 ? (NBTTool.getTag(stack).getBoolean("ScopeAlt") ? 0 : 0.75) : 0;
} }
@Override @Override

View file

@ -94,19 +94,22 @@ public class BocekItem extends GunItem implements GeoItem, ReleaseSpecialWeapon
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(stack, world, entity, slot, selected); super.inventoryTick(stack, world, entity, slot, selected);
var data = GunData.from(stack); var data = GunData.from(stack);
final var tag = data.tag();
if (GunsTool.getGunIntTag(tag, "ArrowEmpty") > 0) { if (entity instanceof Player player) {
GunsTool.setGunIntTag(tag, "ArrowEmpty", GunsTool.getGunIntTag(tag, "ArrowEmpty") - 1); if (GunsTool.getGunIntTag(GunData.from(stack).tag, "ArrowEmpty") > 0) {
GunsTool.setGunIntTag(GunData.from(stack).tag, "ArrowEmpty", GunsTool.getGunIntTag(GunData.from(stack).tag, "ArrowEmpty") - 1);
}
if (GunsTool.getGunIntTag(GunData.from(stack).tag, "ArrowEmpty") == 0 && data.ammo.get() == 0 && (data.countAmmo(player) > 0 || InventoryTool.hasCreativeAmmoBox(player))) {
if (!InventoryTool.hasCreativeAmmoBox(player)) {
data.consumeAmmo(player, 1);
}
data.ammo.set(1);
}
data.save(); data.save();
} }
} }
// TODO 替换硬编码判断
protected static boolean check(ItemStack stack) {
return stack.getItem() == Items.ARROW;
}
@Override @Override
public ResourceLocation getGunIcon() { public ResourceLocation getGunIcon() {
return Mod.loc("textures/gun_icon/bocek_icon.png"); return Mod.loc("textures/gun_icon/bocek_icon.png");
@ -145,16 +148,17 @@ public class BocekItem extends GunItem implements GeoItem, ReleaseSpecialWeapon
public void fireOnRelease(Player player, final GunData data, double power, boolean zoom) { public void fireOnRelease(Player player, final GunData data, double power, boolean zoom) {
if (player.level().isClientSide()) return; if (player.level().isClientSide()) return;
ItemStack stack = player.getMainHandItem();
var perk = data.perk.get(Perk.Type.AMMO);
if (data.ammo.get() == 0) return;
if (player instanceof ServerPlayer serverPlayer) { if (player instanceof ServerPlayer serverPlayer) {
SoundTool.stopSound(serverPlayer, ModSounds.BOCEK_PULL_1P.getId(), SoundSource.PLAYERS); SoundTool.stopSound(serverPlayer, ModSounds.BOCEK_PULL_1P.getId(), SoundSource.PLAYERS);
SoundTool.stopSound(serverPlayer, ModSounds.BOCEK_PULL_3P.getId(), SoundSource.PLAYERS); SoundTool.stopSound(serverPlayer, ModSounds.BOCEK_PULL_3P.getId(), SoundSource.PLAYERS);
PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10)); PacketDistributor.sendToPlayer(serverPlayer, new ShootClientMessage(10));
} }
var tag = data.tag();
var stack = data.stack();
var perk = data.perk.get(Perk.Type.AMMO);
if (power * 12 >= 6) { if (power * 12 >= 6) {
if (zoom) { if (zoom) {
spawnBullet(player, power, true); spawnBullet(player, power, true);
@ -178,12 +182,9 @@ public class BocekItem extends GunItem implements GeoItem, ReleaseSpecialWeapon
} }
} }
player.getCooldowns().addCooldown(stack.getItem(), 7); GunsTool.setGunIntTag(GunData.from(stack).tag, "ArrowEmpty", 7);
GunsTool.setGunIntTag(tag, "ArrowEmpty", 7); data.ammo.set(data.ammo.get() - 1);
data.save();
if (!InventoryTool.hasCreativeAmmoBox(player)) {
data.consumeAmmo(player, 1);
}
} }
} }
} }

View file

@ -5,5 +5,6 @@
"Damage": 48, "Damage": 48,
"Weight": 3, "Weight": 3,
"BypassesArmor": 0.25, "BypassesArmor": 0.25,
"Magazine": 1,
"AmmoType": "minecraft:arrow" "AmmoType": "minecraft:arrow"
} }