Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 206 lines 7.3 kB view raw
1package net.minecraft.server; 2 3import org.bukkit.BlockChangeDelegate; 4import org.bukkit.craftbukkit.generator.*; 5import org.bukkit.event.entity.EntityDamageEvent; 6import org.bukkit.event.weather.LightningStrikeEvent; 7import org.bukkit.generator.ChunkGenerator; 8 9import uk.betacraft.uberbukkit.UberbukkitConfig; 10 11import java.util.ArrayList; 12import java.util.List; 13 14// CraftBukkit start 15 16public class WorldServer extends World implements BlockChangeDelegate { 17 // CraftBukkit end 18 19 public ChunkProviderServer chunkProviderServer; 20 public boolean weirdIsOpCache = false; 21 public boolean canSave; 22 public final MinecraftServer server; // CraftBukkit - private -> public final 23 private EntityList G = new EntityList(); 24 25 // CraftBukkit start - change signature 26 public WorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, String s, int i, long j, org.bukkit.World.Environment env, ChunkGenerator gen) { 27 super(idatamanager, s, j, WorldProvider.byDimension(env.getId()), gen, env); 28 this.server = minecraftserver; 29 30 this.dimension = i; 31 this.pvpMode = minecraftserver.pvpMode; 32 this.manager = new PlayerManager(minecraftserver, this.dimension, minecraftserver.propertyManager.getInt("view-distance", 10)); 33 } 34 35 public final int dimension; 36 public EntityTracker tracker; 37 public PlayerManager manager; 38 // CraftBukkit end 39 40 public void entityJoinedWorld(Entity entity, boolean flag) { 41 /* CraftBukkit start - We prevent spawning in general, so this butchering is not needed 42 if (!this.server.spawnAnimals && (entity instanceof EntityAnimal || entity instanceof EntityWaterAnimal)) { 43 entity.die(); 44 } 45 // CraftBukkit end */ 46 47 if (entity.passenger == null || !(entity.passenger instanceof EntityHuman)) { 48 super.entityJoinedWorld(entity, flag); 49 } 50 } 51 52 public void vehicleEnteredWorld(Entity entity, boolean flag) { 53 super.entityJoinedWorld(entity, flag); 54 } 55 56 protected IChunkProvider b() { 57 IChunkLoader ichunkloader = this.w.a(this.worldProvider); 58 59 // CraftBukkit start 60 InternalChunkGenerator gen; 61 62 if (this.generator != null) { 63 gen = new CustomChunkGenerator(this, this.getSeed(), this.generator); 64 } else if (this.worldProvider instanceof WorldProviderHell) { 65 gen = new NetherChunkGenerator(this, this.getSeed()); 66 } else if (this.worldProvider instanceof WorldProviderSky) { 67 gen = new SkyLandsChunkGenerator(this, this.getSeed()); 68 } else { 69 gen = new NormalChunkGenerator(this, this.getSeed()); 70 } 71 72 this.chunkProviderServer = new ChunkProviderServer(this, ichunkloader, gen); 73 // CraftBukkit end 74 75 return this.chunkProviderServer; 76 } 77 78 public List getTileEntities(int i, int j, int k, int l, int i1, int j1) { 79 ArrayList arraylist = new ArrayList(); 80 81 for (int k1 = 0; k1 < this.c.size(); ++k1) { 82 TileEntity tileentity = (TileEntity) this.c.get(k1); 83 84 if (tileentity.x >= i && tileentity.y >= j && tileentity.z >= k && tileentity.x < l && tileentity.y < i1 && tileentity.z < j1) { 85 arraylist.add(tileentity); 86 } 87 } 88 89 return arraylist; 90 } 91 92 public boolean a(EntityHuman entityhuman, int i, int j, int k) { 93 int l = (int) MathHelper.abs((float) (i - this.worldData.c())); 94 int i1 = (int) MathHelper.abs((float) (k - this.worldData.e())); 95 96 if (l > i1) { 97 i1 = l; 98 } 99 100 // CraftBukkit - Configurable spawn protection 101 return i1 > this.getServer().getSpawnRadius() || this.server.serverConfigurationManager.isOp(entityhuman.name); 102 } 103 104 protected void c(Entity entity) { 105 super.c(entity); 106 this.G.a(entity.id, entity); 107 } 108 109 protected void d(Entity entity) { 110 super.d(entity); 111 this.G.d(entity.id); 112 } 113 114 public Entity getEntity(int i) { 115 return (Entity) this.G.a(i); 116 } 117 118 public boolean strikeLightning(Entity entity) { 119 // CraftBukkit start 120 LightningStrikeEvent lightning = new LightningStrikeEvent(this.getWorld(), (org.bukkit.entity.LightningStrike) entity.getBukkitEntity()); 121 this.getServer().getPluginManager().callEvent(lightning); 122 123 // uberbukkit 124 if (lightning.isCancelled() || !UberbukkitConfig.getInstance().getBoolean("mechanics.do_weather", true)) { 125 return false; 126 } 127 128 // uberbukkit 129 if (super.strikeLightning(entity)) { 130 this.server.serverConfigurationManager.sendPacketNearby(entity.locX, entity.locY, entity.locZ, 512.0D, this.dimension, new Packet71Weather(entity)); 131 // CraftBukkit end 132 return true; 133 } else { 134 return false; 135 } 136 } 137 138 public void a(Entity entity, byte b0) { 139 Packet38EntityStatus packet38entitystatus = new Packet38EntityStatus(entity.id, b0); 140 141 // CraftBukkit 142 this.server.getTracker(this.dimension).sendPacketToEntity(entity, packet38entitystatus); 143 } 144 145 //Project Poseidon Start 146 public Explosion createExplosion(Entity entity, double d0, double d1, double d2, float f, boolean flag, EntityDamageEvent.DamageCause customDamageCause) { 147 Explosion explosion = super.createExplosion(entity, d0, d1, d2, f, flag, customDamageCause); 148 149 if (explosion.wasCanceled) { 150 return explosion; 151 } 152 this.server.serverConfigurationManager.sendPacketNearby(d0, d1, d2, 64.0D, this.dimension, new Packet60Explosion(d0, d1, d2, f, explosion.blocks)); 153 154 return explosion; 155 } 156 //Project Poseidon End 157 158 public Explosion createExplosion(Entity entity, double d0, double d1, double d2, float f, boolean flag) { 159 // CraftBukkit start 160 Explosion explosion = super.createExplosion(entity, d0, d1, d2, f, flag); 161 162 if (explosion.wasCanceled) { 163 return explosion; 164 } 165 166 /* Remove 167 explosion.a = flag; 168 explosion.a(); 169 explosion.a(false); 170 */ 171 this.server.serverConfigurationManager.sendPacketNearby(d0, d1, d2, 64.0D, this.dimension, new Packet60Explosion(d0, d1, d2, f, explosion.blocks)); 172 // CraftBukkit end 173 return explosion; 174 } 175 176 public void playNote(int i, int j, int k, int l, int i1) { 177 super.playNote(i, j, k, l, i1); 178 // CraftBukkit 179 this.server.serverConfigurationManager.sendPacketNearby((double) i, (double) j, (double) k, 64.0D, this.dimension, new Packet54PlayNoteBlock(i, j, k, l, i1)); 180 } 181 182 public void saveLevel() { 183 this.w.e(); 184 } 185 186 protected void i() { 187 boolean flag = this.v(); 188 189 super.i(); 190 if (flag != this.v()) { 191 // CraftBukkit start - only sending weather packets to those affected 192 for (int i = 0; i < this.players.size(); ++i) { 193 EntityPlayer player = ((EntityPlayer) this.players.get(i)); 194 if (player.world == this) { 195 player.netServerHandler.sendPacket(new Packet70Bed(flag ? 2 : 1)); 196 } 197 } 198 // CraftBukkit end 199 } 200 } 201 202 // Poseidon 203 public PlayerManager getPlayerManager() { 204 return this.manager; 205 } 206}