package com.ingotpowered.world; import com.ingotpowered.api.Position; import com.ingotpowered.api.definitions.Difficulty; import com.ingotpowered.api.definitions.Dimension; import com.ingotpowered.api.definitions.LevelType; import com.ingotpowered.api.world.Block; import com.ingotpowered.api.world.Chunk; import com.ingotpowered.api.world.ChunkPosition; import com.ingotpowered.api.world.World; import java.util.concurrent.ConcurrentHashMap; public class IngotWorld implements World { public String name; public ConcurrentHashMap<ChunkPosition, IngotChunk> chunks = new ConcurrentHashMap<ChunkPosition, IngotChunk>(); public WorldThread worldThread = new WorldThread(this); public LevelType levelType; public Dimension dimension; public Difficulty difficulty; public IngotWorld(String name) { this.name = name; this.worldThread.start(); } @Override public LevelType getType() { return levelType; } @Override public Dimension getDimension() { return dimension; } @Override public Difficulty getDifficulty() { return difficulty; } @Override public void setDifficulty(Difficulty difficulty) { synchronized (difficulty){ this.difficulty = difficulty; } } @Override public String getName() { return name; } @Override public Chunk getChunkAt(ChunkPosition position) { return chunks.get(position); } @Override public Chunk getChunkAt(int x, int z) { return chunks.get(new ChunkPosition(x,z)); } @Override public Block getBlock(int x, int y, int z) { int cx = x>>4; int cz = z>>4; return getChunkAt(x,z).getBlock(x-(cx<<4),y,z-(cz<<4)); } @Override public Block getBlock(double x, double y, double z) { return getBlock(x<0?((int)x) - 1 : (int)x, y<0?((int)y) - 1 : (int)y, z<0?((int)z) - 1 : (int)z); } @Override public Block getBlock(Position position) { return getBlock(position.getX(),position.getY(),position.getZ()); } }