Update to Minecraft 1.14-pre5

By: md_5 <git@md-5.net>
This commit is contained in:
CraftBukkit/Spigot
2019-04-23 12:00:00 +10:00
parent 0e98365784
commit a0f2b74c8d
560 changed files with 10642 additions and 10867 deletions

View File

@@ -0,0 +1,76 @@
package org.bukkit.craftbukkit.entity;
import java.util.List;
import net.minecraft.server.EntityVillager;
import net.minecraft.server.EntityVillagerAbstract;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.craftbukkit.inventory.CraftMerchant;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.MerchantRecipe;
import org.bukkit.entity.AbstractVillager;
public class CraftAbstractVillager extends CraftAgeable implements AbstractVillager, InventoryHolder {
private CraftMerchant merchant;
public CraftAbstractVillager(CraftServer server, EntityVillagerAbstract entity) {
super(server, entity);
}
@Override
public EntityVillagerAbstract getHandle() {
return (EntityVillager) entity;
}
@Override
public String toString() {
return "CraftAbstractVillager";
}
@Override
public Inventory getInventory() {
return new CraftInventory(getHandle().getInventory());
}
private CraftMerchant getMerchant() {
return (merchant == null) ? merchant = new CraftMerchant(getHandle()) : merchant;
}
@Override
public List<MerchantRecipe> getRecipes() {
return getMerchant().getRecipes();
}
@Override
public void setRecipes(List<MerchantRecipe> recipes) {
this.getMerchant().setRecipes(recipes);
}
@Override
public MerchantRecipe getRecipe(int i) {
return getMerchant().getRecipe(i);
}
@Override
public void setRecipe(int i, MerchantRecipe merchantRecipe) {
getMerchant().setRecipe(i, merchantRecipe);
}
@Override
public int getRecipeCount() {
return getMerchant().getRecipeCount();
}
@Override
public boolean isTrading() {
return getTrader() != null;
}
@Override
public HumanEntity getTrader() {
return getMerchant().getTrader();
}
}

View File

@@ -40,11 +40,11 @@ public class CraftAnimals extends CraftAgeable implements Animals {
@Override
public void setLoveModeTicks(int ticks) {
Preconditions.checkArgument(ticks >= 0, "Love mode ticks must be positive or 0");
getHandle().d(ticks); // PAIL rename setLoveModeTicks
getHandle().setLoveTicks(ticks);
}
@Override
public int getLoveModeTicks() {
return getHandle().bC; // PAIL rename loveTicks
return getHandle().loveTicks;
}
}

View File

@@ -1,6 +1,7 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.base.Preconditions;
import net.minecraft.server.BlockPosition;
import net.minecraft.server.EntityArrow;
import org.apache.commons.lang.Validate;
@@ -69,8 +70,8 @@ public class CraftArrow extends AbstractProjectile implements Arrow {
return null;
}
EntityArrow handle = getHandle();
return getWorld().getBlockAt(handle.tileX, handle.tileY, handle.tileZ);
BlockPosition pos = getHandle().getChunkCoordinates();
return getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ());
}
@Override
@@ -103,6 +104,6 @@ public class CraftArrow extends AbstractProjectile implements Arrow {
}
public EntityType getType() {
return EntityType.ARROW;
return EntityType.UNKNOWN;
}
}

View File

@@ -0,0 +1,41 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.base.Preconditions;
import net.minecraft.server.EntityCat;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Cat;
import org.bukkit.entity.EntityType;
public class CraftCat extends CraftTameableAnimal implements Cat {
public CraftCat(CraftServer server, EntityCat entity) {
super(server, entity);
}
@Override
public EntityCat getHandle() {
return (EntityCat) super.getHandle();
}
@Override
public EntityType getType() {
return EntityType.CAT;
}
@Override
public String toString() {
return "CraftCat";
}
@Override
public Type getCatType() {
return Type.values()[getHandle().getCatType()];
}
@Override
public void setCatType(Type type) {
Preconditions.checkArgument(type != null, "Cannot have null Type");
getHandle().setCatType(type.ordinal());
}
}

View File

@@ -43,6 +43,6 @@ public class CraftComplexPart extends CraftEntity implements ComplexEntityPart {
}
public EntityType getType() {
return EntityType.COMPLEX_PART;
return EntityType.UNKNOWN;
}
}

View File

@@ -19,6 +19,7 @@ import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.craftbukkit.util.CraftChatMessage;
import org.bukkit.craftbukkit.util.CraftVector;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.metadata.MetadataValue;
@@ -78,7 +79,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else if (entity instanceof EntityPig) { return new CraftPig(server, (EntityPig) entity); }
else if (entity instanceof EntityTameableAnimal) {
if (entity instanceof EntityWolf) { return new CraftWolf(server, (EntityWolf) entity); }
else if (entity instanceof EntityOcelot) { return new CraftOcelot(server, (EntityOcelot) entity); }
else if (entity instanceof EntityCat) { return new CraftCat(server, (EntityCat) entity); }
else if (entity instanceof EntityParrot) { return new CraftParrot(server, (EntityParrot) entity); }
}
else if (entity instanceof EntitySheep) { return new CraftSheep(server, (EntitySheep) entity); }
@@ -86,6 +87,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
if (entity instanceof EntityHorseChestedAbstract){
if (entity instanceof EntityHorseDonkey) { return new CraftDonkey(server, (EntityHorseDonkey) entity); }
else if (entity instanceof EntityHorseMule) { return new CraftMule(server, (EntityHorseMule) entity); }
else if (entity instanceof EntityLLamaTrader) { return new CraftTraderLlama(server, (EntityLLamaTrader) entity); }
else if (entity instanceof EntityLlama) { return new CraftLlama(server, (EntityLlama) entity); }
} else if (entity instanceof EntityHorse) { return new CraftHorse(server, (EntityHorse) entity); }
else if (entity instanceof EntityHorseSkeleton) { return new CraftSkeletonHorse(server, (EntityHorseSkeleton) entity); }
@@ -94,6 +96,9 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else if (entity instanceof EntityRabbit) { return new CraftRabbit(server, (EntityRabbit) entity); }
else if (entity instanceof EntityPolarBear) { return new CraftPolarBear(server, (EntityPolarBear) entity); }
else if (entity instanceof EntityTurtle) { return new CraftTurtle(server, (EntityTurtle) entity); }
else if (entity instanceof EntityOcelot) { return new CraftOcelot(server, (EntityOcelot) entity); }
else if (entity instanceof EntityPanda) { return new CraftPanda(server, (EntityPanda) entity); }
else if (entity instanceof EntityFox) { return new CraftFox(server, (EntityFox) entity); }
else { return new CraftAnimals(server, (EntityAnimal) entity); }
}
// Monsters
@@ -134,8 +139,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else { return new CraftSpellcaster(server, (EntityIllagerWizard) entity); }
}
else if (entity instanceof EntityVindicator) { return new CraftVindicator(server, (EntityVindicator) entity); }
else if (entity instanceof EntityPillager) { return new CraftPillager(server, (EntityPillager) entity); }
else { return new CraftIllager(server, (EntityIllagerAbstract) entity); }
}
else if (entity instanceof EntityRavager) { return new CraftRavager(server, (EntityRavager) entity); }
else { return new CraftMonster(server, (EntityMonster) entity); }
}
@@ -144,7 +151,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else if (entity instanceof EntityIronGolem) { return new CraftIronGolem(server, (EntityIronGolem) entity); }
else if (entity instanceof EntityShulker) { return new CraftShulker(server, (EntityShulker) entity); }
}
else if (entity instanceof EntityVillager) { return new CraftVillager(server, (EntityVillager) entity); }
else if (entity instanceof EntityVillagerAbstract) {
if (entity instanceof EntityVillager) { return new CraftVillager(server, (EntityVillager) entity); }
else if (entity instanceof EntityVillagerTrader) { return new CraftWanderingTrader(server, (EntityVillagerTrader) entity); }
else { return new CraftAbstractVillager(server, (EntityVillagerAbstract) entity); }
}
else { return new CraftCreature(server, (EntityCreature) entity); }
}
// Slimes are a special (and broken) case
@@ -175,10 +186,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else { return new CraftComplexPart(server, (EntityComplexPart) entity); }
}
else if (entity instanceof EntityExperienceOrb) { return new CraftExperienceOrb(server, (EntityExperienceOrb) entity); }
else if (entity instanceof EntityTippedArrow) {
if (((EntityTippedArrow) entity).isTipped()) { return new CraftTippedArrow(server, (EntityTippedArrow) entity); }
else { return new CraftArrow(server, (EntityArrow) entity); }
}
else if (entity instanceof EntityTippedArrow) { return new CraftTippedArrow(server, (EntityTippedArrow) entity); }
else if (entity instanceof EntitySpectralArrow) { return new CraftSpectralArrow(server, (EntitySpectralArrow) entity); }
else if (entity instanceof EntityArrow) {
if (entity instanceof EntityThrownTrident) { return new CraftTrident(server, (EntityThrownTrident) entity); }
@@ -188,10 +196,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else if (entity instanceof EntityProjectile) {
if (entity instanceof EntityEgg) { return new CraftEgg(server, (EntityEgg) entity); }
else if (entity instanceof EntitySnowball) { return new CraftSnowball(server, (EntitySnowball) entity); }
else if (entity instanceof EntityPotion) {
if (!((EntityPotion) entity).isLingering()) { return new CraftSplashPotion(server, (EntityPotion) entity); }
else { return new CraftLingeringPotion(server, (EntityPotion) entity); }
}
else if (entity instanceof EntityPotion) { return new CraftThrownPotion(server, (EntityPotion) entity); }
else if (entity instanceof EntityEnderPearl) { return new CraftEnderPearl(server, (EntityEnderPearl) entity); }
else if (entity instanceof EntityThrownExpBottle) { return new CraftThrownExpBottle(server, (EntityThrownExpBottle) entity); }
}
@@ -207,10 +212,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else if (entity instanceof EntityEnderCrystal) { return new CraftEnderCrystal(server, (EntityEnderCrystal) entity); }
else if (entity instanceof EntityFishingHook) { return new CraftFishHook(server, (EntityFishingHook) entity); }
else if (entity instanceof EntityItem) { return new CraftItem(server, (EntityItem) entity); }
else if (entity instanceof EntityWeather) {
if (entity instanceof EntityLightning) { return new CraftLightningStrike(server, (EntityLightning) entity); }
else { return new CraftWeather(server, (EntityWeather) entity); }
}
else if (entity instanceof EntityLightning) { return new CraftLightningStrike(server, (EntityLightning) entity); }
else if (entity instanceof EntityMinecartAbstract) {
if (entity instanceof EntityMinecartFurnace) { return new CraftMinecartFurnace(server, (EntityMinecartFurnace) entity); }
else if (entity instanceof EntityMinecartChest) { return new CraftMinecartChest(server, (EntityMinecartChest) entity); }
@@ -253,26 +255,24 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
public Vector getVelocity() {
return new Vector(entity.motX, entity.motY, entity.motZ);
return CraftVector.toBukkit(entity.getMot());
}
public void setVelocity(Vector velocity) {
Preconditions.checkArgument(velocity != null, "velocity");
velocity.checkFinite();
entity.motX = velocity.getX();
entity.motY = velocity.getY();
entity.motZ = velocity.getZ();
entity.setMot(CraftVector.toNMS(velocity));
entity.velocityChanged = true;
}
@Override
public double getHeight() {
return getHandle().length;
return getHandle().getHeight();
}
@Override
public double getWidth() {
return getHandle().width;
return getHandle().getWidth();
}
@Override
@@ -324,7 +324,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
// Let the server handle cross world teleports
if (!location.getWorld().equals(getWorld())) {
entity.teleportTo(location, false);
entity.teleportTo(((CraftWorld) location.getWorld()).getHandle().dimension, new BlockPosition(location.getX(), location.getY(), location.getZ()));
return true;
}

View File

@@ -0,0 +1,28 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityFox;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Fox;
public class CraftFox extends CraftAnimals implements Fox {
public CraftFox(CraftServer server, EntityFox entity) {
super(server, entity);
}
@Override
public EntityFox getHandle() {
return (EntityFox) super.getHandle();
}
@Override
public EntityType getType() {
return EntityType.FOX;
}
@Override
public String toString() {
return "CraftFox";
}
}

View File

@@ -4,13 +4,17 @@ import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Optional;
import java.util.Set;
import net.minecraft.server.BlockAnvil;
import net.minecraft.server.BlockBed;
import net.minecraft.server.BlockEnchantmentTable;
import net.minecraft.server.BlockPosition;
import net.minecraft.server.BlockWorkbench;
import net.minecraft.server.Blocks;
import net.minecraft.server.ChatComponentText;
import net.minecraft.server.Container;
import net.minecraft.server.Containers;
import net.minecraft.server.CraftingManager;
import net.minecraft.server.Entity;
import net.minecraft.server.EntityHuman;
@@ -19,6 +23,7 @@ import net.minecraft.server.EntityPlayer;
import net.minecraft.server.EntityTypes;
import net.minecraft.server.EnumMainHand;
import net.minecraft.server.IBlockData;
import net.minecraft.server.IChatBaseComponent;
import net.minecraft.server.IInventory;
import net.minecraft.server.IMerchant;
import net.minecraft.server.IRecipe;
@@ -29,14 +34,19 @@ import net.minecraft.server.NBTTagCompound;
import net.minecraft.server.PacketPlayInCloseWindow;
import net.minecraft.server.PacketPlayOutOpenWindow;
import net.minecraft.server.TileEntity;
import net.minecraft.server.TileEntityBarrel;
import net.minecraft.server.TileEntityBeacon;
import net.minecraft.server.TileEntityBlastFurnace;
import net.minecraft.server.TileEntityBrewingStand;
import net.minecraft.server.TileEntityDispenser;
import net.minecraft.server.TileEntityDropper;
import net.minecraft.server.TileEntityEnchantTable;
import net.minecraft.server.TileEntityFurnace;
import net.minecraft.server.TileEntityFurnaceFurnace;
import net.minecraft.server.TileEntityHopper;
import net.minecraft.server.TileEntityLectern;
import net.minecraft.server.TileEntityShulkerBox;
import net.minecraft.server.TileEntitySmoker;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -52,6 +62,7 @@ import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
import org.bukkit.craftbukkit.inventory.CraftInventoryView;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.inventory.CraftMerchant;
import org.bukkit.craftbukkit.inventory.CraftMerchantCustom;
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
import org.bukkit.entity.HumanEntity;
@@ -121,7 +132,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
}
public boolean isSleeping() {
return getHandle().sleeping;
return getHandle().isSleeping();
}
public int getSleepTicks() {
@@ -168,7 +179,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
return false;
}
if (getHandle().a(blockposition, force) != EntityHuman.EnumBedResult.OK) {
if (getHandle().sleep(blockposition, force).left().isPresent()) {
return false;
}
@@ -183,14 +194,15 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
public void wakeup(boolean setSpawnLocation) {
Preconditions.checkState(isSleeping(), "Cannot wakeup if not sleeping");
getHandle().a(true, true, setSpawnLocation);
getHandle().wakeup(true, true, setSpawnLocation);
}
@Override
public Location getBedLocation() {
Preconditions.checkState(isSleeping(), "Not sleeping");
return new Location(getWorld(), getHandle().bedPosition.getX(), getHandle().bedPosition.getY(), getHandle().bedPosition.getZ());
BlockPosition bed = getHandle().getBed();
return new Location(getWorld(), bed.getX(), bed.getY(), bed.getZ());
}
@Override
@@ -303,41 +315,64 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
case PLAYER:
case CHEST:
case ENDER_CHEST:
getHandle().openContainer(iinventory);
Containers customSize;
switch (inventory.getSize()) {
case 9:
customSize = Containers.GENERIC_9X1;
break;
case 18:
customSize = Containers.GENERIC_9X2;
break;
case 27:
customSize = Containers.GENERIC_9X3;
break;
case 36:
customSize = Containers.GENERIC_9X4;
break;
case 45:
customSize = Containers.GENERIC_9X5;
break;
case 54:
customSize = Containers.GENERIC_9X6;
break;
default:
throw new IllegalArgumentException("Unsupported custom size " + inventory.getSize());
}
openCustomInventory(inventory, player, customSize);
break;
case DISPENSER:
if (iinventory instanceof TileEntityDispenser) {
getHandle().openContainer((TileEntityDispenser) iinventory);
} else {
openCustomInventory(inventory, player, "minecraft:dispenser");
openCustomInventory(inventory, player, Containers.GENERIC_3X3);
}
break;
case DROPPER:
if (iinventory instanceof TileEntityDropper) {
getHandle().openContainer((TileEntityDropper) iinventory);
} else {
openCustomInventory(inventory, player, "minecraft:dropper");
openCustomInventory(inventory, player, Containers.GENERIC_3X3);
}
break;
case FURNACE:
if (iinventory instanceof TileEntityFurnace) {
getHandle().openContainer((TileEntityFurnace) iinventory);
if (iinventory instanceof TileEntityFurnaceFurnace) {
getHandle().openContainer((TileEntityFurnaceFurnace) iinventory);
} else {
openCustomInventory(inventory, player, "minecraft:furnace");
openCustomInventory(inventory, player, Containers.FURNACE);
}
break;
case WORKBENCH:
openCustomInventory(inventory, player, "minecraft:crafting_table");
openCustomInventory(inventory, player, Containers.CRAFTING);
break;
case BREWING:
if (iinventory instanceof TileEntityBrewingStand) {
getHandle().openContainer((TileEntityBrewingStand) iinventory);
} else {
openCustomInventory(inventory, player, "minecraft:brewing_stand");
openCustomInventory(inventory, player, Containers.BREWING_STAND);
}
break;
case ENCHANTING:
openCustomInventory(inventory, player, "minecraft:enchanting_table");
openCustomInventory(inventory, player, Containers.ENCHANTMENT);
break;
case HOPPER:
if (iinventory instanceof TileEntityHopper) {
@@ -345,33 +380,67 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
} else if (iinventory instanceof EntityMinecartHopper) {
getHandle().openContainer((EntityMinecartHopper) iinventory);
} else {
openCustomInventory(inventory, player, "minecraft:hopper");
openCustomInventory(inventory, player, Containers.HOPPER);
}
break;
case BEACON:
if (iinventory instanceof TileEntityBeacon) {
getHandle().openContainer((TileEntityBeacon) iinventory);
} else {
openCustomInventory(inventory, player, "minecraft:beacon");
openCustomInventory(inventory, player, Containers.BEACON);
}
break;
case ANVIL:
if (iinventory instanceof BlockAnvil.TileEntityContainerAnvil) {
getHandle().openTileEntity((BlockAnvil.TileEntityContainerAnvil) iinventory);
if (iinventory instanceof ITileInventory) {
getHandle().openContainer((ITileInventory) iinventory);
} else {
openCustomInventory(inventory, player, "minecraft:anvil");
openCustomInventory(inventory, player, Containers.ANVIL);
}
break;
case SHULKER_BOX:
if (iinventory instanceof TileEntityShulkerBox) {
getHandle().openContainer((TileEntityShulkerBox) iinventory);
} else {
openCustomInventory(inventory, player, "minecraft:shulker_box");
openCustomInventory(inventory, player, Containers.SHULKER_BOX);
}
break;
case BARREL:
if (iinventory instanceof TileEntityBarrel) {
getHandle().openContainer((TileEntityBarrel) iinventory);
} else {
openCustomInventory(inventory, player, Containers.GENERIC_9X3);
}
break;
case BLAST_FURNACE:
if (iinventory instanceof TileEntityBlastFurnace) {
getHandle().openContainer((TileEntityBlastFurnace) iinventory);
} else {
openCustomInventory(inventory, player, Containers.BLAST_FURNACE);
}
break;
case LECTERN:
if (iinventory instanceof TileEntityLectern) {
getHandle().openContainer((TileEntityLectern) iinventory);
} else {
openCustomInventory(inventory, player, Containers.LECTERN);
}
break;
case SMOKER:
if (iinventory instanceof TileEntitySmoker) {
getHandle().openContainer((TileEntitySmoker) iinventory);
} else {
openCustomInventory(inventory, player, Containers.SMOKER);
}
break;
case STONECUTTER:
openCustomInventory(inventory, player, Containers.STONECUTTER);
break;
case CREATIVE:
case CRAFTING:
case MERCHANT:
case LOOM:
case CARTOGRAPHY:
case GRINDSTONE:
throw new IllegalArgumentException("Can't open a " + type + " inventory!");
}
if (getHandle().activeContainer == formerContainer) {
@@ -381,25 +450,17 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
return getHandle().activeContainer.getBukkitView();
}
private void openCustomInventory(Inventory inventory, EntityPlayer player, String windowType) {
private void openCustomInventory(Inventory inventory, EntityPlayer player, Containers<?> windowType) {
if (player.playerConnection == null) return;
Preconditions.checkArgument(windowType != null, "Unknown windowType");
Container container = new CraftContainer(inventory, this.getHandle(), player.nextContainerCounter());
container = CraftEventFactory.callInventoryOpenEvent(player, container);
if(container == null) return;
String title = container.getBukkitView().getTitle();
int size = container.getBukkitView().getTopInventory().getSize();
// Special cases
if (windowType.equals("minecraft:crafting_table")
|| windowType.equals("minecraft:anvil")
|| windowType.equals("minecraft:enchanting_table")
) {
size = 0;
}
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, new ChatComponentText(title), size));
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, new ChatComponentText(title)));
getHandle().activeContainer = container;
getHandle().activeContainer.addSlotListener(player);
}
@@ -414,7 +475,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
if (location == null) {
location = getLocation();
}
getHandle().openTileEntity(new BlockWorkbench.TileEntityContainerWorkbench(getHandle().world, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ())));
getHandle().openContainer(((BlockWorkbench) Blocks.CRAFTING_TABLE).getInventory(null, getHandle().world, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ())));
if (force) {
getHandle().activeContainer.checkReachable = false;
}
@@ -434,13 +495,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
// If there isn't an enchant table we can force create one, won't be very useful though.
BlockPosition pos = new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ());
TileEntity container = getHandle().world.getTileEntity(pos);
if (container == null && force) {
container = new TileEntityEnchantTable();
container.setWorld(getHandle().world);
container.setPosition(pos);
}
getHandle().openTileEntity((ITileEntityContainer) container);
getHandle().openContainer(((BlockEnchantmentTable) Blocks.ENCHANTING_TABLE).getInventory(null, getHandle().world, pos));
if (force) {
getHandle().activeContainer.checkReachable = false;
@@ -471,10 +526,9 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
// Now open the window
InventoryType type = inventory.getType();
String windowType = CraftContainer.getNotchInventoryType(type);
Containers<?> windowType = CraftContainer.getNotchInventoryType(type);
String title = inventory.getTitle();
int size = inventory.getTopInventory().getSize();
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, new ChatComponentText(title), size));
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, new ChatComponentText(title)));
player.activeContainer = container;
player.activeContainer.addSlotListener(player);
}
@@ -498,16 +552,19 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
}
IMerchant mcMerchant;
IChatBaseComponent name;
if (merchant instanceof CraftVillager) {
mcMerchant = ((CraftVillager) merchant).getHandle();
} else if (merchant instanceof CraftMerchant) {
mcMerchant = ((CraftMerchant) merchant).getMerchant();
name = ((CraftVillager) merchant).getHandle().getScoreboardDisplayName();
} else if (merchant instanceof CraftMerchantCustom) {
mcMerchant = ((CraftMerchantCustom) merchant).getMerchant();
name = ((CraftMerchantCustom) merchant).getMerchant().getScoreboardDisplayName();
} else {
throw new IllegalArgumentException("Can't open merchant " + merchant.toString());
}
mcMerchant.setTradingPlayer(this.getHandle());
this.getHandle().openTrade(mcMerchant);
mcMerchant.openTrade(this.getHandle(), name, 0);
return this.getHandle().activeContainer.getBukkitView();
}
@@ -576,17 +633,17 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
return getHandle().undiscoverRecipes(bukkitKeysToMinecraftRecipes(recipes));
}
private Collection<IRecipe> bukkitKeysToMinecraftRecipes(Collection<NamespacedKey> recipeKeys) {
Collection<IRecipe> recipes = new ArrayList<>();
private Collection<IRecipe<?>> bukkitKeysToMinecraftRecipes(Collection<NamespacedKey> recipeKeys) {
Collection<IRecipe<?>> recipes = new ArrayList<>();
CraftingManager manager = getHandle().world.getMinecraftServer().getCraftingManager();
for (NamespacedKey recipeKey : recipeKeys) {
IRecipe recipe = manager.a(CraftNamespacedKey.toMinecraft(recipeKey));
if (recipe == null) {
Optional<? extends IRecipe<?>> recipe = manager.a(CraftNamespacedKey.toMinecraft(recipeKey));
if (!recipe.isPresent()) {
continue;
}
recipes.add(recipe);
recipes.add(recipe.get());
}
return recipes;
@@ -595,9 +652,9 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
@Override
public org.bukkit.entity.Entity getShoulderEntityLeft() {
if (!getHandle().getShoulderEntityLeft().isEmpty()) {
Entity shoulder = EntityTypes.a(getHandle().getShoulderEntityLeft(), getHandle().world);
Optional<Entity> shoulder = EntityTypes.a(getHandle().getShoulderEntityLeft(), getHandle().world);
return (shoulder == null) ? null : shoulder.getBukkitEntity();
return (!shoulder.isPresent()) ? null : shoulder.get().getBukkitEntity();
}
return null;
@@ -614,9 +671,9 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
@Override
public org.bukkit.entity.Entity getShoulderEntityRight() {
if (!getHandle().getShoulderEntityRight().isEmpty()) {
Entity shoulder = EntityTypes.a(getHandle().getShoulderEntityRight(), getHandle().world);
Optional<Entity> shoulder = EntityTypes.a(getHandle().getShoulderEntityRight(), getHandle().world);
return (shoulder == null) ? null : shoulder.getBukkitEntity();
return (!shoulder.isPresent()) ? null : shoulder.get().getBukkitEntity();
}
return null;

View File

@@ -4,7 +4,7 @@ import net.minecraft.server.EntityIllagerAbstract;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Illager;
public class CraftIllager extends CraftMonster implements Illager {
public class CraftIllager extends CraftRaider implements Illager {
public CraftIllager(CraftServer server, EntityIllagerAbstract entity) {
super(server, entity);

View File

@@ -1,42 +0,0 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityPotion;
import org.apache.commons.lang.Validate;
import org.bukkit.Material;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LingeringPotion;
import org.bukkit.inventory.ItemStack;
public class CraftLingeringPotion extends CraftThrownPotion implements LingeringPotion {
public CraftLingeringPotion(CraftServer server, EntityPotion entity) {
super(server, entity);
}
public void setItem(ItemStack item) {
// The ItemStack must not be null.
Validate.notNull(item, "ItemStack cannot be null.");
// The ItemStack must be a potion.
Validate.isTrue(item.getType() == Material.LINGERING_POTION, "ItemStack must be a lingering potion. This item stack was " + item.getType() + ".");
getHandle().setItem(CraftItemStack.asNMSCopy(item));
}
@Override
public EntityPotion getHandle() {
return (EntityPotion) entity;
}
@Override
public String toString() {
return "CraftLingeringPotion";
}
@Override
public EntityType getType() {
return EntityType.LINGERING_POTION;
}
}

View File

@@ -29,6 +29,7 @@ import net.minecraft.server.EntityThrownExpBottle;
import net.minecraft.server.EntityTippedArrow;
import net.minecraft.server.EntitySpectralArrow;
import net.minecraft.server.EntityThrownTrident;
import net.minecraft.server.EntityTypes;
import net.minecraft.server.EntityWither;
import net.minecraft.server.EntityWitherSkull;
import net.minecraft.server.GenericAttributes;
@@ -117,7 +118,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
public void setMaxHealth(double amount) {
Validate.isTrue(amount > 0, "Max health must be greater than 0");
getHandle().getAttributeInstance(GenericAttributes.maxHealth).setValue(amount);
getHandle().getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(amount);
if (getHealth() > amount) {
setHealth(amount);
@@ -125,7 +126,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
}
public void resetMaxHealth() {
setMaxHealth(getHandle().getAttributeInstance(GenericAttributes.maxHealth).getAttribute().getDefault());
setMaxHealth(getHandle().getAttributeInstance(GenericAttributes.MAX_HEALTH).getAttribute().getDefault());
}
public double getEyeHeight() {
@@ -352,16 +353,18 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
((EntityArrow) launch).a(getHandle(), getHandle().pitch, getHandle().yaw, 0.0F, 3.0F, 1.0F); // ItemBow
} else if (ThrownPotion.class.isAssignableFrom(projectile)) {
if (LingeringPotion.class.isAssignableFrom(projectile)) {
launch = new EntityPotion(world, getHandle(), CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.LINGERING_POTION, 1)));
launch = new EntityPotion(world, getHandle());
((EntityPotion) launch).setItem(CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.LINGERING_POTION, 1)));
} else {
launch = new EntityPotion(world, getHandle(), CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.SPLASH_POTION, 1)));
launch = new EntityPotion(world, getHandle());
((EntityPotion) launch).setItem(CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.SPLASH_POTION, 1)));
}
((EntityProjectile) launch).a(getHandle(), getHandle().pitch, getHandle().yaw, -20.0F, 0.5F, 1.0F); // ItemSplashPotion
} else if (ThrownExpBottle.class.isAssignableFrom(projectile)) {
launch = new EntityThrownExpBottle(world, getHandle());
((EntityProjectile) launch).a(getHandle(), getHandle().pitch, getHandle().yaw, -20.0F, 0.7F, 1.0F); // ItemExpBottle
} else if (FishHook.class.isAssignableFrom(projectile) && getHandle() instanceof EntityHuman) {
launch = new EntityFishingHook(world, (EntityHuman) getHandle());
launch = new EntityFishingHook((EntityHuman) getHandle(), world, 0, 0);
} else if (Fireball.class.isAssignableFrom(projectile)) {
Location location = getEyeLocation();
Vector direction = location.getDirection().multiply(10);
@@ -382,7 +385,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
Location location = getEyeLocation();
Vector direction = location.getDirection();
launch = new EntityLlamaSpit(world);
launch = EntityTypes.LLAMA_SPIT.a(world);
((EntityLlamaSpit) launch).shooter = getHandle();
((EntityLlamaSpit) launch).shoot(direction.getX(), direction.getY(), direction.getZ(), 1.5F, 10.0F); // EntityLlama

View File

@@ -28,7 +28,7 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements Lo
@Override
public LootTable getLootTable() {
MinecraftKey nmsTable = getHandle().getLootTable();
MinecraftKey nmsTable = getHandle().lootTable;
if (nmsTable == null) {
return null; // return empty loot table?
}
@@ -49,6 +49,6 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements Lo
private void setLootTable(LootTable table, long seed) {
MinecraftKey newKey = (table == null) ? null : CraftNamespacedKey.toMinecraft(table.getKey());
getHandle().a(newKey, seed);
getHandle().setLootTable(newKey, seed);
}
}

View File

@@ -1,12 +1,11 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityOcelot;
import org.apache.commons.lang.Validate;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Ocelot;
public class CraftOcelot extends CraftTameableAnimal implements Ocelot {
public class CraftOcelot extends CraftAnimals implements Ocelot {
public CraftOcelot(CraftServer server, EntityOcelot ocelot) {
super(server, ocelot);
}
@@ -17,12 +16,11 @@ public class CraftOcelot extends CraftTameableAnimal implements Ocelot {
}
public Type getCatType() {
return Type.getType(getHandle().getCatType());
return Type.WILD_OCELOT;
}
public void setCatType(Type type) {
Validate.notNull(type, "Cat type cannot be null");
getHandle().setCatType(type.getId());
throw new UnsupportedOperationException("Cats are now a different entity!");
}
@Override

View File

@@ -1,6 +1,7 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityPainting;
import net.minecraft.server.EntityTypes;
import net.minecraft.server.Paintings;
import net.minecraft.server.WorldServer;
@@ -53,7 +54,7 @@ public class CraftPainting extends CraftHanging implements Painting {
private void update() {
WorldServer world = ((CraftWorld) getWorld()).getHandle();
EntityPainting painting = new EntityPainting(world);
EntityPainting painting = EntityTypes.PAINTING.a(world);
painting.blockPosition = getHandle().blockPosition;
painting.art = getHandle().art;
painting.setDirection(getHandle().direction);

View File

@@ -0,0 +1,61 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.base.Preconditions;
import net.minecraft.server.EntityPanda;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Panda;
import org.bukkit.entity.EntityType;
public class CraftPanda extends CraftAnimals implements Panda {
public CraftPanda(CraftServer server, EntityPanda entity) {
super(server, entity);
}
@Override
public EntityPanda getHandle() {
return (EntityPanda) super.getHandle();
}
@Override
public EntityType getType() {
return EntityType.PANDA;
}
@Override
public String toString() {
return "CraftPanda";
}
@Override
public Gene getMainGene() {
return fromNms(getHandle().getMainGene());
}
@Override
public void setMainGene(Gene gene) {
getHandle().setMainGene(toNms(gene));
}
@Override
public Gene getHiddenGene() {
return fromNms(getHandle().getHiddenGene());
}
@Override
public void setHiddenGene(Gene gene) {
getHandle().setHiddenGene(toNms(gene));
}
public static Gene fromNms(EntityPanda.Gene gene) {
Preconditions.checkArgument(gene != null, "Gene may not be null");
return Gene.values()[gene.ordinal()];
}
public static EntityPanda.Gene toNms(Gene gene) {
Preconditions.checkArgument(gene != null, "Gene may not be null");
return EntityPanda.Gene.values()[gene.ordinal()];
}
}

View File

@@ -0,0 +1,35 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityPillager;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.entity.Pillager;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.Inventory;
public class CraftPillager extends CraftIllager implements Pillager {
public CraftPillager(CraftServer server, EntityPillager entity) {
super(server, entity);
}
@Override
public EntityPillager getHandle() {
return (EntityPillager) super.getHandle();
}
@Override
public EntityType getType() {
return EntityType.PILLAGER;
}
@Override
public String toString() {
return "CraftPillager";
}
@Override
public Inventory getInventory() {
return new CraftInventory(getHandle().getInventory());
}
}

View File

@@ -36,8 +36,6 @@ import net.minecraft.server.Container;
import net.minecraft.server.Entity;
import net.minecraft.server.EntityLiving;
import net.minecraft.server.EntityPlayer;
import net.minecraft.server.EntityTracker;
import net.minecraft.server.EntityTrackerEntry;
import net.minecraft.server.EnumChatFormat;
import net.minecraft.server.EnumGamemode;
import net.minecraft.server.IChatBaseComponent;
@@ -60,6 +58,7 @@ import net.minecraft.server.PacketPlayOutUpdateAttributes;
import net.minecraft.server.PacketPlayOutUpdateHealth;
import net.minecraft.server.PacketPlayOutWorldEvent;
import net.minecraft.server.PacketPlayOutWorldParticles;
import net.minecraft.server.PlayerChunkMap;
import net.minecraft.server.PlayerConnection;
import net.minecraft.server.TileEntitySign;
import net.minecraft.server.Vec3D;
@@ -399,6 +398,27 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
case 9:
instrumentName = "xylophone";
break;
case 10:
instrumentName = "iron_xylophone";
break;
case 11:
instrumentName = "cow_bell";
break;
case 12:
instrumentName = "didgeridoo";
break;
case 13:
instrumentName = "bit";
break;
case 14:
instrumentName = "banjo";
break;
case 15:
instrumentName = "pling";
break;
case 16:
instrumentName = "xylophone";
break;
}
float f = (float) Math.pow(2.0D, (note.getId() - 12.0D) / 12.0D);
getHandle().playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect(CraftSound.getSoundEffect("block.note_block." + instrumentName), net.minecraft.server.SoundCategory.RECORDS, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, f));
@@ -562,7 +582,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
}
PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), map.getScale().getValue(), true, icons, data.buffer, 0, 0, 128, 128);
PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), map.getScale().getValue(), true, map.isLocked(), icons, data.buffer, 0, 0, 128, 128);
getHandle().playerConnection.sendPacket(packet);
}
@@ -668,7 +688,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void setSleepingIgnored(boolean isSleeping) {
getHandle().fauxSleeping = isSleeping;
((CraftWorld) getWorld()).getHandle().checkSleepStatus();
((CraftWorld) getWorld()).getHandle().everyoneSleeping();
}
@Override
@@ -1000,9 +1020,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
hiddenPlayers.put(player.getUniqueId(), hidingPlugins);
// Remove this player from the hidden player's EntityTrackerEntry
EntityTracker tracker = ((WorldServer) entity.world).tracker;
PlayerChunkMap tracker = ((WorldServer) entity.world).getChunkProvider().playerChunkMap;
EntityPlayer other = ((CraftPlayer) player).getHandle();
EntityTrackerEntry entry = tracker.trackedEntities.get(other.getId());
PlayerChunkMap.EntityTracker entry = tracker.trackedEntities.get(other.getId());
if (entry != null) {
entry.clear(getHandle());
}
@@ -1042,12 +1062,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
hiddenPlayers.remove(player.getUniqueId());
EntityTracker tracker = ((WorldServer) entity.world).tracker;
PlayerChunkMap tracker = ((WorldServer) entity.world).getChunkProvider().playerChunkMap;
EntityPlayer other = ((CraftPlayer) player).getHandle();
getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, other));
EntityTrackerEntry entry = tracker.trackedEntities.get(other.getId());
PlayerChunkMap.EntityTracker entry = tracker.trackedEntities.get(other.getId());
if (entry != null && !entry.trackedPlayers.contains(getHandle())) {
entry.updatePlayer(getHandle());
}

View File

@@ -41,8 +41,8 @@ public class CraftRabbit extends CraftAnimals implements Rabbit {
if (getRabbitType() == Type.THE_KILLER_BUNNY) {
// Reset goals and target finders.
World world = ((CraftWorld) this.getWorld()).getHandle();
entity.goalSelector = new PathfinderGoalSelector(world != null && world.methodProfiler != null ? world.methodProfiler : null);
entity.targetSelector = new PathfinderGoalSelector(world != null && world.methodProfiler != null ? world.methodProfiler : null);
entity.goalSelector = new PathfinderGoalSelector(world != null && world.getMethodProfiler() != null ? world.getMethodProfiler() : null);
entity.targetSelector = new PathfinderGoalSelector(world != null && world.getMethodProfiler() != null ? world.getMethodProfiler() : null);
entity.initializePathFinderGoals();
}

View File

@@ -0,0 +1,52 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.base.Preconditions;
import net.minecraft.server.BlockPosition;
import net.minecraft.server.EntityRaider;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.entity.Raider;
public abstract class CraftRaider extends CraftMonster implements Raider {
public CraftRaider(CraftServer server, EntityRaider entity) {
super(server, entity);
}
@Override
public EntityRaider getHandle() {
return (EntityRaider) super.getHandle();
}
@Override
public String toString() {
return "CraftRaider";
}
@Override
public Block getPatrolTarget() {
return getHandle().getPatrolTarget() == null ? null : CraftBlock.at(getHandle().world, getHandle().getPatrolTarget());
}
@Override
public void setPatrolTarget(Block block) {
if (block == null) {
getHandle().setPatrolTarget((BlockPosition) null);
} else {
Preconditions.checkArgument(block.getWorld().equals(this.getWorld()), "Block must be in same world");
getHandle().setPatrolTarget(new BlockPosition(block.getX(), block.getY(), block.getZ()));
}
}
@Override
public boolean isPatrolLeader() {
return getHandle().isPatrolLeader();
}
@Override
public void setPatrolLeader(boolean leader) {
getHandle().setPatrolLeader(leader);
}
}

View File

@@ -0,0 +1,28 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityRavager;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Ravager;
public class CraftRavager extends CraftRaider implements Ravager {
public CraftRavager(CraftServer server, EntityRavager entity) {
super(server, entity);
}
@Override
public EntityRavager getHandle() {
return (EntityRavager) super.getHandle();
}
@Override
public EntityType getType() {
return EntityType.RAVAGER;
}
@Override
public String toString() {
return "CraftRavager";
}
}

View File

@@ -1,43 +0,0 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityPotion;
import org.apache.commons.lang.Validate;
import org.bukkit.Material;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.SplashPotion;
import org.bukkit.inventory.ItemStack;
public class CraftSplashPotion extends CraftThrownPotion implements SplashPotion {
public CraftSplashPotion(CraftServer server, EntityPotion entity) {
super(server, entity);
}
@Override
public void setItem(ItemStack item) {
// The ItemStack must not be null.
Validate.notNull(item, "ItemStack cannot be null.");
// The ItemStack must be a potion.
Validate.isTrue(item.getType() == Material.SPLASH_POTION, "ItemStack must be a splash potion. This item stack was " + item.getType() + ".");
getHandle().setItem(CraftItemStack.asNMSCopy(item));
}
@Override
public EntityPotion getHandle() {
return (EntityPotion) entity;
}
@Override
public String toString() {
return "CraftSplashPotion";
}
@Override
public EntityType getType() {
return EntityType.SPLASH_POTION;
}
}

View File

@@ -17,7 +17,7 @@ import org.bukkit.potion.PotionEffect;
import com.google.common.collect.ImmutableList;
public abstract class CraftThrownPotion extends CraftProjectile implements ThrownPotion {
public class CraftThrownPotion extends CraftProjectile implements ThrownPotion {
public CraftThrownPotion(CraftServer server, EntityPotion entity) {
super(server, entity);
}
@@ -34,8 +34,24 @@ public abstract class CraftThrownPotion extends CraftProjectile implements Throw
return CraftItemStack.asBukkitCopy(getHandle().getItem());
}
@Override
public void setItem(ItemStack item) {
// The ItemStack must not be null.
Validate.notNull(item, "ItemStack cannot be null.");
// The ItemStack must be a potion.
Validate.isTrue(item.getType() == Material.LINGERING_POTION || item.getType() == Material.SPLASH_POTION, "ItemStack must be a lingering or splash potion. This item stack was " + item.getType() + ".");
getHandle().setItem(CraftItemStack.asNMSCopy(item));
}
@Override
public EntityPotion getHandle() {
return (EntityPotion) entity;
}
@Override
public EntityType getType() {
return EntityType.SPLASH_POTION;
}
}

View File

@@ -37,7 +37,7 @@ public class CraftTippedArrow extends CraftArrow implements TippedArrow {
@Override
public EntityType getType() {
return EntityType.TIPPED_ARROW;
return EntityType.ARROW;
}
@Override

View File

@@ -0,0 +1,28 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityLLamaTrader;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.TraderLlama;
public class CraftTraderLlama extends CraftLlama implements TraderLlama {
public CraftTraderLlama(CraftServer server, EntityLLamaTrader entity) {
super(server, entity);
}
@Override
public EntityLLamaTrader getHandle() {
return (EntityLLamaTrader) super.getHandle();
}
@Override
public String toString() {
return "CraftTraderLlama";
}
@Override
public EntityType getType() {
return EntityType.TRADER_LLAMA;
}
}

View File

@@ -28,11 +28,11 @@ public class CraftVex extends CraftMonster implements Vex {
@Override
public boolean isCharging() {
return getHandle().dA();
return getHandle().isCharging();
}
@Override
public void setCharging(boolean charging) {
getHandle().a(charging);
getHandle().setCharging(charging);
}
}

View File

@@ -1,25 +1,15 @@
package org.bukkit.craftbukkit.entity;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
import java.util.Locale;
import net.minecraft.server.EntityVillager;
import net.minecraft.server.IRegistry;
import net.minecraft.server.MinecraftKey;
import org.apache.commons.lang.Validate;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftInventory;
import org.bukkit.craftbukkit.inventory.CraftMerchant;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Villager;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.MerchantRecipe;
public class CraftVillager extends CraftAgeable implements Villager, InventoryHolder {
private static final Map<Career, Integer> careerIDMap = new HashMap<>();
private CraftMerchant merchant;
public class CraftVillager extends CraftAbstractVillager implements Villager {
public CraftVillager(CraftServer server, EntityVillager entity) {
super(server, entity);
@@ -40,126 +30,11 @@ public class CraftVillager extends CraftAgeable implements Villager, InventoryHo
}
public Profession getProfession() {
return Profession.values()[getHandle().getProfession() + 1]; // Offset by 1 from the zombie types
return Profession.valueOf(IRegistry.VILLAGER_PROFESSION.getKey(getHandle().getVillagerData().getProfession()).getKey().toUpperCase(Locale.ROOT));
}
public void setProfession(Profession profession) {
Validate.notNull(profession);
Validate.isTrue(!profession.isZombie(), "Profession is reserved for Zombies: ", profession);
getHandle().setProfession(profession.ordinal() - 1);
}
@Override
public Career getCareer() {
return getCareer(getProfession(), getHandle().careerId);
}
@Override
public void setCareer(Career career) {
setCareer(career, true);
}
@Override
public void setCareer(Career career, boolean resetTrades) {
if (career == null) {
getHandle().careerId = 0; // reset career
} else {
Validate.isTrue(career.getProfession() == getProfession(), "Career assignment mismatch. Found (" + getProfession() + ") Required (" + career.getProfession() + ")");
getHandle().careerId = getCareerID(career);
}
if (resetTrades) {
getHandle().trades = null;
getHandle().careerLevel = 0; // SPIGOT-4310
getHandle().populateTrades();
}
}
@Override
public Inventory getInventory() {
return new CraftInventory(getHandle().inventory);
}
private CraftMerchant getMerchant() {
return (merchant == null) ? merchant = new CraftMerchant(getHandle()) : merchant;
}
@Override
public List<MerchantRecipe> getRecipes() {
return getMerchant().getRecipes();
}
@Override
public void setRecipes(List<MerchantRecipe> recipes) {
this.getMerchant().setRecipes(recipes);
}
@Override
public MerchantRecipe getRecipe(int i) {
return getMerchant().getRecipe(i);
}
@Override
public void setRecipe(int i, MerchantRecipe merchantRecipe) {
getMerchant().setRecipe(i, merchantRecipe);
}
@Override
public int getRecipeCount() {
return getMerchant().getRecipeCount();
}
@Override
public boolean isTrading() {
return getTrader() != null;
}
@Override
public HumanEntity getTrader() {
return getMerchant().getTrader();
}
@Override
public int getRiches() {
return getHandle().riches;
}
@Override
public void setRiches(int riches) {
getHandle().riches = riches;
}
@Nullable
private static Career getCareer(Profession profession, int id) {
Validate.isTrue(id > 0, "Career id must be greater than 0");
List<Career> careers = profession.getCareers();
for (Career c : careers) {
if (careerIDMap.containsKey(c) && careerIDMap.get(c) == id) {
return c;
}
}
return null;
}
private static int getCareerID(Career career) {
return careerIDMap.getOrDefault(career, 0);
}
static {
// build Career -> ID map
int id = 0;
for (Profession prof : Profession.values()) {
List<Career> careers = prof.getCareers();
if (!careers.isEmpty()) {
for (Career c : careers) {
careerIDMap.put(c, ++id);
}
}
Validate.isTrue(id == careers.size(), "Career id registration mismatch");
id = 0;
}
getHandle().setVillagerData(getHandle().getVillagerData().withProfession(IRegistry.VILLAGER_PROFESSION.get(new MinecraftKey(profession.name().toLowerCase(Locale.ROOT)))));
}
}

View File

@@ -1,8 +1,12 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.base.Preconditions;
import java.util.Locale;
import java.util.UUID;
import net.minecraft.server.EntityZombieVillager;
import net.minecraft.server.IRegistry;
import net.minecraft.server.MinecraftKey;
import org.apache.commons.lang.Validate;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Villager;
@@ -31,12 +35,13 @@ public class CraftVillagerZombie extends CraftZombie implements ZombieVillager {
@Override
public Villager.Profession getVillagerProfession() {
return Villager.Profession.values()[getHandle().getProfession() + Villager.Profession.FARMER.ordinal()];
return Villager.Profession.valueOf(IRegistry.VILLAGER_PROFESSION.getKey(getHandle().getVillagerData().getProfession()).getKey().toUpperCase(Locale.ROOT));
}
@Override
public void setVillagerProfession(Villager.Profession profession) {
getHandle().setProfession(profession == null ? 0 : profession.ordinal() - Villager.Profession.FARMER.ordinal());
Validate.notNull(profession);
getHandle().setVillagerData(getHandle().getVillagerData().withProfession(IRegistry.VILLAGER_PROFESSION.get(new MinecraftKey(profession.name().toLowerCase(Locale.ROOT)))));
}
@Override

View File

@@ -0,0 +1,28 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityVillagerTrader;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.WanderingTrader;
public class CraftWanderingTrader extends CraftAbstractVillager implements WanderingTrader {
public CraftWanderingTrader(CraftServer server, EntityVillagerTrader entity) {
super(server, entity);
}
@Override
public EntityVillagerTrader getHandle() {
return (EntityVillagerTrader) entity;
}
@Override
public String toString() {
return "CraftWanderingTrader";
}
@Override
public EntityType getType() {
return EntityType.WANDERING_TRADER;
}
}

View File

@@ -1,26 +0,0 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityWeather;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Weather;
public class CraftWeather extends CraftEntity implements Weather {
public CraftWeather(final CraftServer server, final EntityWeather entity) {
super(server, entity);
}
@Override
public EntityWeather getHandle() {
return (EntityWeather) entity;
}
@Override
public String toString() {
return "CraftWeather";
}
public EntityType getType() {
return EntityType.WEATHER;
}
}

View File

@@ -5,7 +5,7 @@ import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Witch;
import org.bukkit.entity.EntityType;
public class CraftWitch extends CraftMonster implements Witch {
public class CraftWitch extends CraftRaider implements Witch {
public CraftWitch(CraftServer server, EntityWitch entity) {
super(server, entity);
}