@@ -0,0 +1,81 @@
|
||||
--- a/net/minecraft/server/BlockPortalShape.java
|
||||
+++ b/net/minecraft/server/BlockPortalShape.java
|
||||
@@ -4,6 +4,13 @@
|
||||
import java.util.function.Predicate;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
+// CraftBukkit start
|
||||
+import org.bukkit.craftbukkit.block.CraftBlock;
|
||||
+import org.bukkit.craftbukkit.block.CraftBlockState;
|
||||
+import org.bukkit.craftbukkit.event.CraftPortalEvent;
|
||||
+import org.bukkit.event.world.PortalCreateEvent;
|
||||
+// CraftBukkit end
|
||||
+
|
||||
public class BlockPortalShape {
|
||||
|
||||
private static final BlockBase.e a = (iblockdata, iblockaccess, blockposition) -> {
|
||||
@@ -17,6 +24,7 @@
|
||||
private BlockPosition position;
|
||||
private int height;
|
||||
private int width;
|
||||
+ java.util.List<org.bukkit.block.BlockState> blocks = new java.util.ArrayList<org.bukkit.block.BlockState>(); // CraftBukkit - add field
|
||||
|
||||
public static Optional<BlockPortalShape> a(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
||||
return a(generatoraccess, blockposition, (blockportalshape) -> {
|
||||
@@ -81,6 +89,7 @@
|
||||
|
||||
if (!a(iblockdata)) {
|
||||
if (BlockPortalShape.a.test(iblockdata, this.b, blockposition_mutableblockposition)) {
|
||||
+ blocks.add(CraftBlock.at(this.b, blockposition_mutableblockposition).getState()); // CraftBukkit
|
||||
return i;
|
||||
}
|
||||
break;
|
||||
@@ -152,12 +161,30 @@
|
||||
return this.position != null && this.width >= 2 && this.width <= 21 && this.height >= 3 && this.height <= 21;
|
||||
}
|
||||
|
||||
- public void createPortal() {
|
||||
+ // CraftBukkit start - return boolean
|
||||
+ public boolean createPortal() {
|
||||
+ org.bukkit.World bworld = this.b.getMinecraftWorld().getWorld();
|
||||
+
|
||||
+ // Copy below for loop
|
||||
IBlockData iblockdata = (IBlockData) Blocks.NETHER_PORTAL.getBlockData().set(BlockPortal.AXIS, this.c);
|
||||
|
||||
BlockPosition.a(this.position, this.position.shift(EnumDirection.UP, this.height - 1).shift(this.d, this.width - 1)).forEach((blockposition) -> {
|
||||
+ CraftBlockState state = CraftBlockState.getBlockState(this.b.getMinecraftWorld(), blockposition, 18);
|
||||
+ state.setData(iblockdata);
|
||||
+ blocks.add(state);
|
||||
+ });
|
||||
+
|
||||
+ PortalCreateEvent event = new PortalCreateEvent(blocks, bworld, null, PortalCreateEvent.CreateReason.FIRE);
|
||||
+ this.b.getMinecraftWorld().getMinecraftServer().server.getPluginManager().callEvent(event);
|
||||
+
|
||||
+ if (event.isCancelled()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
+ BlockPosition.a(this.position, this.position.shift(EnumDirection.UP, this.height - 1).shift(this.d, this.width - 1)).forEach((blockposition) -> {
|
||||
this.b.setTypeAndData(blockposition, iblockdata, 18);
|
||||
});
|
||||
+ return true; // CraftBukkit
|
||||
}
|
||||
|
||||
public boolean c() {
|
||||
@@ -194,7 +221,7 @@
|
||||
return new Vec3D(d2, d3, d4);
|
||||
}
|
||||
|
||||
- public static ShapeDetectorShape a(WorldServer worldserver, BlockUtil.Rectangle blockutil_rectangle, EnumDirection.EnumAxis enumdirection_enumaxis, Vec3D vec3d, EntitySize entitysize, Vec3D vec3d1, float f, float f1) {
|
||||
+ public static ShapeDetectorShape a(WorldServer worldserver, BlockUtil.Rectangle blockutil_rectangle, EnumDirection.EnumAxis enumdirection_enumaxis, Vec3D vec3d, EntitySize entitysize, Vec3D vec3d1, float f, float f1, CraftPortalEvent portalEventInfo) { // CraftBukkit // PAIL rename toDetectorShape
|
||||
BlockPosition blockposition = blockutil_rectangle.origin;
|
||||
IBlockData iblockdata = worldserver.getType(blockposition);
|
||||
EnumDirection.EnumAxis enumdirection_enumaxis1 = (EnumDirection.EnumAxis) iblockdata.get(BlockProperties.E);
|
||||
@@ -208,6 +235,6 @@
|
||||
boolean flag = enumdirection_enumaxis1 == EnumDirection.EnumAxis.X;
|
||||
Vec3D vec3d3 = new Vec3D((double) blockposition.getX() + (flag ? d2 : d4), (double) blockposition.getY() + d3, (double) blockposition.getZ() + (flag ? d4 : d2));
|
||||
|
||||
- return new ShapeDetectorShape(vec3d3, vec3d2, f + (float) i, f1);
|
||||
+ return new ShapeDetectorShape(vec3d3, vec3d2, f + (float) i, f1, worldserver, portalEventInfo); // CraftBukkit
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
--- a/net/minecraft/server/PortalTravelAgent.java
|
||||
+++ b/net/minecraft/server/PortalTravelAgent.java
|
||||
@@ -13,13 +13,19 @@
|
||||
}
|
||||
|
||||
public Optional<BlockUtil.Rectangle> findPortal(BlockPosition blockposition, boolean flag) {
|
||||
+ // CraftBukkit start
|
||||
+ return findPortal(blockposition, flag ? 16 : 128); // Search Radius
|
||||
+ }
|
||||
+
|
||||
+ public Optional<BlockUtil.Rectangle> findPortal(BlockPosition blockposition, int i) {
|
||||
VillagePlace villageplace = this.world.y();
|
||||
- int i = flag ? 16 : 128;
|
||||
+ // int i = flag ? 16 : 128;
|
||||
+ // CraftBukkit end
|
||||
|
||||
villageplace.a(this.world, blockposition, i);
|
||||
Optional<VillagePlaceRecord> optional = villageplace.b((villageplacetype) -> {
|
||||
return villageplacetype == VillagePlaceType.v;
|
||||
- }, blockposition, i, VillagePlace.Occupancy.ANY).sorted(Comparator.comparingDouble((villageplacerecord) -> {
|
||||
+ }, blockposition, i, VillagePlace.Occupancy.ANY).sorted(Comparator.comparingDouble((VillagePlaceRecord villageplacerecord) -> { // CraftBukkit - decompile error
|
||||
return villageplacerecord.f().j(blockposition);
|
||||
}).thenComparingInt((villageplacerecord) -> {
|
||||
return villageplacerecord.f().getY();
|
||||
@@ -40,6 +46,12 @@
|
||||
}
|
||||
|
||||
public Optional<BlockUtil.Rectangle> createPortal(BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
||||
+ // CraftBukkit start
|
||||
+ return this.createPortal(blockposition, enumdirection_enumaxis, null, 16);
|
||||
+ }
|
||||
+
|
||||
+ public Optional<BlockUtil.Rectangle> createPortal(BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis, Entity entity, int createRadius) {
|
||||
+ // CraftBukkit end
|
||||
EnumDirection enumdirection = EnumDirection.a(EnumDirection.EnumAxisDirection.POSITIVE, enumdirection_enumaxis);
|
||||
double d0 = -1.0D;
|
||||
BlockPosition blockposition1 = null;
|
||||
@@ -48,7 +60,7 @@
|
||||
WorldBorder worldborder = this.world.getWorldBorder();
|
||||
int i = this.world.getHeight() - 1;
|
||||
BlockPosition.MutableBlockPosition blockposition_mutableblockposition = blockposition.i();
|
||||
- Iterator iterator = BlockPosition.a(blockposition, 16, EnumDirection.EAST, EnumDirection.SOUTH).iterator();
|
||||
+ Iterator iterator = BlockPosition.a(blockposition, createRadius, EnumDirection.EAST, EnumDirection.SOUTH).iterator(); // CraftBukkit
|
||||
|
||||
int j;
|
||||
|
||||
@@ -102,6 +114,7 @@
|
||||
|
||||
int j1;
|
||||
|
||||
+ org.bukkit.craftbukkit.util.BlockStateListPopulator blockList = new org.bukkit.craftbukkit.util.BlockStateListPopulator(this.world); // CraftBukkit - Use BlockStateListPopulator
|
||||
if (d0 == -1.0D) {
|
||||
blockposition1 = (new BlockPosition(blockposition.getX(), MathHelper.clamp(blockposition.getY(), 70, this.world.getHeight() - 10), blockposition.getZ())).immutableCopy();
|
||||
EnumDirection enumdirection1 = enumdirection.g();
|
||||
@@ -116,7 +129,7 @@
|
||||
IBlockData iblockdata = k1 < 0 ? Blocks.OBSIDIAN.getBlockData() : Blocks.AIR.getBlockData();
|
||||
|
||||
blockposition_mutableblockposition.a((BaseBlockPosition) blockposition1, j * enumdirection.getAdjacentX() + j1 * enumdirection1.getAdjacentX(), k1, j * enumdirection.getAdjacentZ() + j1 * enumdirection1.getAdjacentZ());
|
||||
- this.world.setTypeUpdate(blockposition_mutableblockposition, iblockdata);
|
||||
+ blockList.setTypeAndData(blockposition_mutableblockposition, iblockdata, 3); // CraftBukkit
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -126,7 +139,7 @@
|
||||
for (j1 = -1; j1 < 4; ++j1) {
|
||||
if (l1 == -1 || l1 == 2 || j1 == -1 || j1 == 3) {
|
||||
blockposition_mutableblockposition.a((BaseBlockPosition) blockposition1, l1 * enumdirection.getAdjacentX(), j1, l1 * enumdirection.getAdjacentZ());
|
||||
- this.world.setTypeAndData(blockposition_mutableblockposition, Blocks.OBSIDIAN.getBlockData(), 3);
|
||||
+ blockList.setTypeAndData(blockposition_mutableblockposition, Blocks.OBSIDIAN.getBlockData(), 3); // CraftBukkit
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,10 +149,20 @@
|
||||
for (j1 = 0; j1 < 2; ++j1) {
|
||||
for (j = 0; j < 3; ++j) {
|
||||
blockposition_mutableblockposition.a((BaseBlockPosition) blockposition1, j1 * enumdirection.getAdjacentX(), j, j1 * enumdirection.getAdjacentZ());
|
||||
- this.world.setTypeAndData(blockposition_mutableblockposition, iblockdata1, 18);
|
||||
+ blockList.setTypeAndData(blockposition_mutableblockposition, iblockdata1, 18); // CraftBukkit
|
||||
}
|
||||
}
|
||||
|
||||
+ // CraftBukkit start
|
||||
+ org.bukkit.World bworld = this.world.getWorld();
|
||||
+ org.bukkit.event.world.PortalCreateEvent event = new org.bukkit.event.world.PortalCreateEvent((java.util.List<org.bukkit.block.BlockState>) (java.util.List) blockList.getList(), bworld, (entity == null) ? null : entity.getBukkitEntity(), org.bukkit.event.world.PortalCreateEvent.CreateReason.NETHER_PAIR);
|
||||
+
|
||||
+ this.world.getServer().getPluginManager().callEvent(event);
|
||||
+ if (event.isCancelled()) {
|
||||
+ return Optional.empty();
|
||||
+ }
|
||||
+ blockList.updateList();
|
||||
+ // CraftBukkit end
|
||||
return Optional.of(new BlockUtil.Rectangle(blockposition1.immutableCopy(), 2, 3));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
--- a/net/minecraft/server/ShapeDetectorShape.java
|
||||
+++ b/net/minecraft/server/ShapeDetectorShape.java
|
||||
@@ -1,13 +1,21 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import org.bukkit.craftbukkit.event.CraftPortalEvent; // CraftBukkit
|
||||
+
|
||||
public class ShapeDetectorShape {
|
||||
|
||||
public final Vec3D position;
|
||||
public final Vec3D velocity;
|
||||
public final float yaw;
|
||||
public final float pitch;
|
||||
+ // CraftBukkit start
|
||||
+ public final WorldServer world;
|
||||
+ public final CraftPortalEvent portalEventInfo;
|
||||
|
||||
- public ShapeDetectorShape(Vec3D vec3d, Vec3D vec3d1, float f, float f1) {
|
||||
+ public ShapeDetectorShape(Vec3D vec3d, Vec3D vec3d1, float f, float f1, WorldServer world, CraftPortalEvent portalEventInfo) {
|
||||
+ this.world = world;
|
||||
+ this.portalEventInfo = portalEventInfo;
|
||||
+ // CraftBukkit end
|
||||
this.position = vec3d;
|
||||
this.velocity = vec3d1;
|
||||
this.yaw = f;
|
||||
Reference in New Issue
Block a user