summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/minecraft/server/BlockFire.java54
-rw-r--r--src/main/java/net/minecraft/server/EntityCreature.java32
-rw-r--r--src/main/java/net/minecraft/server/EntityMobs.java20
-rw-r--r--src/main/java/net/minecraft/server/EntityPigZombie.java24
-rw-r--r--src/main/java/net/minecraft/server/EntitySpider.java18
-rw-r--r--src/main/java/net/minecraft/server/MinecraftServer.java4
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftServer.java8
-rw-r--r--src/main/java/org/bukkit/craftbukkit/CraftWorld.java43
-rw-r--r--src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java8
-rw-r--r--src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java3
10 files changed, 182 insertions, 32 deletions
diff --git a/src/main/java/net/minecraft/server/BlockFire.java b/src/main/java/net/minecraft/server/BlockFire.java
index d3c8e396..96eb7983 100644
--- a/src/main/java/net/minecraft/server/BlockFire.java
+++ b/src/main/java/net/minecraft/server/BlockFire.java
@@ -7,6 +7,7 @@ import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
import org.bukkit.craftbukkit.CraftWorld;
import java.util.Random;
+import org.bukkit.event.block.BlockBurnEvent;
// CraftBukkit end
public class BlockFire extends Block {
@@ -90,7 +91,7 @@ public class BlockFire extends Block {
Server server = ((WorldServer)world).getServer();
CraftWorld cworld = ((WorldServer)world).getWorld();
- org.bukkit.block.Block theBlock = (cworld.getBlockAt(i1, j1, k1));
+ org.bukkit.block.Block theBlock = (cworld.getBlockAt(i1, k1, j1));
IgniteCause igniteCause = BlockIgniteEvent.IgniteCause.SPREAD;
Player thePlayer = null;
@@ -98,7 +99,7 @@ public class BlockFire extends Block {
BlockIgniteEvent event = new BlockIgniteEvent(theBlock, igniteCause, thePlayer);
server.getPluginManager().callEvent(event);
if (event.isCancelled()) {
- return;
+ continue;
}
}
// CraftBukkit end
@@ -116,31 +117,36 @@ public class BlockFire extends Block {
if (random.nextInt(l) < i1) {
boolean flag = world.a(i, j, k) == Block.am.bi;
-
- if (random.nextInt(2) == 0) {
- // CraftBukkit start: Call to stop very slow spread of fire.
- Server server = ((WorldServer)world).getServer();
- CraftWorld cworld = ((WorldServer)world).getWorld();
-
- org.bukkit.block.Block theBlock = (cworld.getBlockAt(i, j, k));
- IgniteCause igniteCause = BlockIgniteEvent.IgniteCause.SLOW_SPREAD;
- Player thePlayer = null;
-
- if (theBlock.getTypeId() != Block.ar.bi){
- BlockIgniteEvent event = new BlockIgniteEvent(theBlock, igniteCause, thePlayer);
- server.getPluginManager().callEvent(event);
- if (event.isCancelled()) {
- return;
+ // CraftBukkit start: BlockBurnEvent
+ Server server = ((WorldServer)world).getServer();
+ CraftWorld cworld = ((WorldServer)world).getWorld();
+ org.bukkit.block.Block theBlock = (cworld.getBlockAt(i, j, k));
+ BlockBurnEvent burnEvent = new BlockBurnEvent(theBlock);
+ server.getPluginManager().callEvent(burnEvent);
+ if(!burnEvent.isCancelled()) {
+ if (random.nextInt(2) == 0) {
+ // CraftBukkit start: Call to stop very slow spread of fire.
+
+ IgniteCause igniteCause = BlockIgniteEvent.IgniteCause.SLOW_SPREAD;
+ Player thePlayer = null;
+
+ if (theBlock.getTypeId() != Block.ar.bi){
+ BlockIgniteEvent event = new BlockIgniteEvent(theBlock, igniteCause, thePlayer);
+ server.getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ return;
+ }
}
+ // CraftBukkit end
+ world.e(i, j, k, bi);
+ } else {
+ world.e(i, j, k, 0);
+ }
+ if (flag) {
+ Block.am.a(world, i, j, k, 0);
}
- // CraftBukkit end
- world.e(i, j, k, bi);
- } else {
- world.e(i, j, k, 0);
- }
- if (flag) {
- Block.am.a(world, i, j, k, 0);
}
+ // CraftBukkit end: BlockBurnEvent
}
}
diff --git a/src/main/java/net/minecraft/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java
index 801b64ad..98afd9cd 100644
--- a/src/main/java/net/minecraft/server/EntityCreature.java
+++ b/src/main/java/net/minecraft/server/EntityCreature.java
@@ -5,6 +5,9 @@ import java.util.Random;
// CraftBukkit start
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.entity.CraftCreature;
+import org.bukkit.craftbukkit.entity.CraftEntity;
+import org.bukkit.event.entity.EntityTargetEvent;
+import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
// CraftBukkit end
public class EntityCreature extends EntityLiving {
@@ -27,12 +30,37 @@ public class EntityCreature extends EntityLiving {
float f = 16F;
if (d == null) {
- d = l();
+ // CraftBukkit start
+ Entity target = l();
+ if(target != null) {
+ EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), target.getBukkitEntity(), TargetReason.CLOSEST_PLAYER);
+ CraftServer server = ((WorldServer) this.l).getServer();
+ server.getPluginManager().callEvent(event);
+ if(!event.isCancelled()) {
+ if(event.getTarget() == null) {
+ d = null;
+ } else {
+ d = ((CraftEntity) event.getTarget()).getHandle();
+ }
+ }
+ }
+ // CraftBukkit end
if (d != null) {
a = l.a(((Entity) (this)), d, f);
}
} else if (!d.B()) {
- d = null;
+ // CraftBukkit start
+ EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), null, TargetReason.TARGET_DIED);
+ CraftServer server = ((WorldServer) this.l).getServer();
+ server.getPluginManager().callEvent(event);
+ if(!event.isCancelled()) {
+ if(event.getTarget() == null) {
+ d = null;
+ } else {
+ d = ((CraftEntity) event.getTarget()).getHandle();
+ }
+ }
+ // CraftBukkit end
} else {
float f1 = d.a(((Entity) (this)));
diff --git a/src/main/java/net/minecraft/server/EntityMobs.java b/src/main/java/net/minecraft/server/EntityMobs.java
index df910e41..e75b345c 100644
--- a/src/main/java/net/minecraft/server/EntityMobs.java
+++ b/src/main/java/net/minecraft/server/EntityMobs.java
@@ -5,10 +5,13 @@ import java.util.Random;
// CraftBukkit start
import org.bukkit.craftbukkit.entity.CraftMonster;
import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.craftbukkit.entity.CraftEntity;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
+import org.bukkit.event.entity.EntityTargetEvent;
+import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
// CraftBukkit end
public class EntityMobs extends EntityCreature implements IMobs {
@@ -57,7 +60,22 @@ public class EntityMobs extends EntityCreature implements IMobs {
return true;
}
if (entity != this) {
- d = entity;
+ // CraftBukkit start
+ org.bukkit.entity.Entity bukkitTarget = null;
+ if(entity != null) {
+ bukkitTarget = entity.getBukkitEntity();
+ }
+ EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), bukkitTarget, TargetReason.TARGET_ATTACKED_ENTITY);
+ CraftServer server = ((WorldServer) this.l).getServer();
+ server.getPluginManager().callEvent(event);
+ if(!event.isCancelled()) {
+ if(event.getTarget() == null) {
+ d = null;
+ } else {
+ d = ((CraftEntity) event.getTarget()).getHandle();
+ }
+ }
+ // CraftBukkit end
}
return true;
} else {
diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java
index f22ea2f0..18e768ec 100644
--- a/src/main/java/net/minecraft/server/EntityPigZombie.java
+++ b/src/main/java/net/minecraft/server/EntityPigZombie.java
@@ -5,7 +5,10 @@ import java.util.Random;
// CraftBukkit start
import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.craftbukkit.entity.CraftEntity;
import org.bukkit.craftbukkit.entity.CraftPigZombie;
+import org.bukkit.event.entity.EntityTargetEvent;
+import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
// CraftBukkit end
public class EntityPigZombie extends EntityZombie {
@@ -82,9 +85,24 @@ public class EntityPigZombie extends EntityZombie {
}
private void g(Entity entity) {
- d = entity;
- a = 400 + W.nextInt(400);
- b = W.nextInt(40);
+ // CraftBukkit start
+ org.bukkit.entity.Entity bukkitTarget = null;
+ if(entity != null) {
+ bukkitTarget = entity.getBukkitEntity();
+ }
+ EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), bukkitTarget, TargetReason.PIG_ZOMBIE_TARGET);
+ CraftServer server = ((WorldServer) this.l).getServer();
+ server.getPluginManager().callEvent(event);
+ if(!event.isCancelled()) {
+ if(event.getTarget() == null) {
+ d = null;
+ } else {
+ d = ((CraftEntity) event.getTarget()).getHandle();
+ a = 400 + W.nextInt(400);
+ b = W.nextInt(40);
+ }
+ }
+ // CraftBukkit end
}
protected String e() {
diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java
index 1d1c746c..77bd7eb4 100644
--- a/src/main/java/net/minecraft/server/EntitySpider.java
+++ b/src/main/java/net/minecraft/server/EntitySpider.java
@@ -4,7 +4,10 @@ import java.util.Random;
// CraftBukkit start
import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.craftbukkit.entity.CraftEntity;
import org.bukkit.craftbukkit.entity.CraftSpider;
+import org.bukkit.event.entity.EntityTargetEvent;
+import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
// CraftBukkit stop
public class EntitySpider extends EntityMobs {
@@ -52,8 +55,19 @@ public class EntitySpider extends EntityMobs {
float f2 = b(1.0F);
if (f2 > 0.5F && W.nextInt(100) == 0) {
- this.d = null;
- return;
+ // CraftBukkit start
+ EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), null, TargetReason.FORGOT_TARGET);
+ CraftServer server = ((WorldServer) this.l).getServer();
+ server.getPluginManager().callEvent(event);
+ if(!event.isCancelled()) {
+ if(event.getTarget() == null) {
+ this.d = null;
+ } else {
+ this.d = ((CraftEntity) event.getTarget()).getHandle();
+ }
+ return;
+ }
+ // CraftBukkit end
}
if (f1 > 2.0F && f1 < 6F && W.nextInt(10) == 0) {
if (A) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 1011b9a7..56755c17 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -160,6 +160,10 @@ public class MinecraftServer implements ICommandListener, Runnable {
private void g() {
a.info("Stopping server");
+ if(server != null) {
+ server.disablePlugins();
+ }
+
if (f != null) {
f.d();
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 496cc6e7..a35d4822 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -49,6 +49,10 @@ public final class CraftServer implements Server {
}
}
+ public void disablePlugins() {
+ pluginManager.disablePlugins();
+ }
+
private void loadPlugin(Plugin plugin) {
List<Command> pluginCommands = PluginCommandYamlParser.parse(plugin);
if (!pluginCommands.isEmpty()) {
@@ -168,5 +172,9 @@ public final class CraftServer implements Server {
console.e.k = monsters ? 1 : 0;
console.e.a(monsters, animals);
+
+ pluginManager.clearPlugins();
+ commandMap.clearCommands();
+ loadPlugins();
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index e4989c4e..cdeffc3a 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -3,8 +3,11 @@ package org.bukkit.craftbukkit;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.craftbukkit.entity.*;
import org.bukkit.entity.*;
+import org.bukkit.entity.Entity;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Random;
import net.minecraft.server.*;
@@ -316,4 +319,44 @@ public class CraftWorld implements World {
return hash;
}
}
+
+ public List<Entity> getEntities() {
+ List<Entity> list = new ArrayList<Entity>();
+
+ for (Object o : world.b) {
+ if (o instanceof net.minecraft.server.Entity) {
+ net.minecraft.server.Entity mcEnt
+ = (net.minecraft.server.Entity)o;
+
+ Entity bukkitEntity = mcEnt.getBukkitEntity();
+
+ // Assuming that bukkitEntity isn't null
+ if (bukkitEntity != null) {
+ list.add(bukkitEntity);
+ }
+ }
+ }
+
+ return list;
+ }
+
+ public List<LivingEntity> getLivingEntities() {
+ List<LivingEntity> list = new ArrayList<LivingEntity>();
+
+ for (Object o : world.b) {
+ if (o instanceof net.minecraft.server.Entity) {
+ net.minecraft.server.Entity mcEnt
+ = (net.minecraft.server.Entity)o;
+
+ Entity bukkitEntity = mcEnt.getBukkitEntity();
+
+ // Assuming that bukkitEntity isn't null
+ if (bukkitEntity != null && bukkitEntity instanceof LivingEntity) {
+ list.add((LivingEntity)bukkitEntity);
+ }
+ }
+ }
+
+ return list;
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index 4c000896..4d19e34b 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -337,6 +337,14 @@ public class CraftBlock implements Block {
return null;
}
+ public boolean isBlockPowered() {
+ return world.getHandle().o(x, y, z);
+ }
+
+ public boolean isBlockIndirectlyPowered() {
+ return world.getHandle().p(x, y, z);
+ }
+
public void update() {
type = world.getHandle().a(x, y, z);
data = (byte)world.getHandle().b(x, y, z);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 95982b65..2c32a631 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -110,4 +110,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
entity.a.b(((Packet) (new Packet6SpawnPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()))));
}
+ public boolean performCommand(String command) {
+ return server.dispatchCommand(this, command);
+ }
}