规范命名FireMessage

This commit is contained in:
Light_Quanta 2025-04-16 20:56:06 +08:00
parent 229a1050ce
commit 8000fd40b2
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
5 changed files with 30 additions and 17 deletions

View file

@ -8,6 +8,7 @@ import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.common.util.INBTSerializable;
@ -18,6 +19,7 @@ import org.jetbrains.annotations.NotNull;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
@EventBusSubscriber(modid = Mod.MODID)
@ -51,6 +53,15 @@ public class PlayerVariable implements INBTSerializable<CompoundTag> {
return this;
}
/**
* 编辑并同步玩家变量
*/
public void modify(Player player, Consumer<PlayerVariable> consumer) {
watch();
consumer.accept(this);
sync(player);
}
public CompoundTag writeToNBT() {
CompoundTag nbt = new CompoundTag();

View file

@ -345,7 +345,7 @@ public class ClickHandler {
ClientEventHandler.burstFireAmount = 0;
}
} else {
PacketDistributor.sendToServer(new FireMessage(0, handTimer, zoom));
PacketDistributor.sendToServer(new FireKeyMessage(0, handTimer, zoom));
if ((!data.reloading()
&& !data.charging()
&& !data.bolt.needed.get())
@ -365,7 +365,7 @@ public class ClickHandler {
}
public static void handleWeaponFireRelease() {
PacketDistributor.sendToServer(new FireMessage(1, handTimer, zoom));
PacketDistributor.sendToServer(new FireKeyMessage(1, handTimer, zoom));
bowPull = false;
holdFire = false;
holdFireVehicle = false;

View file

@ -40,7 +40,7 @@ import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Optional;
import java.util.function.Supplier;
import static com.atsuishio.superbwarfare.network.message.send.FireMessage.spawnBullet;
import static com.atsuishio.superbwarfare.network.message.send.FireKeyMessage.spawnBullet;
public class BocekItem extends GunItem implements GeoItem, ReleaseSpecialWeapon {

View file

@ -40,7 +40,7 @@ public class NetworkRegistry {
registrar.playToServer(SwitchVehicleWeaponMessage.TYPE, SwitchVehicleWeaponMessage.STREAM_CODEC, SwitchVehicleWeaponMessage::handler);
registrar.playToServer(AdjustZoomFovMessage.TYPE, AdjustZoomFovMessage.STREAM_CODEC, AdjustZoomFovMessage::handler);
registrar.playToServer(SwitchScopeMessage.TYPE, SwitchScopeMessage.STREAM_CODEC, SwitchScopeMessage::handler);
registrar.playToServer(FireMessage.TYPE, FireMessage.STREAM_CODEC, FireMessage::handler);
registrar.playToServer(FireKeyMessage.TYPE, FireKeyMessage.STREAM_CODEC, FireKeyMessage::handler);
registrar.playToServer(ReloadMessage.TYPE, ReloadMessage.STREAM_CODEC, ReloadMessage::handler);
registrar.playToServer(FireModeMessage.TYPE, FireModeMessage.STREAM_CODEC, FireModeMessage::handler);
registrar.playToServer(PlayerStopRidingMessage.TYPE, PlayerStopRidingMessage.STREAM_CODEC, PlayerStopRidingMessage::handler);

View file

@ -25,21 +25,24 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
public record FireMessage(int msgType, double power, boolean zoom) implements CustomPacketPayload {
public static final Type<FireMessage> TYPE = new Type<>(Mod.loc("fire"));
/**
* 开火按键按下/松开时的处理
*/
public record FireKeyMessage(int msgType, double power, boolean zoom) implements CustomPacketPayload {
public static final Type<FireKeyMessage> TYPE = new Type<>(Mod.loc("fire"));
public static final StreamCodec<ByteBuf, FireMessage> STREAM_CODEC = StreamCodec.composite(
public static final StreamCodec<ByteBuf, FireKeyMessage> STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.INT,
FireMessage::msgType,
FireKeyMessage::msgType,
ByteBufCodecs.DOUBLE,
FireMessage::power,
FireKeyMessage::power,
ByteBufCodecs.BOOL,
FireMessage::zoom,
FireMessage::new
FireKeyMessage::zoom,
FireKeyMessage::new
);
public static void handler(FireMessage message, final IPayloadContext context) {
public static void handler(FireKeyMessage message, final IPayloadContext context) {
pressAction(context.player(), message.msgType, message.power, message.zoom);
}
@ -51,25 +54,24 @@ public record FireMessage(int msgType, double power, boolean zoom) implements Cu
handleGunBolt(player, stack);
var cap = player.getData(ModAttachments.PLAYER_VARIABLE).watch();
if (type == 0) {
if (data.reload.prepareTimer.get() == 0 && data.reloading() && data.ammo.get() > 0) {
data.forceStop.set(true);
}
cap.edit = false;
player.getData(ModAttachments.PLAYER_VARIABLE).modify(player, cap -> cap.edit = false);
// 按下开火
if (!(stack.getItem() instanceof ReleaseSpecialWeapon releaseSpecialWeapon)) return;
releaseSpecialWeapon.fireOnPress(player, data, zoom);
if (stack.getItem() instanceof ReleaseSpecialWeapon releaseSpecialWeapon) {
releaseSpecialWeapon.fireOnPress(player, data, zoom);
}
} else if (type == 1) {
// 松开开火
if (stack.getItem() instanceof ReleaseSpecialWeapon releaseSpecialWeapon) {
releaseSpecialWeapon.fireOnRelease(player, data, power, zoom);
}
}
cap.sync(player);
data.save();
}