public EntityPlayerSP GetPlayer(World world) { EntityPlayerSP player = new EntityPlayerSP(world, pos); SharpCraft.Instance.Camera.pitch = pitch; SharpCraft.Instance.Camera.yaw = yaw; for (int i = 0; i < hotbar.Length; i++) { if (TryParseStack(world, hotbar[i], out var stack)) { player.Hotbar[i] = stack; } } for (int i = 0; i < inventory.Length; i++) { if (TryParseStack(world, inventory[i], out var stack)) { player.Inventory[i] = stack; } } player.Health = healthPercentage; return(player); }
public WorldPlayerNode(EntityPlayerSP player) { pitch = SharpCraft.Instance.Camera.pitch; yaw = SharpCraft.Instance.Camera.yaw; pos = player.Pos; hotbar = new ItemStackNode[player.Hotbar.Length]; inventory = new ItemStackNode[player.Inventory.Length]; for (var i = 0; i < player.Hotbar.Length; i++) { ItemStack stack = player.Hotbar[i]; if (TryParseStack(player, stack, out var node)) { hotbar[i] = node; } } for (var i = 0; i < player.Inventory.Length; i++) { ItemStack stack = player.Inventory[i]; if (TryParseStack(player, stack, out var node)) { inventory[i] = node; } } healthPercentage = player.Health; }
public void UpdateLoad(EntityPlayerSP player, int renderDistance, bool important) { World world = SharpCraft.Instance.World; ChunkPos playerChunkPos = ChunkPos.FromWorldSpace(SharpCraft.Instance.Player.Pos); for (int z = -renderDistance; z <= renderDistance; z++) { for (int x = -renderDistance; x <= renderDistance; x++) { ChunkPos pos = new ChunkPos(playerChunkPos.x + x, playerChunkPos.z + z); if (pos.DistanceTo(player.Pos.Xz) < renderDistance * Chunk.ChunkSize) { if (world.GetChunk(pos) == null) { if (important) { NotifyImportantLoad(pos); } else { NotifyLoad(pos); } } } } } LoadChunks(); BuildChunks(); }
private void ResetDestroyProgress(EntityPlayerSP player) { foreach (DestroyProgress progress in DestroyProgresses.Values) { if (progress.Player == player) { DestroyProgresses.TryRemove(progress.Pos, out DestroyProgress removed); } } }
public void Disconnect() { ParticleRenderer = null; SkyboxRenderer = null; World?.SaveAllChunks(); World?.DestroyChunkModels(); Player = null; World?.ChunkData.Cleanup(); World?.LoadManager.Cleanup(); World = null; }
public void LoadWorld(string saveName) { if (World != null) { return; } ParticleRenderer = new ParticleRenderer(); SkyboxRenderer = new SkyboxRenderer(); World loadedWorld = WorldLoader.LoadWorld(saveName); if (loadedWorld == null) { Console.WriteLine("DEBUG: generating World"); BlockPos playerPos = new BlockPos(MathUtil.NextFloat(-100, 100), 10, MathUtil.NextFloat(-100, 100)); World = new World("MyWorld", "Tomlow's Fuckaround", SettingsManager.GetValue("worldseed").GetHashCode()); Player = new EntityPlayerSP(World, playerPos.ToVec()); World.AddEntity(Player); Player.SetItemStackInInventory(0, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockCraftingTable>()))); Player.SetItemStackInInventory(1, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockFurnace>()))); Player.SetItemStackInInventory(2, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockCobbleStone>()))); Player.SetItemStackInInventory(3, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockPlanks>()))); Player.SetItemStackInInventory(4, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockGlass>()))); Player.SetItemStackInInventory(5, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockCraftingTable>()))); Player.SetItemStackInInventory(6, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockSlab>()))); Player.SetItemStackInInventory(7, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockLadder>()))); Player.SetItemStackInInventory(8, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockTallGrass>()))); } else { World = loadedWorld; } ResetMouse(); MouseState state = OpenTK.Input.Mouse.GetState(); _mouseLast = new Point(state.X, state.Y); }
public static World LoadWorld(string saveName) { BinaryFormatter bf = new BinaryFormatter(); string dir = $"{SharpCraft.Instance.GameFolderDir}saves/{saveName}"; if (!Directory.Exists(dir)) { return(null); } World world = null; try { WorldDataNode wdn; WorldPlayerNode wpn; using (FileStream fs = File.OpenRead(dir + "/player.dat")) { fs.Position = 0; wpn = (WorldPlayerNode)bf.Deserialize(fs); } using (FileStream fs = File.OpenRead(dir + "/level.dat")) { fs.Position = 0; wdn = (WorldDataNode)bf.Deserialize(fs); } world = wdn.GetWorld(saveName); EntityPlayerSP player = wpn.GetPlayer(world); world.AddEntity(player); world.LoadChunk(new BlockPos(player.Pos).ChunkPos()); SharpCraft.Instance.Player = player; } catch (Exception e) { Console.WriteLine(e.StackTrace); } return(world); }
public void Update(EntityPlayerSP player, int renderDistance) { if (player == null) { return; } LoadManager.LoadImportantChunks(); LoadManager.UpdateLoad(player, renderDistance, _initalLoad); _initalLoad = false; foreach (Chunk chunk in Chunks.Values) { chunk.Update(); if (chunk.Pos.DistanceTo(player.Pos.Xz) > renderDistance * Chunk.ChunkSize + 50) { UnloadChunk(chunk.Pos); } } UpdateEntities(); }
private bool TryParseStack(EntityPlayerSP player, ItemStack stack, out ItemStackNode node) { if (stack == null || stack.IsEmpty) { node = null; return(false); } node = new ItemStackNode(); if (stack.Item is ItemBlock itemBlock) //TODO - IMPORTANT! at this moment this is always true, will need to add another function for the items or something { node.IsBlock = true; node.LocalItemID = player.World.GetLocalBlockId(itemBlock.Block.UnlocalizedName); node.Count = stack.Count; node.Meta = stack.Meta; } else { //TODO } return(true); }