mirror of
https://github.com/Minestom/Minestom.git
synced 2024-11-05 02:10:24 +01:00
ThreadProvider cleanup
This commit is contained in:
parent
dc89b180fb
commit
37ab206cb1
@ -165,7 +165,6 @@ public abstract class ThreadProvider {
|
||||
processRemovedEntities();
|
||||
// Update entities chunks
|
||||
processUpdatedEntities();
|
||||
|
||||
if (getChunkRefreshType() == RefreshType.NEVER)
|
||||
return;
|
||||
|
||||
@ -175,21 +174,18 @@ public abstract class ThreadProvider {
|
||||
final int size = chunks.size();
|
||||
int counter = 0;
|
||||
while (true) {
|
||||
Chunk chunk = chunks.pollFirst();
|
||||
final Chunk chunk = chunks.pollFirst();
|
||||
if (!ChunkUtils.isLoaded(chunk)) {
|
||||
removeChunk(chunk);
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Update chunk threads
|
||||
switchChunk(chunk);
|
||||
|
||||
// Add back to the deque
|
||||
chunks.addLast(chunk);
|
||||
|
||||
if (++counter > size)
|
||||
break;
|
||||
|
||||
if (System.currentTimeMillis() >= endTime)
|
||||
break;
|
||||
}
|
||||
@ -226,22 +222,13 @@ public abstract class ThreadProvider {
|
||||
this.threads.forEach(TickThread::shutdown);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all the {@link TickThread tick threads}.
|
||||
*
|
||||
* @return the tick threads
|
||||
*/
|
||||
public @NotNull List<@NotNull TickThread> getThreads() {
|
||||
return threads;
|
||||
}
|
||||
|
||||
protected void addChunk(@NotNull Chunk chunk) {
|
||||
private void addChunk(@NotNull Chunk chunk) {
|
||||
ChunkEntry chunkEntry = setChunkThread(chunk, (thread) -> new ChunkEntry(thread, chunk));
|
||||
this.chunkEntryMap.put(chunk, chunkEntry);
|
||||
this.chunks.add(chunk);
|
||||
}
|
||||
|
||||
protected void switchChunk(@NotNull Chunk chunk) {
|
||||
private void switchChunk(@NotNull Chunk chunk) {
|
||||
ChunkEntry chunkEntry = chunkEntryMap.get(chunk);
|
||||
if (chunkEntry == null)
|
||||
return;
|
||||
@ -256,8 +243,8 @@ public abstract class ThreadProvider {
|
||||
});
|
||||
}
|
||||
|
||||
protected @NotNull ChunkEntry setChunkThread(@NotNull Chunk chunk,
|
||||
@NotNull Function<TickThread, ChunkEntry> chunkEntrySupplier) {
|
||||
private @NotNull ChunkEntry setChunkThread(@NotNull Chunk chunk,
|
||||
@NotNull Function<TickThread, ChunkEntry> chunkEntrySupplier) {
|
||||
final int threadId = getThreadId(chunk);
|
||||
TickThread thread = threads.get(threadId);
|
||||
var chunks = threadChunkMap.computeIfAbsent(thread, tickThread -> ConcurrentHashMap.newKeySet());
|
||||
@ -267,7 +254,7 @@ public abstract class ThreadProvider {
|
||||
return chunkEntry;
|
||||
}
|
||||
|
||||
protected void removeChunk(Chunk chunk) {
|
||||
private void removeChunk(Chunk chunk) {
|
||||
ChunkEntry chunkEntry = chunkEntryMap.get(chunk);
|
||||
if (chunkEntry != null) {
|
||||
TickThread thread = chunkEntry.thread;
|
||||
@ -286,7 +273,7 @@ public abstract class ThreadProvider {
|
||||
* @param chunk the chunk to find the thread id from
|
||||
* @return the chunk thread id
|
||||
*/
|
||||
protected int getThreadId(@NotNull Chunk chunk) {
|
||||
private int getThreadId(@NotNull Chunk chunk) {
|
||||
return (int) (Math.abs(findThread(chunk)) % threads.size());
|
||||
}
|
||||
|
||||
@ -310,25 +297,15 @@ public abstract class ThreadProvider {
|
||||
for (Entity entity : updatableEntities) {
|
||||
var acquirableEntity = entity.getAcquirable();
|
||||
ChunkEntry handlerChunkEntry = acquirableEntity.getHandler().getChunkEntry();
|
||||
|
||||
Chunk entityChunk = entity.getChunk();
|
||||
|
||||
// Entity is possibly not in the correct thread
|
||||
|
||||
// Remove from previous list
|
||||
{
|
||||
if (handlerChunkEntry != null) {
|
||||
handlerChunkEntry.entities.remove(entity);
|
||||
}
|
||||
if (handlerChunkEntry != null) {
|
||||
handlerChunkEntry.entities.remove(entity);
|
||||
}
|
||||
|
||||
// Add to new list
|
||||
{
|
||||
ChunkEntry chunkEntry = chunkEntryMap.get(entityChunk);
|
||||
if (chunkEntry != null) {
|
||||
chunkEntry.entities.add(entity);
|
||||
acquirableEntity.getHandler().refreshChunkEntry(chunkEntry);
|
||||
}
|
||||
ChunkEntry chunkEntry = chunkEntryMap.get(entity.getChunk());
|
||||
if (chunkEntry != null) {
|
||||
chunkEntry.entities.add(entity);
|
||||
acquirableEntity.getHandler().refreshChunkEntry(chunkEntry);
|
||||
}
|
||||
}
|
||||
this.updatableEntities.clear();
|
||||
@ -387,5 +364,4 @@ public abstract class ThreadProvider {
|
||||
return Objects.hash(chunk);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user