This commit is contained in:
themode 2020-10-12 03:18:02 +02:00
parent cbe2a0b71e
commit 88ef4eb3c0
9 changed files with 111 additions and 93 deletions

View File

@ -4,7 +4,7 @@ import java.util.Collections;
import java.util.Set;
/**
* Represent an object which contain key/value based data.
* Represents an object which contain key/value based data.
* <p>
* Please see {@link DataImpl} for the default implementation.
*/
@ -47,7 +47,7 @@ public interface Data {
};
/**
* Set a value to a specific key
* Set a value to a specific key.
*
* @param key the key
* @param value the value object
@ -57,7 +57,7 @@ public interface Data {
<T> void set(String key, T value, Class<T> type);
/**
* Retrieve a value based on its key
* Retrieve a value based on its key.
*
* @param key the key
* @param <T> the value type
@ -66,7 +66,7 @@ public interface Data {
<T> T get(String key);
/**
* Retrieve a value based on its key, give a default value if not found
* Retrieve a value based on its key, give a default value if not found.
*
* @param key the key
* @param defaultValue the value to return if the key is not found
@ -76,7 +76,7 @@ public interface Data {
<T> T getOrDefault(String key, T defaultValue);
/**
* Get if the data has a key
* Get if the data has a key.
*
* @param key the key to check
* @return true if the data contains the key
@ -84,21 +84,21 @@ public interface Data {
boolean hasKey(String key);
/**
* Get the list of data keys
* Get the list of data keys.
*
* @return an unmodifiable {@link Set} containing all keys
*/
Set<String> getKeys();
/**
* Get if the data is empty or not
* Get if the data is empty or not.
*
* @return true if the data does not contain anything, false otherwise
*/
boolean isEmpty();
/**
* Clone this data
* Clone this data.
*
* @return a cloned data object
*/

View File

@ -91,20 +91,20 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Set a block at a position
* Set a block at a position.
* <p>
* This is used when the previous block has to be destroyed, meaning that it clears the previous data and update method
* This is used when the previous block has to be destroyed, meaning that it clears the previous data and update method.
* <p>
* WARNING: this method is not thread-safe (in order to bring performance improvement with {@link ChunkBatch} &amp; {@link BlockBatch})
* The thread-safe version is {@link InstanceContainer#setSeparateBlocks(int, int, int, short, short, Data)} (or any similar instance methods)
* Otherwise, you can simply do not forget to have this chunk synchronized when this is called
* Otherwise, you can simply do not forget to have this chunk synchronized when this is called.
*
* @param x the block X
* @param y the block Y
* @param z the block Z
* @param blockStateId the block state id
* @param customBlockId the custom block id
* @param data the data of the block, can be null
* @param data the {@link Data} of the block, can be null
* @param updatable true if the block has an update method
* Warning: <code>customBlockId</code> cannot be 0 and needs to be valid since the update delay and method
* will be retrieved from the associated {@link CustomBlock} object
@ -112,19 +112,19 @@ public abstract class Chunk implements Viewable, DataContainer {
public abstract void UNSAFE_setBlock(int x, int y, int z, short blockStateId, short customBlockId, Data data, boolean updatable);
/**
* Execute a chunk tick
* Execute a chunk tick.
* <p>
* Should be used to update all the blocks in the chunk
* Should be used to update all the blocks in the chunk.
* <p>
* WARNING: this method doesn't necessary have to be thread-safe, proceed with caution
* WARNING: this method doesn't necessary have to be thread-safe, proceed with caution.
*
* @param time the time of the update in milliseconds
* @param instance the instance linked to this chunk
* @param instance the {@link Instance} linked to this chunk
*/
public abstract void tick(long time, Instance instance);
/**
* Get the block state id at a position
* Get the block state id at a position.
*
* @param x the block X
* @param y the block Y
@ -134,7 +134,7 @@ public abstract class Chunk implements Viewable, DataContainer {
public abstract short getBlockStateId(int x, int y, int z);
/**
* Get the custom block id at a position
* Get the custom block id at a position.
*
* @param x the block X
* @param y the block Y
@ -144,7 +144,7 @@ public abstract class Chunk implements Viewable, DataContainer {
public abstract short getCustomBlockId(int x, int y, int z);
/**
* Change the block state id and the custom block id at a position
* Change the block state id and the custom block id at a position.
*
* @param x the block X
* @param y the block Y
@ -155,7 +155,7 @@ public abstract class Chunk implements Viewable, DataContainer {
protected abstract void refreshBlockValue(int x, int y, int z, short blockStateId, short customBlockId);
/**
* Change the block state id at a position (the custom block id stays the same)
* Change the block state id at a position (the custom block id stays the same).
*
* @param x the block X
* @param y the block Y
@ -165,7 +165,7 @@ public abstract class Chunk implements Viewable, DataContainer {
protected abstract void refreshBlockStateId(int x, int y, int z, short blockStateId);
/**
* Get the {@link Data} at a block index
* Get the {@link Data} at a block index.
*
* @param index the block index
* @return the {@link Data} at the block index, null if none
@ -173,7 +173,7 @@ public abstract class Chunk implements Viewable, DataContainer {
public abstract Data getBlockData(int index);
/**
* Set the {@link Data} at a position
* Set the {@link Data} at a position.
*
* @param x the block X
* @param y the block Y
@ -183,14 +183,14 @@ public abstract class Chunk implements Viewable, DataContainer {
public abstract void setBlockData(int x, int y, int z, Data data);
/**
* Get all the block entities in this chunk
* Get all the block entities in this chunk.
*
* @return the block entities in this chunk
*/
public abstract Set<Integer> getBlockEntities();
/**
* Serialize the chunk into bytes
* Serialize the chunk into bytes.
*
* @return the serialized chunk, can be null if this chunk cannot be serialized
* @see #readChunk(BinaryReader, ChunkCallback) which should be able to read what is written in this method
@ -198,9 +198,9 @@ public abstract class Chunk implements Viewable, DataContainer {
public abstract byte[] getSerializedData();
/**
* Read the chunk from binary
* Read the chunk from binary.
* <p>
* Used if the chunk is loaded from file
* Used if the chunk is loaded from file.
*
* @param reader the data reader
* WARNING: the data will not necessary be read directly in the same thread,
@ -217,7 +217,7 @@ public abstract class Chunk implements Viewable, DataContainer {
protected abstract ChunkDataPacket getFreshPacket();
/**
* Get the {@link CustomBlock} at a position
* Get the {@link CustomBlock} at a position.
*
* @param x the block X
* @param y the block Y
@ -230,7 +230,7 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Get the {@link CustomBlock} at a block index
* Get the {@link CustomBlock} at a block index.
*
* @param index the block index
* @return the {@link CustomBlock} at the block index
@ -247,7 +247,7 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Get the chunk X
* Get the chunk X.
*
* @return the chunk X
*/
@ -256,7 +256,7 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Get the chunk Z
* Get the chunk Z.
*
* @return the chunk Z
*/
@ -304,7 +304,7 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Retrieve (and save if needed) the updated data packet
* Retrieve (and save if needed) the updated data packet.
*
* @param consumer the consumer called once the packet is sure to be up-to-date
*/
@ -323,7 +323,7 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Get a {@link ChunkDataPacket} which should contain the full chunk
* Get a {@link ChunkDataPacket} which should contain the full chunk.
*
* @return a fresh full chunk data packet
*/
@ -334,7 +334,7 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Get a {@link ChunkDataPacket} which should contain the non-full chunk
* Get a {@link ChunkDataPacket} which should contain the non-full chunk.
*
* @return a fresh non-full chunk data packet
*/
@ -345,7 +345,7 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Used to verify if the chunk should still be kept in memory
* Used to verify if the chunk should still be kept in memory.
*
* @return true if the chunk is loaded
*/
@ -516,14 +516,14 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Set the chunk as "unloaded"
* Set the chunk as "unloaded".
*/
protected void unload() {
this.loaded = false;
}
/**
* Get if a block state id represents a block entity
* Get if a block state id represents a block entity.
*
* @param blockStateId the block state id to check
* @return true if {@code blockStateId} represents a block entity
@ -534,7 +534,7 @@ public abstract class Chunk implements Viewable, DataContainer {
}
/**
* Get the index of a position, used to store blocks
* Get the index of a position, used to store blocks.
*
* @param x the block X
* @param y the block Y

View File

@ -11,11 +11,11 @@ public interface IChunkLoader {
/**
* Load a {@link Chunk}, all blocks should be set since the {@link ChunkGenerator} is not applied
*
* @param instance the instance where the chunk belong
* @param instance the {@link Instance} where the {@link Chunk} belong
* @param chunkX the chunk X
* @param chunkZ the chunk Z
* @param callback the callback executed when the chunk is done loading,
* never called if something went wrong
* @param callback the callback executed when the {@link Chunk} is done loading,
* never called if the method returns false.
* @return true if the chunk loaded successfully, false otherwise
*/
boolean loadChunk(Instance instance, int chunkX, int chunkZ, ChunkCallback callback);
@ -23,8 +23,8 @@ public interface IChunkLoader {
/**
* Save a {@link Chunk} with a callback for when it is done
*
* @param chunk the chunk to save
* @param callback the callback executed when the chunk is done saving,
* @param chunk the {@link Chunk} to save
* @param callback the callback executed when the {@link Chunk} is done saving,
* should be called even if the saving failed (you can throw an exception)
*/
void saveChunk(Chunk chunk, Runnable callback);

View File

@ -12,7 +12,8 @@ import java.util.Map;
/**
* Represent an area which contain data.
* <p>
* Each {@link StorageLocation} has a {@link StorageSystem} associated to it which is used to save and retrieve data from keys.
* Each {@link StorageLocation} has a {@link StorageSystem} associated to it
* which is used to save and retrieve data from keys.
*/
public class StorageLocation {
@ -33,7 +34,7 @@ public class StorageLocation {
}
/**
* Get the data associated with a key using {@link StorageSystem#get(String)}
* Get the data associated with a key using {@link StorageSystem#get(String)}.
*
* @param key the key
* @return the data associated to {@code key}
@ -44,7 +45,7 @@ public class StorageLocation {
}
/**
* Set a data associated to a key using {@link StorageSystem#set(String, byte[])}
* Set a data associated to a key using {@link StorageSystem#set(String, byte[])}.
*
* @param key the key of the data
* @param data the data
@ -55,7 +56,7 @@ public class StorageLocation {
}
/**
* Delete a key using the associated {@link StorageSystem}
* Delete a key using the associated {@link StorageSystem}.
*
* @param key the key
* @see StorageSystem#delete(String)
@ -65,7 +66,7 @@ public class StorageLocation {
}
/**
* Close the {@link StorageLocation} using {@link StorageSystem#close()}
* Close the {@link StorageLocation} using {@link StorageSystem#close()}.
*
* @see StorageSystem#close()
*/
@ -74,10 +75,10 @@ public class StorageLocation {
}
/**
* Set an object associated to a key
* Set an object associated to a key.
* <p>
* It does use registered {@link DataType} located on {@link DataManager}
* So you need to register all the types that you use
* So you need to register all the types that you use.
*
* @param key the key
* @param object the data object
@ -98,10 +99,10 @@ public class StorageLocation {
}
/**
* Retrieve a serialized object associated to a key
* Retrieve a serialized object associated to a key.
* <p>
* It does use registered {@link DataType} located on {@link DataManager}
* So you need to register all the types that you use
* It does use registered {@link DataType} located on {@link DataManager}.
* So you need to register all the types that you use.
*
* @param key the key
* @param type the class of the data
@ -128,7 +129,8 @@ public class StorageLocation {
}
/**
* Get an unique {@link SerializableData} which is cloned if cached or retrieved with the default {@link StorageSystem}
* Get an unique {@link SerializableData}
* which is cloned if cached or retrieved with the default {@link StorageSystem}.
*
* @param key the key of the data
* @param dataContainer the {@link DataContainer} which will contain the new data
@ -178,7 +180,7 @@ public class StorageLocation {
}
/**
* Save a specified cached {@link SerializableData} and remove it from memory
* Save a specified cached {@link SerializableData} and remove it from memory.
*
* @param key the specified cached data key
*/
@ -197,7 +199,7 @@ public class StorageLocation {
}
/**
* Save the all the cached {@link SerializableData}
* Save the all the cached {@link SerializableData}.
*/
public void saveCachedData() {
synchronized (cachedData) {
@ -206,7 +208,7 @@ public class StorageLocation {
}
/**
* Save an unique cached {@link SerializableData}
* Save an unique cached {@link SerializableData}.
*
* @param key the data key
*/
@ -218,9 +220,9 @@ public class StorageLocation {
}
/**
* Get the location of this storage
* Get the location of this storage.
* <p>
* WARNING: this is not necessary a file or folder path
* WARNING: this is not necessary a file or folder path.
*
* @return the location
*/

View File

@ -10,6 +10,10 @@ import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;
/**
* Manager used to retrieve {@link StorageLocation} with {@link #getLocation(String, StorageOptions, StorageSystem)}
* and define the default {@link StorageSystem} with {@link #defineDefaultStorageSystem(Supplier)}.
*/
public final class StorageManager {
private static final Logger LOGGER = LoggerFactory.getLogger(StorageManager.class);
@ -52,8 +56,8 @@ public final class StorageManager {
}
/**
* Used to get an access to the specified location
* The default {@link StorageSystem} provider will be used
* Used to get an access to the specified location.
* The default {@link StorageSystem} provider will be used.
*
* @param location the location
* @return the {@link StorageLocation} at {@code location} with the default {@link StorageSystem}
@ -85,7 +89,7 @@ public final class StorageManager {
}
/**
* Get all locations which have been loaded by {@link #getLocation(String)}
* Get all the {@link StorageLocation} which have been loaded by {@link #getLocation(String)}
* or {@link #getLocation(String, StorageOptions, StorageSystem)}
*
* @return an unmodifiable list of all the loaded {@link StorageLocation}

View File

@ -14,7 +14,14 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
* An object which manages all the {@link Task}'s
* An object which manages all the {@link Task}'s.
* <p>
* {@link Task} first need to be built with {@link #buildTask(Runnable)}, you can then specify a delay with as example
* {@link TaskBuilder#delay(long, net.minestom.server.utils.time.TimeUnit)}
* or {@link TaskBuilder#repeat(long, net.minestom.server.utils.time.TimeUnit)}
* and to finally schedule {@link TaskBuilder#schedule()}.
* <p>
* Shutdown {@link Task} are built with {@link #buildShutdownTask(Runnable)}.
*/
public class SchedulerManager {
@ -51,38 +58,38 @@ public class SchedulerManager {
}
/**
* Initializes a new {@link TaskBuilder} for creating a task.
* Initializes a new {@link TaskBuilder} for creating a {@link Task}.
*
* @param runnable The task to run when scheduled
* @return the task builder
* @param runnable The {@link Task} to run when scheduled
* @return the {@link TaskBuilder}
*/
public TaskBuilder buildTask(Runnable runnable) {
return new TaskBuilder(this, runnable);
}
/**
* Initializes a new {@link TaskBuilder} for creating a shutdown task
* Initializes a new {@link TaskBuilder} for creating a shutdown {@link Task}
*
* @param runnable The shutdown task to run when scheduled
* @return the task builder
* @param runnable The shutdown {@link Task} to run when scheduled
* @return the {@link TaskBuilder}
*/
public TaskBuilder buildShutdownTask(Runnable runnable) {
return new TaskBuilder(this, runnable, true);
}
/**
* Removes/Forces the end of a task
* Removes/Forces the end of a {@link Task}
*
* @param task The task to remove
* @param task The {@link Task} to remove
*/
public void removeTask(Task task) {
this.tasks.remove(task.getId());
}
/**
* Removes/Forces the end of a task
* Removes/Forces the end of a {@link Task}
*
* @param task The task to remove
* @param task The {@link Task} to remove
*/
public void removeShutdownTask(Task task) {
this.shutdownTasks.remove(task.getId());
@ -124,36 +131,36 @@ public class SchedulerManager {
}
/**
* Gets a {@link Collection} with all registered tasks
* Gets a {@link Collection} with all the registered {@link Task}
*
* @return a {@link Collection} with all registered tasks
* @return a {@link Collection} with all the registered {@link Task}
*/
public ObjectCollection<Task> getTasks() {
return tasks.values();
}
/**
* Gets a {@link Collection} with all registered shutdown tasks
* Gets a {@link Collection} with all the registered shutdown {@link Task}
*
* @return a {@link Collection} with all registered shutdown tasks
* @return a {@link Collection} with all the registered shutdown {@link Task}
*/
public ObjectCollection<Task> getShutdownTasks() {
return shutdownTasks.values();
}
/**
* Gets the execution service for all registered tasks
* Gets the execution service for all the registered {@link Task}
*
* @return the execution service for all registered tasks
* @return the execution service for all the registered {@link Task}
*/
public ExecutorService getBatchesPool() {
return batchesPool;
}
/**
* Gets the scheduled execution service for all registered tasks
* Gets the scheduled execution service for all the registered {@link Task}
*
* @return the scheduled execution service for all registered tasks
* @return the scheduled execution service for all the registered {@link Task}
*/
public ScheduledExecutorService getTimerExecutionService() {
return timerExecutionService;

View File

@ -6,6 +6,8 @@ import java.util.concurrent.TimeUnit;
/**
* An Object that represents a task that is scheduled for execution on the application.
* <p>
* Tasks are built in {@link SchedulerManager} and scheduled by a {@link TaskBuilder}.
*/
public class Task implements Runnable {
@ -30,10 +32,10 @@ public class Task implements Runnable {
* Creates a task
*
* @param schedulerManager The manager for the task
* @param runnable The task to run when scheduled
* @param shutdown Defines whether the task is a shutdown task
* @param delay The time to delay
* @param repeat The time until the repetition
* @param runnable The task to run when scheduled
* @param shutdown Defines whether the task is a shutdown task
* @param delay The time to delay
* @param repeat The time until the repetition
*/
public Task(SchedulerManager schedulerManager, Runnable runnable, boolean shutdown, long delay, long repeat) {
this.schedulerManager = schedulerManager;

View File

@ -3,7 +3,10 @@ package net.minestom.server.timer;
import net.minestom.server.utils.time.TimeUnit;
/**
* A builder which represents a fluent Object to schedule tasks
* A builder which represents a fluent Object to schedule tasks.
* <p>
* You can specify a delay with {@link #delay(long, TimeUnit)} or {@link #repeat(long, TimeUnit)}
* and then schedule the {@link Task} with {@link #schedule()}.
*/
public class TaskBuilder {
@ -44,7 +47,7 @@ public class TaskBuilder {
}
/**
* Specifies that the task should delay its execution by the specified amount of time.
* Specifies that the {@link Task} should delay its execution by the specified amount of time.
*
* @param time The time to delay
* @param unit The unit of time for {@code time}
@ -56,10 +59,10 @@ public class TaskBuilder {
}
/**
* Specifies that the task should continue to run after waiting for the specified value until it is terminated.
* Specifies that the {@link Task} should continue to run after waiting for the specified value until it is terminated.
*
* @param time The time until the repetition
* @param unit The unit of time for {@code time}
* @param unit The {@link TimeUnit} for {@code time}
* @return this builder, for chaining
*/
public TaskBuilder repeat(long time, TimeUnit unit) {
@ -68,7 +71,7 @@ public class TaskBuilder {
}
/**
* Clears the delay interval of the task
* Clears the delay interval of the {@link Task}
*
* @return this builder, for chaining
*/
@ -78,7 +81,7 @@ public class TaskBuilder {
}
/**
* Clears the repeat interval of the task
* Clears the repeat interval of the {@link Task}
*
* @return this builder, for chaining
*/
@ -88,9 +91,9 @@ public class TaskBuilder {
}
/**
* Schedule this task for execution
* Schedule this {@link Task} for execution
*
* @return the built task
* @return the built {@link Task}
*/
public Task schedule() {
Task task = new Task(

View File

@ -1,7 +1,7 @@
package net.minestom.server.timer;
/**
* An enumeration that representing all available statuses for a task
* An enumeration that representing all available statuses for a {@link Task}
*/
public enum TaskStatus {