ThreadProvider cleanup

This commit is contained in:
TheMode 2021-07-09 11:20:49 +02:00
parent dc89b180fb
commit 37ab206cb1

View File

@ -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);
}
}
}