@@ -1,6 +1,6 @@
|
||||
--- a/net/minecraft/world/level/portal/BlockPortalShape.java
|
||||
+++ b/net/minecraft/world/level/portal/BlockPortalShape.java
|
||||
@@ -22,6 +22,11 @@
|
||||
@@ -21,6 +21,11 @@
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import net.minecraft.world.phys.shapes.VoxelShapes;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
public class BlockPortalShape {
|
||||
|
||||
private static final int MIN_WIDTH = 2;
|
||||
@@ -41,6 +46,7 @@
|
||||
@@ -40,6 +45,7 @@
|
||||
private BlockPosition bottomLeft;
|
||||
private int height;
|
||||
private final int width;
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
public static Optional<BlockPortalShape> findEmptyPortalShape(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
||||
return findPortalShape(generatoraccess, blockposition, (blockportalshape) -> {
|
||||
@@ -61,6 +67,7 @@
|
||||
@@ -60,6 +66,7 @@
|
||||
}
|
||||
|
||||
public BlockPortalShape(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
||||
@@ -28,7 +28,7 @@
|
||||
this.level = generatoraccess;
|
||||
this.axis = enumdirection_enumaxis;
|
||||
this.rightDir = enumdirection_enumaxis == EnumDirection.EnumAxis.X ? EnumDirection.WEST : EnumDirection.SOUTH;
|
||||
@@ -105,6 +112,7 @@
|
||||
@@ -104,6 +111,7 @@
|
||||
|
||||
if (!isEmpty(iblockdata)) {
|
||||
if (BlockPortalShape.FRAME.test(iblockdata, this.level, blockposition_mutableblockposition)) {
|
||||
@@ -36,7 +36,7 @@
|
||||
return i;
|
||||
}
|
||||
break;
|
||||
@@ -115,6 +123,7 @@
|
||||
@@ -114,6 +122,7 @@
|
||||
if (!BlockPortalShape.FRAME.test(iblockdata1, this.level, blockposition_mutableblockposition)) {
|
||||
break;
|
||||
}
|
||||
@@ -44,7 +44,7 @@
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -134,6 +143,7 @@
|
||||
@@ -133,6 +142,7 @@
|
||||
if (!BlockPortalShape.FRAME.test(this.level.getBlockState(blockposition_mutableblockposition1), this.level, blockposition_mutableblockposition1)) {
|
||||
return false;
|
||||
}
|
||||
@@ -52,7 +52,7 @@
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -163,6 +173,10 @@
|
||||
@@ -162,6 +172,10 @@
|
||||
++this.numPortalBlocks;
|
||||
}
|
||||
}
|
||||
@@ -63,7 +63,7 @@
|
||||
}
|
||||
|
||||
return 21;
|
||||
@@ -176,12 +190,28 @@
|
||||
@@ -175,12 +189,28 @@
|
||||
return this.bottomLeft != null && this.width >= 2 && this.width <= 21 && this.height >= 3 && this.height <= 21;
|
||||
}
|
||||
|
||||
@@ -93,21 +93,3 @@
|
||||
}
|
||||
|
||||
public boolean isComplete() {
|
||||
@@ -217,7 +247,7 @@
|
||||
return new Vec3D(d3, d2, d4);
|
||||
}
|
||||
|
||||
- public static ShapeDetectorShape createPortalInfo(WorldServer worldserver, BlockUtil.Rectangle blockutil_rectangle, EnumDirection.EnumAxis enumdirection_enumaxis, Vec3D vec3d, Entity entity, Vec3D vec3d1, float f, float f1) {
|
||||
+ public static ShapeDetectorShape createPortalInfo(WorldServer worldserver, BlockUtil.Rectangle blockutil_rectangle, EnumDirection.EnumAxis enumdirection_enumaxis, Vec3D vec3d, Entity entity, Vec3D vec3d1, float f, float f1, CraftPortalEvent portalEventInfo) { // CraftBukkit
|
||||
BlockPosition blockposition = blockutil_rectangle.minCorner;
|
||||
IBlockData iblockdata = worldserver.getBlockState(blockposition);
|
||||
EnumDirection.EnumAxis enumdirection_enumaxis1 = (EnumDirection.EnumAxis) iblockdata.getOptionalValue(BlockProperties.HORIZONTAL_AXIS).orElse(EnumDirection.EnumAxis.X);
|
||||
@@ -233,7 +263,7 @@
|
||||
Vec3D vec3d3 = new Vec3D((double) blockposition.getX() + (flag ? d2 : d4), (double) blockposition.getY() + d3, (double) blockposition.getZ() + (flag ? d4 : d2));
|
||||
Vec3D vec3d4 = findCollisionFreePosition(vec3d3, worldserver, entity, entitysize);
|
||||
|
||||
- return new ShapeDetectorShape(vec3d4, vec3d2, f + (float) i, f1);
|
||||
+ return new ShapeDetectorShape(vec3d4, vec3d2, f + (float) i, f1, worldserver, portalEventInfo); // CraftBukkit
|
||||
}
|
||||
|
||||
private static Vec3D findCollisionFreePosition(Vec3D vec3d, WorldServer worldserver, Entity entity, EntitySize entitysize) {
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
--- a/net/minecraft/world/level/portal/DimensionTransition.java
|
||||
+++ b/net/minecraft/world/level/portal/DimensionTransition.java
|
||||
@@ -7,7 +7,19 @@
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.phys.Vec3D;
|
||||
|
||||
-public record DimensionTransition(WorldServer newLevel, Vec3D pos, Vec3D speed, float yRot, float xRot, boolean missingRespawnBlock, DimensionTransition.a postDimensionTransition) {
|
||||
+// CraftBukkit start
|
||||
+import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
+
|
||||
+public record DimensionTransition(WorldServer newLevel, Vec3D pos, Vec3D speed, float yRot, float xRot, boolean missingRespawnBlock, DimensionTransition.a postDimensionTransition, PlayerTeleportEvent.TeleportCause cause) {
|
||||
+
|
||||
+ public DimensionTransition(WorldServer newLevel, Vec3D pos, Vec3D speed, float yRot, float xRot, boolean missingRespawnBlock, DimensionTransition.a postDimensionTransition) {
|
||||
+ this(newLevel, pos, speed, yRot, xRot, missingRespawnBlock, postDimensionTransition, PlayerTeleportEvent.TeleportCause.UNKNOWN);
|
||||
+ }
|
||||
+
|
||||
+ public DimensionTransition(PlayerTeleportEvent.TeleportCause cause) {
|
||||
+ this(null, Vec3D.ZERO, Vec3D.ZERO, 0.0F, 0.0F, false, DO_NOTHING, cause);
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
|
||||
public static final DimensionTransition.a DO_NOTHING = (entity) -> {
|
||||
};
|
||||
@@ -15,11 +27,21 @@
|
||||
public static final DimensionTransition.a PLACE_PORTAL_TICKET = DimensionTransition::placePortalTicket;
|
||||
|
||||
public DimensionTransition(WorldServer worldserver, Vec3D vec3d, Vec3D vec3d1, float f, float f1, DimensionTransition.a dimensiontransition_a) {
|
||||
- this(worldserver, vec3d, vec3d1, f, f1, false, dimensiontransition_a);
|
||||
+ // CraftBukkit start
|
||||
+ this(worldserver, vec3d, vec3d1, f, f1, dimensiontransition_a, PlayerTeleportEvent.TeleportCause.UNKNOWN);
|
||||
+ }
|
||||
+
|
||||
+ public DimensionTransition(WorldServer worldserver, Vec3D vec3d, Vec3D vec3d1, float f, float f1, DimensionTransition.a dimensiontransition_a, PlayerTeleportEvent.TeleportCause cause) {
|
||||
+ this(worldserver, vec3d, vec3d1, f, f1, false, dimensiontransition_a, cause);
|
||||
}
|
||||
|
||||
public DimensionTransition(WorldServer worldserver, Entity entity, DimensionTransition.a dimensiontransition_a) {
|
||||
- this(worldserver, findAdjustedSharedSpawnPos(worldserver, entity), Vec3D.ZERO, 0.0F, 0.0F, false, dimensiontransition_a);
|
||||
+ this(worldserver, entity, dimensiontransition_a, PlayerTeleportEvent.TeleportCause.UNKNOWN);
|
||||
+ }
|
||||
+
|
||||
+ public DimensionTransition(WorldServer worldserver, Entity entity, DimensionTransition.a dimensiontransition_a, PlayerTeleportEvent.TeleportCause cause) {
|
||||
+ this(worldserver, findAdjustedSharedSpawnPos(worldserver, entity), Vec3D.ZERO, 0.0F, 0.0F, false, dimensiontransition_a, cause);
|
||||
+ // CraftBukkit end
|
||||
}
|
||||
|
||||
private static void playPortalSound(Entity entity) {
|
||||
@@ -1,30 +1,32 @@
|
||||
--- a/net/minecraft/world/level/portal/PortalTravelAgent.java
|
||||
+++ b/net/minecraft/world/level/portal/PortalTravelAgent.java
|
||||
@@ -42,15 +42,21 @@
|
||||
@@ -43,23 +43,35 @@
|
||||
}
|
||||
|
||||
public Optional<BlockUtil.Rectangle> findPortalAround(BlockPosition blockposition, boolean flag, WorldBorder worldborder) {
|
||||
public Optional<BlockPosition> findClosestPortalPosition(BlockPosition blockposition, boolean flag, WorldBorder worldborder) {
|
||||
+ // CraftBukkit start
|
||||
+ return findPortalAround(blockposition, worldborder, flag ? 16 : 128); // Search Radius
|
||||
+ return findClosestPortalPosition(blockposition, worldborder, flag ? 16 : 128); // Search Radius
|
||||
+ }
|
||||
+
|
||||
+ public Optional<BlockUtil.Rectangle> findPortalAround(BlockPosition blockposition, WorldBorder worldborder, int i) {
|
||||
+ public Optional<BlockPosition> findClosestPortalPosition(BlockPosition blockposition, WorldBorder worldborder, int i) {
|
||||
VillagePlace villageplace = this.level.getPoiManager();
|
||||
- int i = flag ? 16 : 128;
|
||||
+ // int i = flag ? 16 : 128;
|
||||
+ // CraftBukkit end
|
||||
|
||||
villageplace.ensureLoadedAndValid(this.level, blockposition, i);
|
||||
Optional<VillagePlaceRecord> optional = villageplace.getInSquare((holder) -> {
|
||||
- Stream stream = villageplace.getInSquare((holder) -> {
|
||||
+ Stream<BlockPosition> stream = villageplace.getInSquare((holder) -> { // CraftBukkit - decompile error
|
||||
return holder.is(PoiTypes.NETHER_PORTAL);
|
||||
}, blockposition, i, VillagePlace.Occupancy.ANY).filter((villageplacerecord) -> {
|
||||
return worldborder.isWithinBounds(villageplacerecord.getPos());
|
||||
- }).sorted(Comparator.comparingDouble((villageplacerecord) -> {
|
||||
+ }).sorted(Comparator.comparingDouble((VillagePlaceRecord villageplacerecord) -> { // CraftBukkit - decompile error
|
||||
return villageplacerecord.getPos().distSqr(blockposition);
|
||||
}).thenComparingInt((villageplacerecord) -> {
|
||||
return villageplacerecord.getPos().getY();
|
||||
@@ -71,6 +77,12 @@
|
||||
}, blockposition, i, VillagePlace.Occupancy.ANY).map(VillagePlaceRecord::getPos);
|
||||
|
||||
Objects.requireNonNull(worldborder);
|
||||
return stream.filter(worldborder::isWithinBounds).filter((blockposition1) -> {
|
||||
return this.level.getBlockState(blockposition1).hasProperty(BlockProperties.HORIZONTAL_AXIS);
|
||||
- }).min(Comparator.comparingDouble((blockposition1) -> {
|
||||
+ }).min(Comparator.comparingDouble((BlockPosition blockposition1) -> { // CraftBukkit - decompile error
|
||||
return blockposition1.distSqr(blockposition);
|
||||
}).thenComparingInt(BaseBlockPosition::getY));
|
||||
}
|
||||
|
||||
public Optional<BlockUtil.Rectangle> createPortal(BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
|
||||
@@ -37,16 +39,16 @@
|
||||
EnumDirection enumdirection = EnumDirection.get(EnumDirection.EnumAxisDirection.POSITIVE, enumdirection_enumaxis);
|
||||
double d0 = -1.0D;
|
||||
BlockPosition blockposition1 = null;
|
||||
@@ -79,7 +91,7 @@
|
||||
WorldBorder worldborder = this.level.getWorldBorder();
|
||||
@@ -69,7 +81,7 @@
|
||||
int i = Math.min(this.level.getMaxBuildHeight(), this.level.getMinBuildHeight() + this.level.getLogicalHeight()) - 1;
|
||||
boolean flag = true;
|
||||
BlockPosition.MutableBlockPosition blockposition_mutableblockposition = blockposition.mutable();
|
||||
- Iterator iterator = BlockPosition.spiralAround(blockposition, 16, EnumDirection.EAST, EnumDirection.SOUTH).iterator();
|
||||
+ Iterator iterator = BlockPosition.spiralAround(blockposition, createRadius, EnumDirection.EAST, EnumDirection.SOUTH).iterator(); // CraftBukkit
|
||||
|
||||
int j;
|
||||
int k;
|
||||
@@ -134,6 +146,7 @@
|
||||
@@ -122,6 +134,7 @@
|
||||
int j1;
|
||||
int k1;
|
||||
|
||||
@@ -54,16 +56,16 @@
|
||||
if (d0 == -1.0D) {
|
||||
j1 = Math.max(this.level.getMinBuildHeight() - -1, 70);
|
||||
k1 = i - 9;
|
||||
@@ -154,7 +167,7 @@
|
||||
IBlockData iblockdata = l < 0 ? Blocks.OBSIDIAN.defaultBlockState() : Blocks.AIR.defaultBlockState();
|
||||
@@ -139,7 +152,7 @@
|
||||
IBlockData iblockdata = i1 < 0 ? Blocks.OBSIDIAN.defaultBlockState() : Blocks.AIR.defaultBlockState();
|
||||
|
||||
blockposition_mutableblockposition.setWithOffset(blockposition1, k * enumdirection.getStepX() + l1 * enumdirection1.getStepX(), l, k * enumdirection.getStepZ() + l1 * enumdirection1.getStepZ());
|
||||
blockposition_mutableblockposition.setWithOffset(blockposition1, l * enumdirection.getStepX() + k * enumdirection1.getStepX(), i1, l * enumdirection.getStepZ() + k * enumdirection1.getStepZ());
|
||||
- this.level.setBlockAndUpdate(blockposition_mutableblockposition, iblockdata);
|
||||
+ blockList.setBlock(blockposition_mutableblockposition, iblockdata, 3); // CraftBukkit
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -164,7 +177,7 @@
|
||||
@@ -149,7 +162,7 @@
|
||||
for (k1 = -1; k1 < 4; ++k1) {
|
||||
if (j1 == -1 || j1 == 2 || k1 == -1 || k1 == 3) {
|
||||
blockposition_mutableblockposition.setWithOffset(blockposition1, j1 * enumdirection.getStepX(), k1, j1 * enumdirection.getStepZ());
|
||||
@@ -72,7 +74,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -174,10 +187,20 @@
|
||||
@@ -159,10 +172,20 @@
|
||||
for (k1 = 0; k1 < 2; ++k1) {
|
||||
for (j = 0; j < 3; ++j) {
|
||||
blockposition_mutableblockposition.setWithOffset(blockposition1, k1 * enumdirection.getStepX(), j, k1 * enumdirection.getStepZ());
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
--- a/net/minecraft/world/level/portal/ShapeDetectorShape.java
|
||||
+++ b/net/minecraft/world/level/portal/ShapeDetectorShape.java
|
||||
@@ -2,14 +2,25 @@
|
||||
|
||||
import net.minecraft.world.phys.Vec3D;
|
||||
|
||||
+// CraftBukkit start
|
||||
+import net.minecraft.server.level.WorldServer;
|
||||
+import org.bukkit.craftbukkit.event.CraftPortalEvent;
|
||||
+// CraftBukkit end
|
||||
+
|
||||
public class ShapeDetectorShape {
|
||||
|
||||
public final Vec3D pos;
|
||||
public final Vec3D speed;
|
||||
public final float yRot;
|
||||
public final float xRot;
|
||||
+ // 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.pos = vec3d;
|
||||
this.speed = vec3d1;
|
||||
this.yRot = f;
|
||||
Reference in New Issue
Block a user