Add -w flag to butcher for water mobs

beb784e0ffe1d8a8cf678912dbd6207e96afcfc8

Co-Authored-By: Lewis B <17665267+lewisjb@users.noreply.github.com>
This commit is contained in:
N0tMyFaultOG 2020-11-13 21:46:11 +01:00
parent 9cd05bc5a1
commit 679b9d203d
8 changed files with 45 additions and 3 deletions

View File

@ -40,6 +40,7 @@ import org.bukkit.entity.Projectile;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.entity.Villager; import org.bukkit.entity.Villager;
import org.bukkit.entity.WaterMob;
import org.bukkit.entity.minecart.ExplosiveMinecart; import org.bukkit.entity.minecart.ExplosiveMinecart;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
@ -147,4 +148,9 @@ class BukkitEntityProperties implements EntityProperties {
public boolean isPasteable() { public boolean isPasteable() {
return !(entity instanceof Player || entity instanceof ComplexEntityPart); return !(entity instanceof Player || entity instanceof ComplexEntityPart);
} }
@Override
public boolean isWaterCreature() {
return entity instanceof WaterMob;
}
} }

View File

@ -1003,7 +1003,9 @@ public class BrushCommands {
@Switch(name = 'f', desc = "Also kill all friendly mobs (Applies the flags `-abgnpt`)") @Switch(name = 'f', desc = "Also kill all friendly mobs (Applies the flags `-abgnpt`)")
boolean killFriendly, boolean killFriendly,
@Switch(name = 'r', desc = "Also destroy armor stands") @Switch(name = 'r', desc = "Also destroy armor stands")
boolean killArmorStands, InjectedValueAccess context) throws WorldEditException { boolean killArmorStands,
@Switch(name = 'w', desc = "Also kill water mobs")
boolean killWater, InjectedValueAccess context) throws WorldEditException {
worldEdit.checkMaxBrushRadius(radius); worldEdit.checkMaxBrushRadius(radius);
CreatureButcher flags = new CreatureButcher(player); CreatureButcher flags = new CreatureButcher(player);
@ -1015,6 +1017,7 @@ public class BrushCommands {
flags.or(CreatureButcher.Flags.AMBIENT, killAmbient, "worldedit.butcher.ambient"); flags.or(CreatureButcher.Flags.AMBIENT, killAmbient, "worldedit.butcher.ambient");
flags.or(CreatureButcher.Flags.TAGGED, killWithName, "worldedit.butcher.tagged"); flags.or(CreatureButcher.Flags.TAGGED, killWithName, "worldedit.butcher.tagged");
flags.or(CreatureButcher.Flags.ARMOR_STAND, killArmorStands, "worldedit.butcher.armorstands"); flags.or(CreatureButcher.Flags.ARMOR_STAND, killArmorStands, "worldedit.butcher.armorstands");
flags.or(CreatureButcher.Flags.WATER, killWater, "worldedit.butcher.water");
set(context, new ButcherBrush(flags)).setSize(radius); set(context, new ButcherBrush(flags)).setSize(radius);
} }

View File

@ -569,7 +569,9 @@ public class UtilityCommands {
@Switch(name = 'f', desc = "Also kill all friendly mobs (Applies the flags `-abgnpt`)") @Switch(name = 'f', desc = "Also kill all friendly mobs (Applies the flags `-abgnpt`)")
boolean killFriendly, boolean killFriendly,
@Switch(name = 'r', desc = "Also destroy armor stands") @Switch(name = 'r', desc = "Also destroy armor stands")
boolean killArmorStands) throws WorldEditException { boolean killArmorStands,
@Switch(name = 'w', desc = "Also kill water mobs")
boolean killWater) throws WorldEditException {
LocalConfiguration config = we.getConfiguration(); LocalConfiguration config = we.getConfiguration();
if (radius == null) { if (radius == null) {
@ -595,6 +597,7 @@ public class UtilityCommands {
flags.or(CreatureButcher.Flags.AMBIENT, killAmbient, "worldedit.butcher.ambient"); flags.or(CreatureButcher.Flags.AMBIENT, killAmbient, "worldedit.butcher.ambient");
flags.or(CreatureButcher.Flags.TAGGED, killWithName, "worldedit.butcher.tagged"); flags.or(CreatureButcher.Flags.TAGGED, killWithName, "worldedit.butcher.tagged");
flags.or(CreatureButcher.Flags.ARMOR_STAND, killArmorStands, "worldedit.butcher.armorstands"); flags.or(CreatureButcher.Flags.ARMOR_STAND, killArmorStands, "worldedit.butcher.armorstands");
flags.or(CreatureButcher.Flags.WATER, killWater, "worldedit.butcher.water");
int killed = killMatchingEntities(radius, actor, flags::createFunction); int killed = killMatchingEntities(radius, actor, flags::createFunction);

View File

@ -36,8 +36,9 @@ public class CreatureButcher {
public static final int GOLEMS = 1 << 3; public static final int GOLEMS = 1 << 3;
public static final int AMBIENT = 1 << 4; public static final int AMBIENT = 1 << 4;
public static final int TAGGED = 1 << 5; public static final int TAGGED = 1 << 5;
public static final int FRIENDLY = PETS | NPCS | ANIMALS | GOLEMS | AMBIENT | TAGGED;
public static final int ARMOR_STAND = 1 << 6; public static final int ARMOR_STAND = 1 << 6;
public static final int WATER = 1 << 7;
public static final int FRIENDLY = PETS | NPCS | ANIMALS | GOLEMS | AMBIENT | TAGGED | WATER;
private Flags() { private Flags() {
} }
@ -73,6 +74,7 @@ public class CreatureButcher {
boolean killAmbient = (flags & Flags.AMBIENT) != 0; boolean killAmbient = (flags & Flags.AMBIENT) != 0;
boolean killTagged = (flags & Flags.TAGGED) != 0; boolean killTagged = (flags & Flags.TAGGED) != 0;
boolean killArmorStands = (flags & Flags.ARMOR_STAND) != 0; boolean killArmorStands = (flags & Flags.ARMOR_STAND) != 0;
boolean killWaterCreatures = (flags & Flags.WATER) != 0;
EntityProperties type = entity.getFacet(EntityProperties.class); EntityProperties type = entity.getFacet(EntityProperties.class);
@ -116,6 +118,10 @@ public class CreatureButcher {
return false; return false;
} }
if (!killWaterCreatures && type.isWaterCreature()) {
return false;
}
entity.remove(); entity.remove();
return true; return true;
}; };

View File

@ -161,4 +161,11 @@ public interface EntityProperties {
* @return true if pasteable * @return true if pasteable
*/ */
boolean isPasteable(); boolean isPasteable();
/**
* Test whether the entity is a water creature.
*
* @return true if water creature
*/
boolean isWaterCreature();
} }

View File

@ -35,6 +35,7 @@ import net.minecraft.entity.decoration.ItemFrameEntity;
import net.minecraft.entity.decoration.painting.PaintingEntity; import net.minecraft.entity.decoration.painting.PaintingEntity;
import net.minecraft.entity.mob.AmbientEntity; import net.minecraft.entity.mob.AmbientEntity;
import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.mob.MobEntity;
import net.minecraft.entity.mob.WaterCreatureEntity;
import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.TameableEntity; import net.minecraft.entity.passive.TameableEntity;
import net.minecraft.entity.passive.GolemEntity; import net.minecraft.entity.passive.GolemEntity;
@ -148,4 +149,9 @@ public class FabricEntityProperties implements EntityProperties {
public boolean isPasteable() { public boolean isPasteable() {
return !(entity instanceof ServerPlayerEntity || entity instanceof EnderDragonEntity); return !(entity instanceof ServerPlayerEntity || entity instanceof EnderDragonEntity);
} }
@Override
public boolean isWaterCreature() {
return entity instanceof WaterCreatureEntity;
}
} }

View File

@ -41,6 +41,7 @@ import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
import net.minecraft.entity.passive.AmbientEntity; import net.minecraft.entity.passive.AmbientEntity;
import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.TameableEntity; import net.minecraft.entity.passive.TameableEntity;
import net.minecraft.entity.passive.WaterMobEntity;
import net.minecraft.entity.passive.GolemEntity; import net.minecraft.entity.passive.GolemEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
@ -148,4 +149,9 @@ public class ForgeEntityProperties implements EntityProperties {
public boolean isPasteable() { public boolean isPasteable() {
return !(entity instanceof ServerPlayerEntity || entity instanceof EnderDragonPartEntity); return !(entity instanceof ServerPlayerEntity || entity instanceof EnderDragonPartEntity);
} }
@Override
public boolean isWaterCreature() {
return entity instanceof WaterMobEntity;
}
} }

View File

@ -149,4 +149,9 @@ public class SpongeEntityProperties implements EntityProperties {
public boolean isPasteable() { public boolean isPasteable() {
return !(entity instanceof Player || entity instanceof ComplexLivingPart); return !(entity instanceof Player || entity instanceof ComplexLivingPart);
} }
@Override
public boolean isWaterCreature() {
return false; // TODO api8
}
} }