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

@@ -197,6 +197,7 @@ import org.bukkit.event.inventory.TradeSelectEvent;
import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerBedEnterEvent.BedEnterResult;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerBucketEntityEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerBucketFishEvent;
import org.bukkit.event.player.PlayerEditBookEvent;
@@ -225,7 +226,7 @@ import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.potion.PotionEffect;
public class CraftEventFactory {
public static final DamageSource MELTING = CraftDamageSource.copyOf(DamageSource.BURN);
public static final DamageSource MELTING = CraftDamageSource.copyOf(DamageSource.ON_FIRE);
public static final DamageSource POISON = CraftDamageSource.copyOf(DamageSource.MAGIC);
public static org.bukkit.block.Block blockDamage; // For use in EntityDamageByBlockEvent
public static Entity entityDamage; // For use in EntityDamageByEntityEvent
@@ -272,7 +273,7 @@ public class CraftEventFactory {
}
}, t -> BedEnterResult.OK).map(java.util.function.Function.identity(), java.util.function.Function.identity());
PlayerBedEnterEvent event = new PlayerBedEnterEvent((Player) player.getBukkitEntity(), CraftBlock.at(player.world, bed), bedEnterResult);
PlayerBedEnterEvent event = new PlayerBedEnterEvent((Player) player.getBukkitEntity(), CraftBlock.at(player.level, bed), bedEnterResult);
Bukkit.getServer().getPluginManager().callEvent(event);
Result result = event.useBed();
@@ -308,12 +309,16 @@ public class CraftEventFactory {
/**
* Player Fish Bucket Event
*/
public static PlayerBucketFishEvent callPlayerFishBucketEvent(EntityFish fish, EntityHuman entityHuman, ItemStack waterBucket, ItemStack fishBucket) {
Fish bukkitFish = (Fish) fish.getBukkitEntity();
public static PlayerBucketEntityEvent callPlayerFishBucketEvent(EntityLiving fish, EntityHuman entityHuman, ItemStack originalBucket, ItemStack entityBucket) {
Player player = (Player) entityHuman.getBukkitEntity();
PlayerBucketFishEvent playerBucketFishEvent = new PlayerBucketFishEvent(player, bukkitFish, CraftItemStack.asBukkitCopy(waterBucket), CraftItemStack.asBukkitCopy(fishBucket));
Bukkit.getPluginManager().callEvent(playerBucketFishEvent);
return playerBucketFishEvent;
PlayerBucketEntityEvent event;
if (fish instanceof EntityFish) {
event = new PlayerBucketFishEvent(player, (Fish) fish.getBukkitEntity(), CraftItemStack.asBukkitCopy(originalBucket), CraftItemStack.asBukkitCopy(entityBucket));
} else {
event = new PlayerBucketEntityEvent(player, fish.getBukkitEntity(), CraftItemStack.asBukkitCopy(originalBucket), CraftItemStack.asBukkitCopy(entityBucket));
}
Bukkit.getPluginManager().callEvent(event);
return event;
}
/**
@@ -389,7 +394,7 @@ public class CraftEventFactory {
if (!event.isCancelled()) {
for (EntityItem item : items) {
item.world.addEntity(item);
item.level.addEntity(item);
}
}
}
@@ -404,7 +409,7 @@ public class CraftEventFactory {
org.bukkit.block.BlockFace blockFace = org.bukkit.craftbukkit.block.CraftBlock.notchToBlockFace(clickedFace);
EntityPlaceEvent event = new EntityPlaceEvent(entity.getBukkitEntity(), who, blockClicked, blockFace);
entity.world.getServer().getPluginManager().callEvent(event);
entity.level.getServer().getPluginManager().callEvent(event);
return event;
}
@@ -575,7 +580,7 @@ public class CraftEventFactory {
if (spawnReason != SpawnReason.CUSTOM) {
if (isAnimal && !world.getWorld().getAllowAnimals() || isMonster && !world.getWorld().getAllowMonsters() || isNpc && !world.getServer().getServer().getSpawnNPCs()) {
entity.dead = true;
entity.die();
return false;
}
}
@@ -595,15 +600,15 @@ public class CraftEventFactory {
event = CraftEventFactory.callEntitySpawnEvent(entity);
}
if (event != null && (event.isCancelled() || entity.dead)) {
if (event != null && (event.isCancelled() || entity.isRemoved())) {
Entity vehicle = entity.getVehicle();
if (vehicle != null) {
vehicle.dead = true;
vehicle.die();
}
for (Entity passenger : entity.getAllPassengers()) {
passenger.dead = true;
passenger.die();
}
entity.dead = true;
entity.die();
return false;
}
@@ -641,7 +646,7 @@ public class CraftEventFactory {
org.bukkit.entity.AnimalTamer bukkitTamer = (tamer != null ? tamer.getBukkitEntity() : null);
CraftServer craftServer = (CraftServer) bukkitEntity.getServer();
entity.persistent = true;
entity.persistenceRequired = true;
EntityTameEvent event = new EntityTameEvent((LivingEntity) bukkitEntity, bukkitTamer);
craftServer.getPluginManager().callEvent(event);
@@ -735,11 +740,17 @@ public class CraftEventFactory {
return handleBlockSpreadEvent(world, source, target, block, 2);
}
public static boolean handleBlockSpreadEvent(World world, BlockPosition source, BlockPosition target, IBlockData block, int flag) {
public static boolean handleBlockSpreadEvent(GeneratorAccess world, BlockPosition source, BlockPosition target, IBlockData block, int flag) {
// Suppress during worldgen
if (!(world instanceof World)) {
world.setTypeAndData(target, block, flag);
return true;
}
CraftBlockState state = CraftBlockState.getBlockState(world, target, flag);
state.setData(block);
BlockSpreadEvent event = new BlockSpreadEvent(world.getWorld().getBlockAt(target.getX(), target.getY(), target.getZ()), world.getWorld().getBlockAt(source.getX(), source.getY(), source.getZ()), state);
BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, source), state);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
@@ -841,7 +852,7 @@ public class CraftEventFactory {
} else if (damager.getBukkitEntity() instanceof Projectile) {
cause = DamageCause.PROJECTILE;
}
} else if ("thorns".equals(source.translationIndex)) {
} else if ("thorns".equals(source.msgId)) {
cause = DamageCause.THORNS;
}
@@ -866,14 +877,14 @@ public class CraftEventFactory {
DamageCause cause = null;
Block damager = blockDamage;
blockDamage = null;
if (source == DamageSource.CACTUS || source == DamageSource.SWEET_BERRY_BUSH) {
if (source == DamageSource.CACTUS || source == DamageSource.SWEET_BERRY_BUSH || source == DamageSource.STALAGMITE) {
cause = DamageCause.CONTACT;
} else if (source == DamageSource.HOT_FLOOR) {
cause = DamageCause.HOT_FLOOR;
} else if (source == DamageSource.MAGIC) {
cause = DamageCause.MAGIC;
} else {
throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager, source.translationIndex));
throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager, source.msgId));
}
EntityDamageEvent event = new EntityDamageByBlockEvent(damager, entity.getBukkitEntity(), cause, modifiers, modifierFunctions);
event.setCancelled(cancelled);
@@ -886,7 +897,7 @@ public class CraftEventFactory {
DamageCause cause = null;
CraftEntity damager = entityDamage.getBukkitEntity();
entityDamage = null;
if (source == DamageSource.ANVIL || source == DamageSource.FALLING_BLOCK) {
if (source == DamageSource.ANVIL || source == DamageSource.FALLING_BLOCK || source == DamageSource.FALLING_STALACTITE) {
cause = DamageCause.FALLING_BLOCK;
} else if (damager instanceof LightningStrike) {
cause = DamageCause.LIGHTNING;
@@ -897,7 +908,7 @@ public class CraftEventFactory {
} else if (source == DamageSource.MAGIC) {
cause = DamageCause.MAGIC;
} else {
throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager.getHandle(), source.translationIndex));
throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager.getHandle(), source.msgId));
}
EntityDamageEvent event = new EntityDamageByEntityEvent(damager, entity.getBukkitEntity(), cause, modifiers, modifierFunctions);
event.setCancelled(cancelled);
@@ -909,17 +920,17 @@ public class CraftEventFactory {
}
DamageCause cause = null;
if (source == DamageSource.FIRE) {
if (source == DamageSource.IN_FIRE) {
cause = DamageCause.FIRE;
} else if (source == DamageSource.STARVE) {
cause = DamageCause.STARVATION;
} else if (source == DamageSource.WITHER) {
cause = DamageCause.WITHER;
} else if (source == DamageSource.STUCK) {
} else if (source == DamageSource.IN_WALL) {
cause = DamageCause.SUFFOCATION;
} else if (source == DamageSource.DROWN) {
cause = DamageCause.DROWNING;
} else if (source == DamageSource.BURN) {
} else if (source == DamageSource.ON_FIRE) {
cause = DamageCause.FIRE_TICK;
} else if (source == MELTING) {
cause = DamageCause.MELTING;
@@ -933,8 +944,10 @@ public class CraftEventFactory {
cause = DamageCause.FLY_INTO_WALL;
} else if (source == DamageSource.CRAMMING) {
cause = DamageCause.CRAMMING;
} else if (source == DamageSource.DRYOUT) {
} else if (source == DamageSource.DRY_OUT) {
cause = DamageCause.DRYOUT;
} else if (source == DamageSource.FREEZE) {
cause = DamageCause.FREEZE;
} else if (source == DamageSource.GENERIC) {
cause = DamageCause.CUSTOM;
}
@@ -943,7 +956,7 @@ public class CraftEventFactory {
return callEntityDamageEvent(null, entity, cause, modifiers, modifierFunctions, cancelled);
}
throw new IllegalStateException(String.format("Unhandled damage of %s from %s", entity, source.translationIndex));
throw new IllegalStateException(String.format("Unhandled damage of %s from %s", entity, source.msgId));
}
private static EntityDamageEvent callEntityDamageEvent(Entity damager, Entity damagee, DamageCause cause, Map<DamageModifier, Double> modifiers, Map<DamageModifier, Function<? super Double, Double>> modifierFunctions) {
@@ -1090,7 +1103,7 @@ public class CraftEventFactory {
}
public static EntityChangeBlockEvent callEntityChangeBlockEvent(Entity entity, BlockPosition position, IBlockData newBlock, boolean cancelled) {
Block block = entity.world.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ());
Block block = entity.level.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ());
EntityChangeBlockEvent event = new EntityChangeBlockEvent(entity.getBukkitEntity(), block, CraftBlockData.fromData(newBlock));
event.setCancelled(cancelled);
@@ -1118,7 +1131,7 @@ public class CraftEventFactory {
public static EntityBreakDoorEvent callEntityBreakDoorEvent(Entity entity, BlockPosition pos) {
org.bukkit.entity.Entity entity1 = entity.getBukkitEntity();
Block block = CraftBlock.at(entity.world, pos);
Block block = CraftBlock.at(entity.level, pos);
EntityBreakDoorEvent event = new EntityBreakDoorEvent((LivingEntity) entity1, block);
entity1.getServer().getPluginManager().callEvent(event);
@@ -1131,20 +1144,20 @@ public class CraftEventFactory {
}
public static Container callInventoryOpenEvent(EntityPlayer player, Container container, boolean cancelled) {
if (player.activeContainer != player.defaultContainer) { // fire INVENTORY_CLOSE if one already open
player.playerConnection.a(new PacketPlayInCloseWindow(player.activeContainer.windowId));
if (player.containerMenu != player.inventoryMenu) { // fire INVENTORY_CLOSE if one already open
player.connection.a(new PacketPlayInCloseWindow(player.containerMenu.containerId));
}
CraftServer server = player.world.getServer();
CraftServer server = player.level.getServer();
CraftPlayer craftPlayer = player.getBukkitEntity();
player.activeContainer.transferTo(container, craftPlayer);
player.containerMenu.transferTo(container, craftPlayer);
InventoryOpenEvent event = new InventoryOpenEvent(container.getBukkitView());
event.setCancelled(cancelled);
server.getPluginManager().callEvent(event);
if (event.isCancelled()) {
container.transferTo(player.activeContainer, craftPlayer);
container.transferTo(player.containerMenu, craftPlayer);
return null;
}
@@ -1179,7 +1192,7 @@ public class CraftEventFactory {
BlockFace hitFace = null;
if (position.getType() == MovingObjectPosition.EnumMovingObjectType.BLOCK) {
MovingObjectPositionBlock positionBlock = (MovingObjectPositionBlock) position;
hitBlock = CraftBlock.at(entity.world, positionBlock.getBlockPosition());
hitBlock = CraftBlock.at(entity.level, positionBlock.getBlockPosition());
hitFace = CraftBlock.notchToBlockFace(positionBlock.getDirection());
}
@@ -1189,7 +1202,7 @@ public class CraftEventFactory {
}
ProjectileHitEvent event = new ProjectileHitEvent((Projectile) entity.getBukkitEntity(), hitEntity, hitBlock, hitFace);
entity.world.getServer().getPluginManager().callEvent(event);
entity.level.getServer().getPluginManager().callEvent(event);
return event;
}
@@ -1289,14 +1302,14 @@ public class CraftEventFactory {
}
public static void handleInventoryCloseEvent(EntityHuman human) {
InventoryCloseEvent event = new InventoryCloseEvent(human.activeContainer.getBukkitView());
human.world.getServer().getPluginManager().callEvent(event);
human.activeContainer.transferTo(human.defaultContainer, human.getBukkitEntity());
InventoryCloseEvent event = new InventoryCloseEvent(human.containerMenu.getBukkitView());
human.level.getServer().getPluginManager().callEvent(event);
human.containerMenu.transferTo(human.inventoryMenu, human.getBukkitEntity());
}
public static ItemStack handleEditBookEvent(EntityPlayer player, int itemInHandIndex, ItemStack itemInHand, ItemStack newBookItem) {
PlayerEditBookEvent editBookEvent = new PlayerEditBookEvent(player.getBukkitEntity(), (itemInHandIndex >= 0 && itemInHandIndex <= 8) ? itemInHandIndex : -1, (BookMeta) CraftItemStack.getItemMeta(itemInHand), (BookMeta) CraftItemStack.getItemMeta(newBookItem), newBookItem.getItem() == Items.WRITTEN_BOOK);
player.world.getServer().getPluginManager().callEvent(editBookEvent);
player.level.getServer().getPluginManager().callEvent(editBookEvent);
// If they've got the same item in their hand, it'll need to be updated.
if (itemInHand != null && itemInHand.getItem() == Items.WRITABLE_BOOK) {
@@ -1314,13 +1327,13 @@ public class CraftEventFactory {
public static PlayerUnleashEntityEvent callPlayerUnleashEntityEvent(EntityInsentient entity, EntityHuman player) {
PlayerUnleashEntityEvent event = new PlayerUnleashEntityEvent(entity.getBukkitEntity(), (Player) player.getBukkitEntity());
entity.world.getServer().getPluginManager().callEvent(event);
entity.level.getServer().getPluginManager().callEvent(event);
return event;
}
public static PlayerLeashEntityEvent callPlayerLeashEntityEvent(EntityInsentient entity, Entity leashHolder, EntityHuman player) {
PlayerLeashEntityEvent event = new PlayerLeashEntityEvent(entity.getBukkitEntity(), leashHolder.getBukkitEntity(), (Player) player.getBukkitEntity());
entity.world.getServer().getPluginManager().callEvent(event);
entity.level.getServer().getPluginManager().callEvent(event);
return event;
}
@@ -1380,13 +1393,13 @@ public class CraftEventFactory {
event = new PlayerStatisticIncrementEvent(player, stat, current, newValue, material);
}
}
entityHuman.world.getServer().getPluginManager().callEvent(event);
entityHuman.level.getServer().getPluginManager().callEvent(event);
return (Cancellable) event;
}
public static FireworkExplodeEvent callFireworkExplodeEvent(EntityFireworks firework) {
FireworkExplodeEvent event = new FireworkExplodeEvent((Firework) firework.getBukkitEntity());
firework.world.getServer().getPluginManager().callEvent(event);
firework.level.getServer().getPluginManager().callEvent(event);
return event;
}
@@ -1406,19 +1419,19 @@ public class CraftEventFactory {
public static EntityToggleGlideEvent callToggleGlideEvent(EntityLiving entity, boolean gliding) {
EntityToggleGlideEvent event = new EntityToggleGlideEvent((LivingEntity) entity.getBukkitEntity(), gliding);
entity.world.getServer().getPluginManager().callEvent(event);
entity.level.getServer().getPluginManager().callEvent(event);
return event;
}
public static EntityToggleSwimEvent callToggleSwimEvent(EntityLiving entity, boolean swimming) {
EntityToggleSwimEvent event = new EntityToggleSwimEvent((LivingEntity) entity.getBukkitEntity(), swimming);
entity.world.getServer().getPluginManager().callEvent(event);
entity.level.getServer().getPluginManager().callEvent(event);
return event;
}
public static AreaEffectCloudApplyEvent callAreaEffectCloudApplyEvent(EntityAreaEffectCloud cloud, List<LivingEntity> entities) {
AreaEffectCloudApplyEvent event = new AreaEffectCloudApplyEvent((AreaEffectCloud) cloud.getBukkitEntity(), entities);
cloud.world.getServer().getPluginManager().callEvent(event);
cloud.level.getServer().getPluginManager().callEvent(event);
return event;
}
@@ -1434,7 +1447,7 @@ public class CraftEventFactory {
CraftItemStack bredWithStack = bredWith == null ? null : CraftItemStack.asCraftMirror(bredWith).clone();
EntityBreedEvent event = new EntityBreedEvent((LivingEntity) child.getBukkitEntity(), (LivingEntity) mother.getBukkitEntity(), (LivingEntity) father.getBukkitEntity(), breederEntity, bredWithStack, experience);
child.world.getServer().getPluginManager().callEvent(event);
child.level.getServer().getPluginManager().callEvent(event);
return event;
}