mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-22 18:45:54 +01:00
426 lines
26 KiB
Diff
426 lines
26 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Mon, 11 Jul 2022 11:56:41 -0700
|
|
Subject: [PATCH] Fix a bunch of vanilla bugs
|
|
|
|
https://bugs.mojang.com/browse/MC-253721
|
|
wrong msg for opping multiple players
|
|
|
|
https://bugs.mojang.com/browse/MC-248588
|
|
respect mob griefing gamerule for draining water cauldrons
|
|
|
|
https://bugs.mojang.com/browse/MC-244739
|
|
play goat eating sound for last item in stack
|
|
|
|
https://bugs.mojang.com/browse/MC-243057
|
|
ignore furnace fuel slot in recipe book click
|
|
|
|
https://bugs.mojang.com/browse/MC-147659
|
|
Some witch huts spawn the incorrect cat
|
|
Note: Marked as Won't Fix, makes 0 sense
|
|
|
|
https://bugs.mojang.com/browse/MC-179072
|
|
Creepers do not defuse when switching from Survival to Creative/Spectator
|
|
|
|
https://bugs.mojang.com/browse/MC-259571
|
|
Fix changeGameModeForPlayer to use gameModeForPlayer
|
|
|
|
https://bugs.mojang.com/browse/MC-262422
|
|
Fix lightning being able to hit spectators
|
|
|
|
https://bugs.mojang.com/browse/MC-224454
|
|
Fix mobs attempting to pathfind through azalea blocks
|
|
|
|
https://bugs.mojang.com/browse/MC-263999
|
|
Fix mobs breaking doors not spawning block break particles
|
|
|
|
https://bugs.mojang.com/browse/MC-210802
|
|
Fixes sheep eating blocks outside of ticking range
|
|
|
|
https://bugs.mojang.com/browse/MC-123848
|
|
Fixes item frames dropping items above when pointing down
|
|
|
|
https://bugs.mojang.com/browse/MC-174630
|
|
Fix secondary beacon effect remaining after switching effect
|
|
|
|
https://bugs.mojang.com/browse/MC-153086
|
|
Fix the beacon deactivation sound always playing when broken
|
|
|
|
https://bugs.mojang.com/browse/MC-200092
|
|
Fix yaw being ignored for a player's first spawn pos
|
|
|
|
https://bugs.mojang.com/browse/MC-158900
|
|
Fix error when joining after tempban expired
|
|
|
|
https://bugs.mojang.com/browse/MC-99075
|
|
Fix inventory desync within spawn protected area
|
|
|
|
https://bugs.mojang.com/browse/MC-273635
|
|
Fix TrialSpawner forgets assigned mob when placed by player
|
|
|
|
== AT ==
|
|
public net/minecraft/world/entity/Mob leashInfoTag
|
|
|
|
Co-authored-by: William Blake Galbreath <blake.galbreath@gmail.com>
|
|
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/commands/DeOpCommands.java b/src/main/java/net/minecraft/server/commands/DeOpCommands.java
|
|
index 0283f26151488d715dc823a0008c9a37ef6740fb..d98447e58233745665f0833196226077d972cc2a 100644
|
|
--- a/src/main/java/net/minecraft/server/commands/DeOpCommands.java
|
|
+++ b/src/main/java/net/minecraft/server/commands/DeOpCommands.java
|
|
@@ -35,7 +35,7 @@ public class DeOpCommands {
|
|
if (playerList.isOp(gameProfile)) {
|
|
playerList.deop(gameProfile);
|
|
i++;
|
|
- source.sendSuccess(() -> Component.translatable("commands.deop.success", targets.iterator().next().getName()), true);
|
|
+ source.sendSuccess(() -> Component.translatable("commands.deop.success", gameProfile.getName()), true); // Paper - fixes MC-253721
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/commands/OpCommand.java b/src/main/java/net/minecraft/server/commands/OpCommand.java
|
|
index 6854ca4d4fec2b4fa541c3fabf63787665572609..e7b444a10b244828827b3c66c53465206ea8e0ec 100644
|
|
--- a/src/main/java/net/minecraft/server/commands/OpCommand.java
|
|
+++ b/src/main/java/net/minecraft/server/commands/OpCommand.java
|
|
@@ -46,7 +46,7 @@ public class OpCommand {
|
|
if (!playerList.isOp(gameProfile)) {
|
|
playerList.op(gameProfile);
|
|
i++;
|
|
- source.sendSuccess(() -> Component.translatable("commands.op.success", targets.iterator().next().getName()), true);
|
|
+ source.sendSuccess(() -> Component.translatable("commands.op.success", gameProfile.getName()), true); // Paper - fixes MC-253721
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
index 071e9ef3680c5dc492c6142ccd05f6788ebc3035..61fda6927f060cdf8bcfddaaa08bbbe2c514c630 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
@@ -1027,7 +1027,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
|
// CraftBukkit end
|
|
}
|
|
|
|
- boolean anyPlayerCloseEnoughForSpawning(ChunkPos pos) {
|
|
+ public boolean anyPlayerCloseEnoughForSpawning(ChunkPos pos) { // Paper - public
|
|
// Spigot start
|
|
return this.anyPlayerCloseEnoughForSpawning(pos, false);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
index b88a7f580b4138ceb262f3d398e78fdc2e6b018c..1edad85fc5c199dcab66497fa758e48dd14aec8c 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
@@ -777,7 +777,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
|
} else {
|
|
AABB axisalignedbb = AABB.encapsulatingFullBlocks(blockposition1, new BlockPos(blockposition1.atY(this.getMaxBuildHeight()))).inflate(3.0D);
|
|
List<LivingEntity> list = this.getEntitiesOfClass(LivingEntity.class, axisalignedbb, (entityliving) -> {
|
|
- return entityliving != null && entityliving.isAlive() && this.canSeeSky(entityliving.blockPosition());
|
|
+ return entityliving != null && entityliving.isAlive() && this.canSeeSky(entityliving.blockPosition()) && !entityliving.isSpectator(); // Paper - Fix lightning being able to hit spectators (MC-262422)
|
|
});
|
|
|
|
if (!list.isEmpty()) {
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
index 6abecaac8407b992d208a9108e11fd4954a4106f..03d89f326d320c5d778c3d1e2db7d6b88753faec 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
@@ -93,7 +93,7 @@ public class ServerPlayerGameMode {
|
|
return event; // Paper - Expand PlayerGameModeChangeEvent
|
|
}
|
|
// CraftBukkit end
|
|
- this.setGameModeForPlayer(gameMode, this.previousGameModeForPlayer);
|
|
+ this.setGameModeForPlayer(gameMode, this.gameModeForPlayer); // Paper - Fix MC-259571
|
|
this.player.onUpdateAbilities();
|
|
this.player.server.getPlayerList().broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
|
|
this.level.updateSleepingPlayerList();
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index ca32e5aa6e77ca1bab886e7b6a778ec931ac4e4c..28808ffc6e486f7dc01be370c9eb249dc1f7ea46 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -1814,7 +1814,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
|
} else if (enuminteractionresult.shouldSwing() && !this.player.gameMode.interactResult) { // Paper - Call interact event
|
|
this.player.swing(enumhand, true);
|
|
}
|
|
- }
|
|
+ } else { this.player.containerMenu.sendAllDataToRemote(); } // Paper - Fix inventory desync; MC-99075
|
|
} else {
|
|
MutableComponent ichatmutablecomponent1 = Component.translatable("build.tooHigh", i - 1).withStyle(ChatFormatting.RED);
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
index 03572023ae7f061bf34fed8ac27852e08d6412c0..38b9ab369e25e4b718418375f76e782283b48411 100644
|
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
@@ -260,7 +260,7 @@ public abstract class PlayerList {
|
|
}
|
|
if (optional.isEmpty() || invalidPlayerWorld[0]) {
|
|
// Paper end - reset to main world spawn if first spawn or invalid world
|
|
- player.moveTo(player.adjustSpawnLocation(worldserver1, worldserver1.getSharedSpawnPos()).getBottomCenter(), 0.0F, 0.0F);
|
|
+ player.moveTo(player.adjustSpawnLocation(worldserver1, worldserver1.getSharedSpawnPos()).getBottomCenter(), worldserver1.getSharedSpawnAngle(), 0.0F); // Paper - MC-200092 - fix first spawn pos yaw being ignored
|
|
}
|
|
// Paper end - Entity#getEntitySpawnReason
|
|
player.setServerLevel(worldserver1);
|
|
@@ -703,8 +703,10 @@ public abstract class PlayerList {
|
|
Player player = entity.getBukkitEntity();
|
|
PlayerLoginEvent event = new PlayerLoginEvent(player, loginlistener.connection.hostname, ((java.net.InetSocketAddress) socketaddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.connection.channel.remoteAddress()).getAddress());
|
|
|
|
- if (this.bans.isBanned(gameprofile)) {
|
|
- UserBanListEntry gameprofilebanentry = (UserBanListEntry) this.bans.get(gameprofile);
|
|
+ // Paper start - Fix MC-158900
|
|
+ UserBanListEntry gameprofilebanentry;
|
|
+ if (this.bans.isBanned(gameprofile) && (gameprofilebanentry = this.bans.get(gameprofile)) != null) {
|
|
+ // Paper end - Fix MC-158900
|
|
|
|
ichatmutablecomponent = Component.translatable("multiplayer.disconnect.banned.reason", gameprofilebanentry.getReason());
|
|
if (gameprofilebanentry.getExpires() != null) {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
|
index 784a894688f98f9d0368a36d456c5c94e1ee3695..a85885ee51df585fa11ae9f8fcd67ff2a71c5a18 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
|
@@ -77,9 +77,10 @@ public class BreakDoorGoal extends DoorInteractGoal {
|
|
return;
|
|
}
|
|
// CraftBukkit end
|
|
+ final net.minecraft.world.level.block.state.BlockState oldState = this.mob.level().getBlockState(this.doorPos); // Paper - fix MC-263999
|
|
this.mob.level().removeBlock(this.doorPos, false);
|
|
this.mob.level().levelEvent(1021, this.doorPos, 0);
|
|
- this.mob.level().levelEvent(2001, this.doorPos, Block.getId(this.mob.level().getBlockState(this.doorPos)));
|
|
+ this.mob.level().levelEvent(2001, this.doorPos, Block.getId(oldState)); // Paper - fix MC-263999
|
|
}
|
|
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
|
index d802985f1431be4332c07f0dab88feebedea4ce2..4e2c23ccdf4e4a4d65b291dbe20952bae1838bff 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
|
@@ -31,6 +31,11 @@ public class EatBlockGoal extends Goal {
|
|
|
|
@Override
|
|
public boolean canUse() {
|
|
+ // Paper start - Fix MC-210802
|
|
+ if (!((net.minecraft.server.level.ServerLevel) this.level).chunkSource.chunkMap.anyPlayerCloseEnoughForSpawning(this.mob.chunkPosition())) {
|
|
+ return false;
|
|
+ }
|
|
+ // Paper end
|
|
if (this.mob.getRandom().nextInt(this.mob.isBaby() ? 50 : 1000) != 0) {
|
|
return false;
|
|
} else {
|
|
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/SwellGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/SwellGoal.java
|
|
index ef71b3ef4444c05b4211de87e1c8ec52cbe3e72a..137ec75ee803789deb7b1ca93dd9369c9af362b9 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/ai/goal/SwellGoal.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/SwellGoal.java
|
|
@@ -21,6 +21,13 @@ public class SwellGoal extends Goal {
|
|
return this.creeper.getSwellDir() > 0 || livingEntity != null && this.creeper.distanceToSqr(livingEntity) < 9.0;
|
|
}
|
|
|
|
+ // Paper start - Fix MC-179072
|
|
+ @Override
|
|
+ public boolean canContinueToUse() {
|
|
+ return !net.minecraft.world.entity.EntitySelector.NO_CREATIVE_OR_SPECTATOR.test(this.creeper.getTarget()) && canUse();
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public void start() {
|
|
this.creeper.getNavigation().stop();
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
|
|
index 923806900ef6248576e71260d40e9caf2c8943e8..02e49c7ae5e120302b6479cf3e3934b9217eebf0 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java
|
|
@@ -243,9 +243,10 @@ public class Goat extends Animal {
|
|
player.setItemInHand(hand, itemstack1);
|
|
return InteractionResult.sidedSuccess(this.level().isClientSide);
|
|
} else {
|
|
+ boolean isFood = this.isFood(itemstack); // Paper - track before stack is possibly decreased to 0 (Fixes MC-244739)
|
|
InteractionResult enuminteractionresult = super.mobInteract(player, hand);
|
|
|
|
- if (enuminteractionresult.consumesAction() && this.isFood(itemstack)) {
|
|
+ if (enuminteractionresult.consumesAction() && isFood) { // Paper
|
|
this.level().playSound((Player) null, (Entity) this, this.getEatingSound(itemstack), SoundSource.NEUTRAL, 1.0F, Mth.randomBetween(this.level().random, 0.8F, 1.2F));
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
|
|
index 3c6edc5ea44b7ec15d8fc7a2dca95a11a0d6108a..ba4e0ad7c7c2731d61ec7f60f19d7e9ec31a28ba 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
|
|
@@ -260,6 +260,14 @@ public class ItemFrame extends HangingEntity {
|
|
return (ItemStack) this.getEntityData().get(ItemFrame.DATA_ITEM);
|
|
}
|
|
|
|
+ // Paper start - Fix MC-123848 (spawn item frame drops above block)
|
|
+ @Nullable
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.item.ItemEntity spawnAtLocation(ItemStack stack) {
|
|
+ return this.spawnAtLocation(stack, getDirection().equals(Direction.DOWN) ? -0.6F : 0.0F);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Nullable
|
|
public MapId getFramedMapId(ItemStack itemstack) {
|
|
return (MapId) itemstack.get(DataComponents.MAP_ID);
|
|
diff --git a/src/main/java/net/minecraft/world/entity/npc/CatSpawner.java b/src/main/java/net/minecraft/world/entity/npc/CatSpawner.java
|
|
index 08dcc94c9eca9a5fd61055f05b7737ba5840b5bf..e0e5046c84941a8d17e18c177f3daea9cb631940 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/npc/CatSpawner.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/npc/CatSpawner.java
|
|
@@ -82,8 +82,8 @@ public class CatSpawner implements CustomSpawner {
|
|
if (cat == null) {
|
|
return 0;
|
|
} else {
|
|
+ cat.moveTo(pos, 0.0F, 0.0F); // Paper - move up - Fix MC-147659
|
|
cat.finalizeSpawn(world, world.getCurrentDifficultyAt(pos), MobSpawnType.NATURAL, null);
|
|
- cat.moveTo(pos, 0.0F, 0.0F);
|
|
world.addFreshEntityWithPassengers(cat);
|
|
return 1;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/inventory/BeaconMenu.java b/src/main/java/net/minecraft/world/inventory/BeaconMenu.java
|
|
index 396559c281eee9e8c677cb222721414e8d9e12a2..8b0ebf659f6b219ce2a5d10b0d79f9b89b47c911 100644
|
|
--- a/src/main/java/net/minecraft/world/inventory/BeaconMenu.java
|
|
+++ b/src/main/java/net/minecraft/world/inventory/BeaconMenu.java
|
|
@@ -178,6 +178,11 @@ public class BeaconMenu extends AbstractContainerMenu {
|
|
// Paper end - Add PlayerChangeBeaconEffectEvent
|
|
|
|
public void updateEffects(Optional<Holder<MobEffect>> primary, Optional<Holder<MobEffect>> secondary) {
|
|
+ // Paper start - fix MC-174630 - validate secondary power
|
|
+ if (secondary.isPresent() && secondary.get() != net.minecraft.world.effect.MobEffects.REGENERATION && (primary.isPresent() && secondary.get() != primary.get())) {
|
|
+ secondary = Optional.empty();
|
|
+ }
|
|
+ // Paper end
|
|
if (this.paymentSlot.hasItem()) {
|
|
// Paper start - Add PlayerChangeBeaconEffectEvent
|
|
io.papermc.paper.event.player.PlayerChangeBeaconEffectEvent event = new io.papermc.paper.event.player.PlayerChangeBeaconEffectEvent((org.bukkit.entity.Player) this.player.player.getBukkitEntity(), convert(primary), convert(secondary), this.access.getLocation().getBlock());
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/AzaleaBlock.java b/src/main/java/net/minecraft/world/level/block/AzaleaBlock.java
|
|
index cd90129be2cf8095abd80528e5de3bbe05022a9d..fad69dfc20574ab23634b14252b50929cca75b21 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/AzaleaBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/AzaleaBlock.java
|
|
@@ -51,4 +51,11 @@ public class AzaleaBlock extends BushBlock implements BonemealableBlock {
|
|
public void performBonemeal(ServerLevel world, RandomSource random, BlockPos pos, BlockState state) {
|
|
TreeGrower.AZALEA.growTree(world, world.getChunkSource().getGenerator(), pos, state, random);
|
|
}
|
|
+
|
|
+ // Paper start - Fix MC-224454
|
|
+ @Override
|
|
+ public boolean isPathfindable(BlockState state, net.minecraft.world.level.pathfinder.PathComputationType type) {
|
|
+ return false;
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/LayeredCauldronBlock.java b/src/main/java/net/minecraft/world/level/block/LayeredCauldronBlock.java
|
|
index fa5366961861370c2366e6f0ff026a6d65128316..a5c7c2d24498c66159316a4f92677625975ce5ca 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/LayeredCauldronBlock.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/LayeredCauldronBlock.java
|
|
@@ -69,7 +69,7 @@ public class LayeredCauldronBlock extends AbstractCauldronBlock {
|
|
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
|
if (!world.isClientSide && entity.isOnFire() && this.isEntityInsideContent(state, pos, entity)) {
|
|
// CraftBukkit start
|
|
- if (entity.mayInteract(world, pos)) {
|
|
+ if ((entity instanceof net.minecraft.world.entity.player.Player || world.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING)) && entity.mayInteract(world, pos)) { // Paper - Fixes MC-248588
|
|
if (!this.handleEntityOnFireInsideWithEvent(state, world, pos, entity)) { // Paper - fix powdered snow cauldron extinguishing entities
|
|
return;
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
|
index aa59a45bcbe652996eddb80a3187618b7f6d1234..f1a7054a0ee1842e78338d8984f151b24c352849 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
|
@@ -648,13 +648,10 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
|
|
|
@Override
|
|
public void fillStackedContents(StackedContents finder) {
|
|
- Iterator iterator = this.items.iterator();
|
|
-
|
|
- while (iterator.hasNext()) {
|
|
- ItemStack itemstack = (ItemStack) iterator.next();
|
|
-
|
|
- finder.accountStack(itemstack);
|
|
- }
|
|
+ // Paper start - don't account fuel stack (fixes MC-243057)
|
|
+ finder.accountStack(this.items.get(SLOT_INPUT));
|
|
+ finder.accountStack(this.items.get(SLOT_RESULT));
|
|
+ // Paper end
|
|
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
|
|
index e124f040386e130aebd7135434c4f06d130d28f6..f8d432ef21e59796da4b11c9748ba151c54e5e04 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
|
|
@@ -295,7 +295,11 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
|
|
org.bukkit.block.Block block = org.bukkit.craftbukkit.block.CraftBlock.at(level, worldPosition);
|
|
new io.papermc.paper.event.block.BeaconDeactivatedEvent(block).callEvent();
|
|
// Paper end - beacon activation/deactivation events
|
|
+ // Paper start - fix MC-153086
|
|
+ if (this.levels > 0 && !this.beamSections.isEmpty()) {
|
|
BeaconBlockEntity.playSound(this.level, this.worldPosition, SoundEvents.BEACON_DEACTIVATE);
|
|
+ }
|
|
+ // Paper end
|
|
super.setRemoved();
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java b/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
|
|
index 055f4b87c01ee7ecf7d2a111b72cc5aa85d9fbe8..6684ded7135f943f8cea954b417f596369215357 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
|
|
@@ -100,13 +100,13 @@ public class TrialSpawnerData {
|
|
this.ejectingLootTable = rewardLootTable;
|
|
}
|
|
|
|
- public void reset() {
|
|
+ public void reset(TrialSpawner logic) { // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
|
this.detectedPlayers.clear();
|
|
this.totalMobsSpawned = 0;
|
|
this.nextMobSpawnsAt = 0L;
|
|
this.cooldownEndsAt = 0L;
|
|
this.currentMobs.clear();
|
|
- this.nextSpawnData = Optional.empty();
|
|
+ if (!logic.getConfig().spawnPotentialsDefinition().isEmpty()) this.nextSpawnData = Optional.empty(); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
|
}
|
|
|
|
public boolean hasMobToSpawn(TrialSpawner logic, RandomSource random) {
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java b/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java
|
|
index ffabcfaef8defe932473dee515f05220921904e0..005aea8a747e9cbbc352b8b57c64b84ec71ad321 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerState.java
|
|
@@ -68,7 +68,7 @@ public enum TrialSpawnerState implements StringRepresentable {
|
|
case INACTIVE -> trialSpawnerData.getOrCreateDisplayEntity(logic, world, WAITING_FOR_PLAYERS) == null ? this : WAITING_FOR_PLAYERS;
|
|
case WAITING_FOR_PLAYERS -> {
|
|
if (!logic.canSpawnInLevel(world)) {
|
|
- trialSpawnerData.reset();
|
|
+ trialSpawnerData.reset(logic); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
|
yield this;
|
|
} else if (!trialSpawnerData.hasMobToSpawn(logic, world.random)) {
|
|
yield INACTIVE;
|
|
@@ -79,7 +79,7 @@ public enum TrialSpawnerState implements StringRepresentable {
|
|
}
|
|
case ACTIVE -> {
|
|
if (!logic.canSpawnInLevel(world)) {
|
|
- trialSpawnerData.reset();
|
|
+ trialSpawnerData.reset(logic); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
|
yield WAITING_FOR_PLAYERS;
|
|
} else if (!trialSpawnerData.hasMobToSpawn(logic, world.random)) {
|
|
yield INACTIVE;
|
|
@@ -145,7 +145,7 @@ public enum TrialSpawnerState implements StringRepresentable {
|
|
yield ACTIVE;
|
|
} else if (trialSpawnerData.isCooldownFinished(world)) {
|
|
logic.removeOminous(world, pos);
|
|
- trialSpawnerData.reset();
|
|
+ trialSpawnerData.reset(logic); // Paper - Fix TrialSpawner forgets assigned mob; MC-273635
|
|
yield WAITING_FOR_PLAYERS;
|
|
} else {
|
|
yield this;
|
|
diff --git a/src/main/java/net/minecraft/world/level/portal/DimensionTransition.java b/src/main/java/net/minecraft/world/level/portal/DimensionTransition.java
|
|
index 1595a379875abc718659f6b1ce7c64c6383b1bc8..788f79dc38012595b385ee6a449daa0bccf0079a 100644
|
|
--- a/src/main/java/net/minecraft/world/level/portal/DimensionTransition.java
|
|
+++ b/src/main/java/net/minecraft/world/level/portal/DimensionTransition.java
|
|
@@ -39,7 +39,7 @@ public record DimensionTransition(ServerLevel newLevel, Vec3 pos, Vec3 speed, fl
|
|
}
|
|
|
|
public DimensionTransition(ServerLevel worldserver, Entity entity, DimensionTransition.PostDimensionTransition dimensiontransition_a, PlayerTeleportEvent.TeleportCause cause) {
|
|
- this(worldserver, findAdjustedSharedSpawnPos(worldserver, entity), Vec3.ZERO, 0.0F, 0.0F, false, dimensiontransition_a, cause);
|
|
+ this(worldserver, findAdjustedSharedSpawnPos(worldserver, entity), Vec3.ZERO, worldserver.getSharedSpawnAngle(), 0.0F, false, dimensiontransition_a, cause); // Paper - MC-200092 - fix spawn pos yaw being ignored
|
|
// CraftBukkit end
|
|
}
|
|
|
|
@@ -55,7 +55,7 @@ public record DimensionTransition(ServerLevel newLevel, Vec3 pos, Vec3 speed, fl
|
|
}
|
|
|
|
public static DimensionTransition missingRespawnBlock(ServerLevel world, Entity entity, DimensionTransition.PostDimensionTransition postDimensionTransition) {
|
|
- return new DimensionTransition(world, findAdjustedSharedSpawnPos(world, entity), Vec3.ZERO, 0.0F, 0.0F, true, postDimensionTransition);
|
|
+ return new DimensionTransition(world, findAdjustedSharedSpawnPos(world, entity), Vec3.ZERO, world.getSharedSpawnAngle(), 0.0F, true, postDimensionTransition); // Paper - MC-200092 - fix spawn pos yaw being ignored
|
|
}
|
|
|
|
private static Vec3 findAdjustedSharedSpawnPos(ServerLevel world, Entity entity) {
|