189 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.network.protocol.game;
 | |
| 
 | |
| import com.google.common.collect.Lists;
 | |
| import com.mojang.logging.LogUtils;
 | |
| import java.util.Collection;
 | |
| import java.util.List;
 | |
| import java.util.Map;
 | |
| import java.util.Optional;
 | |
| import java.util.UUID;
 | |
| import java.util.Map.Entry;
 | |
| import net.minecraft.core.BlockPos;
 | |
| import net.minecraft.core.GlobalPos;
 | |
| import net.minecraft.core.Holder;
 | |
| import net.minecraft.core.registries.BuiltInRegistries;
 | |
| import net.minecraft.network.protocol.Packet;
 | |
| import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
 | |
| import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
 | |
| import net.minecraft.network.protocol.common.custom.GameTestAddMarkerDebugPayload;
 | |
| import net.minecraft.network.protocol.common.custom.GameTestClearMarkersDebugPayload;
 | |
| import net.minecraft.network.protocol.common.custom.RedstoneWireOrientationsDebugPayload;
 | |
| import net.minecraft.server.level.ServerLevel;
 | |
| import net.minecraft.server.level.ServerPlayer;
 | |
| import net.minecraft.world.Nameable;
 | |
| import net.minecraft.world.damagesource.DamageSource;
 | |
| import net.minecraft.world.entity.Entity;
 | |
| import net.minecraft.world.entity.LivingEntity;
 | |
| import net.minecraft.world.entity.Mob;
 | |
| import net.minecraft.world.entity.ai.behavior.BlockPosTracker;
 | |
| import net.minecraft.world.entity.ai.behavior.EntityTracker;
 | |
| import net.minecraft.world.entity.ai.goal.GoalSelector;
 | |
| import net.minecraft.world.entity.ai.memory.ExpirableValue;
 | |
| import net.minecraft.world.entity.ai.memory.MemoryModuleType;
 | |
| import net.minecraft.world.entity.ai.memory.WalkTarget;
 | |
| import net.minecraft.world.entity.animal.Bee;
 | |
| import net.minecraft.world.entity.monster.breeze.Breeze;
 | |
| import net.minecraft.world.entity.raid.Raid;
 | |
| import net.minecraft.world.level.ChunkPos;
 | |
| import net.minecraft.world.level.Level;
 | |
| import net.minecraft.world.level.WorldGenLevel;
 | |
| import net.minecraft.world.level.block.entity.BeehiveBlockEntity;
 | |
| import net.minecraft.world.level.block.state.BlockState;
 | |
| import net.minecraft.world.level.gameevent.GameEvent;
 | |
| import net.minecraft.world.level.gameevent.GameEventListener;
 | |
| import net.minecraft.world.level.levelgen.structure.StructureStart;
 | |
| import net.minecraft.world.level.pathfinder.Path;
 | |
| import net.minecraft.world.phys.Vec3;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| import org.slf4j.Logger;
 | |
| 
 | |
| public class DebugPackets {
 | |
| 	private static final Logger LOGGER = LogUtils.getLogger();
 | |
| 
 | |
| 	public static void sendGameTestAddMarker(ServerLevel level, BlockPos pos, String text, int color, int lifetimeMillis) {
 | |
| 		sendPacketToAllPlayers(level, new GameTestAddMarkerDebugPayload(pos, color, text, lifetimeMillis));
 | |
| 	}
 | |
| 
 | |
| 	public static void sendGameTestClearPacket(ServerLevel level) {
 | |
| 		sendPacketToAllPlayers(level, new GameTestClearMarkersDebugPayload());
 | |
| 	}
 | |
| 
 | |
| 	public static void sendPoiPacketsForChunk(ServerLevel level, ChunkPos chunkPos) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendPoiAddedPacket(ServerLevel level, BlockPos pos) {
 | |
| 		sendVillageSectionsPacket(level, pos);
 | |
| 	}
 | |
| 
 | |
| 	public static void sendPoiRemovedPacket(ServerLevel level, BlockPos pos) {
 | |
| 		sendVillageSectionsPacket(level, pos);
 | |
| 	}
 | |
| 
 | |
| 	public static void sendPoiTicketCountPacket(ServerLevel level, BlockPos pos) {
 | |
| 		sendVillageSectionsPacket(level, pos);
 | |
| 	}
 | |
| 
 | |
| 	private static void sendVillageSectionsPacket(ServerLevel level, BlockPos pos) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendPathFindingPacket(Level level, Mob mob, @Nullable Path path, float maxDistanceToWaypoint) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendNeighborsUpdatePacket(Level level, BlockPos pos) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendWireUpdates(Level level, RedstoneWireOrientationsDebugPayload payload) {
 | |
| 		if (level instanceof ServerLevel serverLevel) {
 | |
| 			sendPacketToAllPlayers(serverLevel, payload);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public static void sendStructurePacket(WorldGenLevel level, StructureStart structureStart) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendGoalSelector(Level level, Mob mob, GoalSelector goalSelector) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendRaids(ServerLevel level, Collection<Raid> raids) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendEntityBrain(LivingEntity livingEntity) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendBeeInfo(Bee bee) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendBreezeInfo(Breeze breeze) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendGameEventInfo(Level level, Holder<GameEvent> gameEvent, Vec3 pos) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendGameEventListenerInfo(Level level, GameEventListener gameEventListener) {
 | |
| 	}
 | |
| 
 | |
| 	public static void sendHiveInfo(Level level, BlockPos pos, BlockState blockState, BeehiveBlockEntity hiveBlockEntity) {
 | |
| 	}
 | |
| 
 | |
| 	private static List<String> getMemoryDescriptions(LivingEntity entity, long gameTime) {
 | |
| 		Map<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>> map = entity.getBrain().getMemories();
 | |
| 		List<String> list = Lists.<String>newArrayList();
 | |
| 
 | |
| 		for (Entry<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>> entry : map.entrySet()) {
 | |
| 			MemoryModuleType<?> memoryModuleType = (MemoryModuleType<?>)entry.getKey();
 | |
| 			Optional<? extends ExpirableValue<?>> optional = (Optional<? extends ExpirableValue<?>>)entry.getValue();
 | |
| 			String string;
 | |
| 			if (optional.isPresent()) {
 | |
| 				ExpirableValue<?> expirableValue = (ExpirableValue<?>)optional.get();
 | |
| 				Object object = expirableValue.getValue();
 | |
| 				if (memoryModuleType == MemoryModuleType.HEARD_BELL_TIME) {
 | |
| 					long l = gameTime - (Long)object;
 | |
| 					string = l + " ticks ago";
 | |
| 				} else if (expirableValue.canExpire()) {
 | |
| 					string = getShortDescription((ServerLevel)entity.level(), object) + " (ttl: " + expirableValue.getTimeToLive() + ")";
 | |
| 				} else {
 | |
| 					string = getShortDescription((ServerLevel)entity.level(), object);
 | |
| 				}
 | |
| 			} else {
 | |
| 				string = "-";
 | |
| 			}
 | |
| 
 | |
| 			list.add(BuiltInRegistries.MEMORY_MODULE_TYPE.getKey(memoryModuleType).getPath() + ": " + string);
 | |
| 		}
 | |
| 
 | |
| 		list.sort(String::compareTo);
 | |
| 		return list;
 | |
| 	}
 | |
| 
 | |
| 	private static String getShortDescription(ServerLevel level, @Nullable Object object) {
 | |
| 		if (object == null) {
 | |
| 			return "-";
 | |
| 		} else if (object instanceof UUID) {
 | |
| 			return getShortDescription(level, level.getEntity((UUID)object));
 | |
| 		} else if (object instanceof LivingEntity) {
 | |
| 			Entity entity = (Entity)object;
 | |
| 			return DebugEntityNameGenerator.getEntityName(entity);
 | |
| 		} else if (object instanceof Nameable) {
 | |
| 			return ((Nameable)object).getName().getString();
 | |
| 		} else if (object instanceof WalkTarget) {
 | |
| 			return getShortDescription(level, ((WalkTarget)object).getTarget());
 | |
| 		} else if (object instanceof EntityTracker) {
 | |
| 			return getShortDescription(level, ((EntityTracker)object).getEntity());
 | |
| 		} else if (object instanceof GlobalPos) {
 | |
| 			return getShortDescription(level, ((GlobalPos)object).pos());
 | |
| 		} else if (object instanceof BlockPosTracker) {
 | |
| 			return getShortDescription(level, ((BlockPosTracker)object).currentBlockPosition());
 | |
| 		} else if (object instanceof DamageSource) {
 | |
| 			Entity entity = ((DamageSource)object).getEntity();
 | |
| 			return entity == null ? object.toString() : getShortDescription(level, entity);
 | |
| 		} else if (!(object instanceof Collection)) {
 | |
| 			return object.toString();
 | |
| 		} else {
 | |
| 			List<String> list = Lists.<String>newArrayList();
 | |
| 
 | |
| 			for (Object object2 : (Iterable)object) {
 | |
| 				list.add(getShortDescription(level, object2));
 | |
| 			}
 | |
| 
 | |
| 			return list.toString();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	private static void sendPacketToAllPlayers(ServerLevel level, CustomPacketPayload payload) {
 | |
| 		Packet<?> packet = new ClientboundCustomPayloadPacket(payload);
 | |
| 
 | |
| 		for (ServerPlayer serverPlayer : level.players()) {
 | |
| 			serverPlayer.connection.send(packet);
 | |
| 		}
 | |
| 	}
 | |
| }
 |