Skip to content

Commit

Permalink
Disable milking protected NPC cows
Browse files Browse the repository at this point in the history
  • Loading branch information
fullwall committed May 9, 2020
1 parent aa0752f commit 10cea99
Show file tree
Hide file tree
Showing 16 changed files with 264 additions and 52 deletions.
23 changes: 11 additions & 12 deletions main/src/main/java/net/citizensnpcs/EventListen.java
Original file line number Diff line number Diff line change
Expand Up @@ -288,17 +288,17 @@ public void onEntityDeath(EntityDeathEvent event) {
Bukkit.getPluginManager().callEvent(new NPCDeathEvent(npc, event));
npc.despawn(DespawnReason.DEATH);

if (npc.data().get(NPC.RESPAWN_DELAY_METADATA, -1) >= 0) {
int delay = npc.data().get(NPC.RESPAWN_DELAY_METADATA, -1);
Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() {
@Override
public void run() {
if (!npc.isSpawned() && npc.getOwningRegistry().getByUniqueId(npc.getUniqueId()) == npc) {
npc.spawn(location, SpawnReason.TIMED_RESPAWN);
}
int delay = npc.data().get(NPC.RESPAWN_DELAY_METADATA, -1);
if (delay < 0)
return;
Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() {
@Override
public void run() {
if (!npc.isSpawned() && npc.getOwningRegistry().getByUniqueId(npc.getUniqueId()) == npc) {
npc.spawn(location, SpawnReason.TIMED_RESPAWN);
}
}, delay + 2);
}
}
}, delay + 2);
}

@EventHandler
Expand Down Expand Up @@ -426,8 +426,7 @@ public void onNPCDespawn(NPCDespawnEvent event) {
if (team.getSize() == 1) {
Util.sendTeamPacketToOnlinePlayers(team, 1);
team.unregister();
}
else {
} else {
team.removePlayer(player);
}
}
Expand Down
9 changes: 7 additions & 2 deletions main/src/main/java/net/citizensnpcs/trait/Controllable.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,15 @@ private void loadController() {
* @return whether the mount was successful
*/
public boolean mount(Player toMount) {
boolean found = NMS.getPassengers(npc.getEntity()).size() == 0;
for (Entity passenger : NMS.getPassengers(npc.getEntity())) {
List<Entity> passengers = NMS.getPassengers(npc.getEntity());
if (passengers.size() == 0) {
return false;
}
boolean found = false;
for (Entity passenger : passengers) {
if (passenger != null && passenger == toMount) {
found = true;
break;
}
}
if (!found) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@
import net.citizensnpcs.util.Util;
import net.minecraft.server.v1_10_R1.BlockPosition;
import net.minecraft.server.v1_10_R1.EntityCow;
import net.minecraft.server.v1_10_R1.EntityHuman;
import net.minecraft.server.v1_10_R1.EnumHand;
import net.minecraft.server.v1_10_R1.IBlockData;
import net.minecraft.server.v1_10_R1.ItemStack;
import net.minecraft.server.v1_10_R1.Items;
import net.minecraft.server.v1_10_R1.NBTTagCompound;
import net.minecraft.server.v1_10_R1.SoundEffect;
import net.minecraft.server.v1_10_R1.World;
Expand Down Expand Up @@ -79,6 +83,17 @@ protected void a(double d0, boolean flag, IBlockData block, BlockPosition blockp
}
}

@Override
public boolean a(EntityHuman entityhuman, EnumHand enumhand, ItemStack itemstack) {
if (npc == null || !npc.isProtected())
return super.a(entityhuman, enumhand, itemstack);
if (itemstack != null && itemstack.getItem() == Items.BUCKET && !entityhuman.abilities.canInstantlyBuild
&& !this.isBaby()) {
return false;
}
return super.a(entityhuman, enumhand, itemstack);
}

@Override
protected SoundEffect bV() {
return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,12 @@
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.Util;
import net.minecraft.server.v1_10_R1.BlockPosition;
import net.minecraft.server.v1_10_R1.EntityHuman;
import net.minecraft.server.v1_10_R1.EntityMushroomCow;
import net.minecraft.server.v1_10_R1.EnumHand;
import net.minecraft.server.v1_10_R1.IBlockData;
import net.minecraft.server.v1_10_R1.ItemStack;
import net.minecraft.server.v1_10_R1.Items;
import net.minecraft.server.v1_10_R1.NBTTagCompound;
import net.minecraft.server.v1_10_R1.SoundEffect;
import net.minecraft.server.v1_10_R1.World;
Expand Down Expand Up @@ -65,6 +69,17 @@ protected void a(double d0, boolean flag, IBlockData block, BlockPosition blockp
}
}

@Override
public boolean a(EntityHuman entityhuman, EnumHand enumhand, ItemStack itemstack) {
if (npc == null || !npc.isProtected())
return super.a(entityhuman, enumhand, itemstack);
if (itemstack != null && itemstack.getItem() == Items.BUCKET && !entityhuman.abilities.canInstantlyBuild
&& !this.isBaby()) {
return false;
}
return super.a(entityhuman, enumhand, itemstack);
}

@Override
protected SoundEffect bV() {
return NMSImpl.getSoundEffect(npc, super.bV(), NPC.DEATH_SOUND_METADATA);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@
import net.citizensnpcs.util.Util;
import net.minecraft.server.v1_11_R1.BlockPosition;
import net.minecraft.server.v1_11_R1.EntityCow;
import net.minecraft.server.v1_11_R1.EntityHuman;
import net.minecraft.server.v1_11_R1.EnumHand;
import net.minecraft.server.v1_11_R1.IBlockData;
import net.minecraft.server.v1_11_R1.ItemStack;
import net.minecraft.server.v1_11_R1.Items;
import net.minecraft.server.v1_11_R1.NBTTagCompound;
import net.minecraft.server.v1_11_R1.SoundEffect;
import net.minecraft.server.v1_11_R1.World;
Expand Down Expand Up @@ -79,6 +83,17 @@ protected void a(double d0, boolean flag, IBlockData block, BlockPosition blockp
}
}

@Override
public boolean a(EntityHuman entityhuman, EnumHand enumhand) {
if (npc == null || !npc.isProtected())
return super.a(entityhuman, enumhand);
ItemStack itemstack = entityhuman.b(enumhand);
if (itemstack.getItem() == Items.BUCKET && !entityhuman.abilities.canInstantlyBuild && !this.isBaby()) {
return false;
}
return super.a(entityhuman, enumhand);
}

@Override
protected SoundEffect bW() {
return NMSImpl.getSoundEffect(npc, super.bW(), NPC.DEATH_SOUND_METADATA);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,12 @@
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.Util;
import net.minecraft.server.v1_11_R1.BlockPosition;
import net.minecraft.server.v1_11_R1.EntityHuman;
import net.minecraft.server.v1_11_R1.EntityMushroomCow;
import net.minecraft.server.v1_11_R1.EnumHand;
import net.minecraft.server.v1_11_R1.IBlockData;
import net.minecraft.server.v1_11_R1.ItemStack;
import net.minecraft.server.v1_11_R1.Items;
import net.minecraft.server.v1_11_R1.NBTTagCompound;
import net.minecraft.server.v1_11_R1.SoundEffect;
import net.minecraft.server.v1_11_R1.World;
Expand Down Expand Up @@ -65,6 +69,17 @@ protected void a(double d0, boolean flag, IBlockData block, BlockPosition blockp
}
}

@Override
public boolean a(EntityHuman entityhuman, EnumHand enumhand) {
if (npc == null || !npc.isProtected())
return super.a(entityhuman, enumhand);
ItemStack itemstack = entityhuman.b(enumhand);
if (itemstack.getItem() == Items.BUCKET && !entityhuman.abilities.canInstantlyBuild && !this.isBaby()) {
return false;
}
return super.a(entityhuman, enumhand);
}

@Override
protected SoundEffect bW() {
return NMSImpl.getSoundEffect(npc, super.bW(), NPC.DEATH_SOUND_METADATA);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
import net.minecraft.server.v1_12_R1.BlockPosition;
import net.minecraft.server.v1_12_R1.DamageSource;
import net.minecraft.server.v1_12_R1.EntityCow;
import net.minecraft.server.v1_12_R1.EntityHuman;
import net.minecraft.server.v1_12_R1.EnumHand;
import net.minecraft.server.v1_12_R1.IBlockData;
import net.minecraft.server.v1_12_R1.ItemStack;
import net.minecraft.server.v1_12_R1.Items;
import net.minecraft.server.v1_12_R1.NBTTagCompound;
import net.minecraft.server.v1_12_R1.SoundEffect;
import net.minecraft.server.v1_12_R1.World;
Expand Down Expand Up @@ -80,6 +84,17 @@ protected void a(double d0, boolean flag, IBlockData block, BlockPosition blockp
}
}

@Override
public boolean a(EntityHuman entityhuman, EnumHand enumhand) {
if (npc == null || !npc.isProtected())
return super.a(entityhuman, enumhand);
ItemStack itemstack = entityhuman.b(enumhand);
if (itemstack.getItem() == Items.BUCKET && !entityhuman.abilities.canInstantlyBuild && !this.isBaby()) {
return false;
}
return super.a(entityhuman, enumhand);
}

@Override
public void a(float f, float f1, float f2) {
if (npc == null || !npc.isFlyable()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,12 @@
import net.citizensnpcs.util.Util;
import net.minecraft.server.v1_12_R1.BlockPosition;
import net.minecraft.server.v1_12_R1.DamageSource;
import net.minecraft.server.v1_12_R1.EntityHuman;
import net.minecraft.server.v1_12_R1.EntityMushroomCow;
import net.minecraft.server.v1_12_R1.EnumHand;
import net.minecraft.server.v1_12_R1.IBlockData;
import net.minecraft.server.v1_12_R1.ItemStack;
import net.minecraft.server.v1_12_R1.Items;
import net.minecraft.server.v1_12_R1.NBTTagCompound;
import net.minecraft.server.v1_12_R1.SoundEffect;
import net.minecraft.server.v1_12_R1.World;
Expand Down Expand Up @@ -66,6 +70,17 @@ protected void a(double d0, boolean flag, IBlockData block, BlockPosition blockp
}
}

@Override
public boolean a(EntityHuman entityhuman, EnumHand enumhand) {
if (npc == null || !npc.isProtected())
return super.a(entityhuman, enumhand);
ItemStack itemstack = entityhuman.b(enumhand);
if (itemstack.getItem() == Items.BUCKET && !entityhuman.abilities.canInstantlyBuild && !this.isBaby()) {
return false;
}
return super.a(entityhuman, enumhand);
}

@Override
public void a(float f, float f1, float f2) {
if (npc == null || !npc.isFlyable()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
import net.minecraft.server.v1_13_R2.BlockPosition;
import net.minecraft.server.v1_13_R2.DamageSource;
import net.minecraft.server.v1_13_R2.EntityCow;
import net.minecraft.server.v1_13_R2.EntityHuman;
import net.minecraft.server.v1_13_R2.EnumHand;
import net.minecraft.server.v1_13_R2.IBlockData;
import net.minecraft.server.v1_13_R2.ItemStack;
import net.minecraft.server.v1_13_R2.Items;
import net.minecraft.server.v1_13_R2.NBTTagCompound;
import net.minecraft.server.v1_13_R2.SoundEffect;
import net.minecraft.server.v1_13_R2.World;
Expand Down Expand Up @@ -80,6 +84,17 @@ protected void a(double d0, boolean flag, IBlockData block, BlockPosition blockp
}
}

@Override
public boolean a(EntityHuman entityhuman, EnumHand enumhand) {
if (npc == null || !npc.isProtected())
return super.a(entityhuman, enumhand);
ItemStack itemstack = entityhuman.b(enumhand);
if (itemstack.getItem() == Items.BUCKET && !entityhuman.abilities.canInstantlyBuild && !this.isBaby()) {
return false;
}
return super.a(entityhuman, enumhand);
}

@Override
public void a(float f, float f1, float f2) {
if (npc == null || !npc.isFlyable()) {
Expand All @@ -90,8 +105,10 @@ public void a(float f, float f1, float f2) {
}

@Override
protected SoundEffect cs() {
return NMSImpl.getSoundEffect(npc, super.cs(), NPC.DEATH_SOUND_METADATA);
public void c(float f, float f1) {
if (npc == null || !npc.isFlyable()) {
super.c(f, f1);
}
}

@Override
Expand All @@ -104,6 +121,11 @@ public void collide(net.minecraft.server.v1_13_R2.Entity entity) {
}
}

@Override
protected SoundEffect cs() {
return NMSImpl.getSoundEffect(npc, super.cs(), NPC.DEATH_SOUND_METADATA);
}

@Override
protected SoundEffect d(DamageSource damagesource) {
return NMSImpl.getSoundEffect(npc, super.d(damagesource), NPC.HURT_SOUND_METADATA);
Expand All @@ -115,10 +137,8 @@ public boolean d(NBTTagCompound save) {
}

@Override
public void c(float f, float f1) {
if (npc == null || !npc.isFlyable()) {
super.c(f, f1);
}
protected SoundEffect D() {
return NMSImpl.getSoundEffect(npc, super.D(), NPC.AMBIENT_SOUND_METADATA);
}

@Override
Expand Down Expand Up @@ -156,11 +176,6 @@ public void f(double x, double y, double z) {
// cancelled.
}

@Override
protected SoundEffect D() {
return NMSImpl.getSoundEffect(npc, super.D(), NPC.AMBIENT_SOUND_METADATA);
}

@Override
public CraftEntity getBukkitEntity() {
if (npc != null && !(bukkitEntity instanceof NPCHolder)) {
Expand All @@ -174,6 +189,13 @@ public NPC getNPC() {
return npc;
}

@Override
protected void I() {
if (npc == null) {
super.I();
}
}

@Override
public boolean isLeashed() {
if (npc == null)
Expand All @@ -187,13 +209,6 @@ public boolean isLeashed() {
return false; // shouldLeash
}

@Override
protected void I() {
if (npc == null) {
super.I();
}
}

@Override
public void mobTick() {
super.mobTick();
Expand Down
Loading

0 comments on commit 10cea99

Please sign in to comment.