--- /dev/null +++ b/io/papermc/paper/FeatureHooks.java @@ -1,0 +_,84 @@ +package io.papermc.paper; + +import io.papermc.paper.command.PaperSubcommand; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import it.unimi.dsi.fastutil.longs.LongSet; +import it.unimi.dsi.fastutil.longs.LongSets; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import it.unimi.dsi.fastutil.objects.ObjectSet; +import it.unimi.dsi.fastutil.objects.ObjectSets; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.core.Registry; +import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.monster.Spider; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.PalettedContainer; +import org.bukkit.Chunk; +import org.bukkit.World; + +public final class FeatureHooks { + + public static void initChunkTaskScheduler(final boolean useParallelGen) { + } + + public static void registerPaperCommands(final Map, PaperSubcommand> commands) { + } + + public static LevelChunkSection createSection(final Registry biomeRegistry, final Level level, final ChunkPos chunkPos, final int chunkSection) { + return new LevelChunkSection(biomeRegistry); + } + + public static void sendChunkRefreshPackets(final List playersInRange, final LevelChunk chunk) { + final ClientboundLevelChunkWithLightPacket refreshPacket = new ClientboundLevelChunkWithLightPacket(chunk, chunk.level.getLightEngine(), null, null); + for (final ServerPlayer player : playersInRange) { + if (player.connection == null) continue; + + player.connection.send(refreshPacket); + } + } + + public static PalettedContainer emptyPalettedBlockContainer() { + return new PalettedContainer<>(Block.BLOCK_STATE_REGISTRY, Blocks.AIR.defaultBlockState(), PalettedContainer.Strategy.SECTION_STATES); + } + + public static Set getSentChunkKeys(final ServerPlayer player) { + final LongSet keys = new LongOpenHashSet(); + player.getChunkTrackingView().forEach(pos -> keys.add(pos.longKey)); + return LongSets.unmodifiable(keys); + } + + public static Set getSentChunks(final ServerPlayer player) { + final ObjectSet chunks = new ObjectOpenHashSet<>(); + final World world = player.serverLevel().getWorld(); + player.getChunkTrackingView().forEach(pos -> { + final org.bukkit.Chunk chunk = world.getChunkAt(pos.longKey); + chunks.add(chunk); + }); + return ObjectSets.unmodifiable(chunks); + } + + public static boolean isChunkSent(final ServerPlayer player, final long chunkKey) { + return player.getChunkTrackingView().contains(new ChunkPos(chunkKey)); + } + + public static boolean isSpiderCollidingWithWorldBorder(final Spider spider) { + return true; // ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.isCollidingWithBorder(spider.level().getWorldBorder(), spider.getBoundingBox().inflate(ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.COLLISION_EPSILON)) + } + + public static void dumpTickingInfo() { + } + + private static void dumpEntity(final Entity entity) { + } +}