@@ -3,6 +3,7 @@ package org.bukkit.craftbukkit.entity;
|
||||
import com.google.common.base.Preconditions;
|
||||
import net.minecraft.core.BlockPosition;
|
||||
import net.minecraft.world.entity.projectile.EntityArrow;
|
||||
import net.minecraft.world.item.Items;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
@@ -76,7 +77,7 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr
|
||||
|
||||
@Override
|
||||
public boolean isInBlock() {
|
||||
return getHandle().inGround;
|
||||
return getHandle().isInGround();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -110,7 +111,9 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr
|
||||
|
||||
@Override
|
||||
public boolean isShotFromCrossbow() {
|
||||
return getHandle().shotFromCrossbow();
|
||||
net.minecraft.world.item.ItemStack firedFromWeapon = getHandle().getWeaponItem();
|
||||
|
||||
return firedFromWeapon != null && firedFromWeapon.is(Items.CROSSBOW);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -133,7 +133,7 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud
|
||||
@Override
|
||||
public void setColor(Color color) {
|
||||
PotionContents old = getHandle().potionContents;
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), Optional.of(color.asRGB()), old.customEffects()));
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), Optional.of(color.asRGB()), old.customEffects(), old.customName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -152,7 +152,7 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud
|
||||
@Override
|
||||
public void clearCustomEffects() {
|
||||
PotionContents old = getHandle().potionContents;
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), List.of()));
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), List.of(), old.customName()));
|
||||
getHandle().updateColor();
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud
|
||||
Holder<MobEffectList> minecraft = CraftPotionEffectType.bukkitToMinecraftHolder(effect);
|
||||
|
||||
PotionContents old = getHandle().potionContents;
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), old.customEffects().stream().filter((mobEffect) -> !mobEffect.getEffect().equals(minecraft)).toList()));
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), old.customEffects().stream().filter((mobEffect) -> !mobEffect.getEffect().equals(minecraft)).toList(), old.customName()));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud
|
||||
getHandle().setPotionContents(getHandle().potionContents.withPotion(CraftPotionType.bukkitToMinecraftHolder(potionType)));
|
||||
} else {
|
||||
PotionContents old = getHandle().potionContents;
|
||||
getHandle().setPotionContents(new PotionContents(Optional.empty(), old.customColor(), old.customEffects()));
|
||||
getHandle().setPotionContents(new PotionContents(Optional.empty(), old.customColor(), old.customEffects(), old.customName()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
|
||||
|
||||
@Override
|
||||
public boolean hasBasePlate() {
|
||||
return !getHandle().isNoBasePlate();
|
||||
return getHandle().showBasePlate();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -165,7 +165,7 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
|
||||
|
||||
@Override
|
||||
public boolean hasArms() {
|
||||
return getHandle().isShowArms();
|
||||
return getHandle().showArms();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -211,16 +211,16 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
|
||||
|
||||
@Override
|
||||
public void addEquipmentLock(EquipmentSlot equipmentSlot, LockType lockType) {
|
||||
getHandle().disabledSlots |= (1 << CraftEquipmentSlot.getNMS(equipmentSlot).getFilterFlag() + lockType.ordinal() * 8);
|
||||
getHandle().disabledSlots |= (1 << CraftEquipmentSlot.getNMS(equipmentSlot).getFilterBit(lockType.ordinal() * 8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeEquipmentLock(EquipmentSlot equipmentSlot, LockType lockType) {
|
||||
getHandle().disabledSlots &= ~(1 << CraftEquipmentSlot.getNMS(equipmentSlot).getFilterFlag() + lockType.ordinal() * 8);
|
||||
getHandle().disabledSlots &= ~(1 << CraftEquipmentSlot.getNMS(equipmentSlot).getFilterBit(lockType.ordinal() * 8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasEquipmentLock(EquipmentSlot equipmentSlot, LockType lockType) {
|
||||
return (getHandle().disabledSlots & (1 << CraftEquipmentSlot.getNMS(equipmentSlot).getFilterFlag() + lockType.ordinal() * 8)) != 0;
|
||||
return (getHandle().disabledSlots & (1 << CraftEquipmentSlot.getNMS(equipmentSlot).getFilterBit(lockType.ordinal() * 8))) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow {
|
||||
@Override
|
||||
public void clearCustomEffects() {
|
||||
PotionContents old = getHandle().getPotionContents();
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), List.of()));
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), List.of(), old.customName()));
|
||||
getHandle().updateColor();
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow {
|
||||
Holder<MobEffectList> minecraft = CraftPotionEffectType.bukkitToMinecraftHolder(effect);
|
||||
|
||||
PotionContents old = getHandle().getPotionContents();
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), old.customEffects().stream().filter((mobEffect) -> !mobEffect.getEffect().equals(minecraft)).toList()));
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), old.customEffects().stream().filter((mobEffect) -> !mobEffect.getEffect().equals(minecraft)).toList(), old.customName()));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow {
|
||||
getHandle().setPotionContents(getHandle().getPotionContents().withPotion(CraftPotionType.bukkitToMinecraftHolder(potionType)));
|
||||
} else {
|
||||
PotionContents old = getHandle().getPotionContents();
|
||||
getHandle().setPotionContents(new PotionContents(Optional.empty(), old.customColor(), old.customEffects()));
|
||||
getHandle().setPotionContents(new PotionContents(Optional.empty(), old.customColor(), old.customEffects(), old.customName()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow {
|
||||
public void setColor(Color color) {
|
||||
int colorRGB = (color == null) ? -1 : color.asRGB();
|
||||
PotionContents old = getHandle().getPotionContents();
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), Optional.of(colorRGB), old.customEffects()));
|
||||
getHandle().setPotionContents(new PotionContents(old.potion(), Optional.of(colorRGB), old.customEffects(), old.customName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,39 +1,38 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.util.stream.Collectors;
|
||||
import net.minecraft.world.entity.EntityTypes;
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import net.minecraft.world.entity.vehicle.EntityBoat;
|
||||
import org.bukkit.TreeSpecies;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.Boat;
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
public class CraftBoat extends CraftVehicle implements Boat {
|
||||
public abstract class CraftBoat extends CraftVehicle implements Boat {
|
||||
|
||||
public CraftBoat(CraftServer server, EntityBoat entity) {
|
||||
public CraftBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeSpecies getWoodType() {
|
||||
return getTreeSpecies(getHandle().getVariant());
|
||||
return getTreeSpecies(getHandle().getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWoodType(TreeSpecies species) {
|
||||
getHandle().setVariant(getBoatType(species));
|
||||
throw new UnsupportedOperationException("Not supported - you must spawn a new entity to change boat type.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getBoatType() {
|
||||
return boatTypeFromNms(getHandle().getVariant());
|
||||
return boatTypeFromNms(getHandle().getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBoatType(Type type) {
|
||||
Preconditions.checkArgument(type != null, "Boat.Type cannot be null");
|
||||
|
||||
getHandle().setVariant(boatTypeToNms(type));
|
||||
throw new UnsupportedOperationException("Not supported - you must spawn a new entity to change boat type.");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -86,8 +85,8 @@ public class CraftBoat extends CraftVehicle implements Boat {
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityBoat getHandle() {
|
||||
return (EntityBoat) entity;
|
||||
public AbstractBoat getHandle() {
|
||||
return (AbstractBoat) entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,34 +94,44 @@ public class CraftBoat extends CraftVehicle implements Boat {
|
||||
return "CraftBoat{boatType=" + getBoatType() + ",status=" + getStatus() + ",passengers=" + getPassengers().stream().map(Entity::toString).collect(Collectors.joining("-", "{", "}")) + "}";
|
||||
}
|
||||
|
||||
public static Boat.Type boatTypeFromNms(EntityBoat.EnumBoatType boatType) {
|
||||
return switch (boatType) {
|
||||
default -> throw new EnumConstantNotPresentException(Type.class, boatType.name());
|
||||
case OAK -> Type.OAK;
|
||||
case BIRCH -> Type.BIRCH;
|
||||
case ACACIA -> Type.ACACIA;
|
||||
case CHERRY -> Type.CHERRY;
|
||||
case JUNGLE -> Type.JUNGLE;
|
||||
case SPRUCE -> Type.SPRUCE;
|
||||
case DARK_OAK -> Type.DARK_OAK;
|
||||
case MANGROVE -> Type.MANGROVE;
|
||||
case BAMBOO -> Type.BAMBOO;
|
||||
};
|
||||
}
|
||||
public static Boat.Type boatTypeFromNms(EntityTypes<?> boatType) {
|
||||
if (boatType == EntityTypes.OAK_BOAT || boatType == EntityTypes.OAK_CHEST_BOAT) {
|
||||
return Type.OAK;
|
||||
}
|
||||
|
||||
public static EntityBoat.EnumBoatType boatTypeToNms(Boat.Type type) {
|
||||
return switch (type) {
|
||||
default -> throw new EnumConstantNotPresentException(EntityBoat.EnumBoatType.class, type.name());
|
||||
case BAMBOO -> EntityBoat.EnumBoatType.BAMBOO;
|
||||
case MANGROVE -> EntityBoat.EnumBoatType.MANGROVE;
|
||||
case SPRUCE -> EntityBoat.EnumBoatType.SPRUCE;
|
||||
case DARK_OAK -> EntityBoat.EnumBoatType.DARK_OAK;
|
||||
case JUNGLE -> EntityBoat.EnumBoatType.JUNGLE;
|
||||
case CHERRY -> EntityBoat.EnumBoatType.CHERRY;
|
||||
case ACACIA -> EntityBoat.EnumBoatType.ACACIA;
|
||||
case BIRCH -> EntityBoat.EnumBoatType.BIRCH;
|
||||
case OAK -> EntityBoat.EnumBoatType.OAK;
|
||||
};
|
||||
if (boatType == EntityTypes.BIRCH_BOAT || boatType == EntityTypes.BIRCH_CHEST_BOAT) {
|
||||
return Type.BIRCH;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.ACACIA_BOAT || boatType == EntityTypes.ACACIA_CHEST_BOAT) {
|
||||
return Type.ACACIA;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.CHERRY_BOAT || boatType == EntityTypes.CHERRY_CHEST_BOAT) {
|
||||
return Type.CHERRY;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.JUNGLE_BOAT || boatType == EntityTypes.JUNGLE_CHEST_BOAT) {
|
||||
return Type.JUNGLE;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.SPRUCE_BOAT || boatType == EntityTypes.SPRUCE_CHEST_BOAT) {
|
||||
return Type.SPRUCE;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.DARK_OAK_BOAT || boatType == EntityTypes.DARK_OAK_CHEST_BOAT) {
|
||||
return Type.DARK_OAK;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.MANGROVE_BOAT || boatType == EntityTypes.MANGROVE_CHEST_BOAT) {
|
||||
return Type.MANGROVE;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.BAMBOO_RAFT || boatType == EntityTypes.BAMBOO_CHEST_RAFT) {
|
||||
return Type.BAMBOO;
|
||||
}
|
||||
|
||||
throw new EnumConstantNotPresentException(Type.class, boatType.toString());
|
||||
}
|
||||
|
||||
public static Status boatStatusFromNms(EntityBoat.EnumStatus enumStatus) {
|
||||
@@ -137,40 +146,27 @@ public class CraftBoat extends CraftVehicle implements Boat {
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static TreeSpecies getTreeSpecies(EntityBoat.EnumBoatType boatType) {
|
||||
switch (boatType) {
|
||||
case SPRUCE:
|
||||
return TreeSpecies.REDWOOD;
|
||||
case BIRCH:
|
||||
return TreeSpecies.BIRCH;
|
||||
case JUNGLE:
|
||||
return TreeSpecies.JUNGLE;
|
||||
case ACACIA:
|
||||
return TreeSpecies.ACACIA;
|
||||
case DARK_OAK:
|
||||
return TreeSpecies.DARK_OAK;
|
||||
case OAK:
|
||||
default:
|
||||
return TreeSpecies.GENERIC;
|
||||
public static TreeSpecies getTreeSpecies(EntityTypes<?> boatType) {
|
||||
if (boatType == EntityTypes.SPRUCE_BOAT || boatType == EntityTypes.SPRUCE_CHEST_BOAT) {
|
||||
return TreeSpecies.REDWOOD;
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static EntityBoat.EnumBoatType getBoatType(TreeSpecies species) {
|
||||
switch (species) {
|
||||
case REDWOOD:
|
||||
return EntityBoat.EnumBoatType.SPRUCE;
|
||||
case BIRCH:
|
||||
return EntityBoat.EnumBoatType.BIRCH;
|
||||
case JUNGLE:
|
||||
return EntityBoat.EnumBoatType.JUNGLE;
|
||||
case ACACIA:
|
||||
return EntityBoat.EnumBoatType.ACACIA;
|
||||
case DARK_OAK:
|
||||
return EntityBoat.EnumBoatType.DARK_OAK;
|
||||
case GENERIC:
|
||||
default:
|
||||
return EntityBoat.EnumBoatType.OAK;
|
||||
if (boatType == EntityTypes.BIRCH_BOAT || boatType == EntityTypes.BIRCH_CHEST_BOAT) {
|
||||
return TreeSpecies.BIRCH;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.JUNGLE_BOAT || boatType == EntityTypes.JUNGLE_CHEST_BOAT) {
|
||||
return TreeSpecies.JUNGLE;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.ACACIA_BOAT || boatType == EntityTypes.ACACIA_CHEST_BOAT) {
|
||||
return TreeSpecies.ACACIA;
|
||||
}
|
||||
|
||||
if (boatType == EntityTypes.DARK_OAK_BOAT || boatType == EntityTypes.DARK_OAK_CHEST_BOAT) {
|
||||
return TreeSpecies.DARK_OAK;
|
||||
}
|
||||
|
||||
return TreeSpecies.GENERIC;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.ChestBoat;
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftLootTable;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.inventory.CraftInventory;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.loot.LootTable;
|
||||
|
||||
public class CraftChestBoat extends CraftBoat implements org.bukkit.entity.ChestBoat {
|
||||
public abstract class CraftChestBoat extends CraftBoat implements org.bukkit.entity.ChestBoat {
|
||||
|
||||
private final Inventory inventory;
|
||||
|
||||
public CraftChestBoat(CraftServer server, ChestBoat entity) {
|
||||
public CraftChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
inventory = new CraftInventory(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChestBoat getHandle() {
|
||||
return (ChestBoat) entity;
|
||||
public AbstractChestBoat getHandle() {
|
||||
return (AbstractChestBoat) entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -38,7 +38,7 @@ public class CraftChestBoat extends CraftBoat implements org.bukkit.entity.Chest
|
||||
|
||||
@Override
|
||||
public LootTable getLootTable() {
|
||||
return CraftLootTable.minecraftToBukkit(getHandle().getLootTable());
|
||||
return CraftLootTable.minecraftToBukkit(getHandle().getContainerLootTable());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -48,11 +48,11 @@ public class CraftChestBoat extends CraftBoat implements org.bukkit.entity.Chest
|
||||
|
||||
@Override
|
||||
public long getSeed() {
|
||||
return getHandle().getLootTableSeed();
|
||||
return getHandle().getContainerLootTableSeed();
|
||||
}
|
||||
|
||||
private void setLootTable(LootTable table, long seed) {
|
||||
getHandle().setLootTable(CraftLootTable.bukkitToMinecraft(table));
|
||||
getHandle().setLootTableSeed(seed);
|
||||
getHandle().setContainerLootTable(CraftLootTable.bukkitToMinecraft(table));
|
||||
getHandle().setContainerLootTableSeed(seed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import net.minecraft.world.entity.monster.creaking.Creaking;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
|
||||
public class CraftCreaking extends CraftMonster implements org.bukkit.entity.Creaking {
|
||||
|
||||
public CraftCreaking(CraftServer server, Creaking entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Creaking getHandle() {
|
||||
return (Creaking) entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CraftCreaking";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import net.minecraft.world.entity.monster.creaking.CreakingTransient;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
|
||||
public class CraftCreakingTransient extends CraftCreaking implements org.bukkit.entity.CreakingTransient {
|
||||
|
||||
public CraftCreakingTransient(CraftServer server, CreakingTransient entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CreakingTransient getHandle() {
|
||||
return (CreakingTransient) entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CraftCreakingTransient";
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import net.minecraft.world.entity.animal.EntityDolphin;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.Dolphin;
|
||||
|
||||
public class CraftDolphin extends CraftWaterMob implements Dolphin {
|
||||
public class CraftDolphin extends CraftAgeable implements Dolphin {
|
||||
|
||||
public CraftDolphin(CraftServer server, EntityDolphin entity) {
|
||||
super(server, entity);
|
||||
|
||||
@@ -16,12 +16,13 @@ import net.minecraft.server.level.PlayerChunkMap;
|
||||
import net.minecraft.server.level.WorldServer;
|
||||
import net.minecraft.server.network.ServerPlayerConnection;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntitySpawnReason;
|
||||
import net.minecraft.world.entity.EntityTypes;
|
||||
import net.minecraft.world.entity.boss.EntityComplexPart;
|
||||
import net.minecraft.world.entity.boss.enderdragon.EntityEnderDragon;
|
||||
import net.minecraft.world.entity.player.EntityHuman;
|
||||
import net.minecraft.world.entity.projectile.EntityArrow;
|
||||
import net.minecraft.world.level.portal.DimensionTransition;
|
||||
import net.minecraft.world.level.portal.TeleportTransition;
|
||||
import net.minecraft.world.phys.AxisAlignedBB;
|
||||
import net.minecraft.world.phys.Vec3D;
|
||||
import org.bukkit.EntityEffect;
|
||||
@@ -153,7 +154,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
@Override
|
||||
public boolean isOnGround() {
|
||||
if (entity instanceof EntityArrow) {
|
||||
return ((EntityArrow) entity).inGround;
|
||||
return ((EntityArrow) entity).isInGround();
|
||||
}
|
||||
return entity.onGround();
|
||||
}
|
||||
@@ -204,7 +205,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
if (location.getWorld() != null && !location.getWorld().equals(getWorld())) {
|
||||
// Prevent teleportation to an other world during world generation
|
||||
Preconditions.checkState(!entity.generation, "Cannot teleport entity to an other world during world generation");
|
||||
entity.changeDimension(new DimensionTransition(((CraftWorld) location.getWorld()).getHandle(), CraftLocation.toVec3D(location), Vec3D.ZERO, location.getPitch(), location.getYaw(), DimensionTransition.DO_NOTHING, TeleportCause.PLUGIN));
|
||||
entity.teleport(new TeleportTransition(((CraftWorld) location.getWorld()).getHandle(), CraftLocation.toVec3D(location), Vec3D.ZERO, location.getPitch(), location.getYaw(), Set.of(), TeleportTransition.DO_NOTHING, TeleportCause.PLUGIN));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -703,7 +704,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerable() {
|
||||
return getHandle().isInvulnerableTo(getHandle().damageSources().generic());
|
||||
return getHandle().isInvulnerableToBase(getHandle().damageSources().generic());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -820,7 +821,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
NBTTagCompound compoundTag = new NBTTagCompound();
|
||||
getHandle().saveAsPassenger(compoundTag, false);
|
||||
|
||||
return EntityTypes.loadEntityRecursive(compoundTag, level, java.util.function.Function.identity());
|
||||
return EntityTypes.loadEntityRecursive(compoundTag, level, EntitySpawnReason.LOAD, java.util.function.Function.identity());
|
||||
}
|
||||
|
||||
public void storeBukkitValues(NBTTagCompound c) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.bukkit.craftbukkit.entity;
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.util.function.Function;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.entity.EntitySpawnReason;
|
||||
import net.minecraft.world.entity.EntityTypes;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@@ -49,9 +50,9 @@ public class CraftEntitySnapshot implements EntitySnapshot {
|
||||
|
||||
private net.minecraft.world.entity.Entity createInternal(World world) {
|
||||
net.minecraft.world.level.World nms = ((CraftWorld) world).getHandle();
|
||||
net.minecraft.world.entity.Entity internal = EntityTypes.loadEntityRecursive(data, nms, Function.identity());
|
||||
net.minecraft.world.entity.Entity internal = EntityTypes.loadEntityRecursive(data, nms, EntitySpawnReason.LOAD, Function.identity());
|
||||
if (internal == null) { // Try creating by type
|
||||
internal = CraftEntityType.bukkitToMinecraft(type).create(nms);
|
||||
internal = CraftEntityType.bukkitToMinecraft(type).create(nms, EntitySpawnReason.LOAD);
|
||||
}
|
||||
|
||||
Preconditions.checkArgument(internal != null, "Error creating new entity."); // This should only fail if the stored NBTTagCompound is malformed.
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.util.Locale;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.IRegistry;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.world.entity.EntityTypes;
|
||||
@@ -33,6 +34,19 @@ public class CraftEntityType {
|
||||
.getOptional(CraftNamespacedKey.toMinecraft(bukkit.getKey())).orElseThrow();
|
||||
}
|
||||
|
||||
public static Holder<EntityTypes<?>> bukkitToMinecraftHolder(EntityType bukkit) {
|
||||
Preconditions.checkArgument(bukkit != null);
|
||||
|
||||
IRegistry<EntityTypes<?>> registry = CraftRegistry.getMinecraftRegistry(Registries.ENTITY_TYPE);
|
||||
|
||||
if (registry.wrapAsHolder(bukkitToMinecraft(bukkit)) instanceof Holder.c<EntityTypes<?>> holder) {
|
||||
return holder;
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException("No Reference holder found for " + bukkit
|
||||
+ ", this can happen if a plugin creates its own sound effect with out properly registering it.");
|
||||
}
|
||||
|
||||
public static String bukkitToString(EntityType bukkit) {
|
||||
Preconditions.checkArgument(bukkit != null);
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import net.minecraft.core.BlockPosition;
|
||||
import net.minecraft.core.EnumDirection;
|
||||
import net.minecraft.world.entity.EntityAreaEffectCloud;
|
||||
import net.minecraft.world.entity.EntityExperienceOrb;
|
||||
import net.minecraft.world.entity.EntitySpawnReason;
|
||||
import net.minecraft.world.entity.EntityTypes;
|
||||
import net.minecraft.world.entity.boss.enderdragon.EntityEnderDragon;
|
||||
import net.minecraft.world.entity.decoration.EntityHanging;
|
||||
@@ -28,13 +29,8 @@ import net.minecraft.world.entity.projectile.EntityFireball;
|
||||
import net.minecraft.world.entity.projectile.EntityFireworks;
|
||||
import net.minecraft.world.entity.projectile.EntityPotion;
|
||||
import net.minecraft.world.entity.projectile.EntitySnowball;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartChest;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartCommandBlock;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartFurnace;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartHopper;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartMobSpawner;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartRideable;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartTNT;
|
||||
import net.minecraft.world.entity.vehicle.EntityMinecartAbstract;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.GeneratorAccessSeed;
|
||||
import net.minecraft.world.level.World;
|
||||
@@ -44,11 +40,29 @@ import net.minecraft.world.phys.AxisAlignedBB;
|
||||
import net.minecraft.world.phys.Vec3D;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.block.CraftBlock;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftAcaciaBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftAcaciaChestBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftBambooChestRaft;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftBambooRaft;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftBirchBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftBirchChestBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftCherryBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftCherryChestBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftDarkOakBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftDarkOakChestBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftJungleBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftJungleChestBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftMangroveBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftMangroveChestBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftOakBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftOakChestBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftPaleOakBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftPaleOakChestBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftSpruceBoat;
|
||||
import org.bukkit.craftbukkit.entity.boat.CraftSpruceChestBoat;
|
||||
import org.bukkit.entity.Allay;
|
||||
import org.bukkit.entity.AreaEffectCloud;
|
||||
import org.bukkit.entity.Armadillo;
|
||||
@@ -59,17 +73,17 @@ import org.bukkit.entity.Bat;
|
||||
import org.bukkit.entity.Bee;
|
||||
import org.bukkit.entity.Blaze;
|
||||
import org.bukkit.entity.BlockDisplay;
|
||||
import org.bukkit.entity.Boat;
|
||||
import org.bukkit.entity.Bogged;
|
||||
import org.bukkit.entity.Breeze;
|
||||
import org.bukkit.entity.BreezeWindCharge;
|
||||
import org.bukkit.entity.Camel;
|
||||
import org.bukkit.entity.Cat;
|
||||
import org.bukkit.entity.CaveSpider;
|
||||
import org.bukkit.entity.ChestBoat;
|
||||
import org.bukkit.entity.Chicken;
|
||||
import org.bukkit.entity.Cod;
|
||||
import org.bukkit.entity.Cow;
|
||||
import org.bukkit.entity.Creaking;
|
||||
import org.bukkit.entity.CreakingTransient;
|
||||
import org.bukkit.entity.Creeper;
|
||||
import org.bukkit.entity.Dolphin;
|
||||
import org.bukkit.entity.Donkey;
|
||||
@@ -175,6 +189,26 @@ import org.bukkit.entity.Zoglin;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.entity.ZombieHorse;
|
||||
import org.bukkit.entity.ZombieVillager;
|
||||
import org.bukkit.entity.boat.AcaciaBoat;
|
||||
import org.bukkit.entity.boat.AcaciaChestBoat;
|
||||
import org.bukkit.entity.boat.BambooChestRaft;
|
||||
import org.bukkit.entity.boat.BambooRaft;
|
||||
import org.bukkit.entity.boat.BirchBoat;
|
||||
import org.bukkit.entity.boat.BirchChestBoat;
|
||||
import org.bukkit.entity.boat.CherryBoat;
|
||||
import org.bukkit.entity.boat.CherryChestBoat;
|
||||
import org.bukkit.entity.boat.DarkOakBoat;
|
||||
import org.bukkit.entity.boat.DarkOakChestBoat;
|
||||
import org.bukkit.entity.boat.JungleBoat;
|
||||
import org.bukkit.entity.boat.JungleChestBoat;
|
||||
import org.bukkit.entity.boat.MangroveBoat;
|
||||
import org.bukkit.entity.boat.MangroveChestBoat;
|
||||
import org.bukkit.entity.boat.OakBoat;
|
||||
import org.bukkit.entity.boat.OakChestBoat;
|
||||
import org.bukkit.entity.boat.PaleOakBoat;
|
||||
import org.bukkit.entity.boat.PaleOakChestBoat;
|
||||
import org.bukkit.entity.boat.SpruceBoat;
|
||||
import org.bukkit.entity.boat.SpruceChestBoat;
|
||||
import org.bukkit.entity.minecart.CommandMinecart;
|
||||
import org.bukkit.entity.minecart.ExplosiveMinecart;
|
||||
import org.bukkit.entity.minecart.HopperMinecart;
|
||||
@@ -182,7 +216,6 @@ import org.bukkit.entity.minecart.PoweredMinecart;
|
||||
import org.bukkit.entity.minecart.RideableMinecart;
|
||||
import org.bukkit.entity.minecart.SpawnerMinecart;
|
||||
import org.bukkit.entity.minecart.StorageMinecart;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public final class CraftEntityTypes {
|
||||
@@ -317,6 +350,8 @@ public final class CraftEntityTypes {
|
||||
register(new EntityTypeData<>(EntityType.SNIFFER, Sniffer.class, CraftSniffer::new, createLiving(EntityTypes.SNIFFER)));
|
||||
register(new EntityTypeData<>(EntityType.BREEZE, Breeze.class, CraftBreeze::new, createLiving(EntityTypes.BREEZE)));
|
||||
register(new EntityTypeData<>(EntityType.ARMADILLO, Armadillo.class, CraftArmadillo::new, createLiving(EntityTypes.ARMADILLO)));
|
||||
register(new EntityTypeData<>(EntityType.CREAKING, Creaking.class, CraftCreaking::new, createLiving(EntityTypes.CREAKING)));
|
||||
register(new EntityTypeData<>(EntityType.CREAKING_TRANSIENT, CreakingTransient.class, CraftCreakingTransient::new, createLiving(EntityTypes.CREAKING_TRANSIENT)));
|
||||
|
||||
Function<SpawnData, EntityEnderDragon> dragonFunction = createLiving(EntityTypes.ENDER_DRAGON);
|
||||
register(new EntityTypeData<>(EntityType.ENDER_DRAGON, EnderDragon.class, CraftEnderDragon::new, spawnData -> {
|
||||
@@ -358,10 +393,29 @@ public final class CraftEntityTypes {
|
||||
|
||||
// Move
|
||||
register(new EntityTypeData<>(EntityType.SHULKER_BULLET, ShulkerBullet.class, CraftShulkerBullet::new, createAndMove(EntityTypes.SHULKER_BULLET)));
|
||||
register(new EntityTypeData<>(EntityType.BOAT, Boat.class, CraftBoat::new, createAndMove(EntityTypes.BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.LLAMA_SPIT, LlamaSpit.class, CraftLlamaSpit::new, createAndMove(EntityTypes.LLAMA_SPIT)));
|
||||
register(new EntityTypeData<>(EntityType.CHEST_BOAT, ChestBoat.class, CraftChestBoat::new, createAndMove(EntityTypes.CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.OMINOUS_ITEM_SPAWNER, OminousItemSpawner.class, CraftOminousItemSpawner::new, createAndMove(EntityTypes.OMINOUS_ITEM_SPAWNER)));
|
||||
// Move (boats)
|
||||
register(new EntityTypeData<>(EntityType.ACACIA_BOAT, AcaciaBoat.class, CraftAcaciaBoat::new, createAndMove(EntityTypes.ACACIA_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.ACACIA_CHEST_BOAT, AcaciaChestBoat.class, CraftAcaciaChestBoat::new, createAndMove(EntityTypes.ACACIA_CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.BAMBOO_RAFT, BambooRaft.class, CraftBambooRaft::new, createAndMove(EntityTypes.BAMBOO_RAFT)));
|
||||
register(new EntityTypeData<>(EntityType.BAMBOO_CHEST_RAFT, BambooChestRaft.class, CraftBambooChestRaft::new, createAndMove(EntityTypes.BAMBOO_CHEST_RAFT)));
|
||||
register(new EntityTypeData<>(EntityType.BIRCH_BOAT, BirchBoat.class, CraftBirchBoat::new, createAndMove(EntityTypes.BIRCH_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.BIRCH_CHEST_BOAT, BirchChestBoat.class, CraftBirchChestBoat::new, createAndMove(EntityTypes.BIRCH_CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.CHERRY_BOAT, CherryBoat.class, CraftCherryBoat::new, createAndMove(EntityTypes.CHERRY_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.CHERRY_CHEST_BOAT, CherryChestBoat.class, CraftCherryChestBoat::new, createAndMove(EntityTypes.CHERRY_CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.DARK_OAK_BOAT, DarkOakBoat.class, CraftDarkOakBoat::new, createAndMove(EntityTypes.DARK_OAK_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.DARK_OAK_CHEST_BOAT, DarkOakChestBoat.class, CraftDarkOakChestBoat::new, createAndMove(EntityTypes.DARK_OAK_CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.JUNGLE_BOAT, JungleBoat.class, CraftJungleBoat::new, createAndMove(EntityTypes.JUNGLE_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.JUNGLE_CHEST_BOAT, JungleChestBoat.class, CraftJungleChestBoat::new, createAndMove(EntityTypes.JUNGLE_CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.MANGROVE_BOAT, MangroveBoat.class, CraftMangroveBoat::new, createAndMove(EntityTypes.MANGROVE_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.MANGROVE_CHEST_BOAT, MangroveChestBoat.class, CraftMangroveChestBoat::new, createAndMove(EntityTypes.MANGROVE_CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.OAK_BOAT, OakBoat.class, CraftOakBoat::new, createAndMove(EntityTypes.OAK_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.OAK_CHEST_BOAT, OakChestBoat.class, CraftOakChestBoat::new, createAndMove(EntityTypes.OAK_CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.PALE_OAK_BOAT, PaleOakBoat.class, CraftPaleOakBoat::new, createAndMove(EntityTypes.PALE_OAK_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.PALE_OAK_CHEST_BOAT, PaleOakChestBoat.class, CraftPaleOakChestBoat::new, createAndMove(EntityTypes.PALE_OAK_CHEST_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.SPRUCE_BOAT, SpruceBoat.class, CraftSpruceBoat::new, createAndMove(EntityTypes.SPRUCE_BOAT)));
|
||||
register(new EntityTypeData<>(EntityType.SPRUCE_CHEST_BOAT, SpruceChestBoat.class, CraftSpruceChestBoat::new, createAndMove(EntityTypes.SPRUCE_CHEST_BOAT)));
|
||||
|
||||
// Set pos
|
||||
register(new EntityTypeData<>(EntityType.MARKER, Marker.class, CraftMarker::new, createAndSetPos(EntityTypes.MARKER)));
|
||||
@@ -384,13 +438,12 @@ public final class CraftEntityTypes {
|
||||
spawnData -> new EntityExperienceOrb(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), 0)
|
||||
));
|
||||
register(new EntityTypeData<>(EntityType.AREA_EFFECT_CLOUD, AreaEffectCloud.class, CraftAreaEffectCloud::new, spawnData -> new EntityAreaEffectCloud(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.EGG, Egg.class, CraftEgg::new, spawnData -> new EntityEgg(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.EGG, Egg.class, CraftEgg::new, spawnData -> new EntityEgg(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), new net.minecraft.world.item.ItemStack(Items.EGG))));
|
||||
register(new EntityTypeData<>(EntityType.LEASH_KNOT, LeashHitch.class, CraftLeash::new, spawnData -> new EntityLeash(spawnData.minecraftWorld(), BlockPosition.containing(spawnData.x(), spawnData.y(), spawnData.z())))); // SPIGOT-5732: LeashHitch has no direction and is always centered at a block
|
||||
register(new EntityTypeData<>(EntityType.SNOWBALL, Snowball.class, CraftSnowball::new, spawnData -> new EntitySnowball(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.SNOWBALL, Snowball.class, CraftSnowball::new, spawnData -> new EntitySnowball(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), new net.minecraft.world.item.ItemStack(Items.SNOWBALL))));
|
||||
register(new EntityTypeData<>(EntityType.EYE_OF_ENDER, EnderSignal.class, CraftEnderSignal::new, spawnData -> new EntityEnderSignal(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.POTION, ThrownPotion.class, CraftThrownPotion::new, spawnData -> {
|
||||
EntityPotion entity = new EntityPotion(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z());
|
||||
entity.setItem(CraftItemStack.asNMSCopy(new ItemStack(Material.SPLASH_POTION, 1)));
|
||||
EntityPotion entity = new EntityPotion(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), new net.minecraft.world.item.ItemStack(Items.SPLASH_POTION));
|
||||
return entity;
|
||||
}));
|
||||
register(new EntityTypeData<>(EntityType.TNT, TNTPrimed.class, CraftTNTPrimed::new, spawnData -> new EntityTNTPrimed(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), null)));
|
||||
@@ -400,13 +453,13 @@ public final class CraftEntityTypes {
|
||||
}));
|
||||
register(new EntityTypeData<>(EntityType.FIREWORK_ROCKET, Firework.class, CraftFirework::new, spawnData -> new EntityFireworks(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), net.minecraft.world.item.ItemStack.EMPTY)));
|
||||
register(new EntityTypeData<>(EntityType.EVOKER_FANGS, EvokerFangs.class, CraftEvokerFangs::new, spawnData -> new EntityEvokerFangs(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), (float) Math.toRadians(spawnData.yaw()), 0, null)));
|
||||
register(new EntityTypeData<>(EntityType.COMMAND_BLOCK_MINECART, CommandMinecart.class, CraftMinecartCommand::new, spawnData -> new EntityMinecartCommandBlock(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.MINECART, RideableMinecart.class, CraftMinecartRideable::new, spawnData -> new EntityMinecartRideable(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.CHEST_MINECART, StorageMinecart.class, CraftMinecartChest::new, spawnData -> new EntityMinecartChest(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.FURNACE_MINECART, PoweredMinecart.class, CraftMinecartFurnace::new, spawnData -> new EntityMinecartFurnace(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.TNT_MINECART, ExplosiveMinecart.class, CraftMinecartTNT::new, spawnData -> new EntityMinecartTNT(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.HOPPER_MINECART, HopperMinecart.class, CraftMinecartHopper::new, spawnData -> new EntityMinecartHopper(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.SPAWNER_MINECART, SpawnerMinecart.class, CraftMinecartMobSpawner::new, spawnData -> new EntityMinecartMobSpawner(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z())));
|
||||
register(new EntityTypeData<>(EntityType.COMMAND_BLOCK_MINECART, CommandMinecart.class, CraftMinecartCommand::new, createMinecart(EntityTypes.COMMAND_BLOCK_MINECART)));
|
||||
register(new EntityTypeData<>(EntityType.MINECART, RideableMinecart.class, CraftMinecartRideable::new, createMinecart(EntityTypes.MINECART)));
|
||||
register(new EntityTypeData<>(EntityType.CHEST_MINECART, StorageMinecart.class, CraftMinecartChest::new, createMinecart(EntityTypes.CHEST_MINECART)));
|
||||
register(new EntityTypeData<>(EntityType.FURNACE_MINECART, PoweredMinecart.class, CraftMinecartFurnace::new, createMinecart(EntityTypes.FURNACE_MINECART)));
|
||||
register(new EntityTypeData<>(EntityType.TNT_MINECART, ExplosiveMinecart.class, CraftMinecartTNT::new, createMinecart(EntityTypes.TNT_MINECART)));
|
||||
register(new EntityTypeData<>(EntityType.HOPPER_MINECART, HopperMinecart.class, CraftMinecartHopper::new, createMinecart(EntityTypes.HOPPER_MINECART)));
|
||||
register(new EntityTypeData<>(EntityType.SPAWNER_MINECART, SpawnerMinecart.class, CraftMinecartMobSpawner::new, createMinecart(EntityTypes.SPAWNER_MINECART)));
|
||||
|
||||
// None spawn able
|
||||
register(new EntityTypeData<>(EntityType.FISHING_BOBBER, FishHook.class, CraftFishHook::new, null)); // Cannot spawn a fish hook
|
||||
@@ -426,7 +479,7 @@ public final class CraftEntityTypes {
|
||||
}
|
||||
|
||||
private static <R extends net.minecraft.world.entity.Entity> Function<SpawnData, R> fromEntityType(EntityTypes<R> entityTypes) {
|
||||
return spawnData -> entityTypes.create(spawnData.minecraftWorld());
|
||||
return spawnData -> entityTypes.create(spawnData.minecraftWorld(), EntitySpawnReason.COMMAND);
|
||||
}
|
||||
|
||||
private static <R extends net.minecraft.world.entity.EntityLiving> Function<SpawnData, R> createLiving(EntityTypes<R> entityTypes) {
|
||||
@@ -437,6 +490,10 @@ public final class CraftEntityTypes {
|
||||
return combine(createAndMove(entityTypes), DIRECTION);
|
||||
}
|
||||
|
||||
private static <R extends EntityMinecartAbstract> Function<SpawnData, R> createMinecart(EntityTypes<R> entityTypes) {
|
||||
return spawnData -> EntityMinecartAbstract.createMinecart(spawnData.minecraftWorld(), spawnData.x(), spawnData.y(), spawnData.z(), entityTypes, EntitySpawnReason.TRIGGERED, ItemStack.EMPTY, null);
|
||||
}
|
||||
|
||||
private static <R extends net.minecraft.world.entity.Entity> Function<SpawnData, R> createAndMove(EntityTypes<R> entityTypes) {
|
||||
return combine(fromEntityType(entityTypes), MOVE);
|
||||
}
|
||||
|
||||
@@ -12,9 +12,11 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.chat.IChatBaseComponent;
|
||||
import net.minecraft.network.protocol.game.PacketPlayInCloseWindow;
|
||||
import net.minecraft.network.protocol.game.PacketPlayOutOpenWindow;
|
||||
import net.minecraft.resources.MinecraftKey;
|
||||
import net.minecraft.server.level.EntityPlayer;
|
||||
import net.minecraft.world.ITileInventory;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntitySpawnReason;
|
||||
import net.minecraft.world.entity.EntityTypes;
|
||||
import net.minecraft.world.entity.EnumMainHand;
|
||||
import net.minecraft.world.entity.player.EntityHuman;
|
||||
@@ -45,11 +47,10 @@ import org.bukkit.craftbukkit.inventory.CraftInventoryLectern;
|
||||
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
|
||||
import org.bukkit.craftbukkit.inventory.CraftInventoryView;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemType;
|
||||
import org.bukkit.craftbukkit.inventory.CraftMerchantCustom;
|
||||
import org.bukkit.craftbukkit.inventory.CraftRecipe;
|
||||
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||
import org.bukkit.craftbukkit.util.CraftLocation;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
import org.bukkit.entity.Firework;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Villager;
|
||||
@@ -493,7 +494,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||
Preconditions.checkArgument(material != null, "Material cannot be null");
|
||||
Preconditions.checkArgument(material.isItem(), "Material %s is not an item", material);
|
||||
|
||||
return getHandle().getCooldowns().isOnCooldown(CraftItemType.bukkitToMinecraft(material));
|
||||
return hasCooldown(new ItemStack(material));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -501,17 +502,40 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||
Preconditions.checkArgument(material != null, "Material cannot be null");
|
||||
Preconditions.checkArgument(material.isItem(), "Material %s is not an item", material);
|
||||
|
||||
ItemCooldown.Info cooldown = getHandle().getCooldowns().cooldowns.get(CraftItemType.bukkitToMinecraft(material));
|
||||
return (cooldown == null) ? 0 : Math.max(0, cooldown.endTime - getHandle().getCooldowns().tickCount);
|
||||
return getCooldown(new ItemStack(material));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCooldown(Material material, int ticks) {
|
||||
Preconditions.checkArgument(material != null, "Material cannot be null");
|
||||
Preconditions.checkArgument(material.isItem(), "Material %s is not an item", material);
|
||||
setCooldown(new ItemStack(material), ticks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCooldown(ItemStack item) {
|
||||
Preconditions.checkArgument(item != null, "Material cannot be null");
|
||||
|
||||
return getHandle().getCooldowns().isOnCooldown(CraftItemStack.asNMSCopy(item));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCooldown(ItemStack item) {
|
||||
Preconditions.checkArgument(item != null, "Material cannot be null");
|
||||
|
||||
MinecraftKey group = getHandle().getCooldowns().getCooldownGroup(CraftItemStack.asNMSCopy(item));
|
||||
if (group == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ItemCooldown.Info cooldown = getHandle().getCooldowns().cooldowns.get(group);
|
||||
return (cooldown == null) ? 0 : Math.max(0, cooldown.endTime - getHandle().getCooldowns().tickCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCooldown(ItemStack item, int ticks) {
|
||||
Preconditions.checkArgument(item != null, "Material cannot be null");
|
||||
Preconditions.checkArgument(ticks >= 0, "Cannot have negative cooldown");
|
||||
|
||||
getHandle().getCooldowns().addCooldown(CraftItemType.bukkitToMinecraft(material), ticks);
|
||||
getHandle().getCooldowns().addCooldown(CraftItemStack.asNMSCopy(item), ticks);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -549,7 +573,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||
CraftingManager manager = getHandle().level().getServer().getRecipeManager();
|
||||
|
||||
for (NamespacedKey recipeKey : recipeKeys) {
|
||||
Optional<? extends RecipeHolder<?>> recipe = manager.byKey(CraftNamespacedKey.toMinecraft(recipeKey));
|
||||
Optional<? extends RecipeHolder<?>> recipe = manager.byKey(CraftRecipe.toMinecraft(recipeKey));
|
||||
if (!recipe.isPresent()) {
|
||||
continue;
|
||||
}
|
||||
@@ -563,7 +587,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||
@Override
|
||||
public org.bukkit.entity.Entity getShoulderEntityLeft() {
|
||||
if (!getHandle().getShoulderEntityLeft().isEmpty()) {
|
||||
Optional<Entity> shoulder = EntityTypes.create(getHandle().getShoulderEntityLeft(), getHandle().level());
|
||||
Optional<Entity> shoulder = EntityTypes.create(getHandle().getShoulderEntityLeft(), getHandle().level(), EntitySpawnReason.LOAD);
|
||||
|
||||
return (!shoulder.isPresent()) ? null : shoulder.get().getBukkitEntity();
|
||||
}
|
||||
@@ -582,7 +606,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||
@Override
|
||||
public org.bukkit.entity.Entity getShoulderEntityRight() {
|
||||
if (!getHandle().getShoulderEntityRight().isEmpty()) {
|
||||
Optional<Entity> shoulder = EntityTypes.create(getHandle().getShoulderEntityRight(), getHandle().level());
|
||||
Optional<Entity> shoulder = EntityTypes.create(getHandle().getShoulderEntityRight(), getHandle().level(), EntitySpawnReason.LOAD);
|
||||
|
||||
return (!shoulder.isPresent()) ? null : shoulder.get().getBukkitEntity();
|
||||
}
|
||||
|
||||
@@ -8,14 +8,17 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.network.protocol.game.ClientboundHurtAnimationPacket;
|
||||
import net.minecraft.server.level.WorldServer;
|
||||
import net.minecraft.sounds.SoundEffect;
|
||||
import net.minecraft.sounds.SoundEffects;
|
||||
import net.minecraft.world.EnumHand;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.effect.MobEffect;
|
||||
import net.minecraft.world.entity.EntityInsentient;
|
||||
import net.minecraft.world.entity.EntityLiving;
|
||||
import net.minecraft.world.entity.EntitySpawnReason;
|
||||
import net.minecraft.world.entity.EntityTypes;
|
||||
import net.minecraft.world.entity.ai.attributes.GenericAttributes;
|
||||
import net.minecraft.world.entity.boss.wither.EntityWither;
|
||||
@@ -40,6 +43,8 @@ import net.minecraft.world.entity.projectile.EntityThrownExpBottle;
|
||||
import net.minecraft.world.entity.projectile.EntityThrownTrident;
|
||||
import net.minecraft.world.entity.projectile.EntityTippedArrow;
|
||||
import net.minecraft.world.entity.projectile.EntityWitherSkull;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.component.Consumable;
|
||||
import net.minecraft.world.phys.Vec3D;
|
||||
import org.bukkit.FluidCollisionMode;
|
||||
import org.bukkit.Location;
|
||||
@@ -296,6 +301,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
getHandle().getEntityData().set(EntityLiving.DATA_ARROW_COUNT_ID, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvulnerable() {
|
||||
return getHandle().isInvulnerableTo((WorldServer) getHandle().level(), getHandle().damageSources().generic());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void damage(double amount) {
|
||||
damage(amount, getHandle().damageSources().generic());
|
||||
@@ -454,13 +464,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
net.minecraft.world.entity.Entity launch = null;
|
||||
|
||||
if (Snowball.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntitySnowball(world, getHandle());
|
||||
launch = new EntitySnowball(world, getHandle(), new net.minecraft.world.item.ItemStack(Items.SNOWBALL));
|
||||
((EntityProjectile) launch).shootFromRotation(getHandle(), getHandle().getXRot(), getHandle().getYRot(), 0.0F, 1.5F, 1.0F); // ItemSnowball
|
||||
} else if (Egg.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntityEgg(world, getHandle());
|
||||
launch = new EntityEgg(world, getHandle(), new net.minecraft.world.item.ItemStack(Items.EGG));
|
||||
((EntityProjectile) launch).shootFromRotation(getHandle(), getHandle().getXRot(), getHandle().getYRot(), 0.0F, 1.5F, 1.0F); // ItemEgg
|
||||
} else if (EnderPearl.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntityEnderPearl(world, getHandle());
|
||||
launch = new EntityEnderPearl(world, getHandle(), new net.minecraft.world.item.ItemStack(Items.ENDER_PEARL));
|
||||
((EntityProjectile) launch).shootFromRotation(getHandle(), getHandle().getXRot(), getHandle().getYRot(), 0.0F, 1.5F, 1.0F); // ItemEnderPearl
|
||||
} else if (AbstractArrow.class.isAssignableFrom(projectile)) {
|
||||
if (TippedArrow.class.isAssignableFrom(projectile)) {
|
||||
@@ -476,18 +486,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
((EntityArrow) launch).shootFromRotation(getHandle(), getHandle().getXRot(), getHandle().getYRot(), 0.0F, 3.0F, 1.0F); // ItemBow
|
||||
} else if (ThrownPotion.class.isAssignableFrom(projectile)) {
|
||||
if (LingeringPotion.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntityPotion(world, getHandle());
|
||||
((EntityPotion) launch).setItem(CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.LINGERING_POTION, 1)));
|
||||
launch = new EntityPotion(world, getHandle(), new net.minecraft.world.item.ItemStack(Items.LINGERING_POTION));
|
||||
} else {
|
||||
launch = new EntityPotion(world, getHandle());
|
||||
((EntityPotion) launch).setItem(CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.SPLASH_POTION, 1)));
|
||||
launch = new EntityPotion(world, getHandle(), new net.minecraft.world.item.ItemStack(Items.SPLASH_POTION));
|
||||
}
|
||||
((EntityProjectile) launch).shootFromRotation(getHandle(), getHandle().getXRot(), getHandle().getYRot(), -20.0F, 0.5F, 1.0F); // ItemSplashPotion
|
||||
} else if (ThrownExpBottle.class.isAssignableFrom(projectile)) {
|
||||
launch = new EntityThrownExpBottle(world, getHandle());
|
||||
launch = new EntityThrownExpBottle(world, getHandle(), new net.minecraft.world.item.ItemStack(Items.EXPERIENCE_BOTTLE));
|
||||
((EntityProjectile) launch).shootFromRotation(getHandle(), getHandle().getXRot(), getHandle().getYRot(), -20.0F, 0.7F, 1.0F); // ItemExpBottle
|
||||
} else if (FishHook.class.isAssignableFrom(projectile) && getHandle() instanceof EntityHuman) {
|
||||
launch = new EntityFishingHook((EntityHuman) getHandle(), world, 0, 0);
|
||||
launch = new EntityFishingHook((EntityHuman) getHandle(), world, 0, 0, new net.minecraft.world.item.ItemStack(Items.FISHING_ROD));
|
||||
} else if (Fireball.class.isAssignableFrom(projectile)) {
|
||||
Location location = getEyeLocation();
|
||||
Vector direction = location.getDirection().multiply(10);
|
||||
@@ -501,9 +509,9 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
launch = new EntityDragonFireball(world, getHandle(), vec);
|
||||
} else if (AbstractWindCharge.class.isAssignableFrom(projectile)) {
|
||||
if (BreezeWindCharge.class.isAssignableFrom(projectile)) {
|
||||
launch = EntityTypes.BREEZE_WIND_CHARGE.create(world);
|
||||
launch = EntityTypes.BREEZE_WIND_CHARGE.create(world, EntitySpawnReason.TRIGGERED);
|
||||
} else {
|
||||
launch = EntityTypes.WIND_CHARGE.create(world);
|
||||
launch = EntityTypes.WIND_CHARGE.create(world, EntitySpawnReason.TRIGGERED);
|
||||
}
|
||||
|
||||
((net.minecraft.world.entity.projectile.windcharge.AbstractWindCharge) launch).setOwner(getHandle());
|
||||
@@ -518,7 +526,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
Location location = getEyeLocation();
|
||||
Vector direction = location.getDirection();
|
||||
|
||||
launch = EntityTypes.LLAMA_SPIT.create(world);
|
||||
launch = EntityTypes.LLAMA_SPIT.create(world, EntitySpawnReason.TRIGGERED);
|
||||
|
||||
((EntityLlamaSpit) launch).setOwner(getHandle());
|
||||
((EntityLlamaSpit) launch).shoot(direction.getX(), direction.getY(), direction.getZ(), 1.5F, 10.0F); // EntityLlama
|
||||
@@ -704,7 +712,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
if (getHandle() instanceof EntityHuman) {
|
||||
((EntityHuman) getHandle()).attack(((CraftEntity) target).getHandle());
|
||||
} else {
|
||||
getHandle().doHurtTarget(((CraftEntity) target).getHandle());
|
||||
getHandle().doHurtTarget((WorldServer) ((CraftEntity) target).getHandle().level(), ((CraftEntity) target).getHandle());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -790,14 +798,26 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
|
||||
@Override
|
||||
public Sound getDrinkingSound(ItemStack itemStack) {
|
||||
Preconditions.checkArgument(itemStack != null, "itemStack must not be null");
|
||||
return CraftSound.minecraftToBukkit(getHandle().getDrinkingSound0(CraftItemStack.asNMSCopy(itemStack)));
|
||||
return getEatingSound(itemStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sound getEatingSound(ItemStack itemStack) {
|
||||
Preconditions.checkArgument(itemStack != null, "itemStack must not be null");
|
||||
return CraftSound.minecraftToBukkit(getHandle().getEatingSound0(CraftItemStack.asNMSCopy(itemStack)));
|
||||
|
||||
net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(itemStack);
|
||||
Consumable consumable = nms.get(DataComponents.CONSUMABLE);
|
||||
SoundEffect soundeffect = SoundEffects.GENERIC_DRINK.value();
|
||||
|
||||
if (consumable != null) {
|
||||
if (getHandle() instanceof Consumable.b consumable_b) {
|
||||
soundeffect = consumable_b.getConsumeSound(nms);
|
||||
} else {
|
||||
soundeffect = (SoundEffect) consumable.sound().value();
|
||||
}
|
||||
}
|
||||
|
||||
return CraftSound.minecraftToBukkit(soundeffect);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,26 @@ public final class CraftMinecartTNT extends CraftMinecart implements ExplosiveMi
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getYield() {
|
||||
return getHandle().explosionPowerBase;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIncendiary() {
|
||||
return getHandle().isIncendiary;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIsIncendiary(boolean isIncendiary) {
|
||||
getHandle().isIncendiary = isIncendiary;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setYield(float yield) {
|
||||
getHandle().explosionPowerBase = yield;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFuseTicks(int ticks) {
|
||||
getHandle().fuse = ticks;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.util.Optional;
|
||||
import net.minecraft.sounds.SoundEffect;
|
||||
import net.minecraft.world.entity.EntityInsentient;
|
||||
import org.bukkit.Sound;
|
||||
@@ -63,12 +64,12 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob {
|
||||
|
||||
@Override
|
||||
public void setLootTable(LootTable table) {
|
||||
getHandle().lootTable = CraftLootTable.bukkitToMinecraft(table);
|
||||
getHandle().lootTable = Optional.ofNullable(CraftLootTable.bukkitToMinecraft(table));
|
||||
}
|
||||
|
||||
@Override
|
||||
public LootTable getLootTable() {
|
||||
return CraftLootTable.minecraftToBukkit(getHandle().getLootTable());
|
||||
return CraftLootTable.minecraftToBukkit(getHandle().getLootTable().orElse(null));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -160,6 +160,7 @@ import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
||||
import org.bukkit.craftbukkit.conversations.ConversationTracker;
|
||||
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
import org.bukkit.craftbukkit.inventory.CraftRecipe;
|
||||
import org.bukkit.craftbukkit.map.CraftMapCursor;
|
||||
import org.bukkit.craftbukkit.map.CraftMapView;
|
||||
import org.bukkit.craftbukkit.map.RenderData;
|
||||
@@ -418,6 +419,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPlayerListOrder() {
|
||||
return getHandle().listOrder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlayerListOrder(int order) {
|
||||
Preconditions.checkArgument(order >= 0, "order cannot be negative");
|
||||
|
||||
getHandle().listOrder = order;
|
||||
}
|
||||
|
||||
private IChatBaseComponent playerListHeader;
|
||||
private IChatBaseComponent playerListFooter;
|
||||
|
||||
@@ -961,7 +974,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
}
|
||||
}
|
||||
|
||||
PacketPlayOutMap packet = new PacketPlayOutMap(new MapId(map.getId()), map.getScale().getValue(), map.isLocked(), icons, new WorldMap.b(0, 0, 128, 128, data.buffer));
|
||||
PacketPlayOutMap packet = new PacketPlayOutMap(new MapId(map.getId()), map.getScale().getValue(), map.isLocked(), icons, new WorldMap.c(0, 0, 128, 128, data.buffer));
|
||||
getHandle().connection.send(packet);
|
||||
}
|
||||
|
||||
@@ -1184,13 +1197,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@Override
|
||||
public boolean hasDiscoveredRecipe(NamespacedKey recipe) {
|
||||
Preconditions.checkArgument(recipe != null, "recipe cannot be null");
|
||||
return getHandle().getRecipeBook().contains(CraftNamespacedKey.toMinecraft(recipe));
|
||||
return getHandle().getRecipeBook().contains(CraftRecipe.toMinecraft(recipe));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NamespacedKey> getDiscoveredRecipes() {
|
||||
ImmutableSet.Builder<NamespacedKey> bukkitRecipeKeys = ImmutableSet.builder();
|
||||
getHandle().getRecipeBook().known.forEach(key -> bukkitRecipeKeys.add(CraftNamespacedKey.fromMinecraft(key)));
|
||||
getHandle().getRecipeBook().known.forEach(key -> bukkitRecipeKeys.add(CraftNamespacedKey.fromMinecraft(key.location())));
|
||||
return bukkitRecipeKeys.build();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import net.minecraft.world.entity.animal.EntitySalmon;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.Salmon;
|
||||
@@ -19,4 +20,16 @@ public class CraftSalmon extends CraftFish implements Salmon {
|
||||
public String toString() {
|
||||
return "CraftSalmon";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Variant getVariant() {
|
||||
return Variant.values()[getHandle().getVariant().ordinal()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVariant(Variant variant) {
|
||||
Preconditions.checkArgument(variant != null, "variant");
|
||||
|
||||
getHandle().setVariant(EntitySalmon.a.values()[variant.ordinal()]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import net.minecraft.world.entity.animal.EntitySquid;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.Squid;
|
||||
|
||||
public class CraftSquid extends CraftWaterMob implements Squid {
|
||||
public class CraftSquid extends CraftAgeable implements Squid {
|
||||
|
||||
public CraftSquid(CraftServer server, EntitySquid entity) {
|
||||
super(server, entity);
|
||||
|
||||
@@ -15,7 +15,7 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed {
|
||||
|
||||
@Override
|
||||
public float getYield() {
|
||||
return getHandle().yield;
|
||||
return getHandle().explosionPower;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -30,7 +30,7 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed {
|
||||
|
||||
@Override
|
||||
public void setYield(float yield) {
|
||||
getHandle().yield = yield;
|
||||
getHandle().explosionPower = yield;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.bukkit.craftbukkit.util.Handleable;
|
||||
import org.bukkit.entity.Villager;
|
||||
import org.bukkit.entity.ZombieVillager;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.EntityTransformEvent;
|
||||
|
||||
public class CraftVillager extends CraftAbstractVillager implements Villager {
|
||||
|
||||
@@ -123,7 +124,7 @@ public class CraftVillager extends CraftAbstractVillager implements Villager {
|
||||
|
||||
@Override
|
||||
public ZombieVillager zombify() {
|
||||
EntityZombieVillager entityzombievillager = EntityZombie.zombifyVillager(getHandle().level().getMinecraftWorld(), getHandle(), getHandle().blockPosition(), isSilent(), CreatureSpawnEvent.SpawnReason.CUSTOM);
|
||||
EntityZombieVillager entityzombievillager = EntityZombie.convertVillagerToZombieVillager(getHandle().level().getMinecraftWorld(), getHandle(), getHandle().blockPosition(), isSilent(), EntityTransformEvent.TransformReason.INFECTION, CreatureSpawnEvent.SpawnReason.CUSTOM);
|
||||
return (entityzombievillager != null) ? (ZombieVillager) entityzombievillager.getBukkitEntity() : null;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf {
|
||||
|
||||
@Override
|
||||
public boolean isWet() {
|
||||
return getHandle().isWet();
|
||||
return getHandle().isWet;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.AcaciaBoat;
|
||||
|
||||
public class CraftAcaciaBoat extends CraftBoat implements AcaciaBoat {
|
||||
|
||||
public CraftAcaciaBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.AcaciaChestBoat;
|
||||
|
||||
public class CraftAcaciaChestBoat extends CraftChestBoat implements AcaciaChestBoat {
|
||||
|
||||
public CraftAcaciaChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.BambooChestRaft;
|
||||
|
||||
public class CraftBambooChestRaft extends CraftChestBoat implements BambooChestRaft {
|
||||
|
||||
public CraftBambooChestRaft(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.BambooRaft;
|
||||
|
||||
public class CraftBambooRaft extends CraftBoat implements BambooRaft {
|
||||
|
||||
public CraftBambooRaft(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.BirchBoat;
|
||||
|
||||
public class CraftBirchBoat extends CraftBoat implements BirchBoat {
|
||||
|
||||
public CraftBirchBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.BirchChestBoat;
|
||||
|
||||
public class CraftBirchChestBoat extends CraftChestBoat implements BirchChestBoat {
|
||||
|
||||
public CraftBirchChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.CherryBoat;
|
||||
|
||||
public class CraftCherryBoat extends CraftBoat implements CherryBoat {
|
||||
|
||||
public CraftCherryBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.CherryChestBoat;
|
||||
|
||||
public class CraftCherryChestBoat extends CraftChestBoat implements CherryChestBoat {
|
||||
|
||||
public CraftCherryChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.DarkOakBoat;
|
||||
|
||||
public class CraftDarkOakBoat extends CraftBoat implements DarkOakBoat {
|
||||
|
||||
public CraftDarkOakBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.DarkOakChestBoat;
|
||||
|
||||
public class CraftDarkOakChestBoat extends CraftChestBoat implements DarkOakChestBoat {
|
||||
|
||||
public CraftDarkOakChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.JungleBoat;
|
||||
|
||||
public class CraftJungleBoat extends CraftBoat implements JungleBoat {
|
||||
|
||||
public CraftJungleBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.JungleChestBoat;
|
||||
|
||||
public class CraftJungleChestBoat extends CraftChestBoat implements JungleChestBoat {
|
||||
|
||||
public CraftJungleChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.MangroveBoat;
|
||||
|
||||
public class CraftMangroveBoat extends CraftBoat implements MangroveBoat {
|
||||
|
||||
public CraftMangroveBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.MangroveChestBoat;
|
||||
|
||||
public class CraftMangroveChestBoat extends CraftChestBoat implements MangroveChestBoat {
|
||||
|
||||
public CraftMangroveChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.OakBoat;
|
||||
|
||||
public class CraftOakBoat extends CraftBoat implements OakBoat {
|
||||
|
||||
public CraftOakBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.OakChestBoat;
|
||||
|
||||
public class CraftOakChestBoat extends CraftChestBoat implements OakChestBoat {
|
||||
|
||||
public CraftOakChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.PaleOakBoat;
|
||||
|
||||
public class CraftPaleOakBoat extends CraftBoat implements PaleOakBoat {
|
||||
|
||||
public CraftPaleOakBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.PaleOakChestBoat;
|
||||
|
||||
public class CraftPaleOakChestBoat extends CraftChestBoat implements PaleOakChestBoat {
|
||||
|
||||
public CraftPaleOakChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftBoat;
|
||||
import org.bukkit.entity.boat.SpruceBoat;
|
||||
|
||||
public class CraftSpruceBoat extends CraftBoat implements SpruceBoat {
|
||||
|
||||
public CraftSpruceBoat(CraftServer server, AbstractBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.bukkit.craftbukkit.entity.boat;
|
||||
|
||||
import net.minecraft.world.entity.vehicle.AbstractChestBoat;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.entity.CraftChestBoat;
|
||||
import org.bukkit.entity.boat.SpruceChestBoat;
|
||||
|
||||
public class CraftSpruceChestBoat extends CraftChestBoat implements SpruceChestBoat {
|
||||
|
||||
public CraftSpruceChestBoat(CraftServer server, AbstractChestBoat entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user