General cleanup

This commit is contained in:
themode 2020-10-15 08:48:13 +02:00
parent 74e37e681b
commit bd3335ae1d
8 changed files with 58 additions and 62 deletions

View File

@ -36,10 +36,7 @@ public final class EntityManager {
Check.notNull(spawningInstance, "You need to specify a spawning instance in the PlayerLoginEvent");
{
final Player finalWaitingPlayer = waitingPlayer;
spawningInstance.scheduleNextTick(instance -> finalWaitingPlayer.setInstance(instance));
}
spawningInstance.scheduleNextTick(waitingPlayer::setInstance);
}
}

View File

@ -62,7 +62,8 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
/**
* Those are the major actors of the server, they are not necessary backed by a {@link NettyPlayerConnection} as shown by {@link FakePlayer}
* Those are the major actors of the server,
* they are not necessary backed by a {@link NettyPlayerConnection} as shown by {@link FakePlayer}
* <p>
* You can easily create your own implementation of this and use it with {@link ConnectionManager#setPlayerProvider(PlayerProvider)}.
*/
@ -1945,7 +1946,7 @@ public class Player extends LivingEntity implements CommandSender {
// Get if multi player breaking is enabled
final boolean multiPlayerBreaking = targetCustomBlock.enableMultiPlayerBreaking();
// Get the stage from the custom block object if it is, otherwise use the local fieldl
// Get the stage from the custom block object if it is, otherwise use the local field
final byte stage = multiPlayerBreaking ? targetCustomBlock.getBreakStage(instance, targetBlockPosition) : targetStage;
// Retrieve the break delay for the current stage
this.targetBreakDelay = targetCustomBlock.getBreakDelay(this, targetBlockPosition, stage, breakers);

View File

@ -9,7 +9,10 @@ import net.minestom.server.utils.url.URLUtils;
import java.io.IOException;
/**
* Contains all the data required to store a skin
* Contains all the data required to store a skin.
* <p>
* Can be applied to a player with {@link Player#setSkin(PlayerSkin)}
* or in the linked event {@link net.minestom.server.event.player.PlayerSkinInitEvent}.
*/
public class PlayerSkin {
@ -22,7 +25,7 @@ public class PlayerSkin {
}
/**
* Get the skin textures value
* Get the skin textures value.
*
* @return the textures value
*/
@ -31,7 +34,7 @@ public class PlayerSkin {
}
/**
* Get the skin signature
* Get the skin signature.
*
* @return the skin signature
*/
@ -40,7 +43,7 @@ public class PlayerSkin {
}
/**
* Get a skin from a Mojang UUID
* Get a skin from a Mojang UUID.
*
* @param uuid Mojang UUID
* @return a player skin based on the UUID, null if not found
@ -70,7 +73,7 @@ public class PlayerSkin {
}
/**
* Get a skin from a Minecraft username
* Get a skin from a Minecraft username.
*
* @param username the Minecraft username
* @return a skin based on a Minecraft username, null if not found

View File

@ -62,7 +62,7 @@ public abstract class Chunk implements Viewable, DataContainer {
protected int chunkX, chunkZ;
// Options
private boolean shouldGenerate;
private final boolean shouldGenerate;
// Packet cache
private volatile boolean enableCachePacket;

View File

@ -50,7 +50,7 @@ public class InstanceContainer extends Instance {
private StorageLocation storageLocation;
// the shared instances assigned to this instance
private List<SharedInstance> sharedInstances = new CopyOnWriteArrayList<>();
private final List<SharedInstance> sharedInstances = new CopyOnWriteArrayList<>();
// the chunk generator used, can be null
private ChunkGenerator chunkGenerator;
@ -59,8 +59,8 @@ public class InstanceContainer extends Instance {
// contains all the chunks to remove during the next instance tick
protected final Set<Chunk> scheduledChunksToRemove = new HashSet<>();
private ReadWriteLock changingBlockLock = new ReentrantReadWriteLock();
private Map<BlockPosition, Block> currentlyChangingBlocks = new HashMap<>();
private final ReadWriteLock changingBlockLock = new ReentrantReadWriteLock();
private final Map<BlockPosition, Block> currentlyChangingBlocks = new HashMap<>();
// the chunk loader, used when trying to load/save a chunk from another source
private IChunkLoader chunkLoader;
@ -85,7 +85,7 @@ public class InstanceContainer extends Instance {
this.storageLocation = storageLocation;
// Set the default chunk supplier using DynamicChunk
setChunkSupplier((instance, biomes, chunkX, chunkZ) -> new DynamicChunk(instance, biomes, chunkX, chunkZ));
setChunkSupplier(DynamicChunk::new);
// Set the default chunk loader which use the instance's StorageLocation and ChunkSupplier to save and load chunks
setChunkLoader(new MinestomBasicChunkLoader(this));
@ -136,11 +136,9 @@ public class InstanceContainer extends Instance {
UNSAFE_setBlock(chunk, x, y, z, blockStateId, customBlock, data);
} else {
if (hasEnabledAutoChunkLoad()) {
final int chunkX = ChunkUtils.getChunkCoordinate((int) x);
final int chunkZ = ChunkUtils.getChunkCoordinate((int) z);
loadChunk(chunkX, chunkZ, c -> {
UNSAFE_setBlock(c, x, y, z, blockStateId, customBlock, data);
});
final int chunkX = ChunkUtils.getChunkCoordinate(x);
final int chunkZ = ChunkUtils.getChunkCoordinate(z);
loadChunk(chunkX, chunkZ, c -> UNSAFE_setBlock(c, x, y, z, blockStateId, customBlock, data));
} else {
throw new IllegalStateException("Tried to set a block to an unloaded chunk with auto chunk load disabled");
}
@ -371,9 +369,7 @@ public class InstanceContainer extends Instance {
ParticlePacket particlePacket = ParticleCreator.createParticlePacket(Particle.BLOCK, false,
x + 0.5f, y, z + 0.5f,
0.4f, 0.5f, 0.4f,
0.3f, 125, writer -> {
writer.writeVarInt(blockStateId);
});
0.3f, 125, writer -> writer.writeVarInt(blockStateId));
chunk.getViewers().forEach(p -> {
// The player who breaks the block already get particles client-side
@ -478,9 +474,7 @@ public class InstanceContainer extends Instance {
public void saveChunksToStorage(Runnable callback) {
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(() -> {
saveChunkToStorage(c, null);
}));
getChunks().forEach(c -> parallelSavingThreadPool.execute(() -> saveChunkToStorage(c, null)));
try {
parallelSavingThreadPool.shutdown();
parallelSavingThreadPool.awaitTermination(1L, java.util.concurrent.TimeUnit.DAYS);

View File

@ -28,7 +28,7 @@ public class SharedInstance extends Instance {
@Override
public void refreshBlockStateId(BlockPosition blockPosition, short blockStateId) {
instanceContainer.refreshBlockStateId(blockPosition, blockStateId);
this.instanceContainer.refreshBlockStateId(blockPosition, blockStateId);
}
@Override
@ -38,12 +38,12 @@ public class SharedInstance extends Instance {
@Override
public void loadChunk(int chunkX, int chunkZ, ChunkCallback callback) {
instanceContainer.loadChunk(chunkX, chunkZ, callback);
this.instanceContainer.loadChunk(chunkX, chunkZ, callback);
}
@Override
public void loadOptionalChunk(int chunkX, int chunkZ, ChunkCallback callback) {
instanceContainer.loadOptionalChunk(chunkX, chunkZ, callback);
this.instanceContainer.loadOptionalChunk(chunkX, chunkZ, callback);
}
@Override
@ -58,7 +58,7 @@ public class SharedInstance extends Instance {
@Override
public void saveChunkToStorage(Chunk chunk, Runnable callback) {
instanceContainer.saveChunkToStorage(chunk, callback);
this.instanceContainer.saveChunkToStorage(chunk, callback);
}
@Override
@ -78,7 +78,7 @@ public class SharedInstance extends Instance {
@Override
public void setChunkGenerator(ChunkGenerator chunkGenerator) {
instanceContainer.setChunkGenerator(chunkGenerator);
this.instanceContainer.setChunkGenerator(chunkGenerator);
}
@Override
@ -98,17 +98,17 @@ public class SharedInstance extends Instance {
@Override
public void setStorageLocation(StorageLocation storageLocation) {
instanceContainer.setStorageLocation(storageLocation);
this.instanceContainer.setStorageLocation(storageLocation);
}
@Override
public void retrieveChunk(int chunkX, int chunkZ, ChunkCallback callback) {
instanceContainer.retrieveChunk(chunkX, chunkZ, callback);
this.instanceContainer.retrieveChunk(chunkX, chunkZ, callback);
}
@Override
protected void createChunk(int chunkX, int chunkZ, ChunkCallback callback) {
instanceContainer.createChunk(chunkX, chunkZ, callback);
this.instanceContainer.createChunk(chunkX, chunkZ, callback);
}
@Override
@ -128,22 +128,22 @@ public class SharedInstance extends Instance {
@Override
public void setBlockStateId(int x, int y, int z, short blockStateId, Data data) {
instanceContainer.setBlockStateId(x, y, z, blockStateId, data);
this.instanceContainer.setBlockStateId(x, y, z, blockStateId, data);
}
@Override
public void setCustomBlock(int x, int y, int z, short customBlockId, Data data) {
instanceContainer.setCustomBlock(x, y, z, customBlockId, data);
this.instanceContainer.setCustomBlock(x, y, z, customBlockId, data);
}
@Override
public void setSeparateBlocks(int x, int y, int z, short blockStateId, short customBlockId, Data data) {
instanceContainer.setSeparateBlocks(x, y, z, blockStateId, customBlockId, data);
this.instanceContainer.setSeparateBlocks(x, y, z, blockStateId, customBlockId, data);
}
@Override
public void scheduleUpdate(int time, TimeUnit unit, BlockPosition position) {
instanceContainer.scheduleUpdate(time, unit, position);
this.instanceContainer.scheduleUpdate(time, unit, position);
}
/**

View File

@ -86,7 +86,7 @@ public class ChunkBatch implements InstanceBatch {
/**
* Execute the batch in the dedicated pool and run the callback during the next instance update when blocks are placed
* (which means that the callback can be called 50ms after, and in a determinable thread)
* (which means that the callback can be called 50ms after, but in a determinable thread)
*
* @param callback the callback to execute once the blocks are placed
*/

View File

@ -6,45 +6,46 @@ import net.minestom.server.entity.Player;
import net.minestom.server.item.ItemStack;
import net.minestom.server.network.packet.server.play.EntityEquipmentPacket;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.validate.Check;
import java.util.ArrayList;
import java.util.List;
/**
* Represent an {@link Entity} which can have {@link ItemStack} in hands and armor slots
* Represents an {@link Entity} which can have {@link ItemStack} in hands and armor slots
*/
public interface EquipmentHandler {
/**
* Get the {@link ItemStack} in main hand
* Get the {@link ItemStack} in main hand.
*
* @return the {@link ItemStack} in main hand
*/
ItemStack getItemInMainHand();
/**
* Change the main hand {@link ItemStack}
* Change the main hand {@link ItemStack}.
*
* @param itemStack the main hand {@link ItemStack}
*/
void setItemInMainHand(ItemStack itemStack);
/**
* Get the {@link ItemStack} in off hand
* Get the {@link ItemStack} in off hand.
*
* @return the item in off hand
*/
ItemStack getItemInOffHand();
/**
* Change the off hand {@link ItemStack}
* Change the off hand {@link ItemStack}.
*
* @param itemStack the off hand {@link ItemStack}
*/
void setItemInOffHand(ItemStack itemStack);
/**
* Get the {@link ItemStack} in the specific hand
* Get the {@link ItemStack} in the specific hand.
*
* @param hand the Hand to get the {@link ItemStack} from
* @return the {@link ItemStack} in {@code hand}
@ -63,7 +64,7 @@ public interface EquipmentHandler {
}
/**
* Change the {@link ItemStack} in the specific hand
* Change the {@link ItemStack} in the specific hand.
*
* @param hand the hand to set the item to
* @param stack the {@link ItemStack} to set
@ -81,63 +82,63 @@ public interface EquipmentHandler {
}
/**
* Get the helmet
* Get the helmet.
*
* @return the helmet
*/
ItemStack getHelmet();
/**
* Change the helmet
* Change the helmet.
*
* @param itemStack the helmet
*/
void setHelmet(ItemStack itemStack);
/**
* Get the chestplate
* Get the chestplate.
*
* @return the chestplate
*/
ItemStack getChestplate();
/**
* Change the chestplate
* Change the chestplate.
*
* @param itemStack the chestplate
*/
void setChestplate(ItemStack itemStack);
/**
* Get the leggings
* Get the leggings.
*
* @return the leggings
*/
ItemStack getLeggings();
/**
* Change the leggings
* Change the leggings.
*
* @param itemStack the leggings
*/
void setLeggings(ItemStack itemStack);
/**
* Get the boots
* Get the boots.
*
* @return the boots
*/
ItemStack getBoots();
/**
* Change the boots
* Change the boots.
*
* @param itemStack the boots
*/
void setBoots(ItemStack itemStack);
/**
* Get the equipment in a specific slot
* Get the equipment in a specific slot.
*
* @param slot the equipment to get the item from
* @return the equipment {@link ItemStack}
@ -162,7 +163,7 @@ public interface EquipmentHandler {
}
/**
* Send all the equipments to a {@link PlayerConnection}
* Send all the equipments to a {@link PlayerConnection}.
*
* @param connection the connection to send the equipments to
*/
@ -174,7 +175,7 @@ public interface EquipmentHandler {
}
/**
* Send all the equipments to all viewers
* Send all the equipments to all viewers.
*/
default void syncEquipments() {
if (!(this instanceof Viewable))
@ -190,7 +191,7 @@ public interface EquipmentHandler {
}
/**
* Send a specific equipment to viewers
* Send a specific equipment to viewers.
*
* @param slot the slot of the equipment
*/
@ -212,13 +213,13 @@ public interface EquipmentHandler {
}
/**
* Get the packet with all the equipments
* Get the packet with all the equipments.
*
* @return the packet with the equipments
* @throws IllegalStateException if 'this' is not an {@link Entity}
*/
default EntityEquipmentPacket getEquipmentsPacket() {
if (!(this instanceof Entity))
throw new IllegalStateException("Only accessible for Entity");
Check.stateCondition(!(this instanceof Entity), "Only accessible for Entity");
Entity entity = (Entity) this;