mirror of
https://github.com/Minestom/Minestom.git
synced 2024-09-29 23:17:59 +02:00
Comments for Instance & InstanceContainer
This commit is contained in:
parent
ae7f804e6a
commit
465d83ae77
@ -448,6 +448,7 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer {
|
|||||||
} else {
|
} else {
|
||||||
drag = 0.98f; // air drag
|
drag = 0.98f; // air drag
|
||||||
}
|
}
|
||||||
|
|
||||||
velocity.setX(velocity.getX() * drag);
|
velocity.setX(velocity.getX() * drag);
|
||||||
velocity.setZ(velocity.getZ() * drag);
|
velocity.setZ(velocity.getZ() * drag);
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to change the id of the block in a specific position.
|
* Used to change the id of the block in a specific {@link BlockPosition}.
|
||||||
* <p>
|
* <p>
|
||||||
* In case of a CustomBlock it does not remove it but only refresh its visual
|
* In case of a CustomBlock it does not remove it but only refresh its visual
|
||||||
*
|
*
|
||||||
@ -118,7 +118,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
public abstract boolean breakBlock(Player player, BlockPosition blockPosition);
|
public abstract boolean breakBlock(Player player, BlockPosition blockPosition);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Force the generation of the chunk, even if no file and ChunkGenerator are defined
|
* Force the generation of a {@link Chunk}, even if no file and {@link ChunkGenerator} are defined
|
||||||
*
|
*
|
||||||
* @param chunkX the chunk X
|
* @param chunkX the chunk X
|
||||||
* @param chunkZ the chunk Z
|
* @param chunkZ the chunk Z
|
||||||
@ -150,7 +150,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
public abstract void unloadChunk(Chunk chunk);
|
public abstract void unloadChunk(Chunk chunk);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the specified chunk
|
* Get the specified {@link Chunk}
|
||||||
*
|
*
|
||||||
* @param chunkX the chunk X
|
* @param chunkX the chunk X
|
||||||
* @param chunkZ the chunk Z
|
* @param chunkZ the chunk Z
|
||||||
@ -371,7 +371,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the instance world border
|
* Get the instance {@link WorldBorder}
|
||||||
*
|
*
|
||||||
* @return the world border linked to the instance
|
* @return the world border linked to the instance
|
||||||
*/
|
*/
|
||||||
@ -602,7 +602,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the block data at the given position, or null if not any
|
* Get the block data at the given {@link BlockPosition}, or null if not any
|
||||||
*
|
*
|
||||||
* @param blockPosition the block position
|
* @param blockPosition the block position
|
||||||
* @return the block data at the position, null if not any
|
* @return the block data at the position, null if not any
|
||||||
@ -612,12 +612,12 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the block data at the given position
|
* Set the block data at the given {@link BlockPosition}
|
||||||
*
|
*
|
||||||
* @param x the X position
|
* @param x the X position
|
||||||
* @param y the Y position
|
* @param y the Y position
|
||||||
* @param z the Z position
|
* @param z the Z position
|
||||||
* @param data the data to be set
|
* @param data the data to be set, can be null
|
||||||
*/
|
*/
|
||||||
public void setBlockData(int x, int y, int z, Data data) {
|
public void setBlockData(int x, int y, int z, Data data) {
|
||||||
final Chunk chunk = getChunkAt(x, z);
|
final Chunk chunk = getChunkAt(x, z);
|
||||||
@ -628,17 +628,17 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the block data at the given position
|
* Set the block data at the given {@link BlockPosition}
|
||||||
*
|
*
|
||||||
* @param blockPosition the block position
|
* @param blockPosition the block position
|
||||||
* @param data the data to be set
|
* @param data the data to be set, can be null
|
||||||
*/
|
*/
|
||||||
public void setBlockData(BlockPosition blockPosition, Data data) {
|
public void setBlockData(BlockPosition blockPosition, Data data) {
|
||||||
setBlockData(blockPosition.getX(), (byte) blockPosition.getY(), blockPosition.getZ(), data);
|
setBlockData(blockPosition.getX(), (byte) blockPosition.getY(), blockPosition.getZ(), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the chunk at the given position, null if not loaded
|
* Get the chunk at the given {@link BlockPosition}, null if not loaded
|
||||||
*
|
*
|
||||||
* @param x the X position
|
* @param x the X position
|
||||||
* @param z the Z position
|
* @param z the Z position
|
||||||
@ -662,7 +662,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the chunk at the given position, null if not loaded
|
* Get the chunk at the given {@link BlockPosition}, null if not loaded
|
||||||
*
|
*
|
||||||
* @param blockPosition the chunk position
|
* @param blockPosition the chunk position
|
||||||
* @return the chunk at the given position, null if not loaded
|
* @return the chunk at the given position, null if not loaded
|
||||||
@ -672,7 +672,7 @@ public abstract class Instance implements BlockModifier, EventHandler, DataConta
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the chunk at the given position, null if not loaded
|
* Get the chunk at the given {@link Position}, null if not loaded
|
||||||
*
|
*
|
||||||
* @param position the chunk position
|
* @param position the chunk position
|
||||||
* @return the chunk at the given position, null if not loaded
|
* @return the chunk at the given position, null if not loaded
|
||||||
|
@ -184,12 +184,31 @@ public class InstanceContainer extends Instance {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call {@link CustomBlock#onDestroy(Instance, BlockPosition, Data)} for {@code previousBlock}
|
||||||
|
* <p>
|
||||||
|
* WARNING {@code chunk} needs to be synchronized
|
||||||
|
*
|
||||||
|
* @param chunk the chunk where the block is
|
||||||
|
* @param index the index of the block
|
||||||
|
* @param previousBlock the block which has been destroyed
|
||||||
|
* @param blockPosition the block position
|
||||||
|
*/
|
||||||
private void callBlockDestroy(Chunk chunk, int index, CustomBlock previousBlock, BlockPosition blockPosition) {
|
private void callBlockDestroy(Chunk chunk, int index, CustomBlock previousBlock, BlockPosition blockPosition) {
|
||||||
final Data previousData = chunk.getData(index);
|
final Data previousData = chunk.getData(index);
|
||||||
previousBlock.onDestroy(this, blockPosition, previousData);
|
previousBlock.onDestroy(this, blockPosition, previousData);
|
||||||
chunk.UNSAFE_removeCustomBlock(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ());
|
chunk.UNSAFE_removeCustomBlock(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call {@link CustomBlock#onPlace(Instance, BlockPosition, Data)} for the current custom block at the position
|
||||||
|
* <p>
|
||||||
|
* WARNING {@code chunk} needs to be synchronized
|
||||||
|
*
|
||||||
|
* @param chunk the chunk where the block is
|
||||||
|
* @param index the index of the block
|
||||||
|
* @param blockPosition the block position
|
||||||
|
*/
|
||||||
private void callBlockPlace(Chunk chunk, int index, BlockPosition blockPosition) {
|
private void callBlockPlace(Chunk chunk, int index, BlockPosition blockPosition) {
|
||||||
final CustomBlock actualBlock = chunk.getCustomBlock(index);
|
final CustomBlock actualBlock = chunk.getCustomBlock(index);
|
||||||
if (actualBlock == null)
|
if (actualBlock == null)
|
||||||
@ -198,6 +217,13 @@ public class InstanceContainer extends Instance {
|
|||||||
actualBlock.onPlace(this, blockPosition, previousData);
|
actualBlock.onPlace(this, blockPosition, previousData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call the {@link BlockPlacementRule} for the specified block state id
|
||||||
|
*
|
||||||
|
* @param blockStateId the block state id to modify
|
||||||
|
* @param blockPosition the block position
|
||||||
|
* @return the modified block state id
|
||||||
|
*/
|
||||||
private short executeBlockPlacementRule(short blockStateId, BlockPosition blockPosition) {
|
private short executeBlockPlacementRule(short blockStateId, BlockPosition blockPosition) {
|
||||||
final BlockPlacementRule blockPlacementRule = BLOCK_MANAGER.getBlockPlacementRule(blockStateId);
|
final BlockPlacementRule blockPlacementRule = BLOCK_MANAGER.getBlockPlacementRule(blockStateId);
|
||||||
if (blockPlacementRule != null) {
|
if (blockPlacementRule != null) {
|
||||||
@ -206,6 +232,13 @@ public class InstanceContainer extends Instance {
|
|||||||
return blockStateId;
|
return blockStateId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executed when a block is modified, this is used to modify the states of neighbours blocks
|
||||||
|
* <p>
|
||||||
|
* For example, this can be used for redstone wires which need an understanding of its neighborhoods to take the right shape
|
||||||
|
*
|
||||||
|
* @param blockPosition the position of the modified block
|
||||||
|
*/
|
||||||
private void executeNeighboursBlockPlacementRule(BlockPosition blockPosition) {
|
private void executeNeighboursBlockPlacementRule(BlockPosition blockPosition) {
|
||||||
for (int offsetX = -1; offsetX < 2; offsetX++) {
|
for (int offsetX = -1; offsetX < 2; offsetX++) {
|
||||||
for (int offsetY = -1; offsetY < 2; offsetY++) {
|
for (int offsetY = -1; offsetY < 2; offsetY++) {
|
||||||
@ -356,7 +389,7 @@ public class InstanceContainer extends Instance {
|
|||||||
* <p>
|
* <p>
|
||||||
* WARNING: {@link #getData()} needs to be a {@link SerializableData} in order to be saved
|
* WARNING: {@link #getData()} needs to be a {@link SerializableData} in order to be saved
|
||||||
*
|
*
|
||||||
* @param callback the callback
|
* @param callback the callback once the saving is done
|
||||||
*/
|
*/
|
||||||
public void saveInstance(Runnable callback) {
|
public void saveInstance(Runnable callback) {
|
||||||
Check.notNull(getStorageLocation(), "You cannot save the instance if no StorageLocation has been defined");
|
Check.notNull(getStorageLocation(), "You cannot save the instance if no StorageLocation has been defined");
|
||||||
@ -552,14 +585,33 @@ public class InstanceContainer extends Instance {
|
|||||||
this.storageLocation = storageLocation;
|
this.storageLocation = storageLocation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the {@link IChunkLoader} of this instance
|
||||||
|
*
|
||||||
|
* @return the {@link IChunkLoader} of this instance
|
||||||
|
*/
|
||||||
public IChunkLoader getChunkLoader() {
|
public IChunkLoader getChunkLoader() {
|
||||||
return chunkLoader;
|
return chunkLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the {@link IChunkLoader} of this instance (to change how chunks are retrieved when not already loaded)
|
||||||
|
*
|
||||||
|
* @param chunkLoader the new {@link IChunkLoader}
|
||||||
|
*/
|
||||||
public void setChunkLoader(IChunkLoader chunkLoader) {
|
public void setChunkLoader(IChunkLoader chunkLoader) {
|
||||||
this.chunkLoader = chunkLoader;
|
this.chunkLoader = chunkLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a {@link BlockChangePacket} at the specified {@link BlockPosition} to set the block as {@code blockStateId}
|
||||||
|
* <p>
|
||||||
|
* WARNING: this does not change the internal block data, this is strictly visual for the players
|
||||||
|
*
|
||||||
|
* @param chunk the chunk where the block is
|
||||||
|
* @param blockPosition the block position
|
||||||
|
* @param blockStateId the new state of the block
|
||||||
|
*/
|
||||||
private void sendBlockChange(Chunk chunk, BlockPosition blockPosition, short blockStateId) {
|
private void sendBlockChange(Chunk chunk, BlockPosition blockPosition, short blockStateId) {
|
||||||
BlockChangePacket blockChangePacket = new BlockChangePacket();
|
BlockChangePacket blockChangePacket = new BlockChangePacket();
|
||||||
blockChangePacket.blockPosition = blockPosition;
|
blockChangePacket.blockPosition = blockPosition;
|
||||||
@ -569,20 +621,19 @@ public class InstanceContainer extends Instance {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void scheduleUpdate(int time, TimeUnit unit, BlockPosition position) {
|
public void scheduleUpdate(int time, TimeUnit unit, BlockPosition position) {
|
||||||
Instance instance = this;
|
|
||||||
final CustomBlock toUpdate = getCustomBlock(position);
|
final CustomBlock toUpdate = getCustomBlock(position);
|
||||||
if (toUpdate == null) {
|
if (toUpdate == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MinecraftServer.getSchedulerManager().buildTask(() -> {
|
MinecraftServer.getSchedulerManager().buildTask(() -> {
|
||||||
final CustomBlock currentBlock = instance.getCustomBlock(position);
|
final CustomBlock currentBlock = getCustomBlock(position);
|
||||||
if (currentBlock == null)
|
if (currentBlock == null)
|
||||||
return;
|
return;
|
||||||
if (currentBlock.getCustomBlockId() != toUpdate.getCustomBlockId()) { // block changed
|
if (currentBlock.getCustomBlockId() != toUpdate.getCustomBlockId()) { // block changed
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
currentBlock.scheduledUpdate(instance, position, getBlockData(position));
|
currentBlock.scheduledUpdate(this, position, getBlockData(position));
|
||||||
}).delay(time, unit).schedule();
|
}).delay(time, unit).schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user