diff --git a/src/main/java/net/minestom/server/command/CommandManager.java b/src/main/java/net/minestom/server/command/CommandManager.java
index eedb6fd6b..adcc9eca4 100644
--- a/src/main/java/net/minestom/server/command/CommandManager.java
+++ b/src/main/java/net/minestom/server/command/CommandManager.java
@@ -52,6 +52,11 @@ public class CommandManager {
consoleThread.start();
}
+ /**
+ * Stop the console responsive for the console commands processing
+ *
+ * WARNING: it cannot be re-run later
+ */
public void stopConsoleThread() {
running = false;
}
@@ -334,7 +339,7 @@ public class CommandManager {
}
if (lastNodes != null) {
- int[] children = ArrayUtils.toArray(argChildren);
+ final int[] children = ArrayUtils.toArray(argChildren);
lastNodes.forEach(n -> n.children = children);
}
@@ -347,7 +352,7 @@ public class CommandManager {
if (isLast) {
// Last argument doesn't have children
- int[] children = new int[0];
+ final int[] children = new int[0];
argumentNodes.forEach(node -> node.children = children);
} else {
// Create children list which will be filled during next iteration
@@ -357,7 +362,7 @@ public class CommandManager {
}
}
- int[] children = ArrayUtils.toArray(cmdChildren);
+ final int[] children = ArrayUtils.toArray(cmdChildren);
//System.out.println("test " + children.length + " : " + children[0]);
literalNode.children = children;
if (children.length > 0) {
diff --git a/src/main/java/net/minestom/server/data/DataManager.java b/src/main/java/net/minestom/server/data/DataManager.java
index 44183570c..1c18de2ee 100644
--- a/src/main/java/net/minestom/server/data/DataManager.java
+++ b/src/main/java/net/minestom/server/data/DataManager.java
@@ -70,6 +70,8 @@ public final class DataManager {
}
/**
+ * Get the data type associated with a class
+ *
* @param clazz the data class
* @param the data type
* @return the {@link DataType} associated to the class
diff --git a/src/main/java/net/minestom/server/event/CancellableEvent.java b/src/main/java/net/minestom/server/event/CancellableEvent.java
index 735aa3ac2..fe1f62cf4 100644
--- a/src/main/java/net/minestom/server/event/CancellableEvent.java
+++ b/src/main/java/net/minestom/server/event/CancellableEvent.java
@@ -1,10 +1,15 @@
package net.minestom.server.event;
+/**
+ * Represent an event which can be cancelled
+ */
public class CancellableEvent extends Event {
private boolean cancelled;
/**
+ * Get if the event will be cancelled or not
+ *
* @return true if the event should be cancelled, false otherwise
*/
public boolean isCancelled() {
@@ -12,6 +17,8 @@ public class CancellableEvent extends Event {
}
/**
+ * Mark the event as cancelled or not
+ *
* @param cancel true if the event should be cancelled, false otherwise
*/
public void setCancelled(boolean cancel) {
diff --git a/src/main/java/net/minestom/server/instance/Chunk.java b/src/main/java/net/minestom/server/instance/Chunk.java
index bb1da505e..287d62183 100644
--- a/src/main/java/net/minestom/server/instance/Chunk.java
+++ b/src/main/java/net/minestom/server/instance/Chunk.java
@@ -102,7 +102,7 @@ public final class Chunk implements Viewable {
}
private void setBlock(int x, int y, int z, short blockId, short customId, Data data, UpdateConsumer updateConsumer) {
- int index = getBlockIndex(x, y, z);
+ final int index = getBlockIndex(x, y, z);
if (blockId != 0
|| (blockId == 0 && customId != 0 && updateConsumer != null)) { // Allow custom air block for update purpose, refused if no update consumer has been found
this.blocksId[index] = blockId;
@@ -149,7 +149,7 @@ public final class Chunk implements Viewable {
}
public void setBlockData(int x, int y, int z, Data data) {
- int index = getBlockIndex(x, y, z);
+ final int index = getBlockIndex(x, y, z);
if (data != null) {
this.blocksData.put(index, data);
} else {
@@ -158,39 +158,39 @@ public final class Chunk implements Viewable {
}
public short getBlockId(int x, int y, int z) {
- int index = getBlockIndex(x, y, z);
+ final int index = getBlockIndex(x, y, z);
if (!MathUtils.isBetween(index, 0, blocksId.length)) {
return 0; // TODO: custom invalid block
}
- short id = blocksId[index];
+ final short id = blocksId[index];
return id;
}
public short getCustomBlockId(int x, int y, int z) {
- int index = getBlockIndex(x, y, z);
+ final int index = getBlockIndex(x, y, z);
if (!MathUtils.isBetween(index, 0, blocksId.length)) {
return 0; // TODO: custom invalid block
}
- short id = customBlocksId[index];
+ final short id = customBlocksId[index];
return id;
}
public CustomBlock getCustomBlock(int x, int y, int z) {
- int index = getBlockIndex(x, y, z);
+ final int index = getBlockIndex(x, y, z);
if (!MathUtils.isBetween(index, 0, blocksId.length)) {
return null; // TODO: custom invalid block
}
- short id = customBlocksId[index];
+ final short id = customBlocksId[index];
return id != 0 ? BLOCK_MANAGER.getCustomBlock(id) : null;
}
protected CustomBlock getCustomBlock(int index) {
- int[] pos = ChunkUtils.indexToChunkPosition(index);
+ final int[] pos = ChunkUtils.indexToChunkPosition(index);
return getCustomBlock(pos[0], pos[1], pos[2]);
}
protected void refreshBlockValue(int x, int y, int z, short blockId, short customId) {
- int blockIndex = getBlockIndex(x, y, z);
+ final int blockIndex = getBlockIndex(x, y, z);
if (!MathUtils.isBetween(blockIndex, 0, blocksId.length)) {
return;
}
@@ -200,7 +200,7 @@ public final class Chunk implements Viewable {
}
protected void refreshBlockId(int x, int y, int z, short blockId) {
- int blockIndex = getBlockIndex(x, y, z);
+ final int blockIndex = getBlockIndex(x, y, z);
if (!MathUtils.isBetween(blockIndex, 0, blocksId.length)) {
return;
}
@@ -209,13 +209,13 @@ public final class Chunk implements Viewable {
}
protected void refreshBlockValue(int x, int y, int z, short blockId) {
- CustomBlock customBlock = getCustomBlock(x, y, z);
- short customBlockId = customBlock == null ? 0 : customBlock.getCustomBlockId();
+ final CustomBlock customBlock = getCustomBlock(x, y, z);
+ final short customBlockId = customBlock == null ? 0 : customBlock.getCustomBlockId();
refreshBlockValue(x, y, z, blockId, customBlockId);
}
public Data getData(int x, int y, int z) {
- int index = getBlockIndex(x, y, z);
+ final int index = getBlockIndex(x, y, z);
return getData(index);
}
@@ -243,12 +243,12 @@ public final class Chunk implements Viewable {
this.updatableBlocksLastUpdate.put(index, time); // Refresh last update time
final int[] blockPos = ChunkUtils.indexToPosition(index, chunkX, chunkZ);
- int x = blockPos[0];
- int y = blockPos[1];
- int z = blockPos[2];
+ final int x = blockPos[0];
+ final int y = blockPos[1];
+ final int z = blockPos[2];
- BlockPosition blockPosition = new BlockPosition(x, y, z);
- Data data = getData(index);
+ final BlockPosition blockPosition = new BlockPosition(x, y, z);
+ final Data data = getData(index);
customBlock.update(instance, blockPosition, data);
}
}
@@ -270,7 +270,7 @@ public final class Chunk implements Viewable {
}
private boolean isBlockEntity(short blockId) {
- Block block = Block.fromId(blockId);
+ final Block block = Block.fromId(blockId);
return block.hasBlockEntity();
}
@@ -294,16 +294,15 @@ public final class Chunk implements Viewable {
for (byte x = 0; x < CHUNK_SIZE_X; x++) {
for (short y = 0; y < CHUNK_SIZE_Y; y++) {
for (byte z = 0; z < CHUNK_SIZE_Z; z++) {
- int index = getBlockIndex(x, y, z);
+ final int index = getBlockIndex(x, y, z);
- short blockId = blocksId[index];
- short customBlockId = customBlocksId[index];
+ final short blockId = blocksId[index];
+ final short customBlockId = customBlocksId[index];
if (blockId == 0 && customBlockId == 0)
continue;
- Data data = blocksData.get(index);
- boolean hasData = data != null;
+ final Data data = blocksData.get(index);
// Chunk coordinates
dos.writeInt(x);
@@ -315,10 +314,10 @@ public final class Chunk implements Viewable {
dos.writeShort(customBlockId);
// Data
- hasData = (data != null && (data instanceof SerializableData)) && hasData;
+ final boolean hasData = (data != null && (data instanceof SerializableData));
dos.writeBoolean(hasData);
if (hasData) {
- byte[] d = ((SerializableData) data).getSerializedData();
+ final byte[] d = ((SerializableData) data).getSerializedData();
dos.writeInt(d.length);
dos.write(d);
}
@@ -326,7 +325,7 @@ public final class Chunk implements Viewable {
}
}
- byte[] result = output.toByteArray();
+ final byte[] result = output.toByteArray();
return result;
}
@@ -359,7 +358,7 @@ public final class Chunk implements Viewable {
// Write the packet in the current thread
public void refreshDataPacket() {
- ByteBuf buffer = PacketUtils.writePacket(getFreshFullDataPacket());
+ final ByteBuf buffer = PacketUtils.writePacket(getFreshFullDataPacket());
setFullDataPacket(buffer);
}
@@ -389,7 +388,7 @@ public final class Chunk implements Viewable {
// UNSAFE
@Override
public boolean addViewer(Player player) {
- boolean result = this.viewers.add(player);
+ final boolean result = this.viewers.add(player);
PlayerChunkLoadEvent playerChunkLoadEvent = new PlayerChunkLoadEvent(player, chunkX, chunkZ);
player.callEvent(PlayerChunkLoadEvent.class, playerChunkLoadEvent);
@@ -399,7 +398,7 @@ public final class Chunk implements Viewable {
// UNSAFE
@Override
public boolean removeViewer(Player player) {
- boolean result = this.viewers.remove(player);
+ final boolean result = this.viewers.remove(player);
PlayerChunkUnloadEvent playerChunkUnloadEvent = new PlayerChunkUnloadEvent(player, chunkX, chunkZ);
player.callEvent(PlayerChunkUnloadEvent.class, playerChunkUnloadEvent);
diff --git a/src/main/java/net/minestom/server/instance/Explosion.java b/src/main/java/net/minestom/server/instance/Explosion.java
index e69b0d1a4..0753c6d3c 100644
--- a/src/main/java/net/minestom/server/instance/Explosion.java
+++ b/src/main/java/net/minestom/server/instance/Explosion.java
@@ -42,6 +42,7 @@ public abstract class Explosion {
/**
* Prepares the list of blocks that will be broken. Also pushes and damage entities affected by this explosion
+ *
* @param instance instance to perform this explosion in
* @return list of blocks that will be broken.
*/
@@ -49,6 +50,7 @@ public abstract class Explosion {
/**
* Performs the explosion and send the corresponding packet
+ *
* @param instance instance to perform this explosion in
*/
public void apply(Instance instance) {
@@ -62,16 +64,16 @@ public abstract class Explosion {
packet.playerMotionY = 0.0f; // TODO: figure out why this is here
packet.playerMotionZ = 0.0f; // TODO: figure out why this is here
- packet.records = new byte[3*blocks.size()];
+ packet.records = new byte[3 * blocks.size()];
for (int i = 0; i < blocks.size(); i++) {
- BlockPosition pos = blocks.get(i);
+ final BlockPosition pos = blocks.get(i);
instance.setBlock(pos, Block.AIR);
- byte x = (byte) (pos.getX()-Math.floor(getCenterX()));
- byte y = (byte) (pos.getY()-Math.floor(getCenterY()));
- byte z = (byte) (pos.getZ()-Math.floor(getCenterZ()));
- packet.records[i*3+0] = x;
- packet.records[i*3+1] = y;
- packet.records[i*3+2] = z;
+ final byte x = (byte) (pos.getX() - Math.floor(getCenterX()));
+ final byte y = (byte) (pos.getY() - Math.floor(getCenterY()));
+ final byte z = (byte) (pos.getZ() - Math.floor(getCenterZ()));
+ packet.records[i * 3 + 0] = x;
+ packet.records[i * 3 + 1] = y;
+ packet.records[i * 3 + 2] = z;
}
postExplosion(instance, blocks, packet);
@@ -85,20 +87,24 @@ public abstract class Explosion {
/**
* Called after removing blocks and preparing the packet, but before sending it.
+ *
* @param instance the instance in which the explosion occurs
- * @param blocks the block positions returned by prepare
- * @param packet the explosion packet to sent to the client. Be careful with what you're doing.
- * It is initialized with the center and radius of the explosion. The positions in 'blocks' are also
- * stored in the packet before this call, but you are free to modify 'records' to modify the blocks sent to the client.
- * Just be careful, you might just crash the server or the client. Or you're lucky, both at the same time.
+ * @param blocks the block positions returned by prepare
+ * @param packet the explosion packet to sent to the client. Be careful with what you're doing.
+ * It is initialized with the center and radius of the explosion. The positions in 'blocks' are also
+ * stored in the packet before this call, but you are free to modify 'records' to modify the blocks sent to the client.
+ * Just be careful, you might just crash the server or the client. Or you're lucky, both at the same time.
*/
- protected void postExplosion(Instance instance, List blocks, ExplosionPacket packet) {}
+ protected void postExplosion(Instance instance, List blocks, ExplosionPacket packet) {
+ }
/**
* Called after sending the explosion packet. Can be used to (re)set blocks that have been destroyed.
* This is necessary to do after the packet being sent, because the client sets the positions received to air.
+ *
* @param instance the instance in which the explosion occurs
- * @param blocks the block positions returned by prepare
+ * @param blocks the block positions returned by prepare
*/
- protected void postSend(Instance instance, List blocks) {}
+ protected void postSend(Instance instance, List blocks) {
+ }
}
diff --git a/src/main/java/net/minestom/server/instance/ExplosionSupplier.java b/src/main/java/net/minestom/server/instance/ExplosionSupplier.java
index f234d8921..1c295d6a2 100644
--- a/src/main/java/net/minestom/server/instance/ExplosionSupplier.java
+++ b/src/main/java/net/minestom/server/instance/ExplosionSupplier.java
@@ -7,10 +7,11 @@ public interface ExplosionSupplier {
/**
* Creates a new explosion
- * @param centerX center of the explosion
- * @param centerY center of the explosion
- * @param centerZ center of the explosion
- * @param strength strength of the explosion
+ *
+ * @param centerX center of the explosion
+ * @param centerY center of the explosion
+ * @param centerZ center of the explosion
+ * @param strength strength of the explosion
* @param additionalData data passed via {@link Instance#explode)}. Can be null
* @return Explosion object representing the algorithm to use
*/
diff --git a/src/main/java/net/minestom/server/instance/Instance.java b/src/main/java/net/minestom/server/instance/Instance.java
index 8eb697f84..91f33a880 100644
--- a/src/main/java/net/minestom/server/instance/Instance.java
+++ b/src/main/java/net/minestom/server/instance/Instance.java
@@ -267,7 +267,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
}
protected void sendChunkUpdate(Collection players, Chunk chunk) {
- ByteBuf chunkData = chunk.getFullDataPacket();
+ final ByteBuf chunkData = chunk.getFullDataPacket();
players.forEach(player -> {
if (!PlayerUtils.isNettyClient(player))
return;
@@ -471,14 +471,14 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
}
public void loadChunk(Position position, Consumer callback) {
- int chunkX = ChunkUtils.getChunkCoordinate((int) position.getX());
- int chunkZ = ChunkUtils.getChunkCoordinate((int) position.getZ());
+ final int chunkX = ChunkUtils.getChunkCoordinate((int) position.getX());
+ final int chunkZ = ChunkUtils.getChunkCoordinate((int) position.getZ());
loadChunk(chunkX, chunkZ, callback);
}
public void loadOptionalChunk(Position position, Consumer callback) {
- int chunkX = ChunkUtils.getChunkCoordinate((int) position.getX());
- int chunkZ = ChunkUtils.getChunkCoordinate((int) position.getZ());
+ final int chunkX = ChunkUtils.getChunkCoordinate((int) position.getX());
+ final int chunkZ = ChunkUtils.getChunkCoordinate((int) position.getZ());
loadOptionalChunk(chunkX, chunkZ, callback);
}
@@ -487,8 +487,8 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
}
public short getBlockId(int x, int y, int z) {
- Chunk chunk = getChunkAt(x, z);
- Check.notNull(chunk, "The chunk at " + x + ": " + z + " is not loaded");
+ final Chunk chunk = getChunkAt(x, z);
+ Check.notNull(chunk, "The chunk at " + x + ":" + z + " is not loaded");
return chunk.getBlockId(x, y, z);
}
@@ -501,8 +501,8 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
}
public CustomBlock getCustomBlock(int x, int y, int z) {
- Chunk chunk = getChunkAt(x, z);
- Check.notNull(chunk, "The chunk at " + x + ": " + z + " is not loaded");
+ final Chunk chunk = getChunkAt(x, z);
+ Check.notNull(chunk, "The chunk at " + x + ":" + z + " is not loaded");
return chunk.getCustomBlock(x, y, z);
}
@@ -520,13 +520,13 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
blockActionPacket.actionParam = actionParam;
blockActionPacket.blockId = block.getBlockId();
- Chunk chunk = getChunkAt(blockPosition);
+ final Chunk chunk = getChunkAt(blockPosition);
chunk.sendPacketToViewers(blockActionPacket);
}
public Data getBlockData(int x, int y, int z) {
- Chunk chunk = getChunkAt(x, z);
- Check.notNull(chunk, "The chunk at " + x + ": " + z + " is not loaded");
+ final Chunk chunk = getChunkAt(x, z);
+ Check.notNull(chunk, "The chunk at " + x + ":" + z + " is not loaded");
return chunk.getData(x, (byte) y, z);
}
@@ -535,8 +535,8 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
}
public Chunk getChunkAt(double x, double z) {
- int chunkX = ChunkUtils.getChunkCoordinate((int) x);
- int chunkZ = ChunkUtils.getChunkCoordinate((int) z);
+ final int chunkX = ChunkUtils.getChunkCoordinate((int) x);
+ final int chunkZ = ChunkUtils.getChunkCoordinate((int) z);
return getChunk(chunkX, chunkZ);
}
@@ -609,17 +609,17 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
* @param entity the entity to add
*/
public void addEntity(Entity entity) {
- Instance lastInstance = entity.getInstance();
+ final Instance lastInstance = entity.getInstance();
if (lastInstance != null && lastInstance != this) {
lastInstance.removeEntity(entity); // If entity is in another instance, remove it from there and add it to this
}
AddEntityToInstanceEvent event = new AddEntityToInstanceEvent(this, entity);
callCancellableEvent(AddEntityToInstanceEvent.class, event, () -> {
- long[] visibleChunksEntity = ChunkUtils.getChunksInRange(entity.getPosition(), MinecraftServer.ENTITY_VIEW_DISTANCE);
- boolean isPlayer = entity instanceof Player;
+ final long[] visibleChunksEntity = ChunkUtils.getChunksInRange(entity.getPosition(), MinecraftServer.ENTITY_VIEW_DISTANCE);
+ final boolean isPlayer = entity instanceof Player;
if (isPlayer) {
- Player player = (Player) entity;
+ final Player player = (Player) entity;
sendChunks(player);
getWorldBorder().init(player);
}
@@ -638,7 +638,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
});
}
- Chunk chunk = getChunkAt(entity.getPosition());
+ final Chunk chunk = getChunkAt(entity.getPosition());
addEntityToChunk(entity, chunk);
});
}
@@ -651,7 +651,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
* @param entity the entity to remove
*/
public void removeEntity(Entity entity) {
- Instance entityInstance = entity.getInstance();
+ final Instance entityInstance = entity.getInstance();
if (entityInstance == null || entityInstance != this)
return;
@@ -662,7 +662,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
entity.getViewers().forEach(p -> entity.removeViewer(p));
}
- Chunk chunk = getChunkAt(entity.getPosition());
+ final Chunk chunk = getChunkAt(entity.getPosition());
removeEntityFromChunk(entity, chunk);
});
}
@@ -679,7 +679,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
Check.notNull(chunk,
"The chunk " + chunk + " is not loaded, you can make it automatic by using Instance#enableAutoChunkLoad(true)");
Check.argCondition(!chunk.isLoaded(), "Chunk " + chunk + " has been unloaded previously");
- long chunkIndex = ChunkUtils.getChunkIndex(chunk.getChunkX(), chunk.getChunkZ());
+ final long chunkIndex = ChunkUtils.getChunkIndex(chunk.getChunkX(), chunk.getChunkZ());
synchronized (chunkEntities) {
Set entities = getEntitiesInChunk(chunkIndex);
entities.add(entity);
@@ -708,7 +708,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
public void removeEntityFromChunk(Entity entity, Chunk chunk) {
synchronized (chunkEntities) {
if (chunk != null) {
- long chunkIndex = ChunkUtils.getChunkIndex(chunk.getChunkX(), chunk.getChunkZ());
+ final long chunkIndex = ChunkUtils.getChunkIndex(chunk.getChunkX(), chunk.getChunkZ());
Set entities = getEntitiesInChunk(chunkIndex);
entities.remove(entity);
if (entities.isEmpty()) {
@@ -800,7 +800,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
* @throws IllegalStateException If no {@link ExplosionSupplier} was supplied
*/
public void explode(float centerX, float centerY, float centerZ, float strength, Data additionalData) {
- ExplosionSupplier explosionSupplier = getExplosionSupplier();
+ final ExplosionSupplier explosionSupplier = getExplosionSupplier();
if (explosionSupplier == null)
throw new IllegalStateException("Tried to create an explosion with no explosion supplier");
Explosion explosion = explosionSupplier.createExplosion(centerX, centerY, centerZ, strength, additionalData);
diff --git a/src/main/java/net/minestom/server/instance/InstanceContainer.java b/src/main/java/net/minestom/server/instance/InstanceContainer.java
index c25358848..52466c4ff 100644
--- a/src/main/java/net/minestom/server/instance/InstanceContainer.java
+++ b/src/main/java/net/minestom/server/instance/InstanceContainer.java
@@ -75,7 +75,7 @@ public class InstanceContainer extends Instance {
// Retrieve instance data
this.uniqueId = storageFolder.getOrDefault(UUID_KEY, UUID.class, uniqueId);
- Data data = storageFolder.getOrDefault(DATA_KEY, SerializableData.class, null);
+ final Data data = storageFolder.getOrDefault(DATA_KEY, SerializableData.class, null);
setData(data);
}
@@ -86,23 +86,23 @@ public class InstanceContainer extends Instance {
@Override
public void setCustomBlock(int x, int y, int z, short customBlockId, Data data) {
- CustomBlock customBlock = BLOCK_MANAGER.getCustomBlock(customBlockId);
+ final CustomBlock customBlock = BLOCK_MANAGER.getCustomBlock(customBlockId);
setBlock(x, y, z, customBlock.getBlockId(), customBlock, data);
}
@Override
public void setSeparateBlocks(int x, int y, int z, short blockId, short customBlockId, Data data) {
- CustomBlock customBlock = BLOCK_MANAGER.getCustomBlock(customBlockId);
+ final CustomBlock customBlock = BLOCK_MANAGER.getCustomBlock(customBlockId);
setBlock(x, y, z, blockId, customBlock, data);
}
private synchronized void setBlock(int x, int y, int z, short blockId, CustomBlock customBlock, Data data) {
- Chunk chunk = getChunkAt(x, z);
+ final Chunk chunk = getChunkAt(x, z);
synchronized (chunk) {
- boolean isCustomBlock = customBlock != null;
+ final boolean isCustomBlock = customBlock != null;
- BlockPosition blockPosition = new BlockPosition(x, y, z);
+ final BlockPosition blockPosition = new BlockPosition(x, y, z);
if (isAlreadyChanged(blockPosition, blockId)) { // do NOT change the block again.
// Avoids StackOverflowExceptions when onDestroy tries to destroy the block itself
@@ -110,7 +110,7 @@ public class InstanceContainer extends Instance {
return;
}
setAlreadyChanged(blockPosition, blockId);
- int index = ChunkUtils.getBlockIndex(x, y, z);
+ final int index = ChunkUtils.getBlockIndex(x, y, z);
// Call the destroy listener if previous block was a custom block
callBlockDestroy(chunk, index, blockPosition);
@@ -149,7 +149,7 @@ public class InstanceContainer extends Instance {
* @return
*/
private boolean isAlreadyChanged(BlockPosition blockPosition, short blockId) {
- Block changedBlock = currentlyChangingBlocks.get(blockPosition);
+ final Block changedBlock = currentlyChangingBlocks.get(blockPosition);
if (changedBlock == null)
return false;
return changedBlock.getBlockId() == blockId;
@@ -157,7 +157,7 @@ public class InstanceContainer extends Instance {
@Override
public void refreshBlockId(BlockPosition blockPosition, short blockId) {
- Chunk chunk = getChunkAt(blockPosition.getX(), blockPosition.getZ());
+ final Chunk chunk = getChunkAt(blockPosition.getX(), blockPosition.getZ());
synchronized (chunk) {
chunk.refreshBlockId(blockPosition.getX(), blockPosition.getY(),
blockPosition.getZ(), blockId);
@@ -167,22 +167,22 @@ public class InstanceContainer extends Instance {
}
private void callBlockDestroy(Chunk chunk, int index, BlockPosition blockPosition) {
- CustomBlock previousBlock = chunk.getCustomBlock(index);
+ final CustomBlock previousBlock = chunk.getCustomBlock(index);
if (previousBlock != null) {
- Data previousData = chunk.getData(index);
+ final Data previousData = chunk.getData(index);
previousBlock.onDestroy(this, blockPosition, previousData);
chunk.UNSAFE_removeCustomBlock(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ());
}
}
private void callBlockPlace(Chunk chunk, int index, BlockPosition blockPosition) {
- CustomBlock actualBlock = chunk.getCustomBlock(index);
- Data previousData = chunk.getData(index);
+ final CustomBlock actualBlock = chunk.getCustomBlock(index);
+ final Data previousData = chunk.getData(index);
actualBlock.onPlace(this, blockPosition, previousData);
}
private short executeBlockPlacementRule(short blockId, BlockPosition blockPosition) {
- BlockPlacementRule blockPlacementRule = BLOCK_MANAGER.getBlockPlacementRule(blockId);
+ final BlockPlacementRule blockPlacementRule = BLOCK_MANAGER.getBlockPlacementRule(blockId);
if (blockPlacementRule != null) {
return blockPlacementRule.blockRefresh(this, blockPosition, blockId);
}
@@ -195,13 +195,13 @@ public class InstanceContainer extends Instance {
for (int offsetZ = -1; offsetZ < 2; offsetZ++) {
if (offsetX == 0 && offsetY == 0 && offsetZ == 0)
continue;
- int neighborX = blockPosition.getX() + offsetX;
- int neighborY = blockPosition.getY() + offsetY;
- int neighborZ = blockPosition.getZ() + offsetZ;
- short neighborId = getBlockId(neighborX, neighborY, neighborZ);
- BlockPlacementRule neighborBlockPlacementRule = BLOCK_MANAGER.getBlockPlacementRule(neighborId);
+ final int neighborX = blockPosition.getX() + offsetX;
+ final int neighborY = blockPosition.getY() + offsetY;
+ final int neighborZ = blockPosition.getZ() + offsetZ;
+ final short neighborId = getBlockId(neighborX, neighborY, neighborZ);
+ final BlockPlacementRule neighborBlockPlacementRule = BLOCK_MANAGER.getBlockPlacementRule(neighborId);
if (neighborBlockPlacementRule != null) {
- short newNeighborId = neighborBlockPlacementRule.blockRefresh(this,
+ final short newNeighborId = neighborBlockPlacementRule.blockRefresh(this,
new BlockPosition(neighborX, neighborY, neighborZ), neighborId);
if (neighborId != newNeighborId) {
refreshBlockId(neighborX, neighborY, neighborZ, newNeighborId);
@@ -209,7 +209,7 @@ public class InstanceContainer extends Instance {
}
// Update neighbors
- CustomBlock customBlock = getCustomBlock(neighborX, neighborY, neighborZ);
+ final CustomBlock customBlock = getCustomBlock(neighborX, neighborY, neighborZ);
if (customBlock != null) {
boolean directNeighbor = false; // only if directly connected to neighbor (no diagonals)
if (offsetX != 0 ^ offsetZ != 0) {
@@ -228,17 +228,17 @@ public class InstanceContainer extends Instance {
public boolean breakBlock(Player player, BlockPosition blockPosition) {
player.resetTargetBlock();
- Chunk chunk = getChunkAt(blockPosition);
+ final Chunk chunk = getChunkAt(blockPosition);
// Chunk unloaded, stop here
if (ChunkUtils.isChunkUnloaded(chunk))
return false;
- int x = blockPosition.getX();
- int y = blockPosition.getY();
- int z = blockPosition.getZ();
+ final int x = blockPosition.getX();
+ final int y = blockPosition.getY();
+ final int z = blockPosition.getZ();
- short blockId = getBlockId(x, y, z);
+ final short blockId = getBlockId(x, y, z);
// The player probably have a wrong version of this chunk section, send it
if (blockId == 0) {
@@ -246,11 +246,11 @@ public class InstanceContainer extends Instance {
return false;
}
- CustomBlock customBlock = getCustomBlock(x, y, z);
+ final CustomBlock customBlock = getCustomBlock(x, y, z);
PlayerBlockBreakEvent blockBreakEvent = new PlayerBlockBreakEvent(blockPosition, blockId, customBlock, (short) 0, (short) 0);
player.callEvent(PlayerBlockBreakEvent.class, blockBreakEvent);
- boolean result = !blockBreakEvent.isCancelled();
+ final boolean result = !blockBreakEvent.isCancelled();
if (result) {
// Break or change the broken block based on event result
setSeparateBlocks(x, y, z, blockBreakEvent.getResultBlockId(), blockBreakEvent.getResultCustomBlockId());
@@ -271,7 +271,7 @@ public class InstanceContainer extends Instance {
} else {
// Cancelled so we need to refresh player chunk section
- int section = ChunkUtils.getSectionAt(blockPosition.getY());
+ final int section = ChunkUtils.getSectionAt(blockPosition.getY());
sendChunkSectionUpdate(chunk, section, player);
}
return result;
@@ -279,7 +279,7 @@ public class InstanceContainer extends Instance {
@Override
public void loadChunk(int chunkX, int chunkZ, Consumer callback) {
- Chunk chunk = getChunk(chunkX, chunkZ);
+ final Chunk chunk = getChunk(chunkX, chunkZ);
if (chunk != null) {
// Chunk already loaded
if (callback != null)
@@ -292,7 +292,7 @@ public class InstanceContainer extends Instance {
@Override
public void loadOptionalChunk(int chunkX, int chunkZ, Consumer callback) {
- Chunk chunk = getChunk(chunkX, chunkZ);
+ final Chunk chunk = getChunk(chunkX, chunkZ);
if (chunk != null) {
// Chunk already loaded
if (callback != null)
@@ -311,10 +311,10 @@ public class InstanceContainer extends Instance {
@Override
public void unloadChunk(Chunk chunk) {
- int chunkX = chunk.getChunkX();
- int chunkZ = chunk.getChunkZ();
+ final int chunkX = chunk.getChunkX();
+ final int chunkZ = chunk.getChunkZ();
- long index = ChunkUtils.getChunkIndex(chunkX, chunkZ);
+ final long index = ChunkUtils.getChunkIndex(chunkX, chunkZ);
UnloadChunkPacket unloadChunkPacket = new UnloadChunkPacket();
unloadChunkPacket.chunkX = chunkX;
@@ -342,7 +342,7 @@ public class InstanceContainer extends Instance {
@Override
public Chunk getChunk(int chunkX, int chunkZ) {
- Chunk chunk = chunks.get(ChunkUtils.getChunkIndex(chunkX, chunkZ));
+ final Chunk chunk = chunks.get(ChunkUtils.getChunkIndex(chunkX, chunkZ));
return ChunkUtils.isChunkUnloaded(chunk) ? null : chunk;
}
@@ -376,7 +376,7 @@ public class InstanceContainer extends Instance {
@Override
public void saveChunksToStorageFolder(Runnable callback) {
Check.notNull(getStorageFolder(), "You cannot save the instance if no StorageFolder has been defined");
- if(chunkLoader.supportsParallelSaving()) {
+ if (chunkLoader.supportsParallelSaving()) {
ExecutorService parallelSavingThreadPool = new MinestomThread(MinecraftServer.THREAD_COUNT_PARALLEL_CHUNK_SAVING, MinecraftServer.THREAD_NAME_PARALLEL_CHUNK_SAVING, true);
getChunks().forEach(c -> parallelSavingThreadPool.execute(() -> {
saveChunkToStorageFolder(c, null);
@@ -384,7 +384,7 @@ public class InstanceContainer extends Instance {
try {
parallelSavingThreadPool.shutdown();
parallelSavingThreadPool.awaitTermination(1L, java.util.concurrent.TimeUnit.DAYS);
- if(callback != null)
+ if (callback != null)
callback.run();
} catch (InterruptedException e) {
e.printStackTrace();
@@ -392,8 +392,8 @@ public class InstanceContainer extends Instance {
} else {
Iterator chunks = getChunks().iterator();
while (chunks.hasNext()) {
- Chunk chunk = chunks.next();
- boolean isLast = !chunks.hasNext();
+ final Chunk chunk = chunks.next();
+ final boolean isLast = !chunks.hasNext();
saveChunkToStorageFolder(chunk, isLast ? callback : null);
}
}
@@ -412,7 +412,7 @@ public class InstanceContainer extends Instance {
@Override
protected void retrieveChunk(int chunkX, int chunkZ, Consumer callback) {
- boolean loaded = chunkLoader.loadChunk(this, chunkX, chunkZ, chunk -> {
+ final boolean loaded = chunkLoader.loadChunk(this, chunkX, chunkZ, chunk -> {
cacheChunk(chunk);
callChunkLoadEvent(chunkX, chunkZ);
if (callback != null)
@@ -434,14 +434,14 @@ public class InstanceContainer extends Instance {
chunkGenerator.fillBiomes(biomes, chunkX, chunkZ);
}
- Chunk chunk = new Chunk(biomes, chunkX, chunkZ);
+ final Chunk chunk = new Chunk(biomes, chunkX, chunkZ);
cacheChunk(chunk);
if (chunkGenerator != null) {
- ChunkBatch chunkBatch = createChunkBatch(chunk);
+ final ChunkBatch chunkBatch = createChunkBatch(chunk);
chunkBatch.flushChunkGenerator(chunkGenerator, callback);
}
-
+
callChunkLoadEvent(chunkX, chunkZ);
}
@@ -466,7 +466,7 @@ public class InstanceContainer extends Instance {
if (!PlayerUtils.isNettyClient(player))
return;
- ByteBuf data = chunk.getFullDataPacket();
+ final ByteBuf data = chunk.getFullDataPacket();
if (data == null || !chunk.packetUpdated) {
PacketWriterUtils.writeCallbackPacket(chunk.getFreshFullDataPacket(), packet -> {
chunk.setFullDataPacket(packet);
@@ -476,6 +476,7 @@ public class InstanceContainer extends Instance {
sendChunkUpdate(player, chunk);
}
+ // TODO do not hardcore
if (MinecraftServer.isFixLighting()) {
UpdateLightPacket updateLightPacket = new UpdateLightPacket();
updateLightPacket.chunkX = chunk.getChunkX();
@@ -521,7 +522,7 @@ public class InstanceContainer extends Instance {
}
private void cacheChunk(Chunk chunk) {
- long index = ChunkUtils.getChunkIndex(chunk.getChunkX(), chunk.getChunkZ());
+ final long index = ChunkUtils.getChunkIndex(chunk.getChunkX(), chunk.getChunkZ());
this.chunks.put(index, chunk);
}
@@ -567,14 +568,14 @@ public class InstanceContainer extends Instance {
@Override
public void scheduleUpdate(int time, TimeUnit unit, BlockPosition position) {
Instance instance = this;
- CustomBlock toUpdate = getCustomBlock(position);
+ final CustomBlock toUpdate = getCustomBlock(position);
if (toUpdate == null) {
return;
}
MinecraftServer.getSchedulerManager().addDelayedTask(new TaskRunnable() {
@Override
public void run() {
- CustomBlock currentBlock = instance.getCustomBlock(position);
+ final CustomBlock currentBlock = instance.getCustomBlock(position);
if (currentBlock == null)
return;
if (currentBlock.getCustomBlockId() != toUpdate.getCustomBlockId()) { // block changed
diff --git a/src/main/java/net/minestom/server/instance/InstanceManager.java b/src/main/java/net/minestom/server/instance/InstanceManager.java
index 4bfe12450..3fda23367 100644
--- a/src/main/java/net/minestom/server/instance/InstanceManager.java
+++ b/src/main/java/net/minestom/server/instance/InstanceManager.java
@@ -36,7 +36,7 @@ public final class InstanceManager {
}
public SharedInstance createSharedInstance(SharedInstance sharedInstance) {
- InstanceContainer instanceContainer = sharedInstance.getInstanceContainer();
+ final InstanceContainer instanceContainer = sharedInstance.getInstanceContainer();
Check.notNull(instanceContainer, "SharedInstance needs to have an InstanceContainer to be created!");
instanceContainer.addSharedInstance(sharedInstance);
@@ -47,7 +47,7 @@ public final class InstanceManager {
public SharedInstance createSharedInstance(InstanceContainer instanceContainer) {
Check.notNull(instanceContainer, "Instance container cannot be null when creating a SharedInstance!");
- SharedInstance sharedInstance = new SharedInstance(UUID.randomUUID(), instanceContainer);
+ final SharedInstance sharedInstance = new SharedInstance(UUID.randomUUID(), instanceContainer);
return createSharedInstance(sharedInstance);
}
diff --git a/src/main/java/net/minestom/server/instance/batch/BlockBatch.java b/src/main/java/net/minestom/server/instance/batch/BlockBatch.java
index 215ef7cef..723005829 100644
--- a/src/main/java/net/minestom/server/instance/batch/BlockBatch.java
+++ b/src/main/java/net/minestom/server/instance/batch/BlockBatch.java
@@ -62,9 +62,9 @@ public class BlockBatch implements InstanceBatch {
int counter = 0;
for (Map.Entry> entry : data.entrySet()) {
counter++;
- Chunk chunk = entry.getKey();
- List dataList = entry.getValue();
- boolean isLast = counter == data.size();
+ final Chunk chunk = entry.getKey();
+ final List dataList = entry.getValue();
+ final boolean isLast = counter == data.size();
batchesPool.execute(() -> {
synchronized (chunk) {
if (!chunk.isLoaded())
diff --git a/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java b/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java
index afa6ec397..af85f4b93 100644
--- a/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java
+++ b/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java
@@ -73,7 +73,7 @@ public class ChunkBatch implements InstanceBatch {
if (hasPopulator) {
Iterator populatorIterator = populators.iterator();
while (populatorIterator.hasNext()) {
- ChunkPopulator chunkPopulator = populatorIterator.next();
+ final ChunkPopulator chunkPopulator = populatorIterator.next();
chunkPopulator.populateChunk(this, chunk);
}
singleThreadFlush(callback);
diff --git a/src/main/java/net/minestom/server/instance/block/BlockAlternative.java b/src/main/java/net/minestom/server/instance/block/BlockAlternative.java
index ac72684fe..f2165b7c9 100644
--- a/src/main/java/net/minestom/server/instance/block/BlockAlternative.java
+++ b/src/main/java/net/minestom/server/instance/block/BlockAlternative.java
@@ -6,8 +6,8 @@ import java.util.Map;
public class BlockAlternative {
- private short id;
- private String[] properties;
+ private final short id;
+ private final String[] properties;
public BlockAlternative(short id, String... properties) {
this.id = id;
@@ -24,7 +24,7 @@ public class BlockAlternative {
public Map createPropertiesMap() {
Map map = new HashMap<>();
- for(String p : properties) {
+ for (String p : properties) {
String[] parts = p.split("=");
map.put(parts[0], parts[1]);
}
diff --git a/src/main/java/net/minestom/server/instance/block/BlockManager.java b/src/main/java/net/minestom/server/instance/block/BlockManager.java
index 2fe7ea339..317d4b0da 100644
--- a/src/main/java/net/minestom/server/instance/block/BlockManager.java
+++ b/src/main/java/net/minestom/server/instance/block/BlockManager.java
@@ -18,8 +18,8 @@ public class BlockManager {
* @param customBlock the custom block to register
*/
public void registerCustomBlock(CustomBlock customBlock) {
- String identifier = customBlock.getIdentifier();
- short id = customBlock.getCustomBlockId();
+ final String identifier = customBlock.getIdentifier();
+ final short id = customBlock.getCustomBlockId();
this.customBlocksInternalId.put(id, customBlock);
this.customBlocksId.put(identifier, customBlock);
}
@@ -36,7 +36,7 @@ public class BlockManager {
* @return the block placement rule associated with the id, null if not any
*/
public BlockPlacementRule getBlockPlacementRule(short blockId) {
- Block block = Block.fromId(blockId); // Convert block alternative
+ final Block block = Block.fromId(blockId); // Convert block alternative
blockId = block.getBlockId();
return this.placementRules.get(blockId);
}
diff --git a/src/main/java/net/minestom/server/instance/block/CustomBlock.java b/src/main/java/net/minestom/server/instance/block/CustomBlock.java
index f79eb5318..4209dad73 100644
--- a/src/main/java/net/minestom/server/instance/block/CustomBlock.java
+++ b/src/main/java/net/minestom/server/instance/block/CustomBlock.java
@@ -110,7 +110,7 @@ public abstract class CustomBlock {
* @return true if {@link #getUpdateOption()} is not null, false otherwise
*/
public boolean hasUpdate() {
- UpdateOption updateOption = getUpdateOption();
+ final UpdateOption updateOption = getUpdateOption();
if (updateOption == null)
return false;
diff --git a/src/main/java/net/minestom/server/inventory/Inventory.java b/src/main/java/net/minestom/server/inventory/Inventory.java
index 1af780f78..d4e20f798 100644
--- a/src/main/java/net/minestom/server/inventory/Inventory.java
+++ b/src/main/java/net/minestom/server/inventory/Inventory.java
@@ -32,7 +32,7 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
private static volatile byte lastInventoryId;
private byte id;
- private InventoryType inventoryType;
+ private final InventoryType inventoryType;
private String title;
private int size;
@@ -169,14 +169,14 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@Override
public boolean addViewer(Player player) {
- boolean result = this.viewers.add(player);
+ final boolean result = this.viewers.add(player);
PacketWriterUtils.writeAndSend(player, createWindowItemsPacket());
return result;
}
@Override
public boolean removeViewer(Player player) {
- boolean result = this.viewers.remove(player);
+ final boolean result = this.viewers.remove(player);
this.cursorPlayersItem.remove(player);
this.clickProcessor.clearCache(player);
return result;
@@ -253,13 +253,13 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@Override
public boolean leftClick(Player player, int slot) {
- PlayerInventory playerInventory = player.getInventory();
- ItemStack cursor = getCursorItem(player);
- boolean isInWindow = isClickInWindow(slot);
- ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
+ final PlayerInventory playerInventory = player.getInventory();
+ final ItemStack cursor = getCursorItem(player);
+ final boolean isInWindow = isClickInWindow(slot);
+ final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
- InventoryClickResult clickResult = clickProcessor.leftClick(this, player, slot, clicked, cursor);
+ final InventoryClickResult clickResult = clickProcessor.leftClick(this, player, slot, clicked, cursor);
if (clickResult.doRefresh()) {
updateFromClick(clickResult, player);
@@ -281,12 +281,12 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@Override
public boolean rightClick(Player player, int slot) {
- PlayerInventory playerInventory = player.getInventory();
- ItemStack cursor = getCursorItem(player);
- boolean isInWindow = isClickInWindow(slot);
- ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
+ final PlayerInventory playerInventory = player.getInventory();
+ final ItemStack cursor = getCursorItem(player);
+ final boolean isInWindow = isClickInWindow(slot);
+ final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
- InventoryClickResult clickResult = clickProcessor.rightClick(this, player, slot, clicked, cursor);
+ final InventoryClickResult clickResult = clickProcessor.rightClick(this, player, slot, clicked, cursor);
if (clickResult.doRefresh()) {
updateFromClick(clickResult, player);
@@ -308,13 +308,13 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@Override
public boolean shiftClick(Player player, int slot) {
- PlayerInventory playerInventory = player.getInventory();
- boolean isInWindow = isClickInWindow(slot);
- ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
- ItemStack cursor = getCursorItem(player); // Isn't used in the algorithm
+ final PlayerInventory playerInventory = player.getInventory();
+ final boolean isInWindow = isClickInWindow(slot);
+ final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
+ final ItemStack cursor = getCursorItem(player); // Isn't used in the algorithm
- InventoryClickResult clickResult;
+ final InventoryClickResult clickResult;
if (isInWindow) {
clickResult = clickProcessor.shiftClick(this, player, slot, clicked, cursor,
@@ -360,12 +360,12 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@Override
public boolean changeHeld(Player player, int slot, int key) {
- PlayerInventory playerInventory = player.getInventory();
- boolean isInWindow = isClickInWindow(slot);
- ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
- ItemStack heldItem = playerInventory.getItemStack(key);
+ final PlayerInventory playerInventory = player.getInventory();
+ final boolean isInWindow = isClickInWindow(slot);
+ final ItemStack clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
+ final ItemStack heldItem = playerInventory.getItemStack(key);
- InventoryClickResult clickResult = clickProcessor.changeHeld(this, player, slot, key, clicked, heldItem);
+ final InventoryClickResult clickResult = clickProcessor.changeHeld(this, player, slot, key, clicked, heldItem);
if (clickResult.doRefresh()) {
updateFromClick(clickResult, player);
@@ -395,13 +395,13 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@Override
public boolean drop(Player player, int mode, int slot, int button) {
- PlayerInventory playerInventory = player.getInventory();
- boolean isInWindow = isClickInWindow(slot);
- ItemStack clicked = slot == -999 ?
+ final PlayerInventory playerInventory = player.getInventory();
+ final boolean isInWindow = isClickInWindow(slot);
+ final ItemStack clicked = slot == -999 ?
null : (isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset));
- ItemStack cursor = getCursorItem(player);
+ final ItemStack cursor = getCursorItem(player);
- InventoryClickResult clickResult = clickProcessor.drop(this, player,
+ final InventoryClickResult clickResult = clickProcessor.drop(this, player,
mode, slot, button, clicked, cursor);
if (clickResult.doRefresh()) {
@@ -424,14 +424,14 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@Override
public boolean dragging(Player player, int slot, int button) {
- PlayerInventory playerInventory = player.getInventory();
- boolean isInWindow = isClickInWindow(slot);
+ final PlayerInventory playerInventory = player.getInventory();
+ final boolean isInWindow = isClickInWindow(slot);
ItemStack clicked = null;
- ItemStack cursor = getCursorItem(player);
+ final ItemStack cursor = getCursorItem(player);
if (slot != -999)
clicked = isInWindow ? getItemStack(slot) : playerInventory.getItemStack(slot, offset);
- InventoryClickResult clickResult = clickProcessor.dragging(this, player,
+ final InventoryClickResult clickResult = clickProcessor.dragging(this, player,
slot, button,
clicked, cursor,
@@ -460,11 +460,11 @@ public class Inventory implements InventoryModifier, InventoryClickHandler, View
@Override
public boolean doubleClick(Player player, int slot) {
- PlayerInventory playerInventory = player.getInventory();
- ItemStack cursor = getCursorItem(player);
+ final PlayerInventory playerInventory = player.getInventory();
+ final ItemStack cursor = getCursorItem(player);
- InventoryClickResult clickResult = clickProcessor.doubleClick(this, player, slot, cursor,
+ final InventoryClickResult clickResult = clickProcessor.doubleClick(this, player, slot, cursor,
// Start by looping through the opened inventory
new InventoryClickLoopHandler(0, getSize(), 1,
i -> i,
diff --git a/src/main/java/net/minestom/server/inventory/InventoryModifier.java b/src/main/java/net/minestom/server/inventory/InventoryModifier.java
index 07bf5640f..eede7e99a 100644
--- a/src/main/java/net/minestom/server/inventory/InventoryModifier.java
+++ b/src/main/java/net/minestom/server/inventory/InventoryModifier.java
@@ -5,19 +5,60 @@ import net.minestom.server.item.ItemStack;
import java.util.List;
+/**
+ * Represent an inventory where its items can be modified/retrieved
+ */
public interface InventoryModifier {
+ /**
+ * Set an item at the specified slot
+ *
+ * @param slot the slot to set the item
+ * @param itemStack the item to set
+ */
void setItemStack(int slot, ItemStack itemStack);
+ /**
+ * Add an item to the inventory
+ *
+ * @param itemStack the item to add
+ * @return true if the item has been sucessfully fully added, false otherwise
+ */
boolean addItemStack(ItemStack itemStack);
+ /**
+ * Get the item at the specified slot
+ *
+ * @param slot the slot to check
+ * @return the item in the slot {@code slot}
+ */
ItemStack getItemStack(int slot);
+ /**
+ * Get all the items in the inventory
+ *
+ * @return an array containing all the inventory's items
+ */
ItemStack[] getItemStacks();
+ /**
+ * Get the size of the inventory
+ *
+ * @return the inventory's size
+ */
int getSize();
+ /**
+ * Get all the inventory conditions of this inventory
+ *
+ * @return the inventory conditions
+ */
List getInventoryConditions();
+ /**
+ * Add a new inventory condition to this inventory
+ *
+ * @param inventoryCondition the inventory condition to add
+ */
void addInventoryCondition(InventoryCondition inventoryCondition);
}
diff --git a/src/main/java/net/minestom/server/inventory/PlayerInventory.java b/src/main/java/net/minestom/server/inventory/PlayerInventory.java
index 78ec1ff19..23775bfe6 100644
--- a/src/main/java/net/minestom/server/inventory/PlayerInventory.java
+++ b/src/main/java/net/minestom/server/inventory/PlayerInventory.java
@@ -330,7 +330,7 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
ItemStack[] convertedSlots = new ItemStack[INVENTORY_SIZE];
for (int i = 0; i < items.length; i++) {
- int slot = convertToPacketSlot(i);
+ final int slot = convertToPacketSlot(i);
convertedSlots[slot] = items[i];
}
@@ -342,10 +342,10 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
@Override
public boolean leftClick(Player player, int slot) {
- ItemStack cursor = getCursorItem();
- ItemStack clicked = getItemStack(convertSlot(slot, OFFSET));
+ final ItemStack cursor = getCursorItem();
+ final ItemStack clicked = getItemStack(convertSlot(slot, OFFSET));
- InventoryClickResult clickResult = clickProcessor.leftClick(null, player, slot, clicked, cursor);
+ final InventoryClickResult clickResult = clickProcessor.leftClick(null, player, slot, clicked, cursor);
if (clickResult.doRefresh())
sendSlotRefresh((short) slot, clicked);
@@ -361,10 +361,10 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
@Override
public boolean rightClick(Player player, int slot) {
- ItemStack cursor = getCursorItem();
- ItemStack clicked = getItemStack(slot, OFFSET);
+ final ItemStack cursor = getCursorItem();
+ final ItemStack clicked = getItemStack(slot, OFFSET);
- InventoryClickResult clickResult = clickProcessor.rightClick(null, player, slot, clicked, cursor);
+ final InventoryClickResult clickResult = clickProcessor.rightClick(null, player, slot, clicked, cursor);
if (clickResult.doRefresh())
sendSlotRefresh((short) slot, clicked);
@@ -386,10 +386,10 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
@Override
public boolean drop(Player player, int mode, int slot, int button) {
- ItemStack cursor = getCursorItem();
- ItemStack clicked = slot == -999 ? null : getItemStack(slot, OFFSET);
+ final ItemStack cursor = getCursorItem();
+ final ItemStack clicked = slot == -999 ? null : getItemStack(slot, OFFSET);
- InventoryClickResult clickResult = clickProcessor.drop(null, player,
+ final InventoryClickResult clickResult = clickProcessor.drop(null, player,
mode, slot, button, clicked, cursor);
if (clickResult.doRefresh())
@@ -405,11 +405,11 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
@Override
public boolean shiftClick(Player player, int slot) {
- ItemStack cursor = getCursorItem();
- ItemStack clicked = getItemStack(slot, OFFSET);
+ final ItemStack cursor = getCursorItem();
+ final ItemStack clicked = getItemStack(slot, OFFSET);
- boolean hotbarClick = convertToPacketSlot(slot) < 9;
- InventoryClickResult clickResult = clickProcessor.shiftClick(null, player, slot, clicked, cursor,
+ final boolean hotbarClick = convertToPacketSlot(slot) < 9;
+ final InventoryClickResult clickResult = clickProcessor.shiftClick(null, player, slot, clicked, cursor,
new InventoryClickLoopHandler(0, items.length, 1,
i -> {
if (hotbarClick) {
@@ -437,10 +437,10 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
if (!getCursorItem().isAir())
return false;
- ItemStack heldItem = getItemStack(key);
- ItemStack clicked = getItemStack(slot, OFFSET);
+ final ItemStack heldItem = getItemStack(key);
+ final ItemStack clicked = getItemStack(slot, OFFSET);
- InventoryClickResult clickResult = clickProcessor.changeHeld(null, player, slot, key, clicked, heldItem);
+ final InventoryClickResult clickResult = clickProcessor.changeHeld(null, player, slot, key, clicked, heldItem);
if (clickResult.doRefresh()) {
sendSlotRefresh((short) slot, clicked);
@@ -460,12 +460,12 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
@Override
public boolean dragging(Player player, int slot, int button) {
- ItemStack cursor = getCursorItem();
+ final ItemStack cursor = getCursorItem();
ItemStack clicked = null;
if (slot != -999)
clicked = getItemStack(slot, OFFSET);
- InventoryClickResult clickResult = clickProcessor.dragging(null, player,
+ final InventoryClickResult clickResult = clickProcessor.dragging(null, player,
slot, button,
clicked, cursor, s -> getItemStack(s, OFFSET),
(s, item) -> setItemStack(s, OFFSET, item));
@@ -484,9 +484,9 @@ public class PlayerInventory implements InventoryModifier, InventoryClickHandler
@Override
public boolean doubleClick(Player player, int slot) {
- ItemStack cursor = getCursorItem();
+ final ItemStack cursor = getCursorItem();
- InventoryClickResult clickResult = clickProcessor.doubleClick(null, player, slot, cursor,
+ final InventoryClickResult clickResult = clickProcessor.doubleClick(null, player, slot, cursor,
new InventoryClickLoopHandler(0, items.length, 1,
i -> i < 9 ? i + 9 : i - 9,
index -> items[index],
diff --git a/src/main/java/net/minestom/server/item/ItemStack.java b/src/main/java/net/minestom/server/item/ItemStack.java
index 23294ac8e..91ea54671 100644
--- a/src/main/java/net/minestom/server/item/ItemStack.java
+++ b/src/main/java/net/minestom/server/item/ItemStack.java
@@ -20,7 +20,7 @@ public class ItemStack implements DataContainer {
private static final StackingRule DEFAULT_STACKING_RULE = new VanillaStackingRule(127);
- private Material material;
+ private final Material material;
private static StackingRule defaultStackingRule;
private ItemMeta itemMeta;
@@ -192,6 +192,18 @@ public class ItemStack implements DataContainer {
return itemMeta;
}
+ /**
+ * Change the item meta linked to this item
+ *
+ * WARNING: be sure to have nbt data useful for this item, items should automatically get the appropriate
+ * item meta
+ *
+ * @param itemMeta the new item meta
+ */
+ public void setItemMeta(ItemMeta itemMeta) {
+ this.itemMeta = itemMeta;
+ }
+
/**
* Get the item display name
*
diff --git a/src/main/java/net/minestom/server/item/metadata/PotionMeta.java b/src/main/java/net/minestom/server/item/metadata/PotionMeta.java
index 87dad3954..f48a278ab 100644
--- a/src/main/java/net/minestom/server/item/metadata/PotionMeta.java
+++ b/src/main/java/net/minestom/server/item/metadata/PotionMeta.java
@@ -68,7 +68,7 @@ public class PotionMeta implements ItemMeta {
@Override
public ItemMeta clone() {
PotionMeta potionMeta = new PotionMeta();
- potionMeta.potionTypes = new HashSet<>(potionTypes);
+ potionMeta.potionTypes.addAll(potionTypes);
return potionMeta;
}
diff --git a/src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java b/src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java
index d1e19c55e..55ef87d20 100644
--- a/src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java
+++ b/src/main/java/net/minestom/server/listener/manager/PacketListenerManager.java
@@ -12,7 +12,7 @@ import java.util.concurrent.ConcurrentHashMap;
public class PacketListenerManager {
- private static ConnectionManager connectionManager = MinecraftServer.getConnectionManager();
+ private static final ConnectionManager CONNECTION_MANAGER = MinecraftServer.getConnectionManager();
private Map, PacketListenerConsumer> listeners = new ConcurrentHashMap<>();
@@ -51,7 +51,7 @@ public class PacketListenerManager {
final Class clazz = packet.getClass();
- PacketListenerConsumer packetListenerConsumer = listeners.get(clazz);
+ final PacketListenerConsumer packetListenerConsumer = listeners.get(clazz);
// Listener can be null if none has been set before, call PacketConsumer anyway
if (packetListenerConsumer == null) {
@@ -59,8 +59,8 @@ public class PacketListenerManager {
}
- PacketController packetController = new PacketController(packetListenerConsumer);
- for (PacketConsumer packetConsumer : connectionManager.getPacketConsumers()) {
+ final PacketController packetController = new PacketController(packetListenerConsumer);
+ for (PacketConsumer packetConsumer : CONNECTION_MANAGER.getPacketConsumers()) {
packetConsumer.accept(player, packetController, packet);
}
diff --git a/src/main/java/net/minestom/server/network/ConnectionManager.java b/src/main/java/net/minestom/server/network/ConnectionManager.java
index 103ce67bc..2e1bf7e2d 100644
--- a/src/main/java/net/minestom/server/network/ConnectionManager.java
+++ b/src/main/java/net/minestom/server/network/ConnectionManager.java
@@ -56,10 +56,10 @@ public final class ConnectionManager {
* @param condition the condition to receive the message
*/
public void broadcastMessage(RichMessage richMessage, Function condition) {
- Collection recipients = getRecipients(condition);
+ final Collection recipients = getRecipients(condition);
if (!recipients.isEmpty()) {
- String jsonText = richMessage.toString();
+ final String jsonText = richMessage.toString();
broadcastJson(jsonText, recipients);
}
}
@@ -80,10 +80,10 @@ public final class ConnectionManager {
* @param condition the condition to receive the message
*/
public void broadcastMessage(ColoredText coloredText, Function condition) {
- Collection recipients = getRecipients(condition);
+ final Collection recipients = getRecipients(condition);
if (!recipients.isEmpty()) {
- String jsonText = coloredText.toString();
+ final String jsonText = coloredText.toString();
broadcastJson(jsonText, recipients);
}
}
@@ -112,7 +112,7 @@ public final class ConnectionManager {
} else {
recipients = new ArrayList<>();
getOnlinePlayers().forEach(player -> {
- boolean result = condition.apply(player);
+ final boolean result = condition.apply(player);
if (result)
recipients.add(player);
});
@@ -186,7 +186,7 @@ public final class ConnectionManager {
* Add a new player in the players list
* Is currently used at
* {@link net.minestom.server.network.packet.client.login.LoginStartPacket#process(PlayerConnection, ConnectionManager)}
- * and in {@link net.minestom.server.entity.fakeplayer.FakePlayer#initPlayer(UUID, String, boolean, Consumer)}
+ * and in {@link net.minestom.server.entity.fakeplayer.FakePlayer#initPlayer(UUID, String, Consumer)}
*
* @param player the player to add
*/
@@ -203,7 +203,7 @@ public final class ConnectionManager {
* @param connection the new player connection
*/
public void createPlayer(UUID uuid, String username, PlayerConnection connection) {
- Player player = new Player(uuid, username, connection);
+ final Player player = new Player(uuid, username, connection);
createPlayer(player);
}
@@ -214,7 +214,7 @@ public final class ConnectionManager {
* @param connection the player connection
*/
public void removePlayer(PlayerConnection connection) {
- Player player = this.connectionPlayerMap.get(connection);
+ final Player player = this.connectionPlayerMap.get(connection);
if (player == null)
return;
diff --git a/src/main/java/net/minestom/server/network/ConnectionState.java b/src/main/java/net/minestom/server/network/ConnectionState.java
index a88540a5c..e68ed35fa 100644
--- a/src/main/java/net/minestom/server/network/ConnectionState.java
+++ b/src/main/java/net/minestom/server/network/ConnectionState.java
@@ -1,5 +1,8 @@
package net.minestom.server.network;
+/**
+ * Represent the current connection state of a player
+ */
public enum ConnectionState {
UNKNOWN, STATUS, LOGIN, PLAY
}
diff --git a/src/main/java/net/minestom/server/network/PacketProcessor.java b/src/main/java/net/minestom/server/network/PacketProcessor.java
index 7e4e4d553..250cdfdaa 100644
--- a/src/main/java/net/minestom/server/network/PacketProcessor.java
+++ b/src/main/java/net/minestom/server/network/PacketProcessor.java
@@ -1,6 +1,5 @@
package net.minestom.server.network;
-import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.socket.SocketChannel;
import net.minestom.server.MinecraftServer;
@@ -47,7 +46,7 @@ public class PacketProcessor {
channel, c -> new NettyPlayerConnection((SocketChannel) channel.channel())
);
- ConnectionState connectionState = playerConnection.getConnectionState();
+ final ConnectionState connectionState = playerConnection.getConnectionState();
//if (!printBlackList.contains(id)) {
//System.out.println("RECEIVED ID: 0x" + Integer.toHexString(id) + " State: " + connectionState);
@@ -67,20 +66,18 @@ public class PacketProcessor {
switch (connectionState) {
case PLAY:
- Player player = playerConnection.getPlayer();
+ final Player player = playerConnection.getPlayer();
ClientPlayPacket playPacket = (ClientPlayPacket) playPacketsHandler.getPacketInstance(packet.packetId);
playPacket.read(packetReader);
- //System.out.println("play");
player.addPacketToQueue(playPacket);
break;
case LOGIN:
- ClientPreplayPacket loginPacket = (ClientPreplayPacket) loginPacketsHandler.getPacketInstance(packet.packetId);
+ final ClientPreplayPacket loginPacket = (ClientPreplayPacket) loginPacketsHandler.getPacketInstance(packet.packetId);
loginPacket.read(packetReader);
- //System.out.println("login");
loginPacket.process(playerConnection, connectionManager);
break;
case STATUS:
- ClientPreplayPacket statusPacket = (ClientPreplayPacket) statusPacketsHandler.getPacketInstance(packet.packetId);
+ final ClientPreplayPacket statusPacket = (ClientPreplayPacket) statusPacketsHandler.getPacketInstance(packet.packetId);
statusPacket.read(packetReader);
statusPacket.process(playerConnection, connectionManager);
@@ -92,10 +89,6 @@ public class PacketProcessor {
return connectionPlayerConnectionMap.get(channel);
}
- public boolean hasPlayerConnection(ChannelHandlerContext channel) {
- return connectionPlayerConnectionMap.containsKey(channel);
- }
-
public void removePlayerConnection(ChannelHandlerContext channel) {
connectionPlayerConnectionMap.remove(channel);
}
diff --git a/src/main/java/net/minestom/server/network/PacketWriterUtils.java b/src/main/java/net/minestom/server/network/PacketWriterUtils.java
index 376361084..27eb51615 100644
--- a/src/main/java/net/minestom/server/network/PacketWriterUtils.java
+++ b/src/main/java/net/minestom/server/network/PacketWriterUtils.java
@@ -19,7 +19,7 @@ public class PacketWriterUtils {
public static void writeCallbackPacket(ServerPacket serverPacket, Consumer consumer) {
batchesPool.execute(() -> {
- ByteBuf buffer = PacketUtils.writePacket(serverPacket);
+ final ByteBuf buffer = PacketUtils.writePacket(serverPacket);
consumer.accept(buffer);
});
}
@@ -31,7 +31,7 @@ public class PacketWriterUtils {
final ByteBuf buffer = PacketUtils.writePacket(serverPacket);
for (Player player : players) {
- PlayerConnection playerConnection = player.getPlayerConnection();
+ final PlayerConnection playerConnection = player.getPlayerConnection();
if (PlayerUtils.isNettyClient(player)) {
playerConnection.writePacket(buffer, true);
} else {
diff --git a/src/main/java/net/minestom/server/reader/ChunkReader.java b/src/main/java/net/minestom/server/reader/ChunkReader.java
index f01ba20c3..f3fb9e354 100644
--- a/src/main/java/net/minestom/server/reader/ChunkReader.java
+++ b/src/main/java/net/minestom/server/reader/ChunkReader.java
@@ -26,25 +26,25 @@ public class ChunkReader {
biomes[i] = Biome.fromId(stream.readByte());
}
- Chunk chunk = new Chunk(biomes, chunkX, chunkZ);
+ final Chunk chunk = new Chunk(biomes, chunkX, chunkZ);
chunkBatch = instance.createChunkBatch(chunk);
while (true) {
- int x = stream.readInt();
- int y = stream.readInt();
- int z = stream.readInt();
+ final int x = stream.readInt();
+ final int y = stream.readInt();
+ final int z = stream.readInt();
- short blockId = stream.readShort();
- short customBlockId = stream.readShort();
+ final short blockId = stream.readShort();
+ final short customBlockId = stream.readShort();
- boolean hasData = stream.readBoolean();
+ final boolean hasData = stream.readBoolean();
Data data = null;
// Data deserializer
if (hasData) {
- int dataLength = stream.readInt();
- byte[] dataArray = stream.readNBytes(dataLength);
+ final int dataLength = stream.readInt();
+ final byte[] dataArray = stream.readNBytes(dataLength);
data = DataReader.readData(Unpooled.wrappedBuffer(dataArray));
}
diff --git a/src/main/java/net/minestom/server/reader/DataReader.java b/src/main/java/net/minestom/server/reader/DataReader.java
index d15f8229f..b747378ee 100644
--- a/src/main/java/net/minestom/server/reader/DataReader.java
+++ b/src/main/java/net/minestom/server/reader/DataReader.java
@@ -28,7 +28,7 @@ public class DataReader {
SerializableData data = new SerializableData();
try {
while (true) {
- short typeLength = buffer.readShort();
+ final short typeLength = buffer.readShort();
if (typeLength == 0xff) {
// End of data
@@ -40,8 +40,8 @@ public class DataReader {
typeCache[i] = buffer.readByte();
}
- String className = new String(typeCache);
- Class type = Class.forName(className);
+ final String className = new String(typeCache);
+ final Class type = Class.forName(className);
short nameLength = buffer.readShort();
byte[] nameCache = new byte[nameLength];
@@ -49,11 +49,11 @@ public class DataReader {
nameCache[i] = buffer.readByte();
}
- ByteBuf valueCache = buffer.readBytes(buffer.readInt());
+ final ByteBuf valueCache = buffer.readBytes(buffer.readInt());
- String name = new String(nameCache);
+ final String name = new String(nameCache);
PacketReader packetReader = new PacketReader(valueCache);
- Object value = DATA_MANAGER.getDataType(type).decode(packetReader);
+ final Object value = DATA_MANAGER.getDataType(type).decode(packetReader);
data.set(name, value, type);
}
diff --git a/src/main/java/net/minestom/server/scoreboard/Sidebar.java b/src/main/java/net/minestom/server/scoreboard/Sidebar.java
index a8bf2437f..5b7120224 100644
--- a/src/main/java/net/minestom/server/scoreboard/Sidebar.java
+++ b/src/main/java/net/minestom/server/scoreboard/Sidebar.java
@@ -6,6 +6,7 @@ import net.minestom.server.chat.ColoredText;
import net.minestom.server.entity.Player;
import net.minestom.server.network.packet.server.play.DisplayScoreboardPacket;
import net.minestom.server.network.packet.server.play.ScoreboardObjectivePacket;
+import net.minestom.server.network.packet.server.play.TeamsPacket;
import net.minestom.server.network.packet.server.play.UpdateScorePacket;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.validate.Check;
@@ -84,7 +85,7 @@ public class Sidebar implements Viewable {
}
public void updateLineContent(String id, ColoredText content) {
- ScoreboardLine scoreboardLine = getLine(id);
+ final ScoreboardLine scoreboardLine = getLine(id);
if (scoreboardLine != null) {
scoreboardLine.refreshContent(content);
sendPacketToViewers(scoreboardLine.sidebarTeam.updatePrefix(content));
@@ -92,7 +93,7 @@ public class Sidebar implements Viewable {
}
public void updateLineScore(String id, int score) {
- ScoreboardLine scoreboardLine = getLine(id);
+ final ScoreboardLine scoreboardLine = getLine(id);
if (scoreboardLine != null) {
scoreboardLine.line = score;
sendPacketToViewers(scoreboardLine.getLineScoreUpdatePacket(objectiveName, score));
@@ -111,7 +112,7 @@ public class Sidebar implements Viewable {
synchronized (lines) {
Iterator iterator = lines.iterator();
while (iterator.hasNext()) {
- ScoreboardLine line = iterator.next();
+ final ScoreboardLine line = iterator.next();
if (line.id.equals(id)) {
// Remove the line for current viewers
@@ -126,7 +127,7 @@ public class Sidebar implements Viewable {
@Override
public boolean addViewer(Player player) {
- boolean result = this.viewers.add(player);
+ final boolean result = this.viewers.add(player);
PlayerConnection playerConnection = player.getPlayerConnection();
ScoreboardObjectivePacket scoreboardObjectivePacket = new ScoreboardObjectivePacket();
@@ -248,4 +249,74 @@ public class Sidebar implements Viewable {
}
+ private static class SidebarTeam {
+
+ private String teamName;
+ private ColoredText prefix, suffix;
+ private String entityName;
+
+ private ColoredText teamDisplayName = ColoredText.of("displaynametest");
+ private byte friendlyFlags = 0x00;
+ private TeamsPacket.NameTagVisibility nameTagVisibility = TeamsPacket.NameTagVisibility.NEVER;
+ private TeamsPacket.CollisionRule collisionRule = TeamsPacket.CollisionRule.NEVER;
+ private int teamColor = 2;
+
+
+ private SidebarTeam(String teamName, ColoredText prefix, ColoredText suffix, String entityName) {
+ this.teamName = teamName;
+ this.prefix = prefix;
+ this.suffix = suffix;
+ this.entityName = entityName;
+ }
+
+ private TeamsPacket getCreationPacket() {
+ TeamsPacket teamsPacket = new TeamsPacket();
+ teamsPacket.teamName = teamName;
+ teamsPacket.action = TeamsPacket.Action.CREATE_TEAM;
+ teamsPacket.teamDisplayName = teamDisplayName.toString();
+ teamsPacket.friendlyFlags = friendlyFlags;
+ teamsPacket.nameTagVisibility = nameTagVisibility;
+ teamsPacket.collisionRule = collisionRule;
+ teamsPacket.teamColor = teamColor;
+ teamsPacket.teamPrefix = prefix.toString();
+ teamsPacket.teamSuffix = suffix.toString();
+ teamsPacket.entities = new String[]{entityName};
+ return teamsPacket;
+ }
+
+ private TeamsPacket getDestructionPacket() {
+ TeamsPacket teamsPacket = new TeamsPacket();
+ teamsPacket.teamName = teamName;
+ teamsPacket.action = TeamsPacket.Action.REMOVE_TEAM;
+ return teamsPacket;
+ }
+
+ private TeamsPacket updatePrefix(ColoredText prefix) {
+ TeamsPacket teamsPacket = new TeamsPacket();
+ teamsPacket.teamName = teamName;
+ teamsPacket.action = TeamsPacket.Action.UPDATE_TEAM_INFO;
+ teamsPacket.teamDisplayName = teamDisplayName.toString();
+ teamsPacket.friendlyFlags = friendlyFlags;
+ teamsPacket.nameTagVisibility = nameTagVisibility;
+ teamsPacket.collisionRule = collisionRule;
+ teamsPacket.teamColor = teamColor;
+ teamsPacket.teamPrefix = prefix.toString();
+ teamsPacket.teamSuffix = suffix.toString();
+ return teamsPacket;
+ }
+
+ private String getEntityName() {
+ return entityName;
+ }
+
+ private ColoredText getPrefix() {
+ return prefix;
+ }
+
+ private void refreshPrefix(ColoredText prefix) {
+ this.prefix = prefix;
+ }
+ }
+
+
}
diff --git a/src/main/java/net/minestom/server/scoreboard/SidebarTeam.java b/src/main/java/net/minestom/server/scoreboard/SidebarTeam.java
deleted file mode 100644
index 87bff7cb3..000000000
--- a/src/main/java/net/minestom/server/scoreboard/SidebarTeam.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package net.minestom.server.scoreboard;
-
-import net.minestom.server.chat.ColoredText;
-import net.minestom.server.network.packet.server.play.TeamsPacket;
-
-public class SidebarTeam {
-
- private String teamName;
- private ColoredText prefix, suffix;
- private String entityName;
-
- private ColoredText teamDisplayName = ColoredText.of("displaynametest");
- private byte friendlyFlags = 0x00;
- private TeamsPacket.NameTagVisibility nameTagVisibility = TeamsPacket.NameTagVisibility.NEVER;
- private TeamsPacket.CollisionRule collisionRule = TeamsPacket.CollisionRule.NEVER;
- private int teamColor = 2;
-
-
- protected SidebarTeam(String teamName, ColoredText prefix, ColoredText suffix, String entityName) {
- this.teamName = teamName;
- this.prefix = prefix;
- this.suffix = suffix;
- this.entityName = entityName;
- }
-
- protected TeamsPacket getCreationPacket() {
- TeamsPacket teamsPacket = new TeamsPacket();
- teamsPacket.teamName = teamName;
- teamsPacket.action = TeamsPacket.Action.CREATE_TEAM;
- teamsPacket.teamDisplayName = teamDisplayName.toString();
- teamsPacket.friendlyFlags = friendlyFlags;
- teamsPacket.nameTagVisibility = nameTagVisibility;
- teamsPacket.collisionRule = collisionRule;
- teamsPacket.teamColor = teamColor;
- teamsPacket.teamPrefix = prefix.toString();
- teamsPacket.teamSuffix = suffix.toString();
- teamsPacket.entities = new String[]{entityName};
- return teamsPacket;
- }
-
- protected TeamsPacket getDestructionPacket() {
- TeamsPacket teamsPacket = new TeamsPacket();
- teamsPacket.teamName = teamName;
- teamsPacket.action = TeamsPacket.Action.REMOVE_TEAM;
- return teamsPacket;
- }
-
- protected TeamsPacket updatePrefix(ColoredText prefix) {
- TeamsPacket teamsPacket = new TeamsPacket();
- teamsPacket.teamName = teamName;
- teamsPacket.action = TeamsPacket.Action.UPDATE_TEAM_INFO;
- teamsPacket.teamDisplayName = teamDisplayName.toString();
- teamsPacket.friendlyFlags = friendlyFlags;
- teamsPacket.nameTagVisibility = nameTagVisibility;
- teamsPacket.collisionRule = collisionRule;
- teamsPacket.teamColor = teamColor;
- teamsPacket.teamPrefix = prefix.toString();
- teamsPacket.teamSuffix = suffix.toString();
- return teamsPacket;
- }
-
- protected String getEntityName() {
- return entityName;
- }
-
- protected ColoredText getPrefix() {
- return prefix;
- }
-
- protected void refreshPrefix(ColoredText prefix) {
- this.prefix = prefix;
- }
-}
diff --git a/src/main/java/net/minestom/server/scoreboard/Team.java b/src/main/java/net/minestom/server/scoreboard/Team.java
index e31638824..cc322a25b 100644
--- a/src/main/java/net/minestom/server/scoreboard/Team.java
+++ b/src/main/java/net/minestom/server/scoreboard/Team.java
@@ -52,7 +52,7 @@ public class Team {
}
public void addPlayer(Player player) {
- String newElement = player.getUsername();
+ final String newElement = player.getUsername();
TeamsPacket addPlayerPacket = new TeamsPacket();
addPlayerPacket.teamName = teamName;
diff --git a/src/main/java/net/minestom/server/scoreboard/TeamManager.java b/src/main/java/net/minestom/server/scoreboard/TeamManager.java
index 63aac80cc..9a27f87d5 100644
--- a/src/main/java/net/minestom/server/scoreboard/TeamManager.java
+++ b/src/main/java/net/minestom/server/scoreboard/TeamManager.java
@@ -3,6 +3,7 @@ package net.minestom.server.scoreboard;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
+// TODO
public final class TeamManager {
// Represents all registered teams
diff --git a/src/main/java/net/minestom/server/timer/SchedulerManager.java b/src/main/java/net/minestom/server/timer/SchedulerManager.java
index d3b42c122..dfea3fc5f 100644
--- a/src/main/java/net/minestom/server/timer/SchedulerManager.java
+++ b/src/main/java/net/minestom/server/timer/SchedulerManager.java
@@ -19,21 +19,43 @@ public class SchedulerManager {
private List tasks = new CopyOnWriteArrayList<>();
private List shutdownTasks = new CopyOnWriteArrayList<>();
+ /**
+ * Add a task with a custom update option and a precise call count
+ *
+ * @param runnable the task to execute
+ * @param updateOption the update option of the task
+ * @param maxCallCount the number of time this task should be executed
+ * @return the task id
+ */
public int addTask(TaskRunnable runnable, UpdateOption updateOption, int maxCallCount) {
- int id = COUNTER.incrementAndGet();
+ final int id = COUNTER.incrementAndGet();
runnable.setId(id);
- Task task = new Task(runnable, updateOption, maxCallCount);
+ final Task task = new Task(runnable, updateOption, maxCallCount);
task.refreshLastUpdateTime(System.currentTimeMillis());
this.tasks.add(task);
return id;
}
+ /**
+ * Add a task which will be repeated without interruption
+ *
+ * @param runnable the task to execute
+ * @param updateOption the update option of the task
+ * @return the task id
+ */
public int addRepeatingTask(TaskRunnable runnable, UpdateOption updateOption) {
return addTask(runnable, updateOption, 0);
}
+ /**
+ * Add a task which will be executed only once
+ *
+ * @param runnable the task to execute
+ * @param updateOption the update option of the task
+ * @return the task id
+ */
public int addDelayedTask(TaskRunnable runnable, UpdateOption updateOption) {
return addTask(runnable, updateOption, 1);
}
@@ -42,18 +64,21 @@ public class SchedulerManager {
* Adds a task to run when the server shutdowns
*
* @param runnable the task to perform
- * @return
+ * @return the task id
*/
public int addShutdownTask(TaskRunnable runnable) {
- int id = SHUTDOWN_COUNTER.incrementAndGet();
+ final int id = SHUTDOWN_COUNTER.incrementAndGet();
runnable.setId(id);
- Task task = new Task(runnable, null, 1);
+ final Task task = new Task(runnable, null, 1);
this.shutdownTasks.add(task);
return id;
}
+ /**
+ * Shutdown all the tasks and call tasks added from {@link #addShutdownTask(TaskRunnable)}
+ */
public void shutdown() {
batchesPool.execute(() -> {
for (Task task : shutdownTasks) {
@@ -63,24 +88,30 @@ public class SchedulerManager {
batchesPool.shutdown();
try {
batchesPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
- } catch (InterruptedException e) {}
+ } catch (InterruptedException e) {
+ }
}
+ /**
+ * Force the end of a task
+ *
+ * @param taskId the id of the task to remove
+ */
public void removeTask(int taskId) {
this.tasks.removeIf(task -> task.getId() == taskId);
}
public void update() {
- long time = System.currentTimeMillis();
+ final long time = System.currentTimeMillis();
batchesPool.execute(() -> {
for (Task task : tasks) {
- UpdateOption updateOption = task.getUpdateOption();
- long lastUpdate = task.getLastUpdateTime();
- boolean hasCooldown = CooldownUtils.hasCooldown(time, lastUpdate, updateOption.getTimeUnit(), updateOption.getValue());
+ final UpdateOption updateOption = task.getUpdateOption();
+ final long lastUpdate = task.getLastUpdateTime();
+ final boolean hasCooldown = CooldownUtils.hasCooldown(time, lastUpdate, updateOption.getTimeUnit(), updateOption.getValue());
if (!hasCooldown) {
- TaskRunnable runnable = task.getRunnable();
- int maxCallCount = task.getMaxCallCount();
- int callCount = runnable.getCallCount() + 1;
+ final TaskRunnable runnable = task.getRunnable();
+ final int maxCallCount = task.getMaxCallCount();
+ final int callCount = runnable.getCallCount() + 1;
runnable.setCallCount(callCount);
runnable.run();
diff --git a/src/main/java/net/minestom/server/utils/NBTUtils.java b/src/main/java/net/minestom/server/utils/NBTUtils.java
index e31e7ef83..edecc91e4 100644
--- a/src/main/java/net/minestom/server/utils/NBTUtils.java
+++ b/src/main/java/net/minestom/server/utils/NBTUtils.java
@@ -53,7 +53,7 @@ public class NBTUtils {
public static void saveAllItems(NBTList list, Inventory inventory) {
for (int i = 0; i < inventory.getSize(); i++) {
- ItemStack stack = inventory.getItemStack(i);
+ final ItemStack stack = inventory.getItemStack(i);
NBTCompound nbt = new NBTCompound();
NBTCompound tag = new NBTCompound();
@@ -71,8 +71,8 @@ public class NBTUtils {
private static void writeEnchant(NBTCompound nbt, String listName, Map enchantmentMap) {
NBTList enchantList = new NBTList<>(NBTTypes.TAG_Compound);
for (Map.Entry entry : enchantmentMap.entrySet()) {
- Enchantment enchantment = entry.getKey();
- short level = entry.getValue();
+ final Enchantment enchantment = entry.getKey();
+ final short level = entry.getValue();
enchantList.add(new NBTCompound()
.setShort("lvl", level)
@@ -177,9 +177,9 @@ public class NBTUtils {
private static void loadEnchantments(NBTList enchantments, EnchantmentSetter setter) {
for (NBTCompound enchantment : enchantments) {
- short level = enchantment.getShort("lvl");
- String id = enchantment.getString("id");
- Enchantment enchant = Registries.getEnchantment(id);
+ final short level = enchantment.getShort("lvl");
+ final String id = enchantment.getString("id");
+ final Enchantment enchant = Registries.getEnchantment(id);
if (enchant != null) {
setter.applyEnchantment(enchant, level);
} else {
@@ -207,7 +207,7 @@ public class NBTUtils {
saveDataIntoNBT(itemStack, itemNBT);
// Custom item nbt
- NBTConsumer nbtConsumer = itemStack.getNBTConsumer();
+ final NBTConsumer nbtConsumer = itemStack.getNBTConsumer();
if (nbtConsumer != null) {
nbtConsumer.accept(itemNBT);
}