89 lines
4.1 KiB
Java
89 lines
4.1 KiB
Java
package net.minecraft.network.protocol.game;
|
|
|
|
import io.netty.buffer.ByteBuf;
|
|
import java.util.UUID;
|
|
import java.util.function.BiConsumer;
|
|
import java.util.function.IntFunction;
|
|
import net.minecraft.core.Vec3i;
|
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
|
import net.minecraft.network.codec.ByteBufCodecs;
|
|
import net.minecraft.network.codec.StreamCodec;
|
|
import net.minecraft.network.protocol.Packet;
|
|
import net.minecraft.network.protocol.PacketType;
|
|
import net.minecraft.util.ByIdMap;
|
|
import net.minecraft.world.level.ChunkPos;
|
|
import net.minecraft.world.waypoints.TrackedWaypoint;
|
|
import net.minecraft.world.waypoints.TrackedWaypointManager;
|
|
import net.minecraft.world.waypoints.Waypoint;
|
|
import net.minecraft.world.waypoints.WaypointManager;
|
|
|
|
public record ClientboundTrackedWaypointPacket(ClientboundTrackedWaypointPacket.Operation operation, TrackedWaypoint waypoint)
|
|
implements Packet<ClientGamePacketListener> {
|
|
public static final StreamCodec<RegistryFriendlyByteBuf, ClientboundTrackedWaypointPacket> STREAM_CODEC = StreamCodec.composite(
|
|
ClientboundTrackedWaypointPacket.Operation.STREAM_CODEC,
|
|
ClientboundTrackedWaypointPacket::operation,
|
|
TrackedWaypoint.STREAM_CODEC,
|
|
ClientboundTrackedWaypointPacket::waypoint,
|
|
ClientboundTrackedWaypointPacket::new
|
|
);
|
|
|
|
public static ClientboundTrackedWaypointPacket removeWaypoint(UUID uuid) {
|
|
return new ClientboundTrackedWaypointPacket(ClientboundTrackedWaypointPacket.Operation.UNTRACK, TrackedWaypoint.empty(uuid));
|
|
}
|
|
|
|
public static ClientboundTrackedWaypointPacket addWaypointPosition(UUID uuid, Waypoint.Icon icon, Vec3i position) {
|
|
return new ClientboundTrackedWaypointPacket(ClientboundTrackedWaypointPacket.Operation.TRACK, TrackedWaypoint.setPosition(uuid, icon, position));
|
|
}
|
|
|
|
public static ClientboundTrackedWaypointPacket updateWaypointPosition(UUID uuid, Waypoint.Icon icon, Vec3i position) {
|
|
return new ClientboundTrackedWaypointPacket(ClientboundTrackedWaypointPacket.Operation.UPDATE, TrackedWaypoint.setPosition(uuid, icon, position));
|
|
}
|
|
|
|
public static ClientboundTrackedWaypointPacket addWaypointChunk(UUID uuid, Waypoint.Icon icon, ChunkPos chunkPos) {
|
|
return new ClientboundTrackedWaypointPacket(ClientboundTrackedWaypointPacket.Operation.TRACK, TrackedWaypoint.setChunk(uuid, icon, chunkPos));
|
|
}
|
|
|
|
public static ClientboundTrackedWaypointPacket updateWaypointChunk(UUID uuid, Waypoint.Icon icon, ChunkPos chunkPos) {
|
|
return new ClientboundTrackedWaypointPacket(ClientboundTrackedWaypointPacket.Operation.UPDATE, TrackedWaypoint.setChunk(uuid, icon, chunkPos));
|
|
}
|
|
|
|
public static ClientboundTrackedWaypointPacket addWaypointAzimuth(UUID uuid, Waypoint.Icon icon, float angle) {
|
|
return new ClientboundTrackedWaypointPacket(ClientboundTrackedWaypointPacket.Operation.TRACK, TrackedWaypoint.setAzimuth(uuid, icon, angle));
|
|
}
|
|
|
|
public static ClientboundTrackedWaypointPacket updateWaypointAzimuth(UUID uuid, Waypoint.Icon icon, float angle) {
|
|
return new ClientboundTrackedWaypointPacket(ClientboundTrackedWaypointPacket.Operation.UPDATE, TrackedWaypoint.setAzimuth(uuid, icon, angle));
|
|
}
|
|
|
|
@Override
|
|
public PacketType<ClientboundTrackedWaypointPacket> type() {
|
|
return GamePacketTypes.CLIENTBOUND_WAYPOINT;
|
|
}
|
|
|
|
/**
|
|
* Passes this Packet on to the PacketListener for processing.
|
|
*/
|
|
public void handle(ClientGamePacketListener handler) {
|
|
handler.handleWaypoint(this);
|
|
}
|
|
|
|
public void apply(TrackedWaypointManager waypointManager) {
|
|
this.operation.action.accept(waypointManager, this.waypoint);
|
|
}
|
|
|
|
static enum Operation {
|
|
TRACK(WaypointManager::trackWaypoint),
|
|
UNTRACK(WaypointManager::untrackWaypoint),
|
|
UPDATE(WaypointManager::updateWaypoint);
|
|
|
|
final BiConsumer<TrackedWaypointManager, TrackedWaypoint> action;
|
|
public static final IntFunction<ClientboundTrackedWaypointPacket.Operation> BY_ID = ByIdMap.continuous(
|
|
Enum::ordinal, values(), ByIdMap.OutOfBoundsStrategy.WRAP
|
|
);
|
|
public static final StreamCodec<ByteBuf, ClientboundTrackedWaypointPacket.Operation> STREAM_CODEC = ByteBufCodecs.idMapper(BY_ID, Enum::ordinal);
|
|
|
|
private Operation(final BiConsumer<TrackedWaypointManager, TrackedWaypoint> action) {
|
|
this.action = action;
|
|
}
|
|
}
|
|
}
|