public void ForceInvokeChunkChange() { World.GlobalToLocal(this.WObject.Position, out Vector3I cpos, out _); Ticket tck = Ticket.GetTicket(cpos.XY); if (tck != null) { Chunk c = tck.Chunk; if (c != null) { if (previousChunk != null && (previousChunk != c)) { OnChangeChunk?.Invoke(c); } } previousChunk = c; } else { tck = Ticket.CreateTicket(cpos.X, cpos.Y, 30, TicketTypes.Player, TicketPreviousDirection.None, true, -1); } }
public static Block GetBlock(Vector3I position, int dimension = 0) { GlobalToLocal(position, out Vector3I cpos, out Vector3I bpos); return(Ticket.GetTicket(cpos.XY)?.Chunk[bpos.X, bpos.Y, bpos.Z]); }
public static void PlayerTickNeighbors(Chunk chunk, Vector3I position) { Chunk tickChunk; Vector3I tickPosition; // West block // if (position.X == 0) // if edge { tickChunk = Ticket.GetTicket(chunk.Position.XY + Vector2I.Left)?.Chunk; tickPosition = new Vector3I(15, position.Y, position.Z); } else { tickChunk = chunk; tickPosition = new Vector3I(position.X - 1, position.Y, position.Z); } if (tickChunk) { World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z])); } // East block // if (position.X == 15) // if edge { tickChunk = Ticket.GetTicket(chunk.Position.XY + Vector2I.Right)?.Chunk; tickPosition = new Vector3I(0, position.Y, position.Z); } else { tickChunk = chunk; tickPosition = new Vector3I(position.X + 1, position.Y, position.Z); } if (tickChunk) { World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z])); } // North block // if (position.Z == 15) // if edge { tickChunk = Ticket.GetTicket(chunk.Position.XY + Vector2I.Up)?.Chunk; tickPosition = new Vector3I(position.X, position.Y, 0); } else { tickChunk = chunk; tickPosition = new Vector3I(position.X, position.Y, position.Z + 1); } if (tickChunk) { World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z])); } // South block // if (position.Z == 0) // if edge { tickChunk = Ticket.GetTicket(chunk.Position.XY + Vector2I.Down)?.Chunk; tickPosition = new Vector3I(position.X, position.Y, 15); } else { tickChunk = chunk; tickPosition = new Vector3I(position.X, position.Y, position.Z - 1); } if (tickChunk) { World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z])); } if (position.Y != 0) { tickChunk = chunk; tickPosition = new Vector3I(position.X, position.Y - 1, position.Z); World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, chunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z])); } if (position.Y != 255) { tickChunk = chunk; tickPosition = new Vector3I(position.X, position.Y + 1, position.Z); World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z])); } }