From d9dfe49376fe2b1f709f9f20e62db39fd9381956 Mon Sep 17 00:00:00 2001 From: Shaun Bennett Date: Sun, 30 Nov 2014 00:10:38 -0600 Subject: [PATCH] Mineplex Changes diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java index 858e12c..5c84ad2 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -16,6 +16,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.bukkit.Bukkit; // CraftBukkit +import org.bukkit.event.world.ChunkAddEntityEvent; public class Chunk { @@ -648,6 +649,9 @@ public class Chunk { entity.die(); } + ChunkAddEntityEvent event = new ChunkAddEntityEvent(entity.bukkitEntity); + Bukkit.getServer().getPluginManager().callEvent(event); + int k = MathHelper.floor(entity.locY / 16.0D); if (k < 0) { diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java index 9ee7e75..5b0d9ab 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java @@ -19,6 +19,7 @@ import org.bukkit.craftbukkit.chunkio.ChunkIOExecutor; import org.bukkit.craftbukkit.util.LongHash; import org.bukkit.craftbukkit.util.LongHashSet; import org.bukkit.craftbukkit.util.LongObjectHashMap; +import org.bukkit.event.world.ChunkPreLoadEvent; import org.bukkit.event.world.ChunkUnloadEvent; // CraftBukkit end @@ -107,10 +108,44 @@ public class ChunkProviderServer implements IChunkProvider { // We can only use the queue for already generated chunks if (chunk == null && loader != null && loader.chunkExists(world, i, j)) { if (runnable != null) { - ChunkIOExecutor.queueChunkLoad(world, loader, this, i, j, runnable); + Server server = this.world.getServer(); + + ChunkPreLoadEvent event = new ChunkPreLoadEvent(world.getWorld(), i, j); + server.getPluginManager().callEvent(event); + + if (event.isCancelled()) + { + runnable.run(); + + chunk = new EmptyChunk(world, i, j); + chunk.done = true; + chunks.put(LongHash.toLong(i, j), chunk); + } + else + { + ChunkIOExecutor.queueChunkLoad(world, loader, this, i, j, runnable); + } + return null; } else { - chunk = ChunkIOExecutor.syncChunkLoad(world, loader, this, i, j); + Server server = this.world.getServer(); + + if (server != null) + { + ChunkPreLoadEvent event = new ChunkPreLoadEvent(world.getWorld(), i, j); + server.getPluginManager().callEvent(event); + + if (event.isCancelled()) + { + chunk = new EmptyChunk(world, i, j); + chunk.done = true; + chunks.put(LongHash.toLong(i, j), chunk); + } + else + { + chunk = ChunkIOExecutor.syncChunkLoad(world, loader, this, i, j); + } + } } } else if (chunk == null) { chunk = originalGetChunkAt(i, j); @@ -129,6 +164,23 @@ public class ChunkProviderServer implements IChunkProvider { boolean newChunk = false; // CraftBukkit end + Server server = this.world.getServer(); + + if (chunk == null && server != null) + { + ChunkPreLoadEvent event = new ChunkPreLoadEvent(world.getWorld(), i, j); + server.getPluginManager().callEvent(event); + + if (event.isCancelled()) + { + chunk = new EmptyChunk(world, i, j); + chunk.done = true; + chunks.put(LongHash.toLong(i, j), chunk); + + return chunk; + } + } + if (chunk == null) { world.timings.syncChunkLoadTimer.startTiming(); // Spigot chunk = this.loadChunk(i, j); @@ -155,7 +207,6 @@ public class ChunkProviderServer implements IChunkProvider { chunk.addEntities(); // CraftBukkit start - Server server = world.getServer(); if (server != null) { /* * If it's a new world, the first few chunks are generated inside diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java index 2806f1e..f37e8b4 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java @@ -86,7 +86,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer System.err.println( "If you do not agree to the above EULA please stop your server and remove this flag immediately." ); } // Spigot End - if (!this.o.a() && !eulaAgreed) { // Spigot + if (false && !this.o.a() && !eulaAgreed) { // Spigot DedicatedServer.LOGGER.info("You need to agree to the EULA in order to run the server. Go to eula.txt for more info."); this.o.b(); return false; diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index b0a90d7..841b714 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -122,6 +122,9 @@ public abstract class Entity implements ICommandListener { public void inactiveTick() { } // Spigot end + public boolean Silent; + public boolean Invisible; + public int getId() { return this.id; } @@ -684,7 +687,9 @@ public abstract class Entity implements ICommandListener { this.makeSound(this.P(), f, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.4F); } - this.a(blockposition, block); + if (!Silent) + this.a(blockposition, block); + block.a(this.world, blockposition, this); // CraftBukkit - moved from above } } @@ -786,7 +791,7 @@ public abstract class Entity implements ICommandListener { } public void makeSound(String s, float f, float f1) { - if (!this.R()) { + if (!Silent && !this.R()) { this.world.makeSound(this, s, f, f1); } @@ -1541,8 +1546,8 @@ public abstract class Entity implements ICommandListener { if (entity == null) { if (this.vehicle != null) { // CraftBukkit start - if ((this.bukkitEntity instanceof LivingEntity) && (this.vehicle.getBukkitEntity() instanceof Vehicle)) { - VehicleExitEvent event = new VehicleExitEvent((Vehicle) this.vehicle.getBukkitEntity(), (LivingEntity) this.bukkitEntity); + if ((this.bukkitEntity instanceof LivingEntity)) { + VehicleExitEvent event = new VehicleExitEvent(this.vehicle.getBukkitEntity(), (LivingEntity) this.bukkitEntity); pluginManager.callEvent(event); if (event.isCancelled() || vehicle != originalVehicle) { @@ -1558,11 +1563,11 @@ public abstract class Entity implements ICommandListener { this.vehicle = null; } else { // CraftBukkit start - if ((this.bukkitEntity instanceof LivingEntity) && (entity.getBukkitEntity() instanceof Vehicle) && entity.world.isChunkLoaded((int) entity.locX >> 4, (int) entity.locZ >> 4, true)) { + if ((this.bukkitEntity instanceof LivingEntity)&& entity.world.isChunkLoaded((int) entity.locX >> 4, (int) entity.locZ >> 4, true)) { // It's possible to move from one vehicle to another. We need to check if they're already in a vehicle, and fire an exit event if they are. VehicleExitEvent exitEvent = null; - if (this.vehicle != null && this.vehicle.getBukkitEntity() instanceof Vehicle) { - exitEvent = new VehicleExitEvent((Vehicle) this.vehicle.getBukkitEntity(), (LivingEntity) this.bukkitEntity); + if (this.vehicle != null) { + exitEvent = new VehicleExitEvent(this.vehicle.getBukkitEntity(), (LivingEntity) this.bukkitEntity); pluginManager.callEvent(exitEvent); if (exitEvent.isCancelled() || this.vehicle != originalVehicle || (this.vehicle != null && this.vehicle.passenger != originalPassenger)) { @@ -1686,6 +1691,9 @@ public abstract class Entity implements ICommandListener { } public void setInvisible(boolean flag) { + if (Invisible && !flag) + return; + this.b(5, flag); } diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java new file mode 100644 index 0000000..aac4e0a --- /dev/null +++ b/src/main/java/net/minecraft/server/EntityBat.java @@ -0,0 +1,208 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import java.util.Calendar; +import net.minecraft.server.Block; +import net.minecraft.server.BlockPosition; +import net.minecraft.server.DamageSource; +import net.minecraft.server.Entity; +import net.minecraft.server.EntityAmbient; +import net.minecraft.server.EntityHuman; +import net.minecraft.server.GenericAttributes; +import net.minecraft.server.MathHelper; +import net.minecraft.server.NBTTagCompound; +import net.minecraft.server.World; + +public class EntityBat extends EntityAmbient { + private BlockPosition a; + + public boolean Vegetated = false; + + public EntityBat(World var1) { + super(var1); + this.a(0.5F, 0.9F); + this.setAsleep(true); + } + + protected void h() { + super.h(); + this.datawatcher.a(16, new Byte((byte)0)); + } + + protected float bA() { + return 0.1F; + } + + protected float bB() { + return super.bB() * 0.95F; + } + + protected String z() { + return this.isAsleep() && this.random.nextInt(4) != 0?null:"mob.bat.idle"; + } + + protected String bn() { + return "mob.bat.hurt"; + } + + protected String bo() { + return "mob.bat.death"; + } + + public boolean ae() { + return false; + } + + protected void s(Entity var1) { + } + + protected void bK() { + } + + protected void aW() { + super.aW(); + this.getAttributeInstance(GenericAttributes.maxHealth).setValue(6.0D); + } + + public boolean isAsleep() { + return (this.datawatcher.getByte(16) & 1) != 0; + } + + public void setAsleep(boolean var1) { + byte var2 = this.datawatcher.getByte(16); + if(var1) { + this.datawatcher.watch(16, Byte.valueOf((byte)(var2 | 1))); + } else { + this.datawatcher.watch(16, Byte.valueOf((byte)(var2 & -2))); + } + + } + + public void s_() { + super.s_(); + + if (Vegetated) + return; + + if(this.isAsleep()) { + this.motX = this.motY = this.motZ = 0.0D; + this.locY = (double)MathHelper.floor(this.locY) + 1.0D - (double)this.length; + } else { + this.motY *= 0.6000000238418579D; + } + + } + + protected void E() { + super.E(); + + if (Vegetated) + return; + + BlockPosition var1 = new BlockPosition(this); + BlockPosition var2 = var1.up(); + if(this.isAsleep()) { + if(!this.world.getType(var2).getBlock().isOccluding()) { + this.setAsleep(false); + this.world.a((EntityHuman)null, 1015, var1, 0); + } else { + if(this.random.nextInt(200) == 0) { + this.aI = (float)this.random.nextInt(360); + } + + if(this.world.findNearbyPlayer(this, 4.0D) != null) { + this.setAsleep(false); + this.world.a((EntityHuman)null, 1015, var1, 0); + } + } + } else { + if(this.a != null && (!this.world.isEmpty(this.a) || this.a.getY() < 1)) { + this.a = null; + } + + if(this.a == null || this.random.nextInt(30) == 0 || this.a.c((double)((int)this.locX), (double)((int)this.locY), (double)((int)this.locZ)) < 4.0D) { + this.a = new BlockPosition((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 var3 = (double)this.a.getX() + 0.5D - this.locX; + double var5 = (double)this.a.getY() + 0.1D - this.locY; + double var7 = (double)this.a.getZ() + 0.5D - this.locZ; + this.motX += (Math.signum(var3) * 0.5D - this.motX) * 0.10000000149011612D; + this.motY += (Math.signum(var5) * 0.699999988079071D - this.motY) * 0.10000000149011612D; + this.motZ += (Math.signum(var7) * 0.5D - this.motZ) * 0.10000000149011612D; + float var9 = (float)(Math.atan2(this.motZ, this.motX) * 180.0D / 3.1415927410125732D) - 90.0F; + float var10 = MathHelper.g(var9 - this.yaw); + this.aY = 0.5F; + this.yaw += var10; + if(this.random.nextInt(100) == 0 && this.world.getType(var2).getBlock().isOccluding()) { + this.setAsleep(true); + } + } + + } + + protected boolean r_() { + return false; + } + + public void e(float var1, float var2) { + } + + protected void a(double var1, boolean var3, Block var4, BlockPosition var5) { + } + + public boolean aH() { + return true; + } + + public boolean damageEntity(DamageSource var1, float var2) { + if(this.isInvulnerable(var1)) { + return false; + } else { + if(!this.world.isStatic && this.isAsleep()) { + this.setAsleep(false); + } + + return super.damageEntity(var1, var2); + } + } + + public void a(NBTTagCompound var1) { + super.a(var1); + this.datawatcher.watch(16, Byte.valueOf(var1.getByte("BatFlags"))); + } + + public void b(NBTTagCompound var1) { + super.b(var1); + var1.setByte("BatFlags", this.datawatcher.getByte(16)); + } + + public boolean bQ() { + BlockPosition var1 = new BlockPosition(this.locX, this.getBoundingBox().b, this.locZ); + if(var1.getY() >= 63) { + return false; + } else { + int var2 = this.world.getLightLevel(var1); + byte var3 = 4; + if(this.a((Calendar)this.world.Y())) { + var3 = 7; + } else if(this.random.nextBoolean()) { + return false; + } + + return var2 > this.random.nextInt(var3)?false:super.bQ(); + } + } + + private boolean a(Calendar var1) { + return var1.get(2) + 1 == 10 && var1.get(5) >= 20 || var1.get(2) + 1 == 11 && var1.get(5) <= 3; + } + + public float getHeadHeight() { + return this.length / 2.0F; + } +} diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java index ec94142..6e927a3 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -40,6 +40,8 @@ public class EntityEnderDragon extends EntityInsentient implements IComplex, IMo public EntityEnderCrystal bx; private Explosion explosionSource = new Explosion(null, this, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, true); // CraftBukkit - reusable source for CraftTNTPrimed.getSource() + public boolean Vegetated = false; + public EntityEnderDragon(World world) { super(world); this.children = new EntityComplexPart[] { this.bl = new EntityComplexPart(this, "head", 6.0F, 6.0F), this.bm = new EntityComplexPart(this, "body", 8.0F, 8.0F), this.bn = new EntityComplexPart(this, "tail", 4.0F, 4.0F), this.bo = new EntityComplexPart(this, "tail", 4.0F, 4.0F), this.bp = new EntityComplexPart(this, "tail", 4.0F, 4.0F), this.bq = new EntityComplexPart(this, "wing", 4.0F, 4.0F), this.br = new EntityComplexPart(this, "wing", 4.0F, 4.0F)}; @@ -167,7 +169,7 @@ public class EntityEnderDragon extends EntityInsentient implements IComplex, IMo this.c += this.random.nextGaussian() * 2.0D; } - if (this.bu || d3 < 100.0D || d3 > 22500.0D || this.positionChanged || this.E) { + if (!Vegetated && this.bu || d3 < 100.0D || d3 > 22500.0D || this.positionChanged || this.E) { this.cd(); } @@ -250,7 +252,7 @@ public class EntityEnderDragon extends EntityInsentient implements IComplex, IMo this.bq.setPositionRotation(this.locX + (double) (f12 * 4.5F), this.locY + 2.0D, this.locZ + (double) (f11 * 4.5F), 0.0F, 0.0F); this.br.s_(); this.br.setPositionRotation(this.locX - (double) (f12 * 4.5F), this.locY + 2.0D, this.locZ - (double) (f11 * 4.5F), 0.0F, 0.0F); - if (!this.world.isStatic && this.hurtTicks == 0) { + if (!this.world.isStatic && this.hurtTicks == 0 && !ghost) { this.a(this.world.getEntities(this, this.bq.getBoundingBox().grow(4.0D, 2.0D, 4.0D).c(0.0D, -2.0D, 0.0D))); this.a(this.world.getEntities(this, this.br.getBoundingBox().grow(4.0D, 2.0D, 4.0D).c(0.0D, -2.0D, 0.0D))); this.b(this.world.getEntities(this, this.bl.getBoundingBox().grow(1.0D, 1.0D, 1.0D))); @@ -298,6 +300,19 @@ public class EntityEnderDragon extends EntityInsentient implements IComplex, IMo } } + public void setTargetBlock(int x, int y, int z) + { + this.a = x; + this.b = y; + this.c = z; + this.by = null; + } + + public void setTargetEntity(Entity entity) + { + this.by = entity; + } + private void n() { if (this.bx != null) { if (this.bx.dead) { diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java index fd78677..9f76410 100644 --- a/src/main/java/net/minecraft/server/EntityFallingBlock.java +++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java @@ -17,6 +17,8 @@ public class EntityFallingBlock extends Entity { private float fallHurtAmount = 2.0F; public NBTTagCompound tileEntityData; + public boolean spectating; + public EntityFallingBlock(World world) { super(world); } @@ -42,7 +44,15 @@ public class EntityFallingBlock extends Entity { protected void h() {} public boolean ad() { - return !this.dead; + return !this.dead && !spectating; + } + + @Override + public boolean damageEntity(DamageSource damagesource, float f) + { + CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f); + + return true; } public void s_() { diff --git a/src/main/java/net/minecraft/server/EntityHorse.java b/src/main/java/net/minecraft/server/EntityHorse.java index 1d4354e..618aac9 100644 --- a/src/main/java/net/minecraft/server/EntityHorse.java +++ b/src/main/java/net/minecraft/server/EntityHorse.java @@ -117,6 +117,9 @@ public class EntityHorse extends EntityAnimal implements IInventoryListener { private void c(int i, boolean flag) { int j = this.datawatcher.getInt(16); + if (Vegetated) + return; + if (flag) { this.datawatcher.watch(16, Integer.valueOf(j | i)); } else { diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 4ef5e01..0aaf491 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -131,7 +131,7 @@ public abstract class EntityHuman extends EntityLiving { if (this.g != null) { ItemStack itemstack = this.inventory.getItemInHand(); - if (itemstack == this.g) { + if (ItemStack.equals(itemstack, this.g)) { if (this.h <= 25 && this.h % 4 == 0) { this.b(itemstack, 5); } diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java index bc7f81e..cc6f7b9 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -35,6 +35,10 @@ public abstract class EntityInsentient extends EntityLiving { private Entity bn; private NBTTagCompound bo; + public boolean Vegetated; + public boolean BreakLeash; + public boolean PullWhileLeashed; + public EntityInsentient(World world) { super(world); this.goalSelector = new PathfinderGoalSelector(world != null && world.methodProfiler != null ? world.methodProfiler : null); @@ -148,7 +152,7 @@ public abstract class EntityInsentient extends EntityLiving { public void K() { super.K(); this.world.methodProfiler.a("mobBaseTick"); - if (this.isAlive() && this.random.nextInt(1000) < this.a_++) { + if (this.isAlive() && !Silent && this.random.nextInt(1000) < this.a_++) { this.a_ = -this.w(); this.x(); } @@ -764,7 +768,7 @@ public abstract class EntityInsentient extends EntityLiving { } public final boolean e(EntityHuman entityhuman) { - if (this.cb() && this.getLeashHolder() == entityhuman) { + if (this.cb() && this.getLeashHolder() == entityhuman && BreakLeash) { // CraftBukkit start - fire PlayerUnleashEntityEvent if (CraftEventFactory.callPlayerUnleashEntityEvent(this, entityhuman).isCancelled()) { ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutAttachEntity(1, this, this.getLeashHolder())); @@ -829,7 +833,7 @@ public abstract class EntityInsentient extends EntityLiving { } public void unleash(boolean flag, boolean flag1) { - if (this.bm) { + if (this.bm && BreakLeash) { this.bm = false; this.bn = null; if (!this.world.isStatic && flag1) { diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java index 9604034..aeeb9a5 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -91,6 +91,8 @@ public abstract class EntityLiving extends Entity { } // Spigot end + public boolean ghost; + public void G() { this.damageEntity(DamageSource.OUT_OF_WORLD, Float.MAX_VALUE); } @@ -1718,7 +1720,7 @@ public abstract class EntityLiving extends Entity { } public boolean ae() { - return !this.dead; + return !this.dead && !ghost; } protected void ac() { diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java index 67230f6..f59e611 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -62,13 +62,16 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public double maxHealthCache; public boolean joining = true; // CraftBukkit end + + public boolean spectating; + // Spigot start public boolean collidesWithEntities = true; @Override public boolean ad() { - return this.collidesWithEntities && super.ad(); // (first !this.isDead near bottom of EntityLiving) + return !spectating && this.collidesWithEntities && super.ad(); // (first !this.isDead near bottom of EntityLiving) } @Override diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java index 3621faf..cc12f1b 100644 --- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java +++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java @@ -9,6 +9,8 @@ public class EntityTNTPrimed extends Entity { public float yield = 4; // CraftBukkit - add field public boolean isIncendiary = false; // CraftBukkit - add field + public boolean spectating = false; + public EntityTNTPrimed(World world) { super(world); this.k = true; @@ -37,7 +39,7 @@ public class EntityTNTPrimed extends Entity { } public boolean ad() { - return !this.dead; + return !this.dead && !spectating; } public void s_() { diff --git a/src/main/java/net/minecraft/server/IPacketVerifier.java b/src/main/java/net/minecraft/server/IPacketVerifier.java new file mode 100644 index 0000000..4a61c32 --- /dev/null +++ b/src/main/java/net/minecraft/server/IPacketVerifier.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface IPacketVerifier +{ + boolean verify(Packet packet); +} diff --git a/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java b/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java index e24f224..d8a2da9 100644 --- a/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java +++ b/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java @@ -2,7 +2,7 @@ package net.minecraft.server; public class PacketPlayInCloseWindow implements Packet { - private int id; + public int id; public PacketPlayInCloseWindow() {} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java b/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java new file mode 100644 index 0000000..082e523 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java @@ -0,0 +1,43 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import net.minecraft.server.Entity; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutAnimation implements Packet { + public int a; + public int b; + + public PacketPlayOutAnimation() { + } + + public PacketPlayOutAnimation(Entity var1, int var2) { + this.a = var1.getId(); + this.b = var2; + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + this.b = var1.readUnsignedByte(); + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + var1.writeByte(this.b); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(PacketListener listener) + { + a((PacketListenerPlayOut) listener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java new file mode 100644 index 0000000..275e765 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java @@ -0,0 +1,46 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import net.minecraft.server.Entity; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutAttachEntity implements Packet { + public int a; + public int b; + public int c; + + public PacketPlayOutAttachEntity() { + } + + public PacketPlayOutAttachEntity(int var1, Entity var2, Entity var3) { + this.a = var1; + this.b = var2.getId(); + this.c = var3 != null?var3.getId():-1; + } + + public void a(PacketDataSerializer var1) { + this.b = var1.readInt(); + this.c = var1.readInt(); + this.a = var1.readUnsignedByte(); + } + + public void b(PacketDataSerializer var1) { + var1.writeInt(this.b); + var1.writeInt(this.c); + var1.writeByte(this.a); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java new file mode 100644 index 0000000..d4e9528 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java @@ -0,0 +1,48 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutEntity implements Packet { + public int a; + public byte b; + public byte c; + public byte d; + public byte e; + public byte f; + public boolean g; + public boolean h; + + public PacketPlayOutEntity() { + } + + public PacketPlayOutEntity(int var1) { + this.a = var1; + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public String toString() { + return "Entity_" + super.toString(); + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java new file mode 100644 index 0000000..7631d9f --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java @@ -0,0 +1,46 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import net.minecraft.server.ItemStack; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutEntityEquipment implements Packet { + public int a; + public int b; + public ItemStack c; + + public PacketPlayOutEntityEquipment() { + } + + public PacketPlayOutEntityEquipment(int var1, int var2, ItemStack var3) { + this.a = var1; + this.b = var2; + this.c = var3 == null?null:var3.cloneItemStack(); + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + this.b = var1.readShort(); + this.c = var1.i(); + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + var1.writeShort(this.b); + var1.a(this.c); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java new file mode 100644 index 0000000..6d54b76 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java @@ -0,0 +1,48 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import java.util.List; +import net.minecraft.server.DataWatcher; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutEntityMetadata implements Packet { + public int a; + public List b; + + public PacketPlayOutEntityMetadata() { + } + + public PacketPlayOutEntityMetadata(int var1, DataWatcher var2, boolean var3) { + this.a = var1; + if(var3) { + this.b = var2.c(); + } else { + this.b = var2.b(); + } + + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + this.b = DataWatcher.b(var1); + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + DataWatcher.a(this.b, var1); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java new file mode 100644 index 0000000..6c5f222 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java @@ -0,0 +1,73 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import net.minecraft.server.Entity; +import net.minecraft.server.MathHelper; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutEntityTeleport implements Packet { + public int a; + public int b; + public int c; + public int d; + public byte e; + public byte f; + public boolean g; + + public PacketPlayOutEntityTeleport() { + } + + public PacketPlayOutEntityTeleport(Entity var1) { + this.a = var1.getId(); + this.b = MathHelper.floor(var1.locX * 32.0D); + this.c = MathHelper.floor(var1.locY * 32.0D); + this.d = MathHelper.floor(var1.locZ * 32.0D); + this.e = (byte)((int)(var1.yaw * 256.0F / 360.0F)); + this.f = (byte)((int)(var1.pitch * 256.0F / 360.0F)); + this.g = var1.onGround; + } + + public PacketPlayOutEntityTeleport(int var1, int var2, int var3, int var4, byte var5, byte var6, boolean var7) { + this.a = var1; + this.b = var2; + this.c = var3; + this.d = var4; + this.e = var5; + this.f = var6; + this.g = var7; + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + this.b = var1.readInt(); + this.c = var1.readInt(); + this.d = var1.readInt(); + this.e = var1.readByte(); + this.f = var1.readByte(); + this.g = var1.readBoolean(); + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + var1.writeInt(this.b); + var1.writeInt(this.c); + var1.writeInt(this.d); + var1.writeByte(this.e); + var1.writeByte(this.f); + var1.writeBoolean(this.g); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java new file mode 100644 index 0000000..2cddb08 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java @@ -0,0 +1,79 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import net.minecraft.server.Entity; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutEntityVelocity implements Packet { + public int a; + public int b; + public int c; + public int d; + + public PacketPlayOutEntityVelocity() { + } + + public PacketPlayOutEntityVelocity(Entity var1) { + this(var1.getId(), var1.motX, var1.motY, var1.motZ); + } + + public PacketPlayOutEntityVelocity(int var1, double var2, double var4, double var6) { + this.a = var1; + double var8 = 3.9D; + if(var2 < -var8) { + var2 = -var8; + } + + if(var4 < -var8) { + var4 = -var8; + } + + if(var6 < -var8) { + var6 = -var8; + } + + if(var2 > var8) { + var2 = var8; + } + + if(var4 > var8) { + var4 = var8; + } + + if(var6 > var8) { + var6 = var8; + } + + this.b = (int)(var2 * 8000.0D); + this.c = (int)(var4 * 8000.0D); + this.d = (int)(var6 * 8000.0D); + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + this.b = var1.readShort(); + this.c = var1.readShort(); + this.d = var1.readShort(); + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + var1.writeShort(this.b); + var1.writeShort(this.c); + var1.writeShort(this.d); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java b/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java new file mode 100644 index 0000000..c7da28c --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java @@ -0,0 +1,78 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import java.util.List; +import java.util.UUID; +import net.minecraft.server.DataWatcher; +import net.minecraft.server.EntityHuman; +import net.minecraft.server.Item; +import net.minecraft.server.ItemStack; +import net.minecraft.server.MathHelper; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutNamedEntitySpawn implements Packet { + public int a; + public UUID b; + public int c; + public int d; + public int e; + public byte f; + public byte g; + public int h; + public DataWatcher i; + public List j; + + public PacketPlayOutNamedEntitySpawn() { + } + + public PacketPlayOutNamedEntitySpawn(EntityHuman var1) { + this.a = var1.getId(); + this.b = var1.getProfile().getId(); + this.c = MathHelper.floor(var1.locX * 32.0D); + this.d = MathHelper.floor(var1.locY * 32.0D); + this.e = MathHelper.floor(var1.locZ * 32.0D); + this.f = (byte)((int)(var1.yaw * 256.0F / 360.0F)); + this.g = (byte)((int)(var1.pitch * 256.0F / 360.0F)); + ItemStack var2 = var1.inventory.getItemInHand(); + this.h = var2 == null?0:Item.getId(var2.getItem()); + this.i = var1.getDataWatcher(); + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + this.b = var1.g(); + this.c = var1.readInt(); + this.d = var1.readInt(); + this.e = var1.readInt(); + this.f = var1.readByte(); + this.g = var1.readByte(); + this.h = var1.readShort(); + this.j = DataWatcher.b(var1); + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + var1.a(this.b); + var1.writeInt(this.c); + var1.writeInt(this.d); + var1.writeInt(this.e); + var1.writeByte(this.f); + var1.writeByte(this.g); + var1.writeShort(this.h); + this.i.a(var1); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java new file mode 100644 index 0000000..d77bccf --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java @@ -0,0 +1,144 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import net.minecraft.server.Entity; +import net.minecraft.server.MathHelper; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutSpawnEntity implements Packet { + public int a; + public int b; + public int c; + public int d; + public int e; + public int f; + public int g; + public int h; + public int i; + public int j; + public int k; + + public PacketPlayOutSpawnEntity() { + } + + public PacketPlayOutSpawnEntity(Entity var1, int var2) { + this(var1, var2, 0); + } + + public PacketPlayOutSpawnEntity(Entity var1, int var2, int var3) { + this.a = var1.getId(); + this.b = MathHelper.floor(var1.locX * 32.0D); + this.c = MathHelper.floor(var1.locY * 32.0D); + this.d = MathHelper.floor(var1.locZ * 32.0D); + this.h = MathHelper.d(var1.pitch * 256.0F / 360.0F); + this.i = MathHelper.d(var1.yaw * 256.0F / 360.0F); + this.j = var2; + this.k = var3; + if(var3 > 0) { + double var4 = var1.motX; + double var6 = var1.motY; + double var8 = var1.motZ; + double var10 = 3.9D; + if(var4 < -var10) { + var4 = -var10; + } + + if(var6 < -var10) { + var6 = -var10; + } + + if(var8 < -var10) { + var8 = -var10; + } + + if(var4 > var10) { + var4 = var10; + } + + if(var6 > var10) { + var6 = var10; + } + + if(var8 > var10) { + var8 = var10; + } + + this.e = (int)(var4 * 8000.0D); + this.f = (int)(var6 * 8000.0D); + this.g = (int)(var8 * 8000.0D); + } + + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + this.j = var1.readByte(); + this.b = var1.readInt(); + this.c = var1.readInt(); + this.d = var1.readInt(); + this.h = var1.readByte(); + this.i = var1.readByte(); + this.k = var1.readInt(); + if(this.k > 0) { + this.e = var1.readShort(); + this.f = var1.readShort(); + this.g = var1.readShort(); + } + + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + var1.writeByte(this.j); + var1.writeInt(this.b); + var1.writeInt(this.c); + var1.writeInt(this.d); + var1.writeByte(this.h); + var1.writeByte(this.i); + var1.writeInt(this.k); + if(this.k > 0) { + var1.writeShort(this.e); + var1.writeShort(this.f); + var1.writeShort(this.g); + } + + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(int var1) { + this.b = var1; + } + + public void b(int var1) { + this.c = var1; + } + + public void c(int var1) { + this.d = var1; + } + + public void d(int var1) { + this.e = var1; + } + + public void e(int var1) { + this.f = var1; + } + + public void f(int var1) { + this.g = var1; + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java new file mode 100644 index 0000000..c86fe82 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java @@ -0,0 +1,115 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import java.util.List; +import net.minecraft.server.DataWatcher; +import net.minecraft.server.EntityLiving; +import net.minecraft.server.EntityTypes; +import net.minecraft.server.MathHelper; +import net.minecraft.server.Packet; +import net.minecraft.server.PacketDataSerializer; +import net.minecraft.server.PacketListenerPlayOut; + +public class PacketPlayOutSpawnEntityLiving implements Packet { + public int a; + public int b; + public int c; + public int d; + public int e; + public int f; + public int g; + public int h; + public byte i; + public byte j; + public byte k; + public DataWatcher l; + public List m; + + public PacketPlayOutSpawnEntityLiving() { + } + + public PacketPlayOutSpawnEntityLiving(EntityLiving var1) { + this.a = var1.getId(); + this.b = (byte)EntityTypes.a(var1); + this.c = MathHelper.floor(var1.locX * 32.0D); + this.d = MathHelper.floor(var1.locY * 32.0D); + this.e = MathHelper.floor(var1.locZ * 32.0D); + this.i = (byte)((int)(var1.yaw * 256.0F / 360.0F)); + this.j = (byte)((int)(var1.pitch * 256.0F / 360.0F)); + this.k = (byte)((int)(var1.aI * 256.0F / 360.0F)); + double var2 = 3.9D; + double var4 = var1.motX; + double var6 = var1.motY; + double var8 = var1.motZ; + if(var4 < -var2) { + var4 = -var2; + } + + if(var6 < -var2) { + var6 = -var2; + } + + if(var8 < -var2) { + var8 = -var2; + } + + if(var4 > var2) { + var4 = var2; + } + + if(var6 > var2) { + var6 = var2; + } + + if(var8 > var2) { + var8 = var2; + } + + this.f = (int)(var4 * 8000.0D); + this.g = (int)(var6 * 8000.0D); + this.h = (int)(var8 * 8000.0D); + this.l = var1.getDataWatcher(); + } + + public void a(PacketDataSerializer var1) { + this.a = var1.e(); + this.b = var1.readByte() & 255; + this.c = var1.readInt(); + this.d = var1.readInt(); + this.e = var1.readInt(); + this.i = var1.readByte(); + this.j = var1.readByte(); + this.k = var1.readByte(); + this.f = var1.readShort(); + this.g = var1.readShort(); + this.h = var1.readShort(); + this.m = DataWatcher.b(var1); + } + + public void b(PacketDataSerializer var1) { + var1.b(this.a); + var1.writeByte(this.b & 255); + var1.writeInt(this.c); + var1.writeInt(this.d); + var1.writeInt(this.e); + var1.writeByte(this.i); + var1.writeByte(this.j); + var1.writeByte(this.k); + var1.writeShort(this.f); + var1.writeShort(this.g); + var1.writeShort(this.h); + this.l.a(var1); + } + + public void a(PacketListenerPlayOut var1) { + var1.a(this); + } + + public void a(PacketListener packetlistener) { + this.a((PacketListenerPlayOut) packetlistener); + } +} diff --git a/src/main/java/net/minecraft/server/PacketProcessor.java b/src/main/java/net/minecraft/server/PacketProcessor.java new file mode 100644 index 0000000..e43149a --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketProcessor.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +import java.util.ArrayList; +import java.util.List; + +public class PacketProcessor +{ + private List _packetVerifiers; + + public PacketProcessor() + { + _packetVerifiers = new ArrayList(); + } + + public void addPacketVerifier(IPacketVerifier verifier) + { + _packetVerifiers.add(verifier); + } + + public void processPacket(Packet packet, NetworkManager networkManager) + { + boolean addDefaultPacket = true; + + for (IPacketVerifier verifier : _packetVerifiers) + { + if (!verifier.verify(packet)) + { + addDefaultPacket = false; + } + } + + if (addDefaultPacket) + { + networkManager.handle(packet); + } + } + + public void clearVerifiers() + { + _packetVerifiers.clear(); + } + +} diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 18b9e9b..105d821 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -83,6 +83,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList public boolean checkMovement = true; private boolean processedDisconnect; // CraftBukkit - added + public PacketProcessor _packetVerifier; + public PlayerConnection(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) { this.minecraftServer = minecraftserver; this.networkManager = networkmanager; @@ -90,6 +92,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList this.player = entityplayer; entityplayer.playerConnection = this; + _packetVerifier = new PacketProcessor(); + // CraftBukkit start - add fields and methods this.server = minecraftserver.server; } @@ -833,7 +837,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList // CraftBukkit end try { - this.networkManager.handle(packet); + _packetVerifier.processPacket(packet, this.networkManager); } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Sending packet"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Packet being sent"); @@ -1333,10 +1337,13 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList public void a(PacketPlayInCloseWindow packetplayinclosewindow) { if (this.player.dead) return; // CraftBukkit PlayerConnectionUtils.ensureMainThread(packetplayinclosewindow, this, this.player.u()); - - CraftEventFactory.handleInventoryCloseEvent(this.player); // CraftBukkit - - this.player.p(); + + if (packetplayinclosewindow.id == player.activeContainer.windowId) + { + CraftEventFactory.handleInventoryCloseEvent(this.player); // CraftBukkit + + this.player.p(); + } } public void a(PacketPlayInWindowClick packetplayinwindowclick) { diff --git a/src/main/java/net/minecraft/server/QueuedPacket.java b/src/main/java/net/minecraft/server/QueuedPacket.java new file mode 100644 index 0000000..5aceeb4 --- /dev/null +++ b/src/main/java/net/minecraft/server/QueuedPacket.java @@ -0,0 +1,27 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package net.minecraft.server; + +import io.netty.util.concurrent.GenericFutureListener; +import net.minecraft.server.Packet; + +public class QueuedPacket { + private final Packet a; + private final GenericFutureListener[] b; + + public QueuedPacket(Packet var1, GenericFutureListener... var2) { + this.a = var1; + this.b = var2; + } + + public static Packet a(QueuedPacket var0) { + return var0.a; + } + + public static GenericFutureListener[] b(QueuedPacket var0) { + return var0.b; + } +} diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index 762e469..533e1e2 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -194,6 +194,8 @@ public abstract class World implements IBlockAccess { public final SpigotTimings.WorldTimingsHandler timings; // Spigot + private Entity _startEntity; + public CraftWorld getWorld() { return this.world; } @@ -1628,14 +1630,43 @@ public abstract class World implements IBlockAccess { } this.methodProfiler.b(); - if (flag && entity.ad && entity.passenger != null) { - if (!entity.passenger.dead && entity.passenger.vehicle == entity) { + if (flag && entity.ad && entity.passenger != null) + { +// if (!entity.passenger.dead && entity.passenger.vehicle == entity) { +// this.g(entity.passenger); +// } else { +// entity.passenger.vehicle = null; +// entity.passenger = null; +// } +// } + if (!entity.passenger.dead && entity.passenger.vehicle == entity) + { + if (_startEntity == null) + _startEntity = entity; + this.g(entity.passenger); - } else { + } else if (entity == _startEntity) + { + for (StackTraceElement element : Thread.currentThread().getStackTrace()) + { + System.out.println(element); + } + + entity.passenger.vehicle = null; + entity.passenger = null; + _startEntity = null; + } else + { entity.passenger.vehicle = null; entity.passenger = null; + _startEntity = null; } } + else + { + _startEntity = null; + } + entity.tickTimer.stopTiming(); // Spigot } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index d5ea292..ecee9f2 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -1072,9 +1072,9 @@ public class CraftWorld implements World { ( (EntityOcelot) entity ).spawnBonus = false; } // Spigot end - if (entity instanceof EntityInsentient) { - ((EntityInsentient) entity).prepare(getHandle().E(new BlockPosition(entity)), (GroupDataEntity) null); - } +// if (entity instanceof EntityInsentient) { +// ((EntityInsentient) entity).prepare(getHandle().E(new BlockPosition(entity)), (GroupDataEntity) null); +// } world.addEntity(entity, reason); return (T) entity.getBukkitEntity(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 5864a51..e6efa95 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -870,12 +870,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } - @Override - public void hidePlayer(Player player) { + public void hidePlayer(Player player) + { + hidePlayer(player, false, true); + } + + public void hidePlayer(Player player, boolean override, boolean hideList) { Validate.notNull(player, "hidden player cannot be null"); if (getHandle().playerConnection == null) return; if (equals(player)) return; - if (hiddenPlayers.contains(player.getUniqueId())) return; + if (!override && hiddenPlayers.contains(player.getUniqueId())) return; hiddenPlayers.add(player.getUniqueId()); //remove this player from the hidden player's EntityTrackerEntry @@ -887,7 +891,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } //remove the hidden player from this player user list - getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, other)); + if (hideList) + getHandle().playerConnection.sendPacket(new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, other)); } @Override @@ -1333,13 +1338,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean getCollidesWithEntities() { - return getHandle().collidesWithEntities; + return !getHandle().spectating; } @Override public void setCollidesWithEntities(boolean collides) { - getHandle().collidesWithEntities = collides; + getHandle().spectating = !collides; getHandle().k = collides; // First boolean of Entity } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java index 7ae6f12..00c98cf 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java @@ -439,8 +439,8 @@ public class CraftInventory implements Inventory { return InventoryType.ENCHANTING; } else if (inventory instanceof TileEntityBrewingStand) { return InventoryType.BREWING; - } else if (inventory instanceof CraftInventoryCustom.MinecraftInventory) { - return ((CraftInventoryCustom.MinecraftInventory) inventory).getType(); + } else if (inventory instanceof MinecraftInventory) { + return ((MinecraftInventory) inventory).getType(); } else if (inventory instanceof InventoryEnderChest) { return InventoryType.ENDER_CHEST; } else if (inventory instanceof InventoryMerchant) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java index 947c493..eed9afa 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java @@ -31,168 +31,4 @@ public class CraftInventoryCustom extends CraftInventory { public CraftInventoryCustom(InventoryHolder owner, int size, String title) { super(new MinecraftInventory(owner, size, title)); } - - static class MinecraftInventory implements IInventory { - private final ItemStack[] items; - private int maxStack = MAX_STACK; - private final List viewers; - private final String title; - private InventoryType type; - private final InventoryHolder owner; - - public MinecraftInventory(InventoryHolder owner, InventoryType type) { - this(owner, type.getDefaultSize(), type.getDefaultTitle()); - this.type = type; - } - - public MinecraftInventory(InventoryHolder owner, InventoryType type, String title) { - this(owner, type.getDefaultSize(), title); - this.type = type; - } - - public MinecraftInventory(InventoryHolder owner, int size) { - this(owner, size, "Chest"); - } - - public MinecraftInventory(InventoryHolder owner, int size, String title) { - Validate.notNull(title, "Title cannot be null"); - Validate.isTrue(title.length() <= 32, "Title cannot be longer than 32 characters"); - this.items = new ItemStack[size]; - this.title = title; - this.viewers = new ArrayList(); - this.owner = owner; - this.type = InventoryType.CHEST; - } - - public int getSize() { - return items.length; - } - - public ItemStack getItem(int i) { - return items[i]; - } - - public ItemStack splitStack(int i, int j) { - ItemStack stack = this.getItem(i); - ItemStack result; - if (stack == null) return null; - if (stack.count <= j) { - this.setItem(i, null); - result = stack; - } else { - result = CraftItemStack.copyNMSStack(stack, j); - stack.count -= j; - } - this.update(); - return result; - } - - public ItemStack splitWithoutUpdate(int i) { - ItemStack stack = this.getItem(i); - ItemStack result; - if (stack == null) return null; - if (stack.count <= 1) { - this.setItem(i, null); - result = stack; - } else { - result = CraftItemStack.copyNMSStack(stack, 1); - stack.count -= 1; - } - return result; - } - - public void setItem(int i, ItemStack itemstack) { - items[i] = itemstack; - if (itemstack != null && this.getMaxStackSize() > 0 && itemstack.count > this.getMaxStackSize()) { - itemstack.count = this.getMaxStackSize(); - } - } - - public int getMaxStackSize() { - return maxStack; - } - - public void setMaxStackSize(int size) { - maxStack = size; - } - - public void update() {} - - public boolean a(EntityHuman entityhuman) { - return true; - } - - public ItemStack[] getContents() { - return items; - } - - public void onOpen(CraftHumanEntity who) { - viewers.add(who); - } - - public void onClose(CraftHumanEntity who) { - viewers.remove(who); - } - - public List getViewers() { - return viewers; - } - - public InventoryType getType() { - return type; - } - - public InventoryHolder getOwner() { - return owner; - } - - public boolean b(int i, ItemStack itemstack) { - return true; - } - - @Override - public void startOpen(EntityHuman entityHuman) { - - } - - @Override - public void closeContainer(EntityHuman entityHuman) { - - } - - @Override - public int getProperty(int i) { - return 0; - } - - @Override - public void b(int i, int i1) { - - } - - @Override - public int g() { - return 0; - } - - @Override - public void l() { - - } - - @Override - public String getName() { - return title; - } - - @Override - public boolean hasCustomName() { - return title != null; - } - - @Override - public IChatBaseComponent getScoreboardDisplayName() { - return new ChatComponentText(title); - } - } } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java index b49c2dc..fe23d4d 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java @@ -22,7 +22,7 @@ import org.bukkit.inventory.meta.ItemMeta; import com.google.common.collect.ImmutableMap; @DelegateDeserialization(ItemStack.class) -public final class CraftItemStack extends ItemStack { +public class CraftItemStack extends ItemStack { public static net.minecraft.server.ItemStack asNMSCopy(ItemStack original) { if (original instanceof CraftItemStack) { @@ -91,22 +91,22 @@ public final class CraftItemStack extends ItemStack { /** * Mirror */ - private CraftItemStack(net.minecraft.server.ItemStack item) { + protected CraftItemStack(net.minecraft.server.ItemStack item) { this.handle = item; } - private CraftItemStack(ItemStack item) { + protected CraftItemStack(ItemStack item) { this(item.getTypeId(), item.getAmount(), item.getDurability(), item.hasItemMeta() ? item.getItemMeta() : null); } - private CraftItemStack(Material type, int amount, short durability, ItemMeta itemMeta) { + protected CraftItemStack(Material type, int amount, short durability, ItemMeta itemMeta) { setType(type); setAmount(amount); setDurability(durability); setItemMeta(itemMeta); } - private CraftItemStack(int typeId, int amount, short durability, ItemMeta itemMeta) { + protected CraftItemStack(int typeId, int amount, short durability, ItemMeta itemMeta) { this(Material.getMaterial(typeId), amount, durability, itemMeta); } @@ -402,6 +402,11 @@ public final class CraftItemStack extends ItemStack { return hasItemMeta() ? that.hasItemMeta() && handle.getTag().equals(that.handle.getTag()) : !that.hasItemMeta(); } + public net.minecraft.server.ItemStack getHandler() + { + return handle; + } + @Override public boolean hasItemMeta() { return hasItemMeta(handle); diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/MinecraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/MinecraftInventory.java new file mode 100644 index 0000000..b990b6b --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/inventory/MinecraftInventory.java @@ -0,0 +1,183 @@ +package org.bukkit.craftbukkit.inventory; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.craftbukkit.entity.CraftHumanEntity; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.entity.HumanEntity; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.InventoryHolder; + +import net.minecraft.server.ChatComponentText; +import net.minecraft.server.EntityHuman; +import net.minecraft.server.IChatBaseComponent; +import net.minecraft.server.IInventory; +import net.minecraft.server.ItemStack; + +import org.apache.commons.lang.Validate; + +public class MinecraftInventory implements IInventory +{ + private final ItemStack[] items; + private int maxStack = MAX_STACK; + private final List viewers; + private final String title; + private InventoryType type; + private final InventoryHolder owner; + + public MinecraftInventory(InventoryHolder owner, InventoryType type) { + this(owner, type.getDefaultSize(), type.getDefaultTitle()); + this.type = type; + } + + public MinecraftInventory(InventoryHolder owner, InventoryType type, String title) { + this(owner, type.getDefaultSize(), title); + this.type = type; + } + + public MinecraftInventory(InventoryHolder owner, int size) { + this(owner, size, "Chest"); + } + + public MinecraftInventory(InventoryHolder owner, int size, String title) { + Validate.notNull(title, "Title cannot be null"); + Validate.isTrue(title.length() <= 32, "Title cannot be longer than 32 characters"); + this.items = new ItemStack[size]; + this.title = title; + this.viewers = new ArrayList(); + this.owner = owner; + this.type = InventoryType.CHEST; + } + + public int getSize() { + return items.length; + } + + public ItemStack getItem(int i) { + return items[i]; + } + + public ItemStack splitStack(int i, int j) { + ItemStack stack = this.getItem(i); + ItemStack result; + if (stack == null) return null; + if (stack.count <= j) { + this.setItem(i, null); + result = stack; + } else { + result = CraftItemStack.copyNMSStack(stack, j); + stack.count -= j; + } + this.update(); + return result; + } + + public ItemStack splitWithoutUpdate(int i) { + ItemStack stack = this.getItem(i); + ItemStack result; + if (stack == null) return null; + if (stack.count <= 1) { + this.setItem(i, null); + result = stack; + } else { + result = CraftItemStack.copyNMSStack(stack, 1); + stack.count -= 1; + } + return result; + } + + public void setItem(int i, ItemStack itemstack) { + items[i] = itemstack; + if (itemstack != null && this.getMaxStackSize() > 0 && itemstack.count > this.getMaxStackSize()) { + itemstack.count = this.getMaxStackSize(); + } + } + + public int getMaxStackSize() { + return maxStack; + } + + public void setMaxStackSize(int size) { + maxStack = size; + } + + public void update() {} + + public boolean a(EntityHuman entityhuman) { + return true; + } + + public ItemStack[] getContents() { + return items; + } + + public void onOpen(CraftHumanEntity who) { + viewers.add(who); + } + + public void onClose(CraftHumanEntity who) { + viewers.remove(who); + } + + public List getViewers() { + return viewers; + } + + public InventoryType getType() { + return type; + } + + public InventoryHolder getOwner() { + return owner; + } + + public boolean b(int i, ItemStack itemstack) { + return true; + } + + @Override + public void startOpen(EntityHuman entityHuman) { + + } + + @Override + public void closeContainer(EntityHuman entityHuman) { + + } + + @Override + public int getProperty(int i) { + return 0; + } + + @Override + public void b(int i, int i1) { + + } + + @Override + public int g() { + return 0; + } + + @Override + public void l() { + + } + + @Override + public String getName() { + return title; + } + + @Override + public boolean hasCustomName() { + return title != null; + } + + @Override + public IChatBaseComponent getScoreboardDisplayName() { + return new ChatComponentText(title); + } +} \ No newline at end of file -- 1.9.4.msysgit.0