Update to Minecraft 1.16.1

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2020-06-25 10:00:00 +10:00
parent 3862d2811e
commit 50503fd516
424 changed files with 5960 additions and 5636 deletions

View File

@@ -7,13 +7,13 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import com.google.common.collect.MapMaker;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.mojang.authlib.GameProfile;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.tree.CommandNode;
import com.mojang.brigadier.tree.LiteralCommandNode;
import com.mojang.serialization.DynamicOps;
import com.mojang.serialization.Lifecycle;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufOutputStream;
import io.netty.buffer.Unpooled;
@@ -36,6 +36,9 @@ import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
import java.util.Random;
import java.util.Set;
import java.util.UUID;
import java.util.function.Consumer;
@@ -45,21 +48,30 @@ import javax.imageio.ImageIO;
import jline.console.ConsoleReader;
import net.minecraft.server.Advancement;
import net.minecraft.server.ArgumentEntity;
import net.minecraft.server.BiomeManager;
import net.minecraft.server.Block;
import net.minecraft.server.BlockPosition;
import net.minecraft.server.BossBattleCustom;
import net.minecraft.server.CommandDispatcher;
import net.minecraft.server.CommandListenerWrapper;
import net.minecraft.server.CommandReload;
import net.minecraft.server.Convertable;
import net.minecraft.server.DataConverterRegistry;
import net.minecraft.server.DedicatedPlayerList;
import net.minecraft.server.DedicatedServer;
import net.minecraft.server.DedicatedServerProperties;
import net.minecraft.server.DedicatedServerSettings;
import net.minecraft.server.DimensionManager;
import net.minecraft.server.DynamicOpsNBT;
import net.minecraft.server.Enchantments;
import net.minecraft.server.EntityPlayer;
import net.minecraft.server.EnumDifficulty;
import net.minecraft.server.EnumGamemode;
import net.minecraft.server.GameRules;
import net.minecraft.server.GeneratorSettings;
import net.minecraft.server.IRecipe;
import net.minecraft.server.IRegistry;
import net.minecraft.server.IRegistryCustom;
import net.minecraft.server.Item;
import net.minecraft.server.ItemWorldMap;
import net.minecraft.server.Items;
@@ -67,18 +79,30 @@ import net.minecraft.server.JsonListEntry;
import net.minecraft.server.LootTableRegistry;
import net.minecraft.server.MapIcon;
import net.minecraft.server.MinecraftKey;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.MobEffects;
import net.minecraft.server.MobSpawner;
import net.minecraft.server.MobSpawnerCat;
import net.minecraft.server.MobSpawnerPatrol;
import net.minecraft.server.MobSpawnerPhantom;
import net.minecraft.server.MobSpawnerTrader;
import net.minecraft.server.NBTBase;
import net.minecraft.server.PlayerList;
import net.minecraft.server.RegistryMaterials;
import net.minecraft.server.RegistryReadOps;
import net.minecraft.server.ResourceKey;
import net.minecraft.server.SaveData;
import net.minecraft.server.ServerCommand;
import net.minecraft.server.TagsServer;
import net.minecraft.server.TicketType;
import net.minecraft.server.Vec3D;
import net.minecraft.server.WorldData;
import net.minecraft.server.VillageSiege;
import net.minecraft.server.WorldDataServer;
import net.minecraft.server.WorldDimension;
import net.minecraft.server.WorldMap;
import net.minecraft.server.WorldNBTStorage;
import net.minecraft.server.WorldServer;
import net.minecraft.server.WorldSettings;
import net.minecraft.server.WorldType;
import org.apache.commons.lang.Validate;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
@@ -404,7 +428,7 @@ public final class CraftServer implements Server {
private void syncCommands() {
// Clear existing commands
CommandDispatcher dispatcher = console.commandDispatcher = new CommandDispatcher();
CommandDispatcher dispatcher = console.dataPackResources.commandDispatcher = new CommandDispatcher();
// Register all commands, vanilla ones will be using the old dispatcher references
for (Map.Entry<String, Command> entry : commandMap.getKnownCommands().entrySet()) {
@@ -510,7 +534,7 @@ public final class CraftServer implements Server {
@Override
public Player getPlayer(UUID id) {
EntityPlayer player = playerList.a(id);
EntityPlayer player = playerList.getPlayer(id);
if (player != null) {
return player.getBukkitEntity();
@@ -577,12 +601,12 @@ public final class CraftServer implements Server {
@Override
public String getWorldType() {
return this.getProperties().levelType.name();
return this.getProperties().properties.getProperty("level-type");
}
@Override
public boolean getGenerateStructures() {
return this.getServer().getGenerateStructures();
return this.getProperties().generatorSettings.shouldGenerateMapFeatures();
}
@Override
@@ -721,7 +745,6 @@ public final class CraftServer implements Server {
console.propertyManager = new DedicatedServerSettings(console.options);
DedicatedServerProperties config = console.propertyManager.getProperties();
console.setSpawnAnimals(config.spawnAnimals);
console.setPVP(config.pvp);
console.setAllowFlight(config.allowFlight);
console.setMotd(config.motd);
@@ -748,7 +771,7 @@ public final class CraftServer implements Server {
}
for (WorldServer world : console.getWorlds()) {
world.worldData.setDifficulty(config.difficulty);
world.worldDataServer.setDifficulty(config.difficulty);
world.setSpawnFlags(config.spawnMonsters, config.spawnAnimals);
if (this.getTicksPerAnimalSpawns() < 0) {
world.ticksPerAnimalSpawns = 400;
@@ -814,7 +837,7 @@ public final class CraftServer implements Server {
@Override
public void reloadData() {
console.reload();
CommandReload.reload(console);
}
private void loadIcon() {
@@ -906,8 +929,6 @@ public final class CraftServer implements Server {
ChunkGenerator generator = creator.generator();
File folder = new File(getWorldContainer(), name);
World world = getWorld(name);
WorldType type = WorldType.getType(creator.type().getName());
boolean generateStructures = creator.generateStructures();
if (world != null) {
return world;
@@ -921,50 +942,88 @@ public final class CraftServer implements Server {
generator = getGenerator(name);
}
console.convertWorld(name);
ResourceKey<WorldDimension> actualDimension;
switch (creator.environment()) {
case NORMAL:
actualDimension = WorldDimension.OVERWORLD;
break;
case NETHER:
actualDimension = WorldDimension.THE_NETHER;
break;
case THE_END:
actualDimension = WorldDimension.THE_END;
break;
default:
throw new IllegalArgumentException("Illegal dimension");
}
Convertable.ConversionSession worldSession;
try {
worldSession = Convertable.a(getWorldContainer().toPath()).c(name, actualDimension);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
MinecraftServer.convertWorld(worldSession); // Run conversion now
int dimension = CraftWorld.CUSTOM_DIMENSION_OFFSET + console.worldServer.size();
boolean used = false;
do {
for (WorldServer server : console.getWorlds()) {
used = server.getWorldProvider().getDimensionManager().getDimensionID() == dimension;
if (used) {
dimension++;
break;
}
}
} while (used);
boolean hardcore = creator.hardcore();
WorldNBTStorage sdm = new WorldNBTStorage(getWorldContainer(), name, getServer(), getHandle().getServer().dataConverterManager);
WorldData worlddata = sdm.getWorldData();
IRegistryCustom.Dimension iregistrycustom_dimension = IRegistryCustom.b();
RegistryReadOps<NBTBase> registryreadops = RegistryReadOps.a((DynamicOps) DynamicOpsNBT.a, console.dataPackResources.h(), (IRegistryCustom) iregistrycustom_dimension);
WorldDataServer worlddata = (WorldDataServer) worldSession.a((DynamicOps) registryreadops, console.datapackconfiguration);
WorldSettings worldSettings;
// See MinecraftServer.a(String, String, long, WorldType, JsonElement)
if (worlddata == null) {
worldSettings = new WorldSettings(creator.seed(), EnumGamemode.getById(getDefaultGameMode().getValue()), generateStructures, hardcore, type);
JsonElement parsedSettings = new JsonParser().parse(creator.generatorSettings());
if (parsedSettings.isJsonObject()) {
worldSettings.setGeneratorSettings(parsedSettings.getAsJsonObject());
}
worlddata = new WorldData(worldSettings, name);
} else {
worlddata.setName(name);
worldSettings = new WorldSettings(worlddata);
Properties properties = new Properties();
properties.put("generator-settings", Objects.toString(creator.generatorSettings()));
properties.put("level-seed", Objects.toString(creator.seed()));
properties.put("generate-structures", Objects.toString(creator.generateStructures()));
properties.put("level-type", Objects.toString(creator.type().getName()));
GeneratorSettings generatorsettings = GeneratorSettings.a(properties);
worldSettings = new WorldSettings(name, EnumGamemode.getById(getDefaultGameMode().getValue()), hardcore, EnumDifficulty.EASY, false, new GameRules(), console.datapackconfiguration);
worlddata = new WorldDataServer(worldSettings, generatorsettings, Lifecycle.stable());
}
worlddata.a(console.getServerModName(), console.getModded().isPresent());
if (console.options.has("forceUpgrade")) {
net.minecraft.server.Main.convertWorld(worldSession, DataConverterRegistry.a(), console.options.has("eraseCache"), () -> {
return true;
}, worlddata.getGeneratorSettings().g());
}
DimensionManager actualDimension = DimensionManager.a(creator.environment().getId());
DimensionManager internalDimension = DimensionManager.register(name.toLowerCase(java.util.Locale.ENGLISH), new DimensionManager(dimension, actualDimension.getSuffix(), actualDimension.folder, (w, manager) -> actualDimension.providerFactory.apply(w, manager), actualDimension.hasSkyLight(), actualDimension.getGenLayerZoomer(), actualDimension));
WorldServer internal = (WorldServer) new WorldServer(console, console.executorService, sdm, worlddata, internalDimension, console.getMethodProfiler(), getServer().worldLoadListenerFactory.create(11), creator.environment(), generator);
long j = BiomeManager.a(creator.seed());
List<MobSpawner> list = ImmutableList.of(new MobSpawnerPhantom(), new MobSpawnerPatrol(), new MobSpawnerCat(), new VillageSiege(), new MobSpawnerTrader(worlddata));
RegistryMaterials<WorldDimension> registrymaterials = worlddata.getGeneratorSettings().e();
WorldDimension worlddimension = (WorldDimension) registrymaterials.a(actualDimension);
DimensionManager dimensionmanager;
net.minecraft.server.ChunkGenerator chunkgenerator;
if (worlddimension == null) {
dimensionmanager = DimensionManager.a();
chunkgenerator = GeneratorSettings.a((new Random()).nextLong());
} else {
dimensionmanager = worlddimension.b();
chunkgenerator = worlddimension.c();
}
ResourceKey<DimensionManager> typeKey = (ResourceKey) console.f.a().c(dimensionmanager).orElseThrow(() -> {
return new IllegalStateException("Unregistered dimension type: " + dimensionmanager);
});
ResourceKey<net.minecraft.server.World> worldKey = ResourceKey.a(IRegistry.ae, new MinecraftKey(name.toLowerCase(java.util.Locale.ENGLISH)));
WorldServer internal = (WorldServer) new WorldServer(console, console.executorService, worldSession, worlddata, worldKey, typeKey, dimensionmanager, getServer().worldLoadListenerFactory.create(11),
chunkgenerator, worlddata.getGeneratorSettings().isDebugWorld(), j, creator.environment() == Environment.NORMAL ? list : ImmutableList.of(), creator.environment() == Environment.NORMAL, creator.environment(), generator);
if (!(worlds.containsKey(name.toLowerCase(java.util.Locale.ENGLISH)))) {
return null;
}
console.initWorld(internal, worlddata, worldSettings);
console.initWorld(internal, worlddata, worlddata, worlddata.getGeneratorSettings());
internal.worldData.setDifficulty(EnumDifficulty.EASY);
internal.setSpawnFlags(true, true);
console.worldServer.put(internal.getWorldProvider().getDimensionManager(), internal);
console.worldServer.put(internal.getDimensionKey(), internal);
pluginManager.callEvent(new WorldInitEvent(internal.getWorld()));
@@ -987,11 +1046,11 @@ public final class CraftServer implements Server {
WorldServer handle = ((CraftWorld) world).getHandle();
if (!(console.worldServer.containsKey(handle.getWorldProvider().getDimensionManager()))) {
if (!(console.worldServer.containsKey(handle.getDimensionKey()))) {
return false;
}
if (handle.getWorldProvider().getDimensionManager() == DimensionManager.OVERWORLD) {
if (handle.getDimensionKey() == net.minecraft.server.World.OVERWORLD) {
return false;
}
@@ -1017,7 +1076,7 @@ public final class CraftServer implements Server {
}
worlds.remove(world.getName().toLowerCase(java.util.Locale.ENGLISH));
console.worldServer.remove(handle.getWorldProvider().getDimensionManager());
console.worldServer.remove(handle.getDimensionKey());
return true;
}
@@ -1138,7 +1197,7 @@ public final class CraftServer implements Server {
@Override
public void resetRecipes() {
console.reload(); // Not ideal but hard to reload a subset of a resource pack
reloadData(); // Not ideal but hard to reload a subset of a resource pack
}
@Override
@@ -1256,7 +1315,7 @@ public final class CraftServer implements Server {
@Override
@Deprecated
public CraftMapView getMap(int id) {
WorldMap worldmap = console.getWorldServer(DimensionManager.OVERWORLD).a("map_" + id);
WorldMap worldmap = console.getWorldServer(net.minecraft.server.World.OVERWORLD).a("map_" + id);
if (worldmap == null) {
return null;
}
@@ -1453,7 +1512,7 @@ public final class CraftServer implements Server {
@Override
public GameMode getDefaultGameMode() {
return GameMode.getByValue(console.getWorldServer(DimensionManager.OVERWORLD).getWorldData().getGameType().getId());
return GameMode.getByValue(console.getWorldServer(net.minecraft.server.World.OVERWORLD).worldDataServer.getGameType().getId());
}
@Override
@@ -1461,7 +1520,7 @@ public final class CraftServer implements Server {
Validate.notNull(mode, "Mode cannot be null");
for (World world : getWorlds()) {
((CraftWorld) world).getHandle().worldData.setGameType(EnumGamemode.getById(mode.getValue()));
((CraftWorld) world).getHandle().worldDataServer.setGameType(EnumGamemode.getById(mode.getValue()));
}
}
@@ -1484,20 +1543,12 @@ public final class CraftServer implements Server {
@Override
public File getWorldContainer() {
if (this.getServer().universe != null) {
return this.getServer().universe;
}
if (container == null) {
container = new File(configuration.getString("settings.world-container", "."));
}
return container;
return this.getServer().convertable.a(net.minecraft.server.World.OVERWORLD).getParentFile();
}
@Override
public OfflinePlayer[] getOfflinePlayers() {
WorldNBTStorage storage = (WorldNBTStorage) console.getWorldServer(DimensionManager.OVERWORLD).getDataManager();
WorldNBTStorage storage = console.worldNBTStorage;
String[] files = storage.getPlayerDir().list(new DatFileFilter());
Set<OfflinePlayer> players = new HashSet<OfflinePlayer>();