Update to Minecraft 1.17

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2021-06-11 15:00:00 +10:00
parent 75faba7fde
commit b3a8254758
619 changed files with 10708 additions and 8451 deletions

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/storage/Convertable.java
+++ b/net/minecraft/world/level/storage/Convertable.java
@@ -47,6 +47,10 @@
@@ -60,6 +60,10 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -10,34 +10,40 @@
+
public class Convertable {
private static final Logger LOGGER = LogManager.getLogger();
@@ -96,21 +100,21 @@
static final Logger LOGGER = LogManager.getLogger();
@@ -105,26 +109,26 @@
Logger logger = Convertable.LOGGER;
Objects.requireNonNull(logger);
- return Pair.of((GeneratorSettings) dataresult.resultOrPartial(SystemUtils.a("WorldGenSettings: ", logger::error)).orElseGet(() -> {
+ return Pair.of(dataresult.resultOrPartial(SystemUtils.a("WorldGenSettings: ", (java.util.function.Consumer<String>) logger::error)).orElseGet(() -> { // CraftBukkit - decompile error
DataResult dataresult1 = RegistryLookupCodec.a(IRegistry.DIMENSION_TYPE_REGISTRY).codec().parse(dynamic2);
Logger logger1 = Convertable.LOGGER;
logger1.getClass();
Objects.requireNonNull(logger1);
- IRegistry<DimensionManager> iregistry = (IRegistry) dataresult1.resultOrPartial(SystemUtils.a("Dimension type registry: ", logger1::error)).orElseThrow(() -> {
+ IRegistry<DimensionManager> iregistry = (IRegistry) ((DataResult<IRegistry<DimensionManager>>) dataresult1).resultOrPartial(SystemUtils.a("Dimension type registry: ", logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
+ IRegistry<DimensionManager> iregistry = (IRegistry) ((DataResult<IRegistry<DimensionManager>>) dataresult1).resultOrPartial(SystemUtils.a("Dimension type registry: ", (java.util.function.Consumer<String>) logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
return new IllegalStateException("Failed to get dimension registry");
});
dataresult1 = RegistryLookupCodec.a(IRegistry.ay).codec().parse(dynamic2);
dataresult1 = RegistryLookupCodec.a(IRegistry.BIOME_REGISTRY).codec().parse(dynamic2);
logger1 = Convertable.LOGGER;
logger1.getClass();
Objects.requireNonNull(logger1);
- IRegistry<BiomeBase> iregistry1 = (IRegistry) dataresult1.resultOrPartial(SystemUtils.a("Biome registry: ", logger1::error)).orElseThrow(() -> {
+ IRegistry<BiomeBase> iregistry1 = (IRegistry) ((DataResult<IRegistry<BiomeBase>>) dataresult1).resultOrPartial(SystemUtils.a("Biome registry: ", logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
+ IRegistry<BiomeBase> iregistry1 = (IRegistry) ((DataResult<IRegistry<BiomeBase>>) dataresult1).resultOrPartial(SystemUtils.a("Biome registry: ", (java.util.function.Consumer<String>) logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
return new IllegalStateException("Failed to get biome registry");
});
dataresult1 = RegistryLookupCodec.a(IRegistry.ar).codec().parse(dynamic2);
dataresult1 = RegistryLookupCodec.a(IRegistry.NOISE_GENERATOR_SETTINGS_REGISTRY).codec().parse(dynamic2);
logger1 = Convertable.LOGGER;
logger1.getClass();
Objects.requireNonNull(logger1);
- IRegistry<GeneratorSettingBase> iregistry2 = (IRegistry) dataresult1.resultOrPartial(SystemUtils.a("Noise settings registry: ", logger1::error)).orElseThrow(() -> {
+ IRegistry<GeneratorSettingBase> iregistry2 = (IRegistry) ((DataResult<IRegistry<GeneratorSettingBase>>) dataresult1).resultOrPartial(SystemUtils.a("Noise settings registry: ", logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
+ IRegistry<GeneratorSettingBase> iregistry2 = (IRegistry) ((DataResult<IRegistry<GeneratorSettingBase>>) dataresult1).resultOrPartial(SystemUtils.a("Noise settings registry: ", (java.util.function.Consumer<String>) logger1::error)).orElseThrow(() -> { // CraftBukkit - decompile error
return new IllegalStateException("Failed to get noise settings registry");
});
@@ -218,9 +222,23 @@
};
@@ -294,9 +298,23 @@
return this.backupDir;
}
- public Convertable.ConversionSession c(String s) throws IOException {
@@ -50,9 +56,9 @@
+ public static File getFolder(File file, ResourceKey<WorldDimension> dimensionType) {
+ if (dimensionType == WorldDimension.OVERWORLD) {
+ return file;
+ } else if (dimensionType == WorldDimension.THE_NETHER) {
+ } else if (dimensionType == WorldDimension.NETHER) {
+ return new File(file, "DIM-1");
+ } else if (dimensionType == WorldDimension.THE_END) {
+ } else if (dimensionType == WorldDimension.END) {
+ return new File(file, "DIM1");
+ } else {
+ return new File(file, "dimensions/" + dimensionType.a().getNamespace() + "/" + dimensionType.a().getKey());
@@ -62,10 +68,10 @@
public class ConversionSession implements AutoCloseable {
@@ -228,8 +246,12 @@
public final Path folder;
private final String levelName;
private final Map<SavedFile, Path> e = Maps.newHashMap();
@@ -304,8 +322,12 @@
public final Path levelPath;
private final String levelId;
private final Map<SavedFile, Path> resources = Maps.newHashMap();
+ // CraftBukkit start
+ private final ResourceKey<WorldDimension> dimensionType;
@@ -73,15 +79,15 @@
+ public ConversionSession(String s, ResourceKey<WorldDimension> dimensionType) throws IOException {
+ this.dimensionType = dimensionType;
+ // CraftBukkit end
this.levelName = s;
this.folder = Convertable.this.universe.resolve(s);
this.lock = SessionLock.a(this.folder);
@@ -246,7 +268,7 @@
this.levelId = s;
this.levelPath = Convertable.this.baseDir.resolve(s);
this.lock = SessionLock.a(this.levelPath);
@@ -322,7 +344,7 @@
}
public File a(ResourceKey<World> resourcekey) {
- return DimensionManager.a(resourcekey, this.folder.toFile());
+ return getFolder(this.folder.toFile(), this.dimensionType); // CraftBukkit
- return DimensionManager.a(resourcekey, this.levelPath.toFile());
+ return getFolder(this.levelPath.toFile(), this.dimensionType); // CraftBukkit
}
private void checkSession() {

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/storage/WorldDataServer.java
+++ b/net/minecraft/world/level/storage/WorldDataServer.java
@@ -38,10 +38,19 @@
@@ -40,6 +40,15 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -16,47 +16,56 @@
public class WorldDataServer implements IWorldDataServer, SaveData {
private static final Logger LOGGER = LogManager.getLogger();
- private WorldSettings b;
+ public WorldSettings b;
private final GeneratorSettings c;
private final Lifecycle d;
private int e;
@@ -75,6 +84,7 @@
private final Set<String> C;
private boolean D;
private final CustomFunctionCallbackTimerQueue<MinecraftServer> E;
@@ -78,6 +87,7 @@
private final Set<String> knownServerBrands;
private boolean wasModded;
private final CustomFunctionCallbackTimerQueue<MinecraftServer> scheduledEvents;
+ public WorldServer world; // CraftBukkit
private WorldDataServer(@Nullable DataFixer datafixer, int i, @Nullable NBTTagCompound nbttagcompound, boolean flag, int j, int k, int l, float f, long i1, long j1, int k1, int l1, int i2, boolean flag1, int j2, boolean flag2, boolean flag3, boolean flag4, WorldBorder.c worldborder_c, int k2, int l2, @Nullable UUID uuid, LinkedHashSet<String> linkedhashset, CustomFunctionCallbackTimerQueue<MinecraftServer> customfunctioncallbacktimerqueue, @Nullable NBTTagCompound nbttagcompound1, NBTTagCompound nbttagcompound2, WorldSettings worldsettings, GeneratorSettings generatorsettings, Lifecycle lifecycle) {
this.k = datafixer;
@@ -118,7 +128,8 @@
private WorldDataServer(@Nullable DataFixer datafixer, int i, @Nullable NBTTagCompound nbttagcompound, boolean flag, int j, int k, int l, float f, long i1, long j1, int k1, int l1, int i2, boolean flag1, int j2, boolean flag2, boolean flag3, boolean flag4, WorldBorder.c worldborder_c, int k2, int l2, @Nullable UUID uuid, Set<String> set, CustomFunctionCallbackTimerQueue<MinecraftServer> customfunctioncallbacktimerqueue, @Nullable NBTTagCompound nbttagcompound1, NBTTagCompound nbttagcompound2, WorldSettings worldsettings, GeneratorSettings generatorsettings, Lifecycle lifecycle) {
this.fixerUpper = datafixer;
@@ -121,7 +131,8 @@
return (NBTBase) dynamic.get("DimensionData").get("1").get("DragonFight").orElseEmptyMap().getValue();
});
- return new WorldDataServer(datafixer, i, nbttagcompound, dynamic.get("WasModded").asBoolean(false), dynamic.get("SpawnX").asInt(0), dynamic.get("SpawnY").asInt(0), dynamic.get("SpawnZ").asInt(0), dynamic.get("SpawnAngle").asFloat(0.0F), j, dynamic.get("DayTime").asLong(j), levelversion.a(), dynamic.get("clearWeatherTime").asInt(0), dynamic.get("rainTime").asInt(0), dynamic.get("raining").asBoolean(false), dynamic.get("thunderTime").asInt(0), dynamic.get("thundering").asBoolean(false), dynamic.get("initialized").asBoolean(true), dynamic.get("DifficultyLocked").asBoolean(false), WorldBorder.c.a(dynamic, WorldBorder.c), dynamic.get("WanderingTraderSpawnDelay").asInt(0), dynamic.get("WanderingTraderSpawnChance").asInt(0), (UUID) dynamic.get("WanderingTraderId").read(MinecraftSerializableUUID.a).result().orElse((Object) null), (LinkedHashSet) dynamic.get("ServerBrands").asStream().flatMap((dynamic1) -> {
- return new WorldDataServer(datafixer, i, nbttagcompound, dynamic.get("WasModded").asBoolean(false), dynamic.get("SpawnX").asInt(0), dynamic.get("SpawnY").asInt(0), dynamic.get("SpawnZ").asInt(0), dynamic.get("SpawnAngle").asFloat(0.0F), j, dynamic.get("DayTime").asLong(j), levelversion.a(), dynamic.get("clearWeatherTime").asInt(0), dynamic.get("rainTime").asInt(0), dynamic.get("raining").asBoolean(false), dynamic.get("thunderTime").asInt(0), dynamic.get("thundering").asBoolean(false), dynamic.get("initialized").asBoolean(true), dynamic.get("DifficultyLocked").asBoolean(false), WorldBorder.c.a(dynamic, WorldBorder.DEFAULT_SETTINGS), dynamic.get("WanderingTraderSpawnDelay").asInt(0), dynamic.get("WanderingTraderSpawnChance").asInt(0), (UUID) dynamic.get("WanderingTraderId").read(MinecraftSerializableUUID.CODEC).result().orElse((Object) null), (Set) dynamic.get("ServerBrands").asStream().flatMap((dynamic1) -> {
+ // CraftBukkit - decompile error
+ return new WorldDataServer(datafixer, i, nbttagcompound, dynamic.get("WasModded").asBoolean(false), dynamic.get("SpawnX").asInt(0), dynamic.get("SpawnY").asInt(0), dynamic.get("SpawnZ").asInt(0), dynamic.get("SpawnAngle").asFloat(0.0F), j, dynamic.get("DayTime").asLong(j), levelversion.a(), dynamic.get("clearWeatherTime").asInt(0), dynamic.get("rainTime").asInt(0), dynamic.get("raining").asBoolean(false), dynamic.get("thunderTime").asInt(0), dynamic.get("thundering").asBoolean(false), dynamic.get("initialized").asBoolean(true), dynamic.get("DifficultyLocked").asBoolean(false), WorldBorder.c.a(dynamic, WorldBorder.c), dynamic.get("WanderingTraderSpawnDelay").asInt(0), dynamic.get("WanderingTraderSpawnChance").asInt(0), (UUID) dynamic.get("WanderingTraderId").read(MinecraftSerializableUUID.a).result().orElse(null), (LinkedHashSet) dynamic.get("ServerBrands").asStream().flatMap((dynamic1) -> {
+ return new WorldDataServer(datafixer, i, nbttagcompound, dynamic.get("WasModded").asBoolean(false), dynamic.get("SpawnX").asInt(0), dynamic.get("SpawnY").asInt(0), dynamic.get("SpawnZ").asInt(0), dynamic.get("SpawnAngle").asFloat(0.0F), j, dynamic.get("DayTime").asLong(j), levelversion.a(), dynamic.get("clearWeatherTime").asInt(0), dynamic.get("rainTime").asInt(0), dynamic.get("raining").asBoolean(false), dynamic.get("thunderTime").asInt(0), dynamic.get("thundering").asBoolean(false), dynamic.get("initialized").asBoolean(true), dynamic.get("DifficultyLocked").asBoolean(false), WorldBorder.c.a(dynamic, WorldBorder.DEFAULT_SETTINGS), dynamic.get("WanderingTraderSpawnDelay").asInt(0), dynamic.get("WanderingTraderSpawnChance").asInt(0), (UUID) dynamic.get("WanderingTraderId").read(MinecraftSerializableUUID.CODEC).result().orElse(null), (Set) dynamic.get("ServerBrands").asStream().flatMap((dynamic1) -> {
return SystemUtils.a(dynamic1.asString().result());
}).collect(Collectors.toCollection(Sets::newLinkedHashSet)), new CustomFunctionCallbackTimerQueue<>(CustomFunctionCallbackTimers.a, dynamic.get("ScheduledEvents").asStream()), (NBTTagCompound) dynamic.get("CustomBossEvents").orElseEmptyMap().getValue(), nbttagcompound1, worldsettings, generatorsettings, lifecycle);
}).collect(Collectors.toCollection(Sets::newLinkedHashSet)), new CustomFunctionCallbackTimerQueue<>(CustomFunctionCallbackTimers.SERVER_CALLBACKS, dynamic.get("ScheduledEvents").asStream()), (NBTTagCompound) dynamic.get("CustomBossEvents").orElseEmptyMap().getValue(), nbttagcompound1, worldsettings, generatorsettings, lifecycle);
}
@@ -150,7 +161,7 @@
@@ -141,7 +152,7 @@
private void a(IRegistryCustom iregistrycustom, NBTTagCompound nbttagcompound, @Nullable NBTTagCompound nbttagcompound1) {
NBTTagList nbttaglist = new NBTTagList();
- Stream stream = this.knownServerBrands.stream().map(NBTTagString::a);
+ Stream<NBTTagString> stream = this.knownServerBrands.stream().map(NBTTagString::a); // CraftBukkit - decompile error
Objects.requireNonNull(nbttaglist);
stream.forEach(nbttaglist::add);
@@ -155,11 +166,11 @@
nbttagcompound.set("Version", nbttagcompound2);
nbttagcompound.setInt("DataVersion", SharedConstants.getGameVersion().getWorldVersion());
RegistryWriteOps<NBTBase> registrywriteops = RegistryWriteOps.a(DynamicOpsNBT.a, iregistrycustom);
- DataResult dataresult = GeneratorSettings.a.encodeStart(registrywriteops, this.c);
+ DataResult<NBTBase> dataresult = GeneratorSettings.a.encodeStart(registrywriteops, this.c); // CraftBukkit - decompile error
RegistryWriteOps<NBTBase> registrywriteops = RegistryWriteOps.a(DynamicOpsNBT.INSTANCE, iregistrycustom);
- DataResult dataresult = GeneratorSettings.CODEC.encodeStart(registrywriteops, this.worldGenSettings);
+ DataResult<NBTBase> dataresult = GeneratorSettings.CODEC.encodeStart(registrywriteops, this.worldGenSettings); // CraftBukkit - decompile error
Logger logger = WorldDataServer.LOGGER;
logger.getClass();
@@ -198,6 +209,7 @@
nbttagcompound.a("WanderingTraderId", this.B);
Objects.requireNonNull(logger);
- dataresult.resultOrPartial(SystemUtils.a("WorldGenSettings: ", logger::error)).ifPresent((nbtbase) -> {
+ dataresult.resultOrPartial(SystemUtils.a("WorldGenSettings: ", (java.util.function.Consumer<String>) logger::error)).ifPresent((nbtbase) -> { // CraftBukkit - decompile error
nbttagcompound.set("WorldGenSettings", nbtbase);
});
nbttagcompound.setInt("GameType", this.settings.getGameType().getId());
@@ -203,6 +214,7 @@
nbttagcompound.a("WanderingTraderId", this.wanderingTraderId);
}
+ nbttagcompound.setString("Bukkit.Version", Bukkit.getName() + "/" + Bukkit.getVersion() + "/" + Bukkit.getBukkitVersion()); // CraftBukkit
}
@Override
@@ -315,6 +327,20 @@
@@ -320,6 +332,20 @@
@Override
public void setThundering(boolean flag) {
@@ -77,7 +86,7 @@
this.thundering = flag;
}
@@ -335,6 +361,20 @@
@@ -340,6 +366,20 @@
@Override
public void setStorm(boolean flag) {
@@ -98,28 +107,28 @@
this.raining = flag;
}
@@ -401,6 +441,12 @@
@@ -406,6 +446,12 @@
@Override
public void setDifficulty(EnumDifficulty enumdifficulty) {
this.b = this.b.a(enumdifficulty);
this.settings = this.settings.a(enumdifficulty);
+ // CraftBukkit start
+ PacketPlayOutServerDifficulty packet = new PacketPlayOutServerDifficulty(this.getDifficulty(), this.isDifficultyLocked());
+ for (EntityPlayer player : (java.util.List<EntityPlayer>) (java.util.List) world.getPlayers()) {
+ player.playerConnection.sendPacket(packet);
+ player.connection.sendPacket(packet);
+ }
+ // CraftBukkit end
}
@Override
@@ -505,4 +551,12 @@
public IWorldDataServer H() {
return this;
@@ -526,4 +572,12 @@
public WorldSettings I() {
return this.settings.h();
}
+
+ // CraftBukkit start - Check if the name stored in NBT is the correct one
+ public void checkName(String name) {
+ if (!this.b.levelName.equals(name)) {
+ this.b.levelName = name;
+ if (!this.settings.levelName.equals(name)) {
+ this.settings.levelName = name;
+ }
+ }
+ // CraftBukkit end

View File

@@ -30,7 +30,7 @@
+ // CraftBukkit end
int i = nbttagcompound.hasKeyOfType("DataVersion", 3) ? nbttagcompound.getInt("DataVersion") : -1;
entityhuman.load(GameProfileSerializer.a(this.a, DataFixTypes.PLAYER, nbttagcompound, i));
entityhuman.load(GameProfileSerializer.a(this.fixerUpper, DataFixTypes.PLAYER, nbttagcompound, i));
@@ -63,6 +80,22 @@
return nbttagcompound;
}

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/storage/loot/LootTable.java
+++ b/net/minecraft/world/level/storage/loot/LootTable.java
@@ -29,6 +29,13 @@
@@ -30,6 +30,13 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -13,8 +13,8 @@
+
public class LootTable {
private static final Logger LOGGER = LogManager.getLogger();
@@ -113,8 +120,21 @@
static final Logger LOGGER = LogManager.getLogger();
@@ -115,8 +122,21 @@
}
public void fillInventory(IInventory iinventory, LootTableInfo loottableinfo) {

View File

@@ -1,29 +1,29 @@
--- a/net/minecraft/world/level/storage/loot/LootTableRegistry.java
+++ b/net/minecraft/world/level/storage/loot/LootTableRegistry.java
@@ -21,6 +21,7 @@
@@ -22,6 +22,7 @@
private static final Logger LOGGER = LogManager.getLogger();
private static final Gson b = LootSerialization.c().create();
private Map<MinecraftKey, LootTable> keyToLootTable = ImmutableMap.of();
private static final Gson GSON = LootSerialization.c().create();
private Map<MinecraftKey, LootTable> tables = ImmutableMap.of();
+ public Map<LootTable, MinecraftKey> lootTableToKey = ImmutableMap.of(); // CraftBukkit
private final LootPredicateManager d;
private final LootPredicateManager predicateManager;
public LootTableRegistry(LootPredicateManager lootpredicatemanager) {
@@ -56,7 +57,7 @@
LootPredicateManager lootpredicatemanager = this.d;
@@ -57,7 +58,7 @@
LootPredicateManager lootpredicatemanager = this.predicateManager;
this.d.getClass();
Objects.requireNonNull(this.predicateManager);
- Function function = lootpredicatemanager::a;
+ Function<MinecraftKey, net.minecraft.world.level.storage.loot.predicates.LootItemCondition> function = lootpredicatemanager::a; // CraftBukkit - decompile error
immutablemap.getClass();
Objects.requireNonNull(immutablemap);
LootCollector lootcollector = new LootCollector(lootcontextparameterset, function, immutablemap::get);
@@ -68,6 +69,11 @@
LootTableRegistry.LOGGER.warn("Found validation problem in " + s + ": " + s1);
@@ -69,6 +70,11 @@
LootTableRegistry.LOGGER.warn("Found validation problem in {}: {}", s, s1);
});
this.keyToLootTable = immutablemap;
this.tables = immutablemap;
+ // CraftBukkit start - build a reversed registry map
+ ImmutableMap.Builder<LootTable, MinecraftKey> lootTableToKeyBuilder = ImmutableMap.builder();
+ this.keyToLootTable.forEach((lootTable, key) -> lootTableToKeyBuilder.put(key, lootTable));
+ this.tables.forEach((lootTable, key) -> lootTableToKeyBuilder.put(key, lootTable));
+ this.lootTableToKey = lootTableToKeyBuilder.build();
+ // CraftBukkit end
}

View File

@@ -1,20 +0,0 @@
--- a/net/minecraft/world/level/storage/loot/entries/LootEntryAbstract.java
+++ b/net/minecraft/world/level/storage/loot/entries/LootEntryAbstract.java
@@ -41,7 +41,16 @@
public Serializer() {}
- public final void serializeType(JsonObject jsonobject, T t0, JsonSerializationContext jsonserializationcontext) {}
+ // CraftBukkit start
+ @Override
+ public final void a(JsonObject jsonobject, T t0, JsonSerializationContext jsonserializationcontext) {
+ if (!org.apache.commons.lang3.ArrayUtils.isEmpty(t0.d)) {
+ jsonobject.add("conditions", jsonserializationcontext.serialize(t0.d));
+ }
+
+ this.serializeType(jsonobject, t0, jsonserializationcontext);
+ }
+ // CraftBukkit end
@Override
public final T a(JsonObject jsonobject, JsonDeserializationContext jsondeserializationcontext) {

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/storage/loot/functions/LootEnchantFunction.java
+++ b/net/minecraft/world/level/storage/loot/functions/LootEnchantFunction.java
@@ -47,8 +47,13 @@
@@ -49,8 +49,13 @@
if (entity instanceof EntityLiving) {
int i = EnchantmentManager.g((EntityLiving) entity);
@@ -15,12 +15,12 @@
return itemstack;
}
@@ -72,7 +77,7 @@
@@ -99,7 +104,7 @@
public b() {}
public void a(JsonObject jsonobject, LootEnchantFunction lootenchantfunction, JsonSerializationContext jsonserializationcontext) {
- super.a(jsonobject, (LootItemFunctionConditional) lootenchantfunction, jsonserializationcontext);
+ super.a(jsonobject, lootenchantfunction, jsonserializationcontext); // CraftBukkit - decompile error
jsonobject.add("count", jsonserializationcontext.serialize(lootenchantfunction.a));
jsonobject.add("count", jsonserializationcontext.serialize(lootenchantfunction.value));
if (lootenchantfunction.c()) {
jsonobject.add("limit", jsonserializationcontext.serialize(lootenchantfunction.b));
jsonobject.add("limit", jsonserializationcontext.serialize(lootenchantfunction.limit));

View File

@@ -6,5 +6,5 @@
public static final LootContextParameter<Float> EXPLOSION_RADIUS = a("explosion_radius");
+ public static final LootContextParameter<Integer> LOOTING_MOD = new LootContextParameter<>(new MinecraftKey("bukkit:looting_mod")); // CraftBukkit
private static <T> LootContextParameter<T> a(String s) {
return new LootContextParameter<>(new MinecraftKey(s));
public LootContextParameters() {}

View File

@@ -10,5 +10,5 @@
+ }
+ // CraftBukkit end
return loottableinfo.a().nextFloat() < this.a + (float) i * this.b;
return loottableinfo.a().nextFloat() < this.percent + (float) i * this.lootingMultiplier;
}