Files
ForgeMultipart/src/test/java/codechicken/multipart/TickSchedulerPersistenceRegressionTest.java
T

57 lines
1.9 KiB
Java

package codechicken.multipart;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.Collections;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.chunk.Chunk;
import org.junit.jupiter.api.Test;
class TickSchedulerPersistenceRegressionTest {
@Test
void savedTicksResumeAfterChunkReloadAndFireOnlyOnce() {
TickScheduler.WorldTickScheduler world = new TickScheduler.WorldTickScheduler(null);
Chunk chunk = new Chunk(null, 2, -3);
TileMultipart tile = new TileMultipart();
tile.xCoord = 35;
tile.yCoord = 64;
tile.zCoord = -44;
int[] calls = { 0 };
TMultiPart part = new TMultiPart() {
@Override
public String getType() {
return "test:restored-tick";
}
@Override
public void scheduledTick() {
calls[0]++;
}
};
tile.setPartList(Collections.singletonList(part));
part.bind(tile);
chunk.chunkTileEntityMap.put(new ChunkPosition(3, 64, 4), tile);
TickScheduler.ChunkTickScheduler scheduler = new TickScheduler.ChunkTickScheduler(chunk, world);
scheduler.scheduleTick(part, 2, false);
NBTTagCompound saved = new NBTTagCompound();
scheduler.saveData(saved);
assertEquals(1, saved.getTagList("multipartTicks", 10).tagCount());
scheduler.unload();
world = new TickScheduler.WorldTickScheduler(null);
TickScheduler.ChunkTickScheduler restored = new TickScheduler.ChunkTickScheduler(chunk, world);
restored.loadData(saved);
restored.scheduleTick(part, 0, false);
for (int tick = 0; tick < 4; tick++) {
world.preTick();
world.postTick();
assertEquals(tick < 2 ? 0 : 1, calls[0]);
}
}
}