summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authormd_5 <git@md-5.net>2016-03-01 08:32:46 +1100
committermd_5 <git@md-5.net>2016-03-01 09:32:45 +1100
commitaa008dff0f9bedbe88e1fe79831776b0a52eb90a (patch)
treecb520e0f4cc5d683fb9b7fb95de37480a7443dfb /src
parente1ebe524a78e27f6a2829ed4574fded3779094e1 (diff)
downloadcraftbukkit-aa008dff0f9bedbe88e1fe79831776b0a52eb90a.tar
craftbukkit-aa008dff0f9bedbe88e1fe79831776b0a52eb90a.tar.gz
craftbukkit-aa008dff0f9bedbe88e1fe79831776b0a52eb90a.tar.lz
craftbukkit-aa008dff0f9bedbe88e1fe79831776b0a52eb90a.tar.xz
craftbukkit-aa008dff0f9bedbe88e1fe79831776b0a52eb90a.zip
Update to Minecraft 1.9
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftChunk.java38
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java31
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftParticle.java42
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftServer.java29
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftSound.java227
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftStatistic.java27
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java3
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftWorld.java193
-rw-r--r--src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeInstance.java70
-rw-r--r--src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeMap.java37
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java115
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java8
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java14
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java11
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java8
-rw-r--r--src/main/java/org/bukkit/craftbukkit/boss/CraftBossBar.java165
-rw-r--r--src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java10
-rw-r--r--src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java15
-rw-r--r--src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java9
-rw-r--r--src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java14
-rw-r--r--src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java14
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java138
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java7
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftDragonFireball.java17
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java47
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java6
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java19
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java19
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java44
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java82
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java24
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java51
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java4
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java8
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java9
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java65
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java18
-rw-r--r--src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java20
-rw-r--r--src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java65
-rw-r--r--src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java63
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java113
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java3
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java6
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java10
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java10
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java14
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java9
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java17
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java41
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java4
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java4
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java79
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java14
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java8
-rw-r--r--src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java11
-rw-r--r--src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java16
-rw-r--r--src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java9
-rw-r--r--src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java3
-rw-r--r--src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java1
-rw-r--r--src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java9
-rw-r--r--src/main/resources/log4j2.xml2
-rw-r--r--src/test/java/org/bukkit/BiomeTest.java24
-rw-r--r--src/test/java/org/bukkit/ParticleTest.java19
-rw-r--r--src/test/java/org/bukkit/PerMaterialTest.java8
-rw-r--r--src/test/java/org/bukkit/SoundTest.java11
-rw-r--r--src/test/java/org/bukkit/craftbukkit/inventory/NMSCraftItemStackTest.java4
-rw-r--r--src/test/java/org/bukkit/potion/PotionTest.java17
-rw-r--r--src/test/java/org/bukkit/support/AbstractTestingBase.java7
-rw-r--r--src/test/java/org/bukkit/support/DummyEnchantments.java4
-rw-r--r--src/test/java/org/bukkit/support/DummyPotions.java4
73 files changed, 1497 insertions, 776 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
index 8a33e282..f7d8decb 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
@@ -23,9 +23,7 @@ public class CraftChunk implements Chunk {
private static final byte[] emptySkyLight = new byte[2048];
public CraftChunk(net.minecraft.server.Chunk chunk) {
- if (!(chunk instanceof EmptyChunk)) {
- this.weakChunk = new WeakReference<net.minecraft.server.Chunk>(chunk);
- }
+ this.weakChunk = new WeakReference<net.minecraft.server.Chunk>(chunk);
worldServer = (WorldServer) getHandle().world;
x = getHandle().locX;
@@ -46,9 +44,7 @@ public class CraftChunk implements Chunk {
if (c == null) {
c = worldServer.getChunkAt(x, z);
- if (!(c instanceof EmptyChunk)) {
- weakChunk = new WeakReference<net.minecraft.server.Chunk>(c);
- }
+ weakChunk = new WeakReference<net.minecraft.server.Chunk>(c);
}
return c;
@@ -164,22 +160,16 @@ public class CraftChunk implements Chunk {
sectionEmpty[i] = true;
} else { // Not empty
short[] blockids = new short[4096];
- char[] baseids = cs[i].getIdArray();
- byte[] dataValues = sectionBlockData[i] = new byte[2048];
+
+ byte[] rawIds = new byte[4096];
+ NibbleArray data = new NibbleArray();
+ cs[i].getBlocks().exportData(rawIds, data);
+
+ byte[] dataValues = sectionBlockData[i] = data.asBytes();
// Copy base IDs
for (int j = 0; j < 4096; j++) {
- if (baseids[j] == 0) continue;
- IBlockData blockData = (IBlockData) net.minecraft.server.Block.d.a(baseids[j]);
- if (blockData == null) continue;
- blockids[j] = (short) net.minecraft.server.Block.getId(blockData.getBlock());
- int data = blockData.getBlock().toLegacyData(blockData);
- int jj = j >> 1;
- if ((j & 1) == 0) {
- dataValues[jj] = (byte) ((dataValues[jj] & 0xF0) | (data & 0xF));
- } else {
- dataValues[jj] = (byte) ((dataValues[jj] & 0xF) | ((data & 0xF) << 4));
- }
+ blockids[j] = (short) (rawIds[j] & 0xFF);
}
sectionBlockIDs[i] = blockids;
@@ -188,10 +178,10 @@ public class CraftChunk implements Chunk {
sectionSkyLights[i] = emptyData;
} else {
sectionSkyLights[i] = new byte[2048];
- System.arraycopy(cs[i].getSkyLightArray().a(), 0, sectionSkyLights[i], 0, 2048);
+ System.arraycopy(cs[i].getSkyLightArray().asBytes(), 0, sectionSkyLights[i], 0, 2048);
}
sectionEmitLights[i] = new byte[2048];
- System.arraycopy(cs[i].getEmittedLightArray().a(), 0, sectionEmitLights[i], 0, 2048);
+ System.arraycopy(cs[i].getEmittedLightArray().asBytes(), 0, sectionEmitLights[i], 0, 2048);
}
}
@@ -225,11 +215,13 @@ public class CraftChunk implements Chunk {
biomeTemp[i] = dat[i];
}
+ /* Removed 15w46a
dat = wcm.getWetness(null, getX() << 4, getZ() << 4, 16, 16);
for (int i = 0; i < 256; i++) {
biomeRain[i] = dat[i];
}
+ */
}
}
@@ -261,11 +253,13 @@ public class CraftChunk implements Chunk {
biomeTemp[i] = dat[i];
}
+ /* Removed 15w46a
dat = wcm.getWetness(null, x << 4, z << 4, 16, 16);
for (int i = 0; i < 256; i++) {
biomeRain[i] = dat[i];
}
+ */
}
}
@@ -293,7 +287,7 @@ public class CraftChunk implements Chunk {
float[] temps = new float[biomes.length];
for (int i = 0; i < biomes.length; i++) {
- float temp = biomes[i].temperature; // Vanilla of olde: ((int) biomes[i].temperature * 65536.0F) / 65536.0F
+ float temp = biomes[i].getTemperature(); // Vanilla of olde: ((int) biomes[i].temperature * 65536.0F) / 65536.0F
if (temp > 1F) {
temp = 1F;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java b/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java
index a33f446f..339ae6b7 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java
@@ -1,35 +1,32 @@
package org.bukkit.craftbukkit;
+import net.minecraft.server.EnumItemSlot;
import org.bukkit.inventory.EquipmentSlot;
public class CraftEquipmentSlot {
- private static final int[] slots = new int[EquipmentSlot.values().length];
- private static final EquipmentSlot[] enums = new EquipmentSlot[EquipmentSlot.values().length];
+ private static final EnumItemSlot[] slots = new EnumItemSlot[EquipmentSlot.values().length];
+ private static final EquipmentSlot[] enums = new EquipmentSlot[EnumItemSlot.values().length];
static {
- set(EquipmentSlot.HAND, 0);
- set(EquipmentSlot.FEET, 1);
- set(EquipmentSlot.LEGS, 2);
- set(EquipmentSlot.CHEST, 3);
- set(EquipmentSlot.HEAD, 4);
+ set(EquipmentSlot.HAND, EnumItemSlot.MAINHAND);
+ set(EquipmentSlot.OFF_HAND, EnumItemSlot.OFFHAND);
+ set(EquipmentSlot.FEET, EnumItemSlot.FEET);
+ set(EquipmentSlot.LEGS, EnumItemSlot.LEGS);
+ set(EquipmentSlot.CHEST, EnumItemSlot.CHEST);
+ set(EquipmentSlot.HEAD, EnumItemSlot.HEAD);
}
- private static void set(EquipmentSlot type, int value) {
+ private static void set(EquipmentSlot type, EnumItemSlot value) {
slots[type.ordinal()] = value;
- if (value < enums.length) {
- enums[value] = type;
- }
+ enums[value.ordinal()] = type;
}
- public static EquipmentSlot getSlot(int magic) {
- if (magic > 0 && magic < enums.length) {
- return enums[magic];
- }
- return null;
+ public static EquipmentSlot getSlot(EnumItemSlot nms) {
+ return enums[nms.ordinal()];
}
- public static int getSlotIndex(EquipmentSlot slot) {
+ public static EnumItemSlot getNMS(EquipmentSlot slot) {
return slots[slot.ordinal()];
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftParticle.java b/src/main/java/org/bukkit/craftbukkit/CraftParticle.java
new file mode 100644
index 00000000..9c2540f2
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/CraftParticle.java
@@ -0,0 +1,42 @@
+package org.bukkit.craftbukkit;
+
+import net.minecraft.server.Block;
+import net.minecraft.server.EnumParticle;
+import net.minecraft.server.IBlockData;
+import org.bukkit.Particle;
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.material.MaterialData;
+
+public class CraftParticle {
+
+ public static EnumParticle toNMS(Particle bukkit) {
+ return EnumParticle.valueOf(bukkit.name());
+ }
+
+ public static Particle toBukkit(EnumParticle nms) {
+ return Particle.valueOf(nms.name());
+ }
+
+ public static int[] toData(Particle particle, Object obj) {
+ if (particle.getDataType().equals(Void.class)) {
+ return new int[0];
+ }
+ if (particle.getDataType().equals(ItemStack.class)) {
+ if (obj == null) {
+ return new int[]{0, 0};
+ }
+ ItemStack itemStack = (ItemStack) obj;
+ return new int[]{itemStack.getType().getId(), itemStack.getDurability()};
+ }
+ if (particle.getDataType().equals(MaterialData.class)) {
+ if (obj == null) {
+ return new int[]{0};
+ }
+ MaterialData data = (MaterialData) obj;
+ IBlockData nms = CraftMagicNumbers.getBlock(data.getItemType()).fromLegacyData(data.getData());
+ return new int[]{Block.REGISTRY_ID.getId(nms)};
+ }
+ throw new IllegalArgumentException(particle.getDataType().toString());
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 90064eae..d330226d 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -36,6 +36,10 @@ import org.bukkit.Warning.WarningState;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.WorldCreator;
+import org.bukkit.boss.BarColor;
+import org.bukkit.boss.BarFlag;
+import org.bukkit.boss.BarStyle;
+import org.bukkit.boss.BossBar;
import org.bukkit.command.Command;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
@@ -46,6 +50,7 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.conversations.Conversable;
+import org.bukkit.craftbukkit.boss.CraftBossBar;
import org.bukkit.craftbukkit.command.VanillaCommandWrapper;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.craftbukkit.generator.CraftChunkData;
@@ -74,7 +79,6 @@ import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerChatTabCompleteEvent;
import org.bukkit.event.world.WorldInitEvent;
import org.bukkit.event.world.WorldLoadEvent;
-import org.bukkit.event.world.WorldSaveEvent;
import org.bukkit.event.world.WorldUnloadEvent;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.help.HelpMap;
@@ -188,11 +192,11 @@ public final class CraftServer implements Server {
Bukkit.setServer(this);
// Register all the Enchantments and PotionTypes now so we can stop new registration immediately after
- Enchantment.DAMAGE_ALL.getClass();
+ Enchantments.DAMAGE_ALL.getClass();
org.bukkit.enchantments.Enchantment.stopAcceptingRegistrations();
Potion.setPotionBrewer(new CraftPotionBrewer());
- MobEffectList.BLINDNESS.getClass();
+ MobEffects.BLINDNESS.getClass();
PotionEffectType.stopAcceptingRegistrations();
// Ugly hack :(
@@ -331,7 +335,7 @@ public final class CraftServer implements Server {
}
private void setVanillaCommands() {
- Map<String, ICommand> commands = new CommandDispatcher().getCommands();
+ Map<String, ICommand> commands = new CommandDispatcher(console).getCommands();
for (ICommand cmd : commands.values()) {
commandMap.register("minecraft", new VanillaCommandWrapper((CommandAbstract) cmd, LocaleI18n.get(cmd.getUsage(null))));
}
@@ -467,7 +471,7 @@ public final class CraftServer implements Server {
return playerList.getMaxPlayers();
}
- // NOTE: These are dependent on the corrisponding call in MinecraftServer
+ // NOTE: These are dependent on the corresponding call in MinecraftServer
// so if that changes this will need to as well
@Override
public int getPort() {
@@ -823,7 +827,7 @@ public final class CraftServer implements Server {
generator = getGenerator(name);
}
- Convertable converter = new WorldLoaderServer(getWorldContainer());
+ Convertable converter = new WorldLoaderServer(getWorldContainer(), getHandle().getServer().getDataConverterManager());
if (converter.isConvertable(name)) {
getLogger().info("Converting world '" + name + "'");
converter.convert(name, new IProgressUpdate() {
@@ -856,7 +860,7 @@ public final class CraftServer implements Server {
} while(used);
boolean hardcore = false;
- IDataManager sdm = new ServerNBTManager(getWorldContainer(), name, true);
+ IDataManager sdm = new ServerNBTManager(getWorldContainer(), name, true, getHandle().getServer().getDataConverterManager());
WorldData worlddata = sdm.getWorldData();
if (worlddata == null) {
WorldSettings worldSettings = new WorldSettings(creator.seed(), WorldSettings.EnumGamemode.getById(getDefaultGameMode().getValue()), generateStructures, hardcore, type);
@@ -905,7 +909,7 @@ public final class CraftServer implements Server {
}
BlockPosition chunkcoordinates = internal.getSpawn();
- internal.chunkProviderServer.getChunkAt(chunkcoordinates.getX() + j >> 4, chunkcoordinates.getZ() + k >> 4);
+ internal.getChunkProviderServer().getChunkAt(chunkcoordinates.getX() + j >> 4, chunkcoordinates.getZ() + k >> 4);
}
}
}
@@ -1084,6 +1088,7 @@ public final class CraftServer implements Server {
CraftingManager.getInstance().recipes.clear();
RecipesFurnace.getInstance().recipes.clear();
RecipesFurnace.getInstance().customRecipes.clear();
+ RecipesFurnace.getInstance().customExperience.clear();
}
@Override
@@ -1091,6 +1096,7 @@ public final class CraftServer implements Server {
CraftingManager.getInstance().recipes = new CraftingManager().recipes;
RecipesFurnace.getInstance().recipes = new RecipesFurnace().recipes;
RecipesFurnace.getInstance().customRecipes.clear();
+ RecipesFurnace.getInstance().customExperience.clear();
}
@Override
@@ -1250,7 +1256,7 @@ public final class CraftServer implements Server {
OfflinePlayer result = getPlayerExact(name);
if (result == null) {
// This is potentially blocking :(
- GameProfile profile = MinecraftServer.getServer().getUserCache().getProfile(name);
+ GameProfile profile = console.getUserCache().getProfile(name);
if (profile == null) {
// Make an OfflinePlayer using an offline mode UUID since the name has no profile
result = getOfflinePlayer(new GameProfile(UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)), name));
@@ -1637,6 +1643,11 @@ public final class CraftServer implements Server {
return new CraftChunkData(world);
}
+ @Override
+ public BossBar createBossBar(String title, BarColor color, BarStyle style, BarFlag... flags) {
+ return new CraftBossBar(title, color, style, flags);
+ }
+
@Deprecated
@Override
public UnsafeValues getUnsafe() {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftSound.java b/src/main/java/org/bukkit/craftbukkit/CraftSound.java
index 0cc8f9ba..2c85e1b5 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftSound.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftSound.java
@@ -1,230 +1,25 @@
package org.bukkit.craftbukkit;
-import static org.bukkit.Sound.*;
+import com.google.common.base.Preconditions;
+import net.minecraft.server.MinecraftKey;
+import net.minecraft.server.SoundEffect;
import org.apache.commons.lang.Validate;
import org.bukkit.Sound;
public class CraftSound {
- private static final String[] sounds = new String[Sound.values().length];
- static {
- // Ambient
- set(AMBIENCE_CAVE, "ambient.cave.cave");
- set(AMBIENCE_RAIN, "ambient.weather.rain");
- set(AMBIENCE_THUNDER, "ambient.weather.thunder");
- // Damage
- set(HURT_FLESH, "game.neutral.hurt");
- set(FALL_BIG, "game.neutral.hurt.fall.big");
- set(FALL_SMALL, "game.neutral.hurt.fall.small");
- // Dig Sounds
- set(DIG_WOOL, "dig.cloth");
- set(DIG_GRASS, "dig.grass");
- set(DIG_GRAVEL, "dig.gravel");
- set(DIG_SAND, "dig.sand");
- set(DIG_SNOW, "dig.snow");
- set(DIG_STONE, "dig.stone");
- set(DIG_WOOD, "dig.wood");
- // Fire
- set(FIRE, "fire.fire");
- set(FIRE_IGNITE, "fire.ignite");
- // Fireworks
- set(FIREWORK_BLAST, "fireworks.blast");
- set(FIREWORK_BLAST2, "fireworks.blast_far");
- set(FIREWORK_LARGE_BLAST, "fireworks.largeBlast");
- set(FIREWORK_LARGE_BLAST2, "fireworks.largeBlast_far");
- set(FIREWORK_TWINKLE, "fireworks.twinkle");
- set(FIREWORK_TWINKLE2, "fireworks.twinkle_far");
- set(FIREWORK_LAUNCH, "fireworks.launch");
- // Liquid
- set(SPLASH2, "game.neutral.swim.splash");
- set(SWIM, "game.neutral.swim");
- set(WATER, "liquid.water");
- set(LAVA, "liquid.lava");
- set(LAVA_POP, "liquid.lavapop");
- // Minecart
- set(MINECART_BASE, "minecart.base");
- set(MINECART_INSIDE, "minecart.inside");
- // Mob
- set(BAT_DEATH, "mob.bat.death");
- set(BAT_HURT, "mob.bat.hurt");
- set(BAT_IDLE, "mob.bat.idle");
- set(BAT_LOOP, "mob.bat.loop");
- set(BAT_TAKEOFF, "mob.bat.takeoff");
- set(BLAZE_BREATH, "mob.blaze.breathe");
- set(BLAZE_DEATH, "mob.blaze.death");
- set(BLAZE_HIT, "mob.blaze.hit");
- set(CAT_HISS, "mob.cat.hiss");
- set(CAT_HIT, "mob.cat.hitt");
- set(CAT_MEOW, "mob.cat.meow");
- set(CAT_PURR, "mob.cat.purr");
- set(CAT_PURREOW, "mob.cat.purreow");
- set(CHICKEN_IDLE, "mob.chicken.say");
- set(CHICKEN_HURT, "mob.chicken.hurt");
- set(CHICKEN_EGG_POP, "mob.chicken.plop");
- set(CHICKEN_WALK, "mob.chicken.step");
- set(COW_HURT, "mob.cow.hurt");
- set(COW_IDLE, "mob.cow.say");
- set(COW_WALK, "mob.cow.step");
- set(CREEPER_DEATH, "mob.creeper.death");
- set(CREEPER_HISS, "mob.creeper.say");
- set(ENDERDRAGON_DEATH, "mob.enderdragon.end");
- set(ENDERDRAGON_GROWL, "mob.enderdragon.growl");
- set(ENDERDRAGON_HIT, "mob.enderdragon.hit");
- set(ENDERDRAGON_WINGS, "mob.enderdragon.wings");
- set(ENDERMAN_DEATH, "mob.endermen.death");
- set(ENDERMAN_HIT, "mob.endermen.hit");
- set(ENDERMAN_IDLE, "mob.endermen.idle");
- set(ENDERMAN_TELEPORT, "mob.endermen.portal");
- set(ENDERMAN_SCREAM, "mob.endermen.scream");
- set(ENDERMAN_STARE, "mob.endermen.stare");
- set(GHAST_SCREAM2, "mob.ghast.affectionate_scream");
- set(GHAST_CHARGE, "mob.ghast.charge");
- set(GHAST_DEATH, "mob.ghast.death");
- set(GHAST_FIREBALL, "mob.ghast.fireball");
- set(GHAST_MOAN, "mob.ghast.moan");
- set(GHAST_SCREAM, "mob.ghast.scream");
- set(HORSE_ANGRY, "mob.horse.angry");
- set(HORSE_ARMOR, "mob.horse.armor");
- set(HORSE_BREATHE, "mob.horse.breathe");
- set(HORSE_DEATH, "mob.horse.death");
- set(HORSE_GALLOP, "mob.horse.gallop");
- set(HORSE_HIT, "mob.horse.hit");
- set(HORSE_IDLE, "mob.horse.idle");
- set(HORSE_JUMP, "mob.horse.jump");
- set(HORSE_LAND, "mob.horse.land");
- set(HORSE_SADDLE, "mob.horse.leather");
- set(HORSE_SOFT, "mob.horse.soft");
- set(HORSE_WOOD, "mob.horse.wood");
- set(DONKEY_ANGRY, "mob.horse.donkey.angry");
- set(DONKEY_DEATH, "mob.horse.donkey.death");
- set(DONKEY_HIT, "mob.horse.donkey.hit");
- set(DONKEY_IDLE, "mob.horse.donkey.idle");
- set(HORSE_SKELETON_DEATH, "mob.horse.skeleton.death");
- set(HORSE_SKELETON_HIT, "mob.horse.skeleton.hit");
- set(HORSE_SKELETON_IDLE, "mob.horse.skeleton.idle");
- set(HORSE_ZOMBIE_DEATH, "mob.horse.zombie.death");
- set(HORSE_ZOMBIE_HIT, "mob.horse.zombie.hit");
- set(HORSE_ZOMBIE_IDLE, "mob.horse.zombie.idle");
- set(IRONGOLEM_DEATH, "mob.irongolem.death");
- set(IRONGOLEM_HIT, "mob.irongolem.hit");
- set(IRONGOLEM_THROW, "mob.irongolem.throw");
- set(IRONGOLEM_WALK, "mob.irongolem.walk");
- set(MAGMACUBE_WALK, "mob.magmacube.small");
- set(MAGMACUBE_WALK2, "mob.magmacube.big");
- set(MAGMACUBE_JUMP, "mob.magmacube.jump");
- set(PIG_IDLE, "mob.pig.say");
- set(PIG_DEATH, "mob.pig.death");
- set(PIG_WALK, "mob.pig.step");
- set(SHEEP_IDLE, "mob.sheep.say");
- set(SHEEP_SHEAR, "mob.sheep.shear");
- set(SHEEP_WALK, "mob.sheep.step");
- set(SILVERFISH_HIT, "mob.silverfish.hit");
- set(SILVERFISH_KILL, "mob.silverfish.kill");
- set(SILVERFISH_IDLE, "mob.silverfish.say");
- set(SILVERFISH_WALK, "mob.silverfish.step");
- set(SKELETON_IDLE, "mob.skeleton.say");
- set(SKELETON_DEATH, "mob.skeleton.death");
- set(SKELETON_HURT, "mob.skeleton.hurt");
- set(SKELETON_WALK, "mob.skeleton.step");
- set(SLIME_ATTACK, "mob.slime.attack");
- set(SLIME_WALK, "mob.slime.small");
- set(SLIME_WALK2, "mob.slime.big");
- set(SPIDER_IDLE, "mob.spider.say");
- set(SPIDER_DEATH, "mob.spider.death");
- set(SPIDER_WALK, "mob.spider.step");
- set(VILLAGER_DEATH, "mob.villager.death");
- set(VILLAGER_HAGGLE, "mob.villager.haggle");
- set(VILLAGER_HIT, "mob.villager.hit");
- set(VILLAGER_IDLE, "mob.villager.idle");
- set(VILLAGER_NO, "mob.villager.no");
- set(VILLAGER_YES, "mob.villager.yes");
- set(WITHER_DEATH, "mob.wither.death");
- set(WITHER_HURT, "mob.wither.hurt");
- set(WITHER_IDLE, "mob.wither.idle");
- set(WITHER_SHOOT, "mob.wither.shoot");
- set(WITHER_SPAWN, "mob.wither.spawn");
- set(WOLF_BARK, "mob.wolf.bark");
- set(WOLF_DEATH, "mob.wolf.death");
- set(WOLF_GROWL, "mob.wolf.growl");
- set(WOLF_HOWL, "mob.wolf.howl");
- set(WOLF_HURT, "mob.wolf.hurt");
- set(WOLF_PANT, "mob.wolf.panting");
- set(WOLF_SHAKE, "mob.wolf.shake");
- set(WOLF_WALK, "mob.wolf.step");
- set(WOLF_WHINE, "mob.wolf.whine");
- set(ZOMBIE_METAL, "mob.zombie.metal");
- set(ZOMBIE_WOOD, "mob.zombie.wood");
- set(ZOMBIE_WOODBREAK, "mob.zombie.woodbreak");
- set(ZOMBIE_IDLE, "mob.zombie.say");
- set(ZOMBIE_DEATH, "mob.zombie.death");
- set(ZOMBIE_HURT, "mob.zombie.hurt");
- set(ZOMBIE_INFECT, "mob.zombie.infect");
- set(ZOMBIE_UNFECT, "mob.zombie.unfect");
- set(ZOMBIE_REMEDY, "mob.zombie.remedy");
- set(ZOMBIE_WALK, "mob.zombie.step");
- set(ZOMBIE_PIG_IDLE, "mob.zombiepig.zpig");
- set(ZOMBIE_PIG_ANGRY, "mob.zombiepig.zpigangry");
- set(ZOMBIE_PIG_DEATH, "mob.zombiepig.zpigdeath");
- set(ZOMBIE_PIG_HURT, "mob.zombiepig.zpighurt");
- // Note (blocks)
- set(NOTE_BASS_GUITAR, "note.bassattack");
- set(NOTE_SNARE_DRUM, "note.snare");
- set(NOTE_PLING, "note.pling");
- set(NOTE_BASS, "note.bass");
- set(NOTE_PIANO, "note.harp");
- set(NOTE_BASS_DRUM, "note.bd");
- set(NOTE_STICKS, "note.hat");
- // Portal
- set(PORTAL, "portal.portal");
- set(PORTAL_TRAVEL, "portal.travel");
- set(PORTAL_TRIGGER, "portal.trigger");
- // Random
- set(ANVIL_BREAK, "random.anvil_break");
- set(ANVIL_LAND, "random.anvil_land");
- set(ANVIL_USE, "random.anvil_use");
- set(SHOOT_ARROW, "random.bow");
- set(ARROW_HIT, "random.bowhit");
- set(ITEM_BREAK, "random.break");
- set(BURP, "random.burp");
- set(CHEST_CLOSE, "random.chestclosed");
- set(CHEST_OPEN, "random.chestopen");
- set(CLICK, "random.click");
- set(DOOR_CLOSE, "random.door_close");
- set(DOOR_OPEN, "random.door_open");
- set(DRINK, "random.drink");
- set(EAT, "random.eat");
- set(EXPLODE, "random.explode");
- set(FIZZ, "random.fizz");
- set(FUSE, "creeper.primed");
- set(GLASS, "dig.glass");
- set(LEVEL_UP, "random.levelup");
- set(ORB_PICKUP, "random.orb");
- set(ITEM_PICKUP, "random.pop");
- set(SPLASH, "random.splash");
- set(SUCCESSFUL_HIT, "random.successful_hit");
- set(WOOD_CLICK, "random.wood_click");
- // Step
- set(STEP_WOOL, "step.cloth");
- set(STEP_GRASS, "step.grass");
- set(STEP_GRAVEL, "step.gravel");
- set(STEP_LADDER, "step.ladder");
- set(STEP_SAND, "step.sand");
- set(STEP_SNOW, "step.snow");
- set(STEP_STONE, "step.stone");
- set(STEP_WOOD, "step.wood");
- // Tile
- set(PISTON_EXTEND, "tile.piston.out");
- set(PISTON_RETRACT, "tile.piston.in");
- }
+ public static String getSound(final Sound sound) {
+ Validate.notNull(sound, "Sound cannot be null");
- private static void set(Sound sound, String key) {
- sounds[sound.ordinal()] = key;
+ return sound.name().replace('_', '.').toLowerCase();
}
- public static String getSound(final Sound sound) {
- Validate.notNull(sound, "Sound cannot be null");
- return sounds[sound.ordinal()];
+ public static SoundEffect getSoundEffect(String s) {
+ SoundEffect effect = SoundEffect.a.get(new MinecraftKey(s));
+ Preconditions.checkArgument(effect != null, "Sound effect %s does not exist", s);
+
+ return effect;
}
private CraftSound() {}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java b/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java
index 3341c994..905cebe9 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java
@@ -16,6 +16,7 @@ import com.google.common.collect.ImmutableMap;
import net.minecraft.server.Block;
import net.minecraft.server.Item;
import net.minecraft.server.MinecraftKey;
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
public class CraftStatistic {
private static final BiMap<String, org.bukkit.Statistic> statistics;
@@ -69,24 +70,30 @@ public class CraftStatistic {
}
public static org.bukkit.Statistic getBukkitStatisticByName(String name) {
- if (name.startsWith("stat.killEntity")) {
+ if (name.startsWith("stat.killEntity.")) {
name = "stat.killEntity";
}
- if (name.startsWith("stat.entityKilledBy")) {
+ if (name.startsWith("stat.entityKilledBy.")) {
name = "stat.entityKilledBy";
}
- if (name.startsWith("stat.breakItem")) {
+ if (name.startsWith("stat.breakItem.")) {
name = "stat.breakItem";
}
- if (name.startsWith("stat.useItem")) {
+ if (name.startsWith("stat.useItem.")) {
name = "stat.useItem";
}
- if (name.startsWith("stat.mineBlock")) {
+ if (name.startsWith("stat.mineBlock.")) {
name = "stat.mineBlock";
}
- if (name.startsWith("stat.craftItem")) {
+ if (name.startsWith("stat.craftItem.")) {
name = "stat.craftItem";
}
+ if (name.startsWith("stat.drop.")) {
+ name = "stat.drop";
+ }
+ if (name.startsWith("stat.pickup.")) {
+ name = "stat.pickup";
+ }
return statistics.get(name);
}
@@ -101,16 +108,16 @@ public class CraftStatistic {
public static net.minecraft.server.Statistic getMaterialStatistic(org.bukkit.Statistic stat, Material material) {
try {
if (stat == Statistic.MINE_BLOCK) {
- return StatisticList.MINE_BLOCK_COUNT[material.getId()];
+ return StatisticList.a(CraftMagicNumbers.getBlock(material)); // PAIL: getMineBlockStatistic
}
if (stat == Statistic.CRAFT_ITEM) {
- return StatisticList.CRAFT_BLOCK_COUNT[material.getId()];
+ return StatisticList.a(CraftMagicNumbers.getItem(material)); // PAIL: getCraftItemStatistic
}
if (stat == Statistic.USE_ITEM) {
- return StatisticList.USE_ITEM_COUNT[material.getId()];
+ return StatisticList.b(CraftMagicNumbers.getItem(material)); // PAIL: getUseItemStatistic
}
if (stat == Statistic.BREAK_ITEM) {
- return StatisticList.BREAK_ITEM_COUNT[material.getId()];
+ return StatisticList.c(CraftMagicNumbers.getItem(material)); // PAIL: getBreakItemStatistic
}
} catch (ArrayIndexOutOfBoundsException e) {
return null;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java b/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java
index cae65cf8..1d5dce10 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java
@@ -25,8 +25,6 @@ public class CraftTravelAgent extends PortalTravelAgent implements TravelAgent {
@Override
public Location findOrCreate(Location target) {
WorldServer worldServer = ((CraftWorld) target.getWorld()).getHandle();
- boolean before = worldServer.chunkProviderServer.forceChunkLoad;
- worldServer.chunkProviderServer.forceChunkLoad = true;
Location found = this.findPortal(target);
if (found == null) {
@@ -37,7 +35,6 @@ public class CraftTravelAgent extends PortalTravelAgent implements TravelAgent {
}
}
- worldServer.chunkProviderServer.forceChunkLoad = before;
return found;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index d4c1a123..45b5de6a 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -22,6 +22,7 @@ import org.bukkit.ChunkSnapshot;
import org.bukkit.Difficulty;
import org.bukkit.Effect;
import org.bukkit.Location;
+import org.bukkit.Particle;
import org.bukkit.Sound;
import org.bukkit.TreeType;
import org.bukkit.World;
@@ -45,8 +46,6 @@ import org.bukkit.entity.minecart.PoweredMinecart;
import org.bukkit.entity.minecart.SpawnerMinecart;
import org.bukkit.entity.minecart.StorageMinecart;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
-import org.bukkit.event.weather.ThunderChangeEvent;
-import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.event.world.SpawnChangeEvent;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
@@ -123,7 +122,7 @@ public class CraftWorld implements World {
}
public Chunk getChunkAt(int x, int z) {
- return this.world.chunkProviderServer.getChunkAt(x, z).bukkitChunk;
+ return this.world.getChunkProviderServer().getChunkAt(x, z).bukkitChunk;
}
public Chunk getChunkAt(Block block) {
@@ -131,11 +130,11 @@ public class CraftWorld implements World {
}
public boolean isChunkLoaded(int x, int z) {
- return world.chunkProviderServer.isChunkLoaded(x, z);
+ return world.getChunkProviderServer().isChunkLoaded(x, z);
}
public Chunk[] getLoadedChunks() {
- Object[] chunks = world.chunkProviderServer.chunks.values().toArray();
+ Object[] chunks = world.getChunkProviderServer().chunks.values().toArray();
org.bukkit.Chunk[] craftChunks = new CraftChunk[chunks.length];
for (int i = 0; i < chunks.length; i++) {
@@ -171,7 +170,7 @@ public class CraftWorld implements World {
return false;
}
- world.chunkProviderServer.queueUnload(x, z);
+ world.getChunkProviderServer().queueUnload(x, z);
return true;
}
@@ -181,20 +180,20 @@ public class CraftWorld implements World {
return false;
}
- net.minecraft.server.Chunk chunk = world.chunkProviderServer.getOrCreateChunk(x, z);
+ net.minecraft.server.Chunk chunk = world.getChunkProviderServer().getChunkAt(x, z);
if (chunk.mustSave) { // If chunk had previously been queued to save, must do save to avoid loss of that data
save = true;
}
chunk.removeEntities(); // Always remove entities - even if discarding, need to get them out of world table
- if (save && !(chunk instanceof EmptyChunk)) {
- world.chunkProviderServer.saveChunk(chunk);
- world.chunkProviderServer.saveChunkNOP(chunk);
+ if (save) {
+ world.getChunkProviderServer().saveChunk(chunk);
+ world.getChunkProviderServer().saveChunkNOP(chunk);
}
- world.chunkProviderServer.unloadQueue.remove(x, z);
- world.chunkProviderServer.chunks.remove(LongHash.toLong(x, z));
+ world.getChunkProviderServer().unloadQueue.remove(x, z);
+ world.getChunkProviderServer().chunks.remove(LongHash.toLong(x, z));
return true;
}
@@ -202,15 +201,11 @@ public class CraftWorld implements World {
public boolean regenerateChunk(int x, int z) {
unloadChunk(x, z, false, false);
- world.chunkProviderServer.unloadQueue.remove(x, z);
+ world.getChunkProviderServer().unloadQueue.remove(x, z);
net.minecraft.server.Chunk chunk = null;
- if (world.chunkProviderServer.chunkProvider == null) {
- chunk = world.chunkProviderServer.emptyChunk;
- } else {
- chunk = world.chunkProviderServer.chunkProvider.getOrCreateChunk(x, z);
- }
+ chunk = world.getChunkProviderServer().chunkGenerator.getOrCreateChunk(x, z);
chunkLoadPostProcess(chunk, x, z);
@@ -232,9 +227,9 @@ public class CraftWorld implements World {
// This flags 65 blocks distributed across all the sections of the chunk, so that everything is sent, including biomes
int height = getMaxHeight() / 16;
for (int idx = 0; idx < 64; idx++) {
- world.notify(new BlockPosition(px + (idx / height), ((idx % height) * 16), pz));
+ world.notify(new BlockPosition(px + (idx / height), ((idx % height) * 16), pz), Blocks.AIR.getBlockData(), Blocks.STONE.getBlockData(), 3);
}
- world.notify(new BlockPosition(px + 15, (height * 16) - 1, pz + 15));
+ world.notify(new BlockPosition(px + 15, (height * 16) - 1, pz + 15), Blocks.AIR.getBlockData(), Blocks.STONE.getBlockData(), 3);
return true;
}
@@ -247,23 +242,21 @@ public class CraftWorld implements World {
chunkLoadCount++;
if (generate) {
// Use the default variant of loadChunk when generate == true.
- return world.chunkProviderServer.getChunkAt(x, z) != null;
+ return world.getChunkProviderServer().getChunkAt(x, z) != null;
}
- world.chunkProviderServer.unloadQueue.remove(x, z);
- net.minecraft.server.Chunk chunk = world.chunkProviderServer.chunks.get(LongHash.toLong(x, z));
+ world.getChunkProviderServer().unloadQueue.remove(x, z);
+ net.minecraft.server.Chunk chunk = world.getChunkProviderServer().chunks.get(LongHash.toLong(x, z));
if (chunk == null) {
- chunk = world.chunkProviderServer.loadChunk(x, z);
-
- chunkLoadPostProcess(chunk, x, z);
+ chunk = world.getChunkProviderServer().getOrLoadChunkAt(x, z);
}
return chunk != null;
}
private void chunkLoadPostProcess(net.minecraft.server.Chunk chunk, int cx, int cz) {
if (chunk != null) {
- world.chunkProviderServer.chunks.put(LongHash.toLong(cx, cz), chunk);
+ world.getChunkProviderServer().chunks.put(LongHash.toLong(cx, cz), chunk);
chunk.addEntities();
@@ -274,7 +267,7 @@ public class CraftWorld implements World {
continue;
}
- net.minecraft.server.Chunk neighbor = world.chunkProviderServer.getChunkIfLoaded(chunk.locX + x, chunk.locZ + z);
+ net.minecraft.server.Chunk neighbor = world.getChunkProviderServer().getChunkIfLoaded(chunk.locX + x, chunk.locZ + z);
if (neighbor != null) {
neighbor.setNeighborLoaded(-x, -z);
chunk.setNeighborLoaded(x, z);
@@ -283,7 +276,7 @@ public class CraftWorld implements World {
}
// CraftBukkit end
- chunk.loadNearby(world.chunkProviderServer, world.chunkProviderServer, cx, cz);
+ chunk.loadNearby(world.getChunkProviderServer(), world.getChunkProviderServer().chunkGenerator);
}
}
@@ -351,30 +344,19 @@ public class CraftWorld implements World {
Validate.notNull(loc, "Can not spawn arrow with a null location");
Validate.notNull(velocity, "Can not spawn arrow with a null velocity");
- EntityArrow arrow = new EntityArrow(world);
+ EntityArrow arrow = new EntityTippedArrow(world);
arrow.setPositionRotation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
arrow.shoot(velocity.getX(), velocity.getY(), velocity.getZ(), speed, spread);
world.addEntity(arrow);
return (Arrow) arrow.getBukkitEntity();
}
- @Deprecated
- public LivingEntity spawnCreature(Location loc, CreatureType creatureType) {
- return spawnCreature(loc, creatureType.toEntityType());
- }
-
- @Deprecated
- public LivingEntity spawnCreature(Location loc, EntityType creatureType) {
- Validate.isTrue(creatureType.isAlive(), "EntityType not instance of LivingEntity");
- return (LivingEntity) spawnEntity(loc, creatureType);
- }
-
public Entity spawnEntity(Location loc, EntityType entityType) {
return spawn(loc, entityType.getEntityClass());
}
public LightningStrike strikeLightning(Location loc) {
- EntityLightning lightning = new EntityLightning(world, loc.getX(), loc.getY(), loc.getZ());
+ EntityLightning lightning = new EntityLightning(world, loc.getX(), loc.getY(), loc.getZ(), false);
world.strikeLightning(lightning);
return new CraftLightningStrike(server, lightning);
}
@@ -462,12 +444,12 @@ public class CraftWorld implements World {
int y = blockstate.getY();
int z = blockstate.getZ();
BlockPosition position = new BlockPosition(x, y, z);
- net.minecraft.server.Block oldBlock = world.getType(position).getBlock();
+ net.minecraft.server.IBlockData oldBlock = world.getType(position);
int typeId = blockstate.getTypeId();
int data = blockstate.getRawData();
int flag = ((CraftBlockState)blockstate).getFlag();
delegate.setTypeIdAndData(x, y, z, typeId, data);
- net.minecraft.server.Block newBlock = world.getType(position).getBlock();
+ net.minecraft.server.IBlockData newBlock = world.getType(position);
world.notifyAndUpdatePhysics(position, null, oldBlock, newBlock, flag);
}
world.capturedBlockStates.clear();
@@ -555,7 +537,17 @@ public class CraftWorld implements World {
public void setEnvironment(Environment env) {
if (environment != env) {
environment = env;
- world.worldProvider = WorldProvider.byDimension(environment.getId());
+ switch (env) {
+ case NORMAL:
+ world.worldProvider = new WorldProviderNormal();
+ break;
+ case NETHER:
+ world.worldProvider = new WorldProviderHell();
+ break;
+ case THE_END:
+ world.worldProvider = new WorldProviderTheEnd();
+ break;
+ }
}
}
@@ -602,17 +594,17 @@ public class CraftWorld implements World {
if (chunk != null) {
byte[] biomevals = chunk.getBiomeIndex();
- biomevals[((z & 0xF) << 4) | (x & 0xF)] = (byte)bb.id;
+ biomevals[((z & 0xF) << 4) | (x & 0xF)] = (byte) BiomeBase.REGISTRY_ID.a(bb);
}
}
}
public double getTemperature(int x, int z) {
- return this.world.getBiome(new BlockPosition(x, 0, z)).temperature;
+ return this.world.getBiome(new BlockPosition(x, 0, z)).getTemperature();
}
public double getHumidity(int x, int z) {
- return this.world.getBiome(new BlockPosition(x, 0, z)).humidity;
+ return this.world.getBiome(new BlockPosition(x, 0, z)).getHumidity();
}
public List<Entity> getEntities() {
@@ -911,7 +903,7 @@ public class CraftWorld implements World {
} else if (Egg.class.isAssignableFrom(clazz)) {
entity = new EntityEgg(world, x, y, z);
} else if (Arrow.class.isAssignableFrom(clazz)) {
- entity = new EntityArrow(world);
+ entity = new EntityTippedArrow(world);
entity.setPositionRotation(x, y, z, 0, 0);
} else if (ThrownExpBottle.class.isAssignableFrom(clazz)) {
entity = new EntityThrownExpBottle(world);
@@ -926,12 +918,17 @@ public class CraftWorld implements World {
entity = new EntitySmallFireball(world);
} else if (WitherSkull.class.isAssignableFrom(clazz)) {
entity = new EntityWitherSkull(world);
- } else {
+ } else if (DragonFireball.class.isAssignableFrom(clazz)){
+ entity = new EntityDragonFireball(world);
+ }else{
entity = new EntityLargeFireball(world);
}
entity.setPositionRotation(x, y, z, yaw, pitch);
Vector direction = location.getDirection().multiply(10);
((EntityFireball) entity).setDirection(direction.getX(), direction.getY(), direction.getZ());
+ } else if (ShulkerBullet.class.isAssignableFrom(clazz)) {
+ entity = new EntityShulkerBullet(world);
+ entity.setPositionRotation(x, y, z, yaw, pitch);
}
} else if (Minecart.class.isAssignableFrom(clazz)) {
if (PoweredMinecart.class.isAssignableFrom(clazz)) {
@@ -966,6 +963,8 @@ public class CraftWorld implements World {
entity = new EntitySnowman(world);
} else if (IronGolem.class.isAssignableFrom(clazz)) {
entity = new EntityIronGolem(world);
+ } else if (Shulker.class.isAssignableFrom(clazz)) {
+ entity = new EntityShulker(world);
}
} else if (Creeper.class.isAssignableFrom(clazz)) {
entity = new EntityCreeper(world);
@@ -1059,9 +1058,9 @@ public class CraftWorld implements World {
final BlockPosition pos = new BlockPosition((int) x, (int) y, (int) z);
for (BlockFace dir : faces) {
net.minecraft.server.Block nmsBlock = CraftMagicNumbers.getBlock(block.getRelative(dir));
- if (nmsBlock.getMaterial().isBuildable() || BlockDiodeAbstract.d(nmsBlock)) {
+ if (nmsBlock.getBlockData().getMaterial().isBuildable() || BlockDiodeAbstract.isDiode(nmsBlock.getBlockData())) {
boolean taken = false;
- AxisAlignedBB bb = EntityHanging.calculateBoundingBox(pos,CraftBlock.blockFaceToNotch(dir).opposite(),width,height);
+ AxisAlignedBB bb = EntityHanging.calculateBoundingBox(null, pos,CraftBlock.blockFaceToNotch(dir).opposite(),width,height);
List<net.minecraft.server.Entity> list = (List<net.minecraft.server.Entity>) world.getEntities(null, bb);
for (Iterator<net.minecraft.server.Entity> it = list.iterator(); !taken && it.hasNext();) {
net.minecraft.server.Entity e = it.next();
@@ -1098,11 +1097,13 @@ public class CraftWorld implements World {
} else if (Weather.class.isAssignableFrom(clazz)) {
// not sure what this can do
if (LightningStrike.class.isAssignableFrom(clazz)) {
- entity = new EntityLightning(world, x, y, z);
+ entity = new EntityLightning(world, x, y, z, false);
// what is this, I don't even
}
} else if (Firework.class.isAssignableFrom(clazz)) {
entity = new EntityFireworks(world, x, y, z, null);
+ } else if (AreaEffectCloud.class.isAssignableFrom(clazz)) {
+ entity = new EntityAreaEffectCloud(world, x, y, z);
}
if (entity != null) {
@@ -1117,7 +1118,7 @@ public class CraftWorld implements World {
Preconditions.checkArgument(entity != null, "Cannot spawn null entity");
if (entity instanceof EntityInsentient) {
- ((EntityInsentient) entity).prepare(getHandle().E(new BlockPosition(entity)), (GroupDataEntity) null);
+ ((EntityInsentient) entity).prepare(getHandle().D(new BlockPosition(entity)), (GroupDataEntity) null);
}
world.addEntity(entity, reason);
@@ -1171,11 +1172,7 @@ public class CraftWorld implements World {
loadChunk(chunkCoordX + x, chunkCoordZ + z);
} else {
if (isChunkLoaded(chunkCoordX + x, chunkCoordZ + z)) {
- if (this.getHandle().getChunkAt(chunkCoordX + x, chunkCoordZ + z) instanceof EmptyChunk) {
- unloadChunk(chunkCoordX + x, chunkCoordZ + z, false);
- } else {
- unloadChunk(chunkCoordX + x, chunkCoordZ + z);
- }
+ unloadChunk(chunkCoordX + x, chunkCoordZ + z);
}
}
}
@@ -1319,7 +1316,7 @@ public class CraftWorld implements World {
double y = loc.getY();
double z = loc.getZ();
- getHandle().makeSound(x, y, z, CraftSound.getSound(sound), volume, pitch);
+ getHandle().a(null, x, y, z, CraftSound.getSoundEffect(CraftSound.getSound(sound)), SoundCategory.MASTER, volume, pitch); // PAIL: rename
}
public String getGameRuleValue(String rule) {
@@ -1353,6 +1350,80 @@ public class CraftWorld implements World {
return this.worldBorder;
}
+ @Override
+ public void spawnParticle(Particle particle, Location location, int count) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, double x, double y, double z, int count) {
+ spawnParticle(particle, x, y, z, count, null);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, Location location, int count, T data) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, data);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, T data) {
+ spawnParticle(particle, x, y, z, count, 0, 0, 0);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, double offsetZ) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, offsetX, offsetY, offsetZ);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ) {
+ spawnParticle(particle, x, y, z, count, offsetX, offsetY, offsetZ, null);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, double offsetZ, T data) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, offsetX, offsetY, offsetZ, data);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, T data) {
+ spawnParticle(particle, x, y, z, count, offsetX, offsetY, offsetZ, 1, data);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, double offsetZ, double extra) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, offsetX, offsetY, offsetZ, extra);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra) {
+ spawnParticle(particle, x, y, z, count, offsetX, offsetY, offsetZ, extra, null);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, double offsetZ, double extra, T data) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, offsetX, offsetY, offsetZ, extra, data);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data) {
+ if (data != null && !particle.getDataType().isInstance(data)) {
+ throw new IllegalArgumentException("data should be " + particle.getDataType() + " got " + data.getClass());
+ }
+ getHandle().sendParticles(
+ null, // Sender
+ CraftParticle.toNMS(particle), // Particle
+ true, // Extended range
+ x, y, z, // Position
+ count, // Count
+ offsetX, offsetY, offsetZ, // Random offset
+ extra, // Speed?
+ CraftParticle.toData(particle, data)
+
+ );
+
+ }
+
public void processChunkGC() {
chunkGCTickCount++;
@@ -1364,7 +1435,7 @@ public class CraftWorld implements World {
return;
}
- ChunkProviderServer cps = world.chunkProviderServer;
+ ChunkProviderServer cps = world.getChunkProviderServer();
for (net.minecraft.server.Chunk chunk : cps.chunks.values()) {
// If in use, skip it
if (isChunkInUse(chunk.locX, chunk.locZ)) {
diff --git a/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeInstance.java b/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeInstance.java
new file mode 100644
index 00000000..1ed4aa94
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeInstance.java
@@ -0,0 +1,70 @@
+package org.bukkit.craftbukkit.attribute;
+
+import com.google.common.base.Preconditions;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeInstance;
+import org.bukkit.attribute.AttributeModifier;
+
+public class CraftAttributeInstance implements AttributeInstance {
+
+ private final net.minecraft.server.AttributeInstance handle;
+ private final Attribute attribute;
+
+ public CraftAttributeInstance(net.minecraft.server.AttributeInstance handle, Attribute attribute) {
+ this.handle = handle;
+ this.attribute = attribute;
+ }
+
+ @Override
+ public Attribute getAttribute() {
+ return attribute;
+ }
+
+ @Override
+ public double getBaseValue() {
+ return handle.b();
+ }
+
+ @Override
+ public void setBaseValue(double d) {
+ handle.setValue(d);
+ }
+
+ @Override
+ public Collection<AttributeModifier> getModifiers() {
+ List<AttributeModifier> result = new ArrayList<AttributeModifier>();
+ for (net.minecraft.server.AttributeModifier nms : handle.c()) {
+ result.add(convert(nms));
+ }
+
+ return result;
+ }
+
+ @Override
+ public void addModifier(AttributeModifier modifier) {
+ Preconditions.checkArgument(modifier != null, "modifier");
+ handle.b(convert(modifier));
+ }
+
+ @Override
+ public void removeModifier(AttributeModifier modifier) {
+ Preconditions.checkArgument(modifier != null, "modifier");
+ handle.c(convert(modifier));
+ }
+
+ @Override
+ public double getValue() {
+ return handle.getValue();
+ }
+
+ private static net.minecraft.server.AttributeModifier convert(AttributeModifier bukkit) {
+ return new net.minecraft.server.AttributeModifier(bukkit.getUniqueId(), bukkit.getName(), bukkit.getAmount(), bukkit.getOperation().ordinal());
+ }
+
+ private static AttributeModifier convert(net.minecraft.server.AttributeModifier nms) {
+ return new AttributeModifier(nms.a(), nms.b(), nms.d(), AttributeModifier.Operation.values()[nms.c()]);
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeMap.java b/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeMap.java
new file mode 100644
index 00000000..0412470b
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeMap.java
@@ -0,0 +1,37 @@
+package org.bukkit.craftbukkit.attribute;
+
+import com.google.common.base.Preconditions;
+import net.minecraft.server.AttributeMapBase;
+import org.bukkit.attribute.Attributable;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeInstance;
+
+public class CraftAttributeMap implements Attributable {
+
+ private final AttributeMapBase handle;
+
+ public CraftAttributeMap(AttributeMapBase handle) {
+ this.handle = handle;
+ }
+
+ @Override
+ public AttributeInstance getAttribute(Attribute attribute) {
+ Preconditions.checkArgument(attribute != null, "attribute");
+ net.minecraft.server.AttributeInstance nms = handle.a(toMinecraft(attribute.name()));
+
+ return (nms == null) ? null : new CraftAttributeInstance(nms, attribute);
+ }
+
+ static String toMinecraft(String bukkit) {
+ int first = bukkit.indexOf('_');
+ int second = bukkit.indexOf('_', first + 1);
+
+ StringBuilder sb = new StringBuilder(bukkit.toLowerCase());
+
+ sb.setCharAt(first, '.');
+ sb.deleteCharAt(second);
+ sb.setCharAt(second, bukkit.charAt(second + 1));
+
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index 22a80551..dc258975 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -29,8 +29,6 @@ public class CraftBlock implements Block {
private final int x;
private final int y;
private final int z;
- private static final Biome BIOME_MAPPING[];
- private static final BiomeBase BIOMEBASE_MAPPING[];
public CraftBlock(CraftChunk chunk, int x, int y, int z) {
this.x = x;
@@ -107,6 +105,10 @@ public class CraftBlock implements Block {
world.setTypeAndData(position, blockData.getBlock().fromLegacyData(data), flag);
}
+ private IBlockData getData0() {
+ return chunk.getHandle().getBlockData(new BlockPosition(x, y, z));
+ }
+
public byte getData() {
IBlockData blockData = chunk.getHandle().getBlockData(new BlockPosition(x, y, z));
return (byte) blockData.getBlock().toLegacyData(blockData);
@@ -136,9 +138,15 @@ public class CraftBlock implements Block {
if (applyPhysics) {
return chunk.getHandle().getWorld().setTypeAndData(position, blockData, 3);
} else {
+ IBlockData old = chunk.getHandle().getBlockData(position);
boolean success = chunk.getHandle().getWorld().setTypeAndData(position, blockData, 2);
if (success) {
- chunk.getHandle().getWorld().notify(position);
+ chunk.getHandle().getWorld().notify(
+ position,
+ old,
+ blockData,
+ 3
+ );
}
return success;
}
@@ -151,7 +159,7 @@ public class CraftBlock implements Block {
@Deprecated
@Override
public int getTypeId() {
- return CraftMagicNumbers.getId(chunk.getHandle().getType(new BlockPosition(this.x, this.y, this.z)));
+ return CraftMagicNumbers.getId(chunk.getHandle().getBlockData(new BlockPosition(this.x, this.y, this.z)).getBlock());
}
public byte getLightLevel() {
@@ -302,14 +310,15 @@ public class CraftBlock implements Block {
return null;
}
- return BIOME_MAPPING[base.id];
+ return Biome.valueOf(BiomeBase.REGISTRY_ID.b(base).a().toUpperCase());
}
public static BiomeBase biomeToBiomeBase(Biome bio) {
if (bio == null) {
return null;
}
- return BIOMEBASE_MAPPING[bio.ordinal()];
+
+ return BiomeBase.REGISTRY_ID.get(new MinecraftKey(bio.name().toLowerCase()));
}
public double getTemperature() {
@@ -383,13 +392,13 @@ public class CraftBlock implements Block {
}
public PistonMoveReaction getPistonMoveReaction() {
- return PistonMoveReaction.getById(getNMSBlock().getMaterial().getPushReaction());
+ return PistonMoveReaction.getById(getNMSBlock().getBlockData().getMaterial().getPushReaction().ordinal());
}
private boolean itemCausesDrops(ItemStack item) {
net.minecraft.server.Block block = this.getNMSBlock();
net.minecraft.server.Item itemType = item != null ? net.minecraft.server.Item.getById(item.getTypeId()) : null;
- return block != null && (block.getMaterial().isAlwaysDestroyable() || (itemType != null && itemType.canDestroySpecialBlock(block)));
+ return block != null && (block.getBlockData().getMaterial().isAlwaysDestroyable() || (itemType != null && itemType.canDestroySpecialBlock(block.getBlockData())));
}
public boolean breakNaturally() {
@@ -420,15 +429,15 @@ public class CraftBlock implements Block {
net.minecraft.server.Block block = this.getNMSBlock();
if (block != Blocks.AIR) {
- byte data = getData();
+ IBlockData data = getData0();
// based on nms.Block.dropNaturally
int count = block.getDropCount(0, chunk.getHandle().getWorld().random);
for (int i = 0; i < count; ++i) {
- Item item = block.getDropType(block.fromLegacyData(data), chunk.getHandle().getWorld().random, 0);
+ Item item = block.getDropType(data, chunk.getHandle().getWorld().random, 0);
if (item != null) {
// Skulls are special, their data is based on the tile entity
if (Blocks.SKULL == block) {
- net.minecraft.server.ItemStack nmsStack = new net.minecraft.server.ItemStack(item, 1, block.getDropData(chunk.getHandle().getWorld(), new BlockPosition(x, y, z)));
+ net.minecraft.server.ItemStack nmsStack = new net.minecraft.server.ItemStack(item, 1, block.getDropData(data));
TileEntitySkull tileentityskull = (TileEntitySkull) chunk.getHandle().getWorld().getTileEntity(new BlockPosition(x, y, z));
if (tileentityskull.getSkullType() == 3 && tileentityskull.getGameProfile() != null) {
@@ -442,13 +451,13 @@ public class CraftBlock implements Block {
drops.add(CraftItemStack.asBukkitCopy(nmsStack));
// We don't want to drop cocoa blocks, we want to drop cocoa beans.
} else if (Blocks.COCOA == block) {
- int age = (Integer) block.fromLegacyData(data).get(BlockCocoa.AGE);
+ int age = (Integer) data.get(BlockCocoa.AGE);
int dropAmount = (age >= 2 ? 3 : 1);
for (int j = 0; j < dropAmount; ++j) {
drops.add(new ItemStack(Material.INK_SACK, 1, (short) 3));
}
} else {
- drops.add(new ItemStack(org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(item), 1, (short) block.getDropData(block.fromLegacyData(data))));
+ drops.add(new ItemStack(org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(item), 1, (short) block.getDropData(data)));
}
}
}
@@ -464,86 +473,6 @@ public class CraftBlock implements Block {
}
}
- /* Build biome index based lookup table for BiomeBase to Biome mapping */
- static {
- BIOME_MAPPING = new Biome[BiomeBase.getBiomes().length];
- BIOMEBASE_MAPPING = new BiomeBase[Biome.values().length];
- BIOME_MAPPING[BiomeBase.OCEAN.id] = Biome.OCEAN;
- BIOME_MAPPING[BiomeBase.PLAINS.id] = Biome.PLAINS;
- BIOME_MAPPING[BiomeBase.DESERT.id] = Biome.DESERT;
- BIOME_MAPPING[BiomeBase.EXTREME_HILLS.id] = Biome.EXTREME_HILLS;
- BIOME_MAPPING[BiomeBase.FOREST.id] = Biome.FOREST;
- BIOME_MAPPING[BiomeBase.TAIGA.id] = Biome.TAIGA;
- BIOME_MAPPING[BiomeBase.SWAMPLAND.id] = Biome.SWAMPLAND;
- BIOME_MAPPING[BiomeBase.RIVER.id] = Biome.RIVER;
- BIOME_MAPPING[BiomeBase.HELL.id] = Biome.HELL;
- BIOME_MAPPING[BiomeBase.SKY.id] = Biome.SKY;
- BIOME_MAPPING[BiomeBase.FROZEN_OCEAN.id] = Biome.FROZEN_OCEAN;
- BIOME_MAPPING[BiomeBase.FROZEN_RIVER.id] = Biome.FROZEN_RIVER;
- BIOME_MAPPING[BiomeBase.ICE_PLAINS.id] = Biome.ICE_PLAINS;
- BIOME_MAPPING[BiomeBase.ICE_MOUNTAINS.id] = Biome.ICE_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.MUSHROOM_ISLAND.id] = Biome.MUSHROOM_ISLAND;
- BIOME_MAPPING[BiomeBase.MUSHROOM_SHORE.id] = Biome.MUSHROOM_SHORE;
- BIOME_MAPPING[BiomeBase.BEACH.id] = Biome.BEACH;
- BIOME_MAPPING[BiomeBase.DESERT_HILLS.id] = Biome.DESERT_HILLS;
- BIOME_MAPPING[BiomeBase.FOREST_HILLS.id] = Biome.FOREST_HILLS;
- BIOME_MAPPING[BiomeBase.TAIGA_HILLS.id] = Biome.TAIGA_HILLS;
- BIOME_MAPPING[BiomeBase.SMALL_MOUNTAINS.id] = Biome.SMALL_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.JUNGLE.id] = Biome.JUNGLE;
- BIOME_MAPPING[BiomeBase.JUNGLE_HILLS.id] = Biome.JUNGLE_HILLS;
- BIOME_MAPPING[BiomeBase.JUNGLE_EDGE.id] = Biome.JUNGLE_EDGE;
- BIOME_MAPPING[BiomeBase.DEEP_OCEAN.id] = Biome.DEEP_OCEAN;
- BIOME_MAPPING[BiomeBase.STONE_BEACH.id] = Biome.STONE_BEACH;
- BIOME_MAPPING[BiomeBase.COLD_BEACH.id] = Biome.COLD_BEACH;
- BIOME_MAPPING[BiomeBase.BIRCH_FOREST.id] = Biome.BIRCH_FOREST;
- BIOME_MAPPING[BiomeBase.BIRCH_FOREST_HILLS.id] = Biome.BIRCH_FOREST_HILLS;
- BIOME_MAPPING[BiomeBase.ROOFED_FOREST.id] = Biome.ROOFED_FOREST;
- BIOME_MAPPING[BiomeBase.COLD_TAIGA.id] = Biome.COLD_TAIGA;
- BIOME_MAPPING[BiomeBase.COLD_TAIGA_HILLS.id] = Biome.COLD_TAIGA_HILLS;
- BIOME_MAPPING[BiomeBase.MEGA_TAIGA.id] = Biome.MEGA_TAIGA;
- BIOME_MAPPING[BiomeBase.MEGA_TAIGA_HILLS.id] = Biome.MEGA_TAIGA_HILLS;
- BIOME_MAPPING[BiomeBase.EXTREME_HILLS_PLUS.id] = Biome.EXTREME_HILLS_PLUS;
- BIOME_MAPPING[BiomeBase.SAVANNA.id] = Biome.SAVANNA;
- BIOME_MAPPING[BiomeBase.SAVANNA_PLATEAU.id] = Biome.SAVANNA_PLATEAU;
- BIOME_MAPPING[BiomeBase.MESA.id] = Biome.MESA;
- BIOME_MAPPING[BiomeBase.MESA_PLATEAU_F.id] = Biome.MESA_PLATEAU_FOREST;
- BIOME_MAPPING[BiomeBase.MESA_PLATEAU.id] = Biome.MESA_PLATEAU;
-
- // Extended Biomes
- BIOME_MAPPING[BiomeBase.PLAINS.id + 128] = Biome.SUNFLOWER_PLAINS;
- BIOME_MAPPING[BiomeBase.DESERT.id + 128] = Biome.DESERT_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.FOREST.id + 128] = Biome.FLOWER_FOREST;
- BIOME_MAPPING[BiomeBase.TAIGA.id + 128] = Biome.TAIGA_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.SWAMPLAND.id + 128] = Biome.SWAMPLAND_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.ICE_PLAINS.id + 128] = Biome.ICE_PLAINS_SPIKES;
- BIOME_MAPPING[BiomeBase.JUNGLE.id + 128] = Biome.JUNGLE_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.JUNGLE_EDGE.id + 128] = Biome.JUNGLE_EDGE_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.COLD_TAIGA.id + 128] = Biome.COLD_TAIGA_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.SAVANNA.id + 128] = Biome.SAVANNA_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.SAVANNA_PLATEAU.id + 128] = Biome.SAVANNA_PLATEAU_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.MESA.id + 128] = Biome.MESA_BRYCE;
- BIOME_MAPPING[BiomeBase.MESA_PLATEAU_F.id + 128] = Biome.MESA_PLATEAU_FOREST_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.MESA_PLATEAU.id + 128] = Biome.MESA_PLATEAU_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.BIRCH_FOREST.id + 128] = Biome.BIRCH_FOREST_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.BIRCH_FOREST_HILLS.id + 128] = Biome.BIRCH_FOREST_HILLS_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.ROOFED_FOREST.id + 128] = Biome.ROOFED_FOREST_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.MEGA_TAIGA.id + 128] = Biome.MEGA_SPRUCE_TAIGA;
- BIOME_MAPPING[BiomeBase.EXTREME_HILLS.id + 128] = Biome.EXTREME_HILLS_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.EXTREME_HILLS_PLUS.id + 128] = Biome.EXTREME_HILLS_PLUS_MOUNTAINS;
- BIOME_MAPPING[BiomeBase.MEGA_TAIGA_HILLS.id + 128] = Biome.MEGA_SPRUCE_TAIGA_HILLS;
-
- /* Sanity check - we should have a record for each record in the BiomeBase.a table */
- /* Helps avoid missed biomes when we upgrade bukkit to new code with new biomes */
- for (int i = 0; i < BIOME_MAPPING.length; i++) {
- if ((BiomeBase.getBiome(i) != null) && (BIOME_MAPPING[i] == null)) {
- throw new IllegalArgumentException("Missing Biome mapping for BiomeBase[" + i + ", " + BiomeBase.getBiome(i) + "]");
- }
- if (BIOME_MAPPING[i] != null) { /* Build reverse mapping for setBiome */
- BIOMEBASE_MAPPING[BIOME_MAPPING[i].ordinal()] = BiomeBase.getBiome(i);
- }
- }
- }
-
public void setMetadata(String metadataKey, MetadataValue newMetadataValue) {
chunk.getCraftWorld().getBlockMetadata().setMetadata(this, metadataKey, newMetadataValue);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
index 4a8c8141..7da6218b 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
@@ -9,6 +9,7 @@ import org.bukkit.World;
import org.bukkit.block.BlockState;
import org.bukkit.craftbukkit.CraftChunk;
import org.bukkit.craftbukkit.CraftWorld;
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.material.MaterialData;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin;
@@ -159,7 +160,12 @@ public class CraftBlockState implements BlockState {
}
block.setTypeIdAndData(getTypeId(), getRawData(), applyPhysics);
- world.getHandle().notify(new BlockPosition(x, y, z));
+ world.getHandle().notify(
+ new BlockPosition(x, y, z),
+ CraftMagicNumbers.getBlock(block).fromLegacyData(block.getData()),
+ CraftMagicNumbers.getBlock(getType()).fromLegacyData(getRawData()),
+ 3
+ );
return true;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java
index a910da2b..b3f9c64e 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java
@@ -38,15 +38,25 @@ public class CraftBrewingStand extends CraftBlockState implements BrewingStand {
}
public int getBrewingTime() {
- return brewingStand.brewTime;
+ return brewingStand.getProperty(0);
}
public void setBrewingTime(int brewTime) {
- brewingStand.brewTime = brewTime;
+ brewingStand.setProperty(0, brewTime);
}
@Override
public TileEntityBrewingStand getTileEntity() {
return brewingStand;
}
+
+ @Override
+ public int getFuelLevel() {
+ return brewingStand.getProperty(1);
+ }
+
+ @Override
+ public void setFuelLevel(int level) {
+ brewingStand.setProperty(1, level);
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java b/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java
index 697cd91c..2472dc66 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java
@@ -6,7 +6,6 @@ import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.entity.CreatureType;
import org.bukkit.entity.EntityType;
public class CraftCreatureSpawner extends CraftBlockState implements CreatureSpawner {
@@ -23,20 +22,10 @@ public class CraftCreatureSpawner extends CraftBlockState implements CreatureSpa
spawner = te;
}
- @Deprecated
- public CreatureType getCreatureType() {
- return CreatureType.fromName(spawner.getSpawner().getMobName());
- }
-
public EntityType getSpawnedType() {
return EntityType.fromName(spawner.getSpawner().getMobName());
}
- @Deprecated
- public void setCreatureType(CreatureType creatureType) {
- spawner.getSpawner().setMobName(creatureType.getName());
- }
-
public void setSpawnedType(EntityType entityType) {
if (entityType == null || entityType.getName() == null) {
throw new IllegalArgumentException("Can't spawn EntityType " + entityType + " from mobspawners!");
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java b/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java
index e58aabca..f17fb6f7 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java
@@ -38,19 +38,19 @@ public class CraftFurnace extends CraftBlockState implements Furnace {
}
public short getBurnTime() {
- return (short) furnace.burnTime;
+ return (short) furnace.getProperty(0);
}
public void setBurnTime(short burnTime) {
- furnace.burnTime = burnTime;
+ furnace.setProperty(0, burnTime);
}
public short getCookTime() {
- return (short) furnace.cookTime;
+ return (short) furnace.getProperty(2);
}
public void setCookTime(short cookTime) {
- furnace.cookTime = cookTime;
+ furnace.setProperty(2, cookTime);
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/boss/CraftBossBar.java b/src/main/java/org/bukkit/craftbukkit/boss/CraftBossBar.java
new file mode 100644
index 00000000..2f63796a
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/boss/CraftBossBar.java
@@ -0,0 +1,165 @@
+package org.bukkit.craftbukkit.boss;
+
+import com.google.common.collect.ImmutableList;
+import net.minecraft.server.BossBattle;
+import net.minecraft.server.BossBattleServer;
+import net.minecraft.server.EntityPlayer;
+import net.minecraft.server.PacketPlayOutBoss;
+import org.bukkit.boss.BarColor;
+import org.bukkit.boss.BarFlag;
+import org.bukkit.boss.BarStyle;
+import org.bukkit.boss.BossBar;
+import org.bukkit.craftbukkit.entity.CraftPlayer;
+import org.bukkit.craftbukkit.util.CraftChatMessage;
+import org.bukkit.entity.Player;
+
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Set;
+
+public class CraftBossBar implements BossBar {
+
+ private final BossBattleServer handle;
+ private final Set<BarFlag> flags;
+ private BarColor color;
+ private BarStyle style;
+
+ public CraftBossBar(String title, BarColor color, BarStyle style, BarFlag... flags) {
+ this.flags = flags.length > 0 ? EnumSet.of(flags[0], flags) : EnumSet.noneOf(BarFlag.class);
+ this.color = color;
+ this.style = style;
+
+ handle = new BossBattleServer(
+ CraftChatMessage.fromString(title, true)[0],
+ convertColor(color),
+ convertStyle(style)
+ );
+
+ updateFlags();
+ }
+
+ private BossBattle.BarColor convertColor(BarColor color) {
+ BossBattle.BarColor nmsColor = BossBattle.BarColor.valueOf(color.name());
+ return (nmsColor == null) ? BossBattle.BarColor.WHITE : nmsColor;
+ }
+
+ private BossBattle.BarStyle convertStyle(BarStyle style) {
+ switch (style) {
+ default:
+ case SOLID:
+ return BossBattle.BarStyle.PROGRESS;
+ case SEGMENTED_6:
+ return BossBattle.BarStyle.NOTCHED_6;
+ case SEGMENTED_10:
+ return BossBattle.BarStyle.NOTCHED_10;
+ case SEGMENTED_12:
+ return BossBattle.BarStyle.NOTCHED_12;
+ case SEGMENTED_20:
+ return BossBattle.BarStyle.NOTCHED_20;
+ }
+ }
+
+ private void updateFlags() {
+ handle.a(hasFlag(BarFlag.DARKEN_SKY));
+ handle.b(hasFlag(BarFlag.PLAY_BOSS_MUSIC));
+ handle.c(hasFlag(BarFlag.CREATE_FOG));
+ }
+
+ @Override
+ public String getTitle() {
+ return CraftChatMessage.fromComponent(handle.e());
+ }
+
+ @Override
+ public void setTitle(String title) {
+ handle.title = CraftChatMessage.fromString(title, true)[0];
+ handle.sendUpdate(PacketPlayOutBoss.Action.UPDATE_NAME);
+ }
+
+ @Override
+ public BarColor getColor() {
+ return color;
+ }
+
+ @Override
+ public void setColor(BarColor color) {
+ this.color = color;
+ handle.color = convertColor(color);
+ handle.sendUpdate(PacketPlayOutBoss.Action.UPDATE_STYLE);
+ }
+
+ @Override
+ public BarStyle getStyle() {
+ return style;
+ }
+
+ @Override
+ public void setStyle(BarStyle style) {
+ this.style = style;
+ handle.style = convertStyle(style);
+ handle.sendUpdate(PacketPlayOutBoss.Action.UPDATE_STYLE);
+ }
+
+ @Override
+ public void addFlag(BarFlag flag) {
+ flags.remove(flag);
+ updateFlags();
+ }
+
+ @Override
+ public void removeFlag(BarFlag flag) {
+ flags.add(flag);
+ updateFlags();
+ }
+
+ @Override
+ public boolean hasFlag(BarFlag flag) {
+ return flags.contains(flag);
+ }
+
+ @Override
+ public void setProgress(double progress) {
+ handle.setProgress((float) progress);
+ }
+
+ @Override
+ public double getProgress() {
+ return handle.getProgress();
+ }
+
+ @Override
+ public void addPlayer(Player player) {
+ handle.addPlayer(((CraftPlayer) player).getHandle());
+ }
+
+ @Override
+ public void removePlayer(Player player) {
+ handle.removePlayer(((CraftPlayer) player).getHandle());
+ }
+
+ @Override
+ public List<Player> getPlayers() {
+ ImmutableList.Builder<Player> players = ImmutableList.builder();
+ for (EntityPlayer p : handle.getPlayers()) {
+ players.add(p.getBukkitEntity());
+ }
+ return players.build();
+ }
+
+ @Override
+ public void show() {
+ handle.setVisible(true);
+ }
+
+ @Override
+ public void hide() {
+ handle.setVisible(false);
+ }
+
+ @Override
+ public void removeAll() {
+ for (Player player : getPlayers()) {
+ removePlayer(player);
+ }
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
index c31f17f7..6dfef44a 100644
--- a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
+++ b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
@@ -10,10 +10,6 @@ import org.bukkit.craftbukkit.util.AsynchronousExecutor;
import org.bukkit.craftbukkit.util.LongHash;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import net.minecraft.server.Entity;
-import net.minecraft.server.EntitySlice;
class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider<QueuedChunk, Chunk, Runnable, RuntimeException> {
private final AtomicInteger threadNumber = new AtomicInteger(1);
@@ -48,8 +44,8 @@ class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider<QueuedChu
queuedChunk.provider.chunks.put(LongHash.toLong(queuedChunk.x, queuedChunk.z), chunk);
chunk.addEntities();
- if (queuedChunk.provider.chunkProvider != null) {
- queuedChunk.provider.chunkProvider.recreateStructures(chunk, queuedChunk.x, queuedChunk.z);
+ if (queuedChunk.provider.chunkGenerator != null) {
+ queuedChunk.provider.chunkGenerator.recreateStructures(chunk, queuedChunk.x, queuedChunk.z);
}
Server server = queuedChunk.provider.world.getServer();
@@ -72,7 +68,7 @@ class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider<QueuedChu
}
}
- chunk.loadNearby(queuedChunk.provider, queuedChunk.provider, queuedChunk.x, queuedChunk.z);
+ chunk.loadNearby(queuedChunk.provider, queuedChunk.provider.chunkGenerator);
}
public void callStage3(QueuedChunk queuedChunk, Chunk chunk, Runnable runnable) throws RuntimeException {
diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java
index 01f616bb..251ea5e0 100644
--- a/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java
+++ b/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java
@@ -1,7 +1,6 @@
package org.bukkit.craftbukkit.command;
import net.minecraft.server.ICommandListener;
-import net.minecraft.server.CommandBlockListenerAbstract;
import net.minecraft.server.IChatBaseComponent;
import org.bukkit.block.Block;
@@ -12,20 +11,20 @@ import org.bukkit.craftbukkit.util.CraftChatMessage;
* Represents input from a command block
*/
public class CraftBlockCommandSender extends ServerCommandSender implements BlockCommandSender {
- private final CommandBlockListenerAbstract commandBlock;
+ private final ICommandListener block;
- public CraftBlockCommandSender(CommandBlockListenerAbstract commandBlockListenerAbstract) {
+ public CraftBlockCommandSender(ICommandListener commandBlockListenerAbstract) {
super();
- this.commandBlock = commandBlockListenerAbstract;
+ this.block = commandBlockListenerAbstract;
}
public Block getBlock() {
- return commandBlock.getWorld().getWorld().getBlockAt(commandBlock.getChunkCoordinates().getX(), commandBlock.getChunkCoordinates().getY(), commandBlock.getChunkCoordinates().getZ());
+ return block.getWorld().getWorld().getBlockAt(block.getChunkCoordinates().getX(), block.getChunkCoordinates().getY(), block.getChunkCoordinates().getZ());
}
public void sendMessage(String message) {
for (IChatBaseComponent component : CraftChatMessage.fromString(message)) {
- commandBlock.sendMessage(component);
+ block.sendMessage(component);
}
}
@@ -36,7 +35,7 @@ public class CraftBlockCommandSender extends ServerCommandSender implements Bloc
}
public String getName() {
- return commandBlock.getName();
+ return block.getName();
}
public boolean isOp() {
@@ -48,6 +47,6 @@ public class CraftBlockCommandSender extends ServerCommandSender implements Bloc
}
public ICommandListener getTileEntity() {
- return commandBlock;
+ return block;
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java
index 7c5523b0..228e88a6 100644
--- a/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java
+++ b/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java
@@ -5,13 +5,16 @@ import net.minecraft.server.RemoteControlCommandListener;
import org.bukkit.command.RemoteConsoleCommandSender;
public class CraftRemoteConsoleCommandSender extends ServerCommandSender implements RemoteConsoleCommandSender {
- public CraftRemoteConsoleCommandSender() {
- super();
+
+ private final RemoteControlCommandListener listener;
+
+ public CraftRemoteConsoleCommandSender(RemoteControlCommandListener listener) {
+ this.listener = listener;
}
@Override
public void sendMessage(String message) {
- RemoteControlCommandListener.getInstance().sendMessage(new ChatComponentText(message + "\n")); // Send a newline after each message, to preserve formatting.
+ listener.sendMessage(new ChatComponentText(message + "\n")); // Send a newline after each message, to preserve formatting.
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
index de788d61..100d84ae 100644
--- a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
+++ b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
@@ -49,7 +49,7 @@ public final class VanillaCommandWrapper extends VanillaCommand {
Validate.notNull(sender, "Sender cannot be null");
Validate.notNull(args, "Arguments cannot be null");
Validate.notNull(alias, "Alias cannot be null");
- return (List<String>) vanillaCommand.tabComplete(getListener(sender), args, new BlockPosition(0, 0, 0));
+ return (List<String>) vanillaCommand.tabComplete(MinecraftServer.getServer(), getListener(sender), args, new BlockPosition(0, 0, 0));
}
public static CommandSender lastSender = null; // Nasty :(
@@ -75,7 +75,7 @@ public final class VanillaCommandWrapper extends VanillaCommand {
}
try {
- if (vanillaCommand.canUse(icommandlistener)) {
+ if (vanillaCommand.canUse(server, icommandlistener)) {
if (i > -1) {
List<Entity> list = ((List<Entity>)PlayerSelector.getPlayers(icommandlistener, as[i], Entity.class));
String s2 = as[i];
@@ -90,14 +90,14 @@ public final class VanillaCommandWrapper extends VanillaCommand {
lastSender = bSender;
try {
as[i] = entity.getUniqueID().toString();
- vanillaCommand.execute(icommandlistener, as);
+ vanillaCommand.execute(server, icommandlistener, as);
j++;
} catch (ExceptionUsage exceptionusage) {
ChatMessage chatmessage = new ChatMessage("commands.generic.usage", new Object[] { new ChatMessage(exceptionusage.getMessage(), exceptionusage.getArgs())});
chatmessage.getChatModifier().setColor(EnumChatFormat.RED);
icommandlistener.sendMessage(chatmessage);
} catch (CommandException commandexception) {
- CommandAbstract.a(icommandlistener, vanillaCommand, 1, commandexception.getMessage(), commandexception.getArgs());
+ CommandAbstract.a(icommandlistener, vanillaCommand, 0, commandexception.getMessage(), commandexception.getArgs());
} finally {
lastSender = oldSender;
}
@@ -105,7 +105,7 @@ public final class VanillaCommandWrapper extends VanillaCommand {
as[i] = s2;
} else {
icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ENTITIES, 1);
- vanillaCommand.execute(icommandlistener, as);
+ vanillaCommand.execute(server, icommandlistener, as);
j++;
}
} else {
@@ -118,7 +118,7 @@ public final class VanillaCommandWrapper extends VanillaCommand {
chatmessage1.getChatModifier().setColor(EnumChatFormat.RED);
icommandlistener.sendMessage(chatmessage1);
} catch (CommandException commandexception) {
- CommandAbstract.a(icommandlistener, vanillaCommand, 1, commandexception.getMessage(), commandexception.getArgs());
+ CommandAbstract.a(icommandlistener, vanillaCommand, 0, commandexception.getMessage(), commandexception.getArgs());
} catch (Throwable throwable) {
ChatMessage chatmessage3 = new ChatMessage("commands.generic.exception", new Object[0]);
chatmessage3.getChatModifier().setColor(EnumChatFormat.RED);
@@ -149,7 +149,7 @@ public final class VanillaCommandWrapper extends VanillaCommand {
return ((EntityMinecartCommandBlock) ((CraftMinecartCommand) sender).getHandle()).getCommandBlock();
}
if (sender instanceof RemoteConsoleCommandSender) {
- return RemoteControlCommandListener.getInstance();
+ return ((DedicatedServer)MinecraftServer.getServer()).remoteControlCommandListener;
}
if (sender instanceof ConsoleCommandSender) {
return ((CraftServer) sender.getServer()).getServer();
diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
index 8a559499..24cd4763 100644
--- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
+++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java
@@ -10,7 +10,7 @@ public class CraftEnchantment extends Enchantment {
private final net.minecraft.server.Enchantment target;
public CraftEnchantment(net.minecraft.server.Enchantment target) {
- super(target.id);
+ super(net.minecraft.server.Enchantment.getId(target));
this.target = target;
}
@@ -26,7 +26,7 @@ public class CraftEnchantment extends Enchantment {
@Override
public EnchantmentTarget getItemTarget() {
- switch (target.slot) {
+ switch (target.itemTarget) {
case ALL:
return EnchantmentTarget.ALL;
case ARMOR:
@@ -37,7 +37,7 @@ public class CraftEnchantment extends Enchantment {
return EnchantmentTarget.ARMOR_HEAD;
case ARMOR_LEGS:
return EnchantmentTarget.ARMOR_LEGS;
- case ARMOR_TORSO:
+ case ARMOR_CHEST:
return EnchantmentTarget.ARMOR_TORSO;
case DIGGER:
return EnchantmentTarget.TOOL;
@@ -59,7 +59,7 @@ public class CraftEnchantment extends Enchantment {
@Override
public String getName() {
- switch (target.id) {
+ switch (getId()) {
case 0:
return "PROTECTION_ENVIRONMENTAL";
case 1:
@@ -111,7 +111,7 @@ public class CraftEnchantment extends Enchantment {
case 62:
return "LURE";
default:
- return "UNKNOWN_ENCHANT_" + target.id;
+ return "UNKNOWN_ENCHANT_" + getId();
}
}
@@ -138,4 +138,8 @@ public class CraftEnchantment extends Enchantment {
CraftEnchantment ench = (CraftEnchantment) other;
return !target.a(ench.target);
}
+
+ public net.minecraft.server.Enchantment getHandle() {
+ return target;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
new file mode 100644
index 00000000..f32b9e2f
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
@@ -0,0 +1,138 @@
+package org.bukkit.craftbukkit.entity;
+
+import java.util.List;
+import net.minecraft.server.EntityAreaEffectCloud;
+import org.bukkit.Color;
+import org.bukkit.Particle;
+import org.bukkit.craftbukkit.CraftParticle;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.AreaEffectCloud;
+import org.bukkit.entity.EntityType;
+import org.bukkit.potion.PotionEffect;
+
+public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud {
+
+ public CraftAreaEffectCloud(CraftServer server, EntityAreaEffectCloud entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public EntityAreaEffectCloud getHandle() {
+ return (EntityAreaEffectCloud) super.getHandle();
+ }
+
+ @Override
+ public EntityType getType() {
+ return EntityType.AREA_EFFECT_CLOUD;
+ }
+
+ @Override
+ public int getDuration() {
+ return getHandle().getDuration();
+ }
+
+ @Override
+ public void setDuration(int duration) {
+ getHandle().setDuration(duration);
+ }
+
+ @Override
+ public int getWaitTime() {
+ return getHandle().waitTime;
+ }
+
+ @Override
+ public void setWaitTime(int waitTime) {
+ getHandle().setWaitTime(waitTime);
+ }
+
+ @Override
+ public int getReapplicationDelay() {
+ return getHandle().reapplicationDelay;
+ }
+
+ @Override
+ public void setReapplicationDelay(int delay) {
+ getHandle().reapplicationDelay = delay;
+ }
+
+ @Override
+ public int getDurationOnUse() {
+ return getHandle().durationOnUse;
+ }
+
+ @Override
+ public void setDurationOnUse(int duration) {
+ getHandle().durationOnUse = duration;
+ }
+
+ @Override
+ public float getRadius() {
+ return getHandle().getRadius();
+ }
+
+ @Override
+ public void setRadius(float radius) {
+ getHandle().setRadius(radius);
+ }
+
+ @Override
+ public float getRadiusOnUse() {
+ return getHandle().radiusOnUse;
+ }
+
+ @Override
+ public void setRadiusOnUse(float radius) {
+ getHandle().setRadiusOnUse(radius);
+ }
+
+ @Override
+ public float getRadiusPerTick() {
+ return getHandle().radiusPerTick;
+ }
+
+ @Override
+ public void setRadiusPerTick(float radius) {
+ getHandle().setRadiusPerTick(radius);
+ }
+
+ @Override
+ public Particle getParticle() {
+ return CraftParticle.toBukkit(getHandle().getParticle());
+ }
+
+ @Override
+ public void setParticle(Particle particle) {
+ getHandle().setParticle(CraftParticle.toNMS(particle));
+ }
+
+ @Override
+ public List<PotionEffect> getEffects() {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void addEffect(PotionEffect effect) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void removeEffect(PotionEffect effect) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public void setEffects(List<PotionEffect> effects) {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ @Override
+ public Color getColor() {
+ return Color.fromRGB(getHandle().getColor());
+ }
+
+ @Override
+ public void setColor(Color color) {
+ getHandle().setColor(color.asRGB());
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
index 09443fe1..06e2c18b 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
@@ -157,6 +157,7 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
@Override
public void setGravity(boolean gravity) {
getHandle().setGravity(!gravity);
+ getHandle().noclip = !gravity;
}
@Override
@@ -207,13 +208,11 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
@Override
public boolean isMarker() {
- // PAIL
- return getHandle().s();
+ return getHandle().isMarker();
}
@Override
public void setMarker(boolean marker) {
- // PAIL
- getHandle().n(marker);
+ getHandle().setMarker(marker);
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDragonFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDragonFireball.java
new file mode 100644
index 00000000..f1fa649b
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDragonFireball.java
@@ -0,0 +1,17 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityDragonFireball;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.DragonFireball;
+import org.bukkit.entity.EntityType;
+
+public class CraftDragonFireball extends CraftFireball implements DragonFireball {
+ public CraftDragonFireball(CraftServer server, EntityDragonFireball entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public EntityType getType() {
+ return EntityType.DRAGON_FIREBALL;
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 5693e3a7..22d08a20 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -1,8 +1,6 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.base.Preconditions;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@@ -39,7 +37,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
});
-
+
protected final CraftServer server;
protected Entity entity;
private EntityDamageEvent lastDamageEvent;
@@ -108,6 +106,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
else if (entity instanceof EntityGolem) {
if (entity instanceof EntitySnowman) { return new CraftSnowman(server, (EntitySnowman) 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 { return new CraftCreature(server, (EntityCreature) entity); }
@@ -153,6 +152,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
if (entity instanceof EntitySmallFireball) { return new CraftSmallFireball(server, (EntitySmallFireball) entity); }
else if (entity instanceof EntityLargeFireball) { return new CraftLargeFireball(server, (EntityLargeFireball) entity); }
else if (entity instanceof EntityWitherSkull) { return new CraftWitherSkull(server, (EntityWitherSkull) entity); }
+ else if (entity instanceof EntityDragonFireball) { return new CraftDragonFireball(server, (EntityDragonFireball) entity); }
else { return new CraftFireball(server, (EntityFireball) entity); }
}
else if (entity instanceof EntityEnderSignal) { return new CraftEnderSignal(server, (EntityEnderSignal) entity); }
@@ -179,6 +179,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
else if (entity instanceof EntityTNTPrimed) { return new CraftTNTPrimed(server, (EntityTNTPrimed) entity); }
else if (entity instanceof EntityFireworks) { return new CraftFirework(server, (EntityFireworks) entity); }
+ else if (entity instanceof EntityShulkerBullet) { return new CraftShulkerBullet(server, (EntityShulkerBullet) entity); }
+ else if (entity instanceof EntityAreaEffectCloud) { return new CraftAreaEffectCloud(server, (EntityAreaEffectCloud) entity); }
throw new AssertionError("Unknown entity " + (entity == null ? null : entity.getClass()));
}
@@ -227,12 +229,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
public boolean teleport(Location location, TeleportCause cause) {
- if (entity.passenger != null || entity.dead) {
+ if (entity.isVehicle() || entity.dead) {
return false;
}
// If this entity is riding another entity, we must dismount before teleporting.
- entity.mount(null);
+ entity.stopRiding();
entity.world = ((CraftWorld) location.getWorld()).getHandle();
entity.setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
@@ -299,13 +301,14 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
public org.bukkit.entity.Entity getPassenger() {
- return isEmpty() ? null : getHandle().passenger.getBukkitEntity();
+ return isEmpty() ? null : getHandle().passengers.get(0).getBukkitEntity();
}
public boolean setPassenger(org.bukkit.entity.Entity passenger) {
Preconditions.checkArgument(!this.equals(passenger), "Entity cannot ride itself.");
if (passenger instanceof CraftEntity) {
- ((CraftEntity) passenger).getHandle().mount(getHandle());
+ eject();
+ ((CraftEntity) passenger).getHandle().startRiding(getHandle());
return true;
} else {
return false;
@@ -313,15 +316,15 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
public boolean isEmpty() {
- return getHandle().passenger == null;
+ return !getHandle().isVehicle();
}
public boolean eject() {
- if (getHandle().passenger == null) {
+ if (isEmpty()) {
return false;
}
- getHandle().passenger.mount(null);
+ getPassenger().leaveVehicle();
return true;
}
@@ -409,24 +412,24 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
}
public boolean isInsideVehicle() {
- return getHandle().vehicle != null;
+ return getHandle().isPassenger();
}
public boolean leaveVehicle() {
- if (getHandle().vehicle == null) {
+ if (!isInsideVehicle()) {
return false;
}
- getHandle().mount(null);
+ getHandle().stopRiding();
return true;
}
public org.bukkit.entity.Entity getVehicle() {
- if (getHandle().vehicle == null) {
+ if (!isInsideVehicle()) {
return null;
}
- return getHandle().vehicle.getBukkitEntity();
+ return getHandle().getVehicle().getBukkitEntity();
}
@Override
@@ -538,4 +541,18 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
public void setOp(boolean value) {
perm.setOp(value);
}
+
+ @Override
+ public void setGlowing(boolean flag) {
+ getHandle().glowing = flag;
+ Entity e = getHandle();
+ if (e.getFlag(6) != flag) {
+ e.setFlag(6, flag);
+ }
+ }
+
+ @Override
+ public boolean isGlowing() {
+ return getHandle().glowing;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
index 76a9bdba..6a5c4480 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
@@ -22,11 +22,11 @@ public class CraftFirework extends CraftEntity implements Firework {
public CraftFirework(CraftServer server, EntityFireworks entity) {
super(server, entity);
- ItemStack item = getHandle().getDataWatcher().getItemStack(FIREWORK_ITEM_INDEX);
+ ItemStack item = getHandle().getDataWatcher().get(EntityFireworks.FIREWORK_ITEM).orNull();
if (item == null) {
item = new ItemStack(Items.FIREWORKS);
- getHandle().getDataWatcher().watch(FIREWORK_ITEM_INDEX, item);
+ getHandle().getDataWatcher().register(EntityFireworks.FIREWORK_ITEM, item);
}
this.item = CraftItemStack.asCraftMirror(item);
@@ -64,7 +64,7 @@ public class CraftFirework extends CraftEntity implements Firework {
// Copied from EntityFireworks constructor, update firework lifetime/power
getHandle().expectedLifespan = 10 * (1 + meta.getPower()) + random.nextInt(6) + random.nextInt(7);
- getHandle().getDataWatcher().update(FIREWORK_ITEM_INDEX);
+ getHandle().getDataWatcher().markDirty(EntityFireworks.FIREWORK_ITEM);
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java
index 230ae9ee..26b1814a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java
@@ -1,6 +1,7 @@
package org.bukkit.craftbukkit.entity;
import net.minecraft.server.EntityHorse;
+import net.minecraft.server.EnumHorseType;
import org.apache.commons.lang.Validate;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftInventoryHorse;
@@ -23,12 +24,12 @@ public class CraftHorse extends CraftAnimals implements Horse {
}
public Variant getVariant() {
- return Variant.values()[getHandle().getType()];
+ return Variant.values()[getHandle().getType().ordinal()];
}
public void setVariant(Variant variant) {
Validate.notNull(variant, "Variant cannot be null");
- getHandle().setType(variant.ordinal());
+ getHandle().setType(EnumHorseType.values()[variant.ordinal()]);
}
public Color getColor() {
@@ -89,7 +90,7 @@ public class CraftHorse extends CraftAnimals implements Horse {
@Override
public boolean isTamed() {
- return getHandle().isTame();
+ return getHandle().isTamed();
}
@Override
@@ -116,19 +117,11 @@ public class CraftHorse extends CraftAnimals implements Horse {
}
public UUID getOwnerUUID() {
- try {
- return UUID.fromString(getHandle().getOwnerUUID());
- } catch (IllegalArgumentException ex) {
- return null;
- }
+ return getHandle().getOwnerUUID();
}
public void setOwnerUUID(UUID uuid) {
- if (uuid == null) {
- getHandle().setOwnerUUID("");
- } else {
- getHandle().setOwnerUUID(uuid.toString());
- }
+ getHandle().setOwnerUUID(uuid);
}
public HorseInventory getInventory() {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
index 8a08babc..14751d8b 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
@@ -1,5 +1,6 @@
package org.bukkit.craftbukkit.entity;
+import com.google.common.base.Preconditions;
import java.util.Set;
import net.minecraft.server.*;
@@ -21,6 +22,7 @@ import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
import org.bukkit.craftbukkit.inventory.CraftInventoryView;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.Villager;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.permissions.PermissibleBase;
import org.bukkit.permissions.Permission;
@@ -347,6 +349,23 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
player.activeContainer.addSlotListener(player);
}
+ @Override
+ public InventoryView openMerchant(Villager villager, boolean force) {
+ Preconditions.checkNotNull(villager, "villager cannot be null");
+ if (!force && villager.isTrading()) {
+ return null;
+ } else if (villager.isTrading()) {
+ // we're not supposed to have multiple people using the same villager, so we have to close it.
+ villager.getTrader().closeInventory();
+ }
+
+ EntityVillager ev = ((CraftVillager) villager).getHandle();
+ ev.setTradingPlayer(this.getHandle());
+ this.getHandle().openTrade(ev);
+
+ return this.getHandle().activeContainer.getBukkitView();
+ }
+
public void closeInventory() {
getHandle().closeInventory();
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index 5317cff6..28956287 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -9,9 +9,8 @@ import java.util.Set;
import net.minecraft.server.DamageSource;
import net.minecraft.server.EntityArmorStand;
-import net.minecraft.server.EntityArrow;
+import net.minecraft.server.EntityDragonFireball;
import net.minecraft.server.EntityEgg;
-import net.minecraft.server.EntityEnderDragon;
import net.minecraft.server.EntityEnderPearl;
import net.minecraft.server.EntityFishingHook;
import net.minecraft.server.EntityHuman;
@@ -24,6 +23,7 @@ import net.minecraft.server.EntityPotion;
import net.minecraft.server.EntitySmallFireball;
import net.minecraft.server.EntitySnowball;
import net.minecraft.server.EntityThrownExpBottle;
+import net.minecraft.server.EntityTippedArrow;
import net.minecraft.server.EntityWither;
import net.minecraft.server.EntityWitherSkull;
import net.minecraft.server.GenericAttributes;
@@ -33,12 +33,15 @@ import net.minecraft.server.MobEffectList;
import org.apache.commons.lang.Validate;
import org.bukkit.Location;
import org.bukkit.Material;
+import org.bukkit.attribute.Attribute;
+import org.bukkit.attribute.AttributeInstance;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.inventory.CraftEntityEquipment;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.Arrow;
+import org.bukkit.entity.DragonFireball;
import org.bukkit.entity.Egg;
import org.bukkit.entity.EnderPearl;
import org.bukkit.entity.Entity;
@@ -108,16 +111,6 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
setMaxHealth(getHandle().getMaxHealth());
}
- @Deprecated
- public Egg throwEgg() {
- return launchProjectile(Egg.class);
- }
-
- @Deprecated
- public Snowball throwSnowball() {
- return launchProjectile(Snowball.class);
- }
-
public double getEyeHeight() {
return getHandle().getHeadHeight();
}
@@ -204,11 +197,6 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
return getLineOfSight(transparent, maxDistance, 2);
}
- @Deprecated
- public Arrow shootArrow() {
- return launchProjectile(Arrow.class);
- }
-
public int getRemainingAir() {
return getHandle().getAirTicks();
}
@@ -300,7 +288,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
}
removePotionEffect(effect.getType());
}
- getHandle().addEffect(new MobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles()));
+ getHandle().addEffect(new MobEffect(MobEffectList.fromId(effect.getType().getId()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles()));
return true;
}
@@ -313,20 +301,17 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
}
public boolean hasPotionEffect(PotionEffectType type) {
- return getHandle().hasEffect(MobEffectList.byId[type.getId()]);
+ return getHandle().hasEffect(MobEffectList.fromId(type.getId()));
}
public void removePotionEffect(PotionEffectType type) {
- getHandle().removeEffect(type.getId());
+ getHandle().removeEffect(MobEffectList.fromId(type.getId()));
}
public Collection<PotionEffect> getActivePotionEffects() {
List<PotionEffect> effects = new ArrayList<PotionEffect>();
- for (Object raw : getHandle().effects.values()) {
- if (!(raw instanceof MobEffect))
- continue;
- MobEffect handle = (MobEffect) raw;
- effects.add(new PotionEffect(PotionEffectType.getById(handle.getEffectId()), handle.getDuration(), handle.getAmplifier(), handle.isAmbient(), handle.isShowParticles()));
+ for (MobEffect handle : getHandle().effects.values()) {
+ effects.add(new PotionEffect(PotionEffectType.getById(MobEffectList.getId(handle.getMobEffect())), handle.getDuration(), handle.getAmplifier(), handle.isAmbient(), handle.isShowParticles()));
}
return effects;
}
@@ -347,7 +332,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
} else if (EnderPearl.class.isAssignableFrom(projectile)) {
launch = new EntityEnderPearl(world, getHandle());
} else if (Arrow.class.isAssignableFrom(projectile)) {
- launch = new EntityArrow(world, getHandle(), 1);
+ launch = new EntityTippedArrow(world, getHandle());
} else if (ThrownPotion.class.isAssignableFrom(projectile)) {
launch = new EntityPotion(world, getHandle(), CraftItemStack.asNMSCopy(new ItemStack(Material.POTION, 1)));
} else if (ThrownExpBottle.class.isAssignableFrom(projectile)) {
@@ -362,6 +347,8 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
launch = new EntitySmallFireball(world, getHandle(), direction.getX(), direction.getY(), direction.getZ());
} else if (WitherSkull.class.isAssignableFrom(projectile)) {
launch = new EntityWitherSkull(world, getHandle(), direction.getX(), direction.getY(), direction.getZ());
+ } else if (DragonFireball.class.isAssignableFrom(projectile)) {
+ launch = new EntityDragonFireball(world, getHandle(), direction.getX(), direction.getY(), direction.getZ());
} else {
launch = new EntityLargeFireball(world, getHandle(), direction.getX(), direction.getY(), direction.getZ());
}
@@ -500,4 +487,9 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
public void _INVALID_setMaxHealth(int health) {
setMaxHealth(health);
}
+
+ @Override
+ public AttributeInstance getAttribute(Attribute attribute) {
+ return getHandle().craftAttributes.getAttribute(attribute);
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
index 03e0730b..8a72fd23 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
@@ -91,7 +91,7 @@ public abstract class CraftMinecart extends CraftVehicle implements Minecart {
}
public void setDisplayBlockOffset(int offset) {
- getHandle().SetDisplayBlockOffset(offset);
+ getHandle().setDisplayBlockOffset(offset);
}
public int getDisplayBlockOffset() {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index bffb0389..fb81a28d 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -36,6 +36,7 @@ import org.bukkit.configuration.serialization.DelegateDeserialization;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationAbandonedEvent;
import org.bukkit.conversations.ManuallyAbandonedConversationCanceller;
+import org.bukkit.craftbukkit.CraftParticle;
import org.bukkit.craftbukkit.block.CraftSign;
import org.bukkit.craftbukkit.conversations.ConversationTracker;
import org.bukkit.craftbukkit.CraftEffect;
@@ -264,7 +265,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
float f = (float) Math.pow(2.0D, (note - 12.0D) / 12.0D);
- getHandle().playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect("note."+instrumentName, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, f));
+ getHandle().playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect(CraftSound.getSoundEffect("note." + instrumentName), SoundCategory.MUSIC, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, f));
}
@Override
@@ -290,7 +291,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
break;
}
float f = (float) Math.pow(2.0D, (note.getId() - 12.0D) / 12.0D);
- getHandle().playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect("note."+instrumentName, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, f));
+ getHandle().playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect(CraftSound.getSoundEffect("note." + instrumentName), SoundCategory.MUSIC, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), 3.0f, f));
}
@Override
@@ -309,7 +310,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
double y = loc.getBlockY() + 0.5;
double z = loc.getBlockZ() + 0.5;
- PacketPlayOutNamedSoundEffect packet = new PacketPlayOutNamedSoundEffect(sound, x, y, z, volume, pitch);
+ PacketPlayOutNamedSoundEffect packet = new PacketPlayOutNamedSoundEffect(CraftSound.getSoundEffect(sound), SoundCategory.MASTER, x, y, z, volume, pitch);
getHandle().playerConnection.sendPacket(packet);
}
@@ -415,7 +416,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
}
- PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), map.getScale().getValue(), icons, data.buffer, 0, 0, 0, 0);
+ PacketPlayOutMap packet = new PacketPlayOutMap(map.getId(), map.getScale().getValue(), true, icons, data.buffer, 0, 0, 0, 0);
getHandle().playerConnection.sendPacket(packet);
}
@@ -431,7 +432,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return false;
}
- if (entity.passenger != null) {
+ if (entity.isVehicle()) {
return false;
}
@@ -449,7 +450,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
// If this player is riding another entity, we must dismount before teleporting.
- entity.mount(null);
+ entity.stopRiding();
// Update the From Location
from = event.getFrom();
@@ -1288,7 +1289,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
injectScaledMaxHealth(set, true);
- getHandle().getDataWatcher().watch(6, (float) getScaledHealth());
+ getHandle().getDataWatcher().set(EntityLiving.HEALTH, (float) getScaledHealth());
getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateHealth(getScaledHealth(), getHandle().getFoodData().getFoodLevel(), getHandle().getFoodData().getSaturationLevel()));
getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateAttributes(getHandle().getId(), set));
@@ -1312,7 +1313,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public org.bukkit.entity.Entity getSpectatorTarget() {
- Entity followed = getHandle().C(); // PAIL
+ Entity followed = getHandle().getSpecatorTarget();
return followed == getHandle() ? null : followed.getBukkitEntity();
}
@@ -1340,4 +1341,69 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
PacketPlayOutTitle packetReset = new PacketPlayOutTitle(EnumTitleAction.RESET, null);
getHandle().playerConnection.sendPacket(packetReset);
}
+
+ @Override
+ public void spawnParticle(Particle particle, Location location, int count) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, double x, double y, double z, int count) {
+ spawnParticle(particle, x, y, z, count, null);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, Location location, int count, T data) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, data);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, T data) {
+ spawnParticle(particle, x, y, z, count, 0, 0, 0);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, double offsetZ) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, offsetX, offsetY, offsetZ);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ) {
+ spawnParticle(particle, x, y, z, count, offsetX, offsetY, offsetZ, null);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, double offsetZ, T data) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, offsetX, offsetY, offsetZ, data);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, T data) {
+ spawnParticle(particle, x, y, z, count, offsetX, offsetY, offsetZ, 1, data);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, double offsetZ, double extra) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, offsetX, offsetY, offsetZ, extra);
+ }
+
+ @Override
+ public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra) {
+ spawnParticle(particle, x, y, z, count, offsetX, offsetY, offsetZ, extra, null);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, double offsetZ, double extra, T data) {
+ spawnParticle(particle, location.getX(), location.getY(), location.getZ(), count, offsetX, offsetY, offsetZ, extra, data);
+ }
+
+ @Override
+ public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data) {
+ if (data != null && !particle.getDataType().isInstance(data)) {
+ throw new IllegalArgumentException("data should be " + particle.getDataType() + " got " + data.getClass());
+ }
+ PacketPlayOutWorldParticles packetplayoutworldparticles = new PacketPlayOutWorldParticles(CraftParticle.toNMS(particle), true, (float) x, (float) y, (float) z, (float) offsetX, (float) offsetY, (float) offsetZ, (float) extra, count, CraftParticle.toData(particle, data));
+ getHandle().playerConnection.sendPacket(packetplayoutworldparticles);
+
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java
new file mode 100644
index 00000000..eef9d3c5
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java
@@ -0,0 +1,24 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.EntityGolem;
+import net.minecraft.server.EntityShulker;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Shulker;
+
+public class CraftShulker extends CraftGolem implements Shulker {
+
+ public CraftShulker(CraftServer server, EntityShulker entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public EntityType getType() {
+ return EntityType.SHULKER;
+ }
+
+ @Override
+ public EntityShulker getHandle() {
+ return (EntityShulker) entity;
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java
new file mode 100644
index 00000000..91476970
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java
@@ -0,0 +1,51 @@
+package org.bukkit.craftbukkit.entity;
+
+import net.minecraft.server.Entity;
+import net.minecraft.server.EntityShulkerBullet;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.ShulkerBullet;
+import org.bukkit.projectiles.ProjectileSource;
+
+public class CraftShulkerBullet extends CraftEntity implements ShulkerBullet {
+
+ public CraftShulkerBullet(CraftServer server, EntityShulkerBullet entity) {
+ super(server, entity);
+ }
+
+ @Override
+ public ProjectileSource getShooter() {
+ return getHandle().projectileSource;
+ }
+
+ @Override
+ public void setShooter(ProjectileSource shooter) {
+ if (shooter instanceof LivingEntity) {
+ getHandle().setShooter(((CraftLivingEntity) shooter).getHandle());
+ } else {
+ getHandle().setShooter(null);
+ }
+ getHandle().projectileSource = shooter;
+ }
+
+ @Override
+ public org.bukkit.entity.Entity getTarget() {
+ return getHandle().getTarget() != null ? getHandle().getTarget().getBukkitEntity() : null;
+ }
+
+ @Override
+ public void setTarget(org.bukkit.entity.Entity target) {
+ getHandle().setTarget(target == null ? null : ((CraftEntity) target).getHandle());
+ }
+
+ @Override
+ public EntityType getType() {
+ return EntityType.SHULKER_BULLET;
+ }
+
+ @Override
+ public EntityShulkerBullet getHandle() {
+ return (EntityShulkerBullet) entity;
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
index e08ad471..c493c9c0 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
@@ -31,11 +31,11 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed {
}
public int getFuseTicks() {
- return getHandle().fuseTicks;
+ return getHandle().getFuseTicks();
}
public void setFuseTicks(int fuseTicks) {
- getHandle().fuseTicks = fuseTicks;
+ getHandle().setFuseTicks(fuseTicks);
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java
index ea1d10b3..0800d73a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java
@@ -20,18 +20,14 @@ public class CraftTameableAnimal extends CraftAnimals implements Tameable, Creat
public UUID getOwnerUUID() {
try {
- return UUID.fromString(getHandle().getOwnerUUID());
+ return getHandle().getOwnerUUID();
} catch (IllegalArgumentException ex) {
return null;
}
}
public void setOwnerUUID(UUID uuid) {
- if (uuid == null) {
- getHandle().setOwnerUUID("");
- } else {
- getHandle().setOwnerUUID(uuid.toString());
- }
+ getHandle().setOwnerUUID(uuid);
}
public AnimalTamer getOwner() {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
index 18da4266..092e9fba 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
@@ -22,14 +22,11 @@ public class CraftThrownPotion extends CraftProjectile implements ThrownPotion {
// TODO: This one does not handle custom NBT potion effects does it?
// In that case this method could be said to be misleading or incorrect
public Collection<PotionEffect> getEffects() {
- return Potion.getBrewer().getEffectsFromDamage(getHandle().getPotionValue());
+ return Potion.getBrewer().getEffectsFromDamage(getHandle().getItem().getData());
}
public ItemStack getItem() {
- // We run this method once since it will set the item stack if there is none.
- getHandle().getPotionValue();
-
- return CraftItemStack.asBukkitCopy(getHandle().item);
+ return CraftItemStack.asBukkitCopy(getHandle().getItem());
}
public void setItem(ItemStack item) {
@@ -39,7 +36,7 @@ public class CraftThrownPotion extends CraftProjectile implements ThrownPotion {
// The ItemStack must be a potion.
Validate.isTrue(item.getType() == Material.POTION, "ItemStack must be a potion. This item stack was " + item.getType() + ".");
- getHandle().item = CraftItemStack.asNMSCopy(item);
+ getHandle().setItem(CraftItemStack.asNMSCopy(item));
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
index 6fe21cce..95ffdf67 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
@@ -1,15 +1,25 @@
package org.bukkit.craftbukkit.entity;
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import java.util.Collections;
+import java.util.List;
+import net.minecraft.server.EntityHuman;
import net.minecraft.server.EntityVillager;
+import net.minecraft.server.MerchantRecipeList;
import org.apache.commons.lang.Validate;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.inventory.CraftInventory;
+import org.bukkit.craftbukkit.inventory.CraftMerchantRecipe;
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 {
+
public CraftVillager(CraftServer server, EntityVillager entity) {
super(server, entity);
}
@@ -41,4 +51,59 @@ public class CraftVillager extends CraftAgeable implements Villager, InventoryHo
public Inventory getInventory() {
return new CraftInventory(getHandle().inventory);
}
+
+ @Override
+ public List<MerchantRecipe> getRecipes() {
+ return Collections.unmodifiableList(Lists.transform(getHandle().getOffers(null), new Function<net.minecraft.server.MerchantRecipe, MerchantRecipe>() {
+ @Override
+ public MerchantRecipe apply(net.minecraft.server.MerchantRecipe recipe) {
+ return recipe.asBukkit();
+ }
+ }));
+ }
+
+ @Override
+ public void setRecipes(List<MerchantRecipe> list) {
+ MerchantRecipeList recipes = getHandle().getOffers(null);
+ recipes.clear();
+ for (MerchantRecipe m : list) {
+ recipes.add(CraftMerchantRecipe.fromBukkit(m).toMinecraft());
+ }
+ }
+
+ @Override
+ public MerchantRecipe getRecipe(int i) {
+ return getHandle().getOffers(null).get(i).asBukkit();
+ }
+
+ @Override
+ public void setRecipe(int i, MerchantRecipe merchantRecipe) {
+ getHandle().getOffers(null).set(i, CraftMerchantRecipe.fromBukkit(merchantRecipe).toMinecraft());
+ }
+
+ @Override
+ public int getRecipeCount() {
+ return getHandle().getOffers(null).size();
+ }
+
+ @Override
+ public boolean isTrading() {
+ return getTrader() != null;
+ }
+
+ @Override
+ public HumanEntity getTrader() {
+ EntityHuman eh = getHandle().t_(); // PAIL: rename t_ -> getTrader
+ return eh == null ? null : eh.getBukkitEntity();
+ }
+
+ @Override
+ public int getRiches() {
+ return getHandle().riches;
+ }
+
+ @Override
+ public void setRiches(int riches) {
+ getHandle().riches = riches;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java
index 619579d4..c9e68350 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java
@@ -4,6 +4,7 @@ import net.minecraft.server.EntityZombie;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Villager;
import org.bukkit.entity.Zombie;
public class CraftZombie extends CraftMonster implements Zombie {
@@ -39,6 +40,21 @@ public class CraftZombie extends CraftMonster implements Zombie {
}
public void setVillager(boolean flag) {
- getHandle().setVillager(flag);
+ getHandle().setVillagerType(0);
+ }
+
+ @Override
+ public void setVillagerProfession(Villager.Profession profession) {
+ if (profession == null) {
+ getHandle().clearVillagerType();
+ } else {
+ getHandle().setVillagerType(profession.getId());
+ }
+ }
+
+ @Override
+ public Villager.Profession getVillagerProfession() {
+ if (!isVillager()) return null;
+ return Villager.Profession.getProfession(getHandle().getVillagerType());
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index f0d3f754..86820c23 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -54,6 +54,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityDamageEvent.DamageModifier;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
+import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.player.*;
import org.bukkit.event.server.ServerListPingEvent;
@@ -337,7 +338,7 @@ public class CraftEventFactory {
return event;
}
- public static void handleBlockSpreadEvent(Block block, Block source, net.minecraft.server.Block type, int data) {
+ public static boolean handleBlockSpreadEvent(Block block, Block source, net.minecraft.server.Block type, int data) {
BlockState state = block.getState();
state.setTypeId(net.minecraft.server.Block.getId(type));
state.setRawData((byte) data);
@@ -348,6 +349,7 @@ public class CraftEventFactory {
if (!event.isCancelled()) {
state.update(true);
}
+ return !event.isCancelled();
}
public static EntityDeathEvent callEntityDeathEvent(EntityLiving victim) {
@@ -414,7 +416,7 @@ public class CraftEventFactory {
EntityDamageEvent event;
if (damager == null) {
event = new EntityDamageByBlockEvent(null, entity.getBukkitEntity(), DamageCause.BLOCK_EXPLOSION, modifiers, modifierFunctions);
- } else if (entity instanceof EntityEnderDragon && ((EntityEnderDragon) entity).target == damager) {
+ } else if (entity instanceof EntityEnderDragon && /*PAIL FIXME ((EntityEnderDragon) entity).target == damager*/ false) {
event = new EntityDamageEvent(entity.getBukkitEntity(), DamageCause.ENTITY_EXPLOSION, modifiers, modifierFunctions);
} else {
if (damager instanceof org.bukkit.entity.TNTPrimed) {
@@ -483,6 +485,8 @@ public class CraftEventFactory {
cause = DamageCause.LIGHTNING;
} else if (source == DamageSource.FALL) {
cause = DamageCause.FALL;
+ } else if (source == DamageSource.DRAGON_BREATH) {
+ cause = DamageCause.DRAGON_BREATH;
} else {
throw new AssertionError(String.format("Unhandled damage of %s by %s from %s", entity, damager.getHandle(), source.translationIndex));
}
@@ -604,7 +608,7 @@ public class CraftEventFactory {
return event;
}
- public static void handleBlockGrowEvent(World world, int x, int y, int z, net.minecraft.server.Block type, int data) {
+ public static boolean handleBlockGrowEvent(World world, int x, int y, int z, net.minecraft.server.Block type, int data) {
Block block = world.getWorld().getBlockAt(x, y, z);
CraftBlockState state = (CraftBlockState) block.getState();
state.setTypeId(net.minecraft.server.Block.getId(type));
@@ -616,6 +620,8 @@ public class CraftEventFactory {
if (!event.isCancelled()) {
state.update(true);
}
+
+ return !event.isCancelled();
}
public static FoodLevelChangeEvent callFoodLevelChangeEvent(EntityHuman entity, int level) {
@@ -930,6 +936,7 @@ public class CraftEventFactory {
case SPRINT_ONE_CM:
case CROUCH_ONE_CM:
case TIME_SINCE_DEATH:
+ case SNEAK_TIME:
// Do not process event for these - too spammy
return null;
default:
@@ -953,4 +960,11 @@ public class CraftEventFactory {
firework.world.getServer().getPluginManager().callEvent(event);
return event;
}
+
+ public static PrepareAnvilEvent callPrepareAnvilEvent(InventoryView view, ItemStack item) {
+ PrepareAnvilEvent event = new PrepareAnvilEvent(view, CraftItemStack.asCraftMirror(item).clone());
+ event.getView().getPlayer().getServer().getPluginManager().callEvent(event);
+ event.getInventory().setItem(2, event.getResult());
+ return event;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java
index 04dd15db..c7081e34 100644
--- a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java
+++ b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java
@@ -19,10 +19,12 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
private static class CustomBiomeGrid implements BiomeGrid {
BiomeBase[] biome;
+ @Override
public Biome getBiome(int x, int z) {
return CraftBlock.biomeBaseToBiome(biome[(z << 4) | x]);
}
+ @Override
public void setBiome(int x, int z, Biome bio) {
biome[(z << 4) | x] = CraftBlock.biomeToBiomeBase(bio);
}
@@ -35,10 +37,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
this.random = new Random(seed);
}
- public boolean isChunkLoaded(int x, int z) {
- return true;
- }
-
+ @Override
public Chunk getOrCreateChunk(int x, int z) {
random.setSeed((long) x * 341873128712L + (long) z * 132897987541L);
@@ -67,7 +66,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
char emptyTest = 0;
for (int i = 0; i < 4096; i++) {
// Filter invalid block id & data values.
- if (Block.d.a(section[i]) == null) {
+ if (Block.REGISTRY_ID.fromId(section[i]) == null) {
section[i] = 0;
}
emptyTest |= section[i];
@@ -96,7 +95,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
short[] bdata = xbtypes[sec];
for (int i = 0; i < bdata.length; i++) {
Block b = Block.getById(bdata[i]);
- secBlkID[i] = (char) Block.d.b(b.getBlockData());
+ secBlkID[i] = (char) Block.REGISTRY_ID.getId(b.getBlockData());
}
// Build chunk section
csect[sec] = new ChunkSection(sec << 4, true, secBlkID);
@@ -119,7 +118,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
char[] secBlkID = new char[4096]; // Allocate block ID bytes
for (int i = 0; i < secBlkID.length; i++) {
Block b = Block.getById(btypes[sec][i] & 0xFF);
- secBlkID[i] = (char) Block.d.b(b.getBlockData());
+ secBlkID[i] = (char) Block.REGISTRY_ID.getId(b.getBlockData());
}
csect[sec] = new ChunkSection(sec << 4, true, secBlkID);
}
@@ -137,8 +136,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
scnt = Math.min(scnt, csect.length);
// Loop through sections
for (int sec = 0; sec < scnt; sec++) {
- ChunkSection cs = null; // Add sections when needed
- char[] csbytes = null;
+ char[] csbytes = null; // Add sections when needed
for (int cy = 0; cy < 16; cy++) {
int cyoff = cy | (sec << 4);
@@ -150,19 +148,19 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
byte blk = types[cxyoff + (cz * ydim)];
if (blk != 0) { // If non-empty
- if (cs == null) { // If no section yet, get one
- cs = csect[sec] = new ChunkSection(sec << 4, true);
- csbytes = cs.getIdArray();
+ if (csbytes == null) { // If no section yet, get one
+ csbytes = new char[16*16*16];
}
Block b = Block.getById(blk & 0xFF);
- csbytes[(cy << 8) | (cz << 4) | cx] = (char) Block.d.b(b.getBlockData());
+ csbytes[(cy << 8) | (cz << 4) | cx] = (char) Block.REGISTRY_ID.getId(b.getBlockData());
}
}
}
}
// If section built, finish prepping its state
- if (cs != null) {
+ if (csbytes != null) {
+ ChunkSection cs = csect[sec] = new ChunkSection(sec << 4, true, csbytes);
cs.recalcBlockCounts();
}
}
@@ -172,7 +170,7 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
// Set biome grid
byte[] biomeIndex = chunk.getBiomeIndex();
for (int i = 0; i < biomeIndex.length; i++) {
- biomeIndex[i] = (byte) (biomegrid.biome[i].id & 0xFF);
+ biomeIndex[i] = (byte) (BiomeBase.REGISTRY_ID.a(biomegrid.biome[i]) & 0xFF); // PAIL : rename
}
// Initialize lighting
chunk.initLighting();
@@ -181,40 +179,22 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
}
@Override
- public Chunk getChunkAt(BlockPosition blockPosition) {
- return getChunkAt(blockPosition.getX() >> 4, blockPosition.getZ() >> 4);
- }
-
- public void getChunkAt(IChunkProvider icp, int i, int i1) {
- // Nothing!
- }
-
- @Override
- public boolean a(IChunkProvider iChunkProvider, Chunk chunk, int i, int i1) {
- return false;
- }
-
- public boolean saveChunks(boolean bln, IProgressUpdate ipu) {
- return true;
- }
-
- public boolean unloadChunks() {
+ public boolean a(Chunk chunk, int i, int i1) {
return false;
}
- public boolean canSave() {
- return true;
- }
-
@SuppressWarnings("deprecation")
+ @Override
public byte[] generate(org.bukkit.World world, Random random, int x, int z) {
return generator.generate(world, random, x, z);
}
+ @Override
public byte[][] generateBlockSections(org.bukkit.World world, Random random, int x, int z, BiomeGrid biomes) {
return generator.generateBlockSections(world, random, x, z, biomes);
}
+ @Override
public short[][] generateExtBlockSections(org.bukkit.World world, Random random, int x, int z, BiomeGrid biomes) {
return generator.generateExtBlockSections(world, random, x, z, biomes);
}
@@ -245,20 +225,11 @@ public class CustomChunkGenerator extends InternalChunkGenerator {
return "Stronghold".equals(type) && this.strongholdGen != null ? this.strongholdGen.getNearestGeneratedFeature(world, position) : null;
}
+ @Override
public void recreateStructures(int i, int j) {}
- public int getLoadedChunks() {
- return 0;
- }
-
@Override
public void recreateStructures(Chunk chunk, int i, int i1) {
}
-
- public String getName() {
- return "CustomChunkGenerator";
- }
-
- public void c() {}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java b/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java
index 19565e52..d2e71b87 100644
--- a/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java
+++ b/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java
@@ -4,5 +4,5 @@ import net.minecraft.server.IChunkProvider;
import org.bukkit.generator.ChunkGenerator;
// Do not implement functions to this class, add to NormalChunkGenerator
-public abstract class InternalChunkGenerator extends ChunkGenerator implements IChunkProvider {
+public abstract class InternalChunkGenerator extends ChunkGenerator implements net.minecraft.server.ChunkGenerator {
}
diff --git a/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java b/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java
index fc4bc81f..cbcca41c 100644
--- a/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java
+++ b/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java
@@ -10,10 +10,10 @@ import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.generator.BlockPopulator;
public class NormalChunkGenerator extends InternalChunkGenerator {
- private final IChunkProvider provider;
+ private final ChunkGenerator generator;
public NormalChunkGenerator(World world, long seed) {
- provider = world.worldProvider.getChunkProvider();
+ generator = world.worldProvider.getChunkGenerator();
}
@Override
@@ -32,71 +32,32 @@ public class NormalChunkGenerator extends InternalChunkGenerator {
}
@Override
- public boolean isChunkLoaded(int i, int i1) {
- return provider.isChunkLoaded(i, i1);
- }
-
- @Override
public Chunk getOrCreateChunk(int i, int i1) {
- return provider.getOrCreateChunk(i, i1);
- }
-
- @Override
- public Chunk getChunkAt(BlockPosition blockPosition) {
- return provider.getChunkAt(blockPosition);
- }
-
- @Override
- public void getChunkAt(IChunkProvider icp, int i, int i1) {
- provider.getChunkAt(icp, i, i1);
- }
-
- @Override
- public boolean a(IChunkProvider iChunkProvider, Chunk chunk, int i, int i1) {
- return provider.a(provider, chunk, i, i1);
+ return generator.getOrCreateChunk(i, i1);
}
@Override
- public boolean saveChunks(boolean bln, IProgressUpdate ipu) {
- return provider.saveChunks(bln, ipu);
+ public void recreateStructures(int i, int i1) {
+ generator.recreateStructures(i, i1);
}
@Override
- public boolean unloadChunks() {
- return provider.unloadChunks();
+ public boolean a(Chunk chunk, int i, int i1) {
+ return generator.a(chunk, i, i1);
}
@Override
- public boolean canSave() {
- return provider.canSave();
+ public List<BiomeBase.BiomeMeta> getMobsFor(EnumCreatureType enumCreatureType, BlockPosition blockPosition) {
+ return generator.getMobsFor(enumCreatureType, blockPosition);
}
@Override
- public List<BiomeBase.BiomeMeta> getMobsFor(EnumCreatureType ect, BlockPosition position) {
- return provider.getMobsFor(ect, position);
- }
-
- @Override
- public BlockPosition findNearestMapFeature(World world, String string, BlockPosition position) {
- return provider.findNearestMapFeature(world, string, position);
- }
-
- // n.m.s implementations always return 0. (The true implementation is in ChunkProviderServer)
- @Override
- public int getLoadedChunks() {
- return 0;
+ public BlockPosition findNearestMapFeature(World world, String s, BlockPosition blockPosition) {
+ return generator.findNearestMapFeature(world, s, blockPosition);
}
@Override
public void recreateStructures(Chunk chunk, int i, int i1) {
- provider.recreateStructures(chunk, i, i1);
+ generator.recreateStructures(chunk, i, i1);
}
-
- @Override
- public String getName() {
- return "NormalWorldGenerator";
- }
-
- @Override
- public void c() {}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
index 22134820..e95fb3a8 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java
@@ -1,6 +1,7 @@
package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.EntityInsentient;
+import net.minecraft.server.EnumItemSlot;
import org.bukkit.craftbukkit.entity.CraftLivingEntity;
import org.bukkit.entity.Entity;
@@ -8,12 +9,6 @@ import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
public class CraftEntityEquipment implements EntityEquipment {
- private static final int WEAPON_SLOT = 0;
- private static final int HELMET_SLOT = 4;
- private static final int CHEST_SLOT = 3;
- private static final int LEG_SLOT = 2;
- private static final int BOOT_SLOT = 1;
- private static final int INVENTORY_SLOTS = 5;
private final CraftLivingEntity entity;
@@ -21,72 +16,96 @@ public class CraftEntityEquipment implements EntityEquipment {
this.entity = entity;
}
+ @Override
+ public ItemStack getItemInMainHand() {
+ return getEquipment(EnumItemSlot.MAINHAND);
+ }
+
+ @Override
+ public void setItemInMainHand(ItemStack item) {
+ setEquipment(EnumItemSlot.MAINHAND, item);
+ }
+
+ @Override
+ public ItemStack getItemInOffHand() {
+ return getEquipment(EnumItemSlot.OFFHAND);
+ }
+
+ @Override
+ public void setItemInOffHand(ItemStack item) {
+ setEquipment(EnumItemSlot.OFFHAND, item);
+ }
+
+ @Override
public ItemStack getItemInHand() {
- return getEquipment(WEAPON_SLOT);
+ return getItemInMainHand();
}
+ @Override
public void setItemInHand(ItemStack stack) {
- setEquipment(WEAPON_SLOT, stack);
+ setItemInMainHand(stack);
}
public ItemStack getHelmet() {
- return getEquipment(HELMET_SLOT);
+ return getEquipment(EnumItemSlot.HEAD);
}
public void setHelmet(ItemStack helmet) {
- setEquipment(HELMET_SLOT, helmet);
+ setEquipment(EnumItemSlot.HEAD, helmet);
}
public ItemStack getChestplate() {
- return getEquipment(CHEST_SLOT);
+ return getEquipment(EnumItemSlot.CHEST);
}
public void setChestplate(ItemStack chestplate) {
- setEquipment(CHEST_SLOT, chestplate);
+ setEquipment(EnumItemSlot.CHEST, chestplate);
}
public ItemStack getLeggings() {
- return getEquipment(LEG_SLOT);
+ return getEquipment(EnumItemSlot.LEGS);
}
public void setLeggings(ItemStack leggings) {
- setEquipment(LEG_SLOT, leggings);
+ setEquipment(EnumItemSlot.LEGS, leggings);
}
public ItemStack getBoots() {
- return getEquipment(BOOT_SLOT);
+ return getEquipment(EnumItemSlot.FEET);
}
public void setBoots(ItemStack boots) {
- setEquipment(BOOT_SLOT, boots);
+ setEquipment(EnumItemSlot.FEET, boots);
}
public ItemStack[] getArmorContents() {
- ItemStack[] armor = new ItemStack[INVENTORY_SLOTS - 1];
- for(int slot = WEAPON_SLOT + 1; slot < INVENTORY_SLOTS; slot++) {
- armor[slot - 1] = getEquipment(slot);
- }
+ ItemStack[] armor = new ItemStack[]{
+ getEquipment(EnumItemSlot.FEET),
+ getEquipment(EnumItemSlot.LEGS),
+ getEquipment(EnumItemSlot.CHEST),
+ getEquipment(EnumItemSlot.HEAD),
+ };
return armor;
}
public void setArmorContents(ItemStack[] items) {
- for(int slot = WEAPON_SLOT + 1; slot < INVENTORY_SLOTS; slot++) {
- ItemStack equipment = items != null && slot <= items.length ? items[slot - 1] : null;
- setEquipment(slot, equipment);
- }
+ setEquipment(EnumItemSlot.FEET, items.length >= 1 ? items[0] : null);
+ setEquipment(EnumItemSlot.LEGS, items.length >= 2 ? items[1] : null);
+ setEquipment(EnumItemSlot.CHEST, items.length >= 3 ? items[2] : null);
+ setEquipment(EnumItemSlot.HEAD, items.length >= 4 ? items[3] : null);
}
- private ItemStack getEquipment(int slot) {
+ private ItemStack getEquipment(EnumItemSlot slot) {
return CraftItemStack.asBukkitCopy(entity.getHandle().getEquipment(slot));
}
- private void setEquipment(int slot, ItemStack stack) {
- entity.getHandle().setEquipment(slot, CraftItemStack.asNMSCopy(stack));
+ private void setEquipment(EnumItemSlot slot, ItemStack stack) {
+ entity.getHandle().setSlot(slot, CraftItemStack.asNMSCopy(stack));
}
public void clear() {
- for(int i = 0; i < INVENTORY_SLOTS; i++) {
- setEquipment(i, null);
+ for (EnumItemSlot slot : EnumItemSlot.values()) {
+ setEquipment(slot, null);
}
}
@@ -95,50 +114,58 @@ public class CraftEntityEquipment implements EntityEquipment {
}
public float getItemInHandDropChance() {
- return getDropChance(WEAPON_SLOT);
+ return getDropChance(EnumItemSlot.MAINHAND);
}
public void setItemInHandDropChance(float chance) {
- setDropChance(WEAPON_SLOT, chance);
+ setDropChance(EnumItemSlot.MAINHAND, chance);
}
public float getHelmetDropChance() {
- return getDropChance(HELMET_SLOT);
+ return getDropChance(EnumItemSlot.HEAD);
}
public void setHelmetDropChance(float chance) {
- setDropChance(HELMET_SLOT, chance);
+ setDropChance(EnumItemSlot.HEAD, chance);
}
public float getChestplateDropChance() {
- return getDropChance(CHEST_SLOT);
+ return getDropChance(EnumItemSlot.CHEST);
}
public void setChestplateDropChance(float chance) {
- setDropChance(CHEST_SLOT, chance);
+ setDropChance(EnumItemSlot.CHEST, chance);
}
public float getLeggingsDropChance() {
- return getDropChance(LEG_SLOT);
+ return getDropChance(EnumItemSlot.LEGS);
}
public void setLeggingsDropChance(float chance) {
- setDropChance(LEG_SLOT, chance);
+ setDropChance(EnumItemSlot.LEGS, chance);
}
public float getBootsDropChance() {
- return getDropChance(BOOT_SLOT);
+ return getDropChance(EnumItemSlot.FEET);
}
public void setBootsDropChance(float chance) {
- setDropChance(BOOT_SLOT, chance);
+ setDropChance(EnumItemSlot.FEET, chance);
}
- private void setDropChance(int slot, float chance) {
- ((EntityInsentient) entity.getHandle()).dropChances[slot] = chance - 0.1F;
+ private void setDropChance(EnumItemSlot slot, float chance) {
+ if (slot == EnumItemSlot.MAINHAND || slot == EnumItemSlot.OFFHAND) {
+ ((EntityInsentient) entity.getHandle()).dropChanceHand[slot.b()] = chance - 0.1F;
+ } else {
+ ((EntityInsentient) entity.getHandle()).dropChanceArmor[slot.b()] = chance - 0.1F;
+ }
}
- private float getDropChance(int slot) {
- return ((EntityInsentient) entity.getHandle()).dropChances[slot] + 0.1F;
+ private float getDropChance(EnumItemSlot slot) {
+ if (slot == EnumItemSlot.MAINHAND || slot == EnumItemSlot.OFFHAND) {
+ return ((EntityInsentient) entity.getHandle()).dropChanceHand[slot.b()] + 0.1F;
+ } else {
+ return ((EntityInsentient) entity.getHandle()).dropChanceArmor[slot.b()] + 0.1F;
+ }
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java
index 69f17db8..ef3b8045 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java
@@ -2,7 +2,6 @@ package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.RecipesFurnace;
-import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.inventory.FurnaceRecipe;
import org.bukkit.inventory.ItemStack;
@@ -22,6 +21,6 @@ public class CraftFurnaceRecipe extends FurnaceRecipe implements CraftRecipe {
public void addToCraftingManager() {
ItemStack result = this.getResult();
ItemStack input = this.getInput();
- RecipesFurnace.getInstance().registerRecipe(CraftItemStack.asNMSCopy(input), CraftItemStack.asNMSCopy(result));
+ RecipesFurnace.getInstance().registerRecipe(CraftItemStack.asNMSCopy(input), CraftItemStack.asNMSCopy(result), getExperience());
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
index e9a3c501..91b8e4af 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
@@ -17,6 +17,7 @@ import net.minecraft.server.TileEntityDropper;
import net.minecraft.server.TileEntityFurnace;
import org.apache.commons.lang.Validate;
+import org.bukkit.Location;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
@@ -479,4 +480,9 @@ public class CraftInventory implements Inventory {
public boolean equals(final Object obj) {
return obj instanceof CraftInventory && ((CraftInventory) obj).inventory.equals(this.inventory);
}
+
+ @Override
+ public Location getLocation() {
+ return inventory.getLocation();
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
index 46a1d387..00f9bb5e 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
@@ -1,15 +1,18 @@
package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.IInventory;
+import org.bukkit.Location;
import org.bukkit.inventory.AnvilInventory;
import org.bukkit.inventory.ItemStack;
public class CraftInventoryAnvil extends CraftInventory implements AnvilInventory {
+ private final Location location;
private final IInventory resultInventory;
- public CraftInventoryAnvil(IInventory inventory, IInventory resultInventory) {
+ public CraftInventoryAnvil(Location location, IInventory inventory, IInventory resultInventory) {
super(inventory);
+ this.location = location;
this.resultInventory = resultInventory;
}
@@ -45,4 +48,9 @@ public class CraftInventoryAnvil extends CraftInventory implements AnvilInventor
public int getSize() {
return getResultInventory().getSize() + getIngredientsInventory().getSize();
}
+
+ @Override
+ public Location getLocation() {
+ return location;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java
index 6de6e6e6..86c89e86 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java
@@ -23,4 +23,14 @@ public class CraftInventoryBrewer extends CraftInventory implements BrewerInvent
public BrewingStand getHolder() {
return (BrewingStand) inventory.getOwner();
}
+
+ @Override
+ public ItemStack getFuel() {
+ return getItem(4);
+ }
+
+ @Override
+ public void setFuel(ItemStack fuel) {
+ setItem(4, fuel);
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java
index e155329e..e085351f 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java
@@ -55,7 +55,7 @@ public class CraftInventoryCrafting extends CraftInventory implements CraftingIn
for (int j = 0; j < mcItems.length; j++) {
items[i + j] = CraftItemStack.asCraftMirror(mcItems[j]);
}
-
+
return items;
}
@@ -85,10 +85,10 @@ public class CraftInventoryCrafting extends CraftInventory implements CraftingIn
}
public ItemStack[] getMatrix() {
- ItemStack[] items = new ItemStack[getSize()];
net.minecraft.server.ItemStack[] matrix = getMatrixInventory().getContents();
+ ItemStack[] items = new ItemStack[matrix.length];
- for (int i = 0; i < matrix.length; i++ ) {
+ for (int i = 0; i < matrix.length; i++) {
items[i] = CraftItemStack.asCraftMirror(matrix[i]);
}
@@ -108,16 +108,16 @@ public class CraftInventoryCrafting extends CraftInventory implements CraftingIn
net.minecraft.server.ItemStack[] mcItems = getMatrixInventory().getContents();
- for (int i = 0; i < mcItems.length; i++ ) {
+ for (int i = 0; i < mcItems.length; i++) {
if (i < contents.length) {
ItemStack item = contents[i];
if (item == null || item.getTypeId() <= 0) {
- mcItems[i] = null;
+ getMatrixInventory().setItem(i, null);
} else {
- mcItems[i] = CraftItemStack.asNMSCopy(item);
+ getMatrixInventory().setItem(i, CraftItemStack.asNMSCopy(item));
}
} else {
- mcItems[i] = null;
+ getMatrixInventory().setItem(i, null);
}
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
index e99b8cca..2b396782 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java
@@ -14,6 +14,7 @@ import org.bukkit.inventory.InventoryHolder;
import net.minecraft.server.EntityHuman;
import net.minecraft.server.IInventory;
import net.minecraft.server.ItemStack;
+import org.bukkit.Location;
public class CraftInventoryCustom extends CraftInventory {
public CraftInventoryCustom(InventoryHolder owner, InventoryType type) {
@@ -165,8 +166,7 @@ public class CraftInventoryCustom extends CraftInventory {
}
@Override
- public void b(int i, int i1) {
-
+ public void setProperty(int i, int j) {
}
@Override
@@ -193,5 +193,10 @@ public class CraftInventoryCustom extends CraftInventory {
public IChatBaseComponent getScoreboardDisplayName() {
return new ChatComponentText(title);
}
+
+ @Override
+ public Location getLocation() {
+ return null;
+ }
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java
index 7f89c2ad..9051d75c 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java
@@ -2,9 +2,26 @@ package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.InventoryMerchant;
import org.bukkit.inventory.MerchantInventory;
+import org.bukkit.inventory.MerchantRecipe;
public class CraftInventoryMerchant extends CraftInventory implements MerchantInventory {
+
public CraftInventoryMerchant(InventoryMerchant merchant) {
super(merchant);
}
+
+ @Override
+ public int getSelectedRecipeIndex() {
+ return getInventory().e;
+ }
+
+ @Override
+ public MerchantRecipe getSelectedRecipe() {
+ return getInventory().getRecipe().asBukkit();
+ }
+
+ @Override
+ public InventoryMerchant getInventory() {
+ return (InventoryMerchant) inventory;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
index dba8d5ba..a7a6d948 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java
@@ -22,16 +22,33 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i
}
@Override
- public int getSize() {
- return super.getSize() - 4;
+ public ItemStack getItemInMainHand() {
+ return CraftItemStack.asCraftMirror(getInventory().getItemInHand());
+ }
+
+ @Override
+ public void setItemInMainHand(ItemStack item) {
+ setItem(getHeldItemSlot(), item);
+ }
+
+ @Override
+ public ItemStack getItemInOffHand() {
+ return CraftItemStack.asCraftMirror(getInventory().extraSlots[0]);
}
+ @Override
+ public void setItemInOffHand(ItemStack item) {
+ getInventory().extraSlots[0] = CraftItemStack.asNMSCopy(item);
+ }
+
+ @Override
public ItemStack getItemInHand() {
- return CraftItemStack.asCraftMirror(getInventory().getItemInHand());
+ return getItemInMainHand();
}
+ @Override
public void setItemInHand(ItemStack stack) {
- setItem(getHeldItemSlot(), stack);
+ setItemInMainHand(stack);
}
@Override
@@ -86,35 +103,35 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i
}
public ItemStack getHelmet() {
- return getItem(getSize() + 3);
+ return getItem(getSize() - 2);
}
public ItemStack getChestplate() {
- return getItem(getSize() + 2);
+ return getItem(getSize() - 3);
}
public ItemStack getLeggings() {
- return getItem(getSize() + 1);
+ return getItem(getSize() - 4);
}
public ItemStack getBoots() {
- return getItem(getSize() + 0);
+ return getItem(getSize() - 5);
}
public void setHelmet(ItemStack helmet) {
- setItem(getSize() + 3, helmet);
+ setItem(getSize() - 2, helmet);
}
public void setChestplate(ItemStack chestplate) {
- setItem(getSize() + 2, chestplate);
+ setItem(getSize() - 3, chestplate);
}
public void setLeggings(ItemStack leggings) {
- setItem(getSize() + 1, leggings);
+ setItem(getSize() - 4, leggings);
}
public void setBoots(ItemStack boots) {
- setItem(getSize() + 0, boots);
+ setItem(getSize() - 5, boots);
}
public ItemStack[] getArmorContents() {
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
index 5404ee91..82f20455 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
@@ -21,11 +21,14 @@ public final class CraftItemFactory implements ItemFactory {
instance = new CraftItemFactory();
ConfigurationSerialization.registerClass(CraftMetaItem.SerializableMeta.class);
KNOWN_NBT_ATTRIBUTE_NAMES = ImmutableSet.<String>builder()
+ .add("generic.armor")
.add("generic.attackDamage")
.add("generic.followRange")
.add("generic.knockbackResistance")
.add("generic.maxHealth")
.add("generic.movementSpeed")
+ .add("generic.attackSpeed")
+ .add("generic.luck")
.add("horse.jumpStrength")
.add("zombie.spawnReinforcements")
.build();
@@ -103,6 +106,7 @@ public final class CraftItemFactory implements ItemFactory {
case HOPPER:
case REDSTONE_COMPARATOR:
case FLOWER_POT_ITEM:
+ case SHIELD:
return new CraftMetaBlockState(meta, material);
default:
return new CraftMetaItem(meta);
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
index 23f05f4d..8bb128e6 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableMap;
import net.minecraft.server.IChatBaseComponent.ChatSerializer;
import net.minecraft.server.Items;
import net.minecraft.server.NBTTagString;
+import org.bukkit.craftbukkit.enchantments.CraftEnchantment;
import org.bukkit.craftbukkit.util.CraftChatMessage;
@DelegateDeserialization(ItemStack.class)
@@ -230,7 +231,7 @@ public final class CraftItemStack extends ItemStack {
if (handle == null) {
return 0;
}
- return EnchantmentManager.getEnchantmentLevel(ench.getId(), handle);
+ return EnchantmentManager.getEnchantmentLevel(CraftEnchantment.getRaw(ench), handle);
}
@Override
@@ -367,6 +368,7 @@ public final class CraftItemStack extends ItemStack {
case HOPPER:
case REDSTONE_COMPARATOR:
case FLOWER_POT_ITEM:
+ case SHIELD:
return new CraftMetaBlockState(item.getTag(), CraftMagicNumbers.getMaterial(item.getItem()));
default:
return new CraftMetaItem(item.getTag());
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
new file mode 100644
index 00000000..964f7080
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMerchantRecipe.java
@@ -0,0 +1,79 @@
+package org.bukkit.craftbukkit.inventory;
+
+import com.google.common.base.Preconditions;
+import java.util.List;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.MerchantRecipe;
+
+public class CraftMerchantRecipe extends MerchantRecipe {
+
+ private final net.minecraft.server.MerchantRecipe handle;
+
+ public CraftMerchantRecipe(net.minecraft.server.MerchantRecipe merchantRecipe) {
+ super(null, 0);
+ this.handle = merchantRecipe;
+ }
+
+ public CraftMerchantRecipe(ItemStack result, int uses, int maxUses, boolean experienceReward) {
+ super(result, uses, maxUses, experienceReward);
+ this.handle = new net.minecraft.server.MerchantRecipe(
+ CraftItemStack.asNMSCopy(result),
+ null,
+ null,
+ uses,
+ maxUses,
+ this
+ );
+ }
+
+ @Override
+ public int getUses() {
+ return handle.uses;
+ }
+
+ @Override
+ public void setUses(int uses) {
+ handle.uses = uses;
+ }
+
+ @Override
+ public int getMaxUses() {
+ return handle.maxUses;
+ }
+
+ @Override
+ public void setMaxUses(int maxUses) {
+ handle.maxUses = maxUses;
+ }
+
+ @Override
+ public boolean hasExperienceReward() {
+ return handle.rewardExp;
+ }
+
+ @Override
+ public void setExperienceReward(boolean flag) {
+ handle.rewardExp = flag;
+ }
+
+ public net.minecraft.server.MerchantRecipe toMinecraft() {
+ List<ItemStack> ingredients = getIngredients();
+ Preconditions.checkState(!ingredients.isEmpty(), "No offered ingredients");
+ handle.buyingItem1 = CraftItemStack.asNMSCopy(ingredients.get(0));
+ if (ingredients.size() > 1) {
+ handle.buyingItem2 = CraftItemStack.asNMSCopy(ingredients.get(1));
+ }
+ return handle;
+ }
+
+ public static CraftMerchantRecipe fromBukkit(MerchantRecipe recipe) {
+ if (recipe instanceof CraftMerchantRecipe) {
+ return (CraftMerchantRecipe) recipe;
+ } else {
+ CraftMerchantRecipe craft = new CraftMerchantRecipe(recipe.getResult(), recipe.getUses(), recipe.getMaxUses(), recipe.hasExperienceReward());
+ craft.setIngredients(recipe.getIngredients());
+
+ return craft;
+ }
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
index d60686d6..4f1415b7 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java
@@ -4,6 +4,7 @@ import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
import net.minecraft.server.BlockJukeBox;
+import net.minecraft.server.MinecraftServer;
import net.minecraft.server.NBTBase;
import net.minecraft.server.NBTTagCompound;
import net.minecraft.server.TileEntity;
@@ -55,9 +56,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
this.material = material;
if (!(meta instanceof CraftMetaBlockState)
- || ((CraftMetaBlockState) meta).material != material
- || material == Material.SIGN
- || material == Material.COMMAND) {
+ || ((CraftMetaBlockState) meta).material != material) {
blockEntityTag = null;
return;
}
@@ -153,7 +152,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
@Override
boolean applicableTo(Material type) {
- switch(type){
+ switch(type){
case FURNACE:
case CHEST:
case TRAPPED_CHEST:
@@ -173,6 +172,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
case HOPPER:
case REDSTONE_COMPARATOR:
case FLOWER_POT_ITEM:
+ case SHIELD:
return true;
}
return false;
@@ -185,7 +185,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
@Override
public BlockState getBlockState() {
- TileEntity te = blockEntityTag == null ? null : TileEntity.c(blockEntityTag);
+ TileEntity te = blockEntityTag == null ? null : TileEntity.a(MinecraftServer.getServer(), blockEntityTag);
switch (material) {
case SIGN:
@@ -257,6 +257,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
te = new TileEntityBeacon();
}
return new CraftBeacon(material, (TileEntityBeacon) te);
+ case SHIELD:
case BANNER:
case WALL_BANNER:
case STANDING_BANNER:
@@ -320,6 +321,7 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
case BEACON:
valid = te instanceof TileEntityBeacon;
break;
+ case SHIELD:
case BANNER:
case WALL_BANNER:
case STANDING_BANNER:
@@ -333,6 +335,6 @@ public class CraftMetaBlockState extends CraftMetaItem implements BlockStateMeta
Validate.isTrue(valid, "Invalid blockState for " + material);
blockEntityTag = new NBTTagCompound();
- te.b(blockEntityTag);
+ te.save(blockEntityTag);
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java b/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java
index 5e449667..125f7e1a 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java
@@ -6,6 +6,7 @@ import net.minecraft.server.EntityHuman;
import net.minecraft.server.IChatBaseComponent;
import net.minecraft.server.IInventory;
import net.minecraft.server.ItemStack;
+import org.bukkit.Location;
import org.bukkit.craftbukkit.entity.CraftHumanEntity;
import org.bukkit.craftbukkit.util.CraftChatMessage;
import org.bukkit.entity.HumanEntity;
@@ -106,7 +107,7 @@ public class InventoryWrapper implements IInventory {
}
@Override
- public void b(int i, int j) {
+ public void setProperty(int i, int j) {
}
@Override
@@ -170,4 +171,9 @@ public class InventoryWrapper implements IInventory {
public IChatBaseComponent getScoreboardDisplayName() {
return CraftChatMessage.fromString(getName())[0];
}
+
+ @Override
+ public Location getLocation() {
+ return inventory.getLocation();
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java b/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java
index bb16958a..5305f9ad 100644
--- a/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java
+++ b/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java
@@ -5,8 +5,13 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
+import net.minecraft.server.ItemStack;
+import net.minecraft.server.Items;
import net.minecraft.server.MobEffect;
+import net.minecraft.server.MobEffectList;
+import net.minecraft.server.PotionUtil;
+import org.bukkit.Color;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.potion.PotionBrewer;
import org.bukkit.potion.PotionEffect;
@@ -20,7 +25,7 @@ public class CraftPotionBrewer implements PotionBrewer {
if (cache.containsKey(damage))
return cache.get(damage);
- List<?> mcEffects = net.minecraft.server.PotionBrewer.getEffects(damage, false);
+ List<?> mcEffects = PotionUtil.getEffects(new ItemStack(Items.POTION, 1, damage));
List<PotionEffect> effects = new ArrayList<PotionEffect>();
if (mcEffects == null)
return effects;
@@ -29,8 +34,8 @@ public class CraftPotionBrewer implements PotionBrewer {
if (raw == null || !(raw instanceof MobEffect))
continue;
MobEffect mcEffect = (MobEffect) raw;
- PotionEffect effect = new PotionEffect(PotionEffectType.getById(mcEffect.getEffectId()),
- mcEffect.getDuration(), mcEffect.getAmplifier());
+ PotionEffect effect = new PotionEffect(PotionEffectType.getById(MobEffectList.getId(mcEffect.getMobEffect())),
+ mcEffect.getDuration(), mcEffect.getAmplifier(), true, true, Color.fromRGB(mcEffect.getMobEffect().getColor()));
// Minecraft PotionBrewer applies duration modifiers automatically.
effects.add(effect);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java b/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java
index b59d142a..8ce39c6d 100644
--- a/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java
+++ b/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java
@@ -8,13 +8,13 @@ public class CraftPotionEffectType extends PotionEffectType {
private final MobEffectList handle;
public CraftPotionEffectType(MobEffectList handle) {
- super(handle.id);
+ super(MobEffectList.getId(handle));
this.handle = handle;
}
@Override
public double getDurationModifier() {
- return handle.getDurationModifier();
+ return handle.durationModifier;
}
public MobEffectList getHandle() {
@@ -23,7 +23,7 @@ public class CraftPotionEffectType extends PotionEffectType {
@Override
public String getName() {
- switch (handle.id) {
+ switch (getId()) {
case 1:
return "SPEED";
case 2:
@@ -70,8 +70,16 @@ public class CraftPotionEffectType extends PotionEffectType {
return "ABSORPTION";
case 23:
return "SATURATION";
+ case 24:
+ return "GLOWING";
+ case 25:
+ return "LEVITATION";
+ case 26:
+ return "LUCK";
+ case 27:
+ return "UNLUCK";
default:
- return "UNKNOWN_EFFECT_TYPE_" + handle.id;
+ return "UNKNOWN_EFFECT_TYPE_" + getId();
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java b/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java
index b8bf7541..6c3c1eae 100644
--- a/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java
+++ b/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java
@@ -31,6 +31,7 @@ import net.minecraft.server.EntityProjectile;
import net.minecraft.server.EntitySmallFireball;
import net.minecraft.server.EntitySnowball;
import net.minecraft.server.EntityThrownExpBottle;
+import net.minecraft.server.EntityTippedArrow;
import net.minecraft.server.EntityWitherSkull;
import net.minecraft.server.EnumDirection;
import net.minecraft.server.IPosition;
@@ -63,7 +64,7 @@ public class CraftBlockProjectileSource implements BlockProjectileSource {
SourceBlock isourceblock = new SourceBlock(dispenserBlock.getWorld(), dispenserBlock.getPosition());
// Copied from DispenseBehaviorProjectile
IPosition iposition = BlockDispenser.a(isourceblock);
- EnumDirection enumdirection = BlockDispenser.b(isourceblock.f());
+ EnumDirection enumdirection = BlockDispenser.e(isourceblock.f());
net.minecraft.server.World world = dispenserBlock.getWorld();
net.minecraft.server.Entity launch = null;
@@ -79,8 +80,8 @@ public class CraftBlockProjectileSource implements BlockProjectileSource {
} else if (ThrownPotion.class.isAssignableFrom(projectile)) {
launch = new EntityPotion(world, iposition.getX(), iposition.getY(), iposition.getZ(), CraftItemStack.asNMSCopy(new ItemStack(Material.POTION, 1)));
} else if (Arrow.class.isAssignableFrom(projectile)) {
- launch = new EntityArrow(world, iposition.getX(), iposition.getY(), iposition.getZ());
- ((EntityArrow) launch).fromPlayer = 1;
+ launch = new EntityTippedArrow(world, iposition.getX(), iposition.getY(), iposition.getZ());
+ ((EntityArrow) launch).fromPlayer = EntityArrow.PickupStatus.ALLOWED;
((EntityArrow) launch).projectileSource = this;
} else if (Fireball.class.isAssignableFrom(projectile)) {
double d0 = iposition.getX() + (double) ((float) enumdirection.getAdjacentX() * 0.3F);
@@ -92,7 +93,7 @@ public class CraftBlockProjectileSource implements BlockProjectileSource {
double d5 = random.nextGaussian() * 0.05D + (double) enumdirection.getAdjacentZ();
if (SmallFireball.class.isAssignableFrom(projectile)) {
- launch = new EntitySmallFireball(world, d0, d1, d2, d3, d4, d5);
+ launch = new EntitySmallFireball(world, null, d0, d1, d2);
} else if (WitherSkull.class.isAssignableFrom(projectile)) {
launch = new EntityWitherSkull(world);
launch.setPosition(d0, d1, d2);
diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
index 197086e3..db4c1db1 100644
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
@@ -112,7 +112,7 @@ public final class CraftScoreboardManager implements ScoreboardManager {
// CraftBukkit method
public void updateAllScoresForList(IScoreboardCriteria criteria, String name, List<EntityPlayer> of) {
for (ScoreboardScore score : getScoreboardScores(criteria, name, new ArrayList<ScoreboardScore>())) {
- score.updateForList((List) of);
+ // PAIL: FIXME score.updateForList((List) of);
}
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index 589dba72..492c4b55 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -82,6 +82,9 @@ public final class CraftMagicNumbers implements UnsafeValues {
}
public static Block getBlock(Material material) {
+ if (material == null) {
+ return null;
+ }
// TODO: Don't use ID
Block block = Block.getById(material.getId());
diff --git a/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java b/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java
index ad83fd87..dc76c616 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java
@@ -4,7 +4,6 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
-
public abstract class LazyHashSet<E> implements Set<E> {
Set<E> reference = null;
diff --git a/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java b/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java
index ae19da4d..457d19e9 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java
@@ -9,17 +9,22 @@ import org.bukkit.entity.Player;
public class LazyPlayerSet extends LazyHashSet<Player> {
+ private final MinecraftServer server;
+
+ public LazyPlayerSet(MinecraftServer server) {
+ this.server = server;
+ }
+
@Override
HashSet<Player> makeReference() {
if (reference != null) {
throw new IllegalStateException("Reference already created!");
}
- List<EntityPlayer> players = MinecraftServer.getServer().getPlayerList().players;
+ List<EntityPlayer> players = server.getPlayerList().players;
HashSet<Player> reference = new HashSet<Player>(players.size());
for (EntityPlayer player : players) {
reference.add(player.getBukkitEntity());
}
return reference;
}
-
}
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 36eff853..08d68aa8 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<Configuration status="WARN" packages="net.minecraft,com.mojang">
+<Configuration status="WARN" packages="com.mojang.util">
<Appenders>
<Console name="WINDOWS_COMPAT" target="SYSTEM_OUT"></Console>
<Queue name="TerminalConsole">
diff --git a/src/test/java/org/bukkit/BiomeTest.java b/src/test/java/org/bukkit/BiomeTest.java
new file mode 100644
index 00000000..8c6d40ae
--- /dev/null
+++ b/src/test/java/org/bukkit/BiomeTest.java
@@ -0,0 +1,24 @@
+package org.bukkit;
+
+import net.minecraft.server.BiomeBase;
+import org.bukkit.block.Biome;
+import org.bukkit.craftbukkit.block.CraftBlock;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class BiomeTest {
+
+ @Test
+ public void testBukkitToMinecraft() {
+ for (Biome biome : Biome.values()) {
+ Assert.assertNotNull("No NMS mapping for " + biome, CraftBlock.biomeToBiomeBase(biome));
+ }
+ }
+
+ @Test
+ public void testMinecraftToBukkit() {
+ for (BiomeBase biome : BiomeBase.REGISTRY_ID) {
+ Assert.assertNotNull("No Bukkit mapping for " + biome, CraftBlock.biomeBaseToBiome(biome));
+ }
+ }
+}
diff --git a/src/test/java/org/bukkit/ParticleTest.java b/src/test/java/org/bukkit/ParticleTest.java
new file mode 100644
index 00000000..c00869ba
--- /dev/null
+++ b/src/test/java/org/bukkit/ParticleTest.java
@@ -0,0 +1,19 @@
+package org.bukkit;
+
+import net.minecraft.server.EnumParticle;
+import org.bukkit.craftbukkit.CraftParticle;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ParticleTest {
+
+ @Test
+ public void verifyMapping() {
+ for (Particle bukkit : Particle.values()) {
+ Assert.assertNotNull("Missing Bukkit->NMS particle mapping", CraftParticle.toNMS(bukkit));
+ }
+ for (EnumParticle nms : EnumParticle.values()) {
+ Assert.assertNotNull("Missing NMS->Bukkit particle mapping", CraftParticle.toBukkit(nms));
+ }
+ }
+}
diff --git a/src/test/java/org/bukkit/PerMaterialTest.java b/src/test/java/org/bukkit/PerMaterialTest.java
index 2cbf4ecb..b727d1d4 100644
--- a/src/test/java/org/bukkit/PerMaterialTest.java
+++ b/src/test/java/org/bukkit/PerMaterialTest.java
@@ -53,7 +53,7 @@ public class PerMaterialTest extends AbstractTestingBase {
if (material == Material.AIR) {
assertFalse(material.isSolid());
} else if (material.isBlock()) {
- assertThat(material.isSolid(), is(CraftMagicNumbers.getBlock(material).getMaterial().isSolid()));
+ assertThat(material.isSolid(), is(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().isSolid()));
} else {
assertFalse(material.isSolid());
}
@@ -104,7 +104,7 @@ public class PerMaterialTest extends AbstractTestingBase {
if (material == Material.AIR) {
assertTrue(material.isTransparent());
} else if (material.isBlock()) {
- assertThat(material.isTransparent(), is(not(CraftMagicNumbers.getBlock(material).getMaterial().blocksLight())));
+ assertThat(material.isTransparent(), is(not(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().blocksLight())));
} else {
assertFalse(material.isTransparent());
}
@@ -113,7 +113,7 @@ public class PerMaterialTest extends AbstractTestingBase {
@Test
public void isFlammable() {
if (material != Material.AIR && material.isBlock()) {
- assertThat(material.isFlammable(), is(CraftMagicNumbers.getBlock(material).getMaterial().isBurnable()));
+ assertThat(material.isFlammable(), is(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().isBurnable()));
} else {
assertFalse(material.isFlammable());
}
@@ -132,7 +132,7 @@ public class PerMaterialTest extends AbstractTestingBase {
@Test
public void isOccluding() {
if (material.isBlock()) {
- assertThat(material.isOccluding(), is(CraftMagicNumbers.getBlock(material).isOccluding()));
+ assertThat(material.isOccluding(), is(CraftMagicNumbers.getBlock(material).isOccluding(CraftMagicNumbers.getBlock(material).getBlockData())));
} else {
assertFalse(material.isOccluding());
}
diff --git a/src/test/java/org/bukkit/SoundTest.java b/src/test/java/org/bukkit/SoundTest.java
index c9865fa0..2b00b4bf 100644
--- a/src/test/java/org/bukkit/SoundTest.java
+++ b/src/test/java/org/bukkit/SoundTest.java
@@ -1,12 +1,14 @@
package org.bukkit;
+import net.minecraft.server.MinecraftKey;
+import net.minecraft.server.SoundEffect;
+
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.bukkit.craftbukkit.CraftSound;
import org.junit.Test;
-
public class SoundTest {
@Test
@@ -15,4 +17,11 @@ public class SoundTest {
assertThat(sound.name(), CraftSound.getSound(sound), is(not(nullValue())));
}
}
+
+ @Test
+ public void testReverse() {
+ for (MinecraftKey effect : SoundEffect.a.keySet()) {
+ assertNotNull(effect + "", Sound.valueOf(effect.a().replace('.', '_').toUpperCase()));
+ }
+ }
}
diff --git a/src/test/java/org/bukkit/craftbukkit/inventory/NMSCraftItemStackTest.java b/src/test/java/org/bukkit/craftbukkit/inventory/NMSCraftItemStackTest.java
index a1838437..1f5a6a32 100644
--- a/src/test/java/org/bukkit/craftbukkit/inventory/NMSCraftItemStackTest.java
+++ b/src/test/java/org/bukkit/craftbukkit/inventory/NMSCraftItemStackTest.java
@@ -3,7 +3,7 @@ package org.bukkit.craftbukkit.inventory;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
-import net.minecraft.server.Enchantment;
+import net.minecraft.server.Enchantments;
import org.bukkit.inventory.ItemStack;
import org.bukkit.support.AbstractTestingBase;
@@ -14,7 +14,7 @@ public class NMSCraftItemStackTest extends AbstractTestingBase {
@Test
public void testCloneEnchantedItem() throws Exception {
net.minecraft.server.ItemStack nmsItemStack = new net.minecraft.server.ItemStack(net.minecraft.server.Items.POTION);
- nmsItemStack.addEnchantment(Enchantment.DAMAGE_ALL, 1);
+ nmsItemStack.addEnchantment(Enchantments.DAMAGE_ALL, 1);
ItemStack itemStack = CraftItemStack.asCraftMirror(nmsItemStack);
ItemStack clone = itemStack.clone();
assertThat(clone.getType(), is(itemStack.getType()));
diff --git a/src/test/java/org/bukkit/potion/PotionTest.java b/src/test/java/org/bukkit/potion/PotionTest.java
index a9df7d19..691c3e50 100644
--- a/src/test/java/org/bukkit/potion/PotionTest.java
+++ b/src/test/java/org/bukkit/potion/PotionTest.java
@@ -4,10 +4,13 @@ import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import java.util.EnumMap;
+import java.util.List;
import java.util.Map;
+import net.minecraft.server.MobEffect;
+import net.minecraft.server.MobEffectList;
+import net.minecraft.server.PotionRegistry;
import org.bukkit.support.AbstractTestingBase;
-import org.bukkit.support.Util;
import org.junit.Test;
public class PotionTest extends AbstractTestingBase {
@@ -26,20 +29,20 @@ public class PotionTest extends AbstractTestingBase {
@Test
public void testEffectCompleteness() throws Throwable {
- Map<Integer, ?> effectDurations = Util.getInternalState(net.minecraft.server.PotionBrewer.class, null, "effectDurations");
-
Map<PotionType, String> effects = new EnumMap(PotionType.class);
- for (int id : effectDurations.keySet()) {
+ for (PotionRegistry reg : PotionRegistry.a) {
+ List<MobEffect> eff = reg.a();
+ if (eff.size() != 1) continue;
+ int id = MobEffectList.getId(eff.get(0).getMobEffect());
PotionEffectType type = PotionEffectType.getById(id);
assertNotNull(String.valueOf(id), PotionEffectType.getById(id));
PotionType enumType = PotionType.getByEffect(type);
assertNotNull(type.getName(), enumType);
- assertThat(enumType.name(), effects.put(enumType, enumType.name()), is(nullValue()));
+ effects.put(enumType, enumType.name());
}
- assertThat(effects.entrySet(), hasSize(effectDurations.size()));
- assertThat(effectDurations.entrySet(), hasSize(PotionType.values().length - /* WATER */ 1));
+ assertEquals(effects.entrySet().size(), PotionType.values().length - /* WATER */ 1);
}
}
diff --git a/src/test/java/org/bukkit/support/AbstractTestingBase.java b/src/test/java/org/bukkit/support/AbstractTestingBase.java
index 3a362b75..37869feb 100644
--- a/src/test/java/org/bukkit/support/AbstractTestingBase.java
+++ b/src/test/java/org/bukkit/support/AbstractTestingBase.java
@@ -64,7 +64,12 @@ public abstract class AbstractTestingBase {
Material.BIRCH_DOOR,
Material.JUNGLE_DOOR,
Material.ACACIA_DOOR,
- Material.DARK_OAK_DOOR
+ Material.DARK_OAK_DOOR,
+ Material.PURPUR_DOUBLE_SLAB,
+ Material.BEETROOT_BLOCK,
+ Material.END_GATEWAY,
+ Material.STRUCTURE_BLOCK,
+ Material.BURNING_FURNACE
).build();
@BeforeClass
diff --git a/src/test/java/org/bukkit/support/DummyEnchantments.java b/src/test/java/org/bukkit/support/DummyEnchantments.java
index ac34a438..f3cc27e7 100644
--- a/src/test/java/org/bukkit/support/DummyEnchantments.java
+++ b/src/test/java/org/bukkit/support/DummyEnchantments.java
@@ -1,10 +1,10 @@
package org.bukkit.support;
-import net.minecraft.server.Enchantment;
+import net.minecraft.server.Enchantments;
public class DummyEnchantments {
static {
- Enchantment.getEffects();
+ Enchantments.DAMAGE_ALL.getClass();
org.bukkit.enchantments.Enchantment.stopAcceptingRegistrations();
}
diff --git a/src/test/java/org/bukkit/support/DummyPotions.java b/src/test/java/org/bukkit/support/DummyPotions.java
index 30666abd..9c5cdec2 100644
--- a/src/test/java/org/bukkit/support/DummyPotions.java
+++ b/src/test/java/org/bukkit/support/DummyPotions.java
@@ -1,6 +1,6 @@
package org.bukkit.support;
-import net.minecraft.server.MobEffectList;
+import net.minecraft.server.MobEffects;
import org.bukkit.craftbukkit.potion.CraftPotionBrewer;
import org.bukkit.potion.Potion;
@@ -9,7 +9,7 @@ import org.bukkit.potion.PotionEffectType;
public class DummyPotions {
static {
Potion.setPotionBrewer(new CraftPotionBrewer());
- MobEffectList.BLINDNESS.getClass();
+ MobEffects.BLINDNESS.getClass();
PotionEffectType.stopAcceptingRegistrations();
}