mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 11:45:51 +00:00
Reduced technical debt for Androids
This commit is contained in:
parent
b6be4af90d
commit
adb8194d84
@ -10,6 +10,7 @@ import java.util.List;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -344,10 +345,9 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
|
|||||||
case MOVE_AND_DIG_FORWARD:
|
case MOVE_AND_DIG_FORWARD:
|
||||||
movedig(b, face, b.getRelative(face));
|
movedig(b, face, b.getRelative(face));
|
||||||
break;
|
break;
|
||||||
case MOVE_AND_DIG_UP: {
|
case MOVE_AND_DIG_UP:
|
||||||
movedig(b, face, b.getRelative(BlockFace.UP));
|
movedig(b, face, b.getRelative(BlockFace.UP));
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case MOVE_AND_DIG_DOWN:
|
case MOVE_AND_DIG_DOWN:
|
||||||
movedig(b, face, b.getRelative(BlockFace.DOWN));
|
movedig(b, face, b.getRelative(BlockFace.DOWN));
|
||||||
break;
|
break;
|
||||||
@ -431,204 +431,16 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ATTACK_MOBS_ANIMALS:
|
case ATTACK_MOBS_ANIMALS:
|
||||||
entities:
|
killEntities(b, damage, e -> true);
|
||||||
for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) {
|
|
||||||
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
|
|
||||||
case NORTH: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case EAST: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() > b.getX()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SOUTH: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() > b.getZ()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case WEST: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() < b.getX()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case ATTACK_MOBS:
|
case ATTACK_MOBS:
|
||||||
entities:
|
killEntities(b, damage, e -> e instanceof Monster);
|
||||||
for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) {
|
|
||||||
if (n instanceof Animals) continue;
|
|
||||||
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
|
|
||||||
case NORTH: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case EAST: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() > b.getX()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SOUTH: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() > b.getZ()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case WEST: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() < b.getX()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case ATTACK_ANIMALS:
|
case ATTACK_ANIMALS:
|
||||||
entities:
|
killEntities(b, damage, e -> e instanceof Animals);
|
||||||
for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) {
|
|
||||||
if (n instanceof Monster) continue;
|
|
||||||
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
|
|
||||||
case NORTH: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case EAST: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() > b.getX()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SOUTH: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() > b.getZ()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case WEST: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() < b.getX()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case ATTACK_ANIMALS_ADULT:
|
case ATTACK_ANIMALS_ADULT:
|
||||||
entities:
|
killEntities(b, damage, e -> e instanceof Animals && e instanceof org.bukkit.entity.Ageable && ((org.bukkit.entity.Ageable) e).isAdult());
|
||||||
for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) {
|
|
||||||
if (n instanceof Monster) continue;
|
|
||||||
if (n instanceof org.bukkit.entity.Ageable && !((org.bukkit.entity.Ageable) n).isAdult()) continue;
|
|
||||||
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
|
|
||||||
case NORTH: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case EAST: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() > b.getX()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case SOUTH: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() > b.getZ()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case WEST: {
|
|
||||||
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() < b.getX()) {
|
|
||||||
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
|
||||||
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
|
||||||
|
|
||||||
((LivingEntity) n).damage(damage);
|
|
||||||
break entities;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -639,6 +451,53 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void killEntities(Block b, double damage, Predicate<Entity> predicate) {
|
||||||
|
for (Entity n: AndroidHologram.getNearbyEntities(b, 4D + getTier())) {
|
||||||
|
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && predicate.test(n)) {
|
||||||
|
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
|
||||||
|
case NORTH:
|
||||||
|
if (n.getLocation().getZ() < b.getZ()) {
|
||||||
|
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
||||||
|
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
||||||
|
|
||||||
|
((LivingEntity) n).damage(damage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EAST:
|
||||||
|
if (n.getLocation().getX() > b.getX()) {
|
||||||
|
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
||||||
|
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
||||||
|
|
||||||
|
((LivingEntity) n).damage(damage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SOUTH:
|
||||||
|
if (n.getLocation().getZ() > b.getZ()) {
|
||||||
|
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
||||||
|
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
||||||
|
|
||||||
|
((LivingEntity) n).damage(damage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WEST:
|
||||||
|
if (n.getLocation().getX() < b.getX()) {
|
||||||
|
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
|
||||||
|
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
|
||||||
|
|
||||||
|
((LivingEntity) n).damage(damage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void move(Block b, BlockFace face, Block block) throws Exception {
|
private void move(Block b, BlockFace face, Block block) throws Exception {
|
||||||
if (block.getY() < 0 || block.getY() > block.getWorld().getMaxHeight())
|
if (block.getY() < 0 || block.getY() > block.getWorld().getMaxHeight())
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user