正确发送模拟距离,移除已完成TODO

This commit is contained in:
Light_Quanta 2025-04-08 13:26:07 +08:00
parent 46b0b19233
commit 77a63a2951
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
7 changed files with 39 additions and 70 deletions

View file

@ -38,7 +38,7 @@ import software.bernie.geckolib.util.GeckoLibUtil;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;
// TODO 为什么打不开UI
public class FuMO25BlockEntity extends BlockEntity implements MenuProvider, GeoBlockEntity {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);

View file

@ -32,7 +32,6 @@ public abstract class ContainerMobileVehicleEntity extends MobileVehicleEntity i
public static final int CONTAINER_SIZE = 102;
private final NonNullList<ItemStack> items = NonNullList.withSize(CONTAINER_SIZE, ItemStack.EMPTY);
// private Supplier<?> itemHandler = () -> new InvWrapper(this);
public ContainerMobileVehicleEntity(EntityType<?> pEntityType, Level pLevel) {
super(pEntityType, pLevel);
@ -232,27 +231,6 @@ public abstract class ContainerMobileVehicleEntity extends MobileVehicleEntity i
}
}
// TODO item handler Capability
// @Override
// public <T> @NotNull LazyOptional<T> getCapability(@NotNull Capability<T> capability, @Nullable Direction facing) {
// if (this.isAlive() && capability == ForgeCapabilities.ITEM_HANDLER) {
// return itemHandler.cast();
// }
// return super.getCapability(capability, facing);
// }
//
// @Override
// public void invalidateCaps() {
// super.invalidateCaps();
// itemHandler.invalidate();
// }
//
// @Override
// public void reviveCaps() {
// super.reviveCaps();
// itemHandler = LazyOptional.of(() -> new InvWrapper(this));
// }
@Override
public void stopOpen(@NotNull Player pPlayer) {
this.level().gameEvent(GameEvent.CONTAINER_CLOSE, this.position(), GameEvent.Context.of(pPlayer));

View file

@ -87,7 +87,6 @@ public class GunEventHandler {
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return;
var data = GunData.from(stack);
var tag = data.tag();
if (!player.level().isClientSide) {
String origin = stack.getItem().getDescriptionId();
@ -187,10 +186,6 @@ public class GunEventHandler {
var perkInstance = data.perk.getInstance(Perk.Type.AMMO);
var perk = perkInstance != null ? perkInstance.perk() : null;
if (perk != null && perk.descriptionId.equals("butterfly_bullet")) {
if (handleButterflyBullet(perk, stack, player)) return;
}
ProjectileEntity projectile = new ProjectileEntity(player.level())
.shooter(player)
.damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage)
@ -267,40 +262,6 @@ public class GunEventHandler {
return 1;
}
// TODO 这还有联动的必要吗
private static boolean handleButterflyBullet(Perk perk, ItemStack heldItem, Player player) {
return true;
// int perkLevel = data.perk.getLevel(perk);
//
// var entityType = CompatHolder.VRC_RAIN_SHOWER_BUTTERFLY;
// if (entityType != null) {
// Projectile projectile = entityType.create(player.level());
//
// float inaccuracy = Math.max(0.0f, 1.1f - perkLevel * .1f);
// projectile.setOwner(player);
// projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x,
// player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
//
// Vec3 vec3 = (new Vec3(player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z)).normalize().scale(1.2).
// add(player.level().random.triangle(0.0D, 0.0172275D * (double) inaccuracy),
// player.level().random.triangle(0.0D, 0.0172275D * (double) inaccuracy),
// player.level().random.triangle(0.0D, 0.0172275D * (double) inaccuracy)).
// add(player.getDeltaMovement().x, player.onGround() ? 0.0 : 0.05 * player.getDeltaMovement().y, player.getDeltaMovement().z).
// scale(5.0f);
// projectile.setDeltaMovement(vec3);
// projectile.setYRot((float) (Mth.atan2(vec3.x, vec3.z) * (double) (180F / (float) Math.PI)));
// projectile.setXRot((float) (Mth.atan2(vec3.y, vec3.horizontalDistance()) * (double) (180F / (float) Math.PI)));
// projectile.yRotO = projectile.getYRot();
// projectile.xRotO = projectile.getXRot();
//
// projectile.setNoGravity(true);
// player.level().addFreshEntity(projectile);
// return true;
// }
//
// return false;
}
/**
* 通用的武器换弹流程
*/

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.data.GunData;
import com.atsuishio.superbwarfare.network.message.receive.SimulationDistanceMessage;
import com.atsuishio.superbwarfare.tools.*;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
@ -24,6 +25,7 @@ import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.event.AnvilUpdateEvent;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import net.neoforged.neoforge.event.tick.PlayerTickEvent;
import net.neoforged.neoforge.network.PacketDistributor;
@EventBusSubscriber
public class PlayerEventHandler {
@ -46,6 +48,8 @@ public class PlayerEventHandler {
data.save();
}
}
handleSimulationDistance(player);
}
@SubscribeEvent
@ -87,7 +91,6 @@ public class PlayerEventHandler {
}
handleGround(player);
handleSimulationDistance(player);
handleTacticalSprint(player);
handleBreath(player);
@ -256,12 +259,8 @@ public class PlayerEventHandler {
private static void handleSimulationDistance(Player player) {
if (player.level() instanceof ServerLevel serverLevel && player instanceof ServerPlayer serverPlayer) {
// TODO send simulation distance to client
// var distanceManager = serverLevel.getChunkSource().chunkMap.getDistanceManager();
// var playerTicketManager = distanceManager.playerTicketManager;
// int maxDistance = playerTicketManager.viewDistance;
//
// ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new SimulationDistanceMessage(maxDistance));
var distance = serverLevel.getChunkSource().chunkMap.serverViewDistance;
PacketDistributor.sendToPlayer(serverPlayer, new SimulationDistanceMessage(distance));
}
}

View file

@ -21,6 +21,7 @@ public class NetworkRegistry {
registrar.playToClient(ResetCameraTypeMessage.TYPE, ResetCameraTypeMessage.STREAM_CODEC, ResetCameraTypeMessage::handler);
registrar.playToClient(RadarMenuOpenMessage.TYPE, RadarMenuOpenMessage.STREAM_CODEC, RadarMenuOpenMessage::handler);
registrar.playToClient(RadarMenuCloseMessage.TYPE, RadarMenuCloseMessage.STREAM_CODEC, RadarMenuCloseMessage::handler);
registrar.playToClient(SimulationDistanceMessage.TYPE, SimulationDistanceMessage.STREAM_CODEC, SimulationDistanceMessage::handler);
registrar.playToServer(LaserShootMessage.TYPE, LaserShootMessage.STREAM_CODEC, LaserShootMessage::handler);
registrar.playToServer(BreathMessage.TYPE, BreathMessage.STREAM_CODEC, BreathMessage::handler);

View file

@ -0,0 +1,29 @@
package com.atsuishio.superbwarfare.network.message.receive;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.client.overlay.DroneUIOverlay;
import io.netty.buffer.ByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.neoforged.neoforge.network.handling.IPayloadContext;
import org.jetbrains.annotations.NotNull;
public record SimulationDistanceMessage(int distance) implements CustomPacketPayload {
public static final Type<SimulationDistanceMessage> TYPE = new Type<>(Mod.loc("simulation_distance"));
public static final StreamCodec<ByteBuf, SimulationDistanceMessage> STREAM_CODEC = StreamCodec.composite(
ByteBufCodecs.INT,
SimulationDistanceMessage::distance,
SimulationDistanceMessage::new
);
public static void handler(SimulationDistanceMessage message, final IPayloadContext context) {
DroneUIOverlay.MAX_DISTANCE = message.distance * 16;
}
@Override
public @NotNull Type<? extends CustomPacketPayload> type() {
return TYPE;
}
}

View file

@ -4,3 +4,4 @@ public net.minecraft.world.entity.Entity boardingCooldown # boardingCooldown
public net.minecraft.client.player.LocalPlayer handsBusy # handsBusy
public net.minecraft.client.renderer.culling.Frustum matrix # matrix
public net.minecraft.client.renderer.LevelRenderer renderBuffers # renderBuffers
public net.minecraft.server.level.ChunkMap serverViewDistance # serverViewDistance