summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftChunk.java5
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftServer.java11
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftWorld.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java3
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java6
-rw-r--r--src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java2
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java22
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java26
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java7
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java40
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java9
-rw-r--r--src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java1
12 files changed, 112 insertions, 22 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
index 9b481a08..b1f6a207 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
@@ -72,7 +72,7 @@ public class CraftChunk implements Chunk {
}
public Block getBlock(int x, int y, int z) {
- return new CraftBlock(this, (getX() << 4) | (x & 0xF), y & 0xFF, (getZ() << 4) | (z & 0xF));
+ return new CraftBlock(this, (getX() << 4) | (x & 0xF), y, (getZ() << 4) | (z & 0xF));
}
public Entity[] getEntities() {
@@ -111,7 +111,7 @@ public class CraftChunk implements Chunk {
}
BlockPosition position = (BlockPosition) obj;
- entities[index++] = worldServer.getWorld().getBlockAt(position.getX() + (chunk.locX << 4), position.getY(), position.getZ() + (chunk.locZ << 4)).getState();
+ entities[index++] = worldServer.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ()).getState();
}
return entities;
}
@@ -170,6 +170,7 @@ public class CraftChunk implements Chunk {
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;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index f2a78c17..fa1fe206 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -114,11 +114,11 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.MapMaker;
import com.mojang.authlib.GameProfile;
+
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufOutputStream;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.base64.Base64;
-
import jline.console.ConsoleReader;
public final class CraftServer implements Server {
@@ -844,8 +844,13 @@ public final class CraftServer implements Server {
} while(used);
boolean hardcore = false;
- WorldData worlddata = new WorldData(new WorldSettings(creator.seed(), EnumGamemode.getById(getDefaultGameMode().getValue()), generateStructures, hardcore, type), name);
- WorldServer internal = (WorldServer) new WorldServer(console, new ServerNBTManager(getWorldContainer(), name, true), worlddata, dimension, console.methodProfiler, creator.environment(), generator).b();
+ IDataManager sdm = new ServerNBTManager(getWorldContainer(), name, true);
+ WorldData worlddata = sdm.getWorldData();
+ if (worlddata == null) {
+ worlddata = new WorldData(new WorldSettings(creator.seed(), EnumGamemode.getById(getDefaultGameMode().getValue()), generateStructures, hardcore, type), name);
+ }
+ worlddata.checkName(name); // CraftBukkit - Migration did not rewrite the level.dat; This forces 1.8 to take the last loaded world as respawn (in this case the end)
+ WorldServer internal = (WorldServer) new WorldServer(console, sdm, worlddata, dimension, console.methodProfiler, creator.environment(), generator).b();
if (!(worlds.containsKey(name.toLowerCase()))) {
return null;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index f20a0406..83efd6ae 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -82,7 +82,7 @@ public class CraftWorld implements World {
}
public Block getBlockAt(int x, int y, int z) {
- return getChunkAt(x >> 4, z >> 4).getBlock(x & 0xF, y & 0xFF, z & 0xF);
+ return getChunkAt(x >> 4, z >> 4).getBlock(x & 0xF, y, z & 0xF);
}
public int getBlockTypeIdAt(int x, int y, int z) {
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index 5fadeffc..de358572 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -121,7 +121,8 @@ public class CraftBlock implements Block {
}
public boolean setTypeId(final int type, final boolean applyPhysics) {
- return setTypeIdAndData(type, getData(), applyPhysics);
+ net.minecraft.server.Block block = getNMSBlock(type);
+ return setTypeIdAndData(type, (byte) block.toLegacyData(block.getBlockData()), applyPhysics);
}
public boolean setTypeIdAndData(final int type, final byte data, final boolean applyPhysics) {
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
index 9fb32a82..bf6841c9 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
@@ -140,14 +140,12 @@ public class CraftBlockState implements BlockState {
Block block = getBlock();
if (block.getType() != getType()) {
- if (force) {
- block.setTypeId(getTypeId(), applyPhysics);
- } else {
+ if (!force) {
return false;
}
}
- block.setData(getRawData(), applyPhysics);
+ block.setTypeIdAndData(getTypeId(), getRawData(), applyPhysics);
world.getHandle().notify(new BlockPosition(x, y, z));
return true;
diff --git a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
index c2d4c2e4..26ea0d3a 100644
--- a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
+++ b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java
@@ -45,7 +45,7 @@ class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider<QueuedChu
Server server = queuedChunk.provider.world.getServer();
if (server != null) {
- server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkLoadEvent(chunk.bukkitChunk, false));
+ server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkLoadEvent(chunk.bukkitChunk, false));
}
// Update neighbor counts
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
index e69f417b..f045e1c7 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
@@ -219,6 +219,20 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
openCustomInventory(inventory, player, "minecraft:hopper");
}
break;
+ case BEACON:
+ if (craftinv.getInventory() instanceof TileEntityBeacon) {
+ getHandle().openTileEntity((TileEntityBeacon) craftinv.getInventory());
+ } else {
+ openCustomInventory(inventory, player, "minecraft:beacon");
+ }
+ break;
+ case ANVIL:
+ if (craftinv.getInventory() instanceof TileEntityContainerAnvil) {
+ getHandle().openTileEntity((TileEntityContainerAnvil) craftinv.getInventory());
+ } else {
+ openCustomInventory(inventory, player, "minecraft:anvil");
+ }
+ break;
case CREATIVE:
case CRAFTING:
throw new IllegalArgumentException("Can't open a " + type + " inventory!");
@@ -240,6 +254,14 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
String title = container.getBukkitView().getTitle();
int size = container.getBukkitView().getTopInventory().getSize();
+ // Special cases
+ if (windowType.equals("minecraft:crafting_table")
+ || windowType.equals("minecraft:anvil")
+ || windowType.equals("minecraft:enchanting_table")
+ ) {
+ size = 0;
+ }
+
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(container.windowId, windowType, new ChatComponentText(title), size));
getHandle().activeContainer = container;
getHandle().activeContainer.addSlotListener(player);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
index 3f4e1ae6..82370939 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
@@ -52,11 +52,19 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame {
case 0:
return Rotation.NONE;
case 1:
- return Rotation.CLOCKWISE;
+ return Rotation.CLOCKWISE_45;
case 2:
- return Rotation.FLIPPED;
+ return Rotation.CLOCKWISE;
case 3:
+ return Rotation.CLOCKWISE_135;
+ case 4:
+ return Rotation.FLIPPED;
+ case 5:
+ return Rotation.FLIPPED_45;
+ case 6:
return Rotation.COUNTER_CLOCKWISE;
+ case 7:
+ return Rotation.COUNTER_CLOCKWISE_45;
default:
throw new AssertionError("Unknown rotation " + value + " for " + getHandle());
}
@@ -72,12 +80,20 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame {
switch (rotation) {
case NONE:
return 0;
- case CLOCKWISE:
+ case CLOCKWISE_45:
return 1;
- case FLIPPED:
+ case CLOCKWISE:
return 2;
- case COUNTER_CLOCKWISE:
+ case CLOCKWISE_135:
return 3;
+ case FLIPPED:
+ return 4;
+ case FLIPPED_45:
+ return 5;
+ case COUNTER_CLOCKWISE:
+ return 6;
+ case COUNTER_CLOCKWISE_45:
+ return 7;
default:
throw new IllegalArgumentException(rotation + " is not applicable to an ItemFrame");
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 286a58c2..3b9bfecc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -176,7 +176,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public String getPlayerListName() {
- return CraftChatMessage.fromComponent(getHandle().listName);
+ return getHandle().listName == null ? getName() : CraftChatMessage.fromComponent(getHandle().listName);
}
@Override
@@ -899,12 +899,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
EntityTracker tracker = ((WorldServer) entity.world).tracker;
EntityPlayer other = ((CraftPlayer) player).getHandle();
+
+ getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, other));
+
EntityTrackerEntry entry = (EntityTrackerEntry) tracker.trackedEntities.get(other.getId());
if (entry != null && !entry.trackedPlayers.contains(getHandle())) {
entry.updatePlayer(getHandle());
}
-
- getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, other));
}
public void removeDisconnectingPlayer(Player player) {
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
index b49c2dca..59be14b7 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
@@ -20,6 +20,10 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import com.google.common.collect.ImmutableMap;
+import net.minecraft.server.ChatSerializer;
+import net.minecraft.server.Items;
+import net.minecraft.server.NBTTagString;
+import org.bukkit.craftbukkit.util.CraftChatMessage;
@DelegateDeserialization(ItemStack.class)
public final class CraftItemStack extends ItemStack {
@@ -374,6 +378,42 @@ public final class CraftItemStack extends ItemStack {
item.setTag(tag);
((CraftMetaItem) itemMeta).applyToItem(tag);
+
+ // Hacky fix for books
+ // TODO: Not use a hacky fix for books
+ if (tag.getBoolean(CraftMetaBook.RESOLVED.NBT) && item.getItem() == Items.WRITABLE_BOOK) {
+ if (tag.hasKey(CraftMetaBook.BOOK_PAGES.NBT)) {
+ NBTTagList pages = tag.getList(CraftMetaBook.BOOK_PAGES.NBT, 8);
+
+ for (int i = 0; i < pages.size(); i++) {
+ String page = pages.getString(i);
+ page = CraftChatMessage.fromComponent(ChatSerializer.a(page));
+ pages.a(i, new NBTTagString(page));
+ }
+ tag.set(CraftMetaBook.BOOK_PAGES.NBT, pages);
+ }
+ tag.setBoolean(CraftMetaBook.RESOLVED.NBT, false);
+ } else if (!tag.getBoolean(CraftMetaBook.RESOLVED.NBT) && item.getItem() == Items.WRITTEN_BOOK) {
+ if (tag.hasKey(CraftMetaBook.BOOK_PAGES.NBT)) {
+ NBTTagList pages = tag.getList(CraftMetaBook.BOOK_PAGES.NBT, 8);
+
+ for (int i = 0; i < pages.size(); i++) {
+ String page = pages.getString(i);
+ page = ChatSerializer.a(CraftChatMessage.fromString(page, true)[0]);
+ pages.a(i, new NBTTagString(page));
+ }
+ tag.set(CraftMetaBook.BOOK_PAGES.NBT, pages);
+ }
+
+ tag.setBoolean(CraftMetaBook.RESOLVED.NBT, true);
+ if (!tag.hasKey(CraftMetaBook.BOOK_TITLE.NBT)) {
+ tag.setString(CraftMetaBook.BOOK_TITLE.NBT, "");
+ }
+ if (!tag.hasKey(CraftMetaBook.BOOK_AUTHOR.NBT)) {
+ tag.setString(CraftMetaBook.BOOK_AUTHOR.NBT, "");
+ }
+ }
+
return true;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java
index d61615bf..713d70cd 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java
@@ -145,8 +145,13 @@ public class CraftMetaBanner extends CraftMetaItem implements BannerMeta {
ImmutableMap.Builder<String, Object> serialize(ImmutableMap.Builder<String, Object> builder) {
super.serialize(builder);
- builder.put(BASE.BUKKIT, base);
- builder.put(PATTERNS.BUKKIT, ImmutableList.copyOf(patterns));
+ if(base != null){
+ builder.put(BASE.BUKKIT, base);
+ }
+
+ if(!patterns.isEmpty()){
+ builder.put(PATTERNS.BUKKIT, ImmutableList.copyOf(patterns));
+ }
return builder;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index c9738c4f..1f7b5239 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -96,6 +96,7 @@ class CraftMetaItem implements ItemMeta, Repairable {
static {
classMap = ImmutableMap.<Class<? extends CraftMetaItem>, String>builder()
+ .put(CraftMetaBanner.class, "BANNER")
.put(CraftMetaBook.class, "BOOK")
.put(CraftMetaSkull.class, "SKULL")
.put(CraftMetaLeatherArmor.class, "LEATHER_ARMOR")