From 6d6668aaeb785b204e53e67d68261207e66c9230 Mon Sep 17 00:00:00 2001 From: sk89q Date: Fri, 7 Jan 2011 14:01:37 -0800 Subject: [PATCH] Implemented World.spawnBoat(), added CraftMappable interface that defines a method to get an org.bukkit.craftbukkit.CraftEntity from implementing net.minecart.server.Entity entities, changed CraftWorld.toCraftEntity() to use this new interface for boats and minecarts. --- .../java/net/minecraft/server/EntityBoat.java | 10 ++++++++-- .../net/minecraft/server/EntityMinecart.java | 12 +++++++++--- .../org/bukkit/craftbukkit/CraftMappable.java | 16 ++++++++++++++++ .../org/bukkit/craftbukkit/CraftWorld.java | 19 +++++++++++-------- 4 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/bukkit/craftbukkit/CraftMappable.java diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java index 528b1817be..92412d9515 100644 --- a/src/main/java/net/minecraft/server/EntityBoat.java +++ b/src/main/java/net/minecraft/server/EntityBoat.java @@ -4,6 +4,8 @@ import java.util.List; import org.bukkit.Location; import org.bukkit.craftbukkit.CraftBoat; +import org.bukkit.craftbukkit.CraftEntity; +import org.bukkit.craftbukkit.CraftMappable; import org.bukkit.craftbukkit.CraftMinecart; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.event.Event.Type; @@ -13,9 +15,9 @@ import org.bukkit.event.vehicle.VehicleEnterEvent; import org.bukkit.event.vehicle.VehicleEntityCollisionEvent; import org.bukkit.event.vehicle.VehicleMoveEvent; -public class EntityBoat extends Entity { +public class EntityBoat extends Entity implements CraftMappable { - public CraftBoat boat; + private CraftBoat boat; public int a; public int b; @@ -27,6 +29,10 @@ public class EntityBoat extends Entity { private double ak; private double al; + public CraftEntity getCraftEntity() { + return boat; + } + public EntityBoat(World world) { super(world); a = 0; diff --git a/src/main/java/net/minecraft/server/EntityMinecart.java b/src/main/java/net/minecraft/server/EntityMinecart.java index a590fa2c3e..5b5437f0cd 100644 --- a/src/main/java/net/minecraft/server/EntityMinecart.java +++ b/src/main/java/net/minecraft/server/EntityMinecart.java @@ -4,15 +4,17 @@ import java.util.List; import org.bukkit.Location; import org.bukkit.Vector; +import org.bukkit.craftbukkit.CraftEntity; +import org.bukkit.craftbukkit.CraftMappable; import org.bukkit.craftbukkit.CraftMinecart; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.event.Event.Type; import org.bukkit.event.vehicle.*; public class EntityMinecart extends Entity - implements IInventory { + implements IInventory, CraftMappable { - public CraftMinecart minecart; + private CraftMinecart minecart; private ItemStack ak[]; public int a; @@ -99,7 +101,11 @@ public class EntityMinecart extends Entity private double derailedZ = 0.5; private double flyingX = 0.94999998807907104; private double flyingY = 0.94999998807907104; - private double flyingZ = 0.94999998807907104; + private double flyingZ = 0.94999998807907104; + + public CraftEntity getCraftEntity() { + return minecart; + } public EntityMinecart(World world) { super(world); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftMappable.java b/src/main/java/org/bukkit/craftbukkit/CraftMappable.java new file mode 100644 index 0000000000..9bcc4b9936 --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/CraftMappable.java @@ -0,0 +1,16 @@ +package org.bukkit.craftbukkit; + +/** + * Indicates that an object has a method to get its CraftBukkit-equivalent + * CraftEntity object from its Minecraft net.minecraft.server.Entity object. + * + * @author sk89q + */ +public interface CraftMappable { + /** + * Gets the CraftEntity version. + * + * @return + */ + public CraftEntity getCraftEntity(); +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index b236c2ca67..fb6d67f6ff 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -7,6 +7,7 @@ import java.util.Map; import net.minecraft.server.EntityMinecart; import java.util.Random; +import net.minecraft.server.EntityBoat; import net.minecraft.server.EntityEgg; import net.minecraft.server.EntityLiving; import net.minecraft.server.EntityPlayerMP; @@ -18,6 +19,7 @@ import net.minecraft.server.WorldServer; import net.minecraft.server.WorldGenTrees; import org.bukkit.Arrow; import org.bukkit.Block; +import org.bukkit.Boat; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Minecart; @@ -144,6 +146,13 @@ public class CraftWorld implements World { return new CraftPoweredMinecart(world.getServer(), minecart); } + public Boat spawnBoat(Location loc) { + EntityBoat boat = + new EntityBoat(world, loc.getX(), loc.getY(), loc.getZ()); + world.a(boat); + return new CraftBoat(world.getServer(), boat); + } + public boolean generateTree(Location loc) { WorldGenTrees treeGen = new WorldGenTrees(); return treeGen.a(world, rand, @@ -165,18 +174,12 @@ public class CraftWorld implements World { return new CraftPlayer(world.getServer(), (EntityPlayerMP)entity); } else if (entity instanceof EntitySnowball) { return new CraftSnowball(world.getServer(), (EntitySnowball)entity); - } else if (entity instanceof EntityMinecart) { - EntityMinecart minecart = (EntityMinecart)entity; - if (minecart.minecart != null) { - return minecart.minecart; - } - - return CraftMinecart.getCraftMinecart(world.getServer(), - (EntityMinecart)entity); } else if (entity instanceof EntityPlayer) { return new CraftHumanEntity(world.getServer(), (EntityPlayer)entity); } else if (entity instanceof EntityLiving) { return new CraftLivingEntity(world.getServer(), (EntityLiving)entity); + } else if (entity instanceof CraftMappable) { + return ((CraftMappable)entity).getCraftEntity(); } else { return null; }