Update to Minecraft 1.17

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2021-06-11 15:00:00 +10:00
parent 75faba7fde
commit b3a8254758
619 changed files with 10708 additions and 8451 deletions

View File

@@ -11,98 +11,98 @@
+
public class BlockPortalShape {
private static final BlockBase.e a = (iblockdata, iblockaccess, blockposition) -> {
@@ -32,6 +37,7 @@
private BlockPosition position;
private static final int MIN_WIDTH = 2;
@@ -36,6 +41,7 @@
private BlockPosition bottomLeft;
private int height;
private int width;
private final int width;
+ org.bukkit.craftbukkit.util.BlockStateListPopulator blocks; // CraftBukkit - add field
public static Optional<BlockPortalShape> a(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
return a(generatoraccess, blockposition, (blockportalshape) -> {
@@ -52,6 +58,7 @@
@@ -56,6 +62,7 @@
}
public BlockPortalShape(GeneratorAccess generatoraccess, BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
+ blocks = new org.bukkit.craftbukkit.util.BlockStateListPopulator(generatoraccess.getMinecraftWorld()); // CraftBukkit
this.b = generatoraccess;
this.c = enumdirection_enumaxis;
this.d = enumdirection_enumaxis == EnumDirection.EnumAxis.X ? EnumDirection.WEST : EnumDirection.SOUTH;
@@ -96,6 +103,7 @@
this.level = generatoraccess;
this.axis = enumdirection_enumaxis;
this.rightDir = enumdirection_enumaxis == EnumDirection.EnumAxis.X ? EnumDirection.WEST : EnumDirection.SOUTH;
@@ -100,6 +107,7 @@
if (!a(iblockdata)) {
if (BlockPortalShape.a.test(iblockdata, this.b, blockposition_mutableblockposition)) {
if (BlockPortalShape.FRAME.test(iblockdata, this.level, blockposition_mutableblockposition)) {
+ blocks.setTypeAndData(blockposition_mutableblockposition, iblockdata, 18); // CraftBukkit - lower left / right
return i;
}
break;
@@ -106,6 +114,7 @@
if (!BlockPortalShape.a.test(iblockdata1, this.b, blockposition_mutableblockposition)) {
@@ -110,6 +118,7 @@
if (!BlockPortalShape.FRAME.test(iblockdata1, this.level, blockposition_mutableblockposition)) {
break;
}
+ blocks.setTypeAndData(blockposition_mutableblockposition, iblockdata1, 18); // CraftBukkit - bottom row
}
return 0;
@@ -125,6 +134,7 @@
if (!BlockPortalShape.a.test(this.b.getType(blockposition_mutableblockposition1), this.b, blockposition_mutableblockposition1)) {
@@ -129,6 +138,7 @@
if (!BlockPortalShape.FRAME.test(this.level.getType(blockposition_mutableblockposition1), this.level, blockposition_mutableblockposition1)) {
return false;
}
+ blocks.setTypeAndData(blockposition_mutableblockposition1, this.b.getType(blockposition_mutableblockposition1), 18); // CraftBukkit - upper row
+ blocks.setTypeAndData(blockposition_mutableblockposition1, this.level.getType(blockposition_mutableblockposition1), 18); // CraftBukkit - upper row
}
return true;
@@ -154,6 +164,10 @@
++this.e;
@@ -158,6 +168,10 @@
++this.numPortalBlocks;
}
}
+ // CraftBukkit start - left and right
+ blocks.setTypeAndData(blockposition_mutableblockposition.g(this.position).c(EnumDirection.UP, i).c(this.d, -1), this.b.getType(blockposition_mutableblockposition), 18);
+ blocks.setTypeAndData(blockposition_mutableblockposition.g(this.position).c(EnumDirection.UP, i).c(this.d, this.width), this.b.getType(blockposition_mutableblockposition), 18);
+ blocks.setTypeAndData(blockposition_mutableblockposition.g(this.bottomLeft).c(EnumDirection.UP, i).c(this.rightDir, -1), this.level.getType(blockposition_mutableblockposition), 18);
+ blocks.setTypeAndData(blockposition_mutableblockposition.g(this.bottomLeft).c(EnumDirection.UP, i).c(this.rightDir, this.width), this.level.getType(blockposition_mutableblockposition), 18);
+ // CraftBukkit end
}
return 21;
@@ -167,12 +181,28 @@
return this.position != null && this.width >= 2 && this.width <= 21 && this.height >= 3 && this.height <= 21;
@@ -171,12 +185,28 @@
return this.bottomLeft != 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();
+ org.bukkit.World bworld = this.level.getMinecraftWorld().getWorld();
+
+ // Copy below for loop
IBlockData iblockdata = (IBlockData) Blocks.NETHER_PORTAL.getBlockData().set(BlockPortal.AXIS, this.c);
IBlockData iblockdata = (IBlockData) Blocks.NETHER_PORTAL.getBlockData().set(BlockPortal.AXIS, this.axis);
BlockPosition.a(this.position, this.position.shift(EnumDirection.UP, this.height - 1).shift(this.d, this.width - 1)).forEach((blockposition) -> {
BlockPosition.a(this.bottomLeft, this.bottomLeft.shift(EnumDirection.UP, this.height - 1).shift(this.rightDir, this.width - 1)).forEach((blockposition) -> {
+ blocks.setTypeAndData(blockposition, iblockdata, 18);
+ });
+
+ PortalCreateEvent event = new PortalCreateEvent((java.util.List<org.bukkit.block.BlockState>) (java.util.List) blocks.getList(), bworld, null, PortalCreateEvent.CreateReason.FIRE);
+ this.b.getMinecraftWorld().getMinecraftServer().server.getPluginManager().callEvent(event);
+ this.level.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);
+ BlockPosition.a(this.bottomLeft, this.bottomLeft.shift(EnumDirection.UP, this.height - 1).shift(this.rightDir, this.width - 1)).forEach((blockposition) -> {
this.level.setTypeAndData(blockposition, iblockdata, 18);
});
+ return true; // CraftBukkit
}
public boolean c() {
@@ -209,7 +239,7 @@
@@ -213,7 +243,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;
BlockPosition blockposition = blockutil_rectangle.minCorner;
IBlockData iblockdata = worldserver.getType(blockposition);
EnumDirection.EnumAxis enumdirection_enumaxis1 = (EnumDirection.EnumAxis) iblockdata.get(BlockProperties.E);
@@ -223,6 +253,6 @@
EnumDirection.EnumAxis enumdirection_enumaxis1 = (EnumDirection.EnumAxis) iblockdata.d(BlockProperties.HORIZONTAL_AXIS).orElse(EnumDirection.EnumAxis.X);
@@ -227,6 +257,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));

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/portal/PortalTravelAgent.java
+++ b/net/minecraft/world/level/portal/PortalTravelAgent.java
@@ -30,13 +30,19 @@
@@ -43,13 +43,19 @@
}
public Optional<BlockUtil.Rectangle> findPortal(BlockPosition blockposition, boolean flag) {
@@ -9,20 +9,20 @@
+ }
+
+ public Optional<BlockUtil.Rectangle> findPortal(BlockPosition blockposition, int i) {
VillagePlace villageplace = this.world.y();
VillagePlace villageplace = this.level.A();
- int i = flag ? 16 : 128;
+ // int i = flag ? 16 : 128;
+ // CraftBukkit end
villageplace.a(this.world, blockposition, i);
villageplace.a(this.level, blockposition, i);
Optional<VillagePlaceRecord> optional = villageplace.b((villageplacetype) -> {
return villageplacetype == VillagePlaceType.v;
return villageplacetype == VillagePlaceType.NETHER_PORTAL;
- }, 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();
@@ -57,6 +63,12 @@
@@ -70,6 +76,12 @@
}
public Optional<BlockUtil.Rectangle> createPortal(BlockPosition blockposition, EnumDirection.EnumAxis enumdirection_enumaxis) {
@@ -35,55 +35,55 @@
EnumDirection enumdirection = EnumDirection.a(EnumDirection.EnumAxisDirection.POSITIVE, enumdirection_enumaxis);
double d0 = -1.0D;
BlockPosition blockposition1 = null;
@@ -65,7 +77,7 @@
WorldBorder worldborder = this.world.getWorldBorder();
int i = this.world.getHeight() - 1;
@@ -78,7 +90,7 @@
WorldBorder worldborder = this.level.getWorldBorder();
int i = Math.min(this.level.getMaxBuildHeight(), this.level.getMinBuildHeight() + this.level.getLogicalHeight()) - 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;
@@ -119,6 +131,7 @@
int k;
@@ -133,6 +145,7 @@
int j1;
int k1;
+ org.bukkit.craftbukkit.util.BlockStateListPopulator blockList = new org.bukkit.craftbukkit.util.BlockStateListPopulator(this.world); // CraftBukkit - Use BlockStateListPopulator
+ org.bukkit.craftbukkit.util.BlockStateListPopulator blockList = new org.bukkit.craftbukkit.util.BlockStateListPopulator(this.level); // 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();
@@ -133,7 +146,7 @@
IBlockData iblockdata = k1 < 0 ? Blocks.OBSIDIAN.getBlockData() : Blocks.AIR.getBlockData();
j1 = Math.max(this.level.getMinBuildHeight() - -1, 70);
k1 = i - 9;
@@ -153,7 +166,7 @@
IBlockData iblockdata = l < 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);
blockposition_mutableblockposition.a((BaseBlockPosition) blockposition1, k * enumdirection.getAdjacentX() + l1 * enumdirection1.getAdjacentX(), l, k * enumdirection.getAdjacentZ() + l1 * enumdirection1.getAdjacentZ());
- this.level.setTypeUpdate(blockposition_mutableblockposition, iblockdata);
+ blockList.setTypeAndData(blockposition_mutableblockposition, iblockdata, 3); // CraftBukkit
}
}
}
@@ -143,7 +156,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);
@@ -163,7 +176,7 @@
for (k1 = -1; k1 < 4; ++k1) {
if (j1 == -1 || j1 == 2 || k1 == -1 || k1 == 3) {
blockposition_mutableblockposition.a((BaseBlockPosition) blockposition1, j1 * enumdirection.getAdjacentX(), k1, j1 * enumdirection.getAdjacentZ());
- this.level.setTypeAndData(blockposition_mutableblockposition, Blocks.OBSIDIAN.getBlockData(), 3);
+ blockList.setTypeAndData(blockposition_mutableblockposition, Blocks.OBSIDIAN.getBlockData(), 3); // CraftBukkit
}
}
}
@@ -153,10 +166,20 @@
for (j1 = 0; j1 < 2; ++j1) {
@@ -173,10 +186,20 @@
for (k1 = 0; k1 < 2; ++k1) {
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);
blockposition_mutableblockposition.a((BaseBlockPosition) blockposition1, k1 * enumdirection.getAdjacentX(), j, k1 * enumdirection.getAdjacentZ());
- this.level.setTypeAndData(blockposition_mutableblockposition, iblockdata1, 18);
+ blockList.setTypeAndData(blockposition_mutableblockposition, iblockdata1, 18); // CraftBukkit
}
}
+ // CraftBukkit start
+ org.bukkit.World bworld = this.world.getWorld();
+ org.bukkit.World bworld = this.level.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);
+ this.level.getServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ return Optional.empty();
+ }

View File

@@ -11,10 +11,10 @@
+
public class ShapeDetectorShape {
public final Vec3D position;
public final Vec3D velocity;
public final float yaw;
public final float pitch;
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;
@@ -24,6 +24,6 @@
+ this.world = world;
+ this.portalEventInfo = portalEventInfo;
+ // CraftBukkit end
this.position = vec3d;
this.velocity = vec3d1;
this.yaw = f;
this.pos = vec3d;
this.speed = vec3d1;
this.yRot = f;