use of net.minecraft.server.level.ServerChunkCache in project Denizen-For-Bukkit by DenizenScript.
the class ChunkHelperImpl method restoreServerThread.
@Override
public void restoreServerThread(World world) {
if (DenizenCoreImplementation.tagThread == null) {
return;
}
if (resetServerThread == null) {
return;
}
ServerLevel nmsWorld = ((CraftWorld) world).getHandle();
ServerChunkCache provider = nmsWorld.getChunkProvider();
try {
chunkProviderServerThreadFieldSetter.invoke(provider, resetServerThread);
worldThreadFieldSetter.invoke(nmsWorld, resetServerThread);
resetServerThread = null;
} catch (Throwable ex) {
Debug.echoError(ex);
}
}
use of net.minecraft.server.level.ServerChunkCache in project Denizen-For-Bukkit by DenizenScript.
the class BlockLightImpl method sendSingleChunkUpdate.
public static void sendSingleChunkUpdate(LevelChunk chunk) {
doNotCheck = true;
LevelLightEngine lightEngine = chunk.getLevel().getChunkSource().getLightEngine();
ChunkPos pos = chunk.getPos();
// TODO: 1.16: should 'trust edges' be true here?
ClientboundLightUpdatePacket packet = new ClientboundLightUpdatePacket(pos, lightEngine, null, null, true);
((ServerChunkCache) chunk.getLevel().getChunkSource()).chunkMap.getPlayers(pos, false).forEach((player) -> {
player.connection.send(packet);
});
doNotCheck = false;
}
use of net.minecraft.server.level.ServerChunkCache in project MyPet by xXKeyleXx.
the class PlatformHelper method getBlockBBsInBB.
public List getBlockBBsInBB(net.minecraft.world.level.Level world, AABB axisalignedbb) {
UnsafeList unsafeList = new UnsafeList();
int minX = Mth.floor(axisalignedbb.minX);
int maxX = (int) Math.ceil(axisalignedbb.maxX);
int minY = Mth.floor(axisalignedbb.minY);
int maxY = (int) Math.ceil(axisalignedbb.maxY);
int minZ = Mth.floor(axisalignedbb.minZ);
int maxZ = (int) Math.ceil(axisalignedbb.maxZ);
VoxelShape vec3d;
boolean isEmpty;
for (int x = minX; x <= maxX; x++) {
for (int z = minZ; z <= maxZ; z++) {
if (((ServerChunkCache) world.getChunkSource()).hasChunk(x >> 4, z >> 4)) {
for (int y = minY - 1; y <= maxY; y++) {
BlockPos bp = new BlockPos(x, y, z);
BlockState blockData = world.getBlockState(bp);
if (blockData != null && blockData.getMaterial().isSolid()) {
vec3d = blockData.getCollisionShape(world, bp);
isEmpty = vec3d.isEmpty();
if (!isEmpty) {
for (AABB bb : vec3d.toAabbs()) {
if (bb.move(bp).intersects(axisalignedbb)) {
unsafeList.add(bb);
}
}
}
}
}
}
}
}
return unsafeList;
}
Aggregations