Improve PortalEvents
This commit is contained in:
@@ -10,15 +10,20 @@
|
||||
|
||||
public class EndGatewayBlock extends BaseEntityBlock implements Portal {
|
||||
|
||||
@@ -89,6 +92,7 @@
|
||||
@@ -89,7 +92,12 @@
|
||||
|
||||
@Override
|
||||
protected void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
|
||||
+ if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
||||
if (entity.canUsePortal(false)) {
|
||||
+ // Paper start - call EntityPortalEnterEvent
|
||||
+ org.bukkit.event.entity.EntityPortalEnterEvent event = new org.bukkit.event.entity.EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()), org.bukkit.PortalType.END_GATEWAY); // Paper - add portal type
|
||||
+ if (!event.callEvent()) return;
|
||||
+ // Paper end - call EntityPortalEnterEvent
|
||||
BlockEntity tileentity = world.getBlockEntity(pos);
|
||||
|
||||
@@ -112,7 +116,7 @@
|
||||
if (!world.isClientSide && tileentity instanceof TheEndGatewayBlockEntity) {
|
||||
@@ -112,7 +120,7 @@
|
||||
if (tileentity instanceof TheEndGatewayBlockEntity tileentityendgateway) {
|
||||
Vec3 vec3d = tileentityendgateway.getPortalPosition(world, pos);
|
||||
|
||||
|
||||
@@ -24,15 +24,16 @@
|
||||
|
||||
public class EndPortalBlock extends BaseEntityBlock implements Portal {
|
||||
|
||||
@@ -57,10 +68,16 @@
|
||||
@@ -57,10 +68,17 @@
|
||||
|
||||
@Override
|
||||
protected void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
|
||||
+ if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
||||
if (entity.canUsePortal(false)) {
|
||||
+ // CraftBukkit start - Entity in portal
|
||||
+ EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()));
|
||||
+ EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()), org.bukkit.PortalType.ENDER); // Paper - add portal type
|
||||
+ world.getCraftServer().getPluginManager().callEvent(event);
|
||||
+ if (event.isCancelled()) return; // Paper - make cancellable
|
||||
+ // CraftBukkit end
|
||||
if (!world.isClientSide && world.dimension() == Level.END && entity instanceof ServerPlayer) {
|
||||
ServerPlayer entityplayer = (ServerPlayer) entity;
|
||||
@@ -41,7 +42,7 @@
|
||||
if (!entityplayer.seenCredits) {
|
||||
entityplayer.showEndCredits();
|
||||
return;
|
||||
@@ -74,11 +91,11 @@
|
||||
@@ -74,11 +92,11 @@
|
||||
|
||||
@Override
|
||||
public TeleportTransition getPortalDestination(ServerLevel world, Entity entity, BlockPos pos) {
|
||||
@@ -51,11 +52,11 @@
|
||||
|
||||
if (worldserver1 == null) {
|
||||
- return null;
|
||||
+ return new TeleportTransition(PlayerTeleportEvent.TeleportCause.END_PORTAL); // CraftBukkit- always fire event in case plugins wish to change it
|
||||
+ return null; // Paper - keep previous behavior of not firing PlayerTeleportEvent if the target world doesn't exist
|
||||
} else {
|
||||
boolean flag = resourcekey == Level.END;
|
||||
BlockPos blockposition1 = flag ? ServerLevel.END_SPAWN_POINT : worldserver1.getSharedSpawnPos();
|
||||
@@ -87,7 +104,7 @@
|
||||
@@ -87,7 +105,7 @@
|
||||
Set set;
|
||||
|
||||
if (flag) {
|
||||
@@ -64,7 +65,7 @@
|
||||
f = Direction.WEST.toYRot();
|
||||
set = Relative.union(Relative.DELTA, Set.of(Relative.X_ROT));
|
||||
if (entity instanceof ServerPlayer) {
|
||||
@@ -99,13 +116,21 @@
|
||||
@@ -99,13 +117,21 @@
|
||||
if (entity instanceof ServerPlayer) {
|
||||
ServerPlayer entityplayer = (ServerPlayer) entity;
|
||||
|
||||
|
||||
@@ -44,20 +44,21 @@
|
||||
Entity entity1 = entity.getVehicle();
|
||||
|
||||
if (entity1 != null) {
|
||||
@@ -103,7 +115,12 @@
|
||||
@@ -103,7 +115,13 @@
|
||||
|
||||
@Override
|
||||
protected void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
|
||||
+ if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
||||
if (entity.canUsePortal(false)) {
|
||||
+ // CraftBukkit start - Entity in portal
|
||||
+ EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()));
|
||||
+ EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()), org.bukkit.PortalType.NETHER); // Paper - add portal type
|
||||
+ world.getCraftServer().getPluginManager().callEvent(event);
|
||||
+ if (event.isCancelled()) return; // Paper - make cancellable
|
||||
+ // CraftBukkit end
|
||||
entity.setAsInsidePortal(this, pos);
|
||||
}
|
||||
|
||||
@@ -121,51 +138,80 @@
|
||||
@@ -121,51 +139,80 @@
|
||||
@Nullable
|
||||
@Override
|
||||
public TeleportTransition getPortalDestination(ServerLevel world, Entity entity, BlockPos pos) {
|
||||
@@ -76,7 +77,7 @@
|
||||
|
||||
if (worldserver1 == null) {
|
||||
- return null;
|
||||
+ return new TeleportTransition(PlayerTeleportEvent.TeleportCause.NETHER_PORTAL); // always fire event in case plugins wish to change it
|
||||
+ return null; // Paper - keep previous behavior of not firing PlayerTeleportEvent if the target world doesn't exist
|
||||
} else {
|
||||
- boolean flag = worldserver1.dimension() == Level.NETHER;
|
||||
+ boolean flag = worldserver1.getTypeKey() == LevelStem.NETHER;
|
||||
@@ -151,7 +152,7 @@
|
||||
}
|
||||
|
||||
private static TeleportTransition getDimensionTransitionFromExit(Entity entity, BlockPos pos, BlockUtil.FoundRectangle exitPortalRectangle, ServerLevel world, TeleportTransition.PostTeleportTransition postDimensionTransition) {
|
||||
@@ -203,7 +249,7 @@
|
||||
@@ -203,7 +250,7 @@
|
||||
Vec3 vec3d1 = new Vec3((double) blockposition.getX() + (flag ? d2 : d4), (double) blockposition.getY() + d3, (double) blockposition.getZ() + (flag ? d4 : d2));
|
||||
Vec3 vec3d2 = PortalShape.findCollisionFreePosition(vec3d1, world, entity, entitysize);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user