|
@@ -1,339 +0,0 @@
|
|
|
-package me.km.playerbank;
|
|
|
-
|
|
|
-import com.mojang.authlib.GameProfile;
|
|
|
-import io.netty.buffer.Unpooled;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.UUID;
|
|
|
-import me.km.KajetansMod;
|
|
|
-import me.km.dimensions.ModDimensions;
|
|
|
-
|
|
|
-
|
|
|
-import me.km.utils.ReflectionUtils;
|
|
|
-import net.minecraft.entity.Entity;
|
|
|
-import net.minecraft.entity.player.EntityPlayer;
|
|
|
-import net.minecraft.entity.player.EntityPlayerMP;
|
|
|
-import net.minecraft.nbt.NBTTagCompound;
|
|
|
-import net.minecraft.network.NetHandlerPlayServer;
|
|
|
-import net.minecraft.network.NetworkManager;
|
|
|
-import net.minecraft.network.PacketBuffer;
|
|
|
-import net.minecraft.network.play.server.SPacketChangeGameState;
|
|
|
-import net.minecraft.network.play.server.SPacketCustomPayload;
|
|
|
-import net.minecraft.network.play.server.SPacketEntityEffect;
|
|
|
-import net.minecraft.network.play.server.SPacketHeldItemChange;
|
|
|
-import net.minecraft.network.play.server.SPacketJoinGame;
|
|
|
-import net.minecraft.network.play.server.SPacketPlayerAbilities;
|
|
|
-import net.minecraft.network.play.server.SPacketRespawn;
|
|
|
-import net.minecraft.network.play.server.SPacketServerDifficulty;
|
|
|
-import net.minecraft.network.play.server.SPacketSetExperience;
|
|
|
-import net.minecraft.network.play.server.SPacketSpawnPosition;
|
|
|
-import net.minecraft.scoreboard.ServerScoreboard;
|
|
|
-import net.minecraft.server.dedicated.DedicatedPlayerList;
|
|
|
-import net.minecraft.server.dedicated.DedicatedServer;
|
|
|
-import net.minecraft.server.management.DemoPlayerInteractionManager;
|
|
|
-import net.minecraft.server.management.PlayerInteractionManager;
|
|
|
-import net.minecraft.server.management.PlayerProfileCache;
|
|
|
-import net.minecraft.util.math.BlockPos;
|
|
|
-import net.minecraft.util.math.Vec3d;
|
|
|
-import net.minecraft.util.text.TextComponentString;
|
|
|
-import net.minecraft.world.GameRules;
|
|
|
-import net.minecraft.world.World;
|
|
|
-import net.minecraft.world.WorldServer;
|
|
|
-import net.minecraft.world.chunk.storage.AnvilChunkLoader;
|
|
|
-import net.minecraft.world.storage.WorldInfo;
|
|
|
-import net.minecraftforge.common.MinecraftForge;
|
|
|
-import net.minecraftforge.fml.relauncher.Side;
|
|
|
-import net.minecraftforge.fml.relauncher.SideOnly;
|
|
|
-import org.apache.logging.log4j.LogManager;
|
|
|
-import org.apache.logging.log4j.Logger;
|
|
|
-
|
|
|
-@SideOnly(Side.SERVER)
|
|
|
-public class ModDedicatedPlayerList //extends DedicatedPlayerList
|
|
|
-{
|
|
|
-
|
|
|
- private static final Logger LOG = LogManager.getLogger();
|
|
|
- private final List<EntityPlayerMP> playerEntityList;
|
|
|
- private final Map<UUID, EntityPlayerMP> uuidToPlayerMap;
|
|
|
-
|
|
|
- public ModDedicatedPlayerList(DedicatedServer server)
|
|
|
- {
|
|
|
- super(server);
|
|
|
- this.mcServer = server;
|
|
|
- this.playerEntityList = super.getPlayers();
|
|
|
- this.uuidToPlayerMap = ReflectionUtils.getUuidToPlayerMap(this);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- private void setPlayerGameTypeBasedOnOther(EntityPlayerMP target, EntityPlayerMP source, World worldIn)
|
|
|
- {
|
|
|
- if (source != null)
|
|
|
- {
|
|
|
- target.interactionManager.setGameType(source.interactionManager.getGameType());
|
|
|
- }
|
|
|
- target.interactionManager.initializeGameType(worldIn.getWorldInfo().getGameType());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public void initializeConnectionToPlayer(NetworkManager netManager, EntityPlayerMP p, NetHandlerPlayServer nethandlerplayserver)
|
|
|
- {
|
|
|
-
|
|
|
- GameProfile gameprofile = p.getGameProfile();
|
|
|
- PlayerProfileCache cache = this.mcServer.getPlayerProfileCache();
|
|
|
- GameProfile gameprofile1 = cache.getProfileByUUID(gameprofile.getId());
|
|
|
- String playerName = gameprofile1 == null ? gameprofile.getName() : gameprofile1.getName();
|
|
|
- cache.addEntry(gameprofile);
|
|
|
-
|
|
|
-
|
|
|
- NBTTagCompound nbttagcompound = this.readPlayerDataFromFile(p);
|
|
|
-
|
|
|
- WorldServer playerWorld = this.mcServer.getWorld(p.dimension);
|
|
|
- if(playerWorld == null)
|
|
|
- {
|
|
|
- p.dimension = 0;
|
|
|
- playerWorld = this.mcServer.getWorld(0);
|
|
|
- BlockPos spawnPoint = playerWorld.provider.getRandomizedSpawnPoint();
|
|
|
- p.setPosition(spawnPoint.getX(), spawnPoint.getY(), spawnPoint.getZ());
|
|
|
- }
|
|
|
- p.setWorld(playerWorld);
|
|
|
-
|
|
|
- p.interactionManager.setWorld(playerWorld);
|
|
|
-
|
|
|
- String s = "local";
|
|
|
- if(netManager.getRemoteAddress() != null)
|
|
|
- {
|
|
|
- s = netManager.getRemoteAddress().toString();
|
|
|
- }
|
|
|
-
|
|
|
- LOG.info("{}[{}] logged in with entity id {} at ({}, {}, {})", new Object[] {p.getName(), s, p.getEntityId(), p.posX, p.posY, p.posZ});
|
|
|
- WorldInfo worldinfo = playerWorld.getWorldInfo();
|
|
|
- this.setPlayerGameTypeBasedOnOther(p, null, playerWorld);
|
|
|
- p.connection = nethandlerplayserver;
|
|
|
-
|
|
|
- ModDimensions.sendNotificationsForDimensions(p);
|
|
|
-
|
|
|
- nethandlerplayserver.sendPacket(new SPacketJoinGame(p.getEntityId(), p.interactionManager.getGameType(), worldinfo.isHardcoreModeEnabled(), p.dimension, playerWorld.getDifficulty(), this.getMaxPlayers(), worldinfo.getTerrainType(), playerWorld.getGameRules().getBoolean("reducedDebugInfo")));
|
|
|
- nethandlerplayserver.sendPacket(new SPacketCustomPayload("MC|Brand", (new PacketBuffer(Unpooled.buffer())).writeString(this.getServerInstance().getServerModName())));
|
|
|
- nethandlerplayserver.sendPacket(new SPacketServerDifficulty(worldinfo.getDifficulty(), worldinfo.isDifficultyLocked()));
|
|
|
- nethandlerplayserver.sendPacket(new SPacketPlayerAbilities(p.capabilities));
|
|
|
- nethandlerplayserver.sendPacket(new SPacketHeldItemChange(p.inventory.currentItem));
|
|
|
- this.updatePermissionLevel(p);
|
|
|
- p.getStatFile().markAllDirty();
|
|
|
- p.getRecipeBook().init(p);
|
|
|
- this.sendScoreboard((ServerScoreboard) playerWorld.getScoreboard(), p);
|
|
|
- this.mcServer.refreshStatusNextTick();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- PlayerJoinMessageEvent event;
|
|
|
- if (p.getName().equalsIgnoreCase(playerName))
|
|
|
- {
|
|
|
-
|
|
|
- event = new PlayerJoinMessageEvent(p, false, "No message was set.");
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
-
|
|
|
- event = new PlayerJoinMessageEvent(p, true, "No message was set.");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if(!MinecraftForge.EVENT_BUS.post(event))
|
|
|
- {
|
|
|
- KajetansMod.scheduler.scheduleTask(() -> this.sendMessage(new TextComponentString(event.getMessage())), 2);
|
|
|
- }
|
|
|
-
|
|
|
- this.playerLoggedIn(p);
|
|
|
- nethandlerplayserver.setPlayerLocation(p.posX, p.posY, p.posZ, p.rotationYaw, p.rotationPitch);
|
|
|
- this.updateTimeAndWeatherForPlayer(p, playerWorld);
|
|
|
-
|
|
|
- if (!this.mcServer.getResourcePackUrl().isEmpty())
|
|
|
- {
|
|
|
- p.loadResourcePack(this.mcServer.getResourcePackUrl(), this.mcServer.getResourcePackHash());
|
|
|
- }
|
|
|
-
|
|
|
- p.getActivePotionEffects().stream().forEach((potioneffect) ->
|
|
|
- {
|
|
|
- nethandlerplayserver.sendPacket(new SPacketEntityEffect(p.getEntityId(), potioneffect));
|
|
|
- });
|
|
|
-
|
|
|
- if (nbttagcompound != null && nbttagcompound.hasKey("RootVehicle", 10))
|
|
|
- {
|
|
|
- NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("RootVehicle");
|
|
|
- Entity entity1 = AnvilChunkLoader.readWorldEntity(nbttagcompound1.getCompoundTag("Entity"), playerWorld, true);
|
|
|
-
|
|
|
- if (entity1 != null)
|
|
|
- {
|
|
|
- UUID uuid = nbttagcompound1.getUniqueId("Attach");
|
|
|
-
|
|
|
- if (entity1.getUniqueID().equals(uuid))
|
|
|
- {
|
|
|
- p.startRiding(entity1, true);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- for (Entity entity : entity1.getRecursivePassengers())
|
|
|
- {
|
|
|
- if (entity.getUniqueID().equals(uuid))
|
|
|
- {
|
|
|
- p.startRiding(entity, true);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!p.isRiding())
|
|
|
- {
|
|
|
- LOG.warn("Couldn\'t reattach entity to player");
|
|
|
- playerWorld.removeEntityDangerously(entity1);
|
|
|
-
|
|
|
- for(Entity entity2 : entity1.getRecursivePassengers())
|
|
|
- {
|
|
|
- playerWorld.removeEntityDangerously(entity2);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- p.addSelfToInternalCraftingInventory();
|
|
|
-
|
|
|
- net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerLoggedIn(p);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public EntityPlayerMP recreatePlayerEntity(EntityPlayerMP p, int dim, boolean conqueredEnd)
|
|
|
- {
|
|
|
- dim = p.dimension;
|
|
|
- WorldServer w = mcServer.getWorld(dim);
|
|
|
- if(w == null)
|
|
|
- {
|
|
|
- dim = p.getSpawnDimension();
|
|
|
- }
|
|
|
- else if(!w.provider.canRespawnHere())
|
|
|
- {
|
|
|
- dim = w.provider.getRespawnDimension(p);
|
|
|
- }
|
|
|
- if(mcServer.getWorld(dim) == null)
|
|
|
- {
|
|
|
- dim = 0;
|
|
|
- }
|
|
|
-
|
|
|
- WorldServer pw = p.getServerWorld();
|
|
|
- pw.getEntityTracker().removePlayerFromTrackers(p);
|
|
|
- pw.getEntityTracker().untrack(p);
|
|
|
- pw.getPlayerChunkMap().removePlayer(p);
|
|
|
- this.playerEntityList.remove(p);
|
|
|
- pw.removeEntityDangerously(p);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- w = mcServer.getWorld(dim);
|
|
|
- p.dimension = dim;
|
|
|
-
|
|
|
- PlayerInteractionManager pManager;
|
|
|
-
|
|
|
- if(this.mcServer.isDemo())
|
|
|
- {
|
|
|
- pManager = new DemoPlayerInteractionManager(w);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- pManager = new PlayerInteractionManager(w);
|
|
|
- }
|
|
|
- EntityPlayerMP newP = new EntityPlayerMP(this.mcServer, w, p.getGameProfile(), pManager);
|
|
|
- newP.connection = p.connection;
|
|
|
- newP.setEntityId(p.getEntityId());
|
|
|
- newP.setCommandStats(p);
|
|
|
- newP.setPrimaryHand(p.getPrimaryHand());
|
|
|
- newP.dimension = dim;
|
|
|
-
|
|
|
- boolean spawnInBed = false;
|
|
|
- boolean errorIfNoForce = false;
|
|
|
- PlayerRespawnAtEvent event;
|
|
|
-
|
|
|
- BlockPos bed = p.getBedLocation(dim);
|
|
|
- if(bed != null)
|
|
|
- {
|
|
|
- BlockPos validBed = EntityPlayer.getBedSpawnLocation(w, bed, p.isSpawnForced(dim));
|
|
|
- if (validBed != null)
|
|
|
- {
|
|
|
- spawnInBed = true;
|
|
|
- event = new PlayerRespawnAtEvent(newP, w, validBed.getX() + 0.5f, validBed.getY() + 0.1f, validBed.getZ() + 0.5f);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- errorIfNoForce = true;
|
|
|
- event = new PlayerRespawnAtEvent(newP, w, newP.posX, newP.posY, newP.posZ);
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- event = new PlayerRespawnAtEvent(newP, w, newP.posX, newP.posY, newP.posZ);
|
|
|
- }
|
|
|
- MinecraftForge.EVENT_BUS.post(event);
|
|
|
- Vec3d v = event.getRespawnLoc();
|
|
|
-
|
|
|
- if(event.isForced())
|
|
|
- {
|
|
|
- w = event.getWorld();
|
|
|
- newP.world = w;
|
|
|
- newP.dimension = w.provider.getDimension();
|
|
|
- p.dimension = newP.dimension;
|
|
|
- newP.setPosition(v.x, v.y, v.z);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if(spawnInBed)
|
|
|
- {
|
|
|
- newP.setLocationAndAngles(v.x, v.y, v.z, 0, 0);
|
|
|
- newP.setSpawnPoint(bed, p.isSpawnForced(dim));
|
|
|
- }
|
|
|
- else if(errorIfNoForce)
|
|
|
- {
|
|
|
- newP.connection.sendPacket(new SPacketChangeGameState(0, 0));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(event.isInventoryKeepingForced() && !conqueredEnd)
|
|
|
- {
|
|
|
- GameRules rules = w.getGameRules();
|
|
|
- boolean keep = rules.getBoolean("keepInventory");
|
|
|
- rules.setOrCreateGameRule("keepInventory", "true");
|
|
|
- newP.copyFrom(p, conqueredEnd);
|
|
|
- rules.setOrCreateGameRule("keepInventory", String.valueOf(keep));
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- newP.copyFrom(p, conqueredEnd);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- p.getTags().stream().forEach(s -> newP.addTag(s));
|
|
|
- this.setPlayerGameTypeBasedOnOther(newP, p, w);
|
|
|
-
|
|
|
- w.getChunkProvider().provideChunk((int) newP.posX >> 4, (int) newP.posZ >> 4);
|
|
|
-
|
|
|
- while(!w.getCollisionBoxes(newP, newP.getEntityBoundingBox()).isEmpty() && newP.posY < 256.0D)
|
|
|
- {
|
|
|
- newP.setPosition(newP.posX, newP.posY + 1.0D, newP.posZ);
|
|
|
- }
|
|
|
-
|
|
|
- newP.connection.sendPacket(new SPacketRespawn(newP.dimension, newP.world.getDifficulty(), w.getWorldInfo().getTerrainType(), newP.interactionManager.getGameType()));
|
|
|
- newP.connection.setPlayerLocation(newP.posX, newP.posY, newP.posZ, newP.rotationYaw, newP.rotationPitch);
|
|
|
- newP.connection.sendPacket(new SPacketSpawnPosition(w.getSpawnPoint()));
|
|
|
- newP.connection.sendPacket(new SPacketSetExperience(newP.experience, newP.experienceTotal, newP.experienceLevel));
|
|
|
- this.updateTimeAndWeatherForPlayer(newP, w);
|
|
|
- this.updatePermissionLevel(newP);
|
|
|
- w.getPlayerChunkMap().addPlayer(newP);
|
|
|
- w.spawnEntity(newP);
|
|
|
- this.playerEntityList.add(newP);
|
|
|
- this.uuidToPlayerMap.put(newP.getUniqueID(), newP);
|
|
|
- newP.addSelfToInternalCraftingInventory();
|
|
|
- newP.setHealth(newP.getHealth());
|
|
|
- net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerRespawnEvent(newP, conqueredEnd);
|
|
|
- return newP;
|
|
|
- }*/
|
|
|
-}
|