diff options
author | Dinnerbone <dinnerbone@dinnerbone.com> | 2011-01-08 01:22:17 +0000 |
---|---|---|
committer | Dinnerbone <dinnerbone@dinnerbone.com> | 2011-01-08 01:22:17 +0000 |
commit | d374bff8d0973a592d744f70d24c271717eb7bfc (patch) | |
tree | 8f90d0d3906ad80c3c007c2e5e1d55c44ca7d8d4 /src | |
parent | c9efe9454520fbe57a9d3e02eeb9d355915fb4dc (diff) | |
download | craftbukkit-d374bff8d0973a592d744f70d24c271717eb7bfc.tar craftbukkit-d374bff8d0973a592d744f70d24c271717eb7bfc.tar.gz craftbukkit-d374bff8d0973a592d744f70d24c271717eb7bfc.tar.lz craftbukkit-d374bff8d0973a592d744f70d24c271717eb7bfc.tar.xz craftbukkit-d374bff8d0973a592d744f70d24c271717eb7bfc.zip |
Implemented BlockState.update(boolean), signs should now work, cleaned up some code a little
Diffstat (limited to 'src')
7 files changed, 156 insertions, 120 deletions
diff --git a/src/main/java/net/minecraft/server/EntityMinecart.java b/src/main/java/net/minecraft/server/EntityMinecart.java index 5b5437f0..cb54f5fe 100644 --- a/src/main/java/net/minecraft/server/EntityMinecart.java +++ b/src/main/java/net/minecraft/server/EntityMinecart.java @@ -2,8 +2,8 @@ package net.minecraft.server; import java.util.List; -import org.bukkit.Location;
-import org.bukkit.Vector;
+import org.bukkit.Location; +import org.bukkit.Vector; import org.bukkit.craftbukkit.CraftEntity; import org.bukkit.craftbukkit.CraftMappable; import org.bukkit.craftbukkit.CraftMinecart; @@ -14,7 +14,7 @@ import org.bukkit.event.vehicle.*; public class EntityMinecart extends Entity implements IInventory, CraftMappable { - private CraftMinecart minecart;
+ private CraftMinecart minecart; private ItemStack ak[]; public int a; @@ -94,18 +94,18 @@ public class EntityMinecart extends Entity private double aq; private double ar; private double as; -
- private boolean slowWhenEmpty = true;
- private double derailedX = 0.5;
- private double derailedY = 0.5;
- private double derailedZ = 0.5;
- private double flyingX = 0.94999998807907104;
- private double flyingY = 0.94999998807907104;
+ + private boolean slowWhenEmpty = true; + private double derailedX = 0.5; + private double derailedY = 0.5; + private double derailedZ = 0.5; + private double flyingX = 0.94999998807907104; + private double flyingY = 0.94999998807907104; private double flyingZ = 0.94999998807907104; public CraftEntity getCraftEntity() { return minecart; - }
+ } public EntityMinecart(World world) { super(world); @@ -120,7 +120,7 @@ public class EntityMinecart extends Entity M = false; // CraftBukkit start - handleCreation(world);
+ handleCreation(world); // CraftBukkit end } @@ -155,19 +155,19 @@ public class EntityMinecart extends Entity d = i; // CraftBukkit start - handleCreation(world);
- // CraftBukkit end
- }
-
- // CraftBukkit start
- private void handleCreation(World world) {
- CraftServer server = ((WorldServer) world).getServer();
+ handleCreation(world); + // CraftBukkit end + } + + // CraftBukkit start + private void handleCreation(World world) { + CraftServer server = ((WorldServer) world).getServer(); minecart = CraftMinecart.getCraftMinecart(server, this); - VehicleCreateEvent event = new VehicleCreateEvent(
- Type.VEHICLE_CREATE, minecart);
- server.getPluginManager().callEvent(event);
+ VehicleCreateEvent event = new VehicleCreateEvent( + Type.VEHICLE_CREATE, minecart); + server.getPluginManager().callEvent(event); } - // CraftBukkit end
+ // CraftBukkit end public double j() { return (double) J * 0.0D - 0.30000001192092896D; @@ -176,14 +176,14 @@ public class EntityMinecart extends Entity public boolean a(Entity entity, int i) { // CraftBukkit start VehicleDamageEvent event = new VehicleDamageEvent( - Type.VEHICLE_DAMAGE, minecart,
- ((WorldServer)l).getWorld().toCraftEntity(entity), i);
- ((WorldServer)l).getServer().getPluginManager().callEvent(event);
+ Type.VEHICLE_DAMAGE, minecart, + ((WorldServer)l).getWorld().toCraftEntity(entity), i); + ((WorldServer)l).getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { return true; } - // CraftBukkit end
+ // CraftBukkit end i = event.getDamage(); @@ -246,12 +246,12 @@ public class EntityMinecart extends Entity } public void b_() { - double prevX = p;
- double prevY = q;
- double prevZ = r;
- float prevYaw = v;
- float prevPitch = w;
-
+ double prevX = p; + double prevY = q; + double prevZ = r; + float prevYaw = v; + float prevPitch = w; + if (b > 0) { b--; } @@ -380,7 +380,7 @@ public class EntityMinecart extends Entity } else if (ai[1][1] != 0 && MathHelper.b(p) - i == ai[1][0] && MathHelper.b(r) - i1 == ai[1][2]) { a(p, q + (double) ai[1][1], r); } - if (j != null || !slowWhenEmpty) {
+ if (j != null || !slowWhenEmpty) { s *= 0.99699997901916504D; t *= 0.0D; u *= 0.99699997901916504D; @@ -459,18 +459,18 @@ public class EntityMinecart extends Entity u = d6; } if (A) { - s *= derailedX;
- t *= derailedY;
- u *= derailedZ;
+ s *= derailedX; + t *= derailedY; + u *= derailedZ; } c(s, t, u); if (!A) { - s *= flyingX;
- t *= flyingY;
- u *= flyingZ;
+ s *= flyingX; + t *= flyingY; + u *= flyingZ; } - }
-
+ } + w = 0.0F; double d28 = m - p; double d29 = o - r; @@ -637,36 +637,36 @@ public class EntityMinecart extends Entity } // CraftBukkit start - CraftServer server = ((WorldServer)l).getServer();
- VehicleEntityCollisionEvent collsionEvent = new VehicleEntityCollisionEvent(
- Type.VEHICLE_COLLISION_ENTITY, minecart,
- ((WorldServer)l).getWorld().toCraftEntity(entity));
- server.getPluginManager().callEvent(collsionEvent);
+ CraftServer server = ((WorldServer)l).getServer(); + VehicleEntityCollisionEvent collsionEvent = new VehicleEntityCollisionEvent( + Type.VEHICLE_COLLISION_ENTITY, minecart, + ((WorldServer)l).getWorld().toCraftEntity(entity)); + server.getPluginManager().callEvent(collsionEvent); - if (collsionEvent.isCancelled()) {
- return;
+ if (collsionEvent.isCancelled()) { + return; + } + // CraftBukkit end + + if (!collsionEvent.isPickupCancelled() + && (entity instanceof EntityLiving) && !(entity instanceof EntityPlayer) + && d == 0 && s * s + u * u > 0.01D && j == null && entity.k == null) { + // CraftBukkit start + VehicleEnterEvent enterEvent = new VehicleEnterEvent( + Type.VEHICLE_ENTER, minecart, + ((WorldServer)l).getWorld().toCraftEntity(entity)); + server.getPluginManager().callEvent(enterEvent); + // CraftBukkit end + + if (!enterEvent.isCancelled()) { + entity.e(this); + } } - // CraftBukkit end
-
- if (!collsionEvent.isPickupCancelled()
- && (entity instanceof EntityLiving) && !(entity instanceof EntityPlayer)
- && d == 0 && s * s + u * u > 0.01D && j == null && entity.k == null) {
- // CraftBukkit start
- VehicleEnterEvent enterEvent = new VehicleEnterEvent(
- Type.VEHICLE_ENTER, minecart,
- ((WorldServer)l).getWorld().toCraftEntity(entity));
- server.getPluginManager().callEvent(enterEvent);
- // CraftBukkit end
-
- if (!enterEvent.isCancelled()) {
- entity.e(this);
- }
- }
double d1 = entity.p - p; double d2 = entity.r - r; double d3 = d1 * d1 + d2 * d2; - if (!collsionEvent.isCollisionCancelled() && d3 >= 9.9999997473787516E-005D) {
+ if (!collsionEvent.isCollisionCancelled() && d3 >= 9.9999997473787516E-005D) { d3 = MathHelper.a(d3); d1 /= d3; d2 /= d3; @@ -760,7 +760,7 @@ public class EntityMinecart extends Entity public void d() {} - public boolean a(EntityPlayer entityplayer) {
+ public boolean a(EntityPlayer entityplayer) { if (d == 0) { if (j != null && (j instanceof EntityPlayer) && j != entityplayer) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/CraftBlock.java index 204a25eb..1650e972 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftBlock.java @@ -4,6 +4,7 @@ package org.bukkit.craftbukkit; import org.bukkit.*; import org.bukkit.block.BlockState; import org.bukkit.craftbukkit.block.CraftBlockState; +import org.bukkit.craftbukkit.block.CraftSign; public class CraftBlock implements Block { private final CraftWorld world; @@ -253,6 +254,15 @@ public class CraftBlock implements Block { } public BlockState getState() { - return new CraftBlockState(world, x, y, z, type, data); + Material material = getType(); + + switch (material) { + case Sign: + case SignPost: + case WallSign: + return new CraftSign(this); + default: + return new CraftBlockState(this); + } } } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftBoat.java b/src/main/java/org/bukkit/craftbukkit/CraftBoat.java index dd3acb62..cad1e407 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftBoat.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftBoat.java @@ -1,18 +1,18 @@ -package org.bukkit.craftbukkit;
-
-import net.minecraft.server.EntityBoat;
-import org.bukkit.Boat;
-
-/**
- * A minecart.
- *
- * @author sk89q
- */
-public class CraftBoat extends CraftVehicle implements Boat {
- protected EntityBoat boat;
-
- public CraftBoat(CraftServer server, EntityBoat entity) {
- super(server, entity);
- boat = entity;
- }
-}
+package org.bukkit.craftbukkit; + +import net.minecraft.server.EntityBoat; +import org.bukkit.Boat; + +/** + * A minecart. + * + * @author sk89q + */ +public class CraftBoat extends CraftVehicle implements Boat { + protected EntityBoat boat; + + public CraftBoat(CraftServer server, EntityBoat entity) { + super(server, entity); + boat = entity; + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftMappable.java b/src/main/java/org/bukkit/craftbukkit/CraftMappable.java index 9bcc4b99..8e411846 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftMappable.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftMappable.java @@ -1,16 +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();
-}
+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 fdfcaea5..3631d132 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -14,6 +14,7 @@ import net.minecraft.server.EntityPlayerMP; import net.minecraft.server.EntitySnowball; import net.minecraft.server.EntityArrow; import net.minecraft.server.EntityPlayer; +import net.minecraft.server.TileEntity; import net.minecraft.server.WorldGenBigTree; import net.minecraft.server.WorldServer; import net.minecraft.server.WorldGenTrees; @@ -185,6 +186,10 @@ public class CraftWorld implements World { } } + public TileEntity getTileEntityAt(final int x, final int y, final int z) { + return world.l(x, y, z); + } + @Override public String toString() { return "CraftWorld"; diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java index 0b216be1..f2a0c275 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java @@ -19,15 +19,15 @@ public class CraftBlockState implements BlockState { protected byte data; protected byte light; - public CraftBlockState(final CraftWorld world, final int x, final int y, final int z, final int type, final byte data) { - this.world = world; - this.x = x; - this.y = y; - this.z = z; - this.type = type; - this.data = data; - this.light = (byte)world.getHandle().i(x, y, z); - this.chunk = (CraftChunk)world.getChunkAt(x << 4, z << 4); + public CraftBlockState(final Block block) { + this.world = (CraftWorld)block.getWorld(); + this.x = block.getX(); + this.y = block.getY(); + this.z = block.getZ(); + this.type = block.getTypeID(); + this.data = block.getData(); + this.light = block.getLightLevel(); + this.chunk = (CraftChunk)block.getChunk(); } /** @@ -153,8 +153,14 @@ public class CraftBlockState implements BlockState { synchronized (block) { if (block.getType() != this.getType()) { - return false; + if (force) { + block.setTypeID(this.getTypeID()); + } else { + return false; + } } + + block.setData(data); } return true; diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java b/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java index ec606a75..a3a8649b 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java @@ -1,27 +1,42 @@ package org.bukkit.craftbukkit.block; +import net.minecraft.server.TileEntitySign; import org.bukkit.Block; -import org.bukkit.Chunk; -import org.bukkit.Material; -import org.bukkit.World; import org.bukkit.block.Sign; import org.bukkit.craftbukkit.CraftWorld; public class CraftSign extends CraftBlockState implements Sign { - public CraftSign(final CraftWorld world, final int x, final int y, final int z, final int type, final byte data) { - super(world, x, y, z, type, data); + private final CraftWorld world; + private final TileEntitySign sign; + + public CraftSign(final Block block) { + super(block); + + world = (CraftWorld)block.getWorld(); + sign = (TileEntitySign)world.getTileEntityAt(getX(), getY(), getZ()); } public String[] getLines() { - throw new UnsupportedOperationException("Not supported yet."); + return sign.e; } public String getLine(int index) throws IndexOutOfBoundsException { - throw new UnsupportedOperationException("Not supported yet."); + return sign.e[index]; } public void setLine(int index, String line) throws IndexOutOfBoundsException { - throw new UnsupportedOperationException("Not supported yet."); + sign.e[index] = line; + } + + @Override + public boolean update(boolean force) { + boolean result = super.update(force); + + if (result) { + sign.d(); + } + + return result; } } |