2022-05-06 17:21:24 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Date: Sun, 5 Dec 2021 14:58:17 -0500
2023-10-14 22:46:31 +02:00
Subject: [PATCH] Expand FallingBlock API
2022-05-06 17:21:24 +02:00
2023-10-14 22:46:31 +02:00
- add auto expire setting
- add setter for block data
- add accessors for block state
== AT ==
public net.minecraft.world.entity.item.FallingBlockEntity blockState
Co-authored-by: Lukas Planz <lukas.planz@web.de>
2022-05-06 17:21:24 +02:00
diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
2024-03-03 23:05:34 +01:00
index c0477f913867c67809978a4f240303151d81e6ea..a52c2fc38fd97ffa1684270443646d605ec35830 100644
2022-05-06 17:21:24 +02:00
--- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
Updated Upstream (Bukkit/CraftBukkit/Spigot) (#10277)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing
Bukkit Changes:
9a80d38c SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-722: Add EntityRemoveEvent
258086d9 SPIGOT-7417, PR-967: Add Sign#getTargetSide and Sign#getAllowedEditor
ffaba051 SPIGOT-7584: Add missing Tag.ITEMS_NON_FLAMMABLE_WOOD
CraftBukkit Changes:
98b6c1ac7 SPIGOT-7589 Fix NullPointerException when bans expire
a2736ddb0 SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-1008: Add EntityRemoveEvent
5bf12cb89 SPIGOT-7565: Throw a more descriptive error message when a developer tries to spawn an entity from a CraftBukkit class
76d95fe7e SPIGOT-7417, PR-1343: Add Sign#getTargetSide and Sign#getAllowedEditor
Spigot Changes:
e9ec5485 Rebuild patches
f1b62e0c Rebuild patches
2024-02-23 14:37:33 +01:00
@@ -67,6 +67,7 @@ public class FallingBlockEntity extends Entity {
2022-05-06 17:21:24 +02:00
@Nullable
public CompoundTag blockData;
protected static final EntityDataAccessor<BlockPos> DATA_START_POS = SynchedEntityData.defineId(FallingBlockEntity.class, EntityDataSerializers.BLOCK_POS);
2024-01-18 18:52:00 +01:00
+ public boolean autoExpire = true; // Paper - Expand FallingBlock API
2022-05-06 17:21:24 +02:00
public FallingBlockEntity(EntityType<? extends FallingBlockEntity> type, Level world) {
super(type, world);
2024-03-03 23:05:34 +01:00
@@ -169,7 +170,7 @@ public class FallingBlockEntity extends Entity {
2022-05-06 17:21:24 +02:00
}
2023-06-08 10:47:19 +02:00
if (!this.onGround() && !flag1) {
- if (!this.level().isClientSide && (this.time > 100 && (blockposition.getY() <= this.level().getMinBuildHeight() || blockposition.getY() > this.level().getMaxBuildHeight()) || this.time > 600)) {
2024-01-18 18:52:00 +01:00
+ if (!this.level().isClientSide && ((this.time > 100 && autoExpire) && (blockposition.getY() <= this.level().getMinBuildHeight() || blockposition.getY() > this.level().getMaxBuildHeight()) || (this.time > 600 && autoExpire))) { // Paper - Expand FallingBlock API
2023-06-08 10:47:19 +02:00
if (this.dropItem && this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) {
2022-05-06 17:21:24 +02:00
this.spawnAtLocation((ItemLike) block);
}
2024-03-03 23:05:34 +01:00
@@ -315,6 +316,7 @@ public class FallingBlockEntity extends Entity {
2022-05-06 17:21:24 +02:00
}
2023-06-08 10:47:19 +02:00
nbt.putBoolean("CancelDrop", this.cancelDrop);
2024-01-18 18:52:00 +01:00
+ if (!autoExpire) {nbt.putBoolean("Paper.AutoExpire", false);} // Paper - Expand FallingBlock API
2022-05-06 17:21:24 +02:00
}
2023-06-08 10:47:19 +02:00
@Override
2024-03-03 23:05:34 +01:00
@@ -342,6 +344,11 @@ public class FallingBlockEntity extends Entity {
2024-01-24 11:45:17 +01:00
this.blockState = Blocks.SAND.defaultBlockState();
2022-05-06 17:21:24 +02:00
}
2024-01-24 11:45:17 +01:00
2024-01-18 18:52:00 +01:00
+ // Paper start - Expand FallingBlock API
2023-06-08 10:47:19 +02:00
+ if (nbt.contains("Paper.AutoExpire")) {
+ this.autoExpire = nbt.getBoolean("Paper.AutoExpire");
+ }
2024-01-18 18:52:00 +01:00
+ // Paper end - Expand FallingBlock API
2022-05-06 17:21:24 +02:00
}
2023-06-08 10:47:19 +02:00
public void setHurtsEntities(float fallHurtAmount, int fallHurtMax) {
2022-05-06 17:21:24 +02:00
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java
2024-01-19 22:13:42 +01:00
index a7a3f74b846112d752fe04162b30805961457b11..1359d25a32b4a5d5e8e68ce737bd19f7b5afaf69 100644
2022-05-06 17:21:24 +02:00
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java
2023-10-14 22:46:31 +02:00
@@ -33,6 +33,31 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock {
public BlockData getBlockData() {
return CraftBlockData.fromData(this.getHandle().getBlockState());
}
2024-01-18 18:52:00 +01:00
+ // Paper start - Expand FallingBlock API
2023-10-14 22:46:31 +02:00
+ @Override
+ public void setBlockData(final BlockData blockData) {
+ Preconditions.checkArgument(blockData != null, "blockData");
+ final net.minecraft.world.level.block.state.BlockState oldState = this.getHandle().blockState, newState = ((CraftBlockData) blockData).getState();
+ this.getHandle().blockState = newState;
+ this.getHandle().blockData = null;
+
+ if (oldState != newState) this.update();
+ }
+
+ @Override
+ public org.bukkit.block.BlockState getBlockState() {
+ return org.bukkit.craftbukkit.block.CraftBlockStates.getBlockState(this.getHandle().blockState, this.getHandle().blockData);
+ }
+
+ @Override
+ public void setBlockState(final org.bukkit.block.BlockState blockState) {
+ Preconditions.checkArgument(blockState != null, "blockState");
+ // Calls #update if needed, the block data compound tag is not synced with the client and hence can be mutated after the sync with clients.
+ // The call also clears any potential old block data.
+ this.setBlockData(blockState.getBlockData());
+ if (blockState instanceof final org.bukkit.craftbukkit.block.CraftBlockEntityState<?> tileEntity) this.getHandle().blockData = tileEntity.getSnapshotNBT();
+ }
2024-01-18 18:52:00 +01:00
+ // Paper end - Expand FallingBlock API
2023-10-14 22:46:31 +02:00
@Override
public boolean getDropItem() {
@@ -101,4 +126,15 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock {
2023-06-08 10:47:19 +02:00
this.setHurtEntities(true);
}
2022-05-06 17:21:24 +02:00
}
2024-01-19 22:13:42 +01:00
+ // Paper start - Expand FallingBlock API
2022-05-06 17:21:24 +02:00
+ @Override
+ public boolean doesAutoExpire() {
+ return this.getHandle().autoExpire;
+ }
+
+ @Override
+ public void shouldAutoExpire(boolean autoExpires) {
+ this.getHandle().autoExpire = autoExpires;
+ }
2024-01-19 22:13:42 +01:00
+ // Paper end - Expand FallingBlock API
2023-06-08 10:47:19 +02:00
}