internal Entity GetBlockEntity(PositionBlock position) { PositionChunk positionChunk = PositionChunk.CreateFrom(position); Chunk chunk = GetChunk(positionChunk); positionChunk.ConvertToLocalPosition(ref position); Entity entity = chunk.GetBlockEntity(position); return entity; }
internal void RemoveMetaData(PositionBlock localPos) { int key = localPos.X * 16 * 16 + localPos.Y * 16 + localPos.Z; if (chunkMetaData.ContainsKey(key)) { chunkMetaData.Remove(key); } }
internal Entity GetBlockEntityFromPosition(PositionBlock pos) { if (pos.Y < 0) return null; if (pos.Y >= Chunk.MaxSizeY) return null; PositionChunk positionChunk = PositionChunk.CreateFrom(pos); Chunk chunk = GetChunk(positionChunk); positionChunk.ConvertToLocalPosition(ref pos); return chunk.GetBlockEntityFromPosition(pos); }
public override bool OnUseOnBlock(PositionBlock pos) { int sourceBlockId = World.Instance.GetBlock(pos); if (sourceBlockId == BlockRepository.DirtWithGrass.Id || sourceBlockId == BlockRepository.Dirt.Id) { World.Instance.SetBlock(pos, BlockRepository.FarmlandDry.Id); } return true; }
internal int GetBlock(PositionBlock pos) { if (pos.Y < 0) return 0; if (pos.Y >= Chunk.MaxSizeY) return 0; PositionChunk positionChunk = PositionChunk.CreateFrom(pos); Chunk chunk = GetChunk(positionChunk); positionChunk.ConvertToLocalPosition(ref pos); int blockId = chunk.GetLocalBlock(pos.X, pos.Y, pos.Z); return blockId; }
private void RawSetBlockMetaData(PositionBlock positionBlock, string variable, object value) { int key = positionBlock.X * 16 * 16 + positionBlock.Y * 16 + positionBlock.Z; if (!chunkMetaData.ContainsKey(key)) { chunkMetaData.Add(key, new Dictionary <string, object>()); } chunkMetaData[key][variable] = value; }
private object RawGetBlockMetaData(PositionBlock positionBlock, string variable) { int key = positionBlock.X * 16 * 16 + positionBlock.Y * 16 + positionBlock.Z; if (chunkMetaData.ContainsKey(key)) { return(chunkMetaData[key][variable]); } return(null); }
private void DestroyBlock(Vector4 pos) { PositionBlock posBlock = PositionBlock.FromVector(pos); Block block = Block.FromId(World.Instance.GetBlock(posBlock)); block.OnDestroy(posBlock); World.Instance.SetBlock(posBlock, 0); PositionChunk posChunk = PositionChunk.CreateFrom(posBlock); Chunk chunk = World.Instance.GetChunk(posChunk); chunk.InvalidateMeAndNeighbors(); }
private void UpdateBlockDestroyProgress() { Block blockToDestroy = Block.FromId(World.Instance.GetBlock(PositionBlock.FromVector(BlockAttackPosition))); float efficiency = ToolMatrix.GetEfficiency(SelectedStack.Id, blockToDestroy.Id); DestroyProgress += (100f / (float)blockToDestroy.Density) * efficiency; if (SelectedStack.AsItem != null) { Item itemInHand = Item.FromId(SelectedStack.Id); itemInHand.OnAfterAttack(); } }
private float GetWaterLevel(int dx, int dy, int dz) { PositionBlock destPos = new PositionBlock(BlockPosition.X + dx, BlockPosition.Y + dy, BlockPosition.Z + dz); int destBlockId = Parent.SafeGetLocalBlock(destPos.X, destPos.Y, destPos.Z); if (destBlockId != BlockRepository.Water.Id) { return(0f); } float waterLevel = (float)Parent.GetBlockMetaData(destPos, "waterlvl"); return(waterLevel); }
private void UseBlockOnBlock() { Vector4 pos = World.Instance.PlayerVoxelTrace.BuildPosition; PositionBlock posBlock = new PositionBlock((int)pos.X, (int)pos.Y, (int)pos.Z); World.Instance.SetBlock(posBlock, SelectedStack.Id); PositionChunk posChunk = PositionChunk.CreateFrom(posBlock); Chunk chunk = World.Instance.GetChunk(posChunk); chunk.InvalidateMeAndNeighbors(); SelectedStack.Remove(1); NeedsRest(); }
internal Entity GetBlockEntityFromPosition(PositionBlock pos) { int x = pos.X; int y = pos.Y; int z = pos.Z; if (x < 0 || x >= 16 || y < 0 || y >= 16 || z < 0 || z >= 16) { PositionBlock globalPosition; Position.GetGlobalPositionBlock(out globalPosition, x, y, z); return(World.Instance.GetBlockEntityFromPosition(globalPosition)); } return(RawGetBlockEntityFromPosition(x, y, z)); }
internal object GetBlockMetaData(PositionBlock pos, string variable) { int x = pos.X; int y = pos.Y; int z = pos.Z; if (x < 0 || x >= 16 || y < 0 || y >= 16 || z < 0 || z >= 16) { PositionBlock globalPosition; Position.GetGlobalPositionBlock(out globalPosition, x, y, z); return(World.Instance.GetBlockMetaData(globalPosition, variable)); } return(RawGetBlockMetaData(pos, variable)); }
internal void SetBlockMetaData(PositionBlock pos, string variable, object value) { int x = pos.X; int y = pos.Y; int z = pos.Z; if (x < 0 || x >= 16 || y < 0 || y >= 16 || z < 0 || z >= 16) { PositionBlock globalPosition; Position.GetGlobalPositionBlock(out globalPosition, x, y, z); World.Instance.SetBlockMetaData(globalPosition, variable, value); return; } RawSetBlockMetaData(pos, variable, value); }
private void UseItemOnBlock() { // used on a block! Vector4 pos = World.Instance.PlayerVoxelTrace.ImpactPosition; PositionBlock posBlock = new PositionBlock((int)pos.X, (int)pos.Y, (int)pos.Z); Item item = Item.FromId(SelectedStack.Id); if (item.OnUseOnBlock(posBlock)) { // here if world is changed PositionChunk posChunk = PositionChunk.CreateFrom(posBlock); Chunk chunk = World.Instance.GetChunk(posChunk); chunk.InvalidateMeAndNeighbors(); if (item.Consumable) { SelectedStack.Remove(1); } } }
private void HandleMouseRight() { // activate block? PositionBlock positionBlock = PositionBlock.FromVector(World.Instance.PlayerVoxelTrace.ImpactPosition); Block impactBlock = Block.FromId(World.Instance.GetBlock(positionBlock)); if (impactBlock.OnActivate(positionBlock)) { return; } // are we using a block? if (SelectedStack.AsBlock != null) { UseBlockInHand(); } // are we using an item? else if (SelectedStack.AsItem != null) { UseItemInHand(); NeedsRest(); } }
internal void SetBlock(PositionBlock pos, int blockId) { PositionChunk positionChunk = PositionChunk.CreateFrom(pos); Chunk chunk = GetChunk(positionChunk); positionChunk.ConvertToLocalPosition(ref pos); chunk.SetLocalBlock(pos.X, pos.Y, pos.Z, blockId); }
private float GetWaterLevel(int dx, int dy, int dz) { PositionBlock destPos = new PositionBlock(BlockPosition.X + dx, BlockPosition.Y + dy, BlockPosition.Z + dz); int destBlockId = Parent.SafeGetLocalBlock(destPos.X, destPos.Y, destPos.Z); if (destBlockId != BlockRepository.Water.Id) return 0f; float waterLevel = (float)Parent.GetBlockMetaData(destPos, "waterlvl"); return waterLevel; }
internal bool SameAs(PositionBlock otherPos) { return X == otherPos.X && Z == otherPos.Z && Y == otherPos.Y; }
internal bool SameAs(PositionBlock otherPos) { return(X == otherPos.X && Z == otherPos.Z && Y == otherPos.Y); }
internal void GetGlobalPositionBlock(out PositionBlock positionBlock, int x, int y, int z) { positionBlock.X = X * 16 + x; positionBlock.Y = Y * 16 + y; positionBlock.Z = Z * 16 + z; }
private float[] GetScaledNoise(PositionBlock pos, float scale, int offset = 0) { pos.X += offset; pos.Z += offset; float x = pos.X * scale; float y = pos.Y * scale; float z = pos.Z * scale; float x2 = (pos.X + 16f) * scale; float y2 = (pos.Y + 16f) * scale; float z2 = (pos.Z + 16f) * scale; float[] noise = new float[] { Noise.Generate(x, y, z2), Noise.Generate(x, y, z), Noise.Generate(x2, y, z), Noise.Generate(x2, y, z2), Noise.Generate(x, y2, z2), Noise.Generate(x, y2, z), Noise.Generate(x2, y2, z), Noise.Generate(x2, y2, z2), }; return noise; }
internal Entity GetBlockEntity(PositionBlock localPos) { return(blockEntityFullUpdate.Where(e => e.BlockPosition.SameAs(localPos)).FirstOrDefault()); }
internal Entity GetBlockEntityFromPosition(PositionBlock pos) { int x = pos.X; int y = pos.Y; int z = pos.Z; if (x < 0 || x >= 16 || y < 0 || y >= 16 || z < 0 || z >= 16) { PositionBlock globalPosition; Position.GetGlobalPositionBlock(out globalPosition, x, y, z); return World.Instance.GetBlockEntityFromPosition(globalPosition); } return RawGetBlockEntityFromPosition(x, y, z); }
internal Entity GetBlockEntity(PositionBlock localPos) { return blockEntityFullUpdate.Where(e => e.BlockPosition.SameAs(localPos)).FirstOrDefault(); }
internal int GetBlock(int x, int y, int z) { PositionBlock pos = new PositionBlock(x, y, z); return GetBlock(pos); }
internal void SetBlockMetaData(PositionBlock pos, string variable, object value) { if (pos.Y < 0) return; if (pos.Y >= Chunk.MaxSizeY) return; PositionChunk positionChunk = PositionChunk.CreateFrom(pos); Chunk chunk = GetChunk(positionChunk); positionChunk.ConvertToLocalPosition(ref pos); chunk.SetBlockMetaData(pos, variable, value); }
internal bool ReplaceBlock(PositionBlock pos, int oldId, int newId) { if (GetBlock(pos) == oldId) { SetBlock(pos, newId); return true; } return false; }
internal void GetMinCornerBlock(out PositionBlock positionBlock) { positionBlock.X = X * 16; positionBlock.Y = Y * 16; positionBlock.Z = Z * 16; }
internal void SetBlock(int x, int y, int z, int blockId) { PositionBlock pos = new PositionBlock(x, y, z); SetBlock(pos, blockId); }
internal void ConvertToLocalPosition(ref PositionBlock positionBlock) { positionBlock.X = positionBlock.X - X * 16; positionBlock.Y = positionBlock.Y - Y * 16; positionBlock.Z = positionBlock.Z - Z * 16; }
internal void RemoveMetaData(PositionBlock localPos) { int key = localPos.X * 16 * 16 + localPos.Y * 16 + localPos.Z; if (chunkMetaData.ContainsKey(key)) chunkMetaData.Remove(key); }
private void RawSetBlockMetaData(PositionBlock positionBlock, string variable, object value) { int key = positionBlock.X * 16 * 16 + positionBlock.Y * 16 + positionBlock.Z; if (!chunkMetaData.ContainsKey(key)) { chunkMetaData.Add(key, new Dictionary<string, object>()); } chunkMetaData[key][variable] = value; }
private object RawGetBlockMetaData(PositionBlock positionBlock, string variable) { int key = positionBlock.X * 16 * 16 + positionBlock.Y * 16 + positionBlock.Z; if (chunkMetaData.ContainsKey(key)) return chunkMetaData[key][variable]; return null; }
internal object GetBlockMetaData(PositionBlock pos, string variable) { if (pos.Y < 0) return null; if (pos.Y >= Chunk.MaxSizeY) return null; PositionChunk positionChunk = PositionChunk.CreateFrom(pos); Chunk chunk = GetChunk(positionChunk); positionChunk.ConvertToLocalPosition(ref pos); return chunk.GetBlockMetaData(pos, variable); }
internal static PositionChunk CreateFrom(PositionBlock positionBlock) { return(CreateFrom(new Vector3(positionBlock.X, positionBlock.Y, positionBlock.Z))); }