diff --git a/nms-patches/AdvancementDataPlayer.patch b/nms-patches/AdvancementDataPlayer.patch index 63e65e4e7d..30065645ee 100644 --- a/nms-patches/AdvancementDataPlayer.patch +++ b/nms-patches/AdvancementDataPlayer.patch @@ -19,5 +19,5 @@ if (!flag1 && advancementprogress.isDone()) { + this.player.world.getServer().getPluginManager().callEvent(new org.bukkit.event.player.PlayerAdvancementDoneEvent(this.player.getBukkitEntity(), advancement.bukkit)); // CraftBukkit advancement.d().a(this.player); - if (advancement.c() != null && advancement.c().i() && this.player.world.getGameRules().getBoolean("announceAdvancements")) { + if (advancement.c() != null && advancement.c().i() && this.player.world.getGameRules().getBoolean(GameRules.ANNOUNCE_ADVANCEMENTS)) { this.d.getPlayerList().sendMessage(new ChatMessage("chat.type.advancement." + advancement.c().e().a(), new Object[]{this.player.getScoreboardDisplayName(), advancement.j()})); diff --git a/nms-patches/Advancements.patch b/nms-patches/Advancements.patch index ceb3497c6b..53620f873a 100644 --- a/nms-patches/Advancements.patch +++ b/nms-patches/Advancements.patch @@ -8,4 +8,4 @@ + // Advancements.LOGGER.info("Loaded {} advancements", this.advancements.size()); // CraftBukkit - moved to AdvancementDataWorld#reload } - public void a() { + public Iterable b() { diff --git a/nms-patches/BehaviorFarm.patch b/nms-patches/BehaviorFarm.patch index 1956df7a25..1993a5a349 100644 --- a/nms-patches/BehaviorFarm.patch +++ b/nms-patches/BehaviorFarm.patch @@ -1,15 +1,6 @@ --- a/net/minecraft/server/BehaviorFarm.java +++ b/net/minecraft/server/BehaviorFarm.java -@@ -27,7 +27,7 @@ - } else if (entityvillager.getVillagerData().getProfession() != VillagerProfession.FARMER) { - return false; - } else { -- Set set = (Set) ((List) entityvillager.getBehaviorController().getMemory(MemoryModuleType.SECONDARY_JOB_SITE).get()).stream().map(GlobalPos::getBlockPosition).collect(Collectors.toSet()); -+ Set set = (Set) (entityvillager.getBehaviorController().getMemory(MemoryModuleType.SECONDARY_JOB_SITE).get()).stream().map(GlobalPos::getBlockPosition).collect(Collectors.toSet()); // CraftBukkit - decompile error - BlockPosition blockposition = new BlockPosition(entityvillager); - Stream stream = ImmutableList.of(blockposition.down(), blockposition.south(), blockposition.north(), blockposition.east(), blockposition.west()).stream(); - -@@ -57,8 +57,8 @@ +@@ -72,8 +72,8 @@ protected void a(WorldServer worldserver, EntityVillager entityvillager, long i) { if (i > this.d && this.a != null) { @@ -20,8 +11,8 @@ } } -@@ -76,7 +76,11 @@ - Block block = iblockdata.getBlock(); +@@ -92,7 +92,11 @@ + Block block1 = worldserver.getType(this.a.down()).getBlock(); if (block instanceof BlockCrops && ((BlockCrops) block).isRipe(iblockdata) && this.c) { - worldserver.b(this.a, true); @@ -30,10 +21,10 @@ + worldserver.b(this.a, true); + } + // CraftBukkit end - } else if (iblockdata.isAir() && this.b) { - InventorySubcontainer inventorysubcontainer = entityvillager.getInventory(); + } -@@ -85,19 +89,28 @@ + if (iblockdata.isAir() && block1 instanceof BlockSoil && this.b) { +@@ -103,19 +107,28 @@ boolean flag = false; if (!itemstack.isEmpty()) { @@ -66,3 +57,14 @@ } if (flag) { +@@ -134,8 +147,8 @@ + this.a = this.a(worldserver); + if (this.a != null) { + this.d = i + 20L; +- entityvillager.getBehaviorController().setMemory(MemoryModuleType.WALK_TARGET, (Object) (new MemoryTarget(new BehaviorTarget(this.a), 0.5F, 1))); +- entityvillager.getBehaviorController().setMemory(MemoryModuleType.LOOK_TARGET, (Object) (new BehaviorTarget(this.a))); ++ entityvillager.getBehaviorController().setMemory(MemoryModuleType.WALK_TARGET, (new MemoryTarget(new BehaviorTarget(this.a), 0.5F, 1))); // CraftBukkit - decompile error ++ entityvillager.getBehaviorController().setMemory(MemoryModuleType.LOOK_TARGET, (new BehaviorTarget(this.a))); // CraftBukkit - decompile error + } + } + } diff --git a/nms-patches/BehaviorMakeLove.patch b/nms-patches/BehaviorMakeLove.patch index 5bf8901151..e74e3b6791 100644 --- a/nms-patches/BehaviorMakeLove.patch +++ b/nms-patches/BehaviorMakeLove.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/BehaviorMakeLove.java +++ b/net/minecraft/server/BehaviorMakeLove.java -@@ -93,6 +93,11 @@ +@@ -99,6 +99,11 @@ private Optional a(EntityVillager entityvillager, EntityVillager entityvillager1) { EntityVillager entityvillager2 = entityvillager.createChild(entityvillager1); @@ -12,7 +12,7 @@ if (entityvillager2 == null) { return Optional.empty(); -@@ -101,7 +106,7 @@ +@@ -107,7 +112,7 @@ entityvillager1.setAgeRaw(6000); entityvillager2.setAgeRaw(-24000); entityvillager2.setPositionRotation(entityvillager.locX, entityvillager.locY, entityvillager.locZ, 0.0F, 0.0F); @@ -21,7 +21,7 @@ entityvillager.world.broadcastEntityEffect(entityvillager2, (byte) 12); return Optional.of(entityvillager2); } -@@ -110,6 +115,6 @@ +@@ -116,6 +121,6 @@ private void a(WorldServer worldserver, EntityVillager entityvillager, BlockPosition blockposition) { GlobalPos globalpos = GlobalPos.create(worldserver.getWorldProvider().getDimensionManager(), blockposition); diff --git a/nms-patches/BlockChest.patch b/nms-patches/BlockChest.patch index 468567f4d9..08698b9483 100644 --- a/nms-patches/BlockChest.patch +++ b/nms-patches/BlockChest.patch @@ -19,7 +19,7 @@ - - @Override - public IChatBaseComponent getScoreboardDisplayName() { -- return new ChatMessage("container.chestDouble", new Object[0]); +- return (IChatBaseComponent) (tileentitychest.hasCustomName() ? tileentitychest.getScoreboardDisplayName() : (tileentitychest1.hasCustomName() ? tileentitychest1.getScoreboardDisplayName() : new ChatMessage("container.chestDouble", new Object[0]))); - } - }; + return new DoubleInventory(tileentitychest, tileentitychest1, inventorylargechest); // CraftBukkit @@ -57,7 +57,7 @@ + + @Override + public IChatBaseComponent getScoreboardDisplayName() { -+ return new ChatMessage("container.chestDouble", new Object[0]); ++ return (IChatBaseComponent) (tileentitychest.hasCustomName() ? tileentitychest.getScoreboardDisplayName() : (tileentitychest1.hasCustomName() ? tileentitychest1.getScoreboardDisplayName() : new ChatMessage("container.chestDouble", new Object[0]))); + } + }; + // CraftBukkit end diff --git a/nms-patches/BlockFire.patch b/nms-patches/BlockFire.patch index 2bf679074b..422c6faa9d 100644 --- a/nms-patches/BlockFire.patch +++ b/nms-patches/BlockFire.patch @@ -40,7 +40,7 @@ @Nullable @@ -82,7 +104,7 @@ public void tick(IBlockData iblockdata, World world, BlockPosition blockposition, Random random) { - if (world.getGameRules().getBoolean("doFireTick")) { + if (world.getGameRules().getBoolean(GameRules.DO_FIRE_TICK)) { if (!iblockdata.canPlace(world, blockposition)) { - world.a(blockposition, false); + fireExtinguished(world, blockposition); // CraftBukkit - invalid place location diff --git a/nms-patches/BlockPortal.patch b/nms-patches/BlockPortal.patch index 60118245c6..c713adb2cb 100644 --- a/nms-patches/BlockPortal.patch +++ b/nms-patches/BlockPortal.patch @@ -23,7 +23,7 @@ + Entity entity = EntityTypes.ZOMBIE_PIGMAN.spawnCreature(world, (NBTTagCompound) null, (IChatBaseComponent) null, (EntityHuman) null, blockposition.up(), EnumMobSpawn.STRUCTURE, false, false, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NETHER_PORTAL); if (entity != null) { - entity.portalCooldown = entity.aW(); + entity.portalCooldown = entity.aX(); @@ -48,8 +56,10 @@ BlockPortal.Shape blockportal_shape = this.b(generatoraccess, blockposition); diff --git a/nms-patches/BlockSoil.patch b/nms-patches/BlockSoil.patch index 7af361a848..7c63e84a2a 100644 --- a/nms-patches/BlockSoil.patch +++ b/nms-patches/BlockSoil.patch @@ -32,7 +32,7 @@ @Override public void fallOn(World world, BlockPosition blockposition, Entity entity, float f) { + super.fallOn(world, blockposition, entity, f); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage. - if (!world.isClientSide && world.random.nextFloat() < f - 0.5F && entity instanceof EntityLiving && (entity instanceof EntityHuman || world.getGameRules().getBoolean("mobGriefing")) && entity.getWidth() * entity.getWidth() * entity.getHeight() > 0.512F) { + if (!world.isClientSide && world.random.nextFloat() < f - 0.5F && entity instanceof EntityLiving && (entity instanceof EntityHuman || world.getGameRules().getBoolean(GameRules.MOB_GRIEFING)) && entity.getWidth() * entity.getWidth() * entity.getHeight() > 0.512F) { + // CraftBukkit start - Interact soil + org.bukkit.event.Cancellable cancellable; + if (entity instanceof EntityHuman) { diff --git a/nms-patches/Chunk.patch b/nms-patches/Chunk.patch index 0830483ba5..0658ec8a6f 100644 --- a/nms-patches/Chunk.patch +++ b/nms-patches/Chunk.patch @@ -70,7 +70,7 @@ if (tileentity == null) { NBTTagCompound nbttagcompound = (NBTTagCompound) this.e.remove(blockposition); @@ -429,6 +454,13 @@ - tileentity1.W_(); + tileentity1.V_(); } + // CraftBukkit start diff --git a/nms-patches/ChunkProviderServer.patch b/nms-patches/ChunkProviderServer.patch index 8aa8f802df..58c1945976 100644 --- a/nms-patches/ChunkProviderServer.patch +++ b/nms-patches/ChunkProviderServer.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/ChunkProviderServer.java +++ b/net/minecraft/server/ChunkProviderServer.java -@@ -81,7 +81,7 @@ +@@ -79,7 +79,7 @@ for (int l = 0; l < 4; ++l) { if (k == this.cachePos[l] && chunkstatus == this.cacheStatus[l]) { ichunkaccess = this.cacheChunk[l]; @@ -9,7 +9,7 @@ return ichunkaccess; } } -@@ -125,7 +125,15 @@ +@@ -123,7 +123,15 @@ int l = 33 + ChunkStatus.a(chunkstatus); PlayerChunk playerchunk = this.getChunk(k); @@ -26,7 +26,7 @@ this.chunkMapDistance.a(TicketType.UNKNOWN, chunkcoordintpair, l, chunkcoordintpair); if (this.a(playerchunk, l)) { GameProfilerFiller gameprofilerfiller = this.world.getMethodProfiler(); -@@ -144,7 +152,7 @@ +@@ -142,7 +150,7 @@ } private boolean a(@Nullable PlayerChunk playerchunk, int i) { @@ -35,7 +35,7 @@ } public boolean isLoaded(int i, int j) { -@@ -245,6 +253,18 @@ +@@ -249,6 +257,18 @@ this.playerChunkMap.close(); } @@ -54,16 +54,16 @@ public void tick(BooleanSupplier booleansupplier) { this.world.getMethodProfiler().enter("purge"); this.chunkMapDistance.purgeTickets(); -@@ -264,13 +284,13 @@ +@@ -268,13 +288,13 @@ this.lastTickTime = i; WorldData worlddata = this.world.getWorldData(); boolean flag = worlddata.getType() == WorldType.DEBUG_ALL_BLOCK_STATES; -- boolean flag1 = this.world.getGameRules().getBoolean("doMobSpawning"); -+ boolean flag1 = this.world.getGameRules().getBoolean("doMobSpawning") && !world.getPlayers().isEmpty(); // CraftBukkit +- boolean flag1 = this.world.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING); ++ boolean flag1 = this.world.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING) && !world.getPlayers().isEmpty(); // CraftBukkit if (!flag) { this.world.getMethodProfiler().enter("pollingChunks"); - int k = this.world.getGameRules().c("randomTickSpeed"); + int k = this.world.getGameRules().getInt(GameRules.RANDOM_TICK_SPEED); BlockPosition blockposition = this.world.getSpawn(); - boolean flag2 = worlddata.getTime() % 400L == 0L; + boolean flag2 = world.ticksPerAnimalSpawns != 0L && worlddata.getTime() % world.ticksPerAnimalSpawns == 0L; // CraftBukkit // PAIL: TODO monster ticks diff --git a/nms-patches/CommandGamerule.patch b/nms-patches/CommandGamerule.patch index aa36467973..ee5121affe 100644 --- a/nms-patches/CommandGamerule.patch +++ b/nms-patches/CommandGamerule.patch @@ -1,20 +1,20 @@ --- a/net/minecraft/server/CommandGamerule.java +++ b/net/minecraft/server/CommandGamerule.java -@@ -27,7 +27,7 @@ +@@ -25,7 +25,7 @@ + + private static > int b(CommandContext commandcontext, GameRules.GameRuleKey gamerules_gamerulekey) { + CommandListenerWrapper commandlistenerwrapper = (CommandListenerWrapper) commandcontext.getSource(); +- T t0 = commandlistenerwrapper.getServer().getGameRules().get(gamerules_gamerulekey); ++ T t0 = commandlistenerwrapper.getWorld().getGameRules().get(gamerules_gamerulekey); // CraftBukkit + + t0.b(commandcontext, "value"); + commandlistenerwrapper.sendMessage(new ChatMessage("commands.gamerule.set", new Object[]{gamerules_gamerulekey.a(), t0.toString()}), true); +@@ -33,7 +33,7 @@ } - private static int a(CommandListenerWrapper commandlistenerwrapper, String s, CommandContext commandcontext) { -- GameRules.GameRuleValue gamerules_gamerulevalue = commandlistenerwrapper.getServer().getGameRules().get(s); -+ GameRules.GameRuleValue gamerules_gamerulevalue = commandlistenerwrapper.getWorld().getGameRules().get(s); // CraftBukkit + private static > int b(CommandListenerWrapper commandlistenerwrapper, GameRules.GameRuleKey gamerules_gamerulekey) { +- T t0 = commandlistenerwrapper.getServer().getGameRules().get(gamerules_gamerulekey); ++ T t0 = commandlistenerwrapper.getWorld().getGameRules().get(gamerules_gamerulekey); // CraftBukkit - gamerules_gamerulevalue.getType().a(commandcontext, "value", gamerules_gamerulevalue); - commandlistenerwrapper.sendMessage(new ChatMessage("commands.gamerule.set", new Object[]{s, gamerules_gamerulevalue.getValue()}), true); -@@ -35,7 +35,7 @@ - } - - private static int a(CommandListenerWrapper commandlistenerwrapper, String s) { -- GameRules.GameRuleValue gamerules_gamerulevalue = commandlistenerwrapper.getServer().getGameRules().get(s); -+ GameRules.GameRuleValue gamerules_gamerulevalue = commandlistenerwrapper.getWorld().getGameRules().get(s); // CraftBukkit - - commandlistenerwrapper.sendMessage(new ChatMessage("commands.gamerule.query", new Object[]{s, gamerules_gamerulevalue.getValue()}), false); - return gamerules_gamerulevalue.getIntValue(); + commandlistenerwrapper.sendMessage(new ChatMessage("commands.gamerule.query", new Object[]{gamerules_gamerulekey.a(), t0.toString()}), false); + return t0.getIntValue(); diff --git a/nms-patches/ContainerMerchant.patch b/nms-patches/ContainerMerchant.patch index cf1cfb005e..b0c96b1580 100644 --- a/nms-patches/ContainerMerchant.patch +++ b/nms-patches/ContainerMerchant.patch @@ -37,9 +37,9 @@ @@ -96,7 +112,7 @@ } - private void j() { + private void k() { - if (!this.merchant.getWorld().isClientSide) { + if (!this.merchant.getWorld().isClientSide && this.merchant instanceof Entity) { // CraftBukkit - SPIGOT-5035 Entity entity = (Entity) this.merchant; - this.merchant.getWorld().a(entity.locX, entity.locY, entity.locZ, this.merchant.eb(), SoundCategory.NEUTRAL, 1.0F, 1.0F, false); + this.merchant.getWorld().a(entity.locX, entity.locY, entity.locZ, this.merchant.ec(), SoundCategory.NEUTRAL, 1.0F, 1.0F, false); diff --git a/nms-patches/ContainerStonecutter.patch b/nms-patches/ContainerStonecutter.patch index 87f6d69924..13ec80d5cf 100644 --- a/nms-patches/ContainerStonecutter.patch +++ b/nms-patches/ContainerStonecutter.patch @@ -15,7 +15,7 @@ @@ -18,6 +23,21 @@ private Runnable m; public final IInventory inventory; - private final InventoryCraftResult n; + private final InventoryCraftResult resultInventory; + // CraftBukkit start + private CraftInventoryView bukkitEntity = null; + private Player player; @@ -26,7 +26,7 @@ + return bukkitEntity; + } + -+ CraftInventoryStonecutter inventory = new CraftInventoryStonecutter(this.inventory, this.n); ++ CraftInventoryStonecutter inventory = new CraftInventoryStonecutter(this.inventory, this.resultInventory); + bukkitEntity = new CraftInventoryView(this.player, inventory, this); + return bukkitEntity; + } diff --git a/nms-patches/CraftingManager.patch b/nms-patches/CraftingManager.patch index 31c83fdfe6..6e8e379e98 100644 --- a/nms-patches/CraftingManager.patch +++ b/nms-patches/CraftingManager.patch @@ -1,29 +1,65 @@ --- a/net/minecraft/server/CraftingManager.java +++ b/net/minecraft/server/CraftingManager.java -@@ -26,7 +26,7 @@ +@@ -22,11 +22,13 @@ + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + ++import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; // CraftBukkit ++ + public class CraftingManager extends ResourceDataJson { + + private static final Gson a = (new GsonBuilder()).setPrettyPrinting().disableHtmlEscaping().create(); private static final Logger LOGGER = LogManager.getLogger(); - public static final int a = "recipes/".length(); - public static final int b = ".json".length(); -- public Map, Map>> recipes = (Map) SystemUtils.a((Object) Maps.newHashMap(), CraftingManager::initializeRecipeMap); -+ public Map, it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap>> recipes = SystemUtils.a(Maps.newHashMap(), CraftingManager::initializeRecipeMap); // CraftBukkit - private boolean e; +- public Map, Map>> recipes = ImmutableMap.of(); ++ public Map, Object2ObjectLinkedOpenHashMap>> recipes = ImmutableMap.of(); // CraftBukkit + private boolean d; - public CraftingManager() {} -@@ -88,19 +88,23 @@ - } + public CraftingManager() { +@@ -35,7 +37,7 @@ - public void addRecipe(IRecipe irecipe) { -- Map> map = (Map) this.recipes.get(irecipe.g()); -+ it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap> map = this.recipes.get(irecipe.g()); // CraftBukkit + protected void a(Map map, IResourceManager iresourcemanager, GameProfilerFiller gameprofilerfiller) { + this.d = false; +- Map, Builder>> map1 = Maps.newHashMap(); ++ Map, Object2ObjectLinkedOpenHashMap>> map1 = Maps.newHashMap(); // CraftBukkit + Iterator iterator = map.entrySet().iterator(); - if (map.containsKey(irecipe.getKey())) { - throw new IllegalStateException("Duplicate recipe ignored with ID " + irecipe.getKey()); - } else { -- map.put(irecipe.getKey(), irecipe); -+ map.putAndMoveToFirst(irecipe.getKey(), irecipe); // CraftBukkit - SPIGOT-4638: last recipe gets priority + while (iterator.hasNext()) { +@@ -45,24 +47,42 @@ + try { + IRecipe irecipe = a(minecraftkey, (JsonObject) entry.getValue()); + +- ((Builder) map1.computeIfAbsent(irecipe.g(), (recipes) -> { +- return ImmutableMap.builder(); +- })).put(minecraftkey, irecipe); ++ // CraftBukkit start - SPIGOT-4638: last recipe gets priority ++ (map1.computeIfAbsent(irecipe.g(), (recipes) -> { ++ return new Object2ObjectLinkedOpenHashMap<>(); ++ })).putAndMoveToFirst(minecraftkey, irecipe); ++ // CraftBukkit end + } catch (IllegalArgumentException | JsonParseException jsonparseexception) { + CraftingManager.LOGGER.error("Parsing error loading recipe {}", minecraftkey, jsonparseexception); + } } + + this.recipes = (Map) map1.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry1) -> { +- return ((Builder) entry1.getValue()).build(); ++ return (entry1.getValue()); // CraftBukkit + })); + CraftingManager.LOGGER.info("Loaded {} recipes", map1.size()); } ++ // CraftBukkit start ++ public void addRecipe(IRecipe irecipe) { ++ Object2ObjectLinkedOpenHashMap> map = this.recipes.get(irecipe.g()); // CraftBukkit ++ ++ if (map.containsKey(irecipe.getKey())) { ++ throw new IllegalStateException("Duplicate recipe ignored with ID " + irecipe.getKey()); ++ } else { ++ map.putAndMoveToFirst(irecipe.getKey(), irecipe); // CraftBukkit - SPIGOT-4638: last recipe gets priority ++ } ++ } ++ // CraftBukkit end ++ public > Optional craft(Recipes recipes, C c0, World world) { - return this.a(recipes).values().stream().flatMap((irecipe) -> { + // CraftBukkit start @@ -36,16 +72,16 @@ } public > List b(Recipes recipes, C c0, World world) { -@@ -112,7 +116,7 @@ +@@ -74,7 +94,7 @@ } private > Map> a(Recipes recipes) { -- return (Map) this.recipes.getOrDefault(recipes, Maps.newHashMap()); -+ return (Map) this.recipes.getOrDefault(recipes, new it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap<>()); // CraftBukkit +- return (Map) this.recipes.getOrDefault(recipes, Collections.emptyMap()); ++ return (Map) this.recipes.getOrDefault(recipes, new Object2ObjectLinkedOpenHashMap<>()); // CraftBukkit } public > NonNullList c(Recipes recipes, C c0, World world) { -@@ -133,7 +137,7 @@ +@@ -95,7 +115,7 @@ public Optional> a(MinecraftKey minecraftkey) { return this.recipes.values().stream().map((map) -> { @@ -54,20 +90,22 @@ }).filter(Objects::nonNull).findFirst(); } -@@ -157,14 +161,14 @@ +@@ -118,4 +138,18 @@ + return new JsonSyntaxException("Invalid or unsupported recipe type '" + s + "'"); })).a(minecraftkey, jsonobject); } - -- public static void initializeRecipeMap(Map, Map>> map) { -+ public static void initializeRecipeMap(Map, it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap>> map) { // CraftBukkit - map.clear(); - Iterator iterator = IRegistry.RECIPE_TYPE.iterator(); - - while (iterator.hasNext()) { - Recipes recipes = (Recipes) iterator.next(); - -- map.put(recipes, Maps.newHashMap()); -+ map.put(recipes, new it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap<>()); // CraftBukkit - } - - } ++ ++ // CraftBukkit start ++ public static void initializeRecipeMap(Map, Object2ObjectLinkedOpenHashMap>> map) { ++ map.clear(); ++ Iterator iterator = IRegistry.RECIPE_TYPE.iterator(); ++ ++ while (iterator.hasNext()) { ++ Recipes recipes = (Recipes) iterator.next(); ++ ++ map.put(recipes, new Object2ObjectLinkedOpenHashMap<>()); // CraftBukkit ++ } ++ ++ } ++ // CraftBukkit end + } diff --git a/nms-patches/CustomFunction.patch b/nms-patches/CustomFunction.patch index 7fc57d1a8b..0e6666ad55 100644 --- a/nms-patches/CustomFunction.patch +++ b/nms-patches/CustomFunction.patch @@ -4,8 +4,8 @@ } try { -- ParseResults parseresults = customfunctiondata.a().getCommandDispatcher().a().parse(stringreader, customfunctiondata.f()); -+ ParseResults parseresults = customfunctiondata.d().parse(stringreader, customfunctiondata.f()); // CraftBukkit +- ParseResults parseresults = customfunctiondata.a().getCommandDispatcher().a().parse(stringreader, customfunctiondata.g()); ++ ParseResults parseresults = customfunctiondata.d().parse(stringreader, customfunctiondata.g()); // CraftBukkit if (parseresults.getReader().canRead()) { if (parseresults.getExceptions().size() == 1) { diff --git a/nms-patches/DedicatedServer.patch b/nms-patches/DedicatedServer.patch index 20fc039d45..7850865099 100644 --- a/nms-patches/DedicatedServer.patch +++ b/nms-patches/DedicatedServer.patch @@ -20,7 +20,7 @@ private static final Logger LOGGER = LogManager.getLogger(); @@ -38,8 +49,10 @@ @Nullable - private ServerGUI q; + private ServerGUI p; - public DedicatedServer(File file, DedicatedServerSettings dedicatedserversettings, DataFixer datafixer, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache, WorldLoadListenerFactory worldloadlistenerfactory, String s) { - super(file, Proxy.NO_PROXY, datafixer, new CommandDispatcher(true), yggdrasilauthenticationservice, minecraftsessionservice, gameprofilerepository, usercache, worldloadlistenerfactory, s); @@ -136,7 +136,7 @@ if (this.getMaxTickTime() > 0L) { @@ -301,6 +362,7 @@ - this.l.b(); + this.remoteStatusListener.b(); } + System.exit(0); // CraftBukkit @@ -160,7 +160,7 @@ } } -@@ -529,14 +599,61 @@ +@@ -529,14 +599,45 @@ @Override public String getPlugins() { @@ -193,40 +193,22 @@ @Override public String executeRemoteCommand(String s) { -- this.remoteControlCommandListener.clearMessages(); -- this.getCommandDispatcher().a(this.remoteControlCommandListener.f(), s); -- return this.remoteControlCommandListener.getMessages(); -+ // CraftBukkit start - fire RemoteServerCommandEvent -+ Waitable waitable = new Waitable() { -+ @Override -+ protected String evaluate() { -+ remoteControlCommandListener.clearMessages(); -+ // Event changes start -+ RemoteServerCommandEvent event = new RemoteServerCommandEvent(remoteConsole, s); -+ server.getPluginManager().callEvent(event); -+ if (event.isCancelled()) { -+ return ""; -+ } -+ // Event change end -+ ServerCommand serverCommand = new ServerCommand(event.getCommand(), remoteControlCommandListener.f()); -+ server.dispatchServerCommand(remoteConsole, serverCommand); -+ return remoteControlCommandListener.getMessages(); + this.remoteControlCommandListener.clearMessages(); + this.executeSync(() -> { +- this.getCommandDispatcher().a(this.remoteControlCommandListener.f(), s); ++ // CraftBukkit start - fire RemoteServerCommandEvent ++ RemoteServerCommandEvent event = new RemoteServerCommandEvent(remoteConsole, s); ++ server.getPluginManager().callEvent(event); ++ if (event.isCancelled()) { ++ return; + } -+ }; -+ processQueue.add(waitable); -+ try { -+ return waitable.get(); -+ } catch (java.util.concurrent.ExecutionException e) { -+ throw new RuntimeException("Exception processing rcon command " + s, e.getCause()); -+ } catch (InterruptedException e) { -+ Thread.currentThread().interrupt(); // Maintain interrupted state -+ throw new RuntimeException("Interrupted processing rcon command " + s, e); -+ } -+ // CraftBukkit end ++ ServerCommand serverCommand = new ServerCommand(event.getCommand(), remoteControlCommandListener.f()); ++ server.dispatchServerCommand(remoteConsole, serverCommand); ++ // CraftBukkit end + }); + return this.remoteControlCommandListener.getMessages(); } - - public void setHasWhitelist(boolean flag) { -@@ -555,4 +672,16 @@ +@@ -557,4 +658,16 @@ public boolean b(GameProfile gameprofile) { return false; } diff --git a/nms-patches/DispenseBehaviorShulkerBox.patch b/nms-patches/DispenseBehaviorShulkerBox.patch index b22060b2ad..7f76d69cbe 100644 --- a/nms-patches/DispenseBehaviorShulkerBox.patch +++ b/nms-patches/DispenseBehaviorShulkerBox.patch @@ -40,5 +40,5 @@ + // CraftBukkit end + this.dispensed = ((ItemBlock) item).a((BlockActionContext) (new BlockActionContextDirectional(isourceblock.getWorld(), blockposition, enumdirection, itemstack, enumdirection1))) == EnumInteractionResult.SUCCESS; - if (this.dispensed) { - itemstack.subtract(1); + } + diff --git a/nms-patches/EnchantmentFrostWalker.patch b/nms-patches/EnchantmentFrostWalker.patch index 3232fd80e2..2d7b9399f3 100644 --- a/nms-patches/EnchantmentFrostWalker.patch +++ b/nms-patches/EnchantmentFrostWalker.patch @@ -11,7 +11,7 @@ public class EnchantmentFrostWalker extends Enchantment { -@@ -41,8 +45,11 @@ +@@ -46,8 +50,11 @@ IBlockData iblockdata2 = world.getType(blockposition1); if (iblockdata2.getMaterial() == Material.WATER && (Integer) iblockdata2.get(BlockFluids.LEVEL) == 0 && iblockdata.canPlace(world, blockposition1) && world.a(iblockdata, blockposition1, VoxelShapeCollision.a())) { diff --git a/nms-patches/EnchantmentThorns.patch b/nms-patches/EnchantmentThorns.patch index 258ac31a58..57d1a4af15 100644 --- a/nms-patches/EnchantmentThorns.patch +++ b/nms-patches/EnchantmentThorns.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EnchantmentThorns.java +++ b/net/minecraft/server/EnchantmentThorns.java -@@ -29,7 +29,7 @@ +@@ -34,7 +34,7 @@ Random random = entityliving.getRandom(); Entry entry = EnchantmentManager.b(Enchantments.THORNS, entityliving); diff --git a/nms-patches/EnchantmentWeaponDamage.patch b/nms-patches/EnchantmentWeaponDamage.patch index d385dd4999..c0e2bfca06 100644 --- a/nms-patches/EnchantmentWeaponDamage.patch +++ b/nms-patches/EnchantmentWeaponDamage.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EnchantmentWeaponDamage.java +++ b/net/minecraft/server/EnchantmentWeaponDamage.java -@@ -46,7 +46,7 @@ +@@ -51,7 +51,7 @@ if (this.a == 2 && entityliving1.getMonsterType() == EnumMonsterType.ARTHROPOD) { int j = 20 + entityliving.getRandom().nextInt(10 * i); diff --git a/nms-patches/Entity.patch b/nms-patches/Entity.patch index 19a0b5379e..bff6477163 100644 --- a/nms-patches/Entity.patch +++ b/nms-patches/Entity.patch @@ -156,7 +156,7 @@ this.lastYaw = this.yaw; - this.doPortalTick(); + if (this instanceof EntityPlayer) this.doPortalTick(); // CraftBukkit - // Moved up to postTick - this.az(); + this.aA(); this.m(); if (this.world.isClientSide) { @@ -300,12 +406,44 @@ @@ -205,7 +205,7 @@ int j = i * 20; if (this instanceof EntityLiving) { -@@ -401,6 +539,28 @@ +@@ -409,6 +547,28 @@ block1.a((IBlockAccess) this.world, this); } @@ -234,7 +234,7 @@ if (this.playStepSound() && (!this.onGround || !this.isSneaking() || !(this instanceof EntityHuman)) && !this.isPassenger()) { double d0 = vec3d1.x; double d1 = vec3d1.y; -@@ -454,7 +614,14 @@ +@@ -462,7 +622,14 @@ if (!flag) { ++this.fireTicks; if (this.fireTicks == 0) { @@ -250,16 +250,7 @@ } } -@@ -565,7 +732,7 @@ - VoxelShape voxelshape = this.world.getWorldBorder().a(); - Stream stream = VoxelShapes.c(voxelshape, VoxelShapes.a(axisalignedbb.shrink(1.0E-7D)), OperatorBoolean.AND) ? Stream.empty() : Stream.of(voxelshape); - AxisAlignedBB axisalignedbb1 = axisalignedbb.a(vec3d).g(1.0E-7D); -- Stream stream1 = this.world.getEntities(this, axisalignedbb1).stream().filter((entity) -> { -+ Stream stream1 = this.world.getEntities(this, axisalignedbb1).stream().filter((entity) -> { // CraftBukkit - decompile error - return !this.x(entity); - }).flatMap((entity) -> { - return Stream.of(entity.ap(), this.j(entity)); -@@ -649,6 +816,7 @@ +@@ -698,6 +865,7 @@ this.locX = (axisalignedbb.minX + axisalignedbb.maxX) / 2.0D; this.locY = axisalignedbb.minY; this.locZ = (axisalignedbb.minZ + axisalignedbb.maxZ) / 2.0D; @@ -267,7 +258,7 @@ } protected SoundEffect getSoundSwim() { -@@ -820,7 +988,7 @@ +@@ -869,7 +1037,7 @@ return null; } @@ -276,7 +267,7 @@ if (!this.isFireProof()) { this.damageEntity(DamageSource.FIRE, (float) i); } -@@ -1053,6 +1221,13 @@ +@@ -1102,6 +1270,13 @@ } public void spawnIn(World world) { @@ -290,7 +281,7 @@ this.world = world; } -@@ -1078,6 +1253,7 @@ +@@ -1127,6 +1302,7 @@ this.lastYaw -= 360.0F; } @@ -298,7 +289,7 @@ this.setPosition(this.locX, this.locY, this.locZ); this.setYawPitch(f, f1); } -@@ -1246,7 +1422,7 @@ +@@ -1295,7 +1471,7 @@ public boolean c(NBTTagCompound nbttagcompound) { String s = this.getSaveID(); @@ -307,7 +298,7 @@ nbttagcompound.setString("id", s); this.save(nbttagcompound); return true; -@@ -1265,15 +1441,33 @@ +@@ -1314,15 +1490,33 @@ Vec3D vec3d = this.getMot(); nbttagcompound.set("Motion", this.a(vec3d.x, vec3d.y, vec3d.z)); @@ -342,7 +333,7 @@ IChatBaseComponent ichatbasecomponent = this.getCustomName(); if (ichatbasecomponent != null) { -@@ -1331,6 +1525,11 @@ +@@ -1380,6 +1574,11 @@ } } @@ -354,7 +345,7 @@ return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Saving entity NBT"); -@@ -1371,7 +1570,7 @@ +@@ -1420,7 +1619,7 @@ this.setAirTicks(nbttagcompound.getShort("Air")); this.onGround = nbttagcompound.getBoolean("OnGround"); if (nbttagcompound.hasKey("Dimension")) { @@ -363,7 +354,7 @@ } this.invulnerable = nbttagcompound.getBoolean("Invulnerable"); -@@ -1414,6 +1613,43 @@ +@@ -1463,6 +1662,43 @@ } else { throw new IllegalStateException("Entity has invalid position"); } @@ -407,7 +398,7 @@ } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Loading entity NBT"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Entity being loaded"); -@@ -1489,9 +1725,22 @@ +@@ -1538,9 +1774,22 @@ } else if (this.world.isClientSide) { return null; } else { @@ -430,7 +421,7 @@ this.world.addEntity(entityitem); return entityitem; } -@@ -1595,7 +1844,7 @@ +@@ -1644,7 +1893,7 @@ } this.vehicle = entity; @@ -439,7 +430,7 @@ return true; } } -@@ -1620,15 +1869,36 @@ +@@ -1669,15 +1918,36 @@ Entity entity = this.vehicle; this.vehicle = null; @@ -478,7 +469,7 @@ if (!this.world.isClientSide && entity instanceof EntityHuman && !(this.getRidingPassenger() instanceof EntityHuman)) { this.passengers.add(0, entity); } else { -@@ -1636,15 +1906,33 @@ +@@ -1685,15 +1955,33 @@ } } @@ -513,7 +504,7 @@ } protected boolean q(Entity entity) { -@@ -1687,11 +1975,17 @@ +@@ -1736,11 +2024,17 @@ int i = this.ab(); if (this.ai) { @@ -521,7 +512,7 @@ + if ((true || this.world.getMinecraftServer().getAllowNether()) && !this.isPassenger() && this.aj++ >= i) { // CraftBukkit this.world.getMethodProfiler().enter("portal"); this.aj = i; - this.portalCooldown = this.aW(); + this.portalCooldown = this.aX(); - this.a(this.world.worldProvider.getDimensionManager() == DimensionManager.NETHER ? DimensionManager.OVERWORLD : DimensionManager.NETHER); + // CraftBukkit start + if (this instanceof EntityPlayer) { @@ -533,7 +524,7 @@ this.world.getMethodProfiler().exit(); } -@@ -1771,6 +2065,13 @@ +@@ -1820,6 +2114,13 @@ } public void setSwimming(boolean flag) { @@ -547,7 +538,7 @@ this.setFlag(4, flag); } -@@ -1831,16 +2132,56 @@ +@@ -1880,16 +2181,56 @@ } public void setAirTicks(int i) { @@ -607,7 +598,7 @@ } public void j(boolean flag) { -@@ -1988,20 +2329,33 @@ +@@ -2037,20 +2378,33 @@ @Nullable public Entity a(DimensionManager dimensionmanager) { @@ -644,7 +635,7 @@ if (dimensionmanager1 == DimensionManager.THE_END && dimensionmanager == DimensionManager.OVERWORLD) { blockposition = worldserver1.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING_NO_LEAVES, worldserver1.getSpawn()); } else if (dimensionmanager == DimensionManager.THE_END) { -@@ -2039,6 +2393,25 @@ +@@ -2088,6 +2442,25 @@ vec3d = shapedetector_shape.velocity; f = (float) shapedetector_shape.yaw; } @@ -670,7 +661,7 @@ this.world.getMethodProfiler().exitEnter("reloading"); Entity entity = this.getEntityType().a((World) worldserver1); -@@ -2048,6 +2421,14 @@ +@@ -2097,6 +2470,14 @@ entity.setPositionRotation(blockposition, entity.yaw + f, entity.pitch); entity.setMot(vec3d); worldserver1.addEntityTeleport(entity); @@ -685,7 +676,7 @@ } this.dead = true; -@@ -2249,7 +2630,26 @@ +@@ -2298,7 +2679,26 @@ } public void a(AxisAlignedBB axisalignedbb) { diff --git a/nms-patches/EntityAnimal.patch b/nms-patches/EntityAnimal.patch index d5fe468e82..69997d63e2 100644 --- a/nms-patches/EntityAnimal.patch +++ b/nms-patches/EntityAnimal.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/server/EntityAnimal.java +++ b/net/minecraft/server/EntityAnimal.java @@ -8,6 +8,7 @@ - protected Block bC; + public int loveTicks; public UUID breedCause; + public ItemStack breedItem; // CraftBukkit - Add breedItem variable protected EntityAnimal(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -43,6 +44,9 @@ +@@ -42,6 +43,9 @@ } @@ -18,7 +18,7 @@ @Override public boolean damageEntity(DamageSource damagesource, float f) { if (this.isInvulnerable(damagesource)) { -@@ -52,6 +56,7 @@ +@@ -51,6 +55,7 @@ return super.damageEntity(damagesource, f); } } @@ -26,7 +26,7 @@ @Override public float a(BlockPosition blockposition, IWorldReader iworldreader) { -@@ -146,6 +151,7 @@ +@@ -139,6 +144,7 @@ if (entityhuman != null) { this.breedCause = entityhuman.getUniqueID(); } diff --git a/nms-patches/EntityArrow.patch b/nms-patches/EntityArrow.patch index 55ca3a6139..1a7f775ce1 100644 --- a/nms-patches/EntityArrow.patch +++ b/nms-patches/EntityArrow.patch @@ -21,8 +21,8 @@ MovingObjectPosition.EnumMovingObjectType movingobjectposition_enummovingobjecttype = movingobjectposition.getType(); if (movingobjectposition_enummovingobjecttype == MovingObjectPosition.EnumMovingObjectType.ENTITY) { -@@ -332,7 +339,13 @@ - } +@@ -334,7 +341,13 @@ + int j = entity.ad(); if (this.isBurning() && !(entity instanceof EntityEnderman)) { - entity.setOnFire(5); @@ -36,7 +36,7 @@ } if (entity.damageEntity(damagesource, (float) i)) { -@@ -468,6 +481,7 @@ +@@ -471,6 +484,7 @@ public void setShooter(@Nullable Entity entity) { this.shooter = entity == null ? null : entity.getUniqueID(); @@ -44,7 +44,7 @@ if (entity instanceof EntityHuman) { this.fromPlayer = ((EntityHuman) entity).abilities.canInstantlyBuild ? EntityArrow.PickupStatus.CREATIVE_ONLY : EntityArrow.PickupStatus.ALLOWED; } -@@ -482,9 +496,23 @@ +@@ -485,9 +499,23 @@ @Override public void pickup(EntityHuman entityhuman) { if (!this.world.isClientSide && (this.inGround || this.v()) && this.shake <= 0) { diff --git a/nms-patches/EntityBat.patch b/nms-patches/EntityBat.patch index 20b466de49..79d6d028ee 100644 --- a/nms-patches/EntityBat.patch +++ b/nms-patches/EntityBat.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/server/EntityBat.java +++ b/net/minecraft/server/EntityBat.java -@@ -3,6 +3,7 @@ - import java.time.LocalDate; +@@ -4,6 +4,7 @@ import java.time.temporal.ChronoField; + import java.util.Random; import javax.annotation.Nullable; +import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit public class EntityBat extends EntityAmbient { -@@ -104,12 +105,20 @@ +@@ -105,12 +106,20 @@ } if (this.world.a(EntityBat.c, (EntityLiving) this) != null) { @@ -32,7 +32,7 @@ } } else { if (this.d != null && (!this.world.isEmpty(this.d) || this.d.getY() < 1)) { -@@ -133,7 +142,11 @@ +@@ -134,7 +143,11 @@ this.bd = 0.5F; this.yaw += f1; if (this.random.nextInt(100) == 0 && this.world.getType(blockposition1).isOccluding(this.world, blockposition1)) { @@ -45,7 +45,7 @@ } } -@@ -161,7 +174,11 @@ +@@ -162,7 +175,11 @@ return false; } else { if (!this.world.isClientSide && this.isAsleep()) { diff --git a/nms-patches/EntityBoat.patch b/nms-patches/EntityBoat.patch index dd83d1f382..d729e4149b 100644 --- a/nms-patches/EntityBoat.patch +++ b/nms-patches/EntityBoat.patch @@ -64,7 +64,7 @@ + return true; + } + // CraftBukkit end - if (!flag && this.world.getGameRules().getBoolean("doEntityDrops")) { + if (!flag && this.world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) { this.a((IMaterial) this.f()); } @@ -140,9 +179,25 @@ @@ -134,7 +134,7 @@ + this.world.getServer().getPluginManager().callEvent(destroyEvent); + if (!destroyEvent.isCancelled()) { this.die(); - if (this.world.getGameRules().getBoolean("doEntityDrops")) { + if (this.world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) { int i; @@ -753,6 +830,7 @@ } diff --git a/nms-patches/EntityCat.patch b/nms-patches/EntityCat.patch index db433c6bed..d4a56f66db 100644 --- a/nms-patches/EntityCat.patch +++ b/nms-patches/EntityCat.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/server/EntityCat.java +++ b/net/minecraft/server/EntityCat.java @@ -16,7 +16,7 @@ + private static final DataWatcherObject bF = DataWatcher.a(EntityCat.class, DataWatcherRegistry.i); private static final DataWatcherObject bG = DataWatcher.a(EntityCat.class, DataWatcherRegistry.i); - private static final DataWatcherObject bH = DataWatcher.a(EntityCat.class, DataWatcherRegistry.i); - private static final DataWatcherObject bI = DataWatcher.a(EntityCat.class, DataWatcherRegistry.b); -- public static final Map bD = (Map) SystemUtils.a((Object) Maps.newHashMap(), (hashmap) -> { -+ public static final Map bD = (Map) SystemUtils.a(Maps.newHashMap(), (hashmap) -> { // CraftBukkit - decompile error + private static final DataWatcherObject bH = DataWatcher.a(EntityCat.class, DataWatcherRegistry.b); +- public static final Map bC = (Map) SystemUtils.a((Object) Maps.newHashMap(), (hashmap) -> { ++ public static final Map bC = (Map) SystemUtils.a(Maps.newHashMap(), (hashmap) -> { // CraftBukkit - decompile error hashmap.put(0, new MinecraftKey("textures/entity/cat/tabby.png")); hashmap.put(1, new MinecraftKey("textures/entity/cat/black.png")); hashmap.put(2, new MinecraftKey("textures/entity/cat/red.png")); diff --git a/nms-patches/EntityChicken.patch b/nms-patches/EntityChicken.patch index 922fca961f..ef39d60dd6 100644 --- a/nms-patches/EntityChicken.patch +++ b/nms-patches/EntityChicken.patch @@ -10,10 +10,10 @@ + } + // CraftBukkit end super.movementTick(); - this.bD = this.bz; + this.bC = this.bz; this.bB = this.bA; @@ -62,7 +67,9 @@ - this.bz += this.bE * 2.0F; + this.bz += this.bD * 2.0F; if (!this.world.isClientSide && this.isAlive() && !this.isBaby() && !this.isChickenJockey() && --this.eggLayTime <= 0) { this.a(SoundEffects.ENTITY_CHICKEN_EGG, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F); + this.forceDrops = true; // CraftBukkit diff --git a/nms-patches/EntityCreeper.patch b/nms-patches/EntityCreeper.patch index 1d479faf7f..f05581495f 100644 --- a/nms-patches/EntityCreeper.patch +++ b/nms-patches/EntityCreeper.patch @@ -32,14 +32,8 @@ @Override protected boolean a(EntityHuman entityhuman, EnumHand enumhand) { ItemStack itemstack = entityhuman.b(enumhand); -@@ -187,15 +201,23 @@ - return super.a(entityhuman, enumhand); - } - -- private void eb() { -+ public void eb() { // PAIL rename explode, private -> public - if (!this.world.isClientSide) { - Explosion.Effect explosion_effect = this.world.getGameRules().getBoolean("mobGriefing") ? Explosion.Effect.DESTROY : Explosion.Effect.NONE; +@@ -192,10 +206,18 @@ + Explosion.Effect explosion_effect = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Effect.DESTROY : Explosion.Effect.NONE; float f = this.isPowered() ? 2.0F : 1.0F; - this.killed = true; diff --git a/nms-patches/EntityDolphin.patch b/nms-patches/EntityDolphin.patch index 9f824ccb0e..11940d7ecd 100644 --- a/nms-patches/EntityDolphin.patch +++ b/nms-patches/EntityDolphin.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityDolphin.java +++ b/net/minecraft/server/EntityDolphin.java -@@ -106,7 +106,7 @@ +@@ -107,7 +107,7 @@ this.goalSelector.a(8, new EntityDolphin.d()); this.goalSelector.a(8, new PathfinderGoalFollowBoat(this)); this.goalSelector.a(9, new PathfinderGoalAvoidTarget<>(this, EntityGuardian.class, 8.0F, 1.0D, 1.0D)); @@ -9,7 +9,7 @@ } @Override -@@ -178,6 +178,11 @@ +@@ -179,6 +179,11 @@ ItemStack itemstack = entityitem.getItemStack(); if (this.g(itemstack)) { diff --git a/nms-patches/EntityEnderDragon.patch b/nms-patches/EntityEnderDragon.patch index dfa6762cbf..d1ec2f952f 100644 --- a/nms-patches/EntityEnderDragon.patch +++ b/nms-patches/EntityEnderDragon.patch @@ -60,7 +60,7 @@ @@ -398,7 +415,11 @@ if (!iblockdata.isAir() && iblockdata.getMaterial() != Material.FIRE) { - if (this.world.getGameRules().getBoolean("mobGriefing") && !TagsBlock.DRAGON_IMMUNE.isTagged(block)) { + if (this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) && !TagsBlock.DRAGON_IMMUNE.isTagged(block)) { - flag1 = this.world.a(blockposition, false) || flag1; + // CraftBukkit start - Add blocks to list rather than destroying them + // flag1 = this.world.a(blockposition, false) || flag1; diff --git a/nms-patches/EntityEnderPearl.patch b/nms-patches/EntityEnderPearl.patch index 8c5450a257..94985585fb 100644 --- a/nms-patches/EntityEnderPearl.patch +++ b/nms-patches/EntityEnderPearl.patch @@ -17,7 +17,7 @@ EntityPlayer entityplayer = (EntityPlayer) entityliving; if (entityplayer.playerConnection.a().isConnected() && entityplayer.world == this.world && !entityplayer.isSleeping()) { -- if (this.random.nextFloat() < 0.05F && this.world.getGameRules().getBoolean("doMobSpawning")) { +- if (this.random.nextFloat() < 0.05F && this.world.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING)) { - EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.a(this.world); - - entityendermite.setPlayerSpawned(true); @@ -37,7 +37,7 @@ + Bukkit.getPluginManager().callEvent(teleEvent); + + if (!teleEvent.isCancelled() && !entityplayer.playerConnection.isDisconnected()) { -+ if (this.random.nextFloat() < 0.05F && this.world.getGameRules().getBoolean("doMobSpawning")) { ++ if (this.random.nextFloat() < 0.05F && this.world.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING)) { + EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.a(this.world); + + entityendermite.setPlayerSpawned(true); diff --git a/nms-patches/EntityExperienceOrb.patch b/nms-patches/EntityExperienceOrb.patch index 56b4776368..6f0228ccb2 100644 --- a/nms-patches/EntityExperienceOrb.patch +++ b/nms-patches/EntityExperienceOrb.patch @@ -47,7 +47,7 @@ this.move(EnumMoveType.SELF, this.getMot()); @@ -113,7 +131,7 @@ - protected void ay() {} + protected void az() {} @Override - protected void burn(int i) { diff --git a/nms-patches/EntityFish.patch b/nms-patches/EntityFish.patch index a6dbb3cb3f..b8574e46ba 100644 --- a/nms-patches/EntityFish.patch +++ b/nms-patches/EntityFish.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityFish.java +++ b/net/minecraft/server/EntityFish.java -@@ -36,7 +36,7 @@ +@@ -34,7 +34,7 @@ @Override public boolean isTypeNotPersistent(double d0) { @@ -9,7 +9,7 @@ } @Override -@@ -56,6 +56,7 @@ +@@ -54,6 +54,7 @@ public void setFromBucket(boolean flag) { this.datawatcher.set(EntityFish.FROM_BUCKET, flag); diff --git a/nms-patches/EntityFox.patch b/nms-patches/EntityFox.patch index b2866ec1cb..2ee7208504 100644 --- a/nms-patches/EntityFox.patch +++ b/nms-patches/EntityFox.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/server/EntityFox.java +++ b/net/minecraft/server/EntityFox.java @@ -267,8 +267,8 @@ - private List ek() { + private List el() { List list = Lists.newArrayList(); - list.add(((Optional) this.datawatcher.get(EntityFox.bB)).orElse((Object) null)); -- list.add(((Optional) this.datawatcher.get(EntityFox.bD)).orElse((Object) null)); +- list.add(((Optional) this.datawatcher.get(EntityFox.bC)).orElse((Object) null)); + list.add(((Optional) this.datawatcher.get(EntityFox.bB)).orElse(null)); // CraftBukkit - decompile error -+ list.add(((Optional) this.datawatcher.get(EntityFox.bD)).orElse(null)); // CraftBukkit - decompile error ++ list.add(((Optional) this.datawatcher.get(EntityFox.bC)).orElse(null)); // CraftBukkit - decompile error return list; } @@ -67,4 +67,4 @@ + EntityFox.this.setGoalTarget(this.j, org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_ATTACKED_OWNER, true); // CraftBukkit this.c = this.j; if (this.k != null) { - this.l = this.k.cs(); + this.l = this.k.ct(); diff --git a/nms-patches/EntityGhast.patch b/nms-patches/EntityGhast.patch index b5b58cf7d3..ad96de14f9 100644 --- a/nms-patches/EntityGhast.patch +++ b/nms-patches/EntityGhast.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityGhast.java +++ b/net/minecraft/server/EntityGhast.java -@@ -168,7 +168,8 @@ +@@ -167,7 +167,8 @@ world.a((EntityHuman) null, 1016, new BlockPosition(this.ghast), 0); EntityLargeFireball entitylargefireball = new EntityLargeFireball(world, this.ghast, d2, d3, d4); diff --git a/nms-patches/EntityHanging.patch b/nms-patches/EntityHanging.patch index f67f3ff14a..66e94dd2af 100644 --- a/nms-patches/EntityHanging.patch +++ b/nms-patches/EntityHanging.patch @@ -173,21 +173,3 @@ this.die(); this.a((Entity) null); } -@@ -168,7 +228,7 @@ - - @Override - public void b(NBTTagCompound nbttagcompound) { -- nbttagcompound.setByte("Facing", (byte) this.direction.get2DRotationValue()); -+ if (this.direction != null) nbttagcompound.setByte("Facing", (byte) this.direction.get2DRotationValue()); // CraftBukkit - BlockPosition blockposition = this.getBlockPosition(); - - nbttagcompound.setInt("TileX", blockposition.getX()); -@@ -179,7 +239,7 @@ - @Override - public void a(NBTTagCompound nbttagcompound) { - this.blockPosition = new BlockPosition(nbttagcompound.getInt("TileX"), nbttagcompound.getInt("TileY"), nbttagcompound.getInt("TileZ")); -- this.setDirection(EnumDirection.fromType2(nbttagcompound.getByte("Facing"))); -+ if (nbttagcompound.hasKeyOfType("Facing", 99)) this.setDirection(EnumDirection.fromType2(nbttagcompound.getByte("Facing"))); // CraftBukkit - } - - public abstract int getHangingWidth(); diff --git a/nms-patches/EntityHorseAbstract.patch b/nms-patches/EntityHorseAbstract.patch index 6ff40b1475..7f24105d6b 100644 --- a/nms-patches/EntityHorseAbstract.patch +++ b/nms-patches/EntityHorseAbstract.patch @@ -9,9 +9,9 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInventoryListener, IJumpable { @@ -33,6 +34,7 @@ - private float bW; - protected boolean bH = true; - protected int bI; + private float bV; + protected boolean bG = true; + protected int bH; + public int maxDomestication = 100; // CraftBukkit - store max domestication value protected EntityHorseAbstract(EntityTypes entitytypes, World world) { @@ -23,7 +23,7 @@ - this.inventoryChest = new InventorySubcontainer(this.getChestSlots()); + this.inventoryChest = new InventorySubcontainer(this.getChestSlots(), (org.bukkit.entity.AbstractHorse) this.getBukkitEntity()); // CraftBukkit if (inventorysubcontainer != null) { - inventorysubcontainer.b(this); + inventorysubcontainer.b((IInventoryListener) this); int i = Math.min(inventorysubcontainer.getSize(), this.inventoryChest.getSize()); @@ -332,7 +334,7 @@ } @@ -51,7 +51,7 @@ + this.heal(1.0F, RegainReason.REGEN); // CraftBukkit } - if (this.et()) { + if (this.eu()) { @@ -716,6 +718,7 @@ if (this.getOwnerUUID() != null) { nbttagcompound.setString("OwnerUUID", this.getOwnerUUID().toString()); @@ -89,5 +89,5 @@ + } + // CraftBukkit end this.canSlide = true; - this.eB(); + this.eC(); } diff --git a/nms-patches/EntityHuman.patch b/nms-patches/EntityHuman.patch index ed3e2aaff1..78a1d4ffed 100644 --- a/nms-patches/EntityHuman.patch +++ b/nms-patches/EntityHuman.patch @@ -68,7 +68,7 @@ } @@ -352,7 +377,8 @@ - if (this.world.getDifficulty() == EnumDifficulty.PEACEFUL && this.world.getGameRules().getBoolean("naturalRegeneration")) { + if (this.world.getDifficulty() == EnumDifficulty.PEACEFUL && this.world.getGameRules().getBoolean(GameRules.NATURAL_REGENERATION)) { if (this.getHealth() < this.getMaxHealth() && this.ticksLived % 20 == 0) { - this.heal(1.0F); + // CraftBukkit - added regain reason of "REGEN" for filtering purposes. diff --git a/nms-patches/EntityInsentient.patch b/nms-patches/EntityInsentient.patch index dbde29cfdc..f063356f57 100644 --- a/nms-patches/EntityInsentient.patch +++ b/nms-patches/EntityInsentient.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityInsentient.java +++ b/net/minecraft/server/EntityInsentient.java -@@ -8,6 +8,18 @@ +@@ -9,6 +9,18 @@ import java.util.UUID; import javax.annotation.Nullable; @@ -19,7 +19,7 @@ public abstract class EntityInsentient extends EntityLiving { private static final DataWatcherObject b = DataWatcher.a(EntityInsentient.class, DataWatcherRegistry.a); -@@ -26,7 +38,7 @@ +@@ -27,7 +39,7 @@ public final float[] dropChanceHand; private final NonNullList bB; public final float[] dropChanceArmor; @@ -28,7 +28,7 @@ public boolean persistent; private final Map bE; public MinecraftKey lootTableKey; -@@ -62,6 +74,9 @@ +@@ -63,6 +75,9 @@ this.initPathfinder(); } @@ -38,7 +38,7 @@ } protected void initPathfinder() {} -@@ -129,7 +144,38 @@ +@@ -130,7 +145,38 @@ } public void setGoalTarget(@Nullable EntityLiving entityliving) { @@ -77,7 +77,7 @@ } @Override -@@ -345,11 +391,20 @@ +@@ -346,11 +392,20 @@ @Override public void a(NBTTagCompound nbttagcompound) { super.a(nbttagcompound); @@ -100,7 +100,7 @@ NBTTagList nbttaglist; int i; -@@ -403,6 +458,11 @@ +@@ -404,6 +459,11 @@ super.a(damagesource, flag); this.lootTableKey = null; } @@ -112,7 +112,7 @@ @Override protected LootTableInfo.Builder a(boolean flag, DamageSource damagesource) { -@@ -462,11 +522,17 @@ +@@ -463,11 +523,17 @@ ItemStack itemstack1 = this.getEquipment(enumitemslot); boolean flag = this.a(itemstack, itemstack1, enumitemslot); @@ -131,7 +131,7 @@ } this.setSlot(enumitemslot, itemstack); -@@ -544,11 +610,11 @@ +@@ -545,11 +611,11 @@ if (entityhuman != null) { double d0 = entityhuman.h(this); @@ -145,7 +145,7 @@ this.die(); } else if (d0 < 1024.0D) { this.ticksFarFromPlayer = 0; -@@ -944,12 +1010,24 @@ +@@ -945,12 +1011,24 @@ if (!this.isAlive()) { return false; } else if (this.getLeashHolder() == entityhuman) { @@ -170,7 +170,7 @@ this.setLeashHolder(entityhuman, true); itemstack.subtract(1); return true; -@@ -995,6 +1073,7 @@ +@@ -996,6 +1074,7 @@ if (this.leashHolder != null) { if (!this.isAlive() || !this.leashHolder.isAlive()) { @@ -178,7 +178,7 @@ this.unleash(true, true); } -@@ -1010,7 +1089,9 @@ +@@ -1011,7 +1090,9 @@ this.leashHolder = null; if (!this.world.isClientSide && flag1) { @@ -188,7 +188,7 @@ } if (!this.world.isClientSide && flag && this.world instanceof WorldServer) { -@@ -1079,6 +1160,7 @@ +@@ -1080,6 +1161,7 @@ this.setLeashHolder(EntityLeash.a(this.world, blockposition), true); } else { @@ -196,7 +196,7 @@ this.unleash(false, true); } -@@ -1186,7 +1268,14 @@ +@@ -1187,7 +1269,14 @@ int i = EnchantmentManager.getFireAspectEnchantmentLevel(this); if (i > 0) { diff --git a/nms-patches/EntityItem.patch b/nms-patches/EntityItem.patch index c0d7e7e8bb..3fbfdd7d49 100644 --- a/nms-patches/EntityItem.patch +++ b/nms-patches/EntityItem.patch @@ -45,7 +45,7 @@ } + // Craftbukkit end */ - this.impulse |= this.ax(); + this.impulse |= this.ay(); if (!this.world.isClientSide) { @@ -115,6 +125,12 @@ } diff --git a/nms-patches/EntityLargeFireball.patch b/nms-patches/EntityLargeFireball.patch index 8a94be7253..91834c98ea 100644 --- a/nms-patches/EntityLargeFireball.patch +++ b/nms-patches/EntityLargeFireball.patch @@ -11,18 +11,18 @@ public EntityLargeFireball(EntityTypes entitytypes, World world) { super(entitytypes, world); -+ isIncendiary = this.world.getGameRules().getBoolean("mobGriefing"); // CraftBukkit ++ isIncendiary = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING); // CraftBukkit } public EntityLargeFireball(World world, EntityLiving entityliving, double d0, double d1, double d2) { super(EntityTypes.FIREBALL, entityliving, d0, d1, d2, world); -+ isIncendiary = this.world.getGameRules().getBoolean("mobGriefing"); // CraftBukkit ++ isIncendiary = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING); // CraftBukkit } @Override @@ -24,7 +28,15 @@ - boolean flag = this.world.getGameRules().getBoolean("mobGriefing"); + boolean flag = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING); - this.world.createExplosion((Entity) null, this.locX, this.locY, this.locZ, (float) this.yield, flag, flag ? Explosion.Effect.DESTROY : Explosion.Effect.NONE); + // CraftBukkit start - fire ExplosionPrimeEvent diff --git a/nms-patches/EntityLiving.patch b/nms-patches/EntityLiving.patch index ec9630a098..782b48545b 100644 --- a/nms-patches/EntityLiving.patch +++ b/nms-patches/EntityLiving.patch @@ -80,7 +80,7 @@ + public int getExpReward() { + int exp = this.getExpValue(this.killer); + -+ if (!this.world.isClientSide && (this.lastDamageByPlayerTime > 0 || this.alwaysGivesExp()) && this.isDropExperience() && this.world.getGameRules().getBoolean("doMobLoot")) { ++ if (!this.world.isClientSide && (this.lastDamageByPlayerTime > 0 || this.alwaysGivesExp()) && this.isDropExperience() && this.world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) { + return exp; + } else { + return 0; @@ -93,13 +93,13 @@ @@ -314,19 +366,19 @@ - protected void cn() { + protected void co() { ++this.deathTicks; - if (this.deathTicks == 20) { + if (this.deathTicks >= 20 && !this.dead) { // CraftBukkit - (this.deathTicks == 20) -> (this.deathTicks >= 20 && !this.dead) int i; -- if (!this.world.isClientSide && (this.alwaysGivesExp() || this.lastDamageByPlayerTime > 0 && this.isDropExperience() && this.world.getGameRules().getBoolean("doMobLoot"))) { +- if (!this.world.isClientSide && (this.alwaysGivesExp() || this.lastDamageByPlayerTime > 0 && this.isDropExperience() && this.world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT))) { - i = this.getExpValue(this.killer); - - while (i > 0) { @@ -505,7 +505,7 @@ } @@ -1115,6 +1351,12 @@ - if (this.isDropExperience() && this.world.getGameRules().getBoolean("doMobLoot")) { + if (this.isDropExperience() && this.world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) { this.a(damagesource, flag); this.dropDeathLoot(damagesource, i, flag); + // CraftBukkit start - Call death event @@ -516,7 +516,7 @@ + // CraftBukkit end } - this.cE(); + this.cF(); @@ -1218,8 +1460,13 @@ int i = MathHelper.f((f - 3.0F - f2) * f1); @@ -797,7 +797,7 @@ + + this.a(this.getRaisedHand(), itemstack); + // CraftBukkit end - this.dp(); + this.dq(); } @@ -2495,10 +2908,18 @@ @@ -825,7 +825,7 @@ @@ -2585,7 +3006,7 @@ } - public void dy() { + public void dz() { - Optional optional = this.getBedPosition(); + Optional optional = this.getBedPosition(); // CraftBukkit - decompile error World world = this.world; diff --git a/nms-patches/EntityLlamaTrader.patch b/nms-patches/EntityLlamaTrader.patch index 898e4b89a9..dcbc28fa03 100644 --- a/nms-patches/EntityLlamaTrader.patch +++ b/nms-patches/EntityLlamaTrader.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityLlamaTrader.java +++ b/net/minecraft/server/EntityLlamaTrader.java -@@ -126,7 +126,7 @@ +@@ -125,7 +125,7 @@ @Override public void c() { diff --git a/nms-patches/EntityMinecartAbstract.patch b/nms-patches/EntityMinecartAbstract.patch index 9736885282..7c169fc25a 100644 --- a/nms-patches/EntityMinecartAbstract.patch +++ b/nms-patches/EntityMinecartAbstract.patch @@ -86,7 +86,7 @@ this.c(this.getType() - 1); } @@ -136,7 +186,7 @@ - this.ae(); + this.af(); } - this.doPortalTick(); diff --git a/nms-patches/EntityMinecartCommandBlock.patch b/nms-patches/EntityMinecartCommandBlock.patch index a8abf0371f..43ea8bc2fb 100644 --- a/nms-patches/EntityMinecartCommandBlock.patch +++ b/nms-patches/EntityMinecartCommandBlock.patch @@ -2,7 +2,7 @@ +++ b/net/minecraft/server/EntityMinecartCommandBlock.java @@ -104,5 +104,12 @@ public CommandListenerWrapper getWrapper() { - return new CommandListenerWrapper(this, new Vec3D(EntityMinecartCommandBlock.this.locX, EntityMinecartCommandBlock.this.locY, EntityMinecartCommandBlock.this.locZ), EntityMinecartCommandBlock.this.aT(), this.d(), 2, this.getName().getString(), EntityMinecartCommandBlock.this.getScoreboardDisplayName(), this.d().getMinecraftServer(), EntityMinecartCommandBlock.this); + return new CommandListenerWrapper(this, new Vec3D(EntityMinecartCommandBlock.this.locX, EntityMinecartCommandBlock.this.locY, EntityMinecartCommandBlock.this.locZ), EntityMinecartCommandBlock.this.aU(), this.d(), 2, this.getName().getString(), EntityMinecartCommandBlock.this.getScoreboardDisplayName(), this.d().getMinecraftServer(), EntityMinecartCommandBlock.this); } + + // CraftBukkit start diff --git a/nms-patches/EntityMushroomCow.patch b/nms-patches/EntityMushroomCow.patch index cd75264177..62eb5dd1b4 100644 --- a/nms-patches/EntityMushroomCow.patch +++ b/nms-patches/EntityMushroomCow.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/server/EntityMushroomCow.java +++ b/net/minecraft/server/EntityMushroomCow.java -@@ -2,6 +2,11 @@ - +@@ -3,6 +3,11 @@ + import java.util.Random; import java.util.UUID; import org.apache.commons.lang3.tuple.Pair; +// CraftBukkit start @@ -12,7 +12,7 @@ public class EntityMushroomCow extends EntityCow { -@@ -72,9 +77,17 @@ +@@ -81,9 +86,17 @@ int i; if (itemstack.getItem() == Items.SHEARS && this.getAge() >= 0) { @@ -31,7 +31,7 @@ EntityCow entitycow = (EntityCow) EntityTypes.COW.a(this.world); entitycow.setPositionRotation(this.locX, this.locY, this.locZ, this.yaw, this.pitch); -@@ -84,7 +97,14 @@ +@@ -93,7 +106,14 @@ entitycow.setCustomName(this.getCustomName()); } diff --git a/nms-patches/EntityOcelot.patch b/nms-patches/EntityOcelot.patch index 9434b61df5..0e7e8a79dc 100644 --- a/nms-patches/EntityOcelot.patch +++ b/nms-patches/EntityOcelot.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityOcelot.java +++ b/net/minecraft/server/EntityOcelot.java -@@ -80,7 +80,7 @@ +@@ -81,7 +81,7 @@ @Override public boolean isTypeNotPersistent(double d0) { @@ -9,8 +9,8 @@ } @Override -@@ -131,7 +131,8 @@ - if ((this.bD == null || this.bD.h()) && !this.isTrusting() && this.i(itemstack) && entityhuman.h((Entity) this) < 9.0D) { +@@ -132,7 +132,8 @@ + if ((this.bC == null || this.bC.h()) && !this.isTrusting() && this.i(itemstack) && entityhuman.h((Entity) this) < 9.0D) { this.a(entityhuman, itemstack); if (!this.world.isClientSide) { - if (this.random.nextInt(3) == 0) { diff --git a/nms-patches/EntityPanda.patch b/nms-patches/EntityPanda.patch index 59cd39aae1..e649b0d612 100644 --- a/nms-patches/EntityPanda.patch +++ b/nms-patches/EntityPanda.patch @@ -21,7 +21,7 @@ @@ -673,7 +675,7 @@ @Override protected void a(EntityInsentient entityinsentient, EntityLiving entityliving) { - if (entityinsentient instanceof EntityPanda && ((EntityPanda) entityinsentient).dR()) { + if (entityinsentient instanceof EntityPanda && ((EntityPanda) entityinsentient).dS()) { - entityinsentient.setGoalTarget(entityliving); + entityinsentient.setGoalTarget(entityliving, EntityTargetEvent.TargetReason.TARGET_ATTACKED_ENTITY, true); // CraftBukkit } @@ -40,9 +40,9 @@ } @@ -808,9 +810,9 @@ - this.e.r(32); + this.e.s(32); this.f = this.e.ticksLived + 600; - if (this.e.de()) { + if (this.e.df()) { - EntityHuman entityhuman = this.b.a(EntityPanda.d.d, (EntityLiving) this.e); + EntityHuman entityhuman = this.b.a(d, (EntityLiving) this.e); // CraftBukkit - decompile error diff --git a/nms-patches/EntityParrot.patch b/nms-patches/EntityParrot.patch index 5ec3cbdd5f..677cff36f6 100644 --- a/nms-patches/EntityParrot.patch +++ b/nms-patches/EntityParrot.patch @@ -2,10 +2,10 @@ +++ b/net/minecraft/server/EntityParrot.java @@ -21,7 +21,7 @@ }; - private static final Item bK = Items.COOKIE; - private static final Set bL = Sets.newHashSet(new Item[]{Items.WHEAT_SEEDS, Items.MELON_SEEDS, Items.PUMPKIN_SEEDS, Items.BEETROOT_SEEDS}); -- private static final Map, SoundEffect> bM = (Map) SystemUtils.a((Object) Maps.newHashMap(), (hashmap) -> { -+ private static final Map, SoundEffect> bM = (Map) SystemUtils.a(Maps.newHashMap(), (hashmap) -> { // CraftBukkit - decompile error + private static final Item bJ = Items.COOKIE; + private static final Set bK = Sets.newHashSet(new Item[]{Items.WHEAT_SEEDS, Items.MELON_SEEDS, Items.PUMPKIN_SEEDS, Items.BEETROOT_SEEDS}); +- private static final Map, SoundEffect> bL = (Map) SystemUtils.a((Object) Maps.newHashMap(), (hashmap) -> { ++ private static final Map, SoundEffect> bL = (Map) SystemUtils.a(Maps.newHashMap(), (hashmap) -> { // CraftBukkit - decompile error hashmap.put(EntityTypes.BLAZE, SoundEffects.ENTITY_PARROT_IMITATE_BLAZE); hashmap.put(EntityTypes.CAVE_SPIDER, SoundEffects.ENTITY_PARROT_IMITATE_SPIDER); hashmap.put(EntityTypes.CREEPER, SoundEffects.ENTITY_PARROT_IMITATE_CREEPER); @@ -27,7 +27,7 @@ if (entityhuman.isCreative() || !this.isInvulnerable()) { this.damageEntity(DamageSource.playerAttack(entityhuman), Float.MAX_VALUE); } -@@ -334,7 +334,8 @@ +@@ -329,7 +329,8 @@ return false; } else { if (this.goalSit != null) { diff --git a/nms-patches/EntityPigZombie.patch b/nms-patches/EntityPigZombie.patch index d4500c32e0..b6e99b4336 100644 --- a/nms-patches/EntityPigZombie.patch +++ b/nms-patches/EntityPigZombie.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/server/EntityPigZombie.java +++ b/net/minecraft/server/EntityPigZombie.java -@@ -123,16 +123,27 @@ +@@ -134,16 +134,27 @@ } else { Entity entity = damagesource.getEntity(); -- if (entity instanceof EntityHuman && !((EntityHuman) entity).isCreative()) { +- if (entity instanceof EntityHuman && !((EntityHuman) entity).isCreative() && this.hasLineOfSight(entity)) { + // CraftBukkit start + boolean result = super.damageEntity(damagesource, f); + -+ if (result && entity instanceof EntityHuman && !((EntityHuman) entity).isCreative()) { ++ if (result && entity instanceof EntityHuman && !((EntityHuman) entity).isCreative() && this.hasLineOfSight(entity)) { this.a(entity); } @@ -18,13 +18,13 @@ } } - private void a(Entity entity) { -- this.angerLevel = 400 + this.random.nextInt(400); + private boolean a(Entity entity) { +- this.angerLevel = this.ef(); + // CraftBukkit start -+ org.bukkit.event.entity.PigZombieAngerEvent event = new org.bukkit.event.entity.PigZombieAngerEvent((org.bukkit.entity.PigZombie) this.getBukkitEntity(), (entity == null) ? null : entity.getBukkitEntity(), 400 + this.random.nextInt(400)); ++ org.bukkit.event.entity.PigZombieAngerEvent event = new org.bukkit.event.entity.PigZombieAngerEvent((org.bukkit.entity.PigZombie) this.getBukkitEntity(), (entity == null) ? null : entity.getBukkitEntity(), this.ef()); + this.world.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { -+ return; ++ return false; + } + this.angerLevel = event.getNewAnger(); + // CraftBukkit end diff --git a/nms-patches/EntityPillager.patch b/nms-patches/EntityPillager.patch index 42b900ec92..5c27789549 100644 --- a/nms-patches/EntityPillager.patch +++ b/nms-patches/EntityPillager.patch @@ -9,7 +9,7 @@ this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, false)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityIronGolem.class, true)); -@@ -268,6 +268,6 @@ +@@ -258,6 +258,6 @@ @Override public boolean isTypeNotPersistent(double d0) { diff --git a/nms-patches/EntityPlayer.patch b/nms-patches/EntityPlayer.patch index 924d2762e6..2de75bfa5b 100644 --- a/nms-patches/EntityPlayer.patch +++ b/nms-patches/EntityPlayer.patch @@ -83,7 +83,7 @@ + } + + int k = (i * 2 + 1) * (i * 2 + 1); -+ int l = this.s(k); ++ int l = this.t(k); + int i1 = (new Random()).nextInt(k); + + for (int j1 = 0; j1 < k; ++j1) { @@ -105,15 +105,15 @@ private void a(WorldServer worldserver) { BlockPosition blockposition = worldserver.getSpawn(); -@@ -131,6 +208,7 @@ +@@ -133,6 +210,7 @@ if (nbttagcompound.hasKeyOfType("recipeBook", 10)) { this.recipeBook.a(nbttagcompound.getCompound("recipeBook")); } + this.getBukkitEntity().readExtraData(nbttagcompound); // CraftBukkit if (this.isSleeping()) { - this.dy(); -@@ -155,7 +233,20 @@ + this.dz(); +@@ -157,7 +235,20 @@ Entity entity = this.getRootVehicle(); Entity entity1 = this.getVehicle(); @@ -135,13 +135,13 @@ NBTTagCompound nbttagcompound2 = new NBTTagCompound(); NBTTagCompound nbttagcompound3 = new NBTTagCompound(); -@@ -166,7 +257,33 @@ +@@ -168,8 +259,34 @@ } nbttagcompound.set("recipeBook", this.recipeBook.save()); + this.getBukkitEntity().setExtraData(nbttagcompound); // CraftBukkit -+ } -+ + } + + // CraftBukkit start - World fallback code, either respawn location or global spawn + public void spawnIn(World world) { + super.spawnIn(world); @@ -164,12 +164,13 @@ + } + this.dimension = ((WorldServer) this.world).getWorldProvider().getDimensionManager(); + this.playerInteractManager.a((WorldServer) world); - } ++ } + // CraftBukkit end - ++ public void a(int i) { float f = (float) this.getExpToLevel(); -@@ -221,6 +338,11 @@ + float f1 = (f - 1.0F) / f; +@@ -223,6 +340,11 @@ @Override public void tick() { @@ -181,7 +182,7 @@ this.playerInteractManager.a(); --this.invulnerableTicks; if (this.noDamageTicks > 0) { -@@ -288,7 +410,7 @@ +@@ -290,7 +412,7 @@ } if (this.getHealth() != this.lastHealthSent || this.lastFoodSent != this.foodData.getFoodLevel() || this.foodData.getSaturationLevel() == 0.0F != this.lastSentSaturationZero) { @@ -190,7 +191,7 @@ this.lastHealthSent = this.getHealth(); this.lastFoodSent = this.foodData.getFoodLevel(); this.lastSentSaturationZero = this.foodData.getSaturationLevel() == 0.0F; -@@ -319,6 +441,12 @@ +@@ -321,6 +443,12 @@ this.a(IScoreboardCriteria.XP, MathHelper.f((float) this.lastExpTotalScored)); } @@ -203,7 +204,7 @@ if (this.expLevel != this.lastExpLevelScored) { this.lastExpLevelScored = this.expLevel; this.a(IScoreboardCriteria.LEVEL, MathHelper.f((float) this.lastExpLevelScored)); -@@ -333,6 +461,16 @@ +@@ -335,6 +463,16 @@ CriterionTriggers.p.a(this); } @@ -220,7 +221,7 @@ } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Ticking player"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Player being ticked"); -@@ -343,7 +481,8 @@ +@@ -345,7 +483,8 @@ } private void a(IScoreboardCriteria iscoreboardcriteria, int i) { @@ -230,16 +231,16 @@ scoreboardscore.setScore(i); }); } -@@ -351,9 +490,46 @@ +@@ -353,9 +492,46 @@ @Override public void die(DamageSource damagesource) { - boolean flag = this.world.getGameRules().getBoolean("showDeathMessages"); + boolean flag = this.world.getGameRules().getBoolean(GameRules.SHOW_DEATH_MESSAGES); + // CraftBukkit start - fire PlayerDeathEvent + if (this.dead) { + return; + } + java.util.List loot = new java.util.ArrayList(this.inventory.getSize()); -+ boolean keepInventory = this.world.getGameRules().getBoolean("keepInventory") || this.isSpectator(); ++ boolean keepInventory = this.world.getGameRules().getBoolean(GameRules.KEEP_INVENTORY) || this.isSpectator(); + + if (!keepInventory) { + for (ItemStack item : this.inventory.getContents()) { @@ -279,7 +280,7 @@ this.playerConnection.a((Packet) (new PacketPlayOutCombatEvent(this.getCombatTracker(), PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED, ichatbasecomponent)), (future) -> { if (!future.isSuccess()) { -@@ -384,11 +560,16 @@ +@@ -386,11 +562,16 @@ } this.releaseShoulderEntities(); @@ -299,7 +300,7 @@ EntityLiving entityliving = this.getKillingEntity(); if (entityliving != null) { -@@ -431,10 +612,12 @@ +@@ -433,10 +614,12 @@ String s = this.getName(); String s1 = entity.getName(); @@ -314,7 +315,7 @@ } else { this.a(StatisticList.MOB_KILLS); } -@@ -452,7 +635,8 @@ +@@ -454,7 +637,8 @@ int i = scoreboardteam.getColor().b(); if (i >= 0 && i < aiscoreboardcriteria.length) { @@ -324,7 +325,7 @@ } } -@@ -496,16 +680,26 @@ +@@ -498,16 +682,26 @@ } private boolean canPvP() { @@ -354,7 +355,7 @@ this.decouple(); this.getWorldServer().removePlayer(this); if (!this.viewingCredits) { -@@ -518,10 +712,12 @@ +@@ -520,10 +714,12 @@ } else { WorldServer worldserver = this.server.getWorldServer(dimensionmanager1); @@ -368,7 +369,7 @@ this.playerConnection.sendPacket(new PacketPlayOutRespawn(dimensionmanager, worlddata.getType(), this.playerInteractManager.getGameMode())); this.playerConnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); PlayerList playerlist = this.server.getPlayerList(); -@@ -529,6 +725,8 @@ +@@ -531,6 +727,8 @@ playerlist.d(this); worldserver.removePlayer(this); this.dead = false; @@ -377,7 +378,7 @@ double d0 = this.locX; double d1 = this.locY; double d2 = this.locZ; -@@ -538,6 +736,7 @@ +@@ -540,6 +738,7 @@ float f2 = f1; worldserver.getMethodProfiler().enter("moving"); @@ -385,7 +386,7 @@ if (dimensionmanager1 == DimensionManager.OVERWORLD && dimensionmanager == DimensionManager.NETHER) { this.cu = new Vec3D(this.locX, this.locY, this.locZ); d0 /= 8.0D; -@@ -555,6 +754,52 @@ +@@ -557,6 +756,52 @@ f = 0.0F; } @@ -438,7 +439,7 @@ this.setPositionRotation(d0, d1, d2, f1, f); worldserver.getMethodProfiler().exit(); worldserver.getMethodProfiler().enter("placing"); -@@ -566,12 +811,13 @@ +@@ -568,12 +813,13 @@ d0 = MathHelper.a(d0, d4, d6); d2 = MathHelper.a(d2, d5, d7); this.setPositionRotation(d0, d1, d2, f1, f); @@ -453,7 +454,7 @@ for (int l = -2; l <= 2; ++l) { for (int i1 = -2; i1 <= 2; ++i1) { -@@ -581,11 +827,20 @@ +@@ -583,11 +829,20 @@ int i2 = k + i1 * 0 - l * 1; boolean flag2 = j1 < 0; @@ -475,7 +476,7 @@ this.setPositionRotation((double) i, (double) j, (double) k, f1, 0.0F); this.setMot(Vec3D.a); } else if (!worldserver1.getTravelAgent().a(this, f2)) { -@@ -614,11 +869,16 @@ +@@ -616,11 +871,16 @@ this.lastSentExp = -1; this.lastHealthSent = -1.0F; this.lastFoodSent = -1; @@ -493,7 +494,7 @@ DimensionManager dimensionmanager = worldserver.worldProvider.getDimensionManager(); DimensionManager dimensionmanager1 = this.world.worldProvider.getDimensionManager(); -@@ -655,9 +915,16 @@ +@@ -657,9 +917,16 @@ this.activeContainer.c(); } @@ -512,7 +513,7 @@ this.a(StatisticList.SLEEP_IN_BED); CriterionTriggers.q.a(this); }); -@@ -665,6 +932,7 @@ +@@ -667,6 +934,7 @@ @Override public void wakeup(boolean flag, boolean flag1, boolean flag2) { @@ -520,7 +521,7 @@ if (this.isSleeping()) { this.getWorldServer().getChunkProvider().broadcastIncludingSelf(this, new PacketPlayOutAnimation(this, 2)); } -@@ -752,8 +1020,9 @@ +@@ -754,8 +1022,9 @@ this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition())); } @@ -531,7 +532,7 @@ } @Override -@@ -768,6 +1037,17 @@ +@@ -770,6 +1039,17 @@ this.nextContainerCounter(); Container container = itileinventory.createMenu(this.containerCounter, this.inventory, this); @@ -549,7 +550,7 @@ if (container == null) { if (this.isSpectator()) { this.a((new ChatMessage("container.spectatorCantOpen", new Object[0])).a(EnumChatFormat.RED), true); -@@ -775,9 +1055,11 @@ +@@ -777,9 +1057,11 @@ return OptionalInt.empty(); } else { @@ -563,7 +564,7 @@ return OptionalInt.of(this.containerCounter); } } -@@ -790,13 +1072,24 @@ +@@ -792,13 +1074,24 @@ @Override public void openHorseInventory(EntityHorseAbstract entityhorseabstract, IInventory iinventory) { @@ -590,7 +591,7 @@ this.activeContainer.addSlotListener(this); } -@@ -841,6 +1134,11 @@ +@@ -843,6 +1136,11 @@ public void a(Container container, NonNullList nonnulllist) { this.playerConnection.sendPacket(new PacketPlayOutWindowItems(container.windowId, nonnulllist)); this.playerConnection.sendPacket(new PacketPlayOutSetSlot(-1, -1, this.inventory.getCarried())); @@ -602,7 +603,7 @@ } @Override -@@ -850,6 +1148,7 @@ +@@ -852,6 +1150,7 @@ @Override public void closeInventory() { @@ -610,7 +611,7 @@ this.playerConnection.sendPacket(new PacketPlayOutCloseWindow(this.activeContainer.windowId)); this.m(); } -@@ -884,7 +1183,7 @@ +@@ -886,7 +1185,7 @@ @Override public void a(Statistic statistic, int i) { this.serverStatisticManager.b(this, statistic, i); @@ -619,7 +620,7 @@ scoreboardscore.addScore(i); }); } -@@ -892,7 +1191,7 @@ +@@ -894,7 +1193,7 @@ @Override public void a(Statistic statistic) { this.serverStatisticManager.setStatistic(this, statistic, 0); @@ -628,7 +629,7 @@ } @Override -@@ -941,7 +1240,16 @@ +@@ -943,7 +1242,16 @@ public void triggerHealthUpdate() { this.lastHealthSent = -1.0E8F; @@ -645,7 +646,7 @@ @Override public void a(IChatBaseComponent ichatbasecomponent, boolean flag) { -@@ -996,12 +1304,14 @@ +@@ -998,12 +1306,14 @@ this.lastSentExp = -1; this.lastHealthSent = -1.0F; this.lastFoodSent = -1; @@ -661,7 +662,7 @@ } @Override -@@ -1063,6 +1373,18 @@ +@@ -1065,6 +1375,18 @@ @Override public void a(EnumGamemode enumgamemode) { @@ -680,7 +681,7 @@ this.playerInteractManager.setGameMode(enumgamemode); this.playerConnection.sendPacket(new PacketPlayOutGameStateChange(3, (float) enumgamemode.getId())); if (enumgamemode == EnumGamemode.SPECTATOR) { -@@ -1113,6 +1435,17 @@ +@@ -1115,6 +1437,17 @@ } public void a(PacketPlayInSettings packetplayinsettings) { @@ -698,7 +699,7 @@ this.locale = packetplayinsettings.b(); this.ck = packetplayinsettings.d(); this.cl = packetplayinsettings.e(); -@@ -1149,13 +1482,13 @@ +@@ -1151,13 +1484,13 @@ if (entity instanceof EntityHuman) { this.playerConnection.sendPacket(new PacketPlayOutEntityDestroy(new int[]{entity.getId()})); } else { @@ -714,7 +715,7 @@ } @Override -@@ -1179,7 +1512,7 @@ +@@ -1181,7 +1514,7 @@ this.spectatedEntity = (Entity) (entity == null ? this : entity); if (entity1 != this.spectatedEntity) { this.playerConnection.sendPacket(new PacketPlayOutCamera(this.spectatedEntity)); @@ -723,7 +724,7 @@ } } -@@ -1208,7 +1541,7 @@ +@@ -1210,7 +1543,7 @@ @Nullable public IChatBaseComponent getPlayerListName() { @@ -732,7 +733,7 @@ } @Override -@@ -1226,21 +1559,33 @@ +@@ -1228,21 +1561,33 @@ } public void J() { @@ -766,7 +767,7 @@ if (worldserver == this.world) { this.playerConnection.a(d0, d1, d2, f, f1); } else { -@@ -1263,6 +1608,9 @@ +@@ -1265,6 +1610,9 @@ this.server.getPlayerList().a(this, worldserver); this.server.getPlayerList().updateClient(this); } @@ -776,7 +777,7 @@ } -@@ -1314,4 +1662,144 @@ +@@ -1316,4 +1664,144 @@ return entityitem; } } @@ -883,7 +884,7 @@ + + public void reset() { + float exp = 0; -+ boolean keepInventory = this.world.getGameRules().getBoolean("keepInventory"); ++ boolean keepInventory = this.world.getGameRules().getBoolean(GameRules.KEEP_INVENTORY); + + if (this.keepLevel || keepInventory) { + exp = this.exp; diff --git a/nms-patches/EntityRabbit.patch b/nms-patches/EntityRabbit.patch index 04ff0db7b3..0ae946b517 100644 --- a/nms-patches/EntityRabbit.patch +++ b/nms-patches/EntityRabbit.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityRabbit.java +++ b/net/minecraft/server/EntityRabbit.java -@@ -16,8 +16,14 @@ +@@ -17,8 +17,14 @@ super(entitytypes, world); this.bt = new EntityRabbit.ControllerJumpRabbit(this); this.moveController = new EntityRabbit.ControllerMoveRabbit(this); @@ -15,7 +15,7 @@ @Override protected void initPathfinder() { -@@ -285,7 +291,7 @@ +@@ -286,7 +292,7 @@ if (i == 99) { this.getAttributeInstance(GenericAttributes.ARMOR).setValue(8.0D); this.goalSelector.a(4, new EntityRabbit.PathfinderGoalKillerRabbitMeleeAttack(this)); @@ -24,7 +24,7 @@ this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityWolf.class, true)); if (!this.hasCustomName()) { -@@ -413,9 +419,23 @@ +@@ -409,9 +415,23 @@ Integer integer = (Integer) iblockdata.get(BlockCarrots.AGE); if (integer == 0) { diff --git a/nms-patches/EntityRaider.patch b/nms-patches/EntityRaider.patch index fa5280639f..2d89fc266b 100644 --- a/nms-patches/EntityRaider.patch +++ b/nms-patches/EntityRaider.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityRaider.java +++ b/net/minecraft/server/EntityRaider.java -@@ -396,7 +396,7 @@ +@@ -397,7 +397,7 @@ while (iterator.hasNext()) { EntityRaider entityraider = (EntityRaider) iterator.next(); @@ -9,7 +9,7 @@ } } -@@ -413,7 +413,7 @@ +@@ -414,7 +414,7 @@ while (iterator.hasNext()) { EntityRaider entityraider = (EntityRaider) iterator.next(); @@ -18,7 +18,7 @@ entityraider.q(true); } -@@ -487,7 +487,7 @@ +@@ -488,7 +488,7 @@ private final T b; diff --git a/nms-patches/EntitySilverfish.patch b/nms-patches/EntitySilverfish.patch index 83e99013dd..04df3289aa 100644 --- a/nms-patches/EntitySilverfish.patch +++ b/nms-patches/EntitySilverfish.patch @@ -9,7 +9,7 @@ this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); } -@@ -167,6 +167,11 @@ +@@ -161,6 +161,11 @@ IBlockData iblockdata = world.getType(blockposition); if (BlockMonsterEggs.j(iblockdata)) { @@ -21,7 +21,7 @@ world.setTypeAndData(blockposition, BlockMonsterEggs.e(iblockdata.getBlock()), 3); this.a.doSpawnEffect(); this.a.die(); -@@ -213,6 +218,11 @@ +@@ -207,6 +212,11 @@ Block block = iblockdata.getBlock(); if (block instanceof BlockMonsterEggs) { @@ -30,6 +30,6 @@ + continue; + } + // CraftBukkit end - if (world.getGameRules().getBoolean("mobGriefing")) { + if (world.getGameRules().getBoolean(GameRules.MOB_GRIEFING)) { world.b(blockposition1, true); } else { diff --git a/nms-patches/EntitySlime.patch b/nms-patches/EntitySlime.patch index 717f68aadf..0fb38bce66 100644 --- a/nms-patches/EntitySlime.patch +++ b/nms-patches/EntitySlime.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/server/EntitySlime.java +++ b/net/minecraft/server/EntitySlime.java -@@ -2,6 +2,13 @@ - +@@ -3,6 +3,13 @@ import java.util.EnumSet; + import java.util.Random; import javax.annotation.Nullable; +// CraftBukkit start +import java.util.ArrayList; @@ -14,7 +14,7 @@ public class EntitySlime extends EntityInsentient implements IMonster { -@@ -138,7 +145,7 @@ +@@ -139,7 +146,7 @@ @Override public EntityTypes getEntityType() { @@ -23,7 +23,7 @@ } @Override -@@ -148,6 +155,19 @@ +@@ -149,6 +156,19 @@ if (!this.world.isClientSide && i > 1 && this.getHealth() <= 0.0F) { int j = 2 + this.random.nextInt(3); @@ -43,7 +43,7 @@ for (int k = 0; k < j; ++k) { float f = ((float) (k % 2) - 0.5F) * (float) i / 4.0F; float f1 = ((float) (k / 2) - 0.5F) * (float) i / 4.0F; -@@ -163,8 +183,18 @@ +@@ -164,8 +184,18 @@ entityslime.setSize(i / 2, true); entityslime.setPositionRotation(this.locX + (double) f, this.locY + 0.5D, this.locZ + (double) f1, this.random.nextFloat() * 360.0F, 0.0F); diff --git a/nms-patches/EntitySmallFireball.patch b/nms-patches/EntitySmallFireball.patch index a745084735..9daf031ca7 100644 --- a/nms-patches/EntitySmallFireball.patch +++ b/nms-patches/EntitySmallFireball.patch @@ -14,16 +14,16 @@ super(EntityTypes.SMALL_FIREBALL, entityliving, d0, d1, d2, world); + // CraftBukkit start + if (this.shooter != null && this.shooter instanceof EntityInsentient) { -+ isIncendiary = this.world.getGameRules().getBoolean("mobGriefing"); ++ isIncendiary = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING); + } + // CraftBukkit end } public EntitySmallFireball(World world, double d0, double d1, double d2, double d3, double d4, double d5) { -@@ -21,18 +28,27 @@ - Entity entity = ((MovingObjectPositionEntity) movingobjectposition).getEntity(); - +@@ -23,7 +30,16 @@ if (!entity.isFireProof()) { + int i = entity.ad(); + - entity.setOnFire(5); + // CraftBukkit start - Entity damage by entity event + combust event + if (isIncendiary) { @@ -38,10 +38,11 @@ boolean flag = entity.damageEntity(DamageSource.fireball(this, this.shooter), 5.0F); if (flag) { - this.a(this.shooter, entity); +@@ -32,11 +48,11 @@ + entity.g(i); } } -- } else if (this.shooter == null || !(this.shooter instanceof EntityInsentient) || this.world.getGameRules().getBoolean("mobGriefing")) { +- } else if (this.shooter == null || !(this.shooter instanceof EntityInsentient) || this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING)) { + } else if (isIncendiary) { // CraftBukkit MovingObjectPositionBlock movingobjectpositionblock = (MovingObjectPositionBlock) movingobjectposition; BlockPosition blockposition = movingobjectpositionblock.getBlockPosition().shift(movingobjectpositionblock.getDirection()); diff --git a/nms-patches/EntitySnowman.patch b/nms-patches/EntitySnowman.patch index 5920a846ff..2eaaee0231 100644 --- a/nms-patches/EntitySnowman.patch +++ b/nms-patches/EntitySnowman.patch @@ -19,7 +19,7 @@ + this.damageEntity(CraftEventFactory.MELTING, 1.0F); // CraftBukkit - DamageSource.BURN -> CraftEventFactory.MELTING } - if (!this.world.getGameRules().getBoolean("mobGriefing")) { + if (!this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING)) { @@ -78,7 +82,7 @@ BlockPosition blockposition = new BlockPosition(i, j, k); diff --git a/nms-patches/EntityTNTPrimed.patch b/nms-patches/EntityTNTPrimed.patch index 2ed847ee3d..a73c80beb7 100644 --- a/nms-patches/EntityTNTPrimed.patch +++ b/nms-patches/EntityTNTPrimed.patch @@ -30,7 +30,7 @@ + this.die(); + // CraftBukkit end } else { - this.ax(); + this.ay(); this.world.addParticle(Particles.SMOKE, this.locX, this.locY + 0.5D, this.locZ, 0.0D, 0.0D, 0.0D); @@ -72,9 +78,16 @@ } diff --git a/nms-patches/EntityTrackerEntry.patch b/nms-patches/EntityTrackerEntry.patch index c21ccd6eb9..8914685d7a 100644 --- a/nms-patches/EntityTrackerEntry.patch +++ b/nms-patches/EntityTrackerEntry.patch @@ -124,9 +124,9 @@ - public void a(Consumer> consumer) { + public void a(Consumer> consumer, EntityPlayer entityplayer) { // CraftBukkit - add player if (this.tracker.dead) { -- EntityTrackerEntry.LOGGER.warn("Fetching addPacket for removed entity"); +- EntityTrackerEntry.LOGGER.warn("Fetching packet for removed entity " + this.tracker); + // CraftBukkit start - Remove useless error spam, just return -+ // EntityTrackerEntry.LOGGER.warn("Fetching addPacket for removed entity") ++ // EntityTrackerEntry.LOGGER.warn("Fetching packet for removed entity " + this.tracker); + return; + // CraftBukkit end } diff --git a/nms-patches/EntityTurtle.patch b/nms-patches/EntityTurtle.patch index ecdc21bd89..ad8160f277 100644 --- a/nms-patches/EntityTurtle.patch +++ b/nms-patches/EntityTurtle.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/server/EntityTurtle.java +++ b/net/minecraft/server/EntityTurtle.java -@@ -258,7 +258,9 @@ +@@ -254,7 +254,9 @@ protected void l() { super.l(); - if (!this.isBaby() && this.world.getGameRules().getBoolean("doMobLoot")) { + if (!this.isBaby() && this.world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) { + this.forceDrops = true; // CraftBukkit this.a((IMaterial) Items.SCUTE, 1); + this.forceDrops = false; // CraftBukkit } } -@@ -285,7 +287,9 @@ +@@ -281,7 +283,9 @@ @Override public void onLightningStrike(EntityLightning entitylightning) { @@ -20,8 +20,8 @@ } static class g extends NavigationGuardian { -@@ -445,8 +449,12 @@ - } else if (this.g.bH > 200) { +@@ -441,8 +445,12 @@ + } else if (this.g.bG > 200) { World world = this.g.world; + // CraftBukkit start @@ -33,7 +33,7 @@ this.g.r(false); this.g.s(false); this.g.setLoveTicks(600); -@@ -532,7 +540,7 @@ +@@ -528,7 +536,7 @@ --this.e; return false; } else { diff --git a/nms-patches/EntityVillager.patch b/nms-patches/EntityVillager.patch index c563072b33..5c82eabcf3 100644 --- a/nms-patches/EntityVillager.patch +++ b/nms-patches/EntityVillager.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityVillager.java +++ b/net/minecraft/server/EntityVillager.java -@@ -17,6 +17,16 @@ +@@ -16,6 +16,16 @@ import java.util.function.BiPredicate; import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -17,7 +17,7 @@ public class EntityVillager extends EntityVillagerAbstract implements ReputationHandler, VillagerDataHolder { -@@ -62,7 +72,7 @@ +@@ -58,7 +68,7 @@ @Override public BehaviorController getBehaviorController() { @@ -26,16 +26,16 @@ } @Override -@@ -126,7 +136,7 @@ +@@ -122,7 +132,7 @@ @Override protected void mobTick() { this.world.getMethodProfiler().enter("brain"); - this.getBehaviorController().a((WorldServer) this.world, (EntityLiving) this); + this.getBehaviorController().a((WorldServer) this.world, this); // CraftBukkit - decompile error this.world.getMethodProfiler().exit(); - if (!this.dY() && this.bE > 0) { + if (!this.dZ() && this.bE > 0) { --this.bE; -@@ -136,7 +146,7 @@ +@@ -132,7 +142,7 @@ this.bF = false; } @@ -44,7 +44,7 @@ } } -@@ -258,7 +268,14 @@ +@@ -278,7 +288,14 @@ while (iterator.hasNext()) { MerchantRecipe merchantrecipe = (MerchantRecipe) iterator.next(); @@ -60,7 +60,7 @@ } } -@@ -564,7 +581,12 @@ +@@ -598,7 +615,12 @@ entitywitch.setCustomNameVisible(this.getCustomNameVisible()); } @@ -74,21 +74,30 @@ this.die(); } -@@ -737,7 +759,7 @@ - - if (entityirongolem != null) { - if (entityirongolem.a((GeneratorAccess) this.world, EnumMobSpawn.MOB_SUMMONED) && entityirongolem.a((IWorldReader) this.world)) { -- this.world.addEntity(entityirongolem); -+ this.world.addEntity(entityirongolem, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.VILLAGE_DEFENSE); // CraftBukkit - return entityirongolem; - } - -@@ -787,7 +809,7 @@ - EntityVillager.a entityvillager_a = (EntityVillager.a) this.getBehaviorController().getMemory(MemoryModuleType.GOLEM_SPAWN_CONDITIONS).orElseGet(EntityVillager.a::new); - - entityvillager_a.b(this.world.getTime()); -- this.br.setMemory(MemoryModuleType.GOLEM_SPAWN_CONDITIONS, (Object) entityvillager_a); -+ this.br.setMemory(MemoryModuleType.GOLEM_SPAWN_CONDITIONS, entityvillager_a); // CraftBukkit - decompile error +@@ -730,7 +752,7 @@ } - public static final class a { + private void b(long i) { +- this.br.setMemory(MemoryModuleType.GOLEM_LAST_SEEN_TIME, (Object) i); ++ this.br.setMemory(MemoryModuleType.GOLEM_LAST_SEEN_TIME, i); // CraftBukkit - decompile error + } + + private boolean c(long i) { +@@ -779,7 +801,7 @@ + + if (entityirongolem != null) { + if (entityirongolem.a((GeneratorAccess) this.world, EnumMobSpawn.MOB_SUMMONED) && entityirongolem.a((IWorldReader) this.world)) { +- this.world.addEntity(entityirongolem); ++ this.world.addEntity(entityirongolem, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.VILLAGE_DEFENSE); // CraftBukkit + return entityirongolem; + } + +@@ -830,7 +852,7 @@ + @Override + public void e(BlockPosition blockposition) { + super.e(blockposition); +- this.br.setMemory(MemoryModuleType.LAST_SLEPT, (Object) MinecraftSerializableLong.a(this.world.getTime())); ++ this.br.setMemory(MemoryModuleType.LAST_SLEPT, MinecraftSerializableLong.a(this.world.getTime())); // CraftBukkit - decompile error + } + + private boolean d(long i) { diff --git a/nms-patches/EntityVillagerAbstract.patch b/nms-patches/EntityVillagerAbstract.patch index fe53b77ce4..1e4f05de76 100644 --- a/nms-patches/EntityVillagerAbstract.patch +++ b/nms-patches/EntityVillagerAbstract.patch @@ -32,7 +32,7 @@ public EntityVillagerAbstract(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -204,7 +219,16 @@ +@@ -221,7 +236,16 @@ MerchantRecipe merchantrecipe = villagertrades_imerchantrecipeoption.a(this, this.random); if (merchantrecipe != null) { diff --git a/nms-patches/EntityWither.patch b/nms-patches/EntityWither.patch index 6592f3b40e..b8ceee7a48 100644 --- a/nms-patches/EntityWither.patch +++ b/nms-patches/EntityWither.patch @@ -15,9 +15,9 @@ private static final DataWatcherObject b = DataWatcher.a(EntityWither.class, DataWatcherRegistry.b); @@ -188,14 +195,38 @@ - i = this.dV() - 1; + i = this.dW() - 1; if (i <= 0) { - Explosion.Effect explosion_effect = this.world.getGameRules().getBoolean("mobGriefing") ? Explosion.Effect.DESTROY : Explosion.Effect.NONE; + Explosion.Effect explosion_effect = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Effect.DESTROY : Explosion.Effect.NONE; + // CraftBukkit start + // this.world.createExplosion(this, this.locX, this.locY + (double) this.getHeadHeight(), this.locZ, 7.0F, false, explosion_effect); + ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), 7.0F, false); @@ -49,7 +49,7 @@ + // CraftBukkit end } - this.q(i); + this.r(i); if (this.ticksLived % 10 == 0) { - this.heal(10.0F); + this.heal(10.0F, EntityRegainHealthEvent.RegainReason.WITHER_SPAWN); // CraftBukkit diff --git a/nms-patches/EntityWitherSkull.patch b/nms-patches/EntityWitherSkull.patch index a98022df9b..ae6c43fcad 100644 --- a/nms-patches/EntityWitherSkull.patch +++ b/nms-patches/EntityWitherSkull.patch @@ -32,7 +32,7 @@ } } - Explosion.Effect explosion_effect = this.world.getGameRules().getBoolean("mobGriefing") ? Explosion.Effect.DESTROY : Explosion.Effect.NONE; + Explosion.Effect explosion_effect = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Effect.DESTROY : Explosion.Effect.NONE; - this.world.createExplosion(this, this.locX, this.locY, this.locZ, 1.0F, false, explosion_effect); + // CraftBukkit start diff --git a/nms-patches/EntityWolf.patch b/nms-patches/EntityWolf.patch index b7f7fcc2a5..33f76992f6 100644 --- a/nms-patches/EntityWolf.patch +++ b/nms-patches/EntityWolf.patch @@ -18,7 +18,7 @@ this.targetSelector.a(2, new PathfinderGoalOwnerHurtTarget(this)); - this.targetSelector.a(3, (new PathfinderGoalHurtByTarget(this, new Class[0])).a()); + this.targetSelector.a(3, (new PathfinderGoalHurtByTarget(this, new Class[0])).a(new Class[0])); // CraftBukkit - decompile error - this.targetSelector.a(4, new PathfinderGoalRandomTargetNonTamed<>(this, EntityAnimal.class, false, EntityWolf.bD)); + this.targetSelector.a(4, new PathfinderGoalRandomTargetNonTamed<>(this, EntityAnimal.class, false, EntityWolf.bC)); this.targetSelector.a(4, new PathfinderGoalRandomTargetNonTamed<>(this, EntityTurtle.class, false, EntityTurtle.bz)); this.targetSelector.a(5, new PathfinderGoalNearestAttackableTarget<>(this, EntitySkeletonAbstract.class, false)); @@ -61,6 +66,22 @@ diff --git a/nms-patches/EntityZombieHusk.patch b/nms-patches/EntityZombieHusk.patch index 96da7f5499..d566ec1f67 100644 --- a/nms-patches/EntityZombieHusk.patch +++ b/nms-patches/EntityZombieHusk.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/EntityZombieHusk.java +++ b/net/minecraft/server/EntityZombieHusk.java -@@ -43,7 +43,7 @@ +@@ -44,7 +44,7 @@ if (flag && this.getItemInMainHand().isEmpty() && entity instanceof EntityLiving) { float f = this.world.getDamageScaler(new BlockPosition(this)).b(); diff --git a/nms-patches/FoodMetaData.patch b/nms-patches/FoodMetaData.patch index 316c443b12..fef68df322 100644 --- a/nms-patches/FoodMetaData.patch +++ b/nms-patches/FoodMetaData.patch @@ -64,7 +64,7 @@ this.a(f); this.foodTickTimer = 0; } - } else if (flag && this.foodLevel >= 18 && entityhuman.dP()) { + } else if (flag && this.foodLevel >= 18 && entityhuman.dQ()) { ++this.foodTickTimer; if (this.foodTickTimer >= 80) { - entityhuman.heal(1.0F); diff --git a/nms-patches/FurnaceRecipe.patch b/nms-patches/FurnaceRecipe.patch index 8d6ae7e2f4..7fa648634b 100644 --- a/nms-patches/FurnaceRecipe.patch +++ b/nms-patches/FurnaceRecipe.patch @@ -19,7 +19,7 @@ public FurnaceRecipe(MinecraftKey minecraftkey, String s, RecipeItemStack recipeitemstack, ItemStack itemstack, float f, int i) { @@ -10,4 +21,14 @@ public RecipeSerializer getRecipeSerializer() { - return RecipeSerializer.o; + return RecipeSerializer.p; } + + @Override diff --git a/nms-patches/IMerchant.patch b/nms-patches/IMerchant.patch index a7eac44dd2..60513a4c15 100644 --- a/nms-patches/IMerchant.patch +++ b/nms-patches/IMerchant.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/IMerchant.java +++ b/net/minecraft/server/IMerchant.java -@@ -40,4 +40,6 @@ +@@ -44,4 +44,6 @@ } } diff --git a/nms-patches/InventorySubcontainer.patch b/nms-patches/InventorySubcontainer.patch index 470f422537..6f6421f372 100644 --- a/nms-patches/InventorySubcontainer.patch +++ b/nms-patches/InventorySubcontainer.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/server/InventorySubcontainer.java +++ b/net/minecraft/server/InventorySubcontainer.java -@@ -4,13 +4,64 @@ - import java.util.Iterator; +@@ -5,13 +5,64 @@ import java.util.List; + import java.util.stream.Collectors; +// CraftBukkit start +import org.bukkit.Location; diff --git a/nms-patches/ItemBow.patch b/nms-patches/ItemBow.patch index bad2f67dc1..8296c83a5a 100644 --- a/nms-patches/ItemBow.patch +++ b/nms-patches/ItemBow.patch @@ -7,10 +7,10 @@ + // CraftBukkit start - obfuscator went a little crazy + /* this.a(new MinecraftKey("pull"), (itemstack, world, entityliving) -> { - return entityliving == null ? 0.0F : (entityliving.dl().getItem() != Items.BOW ? 0.0F : (float) (itemstack.k() - entityliving.dm()) / 20.0F); + return entityliving == null ? 0.0F : (entityliving.dm().getItem() != Items.BOW ? 0.0F : (float) (itemstack.k() - entityliving.dn()) / 20.0F); }); this.a(new MinecraftKey("pulling"), (itemstack, world, entityliving) -> { - return entityliving != null && entityliving.isHandRaised() && entityliving.dl() == itemstack ? 1.0F : 0.0F; + return entityliving != null && entityliving.isHandRaised() && entityliving.dm() == itemstack ? 1.0F : 0.0F; }); + */ + // CraftBukkit end diff --git a/nms-patches/ItemCrossbow.patch b/nms-patches/ItemCrossbow.patch index 3b251852a2..7ad3d24b9b 100644 --- a/nms-patches/ItemCrossbow.patch +++ b/nms-patches/ItemCrossbow.patch @@ -7,7 +7,7 @@ + // CraftBukkit start - obfuscator went a little crazy + /* this.a(new MinecraftKey("pull"), (itemstack, world, entityliving) -> { - return entityliving != null && itemstack.getItem() == this ? (d(itemstack) ? 0.0F : (float) (itemstack.k() - entityliving.dm()) / (float) e(itemstack)) : 0.0F; + return entityliving != null && itemstack.getItem() == this ? (d(itemstack) ? 0.0F : (float) (itemstack.k() - entityliving.dn()) / (float) e(itemstack)) : 0.0F; }); @@ -24,6 +26,8 @@ this.a(new MinecraftKey("firework"), (itemstack, world, entityliving) -> { diff --git a/nms-patches/ItemTrident.patch b/nms-patches/ItemTrident.patch index 7c9d375cc2..b32e8d028f 100644 --- a/nms-patches/ItemTrident.patch +++ b/nms-patches/ItemTrident.patch @@ -7,7 +7,7 @@ + // CraftBukkit start - obfuscator went a little crazy + /* this.a(new MinecraftKey("throwing"), (itemstack, world, entityliving) -> { - return entityliving != null && entityliving.isHandRaised() && entityliving.dl() == itemstack ? 1.0F : 0.0F; + return entityliving != null && entityliving.isHandRaised() && entityliving.dm() == itemstack ? 1.0F : 0.0F; }); + */ + // CraftBukkit end diff --git a/nms-patches/MinecraftServer.patch b/nms-patches/MinecraftServer.patch index 18c692c3a6..9c5f37fc11 100644 --- a/nms-patches/MinecraftServer.patch +++ b/nms-patches/MinecraftServer.patch @@ -23,18 +23,18 @@ private PlayerList playerList; private volatile boolean isRunning = true; private boolean isStopped; -@@ -104,7 +111,7 @@ +@@ -103,7 +110,7 @@ private final GameProfileRepository gameProfileRepository; private final UserCache userCache; - private long Z; + private long Y; - public final Thread serverThread = (Thread) SystemUtils.a((Object) (new Thread(this, "Server thread")), (thread) -> { + public final Thread serverThread = (Thread) SystemUtils.a((new Thread(this, "Server thread")), (thread) -> { // CraftBukkit - decompile error thread.setUncaughtExceptionHandler((thread1, throwable) -> { MinecraftServer.LOGGER.error(throwable); }); -@@ -133,7 +140,21 @@ +@@ -132,7 +139,21 @@ @Nullable - private String av; + private String au; - public MinecraftServer(File file, Proxy proxy, DataFixer datafixer, CommandDispatcher commanddispatcher, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache, WorldLoadListenerFactory worldloadlistenerfactory, String s) { + // CraftBukkit start @@ -53,11 +53,11 @@ + + public MinecraftServer(OptionSet options, Proxy proxy, DataFixer datafixer, CommandDispatcher commanddispatcher, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache, WorldLoadListenerFactory worldloadlistenerfactory, String s) { super("Server"); - this.ae = new ResourceManager(EnumResourcePackType.SERVER_DATA, this.serverThread); + this.ad = new ResourceManager(EnumResourcePackType.SERVER_DATA, this.serverThread); this.resourcePackRepository = new ResourcePackRepository<>(ResourcePackLoader::new); -@@ -146,15 +167,15 @@ - this.ao = new CustomFunctionData(this); - this.ap = new CircularTimer(); +@@ -145,15 +166,15 @@ + this.an = new CustomFunctionData(this); + this.ao = new CircularTimer(); this.proxy = proxy; - this.commandDispatcher = commanddispatcher; + this.commandDispatcher = this.vanillaCommandDispatcher = commanddispatcher; // CraftBukkit @@ -73,12 +73,12 @@ - this.convertable = new Convertable(file.toPath(), file.toPath().resolve("../backups"), datafixer); + // this.convertable = new Convertable(file.toPath(), file.toPath().resolve("../backups"), datafixer); // CraftBukkit - moved to DedicatedServer.init this.dataConverterManager = datafixer; - this.ae.a((IReloadListener) this.aj); - this.ae.a((IReloadListener) this.ai); -@@ -163,7 +184,32 @@ - this.ae.a((IReloadListener) this.an); + this.ad.a((IReloadListener) this.ai); + this.ad.a((IReloadListener) this.ah); +@@ -162,7 +183,32 @@ + this.ad.a((IReloadListener) this.am); this.executorService = SystemUtils.e(); - this.K = s; + this.J = s; + // CraftBukkit start + this.options = options; + // Try to see if we're actually running in a terminal, disable jline if not @@ -108,7 +108,7 @@ private void initializeScoreboards(WorldPersistentData worldpersistentdata) { PersistentScoreboard persistentscoreboard = (PersistentScoreboard) worldpersistentdata.a(PersistentScoreboard::new, "scoreboard"); -@@ -199,11 +245,11 @@ +@@ -198,11 +244,11 @@ } if (this.forceUpgrade) { @@ -123,7 +123,7 @@ IChatBaseComponent ichatbasecomponent = null; while (!worldupgrader.b()) { -@@ -242,8 +288,9 @@ +@@ -241,8 +287,9 @@ } protected void a(String s, String s1, long i, WorldType worldtype, JsonElement jsonelement) { @@ -134,7 +134,7 @@ WorldNBTStorage worldnbtstorage = this.getConvertable().a(s, this); this.a(this.getWorld(), worldnbtstorage); -@@ -268,24 +315,134 @@ +@@ -267,24 +314,134 @@ } this.a(worldnbtstorage.getDirectory(), worlddata); @@ -263,26 +263,26 @@ + this.server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.POSTWORLD); + this.server.getPluginManager().callEvent(new ServerLoadEvent(ServerLoadEvent.LoadType.STARTUP)); + // CraftBukkit end - -- this.worldServer.put(DimensionManager.OVERWORLD, worldserver); -- this.initializeScoreboards(worldserver.getWorldPersistentData()); -- worldserver.getWorldBorder().b(worlddata); -- WorldServer worldserver1 = this.getWorldServer(DimensionManager.OVERWORLD); ++ + } + + // CraftBukkit start + public void initWorld(WorldServer worldserver1, WorldData worlddata, WorldSettings worldsettings) { + worldserver1.getWorldBorder().b(worlddata); -+ + +- this.worldServer.put(DimensionManager.OVERWORLD, worldserver); +- this.initializeScoreboards(worldserver.getWorldPersistentData()); +- worldserver.getWorldBorder().b(worlddata); +- WorldServer worldserver1 = this.getWorldServer(DimensionManager.OVERWORLD); + // CraftBukkit start + if (worldserver1.generator != null) { + worldserver1.getWorld().getPopulators().addAll(worldserver1.generator.getDefaultPopulators(worldserver1.getWorld())); + } + // CraftBukkit end - if (!worlddata.v()) { + if (!worlddata.u()) { try { -@@ -309,23 +466,8 @@ +@@ -308,23 +465,8 @@ worlddata.d(true); } @@ -307,7 +307,7 @@ private void a(WorldData worlddata) { worlddata.f(false); -@@ -344,6 +486,25 @@ +@@ -343,6 +485,25 @@ protected void a(File file, WorldData worlddata) { this.resourcePackRepository.a((ResourcePackSource) (new ResourcePackSourceVanilla())); this.resourcePackFolder = new ResourcePackSourceFolder(new File(file, "datapacks")); @@ -333,7 +333,7 @@ this.resourcePackRepository.a((ResourcePackSource) this.resourcePackFolder); this.resourcePackRepository.a(); List list = Lists.newArrayList(); -@@ -364,11 +525,18 @@ +@@ -363,11 +524,18 @@ this.b(worlddata); } @@ -355,7 +355,7 @@ BlockPosition blockposition = worldserver.getSpawn(); worldloadlistener.a(new ChunkCoordIntPair(blockposition)); -@@ -379,17 +547,21 @@ +@@ -378,17 +546,21 @@ chunkproviderserver.addTicket(TicketType.START, new ChunkCoordIntPair(blockposition), 11, Unit.INSTANCE); while (chunkproviderserver.b() != 441) { @@ -386,7 +386,7 @@ if (forcedchunk != null) { WorldServer worldserver1 = this.getWorldServer(dimensionmanager); -@@ -404,10 +576,16 @@ +@@ -403,10 +575,16 @@ } } @@ -405,7 +405,7 @@ } protected void a(String s, WorldNBTStorage worldnbtstorage) { -@@ -450,14 +628,14 @@ +@@ -449,14 +627,14 @@ } catch (ExceptionWorldConflict exceptionworldconflict) { MinecraftServer.LOGGER.warn(exceptionworldconflict.getMessage()); } @@ -422,7 +422,7 @@ return flag3; } -@@ -466,8 +644,29 @@ +@@ -465,8 +643,29 @@ this.stop(); } @@ -452,7 +452,7 @@ if (this.getServerConnection() != null) { this.getServerConnection().b(); } -@@ -476,6 +675,7 @@ +@@ -475,6 +674,7 @@ MinecraftServer.LOGGER.info("Saving players"); this.playerList.savePlayers(); this.playerList.shutdown(); @@ -460,7 +460,7 @@ } MinecraftServer.LOGGER.info("Saving worlds"); -@@ -545,14 +745,16 @@ +@@ -544,14 +744,16 @@ while (this.isRunning) { long i = SystemUtils.getMonotonicMillis() - this.nextTick; @@ -476,9 +476,9 @@ + MinecraftServer.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit this.nextTick += 50L; - if (this.T) { - this.T = false; -@@ -599,6 +801,12 @@ + if (this.S) { + this.S = false; +@@ -598,6 +800,12 @@ } catch (Throwable throwable1) { MinecraftServer.LOGGER.error("Exception stopping the server", throwable1); } finally { @@ -491,25 +491,24 @@ this.exit(); } -@@ -607,9 +815,16 @@ +@@ -606,8 +814,15 @@ } private boolean canSleepForTick() { -- return this.isEntered() || SystemUtils.getMonotonicMillis() < (this.ac ? this.ab : this.nextTick); +- return this.isEntered() || SystemUtils.getMonotonicMillis() < (this.ab ? this.aa : this.nextTick); + // CraftBukkit start -+ return this.forceTicks || this.isEntered() || SystemUtils.getMonotonicMillis() < (this.ac ? this.ab : this.nextTick); - } - ++ return this.forceTicks || this.isEntered() || SystemUtils.getMonotonicMillis() < (this.ab ? this.aa : this.nextTick); ++ } ++ + private void executeModerately() { + this.executeAll(); + java.util.concurrent.locks.LockSupport.parkNanos("executing tasks", 1000L); -+ } + } + // CraftBukkit end -+ + protected void sleepForTick() { this.executeAll(); - this.awaitTasks(() -> { -@@ -709,7 +924,7 @@ +@@ -708,7 +923,7 @@ this.serverPing.b().a(agameprofile); } @@ -518,7 +517,7 @@ MinecraftServer.LOGGER.debug("Autosave started"); this.methodProfiler.enter("save"); this.playerList.savePlayers(); -@@ -739,27 +954,43 @@ +@@ -738,23 +953,40 @@ } protected void b(BooleanSupplier booleansupplier) { @@ -526,8 +525,8 @@ this.methodProfiler.enter("commandFunctions"); this.getFunctionData().tick(); this.methodProfiler.exitEnter("levels"); + Iterator iterator = this.getWorlds().iterator(); -- WorldServer worldserver; + // CraftBukkit start + // Run tasks that are waiting on processing + while (!processQueue.isEmpty()) { @@ -538,21 +537,13 @@ + if (this.ticks % 20 == 0) { + for (int i = 0; i < this.getPlayerList().players.size(); ++i) { + EntityPlayer entityplayer = (EntityPlayer) this.getPlayerList().players.get(i); -+ entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(entityplayer.world.getTime(), entityplayer.getPlayerTime(), entityplayer.world.getGameRules().getBoolean("doDaylightCycle"))); // Add support for per player time ++ entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(entityplayer.world.getTime(), entityplayer.getPlayerTime(), entityplayer.world.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE))); // Add support for per player time + } + } + -+ // WorldServer worldserver; // CraftBukkit - dropped down - long i; + while (iterator.hasNext()) { + WorldServer worldserver = (WorldServer) iterator.next(); -- for (Iterator iterator = this.getWorlds().iterator(); iterator.hasNext();((long[]) this.g.computeIfAbsent(worldserver.worldProvider.getDimensionManager(), (dimensionmanager) -> { -- return new long[100]; -- }))[this.ticks % 100] = SystemUtils.getMonotonicNanos() - i) { -- worldserver = (WorldServer) iterator.next(); -+ // CraftBukkit - dropTickTime -+ for (Iterator iterator = this.getWorlds().iterator(); iterator.hasNext();) { -+ WorldServer worldserver = (WorldServer) iterator.next(); - i = SystemUtils.getMonotonicNanos(); - if (worldserver.worldProvider.getDimensionManager() == DimensionManager.OVERWORLD || this.getAllowNether()) { + if (true || worldserver.worldProvider.getDimensionManager() == DimensionManager.OVERWORLD || this.getAllowNether()) { // CraftBukkit this.methodProfiler.a(() -> { @@ -561,14 +552,14 @@ + /* Drop global time updates if (this.ticks % 20 == 0) { this.methodProfiler.enter("timeSync"); - this.playerList.a((Packet) (new PacketPlayOutUpdateTime(worldserver.getTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean("doDaylightCycle"))), worldserver.worldProvider.getDimensionManager()); + this.playerList.a((Packet) (new PacketPlayOutUpdateTime(worldserver.getTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE))), worldserver.worldProvider.getDimensionManager()); this.methodProfiler.exit(); } + // CraftBukkit end */ this.methodProfiler.enter("tick"); -@@ -798,7 +1029,8 @@ +@@ -793,7 +1025,8 @@ this.tickables.add(runnable); } @@ -578,7 +569,7 @@ OptionParser optionparser = new OptionParser(); OptionSpec optionspec = optionparser.accepts("nogui"); OptionSpec optionspec1 = optionparser.accepts("initSettings", "Initializes 'server.properties' and 'eula.txt', then quits"); -@@ -821,15 +1053,17 @@ +@@ -816,15 +1049,17 @@ optionparser.printHelpOn(System.err); return; } @@ -598,7 +589,7 @@ MinecraftServer.LOGGER.info("Initialized '" + java_nio_file_path.toAbsolutePath().toString() + "' and '" + java_nio_file_path1.toAbsolutePath().toString() + "'"); return; } -@@ -841,14 +1075,15 @@ +@@ -836,14 +1071,15 @@ DispenserRegistry.init(); DispenserRegistry.c(); @@ -617,7 +608,7 @@ dedicatedserver.i((String) optionset.valueOf(optionspec7)); dedicatedserver.setPort((Integer) optionset.valueOf(optionspec10)); dedicatedserver.e(optionset.has(optionspec2)); -@@ -871,6 +1106,29 @@ +@@ -866,6 +1102,29 @@ thread.setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(MinecraftServer.LOGGER)); Runtime.getRuntime().addShutdownHook(thread); @@ -647,7 +638,7 @@ } catch (Exception exception) { MinecraftServer.LOGGER.fatal("Failed to start the minecraft server", exception); } -@@ -890,7 +1148,9 @@ +@@ -885,7 +1144,9 @@ } public void startServerThread() { @@ -657,7 +648,7 @@ } public File d(String s) { -@@ -945,7 +1205,7 @@ +@@ -940,7 +1201,7 @@ } public String getServerModName() { @@ -666,7 +657,7 @@ } public CrashReport b(CrashReport crashreport) { -@@ -984,7 +1244,7 @@ +@@ -979,7 +1240,7 @@ } public boolean E() { @@ -675,7 +666,7 @@ } @Override -@@ -1480,4 +1740,16 @@ +@@ -1482,4 +1743,16 @@ } public abstract boolean b(GameProfile gameprofile); diff --git a/nms-patches/MobEffectList.patch b/nms-patches/MobEffectList.patch index b06d95ac84..a36ff31d9d 100644 --- a/nms-patches/MobEffectList.patch +++ b/nms-patches/MobEffectList.patch @@ -53,8 +53,8 @@ + ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutUpdateHealth(((EntityPlayer) entityhuman).getBukkitEntity().getScaledHealth(), entityhuman.getFoodData().foodLevel, entityhuman.getFoodData().saturationLevel)); + // CraftBukkit end } - } else if ((this != MobEffects.HEAL || entityliving.cB()) && (this != MobEffects.HARM || !entityliving.cB())) { - if (this == MobEffects.HARM && !entityliving.cB() || this == MobEffects.HEAL && entityliving.cB()) { + } else if ((this != MobEffects.HEAL || entityliving.cC()) && (this != MobEffects.HARM || !entityliving.cC())) { + if (this == MobEffects.HARM && !entityliving.cC() || this == MobEffects.HEAL && entityliving.cC()) { entityliving.damageEntity(DamageSource.MAGIC, (float) (6 << i)); } } else { diff --git a/nms-patches/PathfinderGoalBreed.patch b/nms-patches/PathfinderGoalBreed.patch index 9ec21c11b1..439bde2e32 100644 --- a/nms-patches/PathfinderGoalBreed.patch +++ b/nms-patches/PathfinderGoalBreed.patch @@ -32,7 +32,7 @@ - this.b.addEntity(entityageable); + this.b.addEntity(entityageable, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason this.b.broadcastEntityEffect(this.animal, (byte) 18); - if (this.b.getGameRules().getBoolean("doMobLoot")) { + if (this.b.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) { - this.b.addEntity(new EntityExperienceOrb(this.b, this.animal.locX, this.animal.locY, this.animal.locZ, this.animal.getRandom().nextInt(7) + 1)); + // CraftBukkit start - use event experience + if (experience > 0) { diff --git a/nms-patches/PathfinderGoalEatTile.patch b/nms-patches/PathfinderGoalEatTile.patch index c4401a5641..d1d01cd4b2 100644 --- a/nms-patches/PathfinderGoalEatTile.patch +++ b/nms-patches/PathfinderGoalEatTile.patch @@ -15,9 +15,9 @@ BlockPosition blockposition = new BlockPosition(this.b); if (PathfinderGoalEatTile.a.test(this.c.getType(blockposition))) { -- if (this.c.getGameRules().getBoolean("mobGriefing")) { +- if (this.c.getGameRules().getBoolean(GameRules.MOB_GRIEFING)) { + // CraftBukkit -+ if (!CraftEventFactory.callEntityChangeBlockEvent(this.b, blockposition, Blocks.AIR.getBlockData(), !this.c.getGameRules().getBoolean("mobGriefing")).isCancelled()) { ++ if (!CraftEventFactory.callEntityChangeBlockEvent(this.b, blockposition, Blocks.AIR.getBlockData(), !this.c.getGameRules().getBoolean(GameRules.MOB_GRIEFING)).isCancelled()) { this.c.b(blockposition, false); } @@ -25,9 +25,9 @@ BlockPosition blockposition1 = blockposition.down(); if (this.c.getType(blockposition1).getBlock() == Blocks.GRASS_BLOCK) { -- if (this.c.getGameRules().getBoolean("mobGriefing")) { +- if (this.c.getGameRules().getBoolean(GameRules.MOB_GRIEFING)) { + // CraftBukkit -+ if (!CraftEventFactory.callEntityChangeBlockEvent(this.b, blockposition, Blocks.AIR.getBlockData(), !this.c.getGameRules().getBoolean("mobGriefing")).isCancelled()) { ++ if (!CraftEventFactory.callEntityChangeBlockEvent(this.b, blockposition, Blocks.AIR.getBlockData(), !this.c.getGameRules().getBoolean(GameRules.MOB_GRIEFING)).isCancelled()) { this.c.triggerEffect(2001, blockposition1, Block.getCombinedId(Blocks.GRASS_BLOCK.getBlockData())); this.c.setTypeAndData(blockposition1, Blocks.DIRT.getBlockData(), 2); } diff --git a/nms-patches/PathfinderGoalHurtByTarget.patch b/nms-patches/PathfinderGoalHurtByTarget.patch index 5c84e4bac2..65e82f3f6c 100644 --- a/nms-patches/PathfinderGoalHurtByTarget.patch +++ b/nms-patches/PathfinderGoalHurtByTarget.patch @@ -7,7 +7,7 @@ - this.e.setGoalTarget(this.e.getLastDamager()); + this.e.setGoalTarget(this.e.getLastDamager(), org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_ATTACKED_ENTITY, true); // CraftBukkit - reason this.g = this.e.getGoalTarget(); - this.c = this.e.cs(); + this.c = this.e.ct(); this.h = 300; @@ -95,6 +95,6 @@ } diff --git a/nms-patches/PathfinderGoalSit.patch b/nms-patches/PathfinderGoalSit.patch index cd751f9fbe..e9a31a98fb 100644 --- a/nms-patches/PathfinderGoalSit.patch +++ b/nms-patches/PathfinderGoalSit.patch @@ -6,6 +6,6 @@ if (!this.entity.isTamed()) { - return false; + return this.willSit && this.entity.getGoalTarget() == null; // CraftBukkit - Allow sitting for wild animals - } else if (this.entity.au()) { + } else if (this.entity.av()) { return false; } else if (!this.entity.onGround) { diff --git a/nms-patches/PlayerChunk.patch b/nms-patches/PlayerChunk.patch index fe3f0a675b..ed35ece4ac 100644 --- a/nms-patches/PlayerChunk.patch +++ b/nms-patches/PlayerChunk.patch @@ -25,7 +25,7 @@ public CompletableFuture> getStatusFutureUnchecked(ChunkStatus chunkstatus) { CompletableFuture> completablefuture = (CompletableFuture) this.statusFutures.get(chunkstatus.c()); -@@ -72,9 +81,9 @@ +@@ -76,9 +85,9 @@ @Nullable public Chunk getChunk() { CompletableFuture> completablefuture = this.a(); @@ -37,7 +37,7 @@ } public CompletableFuture getChunkSave() { -@@ -197,7 +206,7 @@ +@@ -201,7 +210,7 @@ CompletableFuture> completablefuture = (CompletableFuture) this.statusFutures.get(i); if (completablefuture != null) { @@ -46,7 +46,7 @@ if (either == null || either.left().isPresent()) { return completablefuture; -@@ -252,6 +261,21 @@ +@@ -256,6 +265,21 @@ boolean flag1 = this.ticketLevel <= PlayerChunkMap.GOLDEN_TICKET; PlayerChunk.State playerchunk_state = getChunkState(this.oldTicketLevel); PlayerChunk.State playerchunk_state1 = getChunkState(this.ticketLevel); @@ -68,7 +68,7 @@ CompletableFuture completablefuture; if (flag) { -@@ -283,7 +307,7 @@ +@@ -287,7 +311,7 @@ if (flag2 && !flag3) { completablefuture = this.fullChunkFuture; this.fullChunkFuture = PlayerChunk.UNLOADED_CHUNK_FUTURE; @@ -77,9 +77,9 @@ playerchunkmap.getClass(); return either1.ifLeft(playerchunkmap::a); })); -@@ -321,6 +345,17 @@ +@@ -325,6 +349,17 @@ - this.w.a(this.location, this::j, this.ticketLevel, this::d); + this.w.a(this.location, this::k, this.ticketLevel, this::d); this.oldTicketLevel = this.ticketLevel; + // CraftBukkit start + // ChunkLoadEvent: Called after the chunk is loaded: isChunkLoaded returns true and chunk is ready to be modified by plugins. diff --git a/nms-patches/PlayerChunkMap.patch b/nms-patches/PlayerChunkMap.patch index e33d21589f..1b78eafa5f 100644 --- a/nms-patches/PlayerChunkMap.patch +++ b/nms-patches/PlayerChunkMap.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/PlayerChunkMap.java +++ b/net/minecraft/server/PlayerChunkMap.java -@@ -38,6 +38,7 @@ +@@ -37,6 +37,7 @@ import org.apache.commons.lang3.mutable.MutableBoolean; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -8,7 +8,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { -@@ -186,9 +187,12 @@ +@@ -184,9 +185,12 @@ return completablefuture1.thenApply((list1) -> { List list2 = Lists.newArrayList(); @@ -23,7 +23,7 @@ final Either either = (Either) iterator.next(); Optional optional = either.left(); -@@ -286,7 +290,7 @@ +@@ -284,7 +288,7 @@ PlayerChunkMap.LOGGER.info("ThreadedAnvilChunkStorage ({}): All chunks are saved", this.x.getName()); } else { this.visibleChunks.values().stream().filter(PlayerChunk::hasBeenLoaded).forEach((playerchunk) -> { @@ -32,7 +32,7 @@ if (ichunkaccess instanceof ProtoChunkExtension || ichunkaccess instanceof Chunk) { this.saveChunk(ichunkaccess); -@@ -297,7 +301,6 @@ +@@ -295,7 +299,6 @@ } } @@ -40,7 +40,7 @@ protected void unloadChunks(BooleanSupplier booleansupplier) { GameProfilerFiller gameprofilerfiller = this.world.getMethodProfiler(); -@@ -336,7 +339,7 @@ +@@ -334,7 +337,7 @@ private void a(long i, PlayerChunk playerchunk) { CompletableFuture completablefuture = playerchunk.getChunkSave(); @@ -49,7 +49,7 @@ CompletableFuture completablefuture1 = playerchunk.getChunkSave(); if (completablefuture1 != completablefuture) { -@@ -485,7 +488,7 @@ +@@ -483,7 +486,7 @@ return CompletableFuture.completedFuture(Either.right(playerchunk_failure)); }); }, (runnable) -> { @@ -58,8 +58,8 @@ }); } -@@ -566,7 +569,7 @@ - long i = playerchunk.h().pair(); +@@ -564,7 +567,7 @@ + long i = playerchunk.i().pair(); playerchunk.getClass(); - mailbox.a((Object) ChunkTaskQueueSorter.a(runnable, i, playerchunk::getTicketLevel)); @@ -67,7 +67,7 @@ }); } -@@ -583,7 +586,7 @@ +@@ -581,7 +584,7 @@ return Either.left(chunk); }); }, (runnable) -> { @@ -76,7 +76,7 @@ }); completablefuture1.thenAcceptAsync((either) -> { -@@ -597,7 +600,7 @@ +@@ -595,7 +598,7 @@ return Either.left(chunk); }); }, (runnable) -> { @@ -85,7 +85,7 @@ }); return completablefuture1; } -@@ -611,7 +614,7 @@ +@@ -609,7 +612,7 @@ return chunk; }); }, (runnable) -> { @@ -94,19 +94,7 @@ }); } -@@ -675,9 +678,10 @@ - ChunkCoordIntPair chunkcoordintpair = playerchunk.h(); - Packet[] apacket = new Packet[2]; - -+ int finall = l; // CraftBukkit - decompile error - this.a(chunkcoordintpair, false).forEach((entityplayer) -> { - int i1 = b(chunkcoordintpair, entityplayer, true); -- boolean flag = i1 <= l; -+ boolean flag = i1 <= finall; // CraftBukkit - decompile error - boolean flag1 = i1 <= this.viewDistance; - - this.sendChunk(entityplayer, chunkcoordintpair, apacket, flag, flag1); -@@ -732,7 +736,7 @@ +@@ -724,7 +727,7 @@ private NBTTagCompound readChunkData(ChunkCoordIntPair chunkcoordintpair) throws IOException { NBTTagCompound nbttagcompound = this.read(chunkcoordintpair); @@ -115,7 +103,7 @@ } boolean isOutsideOfRange(ChunkCoordIntPair chunkcoordintpair) { -@@ -1052,7 +1056,7 @@ +@@ -1056,7 +1059,7 @@ public final Set trackedPlayers = Sets.newHashSet(); public EntityTracker(Entity entity, int i, int j, boolean flag) { @@ -124,7 +112,7 @@ this.tracker = entity; this.trackingDistance = i; this.e = SectionPosition.a(entity); -@@ -1121,6 +1125,17 @@ +@@ -1125,6 +1128,17 @@ } } diff --git a/nms-patches/PlayerConnection.patch b/nms-patches/PlayerConnection.patch index 25918bc158..aa56c9d2eb 100644 --- a/nms-patches/PlayerConnection.patch +++ b/nms-patches/PlayerConnection.patch @@ -428,7 +428,7 @@ + speed = player.abilities.walkSpeed * 10f; + } + - if (!this.player.H() && (!this.player.getWorldServer().getGameRules().getBoolean("disableElytraMovementCheck") || !this.player.isGliding())) { + if (!this.player.H() && (!this.player.getWorldServer().getGameRules().getBoolean(GameRules.DISABLE_ELYTRA_MOVEMENT_CHECK) || !this.player.isGliding())) { float f2 = this.player.isGliding() ? 300.0F : 100.0F; - if (d11 - d10 > (double) (f2 * (float) i) && !this.isExemptPlayer()) { @@ -1173,7 +1173,7 @@ + // CraftBukkit end } else if (packetplayinuseentity.b() == PacketPlayInUseEntity.EnumEntityUseAction.INTERACT_AT) { enumhand = packetplayinuseentity.c(); - entity.a(this.player, packetplayinuseentity.d(), enumhand); + entity.a((EntityHuman) this.player, packetplayinuseentity.d(), enumhand); + // CraftBukkit start + if (!itemInHand.isEmpty() && itemInHand.getCount() <= -1) { + this.player.updateInventory(this.player.activeContainer); diff --git a/nms-patches/PlayerList.patch b/nms-patches/PlayerList.patch index 45e9683684..f65d303a10 100644 --- a/nms-patches/PlayerList.patch +++ b/nms-patches/PlayerList.patch @@ -99,9 +99,9 @@ this.a(entityplayer, (EntityPlayer) null, worldserver); PlayerConnection playerconnection = new PlayerConnection(this.server, networkmanager, entityplayer); -- playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager(), this.getMaxPlayers(), worlddata.getType(), this.viewDistance, worldserver.getGameRules().getBoolean("reducedDebugInfo"))); +- playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager(), this.getMaxPlayers(), worlddata.getType(), this.viewDistance, worldserver.getGameRules().getBoolean(GameRules.REDUCED_DEBUG_INFO))); + // CraftBukkit - getType() -+ playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager().getType(), this.getMaxPlayers(), worlddata.getType(), this.viewDistance, worldserver.getGameRules().getBoolean("reducedDebugInfo"))); ++ playerconnection.sendPacket(new PacketPlayOutLogin(entityplayer.getId(), entityplayer.playerInteractManager.getGameMode(), worlddata.isHardcore(), worldserver.worldProvider.getDimensionManager().getType(), this.getMaxPlayers(), worlddata.getType(), this.viewDistance, worldserver.getGameRules().getBoolean(GameRules.REDUCED_DEBUG_INFO))); + entityplayer.getBukkitEntity().sendSupportedChannels(); // CraftBukkit playerconnection.sendPacket(new PacketPlayOutCustomPayload(PacketPlayOutCustomPayload.a, (new PacketDataSerializer(Unpooled.buffer())).a(this.getServer().getServerModName()))); playerconnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); @@ -624,7 +624,7 @@ + WorldBorder worldborder = entityplayer.world.getWorldBorder(); // CraftBukkit entityplayer.playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE)); - entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(worldserver.getTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean("doDaylightCycle"))); + entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(worldserver.getTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE))); @@ -640,17 +914,26 @@ entityplayer.playerConnection.sendPacket(new PacketPlayOutSpawnPosition(blockposition)); @@ -650,7 +650,7 @@ + entityplayer.getBukkitEntity().updateScaledHealth(); // CraftBukkit - Update scaled health on respawn and worldchange entityplayer.playerConnection.sendPacket(new PacketPlayOutHeldItemSlot(entityplayer.inventory.itemInHandIndex)); + // CraftBukkit start - from GameRules -+ int i = entityplayer.world.getGameRules().get("reducedDebugInfo").getBooleanValue() ? 22 : 23; ++ int i = entityplayer.world.getGameRules().getBoolean(GameRules.REDUCED_DEBUG_INFO) ? 22 : 23; + entityplayer.playerConnection.sendPacket(new PacketPlayOutEntityStatus(entityplayer, (byte) i)); + // CraftBukkit end } diff --git a/nms-patches/RecipeBlasting.patch b/nms-patches/RecipeBlasting.patch index 333e2c0f75..396c1111b2 100644 --- a/nms-patches/RecipeBlasting.patch +++ b/nms-patches/RecipeBlasting.patch @@ -16,7 +16,7 @@ public RecipeBlasting(MinecraftKey minecraftkey, String s, RecipeItemStack recipeitemstack, ItemStack itemstack, float f, int i) { @@ -10,4 +18,16 @@ public RecipeSerializer getRecipeSerializer() { - return RecipeSerializer.p; + return RecipeSerializer.q; } + + // CraftBukkit start diff --git a/nms-patches/RecipeBookServer.patch b/nms-patches/RecipeBookServer.patch index c4ca374394..0243896037 100644 --- a/nms-patches/RecipeBookServer.patch +++ b/nms-patches/RecipeBookServer.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/server/RecipeBookServer.java +++ b/net/minecraft/server/RecipeBookServer.java -@@ -8,6 +8,7 @@ - import java.util.Optional; +@@ -9,6 +9,7 @@ + import java.util.function.Consumer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit public class RecipeBookServer extends RecipeBook { -@@ -27,7 +28,7 @@ +@@ -28,7 +29,7 @@ IRecipe irecipe = (IRecipe) iterator.next(); MinecraftKey minecraftkey = irecipe.getKey(); @@ -17,7 +17,7 @@ this.a(minecraftkey); this.c(minecraftkey); list.add(minecraftkey); -@@ -61,6 +62,7 @@ +@@ -62,6 +63,7 @@ } private void a(PacketPlayOutRecipes.Action packetplayoutrecipes_action, EntityPlayer entityplayer, List list) { diff --git a/nms-patches/RecipeCampfire.patch b/nms-patches/RecipeCampfire.patch index c467cfaeb9..3339152efa 100644 --- a/nms-patches/RecipeCampfire.patch +++ b/nms-patches/RecipeCampfire.patch @@ -16,7 +16,7 @@ public RecipeCampfire(MinecraftKey minecraftkey, String s, RecipeItemStack recipeitemstack, ItemStack itemstack, float f, int i) { @@ -10,4 +18,16 @@ public RecipeSerializer getRecipeSerializer() { - return RecipeSerializer.r; + return RecipeSerializer.s; } + + // CraftBukkit start diff --git a/nms-patches/RecipeRepair.patch b/nms-patches/RecipeRepair.patch new file mode 100644 index 0000000000..613d7b6e7e --- /dev/null +++ b/nms-patches/RecipeRepair.patch @@ -0,0 +1,35 @@ +--- a/net/minecraft/server/RecipeRepair.java ++++ b/net/minecraft/server/RecipeRepair.java +@@ -2,12 +2,15 @@ + + import com.google.common.collect.Lists; + import java.util.List; ++import java.util.stream.Stream; // CraftBukkit + +-public class RecipeRepair extends IRecipeComplex { ++public class RecipeRepair extends ShapelessRecipes { // CraftBukkit - added extends + ++ // CraftBukkit start - Delegate to new parent class + public RecipeRepair(MinecraftKey minecraftkey) { +- super(minecraftkey); ++ super(minecraftkey, "", new ItemStack(Items.LEATHER_HELMET), NonNullList.a(RecipeItemStack.a, RecipeItemStack.a(Items.LEATHER_HELMET))); + } ++ // CraftBukkit end + + public boolean a(InventoryCrafting inventorycrafting, World world) { + List list = Lists.newArrayList(); +@@ -67,6 +70,14 @@ + ItemStack itemstack3 = new ItemStack(itemstack2.getItem()); + + itemstack3.setDamage(i1); ++ // CraftBukkit start - Construct a dummy repair recipe ++ NonNullList ingredients = NonNullList.a(); ++ ingredients.add(new RecipeItemStack(Stream.of(new RecipeItemStack.StackProvider(itemstack2.cloneItemStack())))); ++ ingredients.add(new RecipeItemStack(Stream.of(new RecipeItemStack.StackProvider(itemstack.cloneItemStack())))); ++ ShapelessRecipes recipe = new ShapelessRecipes(new MinecraftKey("repairitem"), "", itemstack3.cloneItemStack(), ingredients); ++ inventorycrafting.setCurrentRecipe(recipe); ++ itemstack3 = org.bukkit.craftbukkit.event.CraftEventFactory.callPreCraftEvent(inventorycrafting, inventorycrafting.resultInventory, itemstack3, inventorycrafting.container.getBukkitView(), true); ++ // CraftBukkit end + return itemstack3; + } + } diff --git a/nms-patches/RecipeSmoking.patch b/nms-patches/RecipeSmoking.patch index 8699f526b8..7cb2caf77b 100644 --- a/nms-patches/RecipeSmoking.patch +++ b/nms-patches/RecipeSmoking.patch @@ -16,7 +16,7 @@ public RecipeSmoking(MinecraftKey minecraftkey, String s, RecipeItemStack recipeitemstack, ItemStack itemstack, float f, int i) { @@ -10,4 +18,16 @@ public RecipeSerializer getRecipeSerializer() { - return RecipeSerializer.q; + return RecipeSerializer.r; } + + // CraftBukkit start diff --git a/nms-patches/SpawnerCreature.patch b/nms-patches/SpawnerCreature.patch index 5039c22695..cf4e010396 100644 --- a/nms-patches/SpawnerCreature.patch +++ b/nms-patches/SpawnerCreature.patch @@ -24,10 +24,10 @@ + ++i2; + } + // CraftBukkit end - if (i >= entityinsentient.dC()) { + if (i >= entityinsentient.dD()) { return; } -@@ -210,7 +217,7 @@ +@@ -212,7 +219,7 @@ if (entityinsentient.a(generatoraccess, EnumMobSpawn.CHUNK_GENERATION) && entityinsentient.a((IWorldReader) generatoraccess)) { groupdataentity = entityinsentient.prepare(generatoraccess, generatoraccess.getDamageScaler(new BlockPosition(entityinsentient)), EnumMobSpawn.CHUNK_GENERATION, groupdataentity, (NBTTagCompound) null); diff --git a/nms-patches/TagRegistry.patch b/nms-patches/TagRegistry.patch index 9aeaaf8fe8..49f39b3572 100644 --- a/nms-patches/TagRegistry.patch +++ b/nms-patches/TagRegistry.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/TagRegistry.java +++ b/net/minecraft/server/TagRegistry.java -@@ -65,7 +65,7 @@ +@@ -58,7 +58,7 @@ CompletableFuture>> completablefuture1 = this.b.a(iresourcemanager, executor); CompletableFuture>> completablefuture2 = this.c.a(iresourcemanager, executor); CompletableFuture>>> completablefuture3 = this.d.a(iresourcemanager, executor); @@ -9,7 +9,7 @@ return new TagRegistry.a((Map) pair.getFirst(), (Map) pair.getSecond(), (Map) pair1.getFirst(), (Map) pair1.getSecond()); }); -@@ -80,6 +80,12 @@ +@@ -72,6 +72,12 @@ TagsItem.a((Tags) this.b); TagsFluid.a((Tags) this.c); TagsEntity.a((Tags) this.d); diff --git a/nms-patches/TagsServer.patch b/nms-patches/TagsServer.patch index 2727eb7d2e..41e40d4826 100644 --- a/nms-patches/TagsServer.patch +++ b/nms-patches/TagsServer.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/TagsServer.java +++ b/net/minecraft/server/TagsServer.java -@@ -9,6 +9,7 @@ +@@ -8,6 +8,7 @@ public class TagsServer extends Tags { private final IRegistry a; @@ -8,7 +8,7 @@ public TagsServer(IRegistry iregistry, String s, String s1) { super(iregistry::getOptional, s, false, s1); -@@ -27,7 +28,7 @@ +@@ -28,7 +29,7 @@ Iterator iterator1 = ((Tag) entry.getValue()).a().iterator(); while (iterator1.hasNext()) { @@ -17,12 +17,3 @@ packetdataserializer.d(this.a.a(t0)); } -@@ -47,7 +48,7 @@ - list.add(this.a.fromId(packetdataserializer.i())); - } - -- this.c().put(minecraftkey, Tag.a.a().a((Collection) list).b(minecraftkey)); -+ this.c().put(minecraftkey, (Tag) Tag.a.a().a((Collection) list).b(minecraftkey)); // CraftBukkit - decompile error - } - - } diff --git a/nms-patches/TileEntityBeacon.patch b/nms-patches/TileEntityBeacon.patch index 55ff6504f1..242a143a05 100644 --- a/nms-patches/TileEntityBeacon.patch +++ b/nms-patches/TileEntityBeacon.patch @@ -31,7 +31,7 @@ public TileEntityBeacon() { super(TileEntityTypes.BEACON); @@ -192,39 +208,78 @@ - super.W_(); + super.V_(); } - private void applyEffects() { diff --git a/nms-patches/VillageSiege.patch b/nms-patches/VillageSiege.patch index 510cdf86b6..90e01b9a54 100644 --- a/nms-patches/VillageSiege.patch +++ b/nms-patches/VillageSiege.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/VillageSiege.java +++ b/net/minecraft/server/VillageSiege.java -@@ -102,7 +102,7 @@ +@@ -101,7 +101,7 @@ } entityzombie.setPositionRotation(vec3d.x, vec3d.y, vec3d.z, this.a.random.nextFloat() * 360.0F, 0.0F); diff --git a/nms-patches/WorldData.patch b/nms-patches/WorldData.patch index c1260b63c6..56712528d2 100644 --- a/nms-patches/WorldData.patch +++ b/nms-patches/WorldData.patch @@ -12,23 +12,23 @@ public class WorldData { -@@ -68,6 +73,7 @@ - private UUID X; - private final GameRules Y; - private final CustomFunctionCallbackTimerQueue Z; +@@ -67,6 +72,7 @@ + private UUID W; + private final GameRules X; + private final CustomFunctionCallbackTimerQueue Y; + public WorldServer world; // CraftBukkit protected WorldData() { this.f = WorldType.NORMAL; -@@ -419,6 +425,7 @@ - nbttagcompound.setString("WanderingTraderId", this.X.toString()); +@@ -418,6 +424,7 @@ + nbttagcompound.setString("WanderingTraderId", this.W.toString()); } + nbttagcompound.setString("Bukkit.Version", Bukkit.getName() + "/" + Bukkit.getVersion() + "/" + Bukkit.getBukkitVersion()); // CraftBukkit } public long getSeed() { -@@ -508,6 +515,20 @@ +@@ -506,6 +513,20 @@ } public void setThundering(boolean flag) { @@ -49,7 +49,7 @@ this.thundering = flag; } -@@ -524,6 +545,20 @@ +@@ -522,6 +543,20 @@ } public void setStorm(boolean flag) { @@ -70,10 +70,10 @@ this.raining = flag; } -@@ -673,6 +708,12 @@ +@@ -671,6 +706,12 @@ public void setDifficulty(EnumDifficulty enumdifficulty) { - this.G = enumdifficulty; + this.F = enumdifficulty; + // CraftBukkit start + PacketPlayOutServerDifficulty packet = new PacketPlayOutServerDifficulty(this.getDifficulty(), this.isDifficultyLocked()); + for (EntityPlayer player : (java.util.List) (java.util.List) world.getPlayers()) { @@ -83,9 +83,9 @@ } public boolean isDifficultyLocked() { -@@ -777,4 +818,12 @@ +@@ -775,4 +816,12 @@ public void a(UUID uuid) { - this.X = uuid; + this.W = uuid; } + + // CraftBukkit start - Check if the name stored in NBT is the correct one diff --git a/nms-patches/WorldMap.patch b/nms-patches/WorldMap.patch index fee12ce16b..4ebff530ad 100644 --- a/nms-patches/WorldMap.patch +++ b/nms-patches/WorldMap.patch @@ -35,15 +35,15 @@ } public void a(int i, int j, int k, boolean flag, boolean flag1, DimensionManager dimensionmanager) { -@@ -47,7 +66,31 @@ - +@@ -48,7 +67,30 @@ @Override public void a(NBTTagCompound nbttagcompound) { -- this.map = DimensionManager.a(nbttagcompound.getInt("dimension")); + int i = nbttagcompound.getInt("dimension"); +- DimensionManager dimensionmanager = DimensionManager.a(i); + // CraftBukkit start -+ int dimension = nbttagcompound.getInt("dimension"); ++ DimensionManager dimensionmanager = null; + -+ if (dimension >= CraftWorld.CUSTOM_DIMENSION_OFFSET) { ++ if (i >= CraftWorld.CUSTOM_DIMENSION_OFFSET) { + long least = nbttagcompound.getLong("UUIDLeast"); + long most = nbttagcompound.getLong("UUIDMost"); + @@ -55,20 +55,19 @@ + if (world == null) { + /* All Maps which do not have their valid world loaded are set to a dimension which hopefully won't be reached. + This is to prevent them being corrupted with the wrong map data. */ -+ this.map = new DimensionManager(127, null, null, null, false, DimensionManager.OVERWORLD); ++ dimensionmanager = new DimensionManager(127, null, null, null, false, DimensionManager.OVERWORLD); + } else { -+ this.map = world.getHandle().getWorldProvider().getDimensionManager(); ++ dimensionmanager = world.getHandle().getWorldProvider().getDimensionManager(); + } + } + } else { -+ this.map = DimensionManager.a(dimension); ++ dimensionmanager = DimensionManager.a(i); + } -+ + // CraftBukkit end - this.centerX = nbttagcompound.getInt("xCenter"); - this.centerZ = nbttagcompound.getInt("zCenter"); - this.scale = (byte) MathHelper.clamp(nbttagcompound.getByte("scale"), 0, 4); -@@ -81,6 +124,25 @@ + + if (dimensionmanager == null) { + throw new IllegalArgumentException("Invalid map dimension: " + i); +@@ -88,6 +130,25 @@ @Override public NBTTagCompound b(NBTTagCompound nbttagcompound) { @@ -94,7 +93,7 @@ nbttagcompound.setInt("dimension", this.map.getDimensionID()); nbttagcompound.setInt("xCenter", this.centerX); nbttagcompound.setInt("zCenter", this.centerZ); -@@ -372,12 +434,25 @@ +@@ -379,12 +440,25 @@ @Nullable public Packet a(ItemStack itemstack) { diff --git a/nms-patches/WorldServer.patch b/nms-patches/WorldServer.patch index a0022f8e8e..1479577f6d 100644 --- a/nms-patches/WorldServer.patch +++ b/nms-patches/WorldServer.patch @@ -27,7 +27,7 @@ + // Add env and gen to constructor + public WorldServer(MinecraftServer minecraftserver, Executor executor, WorldNBTStorage worldnbtstorage, WorldData worlddata, DimensionManager dimensionmanager, GameProfilerFiller gameprofilerfiller, WorldLoadListener worldloadlistener, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { super(worlddata, dimensionmanager, (world, worldprovider) -> { -- return new ChunkProviderServer((WorldServer) world, worldnbtstorage.getDirectory(), worldnbtstorage.getDataFixer(), worldnbtstorage.f(), executor, worldprovider.getChunkGenerator(), minecraftserver.getPlayerList().getViewDistance(), minecraftserver.getPlayerList().getViewDistance() - 2, worldloadlistener, () -> { +- return new ChunkProviderServer((WorldServer) world, worldnbtstorage.getDirectory(), worldnbtstorage.getDataFixer(), worldnbtstorage.f(), executor, worldprovider.getChunkGenerator(), minecraftserver.getPlayerList().getViewDistance(), worldloadlistener, () -> { + // CraftBukkit start + ChunkGenerator chunkGenerator; + @@ -37,7 +37,7 @@ + chunkGenerator = worldprovider.getChunkGenerator(); + } + -+ return new ChunkProviderServer((WorldServer) world, worldnbtstorage.getDirectory(), worldnbtstorage.getDataFixer(), worldnbtstorage.f(), executor, chunkGenerator, minecraftserver.getPlayerList().getViewDistance(), minecraftserver.getPlayerList().getViewDistance() - 2, worldloadlistener, () -> { ++ return new ChunkProviderServer((WorldServer) world, worldnbtstorage.getDirectory(), worldnbtstorage.getDataFixer(), worldnbtstorage.f(), executor, chunkGenerator, minecraftserver.getPlayerList().getViewDistance(), worldloadlistener, () -> { return minecraftserver.getWorldServer(DimensionManager.OVERWORLD).getWorldPersistentData(); }); - }, gameprofilerfiller, false); @@ -102,7 +102,7 @@ + return !entityplayer.isSpectator() && !entityplayer.isDeeplySleeping() && !entityplayer.fauxSleeping; // CraftBukkit })) { this.D = false; - if (this.getGameRules().getBoolean("doDaylightCycle")) { + if (this.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)) { @@ -225,7 +274,7 @@ this.ae(); this.ticking = false; @@ -266,8 +266,8 @@ + // CraftBukkit end EnumCreatureType enumcreaturetype = entity.getEntityType().d(); - if (enumcreaturetype != EnumCreatureType.MISC && this.getChunkProvider().a(entity)) { -@@ -732,11 +826,24 @@ + if (enumcreaturetype != EnumCreatureType.MISC && this.getChunkProvider().b(entity)) { +@@ -730,11 +824,24 @@ @Override public boolean addEntity(Entity entity) { @@ -294,7 +294,7 @@ } public void addEntityTeleport(Entity entity) { -@@ -786,13 +893,18 @@ +@@ -784,13 +891,18 @@ this.registerEntity(entityplayer); } @@ -315,7 +315,7 @@ IChunkAccess ichunkaccess = this.getChunkAt(MathHelper.floor(entity.locX / 16.0D), MathHelper.floor(entity.locZ / 16.0D), ChunkStatus.FULL, entity.attachedToPlayer); if (!(ichunkaccess instanceof Chunk)) { -@@ -820,7 +932,7 @@ +@@ -818,7 +930,7 @@ if (entity1 == null) { return false; } else { @@ -324,7 +324,7 @@ return true; } } -@@ -875,6 +987,7 @@ +@@ -873,6 +985,7 @@ this.I.remove(((EntityInsentient) entity).getNavigation()); } @@ -332,7 +332,7 @@ } private void registerEntity(Entity entity) { -@@ -898,6 +1011,7 @@ +@@ -896,6 +1009,7 @@ if (entity instanceof EntityInsentient) { this.I.add(((EntityInsentient) entity).getNavigation()); } @@ -340,7 +340,7 @@ } } -@@ -928,6 +1042,18 @@ +@@ -926,6 +1040,18 @@ } public void strikeLightning(EntityLightning entitylightning) { @@ -359,7 +359,7 @@ this.globalEntityList.add(entitylightning); this.server.getPlayerList().sendPacketNearby((EntityHuman) null, entitylightning.locX, entitylightning.locY, entitylightning.locZ, 512.0D, this.worldProvider.getDimensionManager(), new PacketPlayOutSpawnEntityWeather(entitylightning)); } -@@ -936,6 +1062,12 @@ +@@ -934,6 +1060,12 @@ public void a(int i, BlockPosition blockposition, int j) { Iterator iterator = this.server.getPlayerList().getPlayers().iterator(); @@ -372,7 +372,7 @@ while (iterator.hasNext()) { EntityPlayer entityplayer = (EntityPlayer) iterator.next(); -@@ -944,6 +1076,12 @@ +@@ -942,6 +1074,12 @@ double d1 = (double) blockposition.getY() - entityplayer.locY; double d2 = (double) blockposition.getZ() - entityplayer.locZ; @@ -385,7 +385,7 @@ if (d0 * d0 + d1 * d1 + d2 * d2 < 1024.0D) { entityplayer.playerConnection.sendPacket(new PacketPlayOutBlockBreakAnimation(i, blockposition, j)); } -@@ -1004,6 +1142,14 @@ +@@ -1002,6 +1140,14 @@ @Override public Explosion createExplosion(@Nullable Entity entity, DamageSource damagesource, double d0, double d1, double d2, float f, boolean flag, Explosion.Effect explosion_effect) { @@ -400,7 +400,7 @@ Explosion explosion = new Explosion(this, entity, d0, d1, d2, f, flag, explosion_effect); if (damagesource != null) { -@@ -1012,6 +1158,8 @@ +@@ -1010,6 +1156,8 @@ explosion.a(); explosion.a(false); @@ -409,7 +409,7 @@ if (explosion_effect == Explosion.Effect.NONE) { explosion.clearBlocks(); } -@@ -1076,13 +1224,20 @@ +@@ -1074,13 +1222,20 @@ } public int a(T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6) { @@ -432,7 +432,7 @@ ++j; } } -@@ -1165,7 +1320,13 @@ +@@ -1163,7 +1318,13 @@ @Override public WorldMap a(String s) { return (WorldMap) this.getMinecraftServer().getWorldServer(DimensionManager.OVERWORLD).getWorldPersistentData().b(() -> { diff --git a/pom.xml b/pom.xml index f7819b635c..26fb3b64e2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.bukkit craftbukkit jar - 1.14.2-R0.1-SNAPSHOT + 1.14.3-pre4-SNAPSHOT CraftBukkit https://www.spigotmc.org/ @@ -12,7 +12,7 @@ true UTF-8 unknown - 1.14.2 + 1.14.3-pre4 1_14_R1 git-Bukkit- diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index e36a4cbf7f..a94b5c43a6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1105,7 +1105,7 @@ public final class CraftServer implements Server { @Override public void resetRecipes() { - console.getCraftingManager().a(console.getResourceManager()); + // throw new UnsupportedOperationException("Not supported yet."); } @Override @@ -1772,7 +1772,7 @@ public final class CraftServer implements Server { @Override public Iterator advancementIterator() { - return Iterators.unmodifiableIterator(Iterators.transform(console.getAdvancementData().b().iterator(), new Function() { // PAIL: rename + return Iterators.unmodifiableIterator(Iterators.transform(console.getAdvancementData().a().iterator(), new Function() { // PAIL: rename @Override public org.bukkit.advancement.Advancement apply(Advancement advancement) { return advancement.bukkit; @@ -1839,12 +1839,12 @@ public final class CraftServer implements Server { Preconditions.checkArgument(clazz == org.bukkit.Material.class, "Block namespace must have material type"); TagsServer blockTags = console.getTagRegistry().a(); // PAIL: getBlockTags - return blockTags.c().keySet().stream().map(key -> (org.bukkit.Tag) new CraftBlockTag(blockTags, key)).collect(ImmutableList.toImmutableList()); + return blockTags.b().keySet().stream().map(key -> (org.bukkit.Tag) new CraftBlockTag(blockTags, key)).collect(ImmutableList.toImmutableList()); case org.bukkit.Tag.REGISTRY_ITEMS: Preconditions.checkArgument(clazz == org.bukkit.Material.class, "Item namespace must have material type"); TagsServer itemTags = console.getTagRegistry().b(); // PAIL: getItemTags - return itemTags.c().keySet().stream().map(key -> (org.bukkit.Tag) new CraftItemTag(itemTags, key)).collect(ImmutableList.toImmutableList()); + return itemTags.b().keySet().stream().map(key -> (org.bukkit.Tag) new CraftItemTag(itemTags, key)).collect(ImmutableList.toImmutableList()); default: throw new IllegalArgumentException(); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index 48ccc0d851..eb3e5426b5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -7,9 +7,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Random; import java.util.Set; @@ -80,9 +82,6 @@ import net.minecraft.server.Vec3D; import net.minecraft.server.WorldGenFeatureEmptyConfiguration; import net.minecraft.server.WorldGenerator; import net.minecraft.server.WorldNBTStorage; -import net.minecraft.server.WorldProviderHell; -import net.minecraft.server.WorldProviderNormal; -import net.minecraft.server.WorldProviderTheEnd; import net.minecraft.server.WorldServer; import org.apache.commons.lang.Validate; import org.bukkit.BlockChangeDelegate; @@ -702,7 +701,7 @@ public class CraftWorld implements World { CraftPlayer cp = (CraftPlayer) p; if (cp.getHandle().playerConnection == null) continue; - cp.getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateTime(cp.getHandle().world.getTime(), cp.getHandle().getPlayerTime(), cp.getHandle().world.getGameRules().getBoolean("doDaylightCycle"))); + cp.getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateTime(cp.getHandle().world.getTime(), cp.getHandle().getPlayerTime(), cp.getHandle().world.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE))); } } @@ -1853,6 +1852,40 @@ public class CraftWorld implements World { world.getMinecraftServer().getPlayerList().sendPacketNearby(null, x, y, z, volume > 1.0F ? 16.0F * volume : 16.0D, this.world.getWorldProvider().getDimensionManager(), packet); } + private static Map> gamerules; + public static synchronized Map> getGameRulesNMS() { + if (gamerules != null) { + return gamerules; + } + + Map> gamerules = new HashMap<>(); + GameRules.a(new GameRules.GameRuleVisitor() { + @Override + public > void a(GameRules.GameRuleKey gamerules_gamerulekey, GameRules.GameRuleDefinition gamerules_gameruledefinition) { + gamerules.put(gamerules_gamerulekey.a(), gamerules_gamerulekey); + } + }); + + return CraftWorld.gamerules = gamerules; + } + + private static Map> gameruleDefinitions; + public static synchronized Map> getGameRuleDefinitions() { + if (gameruleDefinitions != null) { + return gameruleDefinitions; + } + + Map> gameruleDefinitions = new HashMap<>(); + GameRules.a(new GameRules.GameRuleVisitor() { + @Override + public > void a(GameRules.GameRuleKey gamerules_gamerulekey, GameRules.GameRuleDefinition gamerules_gameruledefinition) { + gameruleDefinitions.put(gamerules_gamerulekey.a(), gamerules_gameruledefinition); + } + }); + + return CraftWorld.gameruleDefinitions = gameruleDefinitions; + } + @Override public String getGameRuleValue(String rule) { // In method contract for some reason @@ -1860,8 +1893,8 @@ public class CraftWorld implements World { return null; } - GameRules.GameRuleValue value = getHandle().getGameRules().get(rule); - return value != null ? value.getValue() : ""; + GameRules.GameRuleValue value = getHandle().getGameRules().get(getGameRulesNMS().get(rule)); + return value != null ? value.toString() : ""; } @Override @@ -1871,31 +1904,31 @@ public class CraftWorld implements World { if (!isGameRule(rule)) return false; - getHandle().getGameRules().set(rule, value, getHandle().getMinecraftServer()); + getHandle().getGameRules().get(getGameRulesNMS().get(rule)).b(null, value); return true; } @Override public String[] getGameRules() { - return GameRules.getGameRules().keySet().toArray(new String[GameRules.getGameRules().size()]); + return getGameRulesNMS().keySet().toArray(new String[getGameRulesNMS().size()]); } @Override public boolean isGameRule(String rule) { Validate.isTrue(rule != null && !rule.isEmpty(), "Rule cannot be null nor empty"); - return GameRules.getGameRules().containsKey(rule); + return getGameRulesNMS().containsKey(rule); } @Override public T getGameRuleValue(GameRule rule) { Validate.notNull(rule, "GameRule cannot be null"); - return convert(rule, getHandle().getGameRules().get(rule.getName())); + return convert(rule, getHandle().getGameRules().get(getGameRulesNMS().get(rule.getName()))); } @Override public T getGameRuleDefault(GameRule rule) { Validate.notNull(rule, "GameRule cannot be null"); - return convert(rule, GameRules.getGameRules().get(rule.getName()).a()); + return convert(rule, getGameRuleDefinitions().get(rule.getName()).a()); } @Override @@ -1905,22 +1938,21 @@ public class CraftWorld implements World { if (!isGameRule(rule.getName())) return false; - getHandle().getGameRules().set(rule.getName(), newValue.toString(), getHandle().getMinecraftServer()); + getHandle().getGameRules().get(getGameRulesNMS().get(rule.getName())).b(null, newValue.toString()); return true; } - private T convert(GameRule rule, GameRules.GameRuleValue value) { + private T convert(GameRule rule, GameRules.GameRuleValue value) { if (value == null) { return null; } - switch (value.getType()) { - case BOOLEAN_VALUE: - return rule.getType().cast(value.getBooleanValue()); - case NUMERICAL_VALUE: - return rule.getType().cast(value.getIntValue()); - default: - throw new IllegalArgumentException("Invalid GameRule type (" + value.getType() + ") for GameRule " + rule.getName()); + if (value instanceof GameRules.GameRuleBoolean) { + return rule.getType().cast(((GameRules.GameRuleBoolean) value).a()); + } else if (value instanceof GameRules.GameRuleInt) { + return rule.getType().cast(value.getIntValue()); + } else { + throw new IllegalArgumentException("Invalid GameRule type (" + value + ") for GameRule " + rule.getName()); } } diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java index fa05704946..f971d426a3 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -177,7 +177,7 @@ public class Main { useConsole = false; } - if (false && Main.class.getPackage().getImplementationVendor() != null && System.getProperty("IReallyKnowWhatIAmDoingISwear") == null) { + if (Main.class.getPackage().getImplementationVendor() != null && System.getProperty("IReallyKnowWhatIAmDoingISwear") == null) { Date buildDate = new SimpleDateFormat("yyyyMMdd-HHmm").parse(Main.class.getPackage().getImplementationVendor()); Calendar deadline = Calendar.getInstance(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java index 95b3a7acc9..896405148c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java @@ -66,12 +66,12 @@ public class CraftCreeper extends CraftMonster implements Creeper { @Override public void explode() { - getHandle().eb(); + getHandle().explode(); } @Override public void ignite() { - getHandle().dY(); // PAIL rename ignite + getHandle().ignite(); } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java index fc3dae305d..54a9f39d25 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java @@ -26,7 +26,7 @@ public class CraftHanging extends CraftEntity implements Hanging { @Override public boolean setFacingDirection(BlockFace face, boolean force) { EntityHanging hanging = getHandle(); - EnumDirection dir = hanging.direction; + EnumDirection dir = hanging.getDirection(); switch (face) { case SOUTH: default: @@ -52,7 +52,7 @@ public class CraftHanging extends CraftEntity implements Hanging { @Override public BlockFace getFacing() { - EnumDirection direction = this.getHandle().direction; + EnumDirection direction = this.getHandle().getDirection(); if (direction == null) return BlockFace.SELF; return CraftBlock.notchToBlockFace(direction); } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java index 70127520a2..799036f268 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java @@ -24,7 +24,7 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame { @Override public boolean setFacingDirection(BlockFace face, boolean force) { EntityHanging hanging = getHandle(); - EnumDirection oldDir = hanging.direction; + EnumDirection oldDir = hanging.getDirection(); EnumDirection newDir = CraftBlock.blockFaceToNotch(face); getHandle().setDirection(newDir); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java index 805261cb70..7960839b24 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java @@ -34,11 +34,11 @@ public class CraftPainting extends CraftHanging implements Painting { EntityPainting painting = this.getHandle(); Paintings oldArt = painting.art; painting.art = CraftArt.BukkitToNotch(art); - painting.setDirection(painting.direction); + painting.setDirection(painting.getDirection()); if (!force && !painting.survives()) { // Revert painting since it doesn't fit painting.art = oldArt; - painting.setDirection(painting.direction); + painting.setDirection(painting.getDirection()); return false; } this.update(); @@ -60,7 +60,7 @@ public class CraftPainting extends CraftHanging implements Painting { EntityPainting painting = EntityTypes.PAINTING.a(world); painting.blockPosition = getHandle().blockPosition; painting.art = getHandle().art; - painting.setDirection(getHandle().direction); + painting.setDirection(getHandle().getDirection()); getHandle().die(); getHandle().velocityChanged = true; // because this occurs when the painting is broken, so it might be important world.addEntity(painting); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryMapper.java b/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryMapper.java index 5ba4082f8d..65470e7ec3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryMapper.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/memory/CraftMemoryMapper.java @@ -26,6 +26,8 @@ public final class CraftMemoryMapper { return null; } else if (object instanceof Location) { return toNms((Location) object); + } else if (object instanceof Long) { + return object; } throw new UnsupportedOperationException("Do not know how to map " + object); diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantCustom.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantCustom.java index b9c99f2d1f..311326ee63 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantCustom.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantCustom.java @@ -90,16 +90,16 @@ public class CraftMerchantCustom extends CraftMerchant { } @Override - public void r(int i) { + public void s(int i) { } @Override - public boolean ea() { + public boolean eb() { return true; } @Override - public SoundEffect eb() { + public SoundEffect ec() { return SoundEffects.ENTITY_VILLAGER_YES; } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index c88704f69e..0f6fde7b88 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -186,7 +186,7 @@ public final class CraftMagicNumbers implements UnsafeValues { * @return string */ public String getMappingsVersion() { - return "df689a0f36ee29c2b2f456da8803f74d"; + return "5b8c1c16444f2e8e58ec6c42af14ebaa"; } @Override @@ -217,7 +217,7 @@ public final class CraftMagicNumbers implements UnsafeValues { net.minecraft.server.Advancement.SerializedAdvancement nms = (net.minecraft.server.Advancement.SerializedAdvancement) ChatDeserializer.a(AdvancementDataWorld.DESERIALIZER, advancement, net.minecraft.server.Advancement.SerializedAdvancement.class); if (nms != null) { - AdvancementDataWorld.REGISTRY.a(Maps.newHashMap(Collections.singletonMap(CraftNamespacedKey.toMinecraft(key), nms))); + MinecraftServer.getServer().getAdvancementData().REGISTRY.a(Maps.newHashMap(Collections.singletonMap(CraftNamespacedKey.toMinecraft(key), nms))); Advancement bukkit = Bukkit.getAdvancement(key); if (bukkit != null) { diff --git a/src/test/java/org/bukkit/GameRuleTest.java b/src/test/java/org/bukkit/GameRuleTest.java index 1ed0f4cf2b..ca598c58b4 100644 --- a/src/test/java/org/bukkit/GameRuleTest.java +++ b/src/test/java/org/bukkit/GameRuleTest.java @@ -1,8 +1,8 @@ package org.bukkit; import java.util.Map; -import java.util.TreeMap; import net.minecraft.server.GameRules; +import org.bukkit.craftbukkit.CraftWorld; import org.junit.Assert; import org.junit.Test; @@ -21,12 +21,12 @@ public class GameRuleTest { @Test public void testMinecraftRules() { - TreeMap minecraftRules = GameRules.getGameRules(); + Map> minecraftRules = CraftWorld.getGameRulesNMS(); - for (Map.Entry entry : minecraftRules.entrySet()) { + for (Map.Entry> entry : minecraftRules.entrySet()) { GameRule bukkitRule = GameRule.getByName(entry.getKey()); - Assert.assertNotNull(bukkitRule); + Assert.assertNotNull("Missing " + entry.getKey(), bukkitRule); Assert.assertEquals("Invalid GameRule Name", bukkitRule.getName(), entry.getKey()); } }