readd beacon effect cause
This commit is contained in:
@@ -48,16 +48,14 @@
|
||||
double d = flyTargetLocation.x - this.getX();
|
||||
double d1 = flyTargetLocation.y - this.getY();
|
||||
double d2 = flyTargetLocation.z - this.getZ();
|
||||
@@ -369,7 +_,14 @@
|
||||
@@ -369,7 +_,12 @@
|
||||
if (this.nearestCrystal.isRemoved()) {
|
||||
this.nearestCrystal = null;
|
||||
} else if (this.tickCount % 10 == 0 && this.getHealth() < this.getMaxHealth()) {
|
||||
- this.setHealth(this.getHealth() + 1.0F);
|
||||
+ // CraftBukkit start
|
||||
+ org.bukkit.event.entity.EntityRegainHealthEvent event = new org.bukkit.event.entity.EntityRegainHealthEvent(this.getBukkitEntity(), 1.0F, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.ENDER_CRYSTAL);
|
||||
+ this.level().getCraftServer().getPluginManager().callEvent(event);
|
||||
+
|
||||
+ if (!event.isCancelled()) {
|
||||
+ if (event.callEvent()) {
|
||||
+ this.setHealth((float) (this.getHealth() + event.getAmount()));
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
@@ -94,7 +92,7 @@
|
||||
} else {
|
||||
flag = true;
|
||||
}
|
||||
@@ -450,6 +_,54 @@
|
||||
@@ -450,6 +_,58 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,32 +114,36 @@
|
||||
+ }
|
||||
+ } else {
|
||||
+ for (org.bukkit.block.Block block : event.blockList()) {
|
||||
+ org.bukkit.Material blockId = block.getType();
|
||||
+ if (blockId.isAir()) {
|
||||
+ org.bukkit.Material blockType = block.getType();
|
||||
+ if (blockType.isAir()) {
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ org.bukkit.craftbukkit.block.CraftBlock craftBlock = ((org.bukkit.craftbukkit.block.CraftBlock) block);
|
||||
+ BlockPos blockposition = craftBlock.getPosition();
|
||||
+ BlockPos pos = craftBlock.getPosition();
|
||||
+
|
||||
+ net.minecraft.world.level.block.Block nmsBlock = craftBlock.getNMS().getBlock();
|
||||
+ if (nmsBlock.dropFromExplosion(this.explosionSource)) {
|
||||
+ net.minecraft.world.level.block.entity.BlockEntity tileentity = craftBlock.getNMS().hasBlockEntity() ? this.level().getBlockEntity(blockposition) : null;
|
||||
+ net.minecraft.world.level.storage.loot.LootParams.Builder loottableinfo_builder = (new net.minecraft.world.level.storage.loot.LootParams.Builder((ServerLevel) this.level())).withParameter(net.minecraft.world.level.storage.loot.parameters.LootContextParams.ORIGIN, Vec3.atCenterOf(blockposition)).withParameter(net.minecraft.world.level.storage.loot.parameters.LootContextParams.TOOL, net.minecraft.world.item.ItemStack.EMPTY).withParameter(net.minecraft.world.level.storage.loot.parameters.LootContextParams.EXPLOSION_RADIUS, 1.0F / event.getYield()).withOptionalParameter(net.minecraft.world.level.storage.loot.parameters.LootContextParams.BLOCK_ENTITY, tileentity);
|
||||
+ net.minecraft.world.level.block.entity.BlockEntity blockEntity = craftBlock.getNMS().hasBlockEntity() ? this.level().getBlockEntity(pos) : null;
|
||||
+ net.minecraft.world.level.storage.loot.LootParams.Builder builder = new net.minecraft.world.level.storage.loot.LootParams.Builder((ServerLevel) this.level())
|
||||
+ .withParameter(net.minecraft.world.level.storage.loot.parameters.LootContextParams.ORIGIN, Vec3.atCenterOf(pos))
|
||||
+ .withParameter(net.minecraft.world.level.storage.loot.parameters.LootContextParams.TOOL, net.minecraft.world.item.ItemStack.EMPTY)
|
||||
+ .withParameter(net.minecraft.world.level.storage.loot.parameters.LootContextParams.EXPLOSION_RADIUS, 1.0F / event.getYield())
|
||||
+ .withOptionalParameter(net.minecraft.world.level.storage.loot.parameters.LootContextParams.BLOCK_ENTITY, blockEntity);
|
||||
+
|
||||
+ craftBlock.getNMS().getDrops(loottableinfo_builder).forEach((itemstack) -> {
|
||||
+ net.minecraft.world.level.block.Block.popResource(this.level(), blockposition, itemstack);
|
||||
+ craftBlock.getNMS().getDrops(builder).forEach((stack) -> {
|
||||
+ net.minecraft.world.level.block.Block.popResource(this.level(), pos, stack);
|
||||
+ });
|
||||
+ craftBlock.getNMS().spawnAfterBreak((ServerLevel) this.level(), blockposition, net.minecraft.world.item.ItemStack.EMPTY, false);
|
||||
+ craftBlock.getNMS().spawnAfterBreak((ServerLevel) this.level(), pos, net.minecraft.world.item.ItemStack.EMPTY, false);
|
||||
+ }
|
||||
+ // Paper start - TNTPrimeEvent
|
||||
+ org.bukkit.block.Block tntBlock = org.bukkit.craftbukkit.block.CraftBlock.at(this.level(), blockposition);
|
||||
+ org.bukkit.block.Block tntBlock = org.bukkit.craftbukkit.block.CraftBlock.at(this.level(), pos);
|
||||
+ if (!new com.destroystokyo.paper.event.block.TNTPrimeEvent(tntBlock, com.destroystokyo.paper.event.block.TNTPrimeEvent.PrimeReason.EXPLOSION, explosionSource.getIndirectSourceEntity().getBukkitEntity()).callEvent())
|
||||
+ continue;
|
||||
+ // Paper end - TNTPrimeEvent
|
||||
+ nmsBlock.wasExploded((ServerLevel) this.level(), blockposition, this.explosionSource);
|
||||
+ nmsBlock.wasExploded((ServerLevel) this.level(), pos, this.explosionSource);
|
||||
+
|
||||
+ this.level().removeBlock(blockposition, false);
|
||||
+ this.level().removeBlock(pos, false);
|
||||
+ }
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
DragonFireball dragonFireball = new DragonFireball(level, this.dragon, vec32.normalize());
|
||||
+ dragonFireball.preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported
|
||||
dragonFireball.moveTo(d2, d3, d4, 0.0F, 0.0F);
|
||||
+ if (new com.destroystokyo.paper.event.entity.EnderDragonShootFireballEvent((org.bukkit.entity.EnderDragon) dragon.getBukkitEntity(), (org.bukkit.entity.DragonFireball) dragonFireball.getBukkitEntity()).callEvent()) // Paper - EnderDragon Events
|
||||
+ if (new com.destroystokyo.paper.event.entity.EnderDragonShootFireballEvent((org.bukkit.entity.EnderDragon) this.dragon.getBukkitEntity(), (org.bukkit.entity.DragonFireball) dragonFireball.getBukkitEntity()).callEvent()) // Paper - EnderDragon Events
|
||||
level.addFreshEntity(dragonFireball);
|
||||
+ else dragonFireball.discard(null); // Paper - EnderDragon Events
|
||||
this.fireballCharge = 0;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/net/minecraft/world/entity/boss/enderdragon/phases/EnderDragonPhaseManager.java
|
||||
+++ b/net/minecraft/world/entity/boss/enderdragon/phases/EnderDragonPhaseManager.java
|
||||
@@ -23,6 +_,19 @@
|
||||
@@ -23,6 +_,18 @@
|
||||
this.currentPhase.end();
|
||||
}
|
||||
|
||||
@@ -10,8 +10,7 @@
|
||||
+ (this.currentPhase == null) ? null : org.bukkit.craftbukkit.entity.CraftEnderDragon.getBukkitPhase(this.currentPhase.getPhase()),
|
||||
+ org.bukkit.craftbukkit.entity.CraftEnderDragon.getBukkitPhase(phase)
|
||||
+ );
|
||||
+ this.dragon.level().getCraftServer().getPluginManager().callEvent(event);
|
||||
+ if (event.isCancelled()) {
|
||||
+ if (!event.callEvent()) {
|
||||
+ return;
|
||||
+ }
|
||||
+ phase = org.bukkit.craftbukkit.entity.CraftEnderDragon.getMinecraftPhase(event.getNewPhase());
|
||||
|
||||
@@ -1,18 +1,13 @@
|
||||
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||
+++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||
@@ -77,6 +_,12 @@
|
||||
&& entity.attackable();
|
||||
private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0).selector(LIVING_ENTITY_SELECTOR);
|
||||
|
||||
+ // Paper start
|
||||
+ private boolean canPortal = false;
|
||||
+
|
||||
+ public void setCanTravelThroughPortals(boolean canPortal) { this.canPortal = canPortal; }
|
||||
+ // Paper end
|
||||
+
|
||||
public WitherBoss(EntityType<? extends WitherBoss> entityType, Level level) {
|
||||
super(entityType, level);
|
||||
this.moveControl = new FlyingMoveControl(this, 10, false);
|
||||
@@ -69,6 +_,7 @@
|
||||
private final int[] nextHeadUpdate = new int[2];
|
||||
private final int[] idleHeadUpdates = new int[2];
|
||||
private int destroyBlocksTick;
|
||||
+ private boolean canPortal = false; // Paper
|
||||
public final ServerBossEvent bossEvent = (ServerBossEvent)new ServerBossEvent(
|
||||
this.getDisplayName(), BossEvent.BossBarColor.PURPLE, BossEvent.BossBarOverlay.PROGRESS
|
||||
)
|
||||
@@ -260,15 +_,40 @@
|
||||
int i = this.getInvulnerableTicks() - 1;
|
||||
this.bossEvent.setProgress(1.0F - i / 220.0F);
|
||||
@@ -106,13 +101,20 @@
|
||||
} else {
|
||||
this.noActionTime = 0;
|
||||
}
|
||||
@@ -547,12 +_,12 @@
|
||||
@@ -547,12 +_,18 @@
|
||||
|
||||
@Override
|
||||
public boolean canUsePortal(boolean allowPassengers) {
|
||||
- return false;
|
||||
- }
|
||||
+ return this.canPortal; // Paper
|
||||
}
|
||||
+ }
|
||||
+
|
||||
+ // Paper start
|
||||
+ public void setCanTravelThroughPortals(boolean canPortal) {
|
||||
+ this.canPortal = canPortal;
|
||||
+ }
|
||||
+ // Paper end
|
||||
|
||||
@Override
|
||||
public boolean canBeAffected(MobEffectInstance potioneffect) {
|
||||
|
||||
Reference in New Issue
Block a user