mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-27 04:55:47 +01:00
82bcd1408a
I don't clearly see any, but as a protection for future changes.
101 lines
5.4 KiB
Diff
101 lines
5.4 KiB
Diff
From 6c9aa29b50e035dc386794e866d64ec07c4c9c19 Mon Sep 17 00:00:00 2001
|
|
From: Zach Brown <zach.brown@destroystokyo.com>
|
|
Date: Fri, 16 Dec 2016 22:10:35 -0600
|
|
Subject: [PATCH] Vanished players don't have rights
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
|
index d79844a98..6d1e61e23 100644
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
|
@@ -81,7 +81,7 @@ public abstract class Entity implements ICommandListener, KeyedObject { // Paper
|
|
private static double f = 1.0D;
|
|
private static int entityCount;
|
|
private int id;
|
|
- public boolean i;
|
|
+ public boolean i; public boolean blocksEntitySpawning() { return i; } // Paper - OBFHELPER
|
|
public final List<Entity> passengers;
|
|
protected int j;
|
|
private Entity au;public void setVehicle(Entity entity) { this.au = entity; } // Paper // OBFHELPER
|
|
diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java
|
|
index 60149c1ca..a5730d1c7 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemBlock.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemBlock.java
|
|
@@ -20,7 +20,7 @@ public class ItemBlock extends Item {
|
|
|
|
ItemStack itemstack = entityhuman.b(enumhand);
|
|
|
|
- if (!itemstack.isEmpty() && entityhuman.a(blockposition, enumdirection, itemstack) && world.a(this.a, blockposition, false, enumdirection, (Entity) null)) {
|
|
+ if (!itemstack.isEmpty() && entityhuman.a(blockposition, enumdirection, itemstack) && world.a(this.a, blockposition, false, enumdirection, entityhuman)) { // Paper - Pass entityhuman instead of null
|
|
int i = this.filterData(itemstack.getData());
|
|
IBlockData iblockdata1 = this.a.getPlacedState(world, blockposition, enumdirection, f, f1, f2, i, entityhuman);
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index d7bf8378e..424b956e8 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -1805,6 +1805,33 @@ public abstract class World implements IBlockAccess {
|
|
return this.a(axisalignedbb, (Entity) null);
|
|
}
|
|
|
|
+ // Paper start - Based on method below
|
|
+ /**
|
|
+ * @param axisalignedbb area to search within
|
|
+ * @param entity causing the action ex. block placer
|
|
+ * @return if there are no visible players colliding
|
|
+ */
|
|
+ public boolean checkNoVisiblePlayerCollisions(AxisAlignedBB axisalignedbb, @Nullable Entity entity) {
|
|
+ List list = this.getEntities((Entity) null, axisalignedbb);
|
|
+
|
|
+ for (int i = 0; i < list.size(); ++i) {
|
|
+ Entity entity1 = (Entity) list.get(i);
|
|
+
|
|
+ if (entity instanceof EntityPlayer && entity1 instanceof EntityPlayer) {
|
|
+ if (!((EntityPlayer) entity).getBukkitEntity().canSee(((EntityPlayer) entity1).getBukkitEntity())) {
|
|
+ continue;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (!entity1.dead && entity1.blocksEntitySpawning()) {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return true;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public boolean a(AxisAlignedBB axisalignedbb, @Nullable Entity entity) {
|
|
List list = this.getEntities((Entity) null, axisalignedbb);
|
|
|
|
@@ -2695,7 +2722,7 @@ public abstract class World implements IBlockAccess {
|
|
AxisAlignedBB axisalignedbb = flag ? null : block.getBlockData().d(this, blockposition);
|
|
|
|
// CraftBukkit start - store default return
|
|
- boolean defaultReturn = axisalignedbb != Block.k && !this.a(axisalignedbb.a(blockposition), entity) ? false : (iblockdata.getMaterial() == Material.ORIENTABLE && block == Blocks.ANVIL ? true : iblockdata.getMaterial().isReplaceable() && block.canPlace(this, blockposition, enumdirection));
|
|
+ boolean defaultReturn = axisalignedbb != Block.k && !this.checkNoVisiblePlayerCollisions(axisalignedbb.a(blockposition), entity) ? false : (iblockdata.getMaterial() == Material.ORIENTABLE && block == Blocks.ANVIL ? true : iblockdata.getMaterial().isReplaceable() && block.canPlace(this, blockposition, enumdirection)); // Paper - Use our entity search
|
|
BlockCanBuildEvent event = new BlockCanBuildEvent(this.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()), CraftMagicNumbers.getId(block), defaultReturn);
|
|
this.getServer().getPluginManager().callEvent(event);
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index 06a277b3b..5f816e44f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -810,6 +810,13 @@ public class CraftEventFactory {
|
|
Projectile projectile = (Projectile) entity.getBukkitEntity();
|
|
org.bukkit.entity.Entity collided = position.entity.getBukkitEntity();
|
|
com.destroystokyo.paper.event.entity.ProjectileCollideEvent event = new com.destroystokyo.paper.event.entity.ProjectileCollideEvent(projectile, collided);
|
|
+
|
|
+ if (projectile.getShooter() instanceof Player && collided instanceof Player) {
|
|
+ if (!((Player) projectile.getShooter()).canSee((Player) collided)) {
|
|
+ event.setCancelled(true);
|
|
+ }
|
|
+ }
|
|
+
|
|
Bukkit.getPluginManager().callEvent(event);
|
|
return event;
|
|
}
|
|
--
|
|
2.18.0
|
|
|