mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 07:20:24 +01:00
fix allowPermanentBlockBreakExploits config
This commit is contained in:
parent
c71ada60db
commit
5922e6334b
18 changed files with 31 additions and 50 deletions
|
@ -11,7 +11,7 @@ import org.jetbrains.annotations.Nullable;
|
||||||
/**
|
/**
|
||||||
* Thrown whenever a LivingEntity dies
|
* Thrown whenever a LivingEntity dies
|
||||||
*/
|
*/
|
||||||
public class EntityDeathEvent extends EntityEvent implements org.bukkit.event.Cancellable { // Paper - make cancellable
|
public class EntityDeathEvent extends EntityEvent implements org.bukkit.event.Cancellable { // Paper - make cancellable
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
private final DamageSource damageSource;
|
private final DamageSource damageSource;
|
||||||
private final List<ItemStack> drops;
|
private final List<ItemStack> drops;
|
||||||
|
|
|
@ -25,7 +25,7 @@ public final class EquipmentSlotGroup implements Predicate<EquipmentSlot> {
|
||||||
public static final EquipmentSlotGroup LEGS = get("legs", EquipmentSlot.LEGS);
|
public static final EquipmentSlotGroup LEGS = get("legs", EquipmentSlot.LEGS);
|
||||||
public static final EquipmentSlotGroup CHEST = get("chest", EquipmentSlot.CHEST);
|
public static final EquipmentSlotGroup CHEST = get("chest", EquipmentSlot.CHEST);
|
||||||
public static final EquipmentSlotGroup HEAD = get("head", EquipmentSlot.HEAD);
|
public static final EquipmentSlotGroup HEAD = get("head", EquipmentSlot.HEAD);
|
||||||
public static final EquipmentSlotGroup ARMOR = get("armor", (test) -> test == EquipmentSlot.FEET || test == EquipmentSlot.LEGS || test == EquipmentSlot.CHEST || test == EquipmentSlot.HEAD || test == EquipmentSlot.BODY, EquipmentSlot.CHEST); // Paper - add missing slot type
|
public static final EquipmentSlotGroup ARMOR = get("armor", (test) -> test == EquipmentSlot.FEET || test == EquipmentSlot.LEGS || test == EquipmentSlot.CHEST || test == EquipmentSlot.HEAD || test == EquipmentSlot.BODY, EquipmentSlot.CHEST); // Paper - add missing slot type
|
||||||
public static final EquipmentSlotGroup BODY = get("body", EquipmentSlot.BODY); // Paper - add missing slot group
|
public static final EquipmentSlotGroup BODY = get("body", EquipmentSlot.BODY); // Paper - add missing slot group
|
||||||
//
|
//
|
||||||
private final String key;
|
private final String key;
|
||||||
|
|
|
@ -786,14 +786,14 @@ index 7c0862c50b44555fb27ce7dc46f4ec95a3eb0022..774ca9e0b56fd175ae246051de762d0c
|
||||||
public void tick() {
|
public void tick() {
|
||||||
super.tick();
|
super.tick();
|
||||||
diff --git a/net/minecraft/world/entity/vehicle/MinecartHopper.java b/net/minecraft/world/entity/vehicle/MinecartHopper.java
|
diff --git a/net/minecraft/world/entity/vehicle/MinecartHopper.java b/net/minecraft/world/entity/vehicle/MinecartHopper.java
|
||||||
index c553cf0592dfa606dbbb1e6854d3377b9feb5efb..dec705ec57e4f63ef2ccaa87c5400c116aee9b35 100644
|
index c553cf0592dfa606dbbb1e6854d3377b9feb5efb..8341e7f01606fca90e69384c16fc19bb9e20d1b7 100644
|
||||||
--- a/net/minecraft/world/entity/vehicle/MinecartHopper.java
|
--- a/net/minecraft/world/entity/vehicle/MinecartHopper.java
|
||||||
+++ b/net/minecraft/world/entity/vehicle/MinecartHopper.java
|
+++ b/net/minecraft/world/entity/vehicle/MinecartHopper.java
|
||||||
@@ -47,6 +47,7 @@ public class MinecartHopper extends AbstractMinecartContainer implements Hopper
|
@@ -47,6 +47,7 @@ public class MinecartHopper extends AbstractMinecartContainer implements Hopper
|
||||||
if (flag != this.isEnabled()) {
|
if (flag != this.isEnabled()) {
|
||||||
this.setEnabled(flag);
|
this.setEnabled(flag);
|
||||||
}
|
}
|
||||||
+ this.immunize(); // Paper
|
+ this.immunize(); // Paper
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnabled() {
|
public boolean isEnabled() {
|
||||||
|
@ -801,13 +801,13 @@ index c553cf0592dfa606dbbb1e6854d3377b9feb5efb..dec705ec57e4f63ef2ccaa87c5400c11
|
||||||
|
|
||||||
public boolean suckInItems() {
|
public boolean suckInItems() {
|
||||||
if (HopperBlockEntity.suckInItems(this.level(), this)) {
|
if (HopperBlockEntity.suckInItems(this.level(), this)) {
|
||||||
+ this.immunize(); // Paper
|
+ this.immunize(); // Paper
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
for (ItemEntity itemEntity : this.level()
|
for (ItemEntity itemEntity : this.level()
|
||||||
.getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate(0.25, 0.0, 0.25), EntitySelector.ENTITY_STILL_ALIVE)) {
|
.getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate(0.25, 0.0, 0.25), EntitySelector.ENTITY_STILL_ALIVE)) {
|
||||||
if (HopperBlockEntity.addItem(this, itemEntity)) {
|
if (HopperBlockEntity.addItem(this, itemEntity)) {
|
||||||
+ this.immunize(); // Paper
|
+ this.immunize(); // Paper
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ Inline bit operations and reduce instruction count to make these hot
|
||||||
operations faster
|
operations faster
|
||||||
|
|
||||||
diff --git a/net/minecraft/core/BlockPos.java b/net/minecraft/core/BlockPos.java
|
diff --git a/net/minecraft/core/BlockPos.java b/net/minecraft/core/BlockPos.java
|
||||||
index 98f0b1cf19d7a035849a9a2fa25e2be3a4c5a980..0822a0faf7af9e746e7936ac17597b1f51e40a92 100644
|
index 98f0b1cf19d7a035849a9a2fa25e2be3a4c5a980..a81694a22e94cca6f7110f7d5b205d1303f4e071 100644
|
||||||
--- a/net/minecraft/core/BlockPos.java
|
--- a/net/minecraft/core/BlockPos.java
|
||||||
+++ b/net/minecraft/core/BlockPos.java
|
+++ b/net/minecraft/core/BlockPos.java
|
||||||
@@ -51,15 +51,17 @@ public class BlockPos extends Vec3i {
|
@@ -51,15 +51,17 @@ public class BlockPos extends Vec3i {
|
||||||
|
@ -62,7 +62,7 @@ index 98f0b1cf19d7a035849a9a2fa25e2be3a4c5a980..0822a0faf7af9e746e7936ac17597b1f
|
||||||
|
|
||||||
public static int getZ(long packedPos) {
|
public static int getZ(long packedPos) {
|
||||||
- return (int)(packedPos << 64 - Z_OFFSET - PACKED_HORIZONTAL_LENGTH >> 64 - PACKED_HORIZONTAL_LENGTH);
|
- return (int)(packedPos << 64 - Z_OFFSET - PACKED_HORIZONTAL_LENGTH >> 64 - PACKED_HORIZONTAL_LENGTH);
|
||||||
+ return (int) ((packedPos << 26) >> 38); // Paper - simplify/inline
|
+ return (int) ((packedPos << 26) >> 38); // Paper - simplify/inline
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BlockPos of(long packedPos) {
|
public static BlockPos of(long packedPos) {
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
@Override
|
@Override
|
||||||
public final void addPlayerListener(PlayerAdvancements playerAdvancements, CriterionTrigger.Listener<T> listener) {
|
public final void addPlayerListener(PlayerAdvancements playerAdvancements, CriterionTrigger.Listener<T> listener) {
|
||||||
- this.players.computeIfAbsent(playerAdvancements, advancements -> Sets.newHashSet()).add(listener);
|
- this.players.computeIfAbsent(playerAdvancements, advancements -> Sets.newHashSet()).add(listener);
|
||||||
+ playerAdvancements.criterionData.computeIfAbsent(this, managerx -> Sets.newHashSet()).add(listener); // Paper - fix PlayerAdvancements leak
|
+ playerAdvancements.criterionData.computeIfAbsent(this, managerx -> Sets.newHashSet()).add(listener); // Paper - fix PlayerAdvancements leak
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
public static ClientboundBlockEntityDataPacket create(BlockEntity blockEntity, BiFunction<BlockEntity, RegistryAccess, CompoundTag> dataGetter) {
|
public static ClientboundBlockEntityDataPacket create(BlockEntity blockEntity, BiFunction<BlockEntity, RegistryAccess, CompoundTag> dataGetter) {
|
||||||
RegistryAccess registryAccess = blockEntity.getLevel().registryAccess();
|
RegistryAccess registryAccess = blockEntity.getLevel().registryAccess();
|
||||||
- return new ClientboundBlockEntityDataPacket(blockEntity.getBlockPos(), blockEntity.getType(), dataGetter.apply(blockEntity, registryAccess));
|
- return new ClientboundBlockEntityDataPacket(blockEntity.getBlockPos(), blockEntity.getType(), dataGetter.apply(blockEntity, registryAccess));
|
||||||
+ return new ClientboundBlockEntityDataPacket(blockEntity.getBlockPos(), blockEntity.getType(), blockEntity.sanitizeSentNbt(dataGetter.apply(blockEntity, registryAccess))); // Paper - Sanitize sent data
|
+ return new ClientboundBlockEntityDataPacket(blockEntity.getBlockPos(), blockEntity.getType(), blockEntity.sanitizeSentNbt(dataGetter.apply(blockEntity, registryAccess))); // Paper - Sanitize sent data
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ClientboundBlockEntityDataPacket create(BlockEntity blockEntity) {
|
public static ClientboundBlockEntityDataPacket create(BlockEntity blockEntity) {
|
||||||
|
|
|
@ -511,7 +511,7 @@
|
||||||
|
|
||||||
private boolean isPvpAllowed() {
|
private boolean isPvpAllowed() {
|
||||||
- return this.server.isPvpAllowed();
|
- return this.server.isPvpAllowed();
|
||||||
+ return this.level().pvpMode; // CraftBukkit - this.server.isPvpAllowed() -> this.world.pvpMode
|
+ return this.level().pvpMode; // CraftBukkit - this.server.isPvpAllowed() -> this.world.pvpMode
|
||||||
}
|
}
|
||||||
|
|
||||||
- public TeleportTransition findRespawnPositionAndUseSpawnBlock(boolean useCharge, TeleportTransition.PostTeleportTransition postTeleportTransition) {
|
- public TeleportTransition findRespawnPositionAndUseSpawnBlock(boolean useCharge, TeleportTransition.PostTeleportTransition postTeleportTransition) {
|
||||||
|
@ -541,7 +541,7 @@
|
||||||
} else {
|
} else {
|
||||||
- return new TeleportTransition(this.server.overworld(), this, postTeleportTransition);
|
- return new TeleportTransition(this.server.overworld(), this, postTeleportTransition);
|
||||||
- }
|
- }
|
||||||
+ teleportTransition = new TeleportTransition(this.server.overworld(), this, postTeleportTransition); // CraftBukkit
|
+ teleportTransition = new TeleportTransition(this.server.overworld(), this, postTeleportTransition); // CraftBukkit
|
||||||
+ }
|
+ }
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ if (respawnReason == null) {
|
+ if (respawnReason == null) {
|
||||||
|
@ -1123,7 +1123,7 @@
|
||||||
|
|
||||||
for (MobEffectInstance mobEffectInstance : that.getActiveEffects()) {
|
for (MobEffectInstance mobEffectInstance : that.getActiveEffects()) {
|
||||||
- this.addEffect(new MobEffectInstance(mobEffectInstance));
|
- this.addEffect(new MobEffectInstance(mobEffectInstance));
|
||||||
+ // this.addEffect(new MobEffectInstance(mobEffectInstance)); // CraftBukkit
|
+ // this.addEffect(new MobEffectInstance(mobEffectInstance)); // CraftBukkit
|
||||||
}
|
}
|
||||||
|
|
||||||
this.getInventory().replaceWith(that.getInventory());
|
this.getInventory().replaceWith(that.getInventory());
|
||||||
|
@ -1203,7 +1203,7 @@
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
if (this.acceptsChatMessages()) {
|
if (this.acceptsChatMessages()) {
|
||||||
- message.sendToPlayer(this, filtered, boundType);
|
- message.sendToPlayer(this, filtered, boundType);
|
||||||
+ message.sendToPlayer(this, filtered, boundType, unsigned); // Paper
|
+ message.sendToPlayer(this, filtered, boundType, unsigned); // Paper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
this(EntityType.TNT, level);
|
this(EntityType.TNT, level);
|
||||||
this.setPos(x, y, z);
|
this.setPos(x, y, z);
|
||||||
- double d = level.random.nextDouble() * (float) (Math.PI * 2);
|
- double d = level.random.nextDouble() * (float) (Math.PI * 2);
|
||||||
+ double d = this.random.nextDouble() * (float) (Math.PI * 2); // Paper - Don't use level random in entity constructors
|
+ double d = this.random.nextDouble() * (float) (Math.PI * 2); // Paper - Don't use level random in entity constructors
|
||||||
this.setDeltaMovement(-Math.sin(d) * 0.02, 0.2F, -Math.cos(d) * 0.02);
|
this.setDeltaMovement(-Math.sin(d) * 0.02, 0.2F, -Math.cos(d) * 0.02);
|
||||||
this.setFuse(80);
|
this.setFuse(80);
|
||||||
this.xo = x;
|
this.xo = x;
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i > 5) {
|
if (i > 5) {
|
||||||
+ org.bukkit.craftbukkit.event.CraftEventFactory.callRaidStopEvent(this, org.bukkit.event.raid.RaidStopEvent.Reason.UNSPAWNABLE); // CraftBukkit
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callRaidStopEvent(this, org.bukkit.event.raid.RaidStopEvent.Reason.UNSPAWNABLE); // CraftBukkit
|
||||||
this.stop();
|
this.stop();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
- itemInHand.consume(1, player);
|
- itemInHand.consume(1, player);
|
||||||
- player.awardStat(Stats.ITEM_USED.get(this));
|
- player.awardStat(Stats.ITEM_USED.get(this));
|
||||||
+ // Paper start - PlayerElytraBoostEvent
|
+ // Paper start - PlayerElytraBoostEvent
|
||||||
+ final Projectile.Delayed<FireworkRocketEntity> delayed = Projectile.spawnProjectileDelayed(new FireworkRocketEntity(level, itemInHand, player), serverLevel, itemInHand, f -> f.spawningEntity = player.getUUID()); // Paper - firework api - assign spawning entity uuid
|
+ final Projectile.Delayed<FireworkRocketEntity> delayed = Projectile.spawnProjectileDelayed(new FireworkRocketEntity(level, itemInHand, player), serverLevel, itemInHand, f -> f.spawningEntity = player.getUUID()); // Paper - firework api - assign spawning entity uuid
|
||||||
+ com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Firework) delayed.projectile().getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand));
|
+ com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Firework) delayed.projectile().getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand));
|
||||||
+ if (event.callEvent() && delayed.attemptSpawn()) {
|
+ if (event.callEvent() && delayed.attemptSpawn()) {
|
||||||
+ player.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below
|
+ player.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
Direction direction = state.getValue(FACING);
|
Direction direction = state.getValue(FACING);
|
||||||
+ // Paper start - Protect Bedrock and End Portal/Frames from being destroyed; prevent retracting when we're facing the wrong way (we were replaced before retraction could occur)
|
+ // Paper start - Protect Bedrock and End Portal/Frames from being destroyed; prevent retracting when we're facing the wrong way (we were replaced before retraction could occur)
|
||||||
+ Direction directionQueuedAs = Direction.from3DDataValue(param & 7); // Paper - copied from below
|
+ Direction directionQueuedAs = Direction.from3DDataValue(param & 7); // Paper - copied from below
|
||||||
+ if (!io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowPermanentBlockBreakExploits && directionQueuedAs != directionQueuedAs) {
|
+ if (!io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowPermanentBlockBreakExploits && direction != directionQueuedAs) {
|
||||||
+ return false;
|
+ return false;
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end - Protect Bedrock and End Portal/Frames from being destroyed
|
+ // Paper end - Protect Bedrock and End Portal/Frames from being destroyed
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
|
|
||||||
protected boolean canBeReplaced(BlockState state, BlockPlaceContext useContext) {
|
protected boolean canBeReplaced(BlockState state, BlockPlaceContext useContext) {
|
||||||
- return state.canBeReplaced() && (useContext.getItemInHand().isEmpty() || !useContext.getItemInHand().is(this.asItem()));
|
- return state.canBeReplaced() && (useContext.getItemInHand().isEmpty() || !useContext.getItemInHand().is(this.asItem()));
|
||||||
+ return state.canBeReplaced() && (useContext.getItemInHand().isEmpty() || !useContext.getItemInHand().is(this.asItem()))&& (state.isDestroyable() || (useContext.getPlayer() != null && useContext.getPlayer().getAbilities().instabuild)); // Paper - Protect Bedrock and End Portal/Frames from being destroyed
|
+ return state.canBeReplaced() && (useContext.getItemInHand().isEmpty() || !useContext.getItemInHand().is(this.asItem())) && (state.isDestroyable() || (useContext.getPlayer() != null && useContext.getPlayer().getAbilities().instabuild)); // Paper - Protect Bedrock and End Portal/Frames from being destroyed
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean canBeReplaced(BlockState state, Fluid fluid) {
|
protected boolean canBeReplaced(BlockState state, Fluid fluid) {
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
- boolean flag = i == -z || i == z;
|
- boolean flag = i == -z || i == z;
|
||||||
+ // Paper start - Perf: iterate over border chunks instead of entire square chunk area
|
+ // Paper start - Perf: iterate over border chunks instead of entire square chunk area
|
||||||
+ final int radius = z;
|
+ final int radius = z;
|
||||||
+ boolean flag = i == -z || i == z; final boolean onBorderAlongZAxis = flag; // Paper - OBFHELPER
|
+ boolean flag = i == -z || i == z; final boolean onBorderAlongZAxis = flag; // Paper - OBFHELPER
|
||||||
|
|
||||||
- for (int i1 = -z; i1 <= z; i1++) {
|
- for (int i1 = -z; i1 <= z; i1++) {
|
||||||
- boolean flag1 = i1 == -z || i1 == z;
|
- boolean flag1 = i1 == -z || i1 == z;
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
+ long featurePopulationSeed = l;
|
+ long featurePopulationSeed = l;
|
||||||
+ final long configFeatureSeed = level.getMinecraftWorld().paperConfig().featureSeeds.features.getLong(placedFeature.feature());
|
+ final long configFeatureSeed = level.getMinecraftWorld().paperConfig().featureSeeds.features.getLong(placedFeature.feature());
|
||||||
+ if (configFeatureSeed != -1) {
|
+ if (configFeatureSeed != -1) {
|
||||||
+ featurePopulationSeed = worldgenRandom.setDecorationSeed(configFeatureSeed, blockPos.getX(), blockPos.getZ()); // See seededrandom.setDecorationSeed from above
|
+ featurePopulationSeed = worldgenRandom.setDecorationSeed(configFeatureSeed, blockPos.getX(), blockPos.getZ()); // See WorldgenRandom.setDecorationSeed from above
|
||||||
+ }
|
+ }
|
||||||
+ worldgenRandom.setFeatureSeed(featurePopulationSeed, i3, i);
|
+ worldgenRandom.setFeatureSeed(featurePopulationSeed, i3, i);
|
||||||
+ // Paper end - Configurable feature seeds
|
+ // Paper end - Configurable feature seeds
|
||||||
|
|
|
@ -265,7 +265,7 @@
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -711,23 +_,25 @@
|
@@ -711,23 +_,24 @@
|
||||||
if (this.blockEntity.getType().isValid(blockState)) {
|
if (this.blockEntity.getType().isValid(blockState)) {
|
||||||
this.ticker.tick(LevelChunk.this.level, this.blockEntity.getBlockPos(), blockState, this.blockEntity);
|
this.ticker.tick(LevelChunk.this.level, this.blockEntity.getBlockPos(), blockState, this.blockEntity);
|
||||||
this.loggedInvalidBlockState = false;
|
this.loggedInvalidBlockState = false;
|
||||||
|
@ -278,17 +278,15 @@
|
||||||
- LogUtils.defer(this::getPos),
|
- LogUtils.defer(this::getPos),
|
||||||
- blockState
|
- blockState
|
||||||
- );
|
- );
|
||||||
- }
|
|
||||||
+ // Paper start - Remove the Block Entity if it's invalid
|
+ // Paper start - Remove the Block Entity if it's invalid
|
||||||
+ } else {
|
+ } else {
|
||||||
+ LevelChunk.this.removeBlockEntity(this.getPos());
|
+ LevelChunk.this.removeBlockEntity(this.getPos());
|
||||||
+ if (!this.loggedInvalidBlockState) {
|
+ if (!this.loggedInvalidBlockState) {
|
||||||
+ this.loggedInvalidBlockState = true;
|
+ this.loggedInvalidBlockState = true;
|
||||||
+ LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), blockState});
|
+ LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", LogUtils.defer(this::getType), LogUtils.defer(this::getPos), blockState);
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end - Remove the Block Entity if it's invalid
|
+ // Paper end - Remove the Block Entity if it's invalid
|
||||||
+ }
|
}
|
||||||
+
|
|
||||||
|
|
||||||
profilerFiller.pop();
|
profilerFiller.pop();
|
||||||
} catch (Throwable var5) {
|
} catch (Throwable var5) {
|
||||||
|
|
|
@ -1,13 +1,5 @@
|
||||||
--- a/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java
|
--- a/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java
|
||||||
+++ b/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java
|
+++ b/net/minecraft/world/level/levelgen/structure/structures/MineshaftPieces.java
|
||||||
@@ -8,6 +_,7 @@
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.nbt.NbtOps;
|
|
||||||
+import net.minecraft.nbt.Tag;
|
|
||||||
import net.minecraft.resources.ResourceKey;
|
|
||||||
import net.minecraft.tags.BiomeTags;
|
|
||||||
import net.minecraft.util.RandomSource;
|
|
||||||
@@ -401,10 +_,13 @@
|
@@ -401,10 +_,13 @@
|
||||||
BlockPos worldPos = this.getWorldPos(1, 0, i8);
|
BlockPos worldPos = this.getWorldPos(1, 0, i8);
|
||||||
if (box.isInside(worldPos) && this.isInterior(level, 1, 0, i8, box)) {
|
if (box.isInside(worldPos) && this.isInterior(level, 1, 0, i8, box)) {
|
||||||
|
|
|
@ -1,13 +1,5 @@
|
||||||
--- a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
--- a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
||||||
+++ b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
+++ b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
||||||
@@ -25,6 +_,7 @@
|
|
||||||
import net.minecraft.nbt.IntTag;
|
|
||||||
import net.minecraft.nbt.ListTag;
|
|
||||||
import net.minecraft.nbt.NbtUtils;
|
|
||||||
+import net.minecraft.nbt.Tag;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.util.RandomSource;
|
|
||||||
import net.minecraft.world.Clearable;
|
|
||||||
@@ -54,6 +_,10 @@
|
@@ -54,6 +_,10 @@
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraft.world.phys.shapes.BitSetDiscreteVoxelShape;
|
import net.minecraft.world.phys.shapes.BitSetDiscreteVoxelShape;
|
||||||
|
@ -108,7 +100,7 @@
|
||||||
if (!settings.isIgnoreEntities()) {
|
if (!settings.isIgnoreEntities()) {
|
||||||
this.placeEntities(
|
this.placeEntities(
|
||||||
- serverLevel,
|
- serverLevel,
|
||||||
+ wrappedAccess, // CraftBukkit
|
+ wrappedAccess, // CraftBukkit
|
||||||
offset,
|
offset,
|
||||||
settings.getMirror(),
|
settings.getMirror(),
|
||||||
settings.getRotation(),
|
settings.getRotation(),
|
||||||
|
@ -143,15 +135,14 @@
|
||||||
return NbtUtils.addCurrentDataVersion(tag);
|
return NbtUtils.addCurrentDataVersion(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -720,6 +_,13 @@
|
@@ -720,6 +_,12 @@
|
||||||
this.entityInfoList.add(new StructureTemplate.StructureEntityInfo(vec3, blockPos, compound1));
|
this.entityInfoList.add(new StructureTemplate.StructureEntityInfo(vec3, blockPos, compound1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ // CraftBukkit start - PDC
|
+ // CraftBukkit start - PDC
|
||||||
+ Tag base = tag.get("BukkitValues");
|
+ if (tag.get("BukkitValues") instanceof CompoundTag compoundTag) {
|
||||||
+ if (base instanceof CompoundTag) {
|
+ this.persistentDataContainer.putAll(compoundTag);
|
||||||
+ this.persistentDataContainer.putAll((CompoundTag) base);
|
|
||||||
+ }
|
+ }
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
|
@ -1252,12 +1252,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||||
|
|
||||||
// Paper start - missing entity api
|
// Paper start - missing entity api
|
||||||
@Override
|
@Override
|
||||||
public boolean isInvisible() { // Paper - moved up from LivingEntity
|
public boolean isInvisible() { // Paper - moved up from LivingEntity
|
||||||
return this.getHandle().isInvisible();
|
return this.getHandle().isInvisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInvisible(boolean invisible) { // Paper - moved up from LivingEntity
|
public void setInvisible(boolean invisible) { // Paper - moved up from LivingEntity
|
||||||
this.getHandle().persistentInvisibility = invisible;
|
this.getHandle().persistentInvisibility = invisible;
|
||||||
this.getHandle().setSharedFlag(Entity.FLAG_INVISIBLE, invisible);
|
this.getHandle().setSharedFlag(Entity.FLAG_INVISIBLE, invisible);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ class CraftAsyncTask extends CraftTask {
|
||||||
// Paper start - name threads according to running plugin
|
// Paper start - name threads according to running plugin
|
||||||
final String nameBefore = thread.getName();
|
final String nameBefore = thread.getName();
|
||||||
thread.setName(nameBefore + " - " + this.getOwner().getName());
|
thread.setName(nameBefore + " - " + this.getOwner().getName());
|
||||||
try { synchronized (this.workers) { // Paper end - name threads according to running plugin
|
try { synchronized (this.workers) { // Paper end - name threads according to running plugin
|
||||||
if (this.getPeriod() == CraftTask.CANCEL) {
|
if (this.getPeriod() == CraftTask.CANCEL) {
|
||||||
// Never continue running after cancelled.
|
// Never continue running after cancelled.
|
||||||
// Checking this with the lock is important!
|
// Checking this with the lock is important!
|
||||||
|
|
Loading…
Reference in a new issue