From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Wed, 24 Jun 2020 12:39:08 -0600 Subject: [PATCH] Beacon API - custom effect ranges diff --git a/src/main/java/net/minecraft/server/TileEntityBeacon.java b/src/main/java/net/minecraft/server/TileEntityBeacon.java index c6b7bc3dc1445269c1562c308b386ce480d70ef3..f97b27a4751d1fc3287de8dba384ab5639b832b8 100644 --- a/src/main/java/net/minecraft/server/TileEntityBeacon.java +++ b/src/main/java/net/minecraft/server/TileEntityBeacon.java @@ -45,6 +45,26 @@ public class TileEntityBeacon extends TileEntity implements ITileInventory, ITic return (hasSecondaryEffect()) ? CraftPotionUtil.toBukkit(new MobEffect(this.secondaryEffect, getLevel(), getAmplification(), true, true)) : null; } // CraftBukkit end + // Paper start - add field/methods for custom range + private final String PAPER_RANGE_TAG = "Paper.Range"; + private double effectRange = -1; + + public double getEffectRange() { + if (this.effectRange < 0) { + return this.levels * 10 + 10; + } else { + return effectRange; + } + } + + public void setEffectRange(double range) { + this.effectRange = range; + } + + public void resetEffectRange() { + this.effectRange = -1; + } + // Paper end public TileEntityBeacon() { super(TileEntityTypes.BEACON); @@ -235,7 +255,8 @@ public class TileEntityBeacon extends TileEntity implements ITileInventory, ITic public List getHumansInRange() { { - double d0 = (double) (this.levels * 10 + 10); + // Paper - custom beacon ranges + double d0 = this.getEffectRange(); AxisAlignedBB axisalignedbb = (new AxisAlignedBB(this.position)).g(d0).b(0.0D, (double) this.world.getBuildHeight(), 0.0D); List list = this.world.a(EntityHuman.class, axisalignedbb); @@ -336,6 +357,9 @@ public class TileEntityBeacon extends TileEntity implements ITileInventory, ITic this.secondaryEffect = MobEffectList.fromId(nbttagcompound.getInt("Secondary")); this.levels = nbttagcompound.getInt("Levels"); // SPIGOT-5053, use where available // CraftBukkit end + // Paper + this.effectRange = nbttagcompound.hasKeyOfType(PAPER_RANGE_TAG, 6) ? nbttagcompound.getDouble(PAPER_RANGE_TAG) : -1; + if (nbttagcompound.hasKeyOfType("CustomName", 8)) { this.customName = IChatBaseComponent.ChatSerializer.a(nbttagcompound.getString("CustomName")); } @@ -352,6 +376,8 @@ public class TileEntityBeacon extends TileEntity implements ITileInventory, ITic if (this.customName != null) { nbttagcompound.setString("CustomName", IChatBaseComponent.ChatSerializer.a(this.customName)); } + // Paper + nbttagcompound.setDouble(PAPER_RANGE_TAG, this.effectRange); this.chestLock.a(nbttagcompound); return nbttagcompound; diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java index 21ebceafbf27125761aa08cfe0785f6f05c77592..51efea5262b80b7cee917b1bdaf22e4b741d5e03 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java @@ -95,4 +95,19 @@ public class CraftBeacon extends CraftBlockEntityState impleme public void setLock(String key) { this.getSnapshot().chestLock = (key == null) ? ChestLock.a : new ChestLock(key); } + + @Override + public double getEffectRange() { + return this.getSnapshot().getEffectRange(); + } + + @Override + public void setEffectRange(double range) { + this.getSnapshot().setEffectRange(range); + } + + @Override + public void resetEffectRange() { + this.getSnapshot().resetEffectRange(); + } }