Search in sources :

Example 36 with Level

use of net.minecraft.world.level.Level in project SpongeCommon by SpongePowered.

the class ServerGamePacketListenerImplMixin method impl$usePlayerDimensionForRespawn.

@Redirect(method = "handleClientCommand", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/players/PlayerList;respawn(Lnet/minecraft/server/level/ServerPlayer;Z)Lnet/minecraft/server/level/ServerPlayer;"))
private net.minecraft.server.level.ServerPlayer impl$usePlayerDimensionForRespawn(final PlayerList playerList, final net.minecraft.server.level.ServerPlayer player, final boolean keepAllPlayerData) {
    // A few changes to Vanilla logic here that, by default, still preserve game mechanics:
    // - If we have conquered The End then keep the dimension type we're headed to (which is Overworld as of 1.15)
    // - Otherwise, check the platform hooks for which dimension to respawn to. In Sponge, this is the Player's dimension they
    // are already in if we can respawn there which is only true for Overworld dimensions
    final ResourceKey<Level> respawnDimension = player.getRespawnDimension();
    @Nullable final ServerLevel destinationWorld = this.server.getLevel(respawnDimension);
    final ServerLevel overworld = this.server.getLevel(Level.OVERWORLD);
    if (overworld == null) {
        throw new IllegalStateException("Somehow the Overworld is not retrievable while trying to respawn player " + player.getGameProfile().getName());
    }
    final ServerLevel destination = destinationWorld == null ? overworld : destinationWorld;
    final RespawnPlayerEvent.SelectWorld event = SpongeEventFactory.createRespawnPlayerEventSelectWorld(PhaseTracker.getCauseStackManager().currentCause(), (org.spongepowered.api.world.server.ServerWorld) destination, (org.spongepowered.api.world.server.ServerWorld) player.getLevel(), (org.spongepowered.api.world.server.ServerWorld) overworld, (ServerPlayer) player);
    SpongeCommon.post(event);
    ((PlayerListBridge) this.server.getPlayerList()).bridge$setOriginalDestinationDimension(((ServerLevel) event.originalDestinationWorld()).dimension());
    ((PlayerListBridge) this.server.getPlayerList()).bridge$setNewDestinationDimension(((ServerLevel) event.destinationWorld()).dimension());
    // The key is reset to null in the overwrite
    return playerList.respawn(player, keepAllPlayerData);
}
Also used : ServerLevel(net.minecraft.server.level.ServerLevel) PlayerListBridge(org.spongepowered.common.bridge.server.players.PlayerListBridge) Level(net.minecraft.world.level.Level) ServerLevel(net.minecraft.server.level.ServerLevel) RespawnPlayerEvent(org.spongepowered.api.event.entity.living.player.RespawnPlayerEvent) Nullable(org.checkerframework.checker.nullness.qual.Nullable) Redirect(org.spongepowered.asm.mixin.injection.Redirect)

Example 37 with Level

use of net.minecraft.world.level.Level in project SpongeCommon by SpongePowered.

the class EntityMixin method bridge$changeDimension.

/**
 * This is effectively an overwrite of changeDimension: required due to
 * Forge changing the signature.
 *
 * @author dualspiral - 18th December 2020 - 1.16.4
 * @author dualspiral - 8th August 2021 - 1.16.5 (adjusted for SpongeForge)
 *
 * @param originalDestinationWorld The original target world
 * @param originalPortalLogic performs additional teleportation logic, as required.
 * @return The {@link Entity} that is either this one, or replaces this one
 */
@SuppressWarnings("ConstantConditions")
@org.checkerframework.checker.nullness.qual.Nullable
public Entity bridge$changeDimension(final net.minecraft.server.level.ServerLevel originalDestinationWorld, final PortalLogic originalPortalLogic) {
    // Sponge Start
    if (this.shadow$getCommandSenderWorld().isClientSide || this.removed) {
        return null;
    }
    final boolean isPlayer = ((Object) this) instanceof ServerPlayer;
    final TeleportContext contextToSwitchTo = EntityPhase.State.PORTAL_DIMENSION_CHANGE.createPhaseContext(PhaseTracker.getInstance()).worldChange();
    if (isPlayer) {
        contextToSwitchTo.player();
    }
    try (final TeleportContext context = contextToSwitchTo.buildAndSwitch();
        final CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) {
        frame.pushCause(this);
        frame.pushCause(originalPortalLogic.getPortalType());
        frame.addContext(EventContextKeys.MOVEMENT_TYPE, originalPortalLogic.getMovementType());
        this.impl$originalDestinationWorld = new WeakReference<>((ServerWorld) originalDestinationWorld);
        final ChangeEntityWorldEvent.Pre preChangeEvent = PlatformHooks.INSTANCE.getEventHooks().callChangeEntityWorldEventPre((Entity) (Object) this, originalDestinationWorld);
        if (preChangeEvent.isCancelled()) {
            this.impl$onPreWorldChangeCanceled();
            return null;
        }
        this.impl$customPortal = preChangeEvent.originalDestinationWorld() != preChangeEvent.destinationWorld();
        final PortalLogic finalPortalLogic;
        if (this.impl$customPortal && originalPortalLogic == originalDestinationWorld.getPortalForcer()) {
            finalPortalLogic = (PortalLogic) ((ServerLevel) preChangeEvent.destinationWorld()).getPortalForcer();
        } else {
            finalPortalLogic = originalPortalLogic;
        }
        final net.minecraft.server.level.ServerLevel targetWorld = (net.minecraft.server.level.ServerLevel) preChangeEvent.destinationWorld();
        final Vector3d currentPosition = VecHelper.toVector3d(this.shadow$position());
        // If a player, set the fact they are changing dimensions
        this.impl$onChangingDimension(targetWorld);
        final net.minecraft.server.level.ServerLevel serverworld = (net.minecraft.server.level.ServerLevel) this.level;
        final ResourceKey<Level> registrykey = serverworld.dimension();
        if (isPlayer && registrykey == Level.END && targetWorld.dimension() == Level.OVERWORLD && finalPortalLogic.isVanilla()) {
            // avoids modded dimensions
            return this.impl$postProcessChangeDimension(this.impl$performGameWinLogic());
        } else {
            // Sponge Start: Redirect the find portal call to the teleporter.
            // If this is vanilla, this will house our Reposition Event and return an appropriate
            // portal info
            final PortalInfo portalinfo = originalPortalLogic.getPortalInfo((Entity) (Object) this, targetWorld, // don't make this a method reference, it'll crash vanilla.
            x -> this.shadow$findDimensionEntryPoint(x));
            // Sponge End
            if (portalinfo != null) {
                if (portalinfo instanceof SpongePortalInfo) {
                    frame.addContext(EventContextKeys.PORTAL, ((SpongePortalInfo) portalinfo).portal());
                }
                // Only start teleporting if we have somewhere to go.
                this.impl$prepareForPortalTeleport(serverworld, targetWorld);
                try {
                    // Sponge Start: wrap the teleportation logic within a function to allow for modification
                    // of the teleporter
                    final Vector3d originalDestination = new Vector3d(portalinfo.pos.x, portalinfo.pos.y, portalinfo.pos.z);
                    // Note that impl$portalRepositioning is the lambda. As this will be different in ServerPlayer,
                    // we transfer it to a method instead so we can override it.
                    final Entity transportedEntity = originalPortalLogic.placeEntity((Entity) (Object) this, serverworld, targetWorld, this.yRot, createEndPlatform -> this.impl$portalRepositioning(createEndPlatform, serverworld, targetWorld, portalinfo));
                    // Make sure the right object was returned
                    this.impl$validateEntityAfterTeleport(transportedEntity, originalPortalLogic);
                    // If we need to reposition: well... reposition.
                    // Downside: portals won't come with us, but with how it's implemented in Forge,
                    // not sure how we'd do this.
                    // 
                    // If this is vanilla, we've already fired and dealt with the event
                    final Cause cause = PhaseTracker.getCauseStackManager().currentCause();
                    if (transportedEntity != null && this.impl$shouldFireRepositionEvent) {
                        final Vector3d destination = VecHelper.toVector3d(this.shadow$position());
                        final ChangeEntityWorldEvent.Reposition reposition = SpongeEventFactory.createChangeEntityWorldEventReposition(cause, (org.spongepowered.api.entity.Entity) transportedEntity, (org.spongepowered.api.world.server.ServerWorld) serverworld, currentPosition, destination, (org.spongepowered.api.world.server.ServerWorld) originalDestinationWorld, originalDestination, (org.spongepowered.api.world.server.ServerWorld) targetWorld);
                        final Vector3d finalPosition;
                        if (reposition.isCancelled()) {
                            // send them back to the original destination
                            finalPosition = originalDestination;
                        } else if (reposition.destinationPosition() != destination) {
                            finalPosition = reposition.destinationPosition();
                        } else {
                            finalPosition = null;
                        }
                        if (finalPosition != null) {
                            // TODO: Rollback captures during phase - anything generated needs to vanish here
                            // Issue chunk ticket of type Portal, even if a portal isn't being created here.
                            final BlockPos ticketPos = VecHelper.toBlockPos(finalPosition);
                            targetWorld.getChunkSource().addRegionTicket(TicketType.PORTAL, new ChunkPos(ticketPos), 3, ticketPos);
                            this.shadow$absMoveTo(finalPosition.x(), finalPosition.y(), finalPosition.z());
                        }
                    }
                    // Used to perform player specific tasks.
                    this.impl$postPortalForceChangeTasks(transportedEntity, targetWorld, originalPortalLogic.getPortalType() instanceof NetherPortalType);
                    // Call post event
                    Sponge.eventManager().post(SpongeEventFactory.createChangeEntityWorldEventPost(cause, (org.spongepowered.api.entity.Entity) this, (ServerWorld) serverworld, (ServerWorld) originalDestinationWorld, (ServerWorld) targetWorld));
                } catch (final RuntimeException e) {
                    // just in case a mod does something less than clever.
                    if ((Object) this instanceof ServerPlayer) {
                        this.impl$postPortalForceChangeTasks((Entity) (Object) this, (net.minecraft.server.level.ServerLevel) this.level, false);
                    }
                    throw e;
                }
            // Sponge End
            } else {
                // Didn't work out.
                return null;
            }
        }
        return this.impl$postProcessChangeDimension((Entity) (Object) this);
    } finally {
        // Reset for the next attempt.
        this.impl$shouldFireRepositionEvent = true;
        this.impl$originalDestinationWorld = null;
        this.impl$customPortal = false;
    }
}
Also used : ServerLevel(net.minecraft.server.level.ServerLevel) LivingEntity(net.minecraft.world.entity.LivingEntity) ItemEntity(net.minecraft.world.entity.item.ItemEntity) Entity(net.minecraft.world.entity.Entity) SpongePortalInfo(org.spongepowered.common.world.portal.SpongePortalInfo) PortalInfo(net.minecraft.world.level.portal.PortalInfo) ServerLevel(net.minecraft.server.level.ServerLevel) PortalLogic(org.spongepowered.common.world.portal.PortalLogic) TeleportContext(org.spongepowered.common.event.tracking.phase.entity.TeleportContext) ServerWorld(org.spongepowered.api.world.server.ServerWorld) SpongePortalInfo(org.spongepowered.common.world.portal.SpongePortalInfo) CauseStackManager(org.spongepowered.api.event.CauseStackManager) Cause(org.spongepowered.api.event.Cause) BlockPos(net.minecraft.core.BlockPos) ChunkPos(net.minecraft.world.level.ChunkPos) NetherPortalType(org.spongepowered.common.world.portal.NetherPortalType) ChangeEntityWorldEvent(org.spongepowered.api.event.entity.ChangeEntityWorldEvent) Vector3d(org.spongepowered.math.vector.Vector3d) ServerPlayer(net.minecraft.server.level.ServerPlayer) Level(net.minecraft.world.level.Level) ServerLevel(net.minecraft.server.level.ServerLevel)

Example 38 with Level

use of net.minecraft.world.level.Level in project SpongeCommon by SpongePowered.

the class BlockMixin_Tracker method tracker$captureBlockProposedToBeSpawningDrops.

@Inject(method = "dropResources(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/LevelAccessor;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/BlockEntity;)V", at = @At("HEAD"))
private static void tracker$captureBlockProposedToBeSpawningDrops(final BlockState state, final LevelAccessor worldIn, final BlockPos pos, @Nullable final BlockEntity tileEntity, final CallbackInfo ci) {
    if (!(worldIn instanceof Level)) {
        // In the name of my father, and his father before him, I cast you out!
        return;
    }
    final PhaseTracker server = PhaseTracker.SERVER;
    if (server.getSidedThread() != Thread.currentThread()) {
        return;
    }
    final PhaseContext<@NonNull ?> context = server.getPhaseContext();
    BlockMixin_Tracker.tracker$effectTransactorForDrops = context.getTransactor().logBlockDrops((Level) worldIn, pos, state, tileEntity);
}
Also used : PhaseTracker(org.spongepowered.common.event.tracking.PhaseTracker) Level(net.minecraft.world.level.Level) Inject(org.spongepowered.asm.mixin.injection.Inject)

Example 39 with Level

use of net.minecraft.world.level.Level in project SpongeCommon by SpongePowered.

the class SpongeWorldManager method worldExists.

@Override
public boolean worldExists(final ResourceKey key) {
    final net.minecraft.resources.ResourceKey<Level> registryKey = SpongeWorldManager.createRegistryKey(Objects.requireNonNull(key, "key"));
    if (Level.OVERWORLD.equals(registryKey)) {
        return true;
    }
    if (this.worlds.get(registryKey) != null) {
        return true;
    }
    final boolean isVanillaSubLevel = Level.NETHER.equals(registryKey) || Level.END.equals(registryKey);
    final Path levelDirectory = isVanillaSubLevel ? this.defaultWorldDirectory.resolve(this.getDirectoryName(key)) : this.customWorldsDirectory.resolve(key.namespace()).resolve(key.value());
    return Files.exists(levelDirectory);
}
Also used : Path(java.nio.file.Path) Level(net.minecraft.world.level.Level) ServerLevel(net.minecraft.server.level.ServerLevel)

Example 40 with Level

use of net.minecraft.world.level.Level in project SpongeCommon by SpongePowered.

the class SpongeWorldManager method loadWorld0.

private CompletableFuture<org.spongepowered.api.world.server.ServerWorld> loadWorld0(final net.minecraft.resources.ResourceKey<Level> registryKey, final LevelStem template, final WorldGenSettings generatorSettings) {
    final PrimaryLevelData defaultLevelData = (PrimaryLevelData) this.server.getWorldData();
    final LevelSettings defaultLevelSettings = ((PrimaryLevelDataAccessor) defaultLevelData).accessor$settings();
    final LevelStemBridge templateBridge = (LevelStemBridge) (Object) template;
    final ResourceKey worldKey = ((ResourceKeyBridge) templateBridge).bridge$getKey();
    final WorldType worldType = (WorldType) template.type();
    final ResourceKey worldTypeKey = RegistryTypes.WORLD_TYPE.get().valueKey((WorldType) template.type());
    MinecraftServerAccessor.accessor$LOGGER().info("Loading world '{}' ({})", worldKey, worldTypeKey);
    final String directoryName = this.getDirectoryName(worldKey);
    final boolean isVanillaSubLevel = this.isVanillaSubWorld(directoryName);
    final LevelStorageSource.LevelStorageAccess storageSource;
    try {
        if (isVanillaSubLevel) {
            storageSource = LevelStorageSource.createDefault(this.defaultWorldDirectory).createAccess(directoryName);
        } else {
            storageSource = LevelStorageSource.createDefault(this.customWorldsDirectory).createAccess(worldKey.namespace() + File.separator + worldKey.value());
        }
    } catch (final IOException e) {
        e.printStackTrace();
        return FutureUtil.completedWithException(new RuntimeException(String.format("Failed to create level data for world '%s'!", worldKey), e));
    }
    PrimaryLevelData levelData;
    levelData = (PrimaryLevelData) storageSource.getDataTag((DynamicOps<Tag>) BootstrapProperties.worldSettingsAdapter, defaultLevelSettings.getDataPackConfig());
    if (levelData == null) {
        final LevelSettings levelSettings;
        final WorldGenSettings generationSettings;
        if (this.server.isDemo()) {
            levelSettings = MinecraftServer.DEMO_SETTINGS;
            generationSettings = WorldGenSettings.demoSettings(BootstrapProperties.registries);
        } else {
            levelSettings = new LevelSettings(directoryName, (GameType) (Object) BootstrapProperties.gameMode.get(Sponge.game()), templateBridge.bridge$hardcore().orElse(BootstrapProperties.hardcore), (Difficulty) (Object) BootstrapProperties.difficulty.get(Sponge.game()), templateBridge.bridge$commands().orElse(BootstrapProperties.commands), new GameRules(), defaultLevelData.getDataPackConfig());
            generationSettings = generatorSettings;
        }
        levelData = new PrimaryLevelData(levelSettings, generationSettings, Lifecycle.stable());
    }
    ((PrimaryLevelDataBridge) levelData).bridge$populateFromDimension(template);
    final InheritableConfigHandle<WorldConfig> configAdapter = SpongeGameConfigs.createWorld(worldTypeKey, worldKey);
    ((PrimaryLevelDataBridge) levelData).bridge$configAdapter(configAdapter);
    levelData.setModdedInfo(this.server.getServerModName(), this.server.getModdedStatus().isPresent());
    final boolean isDebugGeneration = levelData.worldGenSettings().isDebug();
    final long seed = BiomeManager.obfuscateSeed(levelData.worldGenSettings().seed());
    final ChunkProgressListener chunkStatusListener = ((MinecraftServerAccessor) this.server).accessor$progressListenerFactory().create(11);
    final ServerLevel world = new ServerLevel(this.server, ((MinecraftServerAccessor) this.server).accessor$executor(), storageSource, levelData, registryKey, (DimensionType) worldType, chunkStatusListener, template.generator(), isDebugGeneration, seed, ImmutableList.of(), true);
    this.worlds.put(registryKey, world);
    return SpongeCommon.asyncScheduler().submit(() -> this.prepareWorld(world, isDebugGeneration)).thenApply(w -> {
        ((MinecraftServerAccessor) this.server).invoker$forceDifficulty();
        return w;
    }).thenCompose(w -> this.postWorldLoad(w, false)).thenApply(w -> (org.spongepowered.api.world.server.ServerWorld) w);
}
Also used : MinecraftServerAccessor(org.spongepowered.common.accessor.server.MinecraftServerAccessor) ServerLevelBridge(org.spongepowered.common.bridge.server.level.ServerLevelBridge) SpongeGameConfigs(org.spongepowered.common.config.SpongeGameConfigs) WorldConfig(org.spongepowered.common.config.inheritable.WorldConfig) DimensionGeneratorSettingsAccessor(org.spongepowered.common.accessor.world.gen.DimensionGeneratorSettingsAccessor) MinecraftServer(net.minecraft.server.MinecraftServer) FutureUtil(org.spongepowered.common.util.FutureUtil) Map(java.util.Map) Path(java.nio.file.Path) WanderingTraderSpawner(net.minecraft.world.entity.npc.WanderingTraderSpawner) BootstrapProperties(org.spongepowered.common.server.BootstrapProperties) WorldManager(org.spongepowered.api.world.server.WorldManager) ForcedChunksSavedData(net.minecraft.world.level.ForcedChunksSavedData) InheritableConfigHandle(org.spongepowered.common.config.inheritable.InheritableConfigHandle) RegistryAccess(net.minecraft.core.RegistryAccess) FileVisitResult(java.nio.file.FileVisitResult) PlatformHooks(org.spongepowered.common.hooks.PlatformHooks) Stream(java.util.stream.Stream) TicketType(net.minecraft.server.level.TicketType) MappedRegistry(net.minecraft.core.MappedRegistry) GameType(net.minecraft.world.level.GameType) CrashReport(net.minecraft.CrashReport) CustomSpawner(net.minecraft.world.level.CustomSpawner) RegistryEntry(org.spongepowered.api.registry.RegistryEntry) LevelStorageSource_LevelStorageAccessAccessor(org.spongepowered.common.accessor.world.level.storage.LevelStorageSource_LevelStorageAccessAccessor) Registry(org.spongepowered.api.registry.Registry) WorldGenSettings(net.minecraft.world.level.levelgen.WorldGenSettings) PrimaryLevelDataBridge(org.spongepowered.common.bridge.world.level.storage.PrimaryLevelDataBridge) JsonParser(com.google.gson.JsonParser) StandardCopyOption(java.nio.file.StandardCopyOption) ArrayList(java.util.ArrayList) VillageSiege(net.minecraft.world.entity.ai.village.VillageSiege) ResourceKey(org.spongepowered.api.ResourceKey) Server(org.spongepowered.api.Server) DataResult(com.mojang.serialization.DataResult) Difficulty(net.minecraft.world.Difficulty) Files(java.nio.file.Files) BufferedWriter(java.io.BufferedWriter) SpongeEventFactory(org.spongepowered.api.event.SpongeEventFactory) IOException(java.io.IOException) Lifecycle(com.mojang.serialization.Lifecycle) PhaseTracker(org.spongepowered.common.event.tracking.PhaseTracker) Decoder(com.mojang.serialization.Decoder) RegistryTypes(org.spongepowered.api.registry.RegistryTypes) InputStreamReader(java.io.InputStreamReader) Pair(com.mojang.datafixers.util.Pair) File(java.io.File) ChunkPos(net.minecraft.world.level.ChunkPos) ExecutionException(java.util.concurrent.ExecutionException) RegistryReadOps(net.minecraft.resources.RegistryReadOps) DataPackSerializer(org.spongepowered.common.datapack.DataPackSerializer) LevelStem(net.minecraft.world.level.dimension.LevelStem) LevelResource(net.minecraft.world.level.storage.LevelResource) ResourceLocation(net.minecraft.resources.ResourceLocation) JsonObject(com.google.gson.JsonObject) SpongeServer(org.spongepowered.common.SpongeServer) MinecraftServerAccessor(org.spongepowered.common.accessor.server.MinecraftServerAccessor) PrimaryLevelDataAccessor(org.spongepowered.common.accessor.world.level.storage.PrimaryLevelDataAccessor) JsonOps(com.mojang.serialization.JsonOps) DynamicOps(com.mojang.serialization.DynamicOps) PatrolSpawner(net.minecraft.world.level.levelgen.PatrolSpawner) SimpleFileVisitor(java.nio.file.SimpleFileVisitor) WorldData(net.minecraft.world.level.storage.WorldData) BiomeManager(net.minecraft.world.level.biome.BiomeManager) WorldTypes(org.spongepowered.api.world.WorldTypes) ChunkProgressListener(net.minecraft.server.level.progress.ChunkProgressListener) PrimaryLevelData(net.minecraft.world.level.storage.PrimaryLevelData) Collection(java.util.Collection) Launch(org.spongepowered.common.launch.Launch) GameRules(net.minecraft.world.level.GameRules) Sponge(org.spongepowered.api.Sponge) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) PhantomSpawner(net.minecraft.world.level.levelgen.PhantomSpawner) Objects(java.util.Objects) Util(net.minecraft.Util) List(java.util.List) CommandStorage(net.minecraft.world.level.storage.CommandStorage) BlockPos(net.minecraft.core.BlockPos) Optional(java.util.Optional) Level(net.minecraft.world.level.Level) LevelStemBridge(org.spongepowered.common.bridge.world.level.dimension.LevelStemBridge) FilenameUtils(org.apache.commons.io.FilenameUtils) Tag(net.minecraft.nbt.Tag) ServerChunkCache(net.minecraft.server.level.ServerChunkCache) Constants(org.spongepowered.common.util.Constants) WorldType(org.spongepowered.api.world.WorldType) CompletableFuture(java.util.concurrent.CompletableFuture) DimensionType(net.minecraft.world.level.dimension.DimensionType) ServerLevel(net.minecraft.server.level.ServerLevel) ServerWorldProperties(org.spongepowered.api.world.server.storage.ServerWorldProperties) OptionalInt(java.util.OptionalInt) JsonElement(com.google.gson.JsonElement) WorldTemplate(org.spongepowered.api.world.server.WorldTemplate) ImmutableList(com.google.common.collect.ImmutableList) LongIterator(it.unimi.dsi.fastutil.longs.LongIterator) Task(org.spongepowered.api.scheduler.Task) ResourceKeyBridge(org.spongepowered.common.bridge.ResourceKeyBridge) LevelStorageSource(net.minecraft.world.level.storage.LevelStorageSource) Features(net.minecraft.data.worldgen.Features) ReportedException(net.minecraft.ReportedException) SpongeUserManager(org.spongepowered.common.user.SpongeUserManager) SpongeCommon(org.spongepowered.common.SpongeCommon) BasicFileAttributes(java.nio.file.attribute.BasicFileAttributes) CatSpawner(net.minecraft.world.entity.npc.CatSpawner) WorldGenSettingsBridge(org.spongepowered.common.bridge.world.level.levelgen.WorldGenSettingsBridge) TimeUnit(java.util.concurrent.TimeUnit) LevelSettings(net.minecraft.world.level.LevelSettings) Comparator(java.util.Comparator) Collections(java.util.Collections) RegistryWriteOps(net.minecraft.resources.RegistryWriteOps) InputStream(java.io.InputStream) ServerLevel(net.minecraft.server.level.ServerLevel) ChunkProgressListener(net.minecraft.server.level.progress.ChunkProgressListener) Difficulty(net.minecraft.world.Difficulty) WorldConfig(org.spongepowered.common.config.inheritable.WorldConfig) GameType(net.minecraft.world.level.GameType) PrimaryLevelData(net.minecraft.world.level.storage.PrimaryLevelData) WorldGenSettings(net.minecraft.world.level.levelgen.WorldGenSettings) WorldType(org.spongepowered.api.world.WorldType) LevelStemBridge(org.spongepowered.common.bridge.world.level.dimension.LevelStemBridge) ResourceKeyBridge(org.spongepowered.common.bridge.ResourceKeyBridge) GameRules(net.minecraft.world.level.GameRules) LevelStorageSource(net.minecraft.world.level.storage.LevelStorageSource) IOException(java.io.IOException) PrimaryLevelDataBridge(org.spongepowered.common.bridge.world.level.storage.PrimaryLevelDataBridge) ResourceKey(org.spongepowered.api.ResourceKey) LevelSettings(net.minecraft.world.level.LevelSettings) Tag(net.minecraft.nbt.Tag) PrimaryLevelDataAccessor(org.spongepowered.common.accessor.world.level.storage.PrimaryLevelDataAccessor)

Aggregations

Level (net.minecraft.world.level.Level)53 BlockPos (net.minecraft.core.BlockPos)26 ServerLevel (net.minecraft.server.level.ServerLevel)19 ItemStack (net.minecraft.world.item.ItemStack)14 BlockState (net.minecraft.world.level.block.state.BlockState)13 IOException (java.io.IOException)10 Direction (net.minecraft.core.Direction)8 ChunkPos (net.minecraft.world.level.ChunkPos)6 Path (java.nio.file.Path)5 ExecutionException (java.util.concurrent.ExecutionException)5 Nullable (javax.annotation.Nullable)5 Entity (net.minecraft.world.entity.Entity)5 Player (net.minecraft.world.entity.player.Player)5 BlockEntity (net.minecraft.world.level.block.entity.BlockEntity)5 LevelStem (net.minecraft.world.level.dimension.LevelStem)5 SubscribeEvent (net.minecraftforge.eventbus.api.SubscribeEvent)5 Map (java.util.Map)4 Set (java.util.Set)4 CompoundTag (net.minecraft.nbt.CompoundTag)4 ResourceLocation (net.minecraft.resources.ResourceLocation)4