正确发送模拟距离,移除已完成TODO
This commit is contained in:
parent
46b0b19233
commit
77a63a2951
7 changed files with 39 additions and 70 deletions
|
@ -38,7 +38,7 @@ import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
// TODO 为什么打不开UI
|
|
||||||
public class FuMO25BlockEntity extends BlockEntity implements MenuProvider, GeoBlockEntity {
|
public class FuMO25BlockEntity extends BlockEntity implements MenuProvider, GeoBlockEntity {
|
||||||
|
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
|
|
|
@ -32,7 +32,6 @@ public abstract class ContainerMobileVehicleEntity extends MobileVehicleEntity i
|
||||||
public static final int CONTAINER_SIZE = 102;
|
public static final int CONTAINER_SIZE = 102;
|
||||||
|
|
||||||
private final NonNullList<ItemStack> items = NonNullList.withSize(CONTAINER_SIZE, ItemStack.EMPTY);
|
private final NonNullList<ItemStack> items = NonNullList.withSize(CONTAINER_SIZE, ItemStack.EMPTY);
|
||||||
// private Supplier<?> itemHandler = () -> new InvWrapper(this);
|
|
||||||
|
|
||||||
public ContainerMobileVehicleEntity(EntityType<?> pEntityType, Level pLevel) {
|
public ContainerMobileVehicleEntity(EntityType<?> pEntityType, Level pLevel) {
|
||||||
super(pEntityType, 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
|
@Override
|
||||||
public void stopOpen(@NotNull Player pPlayer) {
|
public void stopOpen(@NotNull Player pPlayer) {
|
||||||
this.level().gameEvent(GameEvent.CONTAINER_CLOSE, this.position(), GameEvent.Context.of(pPlayer));
|
this.level().gameEvent(GameEvent.CONTAINER_CLOSE, this.position(), GameEvent.Context.of(pPlayer));
|
||||||
|
|
|
@ -87,7 +87,6 @@ public class GunEventHandler {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
var data = GunData.from(stack);
|
var data = GunData.from(stack);
|
||||||
var tag = data.tag();
|
|
||||||
|
|
||||||
if (!player.level().isClientSide) {
|
if (!player.level().isClientSide) {
|
||||||
String origin = stack.getItem().getDescriptionId();
|
String origin = stack.getItem().getDescriptionId();
|
||||||
|
@ -187,10 +186,6 @@ public class GunEventHandler {
|
||||||
var perkInstance = data.perk.getInstance(Perk.Type.AMMO);
|
var perkInstance = data.perk.getInstance(Perk.Type.AMMO);
|
||||||
var perk = perkInstance != null ? perkInstance.perk() : null;
|
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())
|
ProjectileEntity projectile = new ProjectileEntity(player.level())
|
||||||
.shooter(player)
|
.shooter(player)
|
||||||
.damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage)
|
.damage(perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? projectileAmount * damage : damage)
|
||||||
|
@ -267,40 +262,6 @@ public class GunEventHandler {
|
||||||
return 1;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用的武器换弹流程
|
* 通用的武器换弹流程
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.init.ModTags;
|
import com.atsuishio.superbwarfare.init.ModTags;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||||
|
import com.atsuishio.superbwarfare.network.message.receive.SimulationDistanceMessage;
|
||||||
import com.atsuishio.superbwarfare.tools.*;
|
import com.atsuishio.superbwarfare.tools.*;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
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.AnvilUpdateEvent;
|
||||||
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
|
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
|
||||||
import net.neoforged.neoforge.event.tick.PlayerTickEvent;
|
import net.neoforged.neoforge.event.tick.PlayerTickEvent;
|
||||||
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
|
|
||||||
@EventBusSubscriber
|
@EventBusSubscriber
|
||||||
public class PlayerEventHandler {
|
public class PlayerEventHandler {
|
||||||
|
@ -46,6 +48,8 @@ public class PlayerEventHandler {
|
||||||
data.save();
|
data.save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleSimulationDistance(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -87,7 +91,6 @@ public class PlayerEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleGround(player);
|
handleGround(player);
|
||||||
handleSimulationDistance(player);
|
|
||||||
handleTacticalSprint(player);
|
handleTacticalSprint(player);
|
||||||
handleBreath(player);
|
handleBreath(player);
|
||||||
|
|
||||||
|
@ -256,12 +259,8 @@ public class PlayerEventHandler {
|
||||||
|
|
||||||
private static void handleSimulationDistance(Player player) {
|
private static void handleSimulationDistance(Player player) {
|
||||||
if (player.level() instanceof ServerLevel serverLevel && player instanceof ServerPlayer serverPlayer) {
|
if (player.level() instanceof ServerLevel serverLevel && player instanceof ServerPlayer serverPlayer) {
|
||||||
// TODO send simulation distance to client
|
var distance = serverLevel.getChunkSource().chunkMap.serverViewDistance;
|
||||||
// var distanceManager = serverLevel.getChunkSource().chunkMap.getDistanceManager();
|
PacketDistributor.sendToPlayer(serverPlayer, new SimulationDistanceMessage(distance));
|
||||||
// var playerTicketManager = distanceManager.playerTicketManager;
|
|
||||||
// int maxDistance = playerTicketManager.viewDistance;
|
|
||||||
//
|
|
||||||
// ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new SimulationDistanceMessage(maxDistance));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ public class NetworkRegistry {
|
||||||
registrar.playToClient(ResetCameraTypeMessage.TYPE, ResetCameraTypeMessage.STREAM_CODEC, ResetCameraTypeMessage::handler);
|
registrar.playToClient(ResetCameraTypeMessage.TYPE, ResetCameraTypeMessage.STREAM_CODEC, ResetCameraTypeMessage::handler);
|
||||||
registrar.playToClient(RadarMenuOpenMessage.TYPE, RadarMenuOpenMessage.STREAM_CODEC, RadarMenuOpenMessage::handler);
|
registrar.playToClient(RadarMenuOpenMessage.TYPE, RadarMenuOpenMessage.STREAM_CODEC, RadarMenuOpenMessage::handler);
|
||||||
registrar.playToClient(RadarMenuCloseMessage.TYPE, RadarMenuCloseMessage.STREAM_CODEC, RadarMenuCloseMessage::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(LaserShootMessage.TYPE, LaserShootMessage.STREAM_CODEC, LaserShootMessage::handler);
|
||||||
registrar.playToServer(BreathMessage.TYPE, BreathMessage.STREAM_CODEC, BreathMessage::handler);
|
registrar.playToServer(BreathMessage.TYPE, BreathMessage.STREAM_CODEC, BreathMessage::handler);
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,4 +3,5 @@ public net.minecraft.world.entity.Entity passengers # passengers
|
||||||
public net.minecraft.world.entity.Entity boardingCooldown # boardingCooldown
|
public net.minecraft.world.entity.Entity boardingCooldown # boardingCooldown
|
||||||
public net.minecraft.client.player.LocalPlayer handsBusy # handsBusy
|
public net.minecraft.client.player.LocalPlayer handsBusy # handsBusy
|
||||||
public net.minecraft.client.renderer.culling.Frustum matrix # matrix
|
public net.minecraft.client.renderer.culling.Frustum matrix # matrix
|
||||||
public net.minecraft.client.renderer.LevelRenderer renderBuffers # renderBuffers
|
public net.minecraft.client.renderer.LevelRenderer renderBuffers # renderBuffers
|
||||||
|
public net.minecraft.server.level.ChunkMap serverViewDistance # serverViewDistance
|
Loading…
Add table
Reference in a new issue