diff --git a/Plugins/Libraries/craftbukkit.jar b/Plugins/Libraries/craftbukkit.jar index a9b9ac84b..33a98bd29 100644 Binary files a/Plugins/Libraries/craftbukkit.jar and b/Plugins/Libraries/craftbukkit.jar differ diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java index d042765f7..9ee80eaaa 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java @@ -4,6 +4,7 @@ import java.lang.reflect.Field; import java.util.HashMap; import java.util.LinkedList; +import net.minecraft.server.v1_6_R3.EntityBat; import net.minecraft.server.v1_6_R3.EntityCreature; import net.minecraft.server.v1_6_R3.EntityEnderDragon; import net.minecraft.server.v1_6_R3.EntityHuman; @@ -22,7 +23,6 @@ import org.bukkit.Sound; import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftLivingEntity; - import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -119,6 +119,11 @@ public class UtilEnt _goalSelector.set(creature, goalSelector); _targetSelector.set(creature, new PathfinderGoalSelector(((CraftWorld)entity.getWorld()).getHandle().methodProfiler)); } + + if (((CraftEntity)entity).getHandle() instanceof EntityBat) + { + ((EntityBat)((CraftEntity)entity).getHandle()).Vegetated = true; + } if (((CraftEntity)entity).getHandle() instanceof EntityEnderDragon) { diff --git a/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java new file mode 100644 index 000000000..f75c3a721 --- /dev/null +++ b/Plugins/Mineplex.ServerMonitor/src/mineplex/servermonitor/ProcessRunner.java @@ -0,0 +1,78 @@ +package mineplex.servermonitor; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class ProcessRunner extends Thread +{ + private ProcessBuilder _processBuilder; + private Process _process; + private Runnable _runnable; + + boolean _done = false; + + ProcessRunner(String[] args) + { + super("ProcessRunner " + args); + _processBuilder = new ProcessBuilder(args); + } + + public void run() + { + try + { + _process = _processBuilder.start(); + _process.waitFor(); + + BufferedReader reader=new BufferedReader(new InputStreamReader(_process.getInputStream())); + String line = reader.readLine(); + + while(line != null) + { + System.out.println(line); + line=reader.readLine(); + } + } + catch (Exception e) + { + System.out.println(e.getMessage()); + } + finally + { + _done = true; + + if (_runnable != null) + _runnable.run(); + } + } + + public void start(Runnable runnable) + { + super.start(); + + _runnable = runnable; + } + + public int exitValue() throws IllegalStateException + { + if (_process != null) + { + return _process.exitValue(); + } + + throw new IllegalStateException("Process not started yet"); + } + + public boolean isDone() + { + return _done; + } + + public void abort() + { + if (!isDone()) + { + _process.destroy(); + } + } + } diff --git a/Plugins/Nautilus.Core.CraftBukkit/src/net/minecraft/server/v1_6_R3/EntityBat.java b/Plugins/Nautilus.Core.CraftBukkit/src/net/minecraft/server/v1_6_R3/EntityBat.java new file mode 100644 index 000000000..3be82dd9a --- /dev/null +++ b/Plugins/Nautilus.Core.CraftBukkit/src/net/minecraft/server/v1_6_R3/EntityBat.java @@ -0,0 +1,221 @@ +package net.minecraft.server.v1_6_R3; + +import java.util.Calendar; +import java.util.Random; + +public class EntityBat extends EntityAmbient +{ + private ChunkCoordinates h; + + public boolean Vegetated = false; + + public EntityBat(World paramWorld) + { + super(paramWorld); + + a(0.5F, 0.9F); + a(true); + } + + protected void a() + { + super.a(); + + this.datawatcher.a(16, new Byte((byte)0)); + } + + protected float ba() + { + return 0.1F; + } + + protected float bb() + { + return super.bb() * 0.95F; + } + + protected String r() + { + if ((bJ()) && (this.random.nextInt(4) != 0)) { + return null; + } + return "mob.bat.idle"; + } + + protected String aO() + { + return "mob.bat.hurt"; + } + + protected String aP() + { + return "mob.bat.death"; + } + + public boolean M() + { + return false; + } + + protected void n(Entity paramEntity) + { + } + + protected void bj() + { + } + + protected void az() + { + super.az(); + + getAttributeInstance(GenericAttributes.a).setValue(6.0D); + } + + public boolean bJ() { + return (this.datawatcher.getByte(16) & 0x1) != 0; + } + + public void a(boolean paramBoolean) { + int i = this.datawatcher.getByte(16); + if (paramBoolean) + this.datawatcher.watch(16, Byte.valueOf((byte)(i | 0x1))); + else + this.datawatcher.watch(16, Byte.valueOf((byte)(i & 0xFFFFFFFE))); + } + + protected boolean bf() + { + return true; + } + + public void l_() + { + super.l_(); + + if (Vegetated) + return; + + if (bJ()) { + this.motX = (this.motY = this.motZ = 0.0D); + this.locY = (MathHelper.floor(this.locY) + 1.0D - this.length); + } else { + this.motY *= 0.6000000238418579D; + } + } + + protected void bi() + { + super.bi(); + + if (Vegetated) + return; + + if (bJ()) { + if (!this.world.u(MathHelper.floor(this.locX), (int)this.locY + 1, MathHelper.floor(this.locZ))) { + a(false); + this.world.a(null, 1015, (int)this.locX, (int)this.locY, (int)this.locZ, 0); + } + else { + if (this.random.nextInt(200) == 0) { + this.aP = this.random.nextInt(360); + } + + if (this.world.findNearbyPlayer(this, 4.0D) != null) { + a(false); + this.world.a(null, 1015, (int)this.locX, (int)this.locY, (int)this.locZ, 0); + } + } + } + else + { + if ((this.h != null) && ((!this.world.isEmpty(this.h.x, this.h.y, this.h.z)) || (this.h.y < 1))) { + this.h = null; + } + if ((this.h == null) || (this.random.nextInt(30) == 0) || (this.h.e((int)this.locX, (int)this.locY, (int)this.locZ) < 4.0F)) { + this.h = new ChunkCoordinates((int)this.locX + this.random.nextInt(7) - this.random.nextInt(7), (int)this.locY + this.random.nextInt(6) - 2, (int)this.locZ + this.random.nextInt(7) - this.random.nextInt(7)); + } + + double d1 = this.h.x + 0.5D - this.locX; + double d2 = this.h.y + 0.1D - this.locY; + double d3 = this.h.z + 0.5D - this.locZ; + + this.motX += (Math.signum(d1) * 0.5D - this.motX) * 0.1000000014901161D; + this.motY += (Math.signum(d2) * 0.699999988079071D - this.motY) * 0.1000000014901161D; + this.motZ += (Math.signum(d3) * 0.5D - this.motZ) * 0.1000000014901161D; + + float f1 = (float)(Math.atan2(this.motZ, this.motX) * 180.0D / 3.141592741012573D) - 90.0F; + float f2 = MathHelper.g(f1 - this.yaw); + this.bf = 0.5F; + this.yaw += f2; + + if ((this.random.nextInt(100) == 0) && (this.world.u(MathHelper.floor(this.locX), (int)this.locY + 1, MathHelper.floor(this.locZ)))) + a(true); + } + } + + protected boolean e_() + { + return false; + } + + protected void b(float paramFloat) + { + } + + protected void a(double paramDouble, boolean paramBoolean) + { + } + + public boolean au() + { + return true; + } + + public boolean damageEntity(DamageSource paramDamageSource, float paramFloat) + { + if (isInvulnerable()) return false; + if ((!this.world.isStatic) && bJ() && !Vegetated) { + a(false); + } + + return super.damageEntity(paramDamageSource, paramFloat); + } + + public void a(NBTTagCompound paramNBTTagCompound) + { + super.a(paramNBTTagCompound); + + this.datawatcher.watch(16, Byte.valueOf(paramNBTTagCompound.getByte("BatFlags"))); + } + + public void b(NBTTagCompound paramNBTTagCompound) + { + super.b(paramNBTTagCompound); + + paramNBTTagCompound.setByte("BatFlags", this.datawatcher.getByte(16)); + } + + public boolean canSpawn() + { + int i = MathHelper.floor(this.boundingBox.b); + if (i >= 63) return false; + + int j = MathHelper.floor(this.locX); + int k = MathHelper.floor(this.locZ); + + int m = this.world.getLightLevel(j, i, k); + int n = 4; + Calendar localCalendar = this.world.W(); + + if (((localCalendar.get(2) + 1 == 10) && (localCalendar.get(5) >= 20)) || ((localCalendar.get(2) + 1 == 11) && (localCalendar.get(5) <= 3))) + n = 7; + else if (this.random.nextBoolean()) { + return false; + } + + if (m > this.random.nextInt(n)) return false; + + return super.canSpawn(); + } +} \ No newline at end of file