Skip to content

Commit

Permalink
1.16 compat
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Jun 25, 2020
1 parent 77f45b5 commit 358d098
Show file tree
Hide file tree
Showing 6 changed files with 98 additions and 22 deletions.
10 changes: 6 additions & 4 deletions README.md
Expand Up @@ -3,7 +3,7 @@ Sentinel NPCs: Combat NPCs for Spigot!

![AnimatedSentinel](https://i.imgur.com/VDwTzrs.gif)

**Version 2.1.0**: Compatible with Spigot 1.8.8 through 1.15.2 (Primarily targeted at 1.15.2) - see info section below if on other supported versions)
**Version 2.1.5**: Compatible with Spigot 1.8.8 through 1.16.1 (Primarily targeted at 1.16.1) - see info section below if on other supported versions)

### Downloads

Expand Down Expand Up @@ -49,7 +49,7 @@ Created by mcmonkey4eva on behalf of the Citizens and Denizen teams.
- You may have a plugin or world setting blocking drops. If this is the case, the easiest solution is to just enable `workaround drops` in the config (Find your `Sentinel/config.yml` file, open it in a text editor, and change that value from `false` to `true`, then use `/sentinel reload`).
- **"My NPCs aren't taking/giving damage in no-PvP zones!"**
- If you're using WorldGuard for anti-PvP... update! WG 7.0.0 has patches to fix this issue! If you're using a different plugin or can't update, consider enabling the `workaround damage` (for melee damage issues) and/or `enforce damage` (for ranged damage issues) options in the config. You might also consider simply not putting combat NPCs in no-PvP regions (enable PvP in the region, or move them to dedicated combat areas).
- **"My NPC's aren't taking/giving damage but it's not a non-PvP zone!"**
- **"My NPC's aren't taking/giving damage but it's not a no-PvP zone!"**
- You likely have *some plugin* or world setting screwing with PvP or damage in general, even if you don't realize it. Find out which plugin and fix it through [Plugin Conflict Testing & Fixing](https://wiki.citizensnpcs.co/Plugin_Conflict). If you can't fix it, consider enabling the `workaround damage` (for melee damage issues) and/or `enforce damage` (for ranged damage issues) options in the config.
- Also: Note that back-support for older versions is sometimes limited. Compatibility is tested mainly on the most recent one or two versions. 1.8.8 servers are supported as the oldest option, but not fully functional. See notes here: https://wiki.citizensnpcs.co/Minecraft_1.8

Expand Down Expand Up @@ -216,7 +216,7 @@ These are all valid targets and ignores:
- `passive_mobs` are all mobs that generally don't attack players
- `mobs` are both passive and monsters
- `monsters` are all mobs likely to attack players
- Basic entities: PIGS, OCELOTS, COWS, RABBITS, SHEEP, CHICKENS, HORSES, MUSHROOM_COWS, IRON_GOLEMS, SQUIDS, VILLAGERS, WOLVES, SNOWMEN, WITCHES, GUARDIANS, SHULKERS, CREEPERS, SKELETONS, ZOMBIES, MAGMA_CUBES, ZOMBIE_PIGMEN, SILVERFISH, BATS, BLAZES, GHASTS, GIANTS, SLIMES, SPIDERS, CAVE_SPIDERS, ENDERMEN, ENDERMITES, WITHERS, ENDERDRAGONS
- Basic entities: PIGS, OCELOTS, COWS, RABBITS, SHEEP, CHICKENS, HORSES, MUSHROOM_COWS, IRON_GOLEMS, SQUIDS, VILLAGERS, WOLVES, SNOWMEN, WITCHES, GUARDIANS, SHULKERS, CREEPERS, SKELETONS, ZOMBIES, MAGMA_CUBES, SILVERFISH, BATS, BLAZES, GHASTS, GIANTS, SLIMES, SPIDERS, CAVE_SPIDERS, ENDERMEN, ENDERMITES, WITHERS, ENDERDRAGONS
- In 1.9 or higher: SHULKERS
- In 1.10 or higher: POLAR_BEARS
- In 1.11 or higher: VEXES, DONKEYS, LLAMAS, MULES, HUSKS, ELDER_GUARDIANS, EVOKERS, SKELETON_HORSES, STRAYS, ZOMBIE_VILLAGERS, ZOMBIE_HORSES, WITHER_SKELETONS, VINDICATORS
Expand All @@ -225,6 +225,8 @@ These are all valid targets and ignores:
- 1.13 or higher special targets: FISH
- In 1.14 or higher: PILLAGERS, RAVAGERS, CATS, PANDAS, TRADER_LLAMAS, WANDERING_TRADERS, FOXES
- In 1.15 or higher: BEES
- In 1.15 or LOWER: ZOMBIE_PIGMEN
- In 1.16 or higher: HOGLINS, PIGLINS, STRIDERS, ZOGLINS
- Also allowed: `player:NAME(REGEX)`, `npc:NAME(REGEX)`, `entityname:NAME(REGEX)`, `group:GROUPNAME(EXACT)`
- These work like `player:bob` to target player named 'bob', or `npc:.*\sGuard` to target NPCs named "Space Guard" or "Town Guard" or anything else (uses [RegEx](https://www.rexegg.com/regex-quickstart.html)]).
- Alo allowed: `helditem:ITEM_MATCHER`, `offhand:ITEM_MATCHER`, `equipped:ITEM_MATCHER`, `in_inventory:ITEM_MATCHER`
Expand Down Expand Up @@ -294,7 +296,7 @@ If you're building a separate plugin you would like to integrate into Sentinel,
<dependency>
<groupId>org.mcmonkey</groupId>
<artifactId>sentinel</artifactId>
<version>2.1.0-SNAPSHOT</version>
<version>2.1.5-SNAPSHOT</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Expand Up @@ -7,13 +7,13 @@
<groupId>org.mcmonkey</groupId>
<artifactId>sentinel</artifactId>
<packaging>jar</packaging>
<version>2.1.0-SNAPSHOT</version>
<version>2.1.5-SNAPSHOT</version>
<name>Sentinel</name>
<description>Combat NPCs for Spigot</description>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<craftbukkit.version>1.15.2-R0.1-SNAPSHOT</craftbukkit.version>
<craftbukkit.version>1.16.1-R0.1-SNAPSHOT</craftbukkit.version>
<citizens.version>2.0.26-SNAPSHOT</citizens.version>
<BUILD_NUMBER>Unknown</BUILD_NUMBER>
</properties>
Expand Down
Expand Up @@ -25,6 +25,7 @@ public boolean shouldLowerCaseValue() {
/**
* Gets the list of target prefixes that this integration handles.
* For a "squad:SQUAD_NAME" target, this should return: new String[] { "squad" }
* For integrations that don't have targets, return new String[0];
*/
public String[] getTargetPrefixes() {
return new String[0];
Expand Down
Expand Up @@ -16,6 +16,11 @@ public String getTargetHelp() {
return "";
}

@Override
public String[] getTargetPrefixes() {
return new String[0];
}

@Override
public boolean tryAttack(SentinelTrait st, LivingEntity ent) {
if (!(st.getLivingEntity() instanceof Player)) {
Expand Down
25 changes: 17 additions & 8 deletions src/main/java/org/mcmonkey/sentinel/targeting/SentinelTarget.java
Expand Up @@ -43,27 +43,26 @@ public class SentinelTarget {
IRON_GOLEMS = new SentinelTarget(new EntityType[]{EntityType.IRON_GOLEM}, "IRON_GOLEM", "IRONGOLEM"),
SQUIDS = new SentinelTarget(new EntityType[]{EntityType.SQUID}, "SQUID"),
VILLAGER = new SentinelTarget(new EntityType[]{EntityType.VILLAGER}, "VILLAGER"),
WOLF = new SentinelTarget(new EntityType[]{EntityType.WOLF}, "WOLF", "WOLVE"),
WOLVES = new SentinelTarget(new EntityType[]{EntityType.WOLF}, "WOLF", "WOLVE"),
SNOWMEN = new SentinelTarget(new EntityType[]{EntityType.SNOWMAN}, "SNOWMAN", "SNOWMEN"),
WITCH = new SentinelTarget(new EntityType[]{EntityType.WITCH}, "WITCH"),
WITCHES = new SentinelTarget(new EntityType[]{EntityType.WITCH}, "WITCH"),
GUARDIANS = new SentinelTarget(new EntityType[]{EntityType.GUARDIAN}, "GUARDIAN"),
CREERERS = new SentinelTarget(new EntityType[]{EntityType.CREEPER}, "CREEPER"),
SKELETONS = new SentinelTarget(new EntityType[]{EntityType.SKELETON}, "SKELETON"),
ZOMBIES = new SentinelTarget(new EntityType[]{EntityType.ZOMBIE}, "ZOMBIE"),
MAGMA_CUBES = new SentinelTarget(new EntityType[]{EntityType.MAGMA_CUBE}, "MAGMA_CUBE", "MAGMACUBE"),
ZOMBIE_PIGMEN = new SentinelTarget(new EntityType[]{EntityType.PIG_ZOMBIE}, "PIG_ZOMBIE", "PIGZOMBIE", "ZOMBIEPIGMAN", "ZOMBIEPIGMEN", "ZOMBIE_PIGMAN", "ZOMBIE_PIGMEN", "ZOMBIE_PIGMAN"),
SILVERFISH = new SentinelTarget(new EntityType[]{EntityType.SILVERFISH}, "SILVERFISH", "SILVER_FISH", "SILVERFISHE", "SILVER_FISHE"),
BATS = new SentinelTarget(new EntityType[]{EntityType.BAT}, "BAT"),
BLAZES = new SentinelTarget(new EntityType[]{EntityType.BLAZE}, "BLAZE"),
GHASTS = new SentinelTarget(new EntityType[]{EntityType.GHAST}, "GHAST"),
GIANTS = new SentinelTarget(new EntityType[]{EntityType.GIANT}, "GIANT"),
SLIME = new SentinelTarget(new EntityType[]{EntityType.SLIME}, "SLIME"),
SPIDER = new SentinelTarget(new EntityType[]{EntityType.SPIDER}, "SPIDER"),
SLIMES = new SentinelTarget(new EntityType[]{EntityType.SLIME}, "SLIME"),
SPIDERS = new SentinelTarget(new EntityType[]{EntityType.SPIDER}, "SPIDER"),
CAVE_SPIDERS = new SentinelTarget(new EntityType[]{EntityType.CAVE_SPIDER}, "CAVE_SPIDER", "CAVESPIDER"),
ENDERMEN = new SentinelTarget(new EntityType[]{EntityType.ENDERMAN}, "ENDERMAN", "ENDER_MAN", "ENDERMEN", "ENDER_MEN"),
ENDERMITES = new SentinelTarget(new EntityType[]{EntityType.ENDERMITE}, "ENDERMITE", "ENDER_MITE"),
WITHER = new SentinelTarget(new EntityType[]{EntityType.WITHER}, "WITHER"),
ENDERDRAGON = new SentinelTarget(new EntityType[]{EntityType.ENDER_DRAGON}, "ENDERDRAGON", "ENDER_DRAGON");
WITHERS = new SentinelTarget(new EntityType[]{EntityType.WITHER}, "WITHER"),
ENDERDRAGONS = new SentinelTarget(new EntityType[]{EntityType.ENDER_DRAGON}, "ENDERDRAGON", "ENDER_DRAGON");

/**
* Valid target types for 1.9 or higher.
Expand All @@ -89,7 +88,7 @@ public class SentinelTarget {
/**
* Valid target types for 1.13 or higher.
*/
public static SentinelTarget DOLPHIN, DROWNED, COD, SALMON, PUFFERFISH, TROPICAL_FISH, PHANTOM, TURTLE, FISH;
public static SentinelTarget DOLPHINS, DROWNED, COD, SALMON, PUFFERFISH, TROPICAL_FISH, PHANTOMS, TURTLES, FISH;

/**
* Valid target types for 1.14 or higher.
Expand All @@ -101,6 +100,16 @@ public class SentinelTarget {
*/
public static SentinelTarget BEES;

/**
* Valid target types for 1.15 or LOWER.
*/
public static SentinelTarget ZOMBIE_PIGMEN;

/**
* Valid target types for 1.16 or higher.
*/
public static SentinelTarget HOGLINS, PIGLINS, STRIDERS, ZOGLINS;

/**
* Multiple-entity-type targets.
*/
Expand Down
Expand Up @@ -47,12 +47,13 @@ public class SentinelVersionCompat {
/**
* Boolean indicating if the server version is >= the named version.
*/
public static final boolean v1_8, v1_9, v1_10, v1_11, v1_12, v1_13, v1_14, v1_15, vFuture;
public static final boolean v1_8, v1_9, v1_10, v1_11, v1_12, v1_13, v1_14, v1_15, v1_16, vFuture;

static {
String vers = Bukkit.getBukkitVersion(); // Returns in format like: 1.12.2-R0.1-SNAPSHOT
vFuture = vers.startsWith("1.16") || vers.startsWith("1.17") || vers.startsWith("1.18");
v1_15 = vers.startsWith("1.15") || vFuture;
vFuture = vers.startsWith("1.17") || vers.startsWith("1.18") || vers.startsWith("1.19");
v1_16 = vers.startsWith("1.16") || vFuture;
v1_15 = vers.startsWith("1.15") || v1_16;
v1_14 = vers.startsWith("1.14") || v1_15;
v1_13 = vers.startsWith("1.13") || v1_14;
v1_12 = vers.startsWith("1.12") || v1_13;
Expand Down Expand Up @@ -111,15 +112,15 @@ public class SentinelVersionCompat {
SentinelTarget.MONSTERS = new SentinelTarget(v1_12_monsters(), "MONSTER");
}
if (v1_13) {
SentinelTarget.DOLPHIN = new SentinelTarget(new EntityType[]{EntityType.DOLPHIN}, "DOLPHIN");
SentinelTarget.DOLPHINS = new SentinelTarget(new EntityType[]{EntityType.DOLPHIN}, "DOLPHIN");
SentinelTarget.DROWNED = new SentinelTarget(new EntityType[]{EntityType.DROWNED}, "DROWNED");
SentinelTarget.COD = new SentinelTarget(new EntityType[]{EntityType.COD}, "COD");
SentinelTarget.SALMON = new SentinelTarget(new EntityType[]{EntityType.SALMON}, "SALMON");
SentinelTarget.PUFFERFISH = new SentinelTarget(new EntityType[]{EntityType.PUFFERFISH}, "PUFFERFISH", "PUFFERFISHE");
SentinelTarget.TROPICAL_FISH = new SentinelTarget(new EntityType[]{EntityType.TROPICAL_FISH}, "TROPICAL_FISH", "TROPICALFISH", "TROPICAL_FISHE", "TROPICALFISHE");
SentinelTarget.FISH = new SentinelTarget(new EntityType[]{EntityType.TROPICAL_FISH, EntityType.PUFFERFISH, EntityType.SALMON, EntityType.COD}, "FISH", "FISHE");
SentinelTarget.PHANTOM = new SentinelTarget(new EntityType[]{EntityType.PHANTOM}, "PHANTOM");
SentinelTarget.TURTLE = new SentinelTarget(new EntityType[]{EntityType.TURTLE}, "TURTLE");
SentinelTarget.PHANTOMS = new SentinelTarget(new EntityType[]{EntityType.PHANTOM}, "PHANTOM");
SentinelTarget.TURTLES = new SentinelTarget(new EntityType[]{EntityType.TURTLE}, "TURTLE");
}
if (v1_13 && !v1_14) {
SentinelTarget.PASSIVE_MOBS = new SentinelTarget(v1_13_passive(), passiveNames());
Expand All @@ -144,13 +145,41 @@ public class SentinelVersionCompat {
if (v1_15) {
SentinelTarget.BEES = new SentinelTarget(new EntityType[]{EntityType.BEE}, "BEE");
}
if (v1_15) { // && !v1_16
if (v1_15 && !v1_16) {
SentinelTarget.PASSIVE_MOBS = new SentinelTarget(v1_14_passive(), passiveNames()); // no new passives in 1.15
SentinelTarget.MOBS = new SentinelTarget(combine(v1_14_passive(), v1_15_monsters()), "MOB");
SentinelTarget.MONSTERS = new SentinelTarget(v1_14_monsters(), "MONSTER");
}
if (!v1_16) {
SentinelTarget.ZOMBIE_PIGMEN = new SentinelTarget(new EntityType[]{EntityType.valueOf("PIG_ZOMBIE")}, "PIG_ZOMBIE", "PIGZOMBIE", "ZOMBIEPIGMAN", "ZOMBIEPIGMEN", "ZOMBIE_PIGMAN", "ZOMBIE_PIGMEN", "ZOMBIE_PIGMAN");
}
if (v1_16) {
SentinelTarget.HOGLINS = new SentinelTarget(new EntityType[]{EntityType.HOGLIN}, "HOGLIN");
SentinelTarget.PIGLINS = new SentinelTarget(new EntityType[]{EntityType.PIGLIN}, "PIGLIN");
SentinelTarget.STRIDERS = new SentinelTarget(new EntityType[]{EntityType.STRIDER}, "STRIDER");
SentinelTarget.ZOGLINS = new SentinelTarget(new EntityType[]{EntityType.ZOGLIN}, "ZOGLIN", "PIG_ZOMBIE", "PIGZOMBIE", "ZOMBIEPIGMAN", "ZOMBIEPIGMEN", "ZOMBIE_PIGMAN", "ZOMBIE_PIGMEN", "ZOMBIE_PIGMAN");
}
if (v1_16) { // && !v1_17
SentinelTarget.PASSIVE_MOBS = new SentinelTarget(v1_16_passive(), passiveNames());
SentinelTarget.MOBS = new SentinelTarget(combine(v1_16_passive(), v1_16_monsters()), "MOB");
SentinelTarget.MONSTERS = new SentinelTarget(v1_16_monsters(), "MONSTER");
}
// ========================== End Entities ==========================
// ========================== Begin Materials ==========================
if (v1_16) {
addAllMaterials(SWORD_MATERIALS, "NETHERITE_SWORD");
WEAPON_DAMAGE_MULTIPLIERS.put(getMaterial("NETHERITE_SWORD"), 8.0);
addAllMaterials(PICKAXE_MATERIALS, "NETHERITE_PICKAXE");
addAllMaterials(AXE_MATERIALS, "NETHERITE_AXE");
addAllMaterials(HELMET_MATERIALS, "NETHERITE_HELMET");
ARMOR_PROTECTION_MULTIPLIERS.put(getMaterial("NETHERITE_HELMET"), 0.12);
addAllMaterials(CHESTPLATE_MATERIALS, "NETHERITE_CHESTPLATE");
ARMOR_PROTECTION_MULTIPLIERS.put(getMaterial("NETHERITE_CHESTPLATE"), 0.32);
addAllMaterials(LEGGINGS_MATERIALS, "NETHERITE_LEGGINGS");
ARMOR_PROTECTION_MULTIPLIERS.put(getMaterial("NETHERITE_LEGGINGS"), 0.24);
addAllMaterials(BOOTS_MATERIALS, "NETHERITE_BOOTS");
ARMOR_PROTECTION_MULTIPLIERS.put(getMaterial("NETHERITE_BOOTS"), 0.12);
}
if (v1_13) {
// Sword
addAllMaterials(SWORD_MATERIALS, "DIAMOND_SWORD", "IRON_SWORD", "STONE_SWORD", "GOLDEN_SWORD", "WOODEN_SWORD");
Expand Down Expand Up @@ -370,9 +399,13 @@ static EntityType[] v1_14_passive() {
return combine(v1_13_passive(), EntityType.CAT, EntityType.PANDA, EntityType.TRADER_LLAMA, EntityType.WANDERING_TRADER, EntityType.FOX);
}

static EntityType[] v1_16_passive() {
return combine(v1_14_passive(), EntityType.STRIDER);
}

static EntityType[] v1_8_monsters() {
return new EntityType[]{EntityType.GUARDIAN, EntityType.CREEPER, EntityType.SKELETON, EntityType.ZOMBIE,
EntityType.MAGMA_CUBE, EntityType.PIG_ZOMBIE, EntityType.SILVERFISH, EntityType.BAT, EntityType.BLAZE,
EntityType.MAGMA_CUBE, EntityType.valueOf("PIG_ZOMBIE"), EntityType.SILVERFISH, EntityType.BAT, EntityType.BLAZE,
EntityType.GHAST, EntityType.GIANT, EntityType.SLIME, EntityType.SPIDER, EntityType.CAVE_SPIDER, EntityType.ENDERMAN,
EntityType.ENDERMITE, EntityType.WITHER, EntityType.ENDER_DRAGON, EntityType.WITCH};
}
Expand Down Expand Up @@ -403,6 +436,32 @@ static EntityType[] v1_15_monsters() {
return combine(v1_14_monsters(), EntityType.BEE);
}

static EntityType[] v1_16_monsters() {
return new EntityType[]{
// 1.8 minus PigZombie
EntityType.GUARDIAN, EntityType.CREEPER, EntityType.SKELETON, EntityType.ZOMBIE,
EntityType.MAGMA_CUBE, EntityType.SILVERFISH, EntityType.BAT, EntityType.BLAZE,
EntityType.GHAST, EntityType.GIANT, EntityType.SLIME, EntityType.SPIDER, EntityType.CAVE_SPIDER, EntityType.ENDERMAN,
EntityType.ENDERMITE, EntityType.WITHER, EntityType.ENDER_DRAGON, EntityType.WITCH,
// 1.9
EntityType.SHULKER,
// 1.11
EntityType.VEX, EntityType.HUSK, EntityType.ELDER_GUARDIAN,
EntityType.EVOKER, EntityType.STRAY, EntityType.ZOMBIE_VILLAGER,
EntityType.WITHER_SKELETON, EntityType.VINDICATOR,
// 1.12
EntityType.ILLUSIONER,
// 1.13
EntityType.DROWNED, EntityType.PHANTOM,
// 1.14
EntityType.RAVAGER, EntityType.PILLAGER,
// 1.15
EntityType.BEE,
// 1.16
EntityType.HOGLIN, EntityType.PIGLIN, EntityType.ZOGLIN,
};
}

/**
* Gets the Material instance for a name (multi-version support).
*/
Expand Down

0 comments on commit 358d098

Please sign in to comment.