diff --git a/src/main/java/com/atsuishio/superbwarfare/block/entity/FuMO25BlockEntity.java b/src/main/java/com/atsuishio/superbwarfare/block/entity/FuMO25BlockEntity.java index 66d6e3d3f..0cd88bb02 100644 --- a/src/main/java/com/atsuishio/superbwarfare/block/entity/FuMO25BlockEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/block/entity/FuMO25BlockEntity.java @@ -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); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ContainerMobileVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ContainerMobileVehicleEntity.java index 2a6d57211..ac83c8f65 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ContainerMobileVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ContainerMobileVehicleEntity.java @@ -32,7 +32,6 @@ public abstract class ContainerMobileVehicleEntity extends MobileVehicleEntity i public static final int CONTAINER_SIZE = 102; private final NonNullList 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 @NotNull LazyOptional getCapability(@NotNull Capability 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)); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java index 78f4b5297..2faa983e3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java @@ -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; - } - /** * 通用的武器换弹流程 */ diff --git a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java index c35b32c04..3794f0958 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -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)); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/NetworkRegistry.java b/src/main/java/com/atsuishio/superbwarfare/network/NetworkRegistry.java index e84c744ea..981d5f959 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/NetworkRegistry.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/NetworkRegistry.java @@ -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); diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/receive/SimulationDistanceMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/receive/SimulationDistanceMessage.java new file mode 100644 index 000000000..b7dfc0abb --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/receive/SimulationDistanceMessage.java @@ -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 TYPE = new Type<>(Mod.loc("simulation_distance")); + + public static final StreamCodec 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 type() { + return TYPE; + } +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index b30fcfef4..6b500ffb2 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -3,4 +3,5 @@ public net.minecraft.world.entity.Entity passengers # passengers 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 \ No newline at end of file +public net.minecraft.client.renderer.LevelRenderer renderBuffers # renderBuffers +public net.minecraft.server.level.ChunkMap serverViewDistance # serverViewDistance \ No newline at end of file