mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
789bc79280
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: c9a46ebf #653: Add World#spawn with randomizeData parameter e49c2e3a Damageable should extend ItemMeta 01ff04f4 SPIGOT-5880, SPIGOT-5567: New ChunkGenerator API ca5b4b1a SPIGOT-6697: Deprecate generateTree with BlockChangeDelegate as it does not handle tiles CraftBukkit Changes: 7c8bbcbe SPIGOT-6716: Preserve the order of stored enchantments of enchanted books. 18027d02 #914: Add World#spawn with randomizeData parameter 3cad0316 SPIGOT-6714: Don't fire PlayerBucketEvent when empty 8c6d60cf Fix server crash with BlockPopulator when entities are at a negative chunk border 4f6bcc84 SPIGOT-5880, SPIGOT-5567: New ChunkGenerator API 78d5b35b SPIGOT-6697: Restore generateTree with BlockChangeDelegate behaviour 15792f0d Rebuild patch c949675e SPIGOT-6713: Cancelling EntityTransformEvent Causes Deceased Slimes To Not Despawn a955f15c Fix issues with new ChunkGenerator API a0a37f41 SPIGOT-6630: Replacing an enchantment on an item creates a conflict error Spigot Changes: b166a49b Rebuild patches 3c1fc60a SPIGOT-6693: Composters only take in one item at custom hopper speeds
131 lines
6.4 KiB
Diff
131 lines
6.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Wed, 24 Jun 2020 12:39:08 -0600
|
|
Subject: [PATCH] Beacon API - custom effect ranges
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
|
|
index 0fa01b98f4a2ce2a7d34437a71d8c1cc7e718fb1..11740e6a312cf8ab10b52461f455feba0e1b2788 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
|
|
@@ -79,6 +79,26 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider {
|
|
return (BeaconBlockEntity.hasSecondaryEffect(this.levels, this.primaryPower, this.secondaryPower)) ? CraftPotionUtil.toBukkit(new MobEffectInstance(this.secondaryPower, BeaconBlockEntity.getLevel(this.levels), BeaconBlockEntity.getAmplification(this.levels, this.primaryPower, this.secondaryPower), 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 BeaconBlockEntity(BlockPos pos, BlockState state) {
|
|
super(BlockEntityType.BEACON, pos, state);
|
|
@@ -182,7 +202,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider {
|
|
}
|
|
|
|
if (blockEntity.levels > 0 && !blockEntity.beamSections.isEmpty()) {
|
|
- BeaconBlockEntity.applyEffects(world, pos, blockEntity.levels, blockEntity.primaryPower, blockEntity.secondaryPower);
|
|
+ BeaconBlockEntity.applyEffects(world, pos, blockEntity.levels, blockEntity.primaryPower, blockEntity.secondaryPower, blockEntity); // Paper
|
|
BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT);
|
|
}
|
|
}
|
|
@@ -268,8 +288,13 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider {
|
|
}
|
|
|
|
public static List getHumansInRange(Level world, BlockPos blockposition, int i) {
|
|
+ // Paper start
|
|
+ return BeaconBlockEntity.getHumansInRange(world, blockposition, i, null);
|
|
+ }
|
|
+ public static List getHumansInRange(Level world, BlockPos blockposition, int i, @Nullable BeaconBlockEntity blockEntity) {
|
|
+ // Paper end
|
|
{
|
|
- double d0 = (double) (i * 10 + 10);
|
|
+ double d0 = blockEntity != null ? blockEntity.getEffectRange() : (i * 10 + 10);// Paper - custom beacon ranges
|
|
|
|
AABB axisalignedbb = (new AABB(blockposition)).inflate(d0).expandTowards(0.0D, (double) world.getHeight(), 0.0D);
|
|
List<Player> list = world.getEntitiesOfClass(Player.class, axisalignedbb);
|
|
@@ -310,12 +335,17 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider {
|
|
}
|
|
|
|
private static void applyEffects(Level world, BlockPos pos, int beaconLevel, @Nullable MobEffect primaryEffect, @Nullable MobEffect secondaryEffect) {
|
|
+ // Paper start
|
|
+ BeaconBlockEntity.applyEffects(world, pos, beaconLevel, primaryEffect, secondaryEffect, null);
|
|
+ }
|
|
+ private static void applyEffects(Level world, BlockPos pos, int beaconLevel, @Nullable MobEffect primaryEffect, @Nullable MobEffect secondaryEffect, @Nullable BeaconBlockEntity blockEntity) {
|
|
+ // Paper end
|
|
if (!world.isClientSide && primaryEffect != null) {
|
|
double d0 = (double) (beaconLevel * 10 + 10);
|
|
byte b0 = BeaconBlockEntity.getAmplification(beaconLevel, primaryEffect, secondaryEffect);
|
|
|
|
int j = BeaconBlockEntity.getLevel(beaconLevel);
|
|
- List list = BeaconBlockEntity.getHumansInRange(world, pos, beaconLevel);
|
|
+ List list = BeaconBlockEntity.getHumansInRange(world, pos, beaconLevel, blockEntity); // Paper
|
|
|
|
BeaconBlockEntity.applyEffect(list, primaryEffect, j, b0, true, pos); // Paper - BeaconEffectEvent
|
|
|
|
@@ -366,6 +396,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider {
|
|
}
|
|
|
|
this.lockKey = LockCode.fromTag(nbt);
|
|
+ this.effectRange = nbt.contains(PAPER_RANGE_TAG, 6) ? nbt.getDouble(PAPER_RANGE_TAG) : -1; // Paper
|
|
}
|
|
|
|
@Override
|
|
@@ -379,6 +410,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider {
|
|
}
|
|
|
|
this.lockKey.addToTag(nbt);
|
|
+ nbt.putDouble(PAPER_RANGE_TAG, this.effectRange); // Paper
|
|
return nbt;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java
|
|
index c35e1964a295032623cf9cb6ade84e69ed92194f..d1195dbe84eecb209b8863d177a5eb568d567f87 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java
|
|
@@ -34,7 +34,7 @@ public class CraftBeacon extends CraftBlockEntityState<BeaconBlockEntity> implem
|
|
if (tileEntity instanceof BeaconBlockEntity) {
|
|
BeaconBlockEntity beacon = (BeaconBlockEntity) tileEntity;
|
|
|
|
- Collection<Player> nms = BeaconBlockEntity.getHumansInRange(beacon.getLevel(), beacon.getBlockPos(), beacon.levels);
|
|
+ Collection<Player> nms = BeaconBlockEntity.getHumansInRange(beacon.getLevel(), beacon.getBlockPos(), beacon.levels, beacon); // Paper
|
|
Collection<LivingEntity> bukkit = new ArrayList<LivingEntity>(nms.size());
|
|
|
|
for (Player human : nms) {
|
|
@@ -111,4 +111,21 @@ public class CraftBeacon extends CraftBlockEntityState<BeaconBlockEntity> implem
|
|
public void setLock(String key) {
|
|
this.getSnapshot().lockKey = (key == null) ? LockCode.NO_LOCK : new LockCode(key);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @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();
|
|
+ }
|
|
+ // Paper end
|
|
}
|