mirror of
https://github.com/Minestom/Minestom.git
synced 2024-09-27 14:13:24 +02:00
Fixed chunk
This commit is contained in:
parent
d1967186e5
commit
2afb170ff0
@ -16,8 +16,6 @@ public class Entity {
|
|||||||
private boolean isActive; // False if entity has only been instanced without being added somewhere
|
private boolean isActive; // False if entity has only been instanced without being added somewhere
|
||||||
private boolean shouldRemove;
|
private boolean shouldRemove;
|
||||||
|
|
||||||
private Object monitor = new Object();
|
|
||||||
|
|
||||||
public Entity() {
|
public Entity() {
|
||||||
this.id = generateId();
|
this.id = generateId();
|
||||||
this.uuid = UUID.randomUUID();
|
this.uuid = UUID.randomUUID();
|
||||||
@ -68,7 +66,7 @@ public class Entity {
|
|||||||
if (instance != null) {
|
if (instance != null) {
|
||||||
Chunk lastChunk = instance.getChunkAt(lastX, lastZ);
|
Chunk lastChunk = instance.getChunkAt(lastX, lastZ);
|
||||||
Chunk newChunk = instance.getChunkAt(x, z);
|
Chunk newChunk = instance.getChunkAt(x, z);
|
||||||
if (newChunk != null && lastChunk != newChunk) {
|
if (lastChunk != null && newChunk != null && lastChunk != newChunk) {
|
||||||
synchronized (lastChunk) {
|
synchronized (lastChunk) {
|
||||||
synchronized (newChunk) {
|
synchronized (newChunk) {
|
||||||
lastChunk.removeEntity(this);
|
lastChunk.removeEntity(this);
|
||||||
|
@ -17,27 +17,31 @@ public class EntityManager {
|
|||||||
public void update() {
|
public void update() {
|
||||||
|
|
||||||
for (Instance instance : instanceManager.getInstances()) {
|
for (Instance instance : instanceManager.getInstances()) {
|
||||||
// Creatures
|
|
||||||
for (EntityCreature creature : instance.getCreatures()) {
|
synchronized (instance) {
|
||||||
creaturesPool.submit(() -> {
|
// Creatures
|
||||||
creature.update();
|
for (EntityCreature creature : instance.getCreatures()) {
|
||||||
boolean shouldRemove = creature.shouldRemove();
|
creaturesPool.submit(() -> {
|
||||||
if (shouldRemove) {
|
creature.update();
|
||||||
instance.removeEntity(creature);
|
boolean shouldRemove = creature.shouldRemove();
|
||||||
}
|
if (shouldRemove) {
|
||||||
});
|
instance.removeEntity(creature);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Players
|
||||||
|
for (Player player : instance.getPlayers()) {
|
||||||
|
playersPool.submit(() -> {
|
||||||
|
player.update();
|
||||||
|
boolean shouldRemove = player.shouldRemove();
|
||||||
|
if (shouldRemove) {
|
||||||
|
instance.removeEntity(player);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Players
|
|
||||||
for (Player player : instance.getPlayers()) {
|
|
||||||
playersPool.submit(() -> {
|
|
||||||
player.update();
|
|
||||||
boolean shouldRemove = player.shouldRemove();
|
|
||||||
if (shouldRemove) {
|
|
||||||
instance.removeEntity(player);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,11 +20,11 @@ public class Instance {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO BlockBatch with pool
|
// TODO BlockBatch with pool
|
||||||
public void setBlock(int x, int y, int z, Block block) {
|
public synchronized void setBlock(int x, int y, int z, Block block) {
|
||||||
Chunk chunk = getChunkAt(x, z);
|
int chunkX = Math.floorDiv(x, 16);
|
||||||
|
int chunkZ = Math.floorDiv(z, 16);
|
||||||
|
Chunk chunk = getChunk(chunkX, chunkZ);
|
||||||
if (chunk == null) {
|
if (chunk == null) {
|
||||||
int chunkX = x / 16;
|
|
||||||
int chunkZ = z / 16;
|
|
||||||
chunk = new Chunk(Biome.VOID, chunkX, chunkZ);
|
chunk = new Chunk(Biome.VOID, chunkX, chunkZ);
|
||||||
this.chunksSet.add(chunk);
|
this.chunksSet.add(chunk);
|
||||||
}
|
}
|
||||||
@ -42,8 +42,8 @@ public class Instance {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Chunk getChunkAt(double x, double z) {
|
public Chunk getChunkAt(double x, double z) {
|
||||||
int chunkX = (int) (x / 16);
|
int chunkX = Math.floorDiv((int) x, 16);
|
||||||
int chunkZ = (int) (z / 16);
|
int chunkZ = Math.floorDiv((int) z, 16);
|
||||||
return getChunk(chunkX, chunkZ);
|
return getChunk(chunkX, chunkZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,8 +31,9 @@ public class LoginStartPacket implements ClientPreplayPacket {
|
|||||||
static {
|
static {
|
||||||
instance = Main.getInstanceManager().createInstance();
|
instance = Main.getInstanceManager().createInstance();
|
||||||
for (int x = -64; x < 64; x++)
|
for (int x = -64; x < 64; x++)
|
||||||
for (int z = -64; z < 64; z++)
|
for (int z = -64; z < 64; z++) {
|
||||||
instance.setBlock(x, 4, z, new Block(1));
|
instance.setBlock(x, 4, z, new Block(1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user