readd debugstick check

This commit is contained in:
Lulu13022002 2024-12-15 15:55:13 +01:00
parent 9346db2844
commit ac9ac5e7ea
No known key found for this signature in database
GPG key ID: 491C8F0B8ACDEB01
13 changed files with 111 additions and 113 deletions

View file

@ -5,3 +5,12 @@
package net.minecraft.world.item; package net.minecraft.world.item;
import java.util.Collection; import java.util.Collection;
@@ -51,7 +_,7 @@
public boolean handleInteraction(
Player player, BlockState stateClicked, LevelAccessor accessor, BlockPos pos, boolean shouldCycleState, ItemStack debugStack
) {
- if (!player.canUseGameMasterBlocks()) {
+ if (!player.canUseGameMasterBlocks() && !(player.getAbilities().instabuild && player.getBukkitEntity().hasPermission("minecraft.debugstick")) && !player.getBukkitEntity().hasPermission("minecraft.debugstick.always")) { // Spigot
return false;
} else {
Holder<Block> blockHolder = stateClicked.getBlockHolder();

View file

@ -1,41 +1,49 @@
--- a/net/minecraft/world/item/EggItem.java --- a/net/minecraft/world/item/EggItem.java
+++ b/net/minecraft/world/item/EggItem.java +++ b/net/minecraft/world/item/EggItem.java
@@ -23,6 +_,28 @@ @@ -23,22 +_,36 @@
@Override @Override
public InteractionResult use(Level level, Player player, InteractionHand hand) { public InteractionResult use(Level level, Player player, InteractionHand hand) {
ItemStack itemInHand = player.getItemInHand(hand); ItemStack itemInHand = player.getItemInHand(hand);
+ if (level instanceof ServerLevel serverLevel) { - level.playSound(
- null,
- player.getX(),
- player.getY(),
- player.getZ(),
- SoundEvents.EGG_THROW,
- SoundSource.PLAYERS,
- 0.5F,
- 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F)
- );
if (level instanceof ServerLevel serverLevel) {
- Projectile.spawnProjectileFromRotation(ThrownEgg::new, serverLevel, itemInHand, player, 0.0F, PROJECTILE_SHOOT_POWER, 1.0F);
+ // CraftBukkit start + // CraftBukkit start
+ // Paper start - PlayerLaunchProjectileEvent + // Paper start - PlayerLaunchProjectileEvent
+ final Projectile.Delayed<ThrownEgg> thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, serverLevel, itemInHand, player, 0.0F, EggItem.PROJECTILE_SHOOT_POWER, 1.0F); + final Projectile.Delayed<ThrownEgg> thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, serverLevel, itemInHand, player, 0.0F, EggItem.PROJECTILE_SHOOT_POWER, 1.0F);
+ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) thrownEgg.projectile().getBukkitEntity()); + com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Projectile) thrownEgg.projectile().getBukkitEntity());
+ if (event.callEvent() && thrownEgg.attemptSpawn()) { + if (event.callEvent() && thrownEgg.attemptSpawn()) {
+ if (event.shouldConsume()) { + if (event.shouldConsume()) {
+ itemInHand.consume(1, player); + itemInHand.consume(1, player);
+ } else if (player instanceof net.minecraft.server.level.ServerPlayer) { + } else {
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory(); + player.containerMenu.sendAllDataToRemote();
+ } + }
+ level.playSound(null, player.getX(), player.getY(), player.getZ(), SoundEvents.EGG_THROW, SoundSource.PLAYERS, 0.5F, 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F)); + level.playSound(
+ null,
+ player.getX(),
+ player.getY(),
+ player.getZ(),
+ SoundEvents.EGG_THROW,
+ SoundSource.PLAYERS,
+ 0.5F,
+ 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F)
+ );
+ player.awardStat(Stats.ITEM_USED.get(this)); + player.awardStat(Stats.ITEM_USED.get(this));
+ } else { + } else {
+ // Paper end - PlayerLaunchProjectileEvent + // Paper end - PlayerLaunchProjectileEvent
+ if (player instanceof net.minecraft.server.level.ServerPlayer) { + player.containerMenu.sendAllDataToRemote();
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory();
+ }
+ return InteractionResult.FAIL; + return InteractionResult.FAIL;
+ } + }
+ // CraftBukkit end + // CraftBukkit end
+ } }
level.playSound(
null,
player.getX(),
@@ -33,12 +_,7 @@
0.5F,
0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F)
);
- if (level instanceof ServerLevel serverLevel) {
- Projectile.spawnProjectileFromRotation(ThrownEgg::new, serverLevel, itemInHand, player, 0.0F, PROJECTILE_SHOOT_POWER, 1.0F);
- }
- -
- player.awardStat(Stats.ITEM_USED.get(this)); - player.awardStat(Stats.ITEM_USED.get(this));
- itemInHand.consume(1, player); - itemInHand.consume(1, player);

View file

@ -32,9 +32,9 @@
+ double deltaLength = Math.sqrt(distanceSquared); + double deltaLength = Math.sqrt(distanceSquared);
+ double relativeX = player.getX() + (deltaX / deltaLength) * viewDistance; + double relativeX = player.getX() + (deltaX / deltaLength) * viewDistance;
+ double relativeZ = player.getZ() + (deltaZ / deltaLength) * viewDistance; + double relativeZ = player.getZ() + (deltaZ / deltaLength) * viewDistance;
+ player.connection.send(new net.minecraft.network.protocol.game.ClientboundLevelEventPacket(1038, new BlockPos((int) relativeX, (int) soundPos.getY(), (int) relativeZ), 0, true)); + player.connection.send(new net.minecraft.network.protocol.game.ClientboundLevelEventPacket(net.minecraft.world.level.block.LevelEvent.SOUND_END_PORTAL_SPAWN, new BlockPos((int) relativeX, (int) soundPos.getY(), (int) relativeZ), 0, true));
+ } else { + } else {
+ player.connection.send(new net.minecraft.network.protocol.game.ClientboundLevelEventPacket(1038, soundPos, 0, true)); + player.connection.send(new net.minecraft.network.protocol.game.ClientboundLevelEventPacket(net.minecraft.world.level.block.LevelEvent.SOUND_END_PORTAL_SPAWN, soundPos, 0, true));
+ } + }
+ } + }
+ // CraftBukkit end + // CraftBukkit end

View file

@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/EnderpearlItem.java --- a/net/minecraft/world/item/EnderpearlItem.java
+++ b/net/minecraft/world/item/EnderpearlItem.java +++ b/net/minecraft/world/item/EnderpearlItem.java
@@ -21,22 +_,32 @@ @@ -21,22 +_,38 @@
@Override @Override
public InteractionResult use(Level level, Player player, InteractionHand hand) { public InteractionResult use(Level level, Player player, InteractionHand hand) {
ItemStack itemInHand = player.getItemInHand(hand); ItemStack itemInHand = player.getItemInHand(hand);
@ -23,21 +23,27 @@
+ if (event.callEvent() && thrownEnderpearl.attemptSpawn()) { + if (event.callEvent() && thrownEnderpearl.attemptSpawn()) {
+ if (event.shouldConsume()) { + if (event.shouldConsume()) {
+ itemInHand.consume(1, player); + itemInHand.consume(1, player);
+ } else if (player instanceof net.minecraft.server.level.ServerPlayer) { + } else {
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory(); + player.containerMenu.sendAllDataToRemote();
+ } + }
+ +
+ serverLevel.playSound((Player) null, player.getX(), player.getY(), player.getZ(), SoundEvents.ENDER_PEARL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (serverLevel.getRandom().nextFloat() * 0.4F + 0.8F)); + level.playSound(
+ null,
+ player.getX(),
+ player.getY(),
+ player.getZ(),
+ SoundEvents.ENDER_PEARL_THROW,
+ SoundSource.NEUTRAL,
+ 0.5F,
+ 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F)
+ );
+ player.awardStat(Stats.ITEM_USED.get(this)); + player.awardStat(Stats.ITEM_USED.get(this));
+ } else { + } else {
+ // Paper end - PlayerLaunchProjectileEvent + // Paper end - PlayerLaunchProjectileEvent
+ if (player instanceof net.minecraft.server.level.ServerPlayer) { + player.containerMenu.sendAllDataToRemote();
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory();
+ }
+ return InteractionResult.FAIL; + return InteractionResult.FAIL;
+ } + }
} }
+ level.playSound((Player) null, player.getX(), player.getY(), player.getZ(), SoundEvents.ENDER_PEARL_THROW, SoundSource.NEUTRAL, 0.5F, 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F));
+ // CraftBukkit end + // CraftBukkit end
- player.awardStat(Stats.ITEM_USED.get(this)); - player.awardStat(Stats.ITEM_USED.get(this));

View file

@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/ExperienceBottleItem.java --- a/net/minecraft/world/item/ExperienceBottleItem.java
+++ b/net/minecraft/world/item/ExperienceBottleItem.java +++ b/net/minecraft/world/item/ExperienceBottleItem.java
@@ -21,22 +_,38 @@ @@ -21,22 +_,36 @@
@Override @Override
public InteractionResult use(Level level, Player player, InteractionHand hand) { public InteractionResult use(Level level, Player player, InteractionHand hand) {
ItemStack itemInHand = player.getItemInHand(hand); ItemStack itemInHand = player.getItemInHand(hand);
@ -23,8 +23,8 @@
+ if (event.callEvent() && thrownExperienceBottle.attemptSpawn()) { + if (event.callEvent() && thrownExperienceBottle.attemptSpawn()) {
+ if (event.shouldConsume()) { + if (event.shouldConsume()) {
+ itemInHand.consume(1, player); + itemInHand.consume(1, player);
+ } else if (player instanceof net.minecraft.server.level.ServerPlayer) { + } else {
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory(); + player.containerMenu.sendAllDataToRemote();
+ } + }
+ +
+ level.playSound( + level.playSound(
@ -38,9 +38,7 @@
+ 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F) + 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F)
+ ); + );
+ } else { + } else {
+ if (player instanceof net.minecraft.server.level.ServerPlayer) { + player.containerMenu.sendAllDataToRemote();
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory();
+ }
+ return InteractionResult.FAIL; + return InteractionResult.FAIL;
+ } + }
+ // Paper end - PlayerLaunchProjectileEvent + // Paper end - PlayerLaunchProjectileEvent

View file

@ -21,12 +21,12 @@
+ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) context.getPlayer().getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Firework) fireworkRocketEntity.projectile().getBukkitEntity()); + com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) context.getPlayer().getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Firework) fireworkRocketEntity.projectile().getBukkitEntity());
+ if (!event.callEvent() || !fireworkRocketEntity.attemptSpawn()) return InteractionResult.PASS; + if (!event.callEvent() || !fireworkRocketEntity.attemptSpawn()) return InteractionResult.PASS;
+ if (event.shouldConsume() && !context.getPlayer().hasInfiniteMaterials()) itemInHand.shrink(1); + if (event.shouldConsume() && !context.getPlayer().hasInfiniteMaterials()) itemInHand.shrink(1);
+ else if (context.getPlayer() instanceof net.minecraft.server.level.ServerPlayer) ((net.minecraft.server.level.ServerPlayer) context.getPlayer()).getBukkitEntity().updateInventory(); + else context.getPlayer().containerMenu.sendAllDataToRemote();
+ // Paper end - PlayerLaunchProjectileEvent + // Paper end - PlayerLaunchProjectileEvent
} }
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
@@ -56,9 +_,19 @@ @@ -56,9 +_,21 @@
if (player.isFallFlying()) { if (player.isFallFlying()) {
ItemStack itemInHand = player.getItemInHand(hand); ItemStack itemInHand = player.getItemInHand(hand);
if (level instanceof ServerLevel serverLevel) { if (level instanceof ServerLevel serverLevel) {
@ -40,11 +40,13 @@
+ player.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below + player.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below
+ if (event.shouldConsume() && !player.hasInfiniteMaterials()) { + if (event.shouldConsume() && !player.hasInfiniteMaterials()) {
+ itemInHand.shrink(1); // Moved up from below + itemInHand.shrink(1); // Moved up from below
+ } else ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory(); + } else {
+ player.containerMenu.sendAllDataToRemote();
+ }
+ } else { + } else {
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory(); + player.containerMenu.sendAllDataToRemote();
+ } + }
+ // Moved up consume/stat + // Moved up consume and changed consume to shrink
+ // Paper end - PlayerElytraBoostEvent + // Paper end - PlayerElytraBoostEvent
} }

View file

@ -5,8 +5,8 @@
if (hangingEntity.survives()) { if (hangingEntity.survives()) {
if (!level.isClientSide) { if (!level.isClientSide) {
+ // CraftBukkit start - fire HangingPlaceEvent + // CraftBukkit start - fire HangingPlaceEvent
+ org.bukkit.entity.Player who = (context.getPlayer() == null) ? null : (org.bukkit.entity.Player) context.getPlayer().getBukkitEntity(); + org.bukkit.entity.Player who = player == null ? null : (org.bukkit.entity.Player) player.getBukkitEntity();
+ org.bukkit.block.Block blockClicked = level.getWorld().getBlockAt(blockPos.getX(), blockPos.getY(), blockPos.getZ()); + org.bukkit.block.Block blockClicked = org.bukkit.craftbukkit.block.CraftBlock.at(level, blockPos);
+ org.bukkit.block.BlockFace blockFace = org.bukkit.craftbukkit.block.CraftBlock.notchToBlockFace(clickedFace); + org.bukkit.block.BlockFace blockFace = org.bukkit.craftbukkit.block.CraftBlock.notchToBlockFace(clickedFace);
+ org.bukkit.inventory.EquipmentSlot hand = org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(context.getHand()); + org.bukkit.inventory.EquipmentSlot hand = org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(context.getHand());
+ +

View file

@ -1,26 +1,5 @@
--- a/net/minecraft/world/item/ItemStack.java --- a/net/minecraft/world/item/ItemStack.java
+++ b/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java
@@ -22,6 +_,7 @@
import net.minecraft.ChatFormatting;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.core.BlockPos;
+import net.minecraft.core.Direction;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.HolderSet;
@@ -45,10 +_,12 @@
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
+import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
import net.minecraft.resources.RegistryOps;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
+import net.minecraft.sounds.SoundSource;
import net.minecraft.stats.Stats;
import net.minecraft.tags.TagKey;
import net.minecraft.util.ExtraCodecs;
@@ -136,18 +_,35 @@ @@ -136,18 +_,35 @@
} else { } else {
Holder<Item> holder = ITEM_STREAM_CODEC.decode(buffer); Holder<Item> holder = ITEM_STREAM_CODEC.decode(buffer);
@ -59,14 +38,13 @@
} }
} }
}; };
@@ -365,10 +_,180 @@ @@ -365,10 +_,178 @@
return InteractionResult.PASS; return InteractionResult.PASS;
} else { } else {
Item item = this.getItem(); Item item = this.getItem();
- InteractionResult interactionResult = item.useOn(context); - InteractionResult interactionResult = item.useOn(context);
+ // InteractionResult interactionResult = item.useOn(context);
+ // CraftBukkit start - handle all block place event logic here + // CraftBukkit start - handle all block place event logic here
+ DataComponentPatch oldData = this.components.asPatch(); + DataComponentPatch previousPatch = this.components.asPatch();
+ int oldCount = this.getCount(); + int oldCount = this.getCount();
+ ServerLevel serverLevel = (ServerLevel) context.getLevel(); + ServerLevel serverLevel = (ServerLevel) context.getLevel();
+ +
@ -83,11 +61,11 @@
+ } finally { + } finally {
+ serverLevel.captureBlockStates = false; + serverLevel.captureBlockStates = false;
+ } + }
+ DataComponentPatch newData = this.components.asPatch(); + DataComponentPatch newPatch = this.components.asPatch();
+ int newCount = this.getCount(); + int newCount = this.getCount();
+ this.setCount(oldCount); + this.setCount(oldCount);
+ this.restorePatch(oldData); + this.restorePatch(previousPatch);
+ if (interactionResult.consumesAction() && serverLevel.captureTreeGeneration && serverLevel.capturedBlockStates.size() > 0) { + if (interactionResult.consumesAction() && serverLevel.captureTreeGeneration && !serverLevel.capturedBlockStates.isEmpty()) {
+ serverLevel.captureTreeGeneration = false; + serverLevel.captureTreeGeneration = false;
+ org.bukkit.Location location = org.bukkit.craftbukkit.util.CraftLocation.toBukkit(clickedPos, serverLevel.getWorld()); + org.bukkit.Location location = org.bukkit.craftbukkit.util.CraftLocation.toBukkit(clickedPos, serverLevel.getWorld());
+ org.bukkit.TreeType treeType = net.minecraft.world.level.block.SaplingBlock.treeType; + org.bukkit.TreeType treeType = net.minecraft.world.level.block.SaplingBlock.treeType;
@ -107,8 +85,8 @@
+ +
+ if (!fertilizeEvent.isCancelled()) { + if (!fertilizeEvent.isCancelled()) {
+ // Change the stack to its new contents if it hasn't been tampered with. + // Change the stack to its new contents if it hasn't been tampered with.
+ if (this.getCount() == oldCount && Objects.equals(this.components.asPatch(), oldData)) { + if (this.getCount() == oldCount && Objects.equals(this.components.asPatch(), previousPatch)) {
+ this.restorePatch(newData); + this.restorePatch(newPatch);
+ this.setCount(newCount); + this.setCount(newCount);
+ } + }
+ for (org.bukkit.craftbukkit.block.CraftBlockState blockstate : blocks) { + for (org.bukkit.craftbukkit.block.CraftBlockState blockstate : blocks) {
@ -125,15 +103,14 @@
+ serverLevel.captureTreeGeneration = false; + serverLevel.captureTreeGeneration = false;
if (player != null && interactionResult instanceof InteractionResult.Success success && success.wasItemInteraction()) { if (player != null && interactionResult instanceof InteractionResult.Success success && success.wasItemInteraction()) {
- player.awardStat(Stats.ITEM_USED.get(item)); - player.awardStat(Stats.ITEM_USED.get(item));
+ // player.awardStat(Stats.ITEM_USED.get(item)); + InteractionHand hand = context.getHand();
+ InteractionHand enumhand = context.getHand();
+ org.bukkit.event.block.BlockPlaceEvent placeEvent = null; + org.bukkit.event.block.BlockPlaceEvent placeEvent = null;
+ List<org.bukkit.block.BlockState> blocks = new java.util.ArrayList<>(serverLevel.capturedBlockStates.values()); + List<org.bukkit.block.BlockState> blocks = new java.util.ArrayList<>(serverLevel.capturedBlockStates.values());
+ serverLevel.capturedBlockStates.clear(); + serverLevel.capturedBlockStates.clear();
+ if (blocks.size() > 1) { + if (blocks.size() > 1) {
+ placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockMultiPlaceEvent(serverLevel, player, enumhand, blocks, clickedPos.getX(), clickedPos.getY(), clickedPos.getZ()); + placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockMultiPlaceEvent(serverLevel, player, hand, blocks, clickedPos.getX(), clickedPos.getY(), clickedPos.getZ());
+ } else if (blocks.size() == 1 && item != Items.POWDER_SNOW_BUCKET) { // Paper - Fix cancelled powdered snow bucket placement + } else if (blocks.size() == 1 && item != Items.POWDER_SNOW_BUCKET) { // Paper - Fix cancelled powdered snow bucket placement
+ placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(serverLevel, player, enumhand, blocks.get(0), clickedPos.getX(), clickedPos.getY(), clickedPos.getZ()); + placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(serverLevel, player, hand, blocks.getFirst(), clickedPos.getX(), clickedPos.getY(), clickedPos.getZ());
+ } + }
+ +
+ if (placeEvent != null && (placeEvent.isCancelled() || !placeEvent.canBuild())) { + if (placeEvent != null && (placeEvent.isCancelled() || !placeEvent.canBuild())) {
@ -143,11 +120,11 @@
+ serverLevel.capturedTileEntities.clear(); // Paper - Allow chests to be placed with NBT data; clear out block entities as chests and such will pop loot + serverLevel.capturedTileEntities.clear(); // Paper - Allow chests to be placed with NBT data; clear out block entities as chests and such will pop loot
+ // revert back all captured blocks + // revert back all captured blocks
+ serverLevel.preventPoiUpdated = true; // CraftBukkit - SPIGOT-5710 + serverLevel.preventPoiUpdated = true; // CraftBukkit - SPIGOT-5710
+ serverLevel.isBlockPlaceCancelled = true; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent + serverLevel.isBlockPlaceCancelled = true; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent
+ for (org.bukkit.block.BlockState blockstate : blocks) { + for (org.bukkit.block.BlockState blockstate : blocks) {
+ blockstate.update(true, false); + blockstate.update(true, false);
+ } + }
+ serverLevel.isBlockPlaceCancelled = false; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent + serverLevel.isBlockPlaceCancelled = false; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent
+ serverLevel.preventPoiUpdated = false; + serverLevel.preventPoiUpdated = false;
+ +
+ // Brute force all possible updates + // Brute force all possible updates
@ -160,8 +137,8 @@
+ SignItem.openSign = null; // SPIGOT-6758 - Reset on early return + SignItem.openSign = null; // SPIGOT-6758 - Reset on early return
+ } else { + } else {
+ // Change the stack to its new contents if it hasn't been tampered with. + // Change the stack to its new contents if it hasn't been tampered with.
+ if (this.getCount() == oldCount && Objects.equals(this.components.asPatch(), oldData)) { + if (this.getCount() == oldCount && Objects.equals(this.components.asPatch(), previousPatch)) {
+ this.restorePatch(newData); + this.restorePatch(newPatch);
+ this.setCount(newCount); + this.setCount(newCount);
+ } + }
+ +
@ -172,14 +149,14 @@
+ for (org.bukkit.block.BlockState blockstate : blocks) { + for (org.bukkit.block.BlockState blockstate : blocks) {
+ int updateFlag = ((org.bukkit.craftbukkit.block.CraftBlockState) blockstate).getFlag(); + int updateFlag = ((org.bukkit.craftbukkit.block.CraftBlockState) blockstate).getFlag();
+ net.minecraft.world.level.block.state.BlockState oldBlock = ((org.bukkit.craftbukkit.block.CraftBlockState) blockstate).getHandle(); + net.minecraft.world.level.block.state.BlockState oldBlock = ((org.bukkit.craftbukkit.block.CraftBlockState) blockstate).getHandle();
+ BlockPos newblockposition = ((org.bukkit.craftbukkit.block.CraftBlockState) blockstate).getPosition(); + BlockPos newPos = ((org.bukkit.craftbukkit.block.CraftBlockState) blockstate).getPosition();
+ net.minecraft.world.level.block.state.BlockState block = serverLevel.getBlockState(newblockposition); + net.minecraft.world.level.block.state.BlockState block = serverLevel.getBlockState(newPos);
+ +
+ if (!(block.getBlock() instanceof net.minecraft.world.level.block.BaseEntityBlock)) { // Containers get placed automatically + if (!(block.getBlock() instanceof net.minecraft.world.level.block.BaseEntityBlock)) { // Containers get placed automatically
+ block.onPlace(serverLevel, newblockposition, oldBlock, true, context); + block.onPlace(serverLevel, newPos, oldBlock, true, context);
+ } + }
+ +
+ serverLevel.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, serverLevel.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point + serverLevel.notifyAndUpdatePhysics(newPos, null, oldBlock, block, serverLevel.getBlockState(newPos), updateFlag, net.minecraft.world.level.block.Block.UPDATE_LIMIT); // send null chunk as chunk.k() returns false by this point
+ } + }
+ +
+ if (this.item == Items.WITHER_SKELETON_SKULL) { // Special case skulls to allow wither spawns to be cancelled + if (this.item == Items.WITHER_SKELETON_SKULL) { // Special case skulls to allow wither spawns to be cancelled
@ -225,12 +202,12 @@
+ +
+ // SPIGOT-1288 - play sound stripped from ItemBlock + // SPIGOT-1288 - play sound stripped from ItemBlock
+ if (this.item instanceof BlockItem) { + if (this.item instanceof BlockItem) {
+ // Paper start - Fix spigot sound playing for BlockItem ItemStacks + // Paper start - Fix spigot sound playing for BlockItem ItemStacks
+ BlockPos position = new net.minecraft.world.item.context.BlockPlaceContext(context).getClickedPos(); + BlockPos position = new net.minecraft.world.item.context.BlockPlaceContext(context).getClickedPos();
+ net.minecraft.world.level.block.state.BlockState blockData = serverLevel.getBlockState(position); + net.minecraft.world.level.block.state.BlockState blockData = serverLevel.getBlockState(position);
+ net.minecraft.world.level.block.SoundType soundeffecttype = blockData.getSoundType(); + net.minecraft.world.level.block.SoundType soundeffecttype = blockData.getSoundType();
+ // Paper end - Fix spigot sound playing for BlockItem ItemStacks + // Paper end - Fix spigot sound playing for BlockItem ItemStacks
+ serverLevel.playSound(player, clickedPos, soundeffecttype.getPlaceSound(), SoundSource.BLOCKS, (soundeffecttype.getVolume() + 1.0F) / 2.0F, soundeffecttype.getPitch() * 0.8F); + serverLevel.playSound(player, clickedPos, soundeffecttype.getPlaceSound(), net.minecraft.sounds.SoundSource.BLOCKS, (soundeffecttype.getVolume() + 1.0F) / 2.0F, soundeffecttype.getPitch() * 0.8F);
+ } + }
+ +
+ player.awardStat(Stats.ITEM_USED.get(item)); + player.awardStat(Stats.ITEM_USED.get(item));

View file

@ -7,7 +7,7 @@
- serverLevel.addFreshEntity(abstractMinecart); - serverLevel.addFreshEntity(abstractMinecart);
+ // CraftBukkit start + // CraftBukkit start
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPlaceEvent(context, abstractMinecart).isCancelled()) { + if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityPlaceEvent(context, abstractMinecart).isCancelled()) {
+ if (context.getPlayer() != null) context.getPlayer().containerMenu.sendAllDataToRemote(); // Paper - Fix inventory desync + if (context.getPlayer() != null) context.getPlayer().containerMenu.sendAllDataToRemote(); // Paper - Fix inventory desync
+ return InteractionResult.FAIL; + return InteractionResult.FAIL;
+ } + }
+ // CraftBukkit end + // CraftBukkit end

View file

@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/NameTagItem.java --- a/net/minecraft/world/item/NameTagItem.java
+++ b/net/minecraft/world/item/NameTagItem.java +++ b/net/minecraft/world/item/NameTagItem.java
@@ -18,8 +_,13 @@ @@ -18,8 +_,14 @@
Component component = stack.get(DataComponents.CUSTOM_NAME); Component component = stack.get(DataComponents.CUSTOM_NAME);
if (component != null && target.getType().canSerialize() && target.canBeNameTagged()) { if (component != null && target.getType().canSerialize() && target.canBeNameTagged()) {
if (!player.level().isClientSide && target.isAlive()) { if (!player.level().isClientSide && target.isAlive()) {
@ -9,10 +9,11 @@
+ // Paper start - Add PlayerNameEntityEvent + // Paper start - Add PlayerNameEntityEvent
+ io.papermc.paper.event.player.PlayerNameEntityEvent event = new io.papermc.paper.event.player.PlayerNameEntityEvent(((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity(), target.getBukkitLivingEntity(), io.papermc.paper.adventure.PaperAdventure.asAdventure(stack.getHoverName()), true); + io.papermc.paper.event.player.PlayerNameEntityEvent event = new io.papermc.paper.event.player.PlayerNameEntityEvent(((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity(), target.getBukkitLivingEntity(), io.papermc.paper.adventure.PaperAdventure.asAdventure(stack.getHoverName()), true);
+ if (!event.callEvent()) return InteractionResult.PASS; + if (!event.callEvent()) return InteractionResult.PASS;
+
+ LivingEntity newEntity = ((org.bukkit.craftbukkit.entity.CraftLivingEntity) event.getEntity()).getHandle(); + LivingEntity newEntity = ((org.bukkit.craftbukkit.entity.CraftLivingEntity) event.getEntity()).getHandle();
+ newEntity.setCustomName(event.getName() != null ? io.papermc.paper.adventure.PaperAdventure.asVanilla(event.getName()) : null); + newEntity.setCustomName(event.getName() != null ? io.papermc.paper.adventure.PaperAdventure.asVanilla(event.getName()) : null);
+ if (event.isPersistent() && newEntity instanceof Mob mob) { + if (event.isPersistent() && newEntity instanceof Mob mob) {
+ // Paper end - Add PlayerNameEntityEvent + // Paper end - Add PlayerNameEntityEvent
mob.setPersistenceRequired(); mob.setPersistenceRequired();
} }

View file

@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/SnowballItem.java --- a/net/minecraft/world/item/SnowballItem.java
+++ b/net/minecraft/world/item/SnowballItem.java +++ b/net/minecraft/world/item/SnowballItem.java
@@ -23,22 +_,38 @@ @@ -23,22 +_,41 @@
@Override @Override
public InteractionResult use(Level level, Player player, InteractionHand hand) { public InteractionResult use(Level level, Player player, InteractionHand hand) {
ItemStack itemInHand = player.getItemInHand(hand); ItemStack itemInHand = player.getItemInHand(hand);
@ -24,10 +24,10 @@
+ player.awardStat(Stats.ITEM_USED.get(this)); + player.awardStat(Stats.ITEM_USED.get(this));
+ if (event.shouldConsume()) { + if (event.shouldConsume()) {
+ itemInHand.consume(1, player); + itemInHand.consume(1, player);
+ } else if (player instanceof net.minecraft.server.level.ServerPlayer) { + } else {
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory(); + player.containerMenu.sendAllDataToRemote();
+ } + }
+ // Paper end - PlayerLaunchProjectileEvent + // Paper end - PlayerLaunchProjectileEvent
+ +
+ level.playSound( + level.playSound(
+ null, + null,
@ -39,9 +39,12 @@
+ 0.5F, + 0.5F,
+ 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F) + 0.4F / (level.getRandom().nextFloat() * 0.4F + 0.8F)
+ ); + );
+ } else { if (player instanceof net.minecraft.server.level.ServerPlayer) { // Paper - PlayerLaunchProjectileEvent - return fail + // Paper start - PlayerLaunchProjectileEvent - return fail
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory(); + } else {
+ } return InteractionResult.FAIL; } // Paper - PlayerLaunchProjectileEvent - return fail + player.containerMenu.sendAllDataToRemote();
+ return InteractionResult.FAIL;
+ }
+ // Paper end- PlayerLaunchProjectileEvent - return fail
+ // CraftBukkit end + // CraftBukkit end
} }

View file

@ -1,27 +1,23 @@
--- a/net/minecraft/world/item/ThrowablePotionItem.java --- a/net/minecraft/world/item/ThrowablePotionItem.java
+++ b/net/minecraft/world/item/ThrowablePotionItem.java +++ b/net/minecraft/world/item/ThrowablePotionItem.java
@@ -22,11 +_,29 @@ @@ -22,11 +_,25 @@
public InteractionResult use(Level level, Player player, InteractionHand hand) { public InteractionResult use(Level level, Player player, InteractionHand hand) {
ItemStack itemInHand = player.getItemInHand(hand); ItemStack itemInHand = player.getItemInHand(hand);
if (level instanceof ServerLevel serverLevel) { if (level instanceof ServerLevel serverLevel) {
- Projectile.spawnProjectileFromRotation(ThrownPotion::new, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, 1.0F); - Projectile.spawnProjectileFromRotation(ThrownPotion::new, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, 1.0F);
+ // Projectile.spawnProjectileFromRotation(ThrownPotion::new, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, 1.0F);
+ // Paper start - PlayerLaunchProjectileEvent + // Paper start - PlayerLaunchProjectileEvent
+ final Projectile.Delayed<ThrownPotion> thrownPotion = Projectile.spawnProjectileFromRotationDelayed(ThrownPotion::new, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, 1.0F); + final Projectile.Delayed<ThrownPotion> thrownPotion = Projectile.spawnProjectileFromRotationDelayed(ThrownPotion::new, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, 1.0F);
+ // Paper start - PlayerLaunchProjectileEvent
+ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Projectile) thrownPotion.projectile().getBukkitEntity()); + com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Projectile) thrownPotion.projectile().getBukkitEntity());
+ if (event.callEvent() && thrownPotion.attemptSpawn()) { + if (event.callEvent() && thrownPotion.attemptSpawn()) {
+ if (event.shouldConsume()) { + if (event.shouldConsume()) {
+ itemInHand.consume(1, player); + itemInHand.consume(1, player);
+ } else if (player instanceof net.minecraft.server.level.ServerPlayer) { + } else {
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory(); + player.containerMenu.sendAllDataToRemote();
+ } + }
+ +
+ player.awardStat(Stats.ITEM_USED.get(this)); + player.awardStat(Stats.ITEM_USED.get(this));
+ } else { + } else {
+ if (player instanceof net.minecraft.server.level.ServerPlayer) { + player.containerMenu.sendAllDataToRemote();
+ ((net.minecraft.server.level.ServerPlayer) player).getBukkitEntity().updateInventory();
+ }
+ return InteractionResult.FAIL; + return InteractionResult.FAIL;
+ } + }
+ // Paper end - PlayerLaunchProjectileEvent + // Paper end - PlayerLaunchProjectileEvent

View file

@ -1,6 +1,6 @@
--- a/net/minecraft/world/item/TridentItem.java --- a/net/minecraft/world/item/TridentItem.java
+++ b/net/minecraft/world/item/TridentItem.java +++ b/net/minecraft/world/item/TridentItem.java
@@ -87,19 +_,37 @@ @@ -87,19 +_,35 @@
.orElse(SoundEvents.TRIDENT_THROW); .orElse(SoundEvents.TRIDENT_THROW);
player.awardStat(Stats.ITEM_USED.get(this)); player.awardStat(Stats.ITEM_USED.get(this));
if (level instanceof ServerLevel serverLevel) { if (level instanceof ServerLevel serverLevel) {
@ -15,10 +15,8 @@
+ com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack), (org.bukkit.entity.Projectile) tridentDelayed.projectile().getBukkitEntity()); + com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack), (org.bukkit.entity.Projectile) tridentDelayed.projectile().getBukkitEntity());
+ if (!event.callEvent() || !tridentDelayed.attemptSpawn()) { + if (!event.callEvent() || !tridentDelayed.attemptSpawn()) {
+ // CraftBukkit start + // CraftBukkit start
+ // Paper end - PlayerLaunchProjectileEvent + // Paper end - PlayerLaunchProjectileEvent
+ if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { + player.containerMenu.sendAllDataToRemote();
+ serverPlayer.getBukkitEntity().updateInventory();
+ }
+ return false; + return false;
+ } + }
+ ThrownTrident thrownTrident = tridentDelayed.projectile(); // Paper - PlayerLaunchProjectileEvent + ThrownTrident thrownTrident = tridentDelayed.projectile(); // Paper - PlayerLaunchProjectileEvent