Skip to content

Commit 392acfd

Browse files
Configurable sculk sensor listener range (#6443)
1 parent 36a1650 commit 392acfd

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

build-data/paper.at

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,3 +308,6 @@ public org.bukkit.craftbukkit.block.data.CraftBlockData toNMS(Ljava/lang/Enum;Lj
308308

309309
# Stronghold seed configuration
310310
public-f net.minecraft.world.level.chunk.ChunkGenerator strongholdSeed
311+
312+
# More Sculk Sensor API
313+
public-f net.minecraft.world.level.gameevent.vibrations.VibrationListener listenerRange
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: Jake Potrebic <jake.m.potrebic@gmail.com>
3+
Date: Thu, 19 Aug 2021 18:43:16 -0700
4+
Subject: [PATCH] Configurable sculk sensor listener range
5+
6+
7+
diff --git a/src/main/java/org/bukkit/block/SculkSensor.java b/src/main/java/org/bukkit/block/SculkSensor.java
8+
index 18966117823eda97e37627fe72b3dbc2c67cab7c..95a822613093479821c22c9aeea32b27d3ec2e21 100644
9+
--- a/src/main/java/org/bukkit/block/SculkSensor.java
10+
+++ b/src/main/java/org/bukkit/block/SculkSensor.java
11+
@@ -24,4 +24,19 @@ public interface SculkSensor extends TileState {
12+
* @param lastVibrationFrequency frequency between 0-15.
13+
*/
14+
void setLastVibrationFrequency(int lastVibrationFrequency);
15+
+ // Paper start
16+
+ /**
17+
+ * Gets the range this sensor listens to events at.
18+
+ *
19+
+ * @return the range (defaults to 8)
20+
+ */
21+
+ int getListenerRange();
22+
+
23+
+ /**
24+
+ * Sets the range this sensor will listen to events from.
25+
+ *
26+
+ * @param range the range (must be greater than 0)
27+
+ */
28+
+ void setListenerRange(int range);
29+
+ // Paper end
30+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: Jake Potrebic <jake.m.potrebic@gmail.com>
3+
Date: Thu, 19 Aug 2021 18:45:42 -0700
4+
Subject: [PATCH] Configurable sculk sensor listener range
5+
6+
7+
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java
8+
index 2b1e61dacaf4338d7584dea197c7439251951d81..16506b950bbe12f28cf0217b6131128723019e54 100644
9+
--- a/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java
10+
+++ b/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java
11+
@@ -26,12 +26,15 @@ public class SculkSensorBlockEntity extends BlockEntity implements VibrationList
12+
public void load(CompoundTag nbt) {
13+
super.load(nbt);
14+
this.lastVibrationFrequency = nbt.getInt("last_vibration_frequency");
15+
+ if (nbt.contains(PAPER_LISTENER_RANGE_NBT_KEY)) this.listener.listenerRange = nbt.getInt(PAPER_LISTENER_RANGE_NBT_KEY); // Paper
16+
}
17+
18+
+ private static final String PAPER_LISTENER_RANGE_NBT_KEY = "Paper.ListenerRange"; // Paper
19+
@Override
20+
protected void saveAdditional(CompoundTag nbt) {
21+
super.saveAdditional(nbt);
22+
nbt.putInt("last_vibration_frequency", this.lastVibrationFrequency);
23+
+ if (this.listener.listenerRange != ((SculkSensorBlock) net.minecraft.world.level.block.Blocks.SCULK_SENSOR).getListenerRange()) nbt.putInt(PAPER_LISTENER_RANGE_NBT_KEY, this.listener.listenerRange); // Paper - only save if it's different from the default
24+
}
25+
26+
public VibrationListener getListener() {
27+
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftSculkSensor.java b/src/main/java/org/bukkit/craftbukkit/block/CraftSculkSensor.java
28+
index 2733154f569002e426690dfcf362ff20da8cba72..34362768f38fb3122abcbd5e63fee38a631b9ee3 100644
29+
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftSculkSensor.java
30+
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftSculkSensor.java
31+
@@ -21,4 +21,16 @@ public class CraftSculkSensor extends CraftBlockEntityState<SculkSensorBlockEnti
32+
Preconditions.checkArgument(0 <= lastVibrationFrequency && lastVibrationFrequency <= 15, "Vibration frequency must be between 0-15");
33+
getSnapshot().lastVibrationFrequency = lastVibrationFrequency;
34+
}
35+
+ // Paper start
36+
+ @Override
37+
+ public int getListenerRange() {
38+
+ return this.getSnapshot().getListener().listenerRange;
39+
+ }
40+
+
41+
+ @Override
42+
+ public void setListenerRange(int range) {
43+
+ Preconditions.checkArgument(range > 0, "Vibration listener range must be greater than 0");
44+
+ this.getSnapshot().getListener().listenerRange = range;
45+
+ }
46+
+ // Paper end
47+
}

0 commit comments

Comments
 (0)