2022-02-20 22:44:14 +01:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Thu, 19 Aug 2021 18:45:42 -0700
Subject: [PATCH] Configurable sculk sensor listener range
2022-11-20 00:53:20 +01:00
== AT ==
public-f net.minecraft.world.level.gameevent.vibrations.VibrationListener listenerRange
2022-02-20 22:44:14 +01:00
2023-06-09 07:35:52 +02:00
diff --git a/src/main/java/net/minecraft/world/level/block/entity/CalibratedSculkSensorBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/CalibratedSculkSensorBlockEntity.java
2024-04-12 21:14:06 +02:00
index 4c9c35131e9bd37a48f6c4beb2bbcaf7988069c5..cf865dcfde2ae6c0ae72a8e7469be2dd3e1bc679 100644
2023-06-09 07:35:52 +02:00
--- a/src/main/java/net/minecraft/world/level/block/entity/CalibratedSculkSensorBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/CalibratedSculkSensorBlockEntity.java
@@ -19,6 +19,12 @@ public class CalibratedSculkSensorBlockEntity extends SculkSensorBlockEntity {
public VibrationSystem.User createVibrationUser() {
return new CalibratedSculkSensorBlockEntity.VibrationUser(this.getBlockPos());
}
2024-01-18 22:00:40 +01:00
+ // Paper start - Configurable sculk sensor listener range
2023-06-09 07:35:52 +02:00
+ @Override
+ protected void saveRangeOverride(final net.minecraft.nbt.CompoundTag nbt) {
+ if (this.rangeOverride != null && this.rangeOverride != 16) nbt.putInt(PAPER_LISTENER_RANGE_NBT_KEY, this.rangeOverride); // only save if it's different from the default
+ }
2024-01-18 22:00:40 +01:00
+ // Paper end - Configurable sculk sensor listener range
2023-06-09 07:35:52 +02:00
protected class VibrationUser extends SculkSensorBlockEntity.VibrationUser {
public VibrationUser(BlockPos pos) {
@@ -27,6 +33,7 @@ public class CalibratedSculkSensorBlockEntity extends SculkSensorBlockEntity {
@Override
public int getListenerRadius() {
2024-01-18 22:00:40 +01:00
+ if (CalibratedSculkSensorBlockEntity.this.rangeOverride != null) return CalibratedSculkSensorBlockEntity.this.rangeOverride; // Paper - Configurable sculk sensor listener range
2023-06-09 07:35:52 +02:00
return 16;
}
2022-02-20 22:44:14 +01:00
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
2024-04-12 21:14:06 +02:00
index fd791916336032e29aae83a2ff5d956bc18f2938..a08a59192cd01789b4aff9af6d0f1d4c27bb4fe1 100644
2022-02-20 22:44:14 +01:00
--- a/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SculkSensorBlockEntity.java
2024-04-12 21:14:06 +02:00
@@ -23,6 +23,7 @@ public class SculkSensorBlockEntity extends BlockEntity implements GameEventList
2023-06-09 07:35:52 +02:00
private final VibrationSystem.Listener vibrationListener;
private final VibrationSystem.User vibrationUser = this.createVibrationUser();
public int lastVibrationFrequency;
2024-01-18 22:00:40 +01:00
+ @Nullable public Integer rangeOverride = null; // Paper - Configurable sculk sensor listener range
2023-06-09 07:35:52 +02:00
protected SculkSensorBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
2024-04-12 21:14:06 +02:00
@@ -48,8 +49,16 @@ public class SculkSensorBlockEntity extends BlockEntity implements GameEventList
.resultOrPartial(LOGGER::error)
.ifPresent(listener -> this.vibrationData = listener);
2022-06-08 15:12:28 +02:00
}
2024-01-18 22:00:40 +01:00
+ // Paper start - Configurable sculk sensor listener range
2023-06-09 07:35:52 +02:00
+ if (nbt.contains(PAPER_LISTENER_RANGE_NBT_KEY)) {
+ this.rangeOverride = nbt.getInt(PAPER_LISTENER_RANGE_NBT_KEY);
+ } else {
+ this.rangeOverride = null;
+ }
2024-01-18 22:00:40 +01:00
+ // Paper end - Configurable sculk sensor listener range
2022-02-20 22:44:14 +01:00
}
2024-01-18 22:00:40 +01:00
+ protected static final String PAPER_LISTENER_RANGE_NBT_KEY = "Paper.ListenerRange"; // Paper - Configurable sculk sensor listener range
2022-02-20 22:44:14 +01:00
@Override
protected void saveAdditional(CompoundTag nbt) {
super.saveAdditional(nbt);
2023-06-09 07:35:52 +02:00
@@ -58,7 +67,13 @@ public class SculkSensorBlockEntity extends BlockEntity implements GameEventList
2024-04-12 21:14:06 +02:00
.encodeStart(NbtOps.INSTANCE, this.vibrationData)
.resultOrPartial(LOGGER::error)
.ifPresent(listenerNbt -> nbt.put("listener", listenerNbt));
2024-01-18 22:00:40 +01:00
+ this.saveRangeOverride(nbt); // Paper - Configurable sculk sensor listener range
2023-06-09 07:35:52 +02:00
+ }
2024-01-18 22:00:40 +01:00
+ // Paper start - Configurable sculk sensor listener range
2023-06-09 07:35:52 +02:00
+ protected void saveRangeOverride(CompoundTag nbt) {
+ if (this.rangeOverride != null && this.rangeOverride != VibrationUser.LISTENER_RANGE) nbt.putInt(PAPER_LISTENER_RANGE_NBT_KEY, this.rangeOverride); // only save if it's different from the default
2022-02-20 22:44:14 +01:00
}
2024-01-18 22:00:40 +01:00
+ // Paper end - Configurable sculk sensor listener range
2022-02-20 22:44:14 +01:00
2023-06-08 10:08:08 +02:00
@Override
2023-06-09 07:35:52 +02:00
public VibrationSystem.Data getVibrationData() {
@@ -95,6 +110,7 @@ public class SculkSensorBlockEntity extends BlockEntity implements GameEventList
2023-06-08 22:56:13 +02:00
@Override
public int getListenerRadius() {
2024-01-18 22:00:40 +01:00
+ if (SculkSensorBlockEntity.this.rangeOverride != null) return SculkSensorBlockEntity.this.rangeOverride; // Paper - Configurable sculk sensor listener range
2023-06-09 07:35:52 +02:00
return 8;
2023-06-08 22:56:13 +02:00
}
2022-02-20 22:44:14 +01:00
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftSculkSensor.java b/src/main/java/org/bukkit/craftbukkit/block/CraftSculkSensor.java
2023-11-04 20:20:01 +01:00
index 0e5e316b6c76c3929cca037eddf52120767862ff..c796a1754385edabe115088ebb5aa2f44cfa657a 100644
2022-02-20 22:44:14 +01:00
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftSculkSensor.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftSculkSensor.java
2023-09-29 02:28:26 +02:00
@@ -30,4 +30,17 @@ public class CraftSculkSensor<T extends SculkSensorBlockEntity> extends CraftBlo
public CraftSculkSensor<T> copy() {
return new CraftSculkSensor<>(this);
2022-02-20 22:44:14 +01:00
}
2023-09-29 02:28:26 +02:00
+
2022-02-20 22:44:14 +01:00
+ // Paper start
+ @Override
+ public int getListenerRange() {
2023-06-08 22:56:13 +02:00
+ return this.getSnapshot().getListener().getListenerRadius();
2022-02-20 22:44:14 +01:00
+ }
+
+ @Override
+ public void setListenerRange(int range) {
+ Preconditions.checkArgument(range > 0, "Vibration listener range must be greater than 0");
2023-06-09 07:35:52 +02:00
+ this.getSnapshot().rangeOverride = range;
2022-02-20 22:44:14 +01:00
+ }
+ // Paper end
}