Skip to content

Commit 172d05b

Browse files
committed
Add more configurability for bypassing nerfs, add height check
1 parent 717d081 commit 172d05b

26 files changed

Lines changed: 134 additions & 182 deletions

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>ADHDMC</groupId>
88
<artifactId>NerfFarms</artifactId>
9-
<version>0.3.1</version>
9+
<version>0.4.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>NerfFarms</name>
@@ -74,7 +74,7 @@
7474
<dependency>
7575
<groupId>io.papermc.paper</groupId>
7676
<artifactId>paper-api</artifactId>
77-
<version>1.19.2-R0.1-SNAPSHOT</version>
77+
<version>1.19.3-R0.1-SNAPSHOT</version>
7878
<scope>provided</scope>
7979
</dependency>
8080
<dependency>

src/main/java/adhdmc/nerffarms/NerfFarms.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package adhdmc.nerffarms;
22

33
import adhdmc.nerffarms.command.CommandHandler;
4-
import adhdmc.nerffarms.config.ConfigParser;
5-
import adhdmc.nerffarms.config.Defaults;
4+
import adhdmc.nerffarms.util.NFConfig;
5+
import adhdmc.nerffarms.util.Defaults;
66
import adhdmc.nerffarms.listener.ItemPickupListener;
77
import adhdmc.nerffarms.listener.damagehandling.DamageListener;
88
import adhdmc.nerffarms.listener.MobDeathListener;
@@ -16,7 +16,6 @@ public final class NerfFarms extends JavaPlugin {
1616
//TODO: Add config for a message that is sent to the player when the mob they kill is nerfed
1717
//TODO: Add a toggle command for that message
1818
//TODO: Add a config option for allowing non-player kills (checkDamager method in MobDamageListener)
19-
//TODO: Add configuration for max height diff between mob and attacker
2019
private static NerfFarms instance;
2120
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
2221

@@ -31,7 +30,7 @@ public void onEnable() {
3130
this.getServer().getPluginManager().disablePlugin(this);
3231
}
3332
Defaults.configDefaults();
34-
ConfigParser.validateConfig();
33+
NFConfig.validateConfig();
3534
CommandHandler.registerCommands();
3635
Metrics metrics = new Metrics(this, 16509);
3736
this.saveDefaultConfig();

src/main/java/adhdmc/nerffarms/command/ReloadCommand.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package adhdmc.nerffarms.command;
22

3-
import adhdmc.nerffarms.config.ConfigParser;
3+
import adhdmc.nerffarms.util.NFConfig;
44
import adhdmc.nerffarms.NerfFarms;
5-
import adhdmc.nerffarms.config.ModType;
5+
import adhdmc.nerffarms.util.ModType;
66
import adhdmc.nerffarms.util.NFMessage;
77
import adhdmc.nerffarms.util.NFPerm;
88
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
@@ -26,10 +26,10 @@ public void execute(CommandSender sender, String[] args) {
2626
if (!(sender instanceof Player) || sender.hasPermission(NFPerm.NF_RELOAD.getPerm())) {
2727
NerfFarms.getInstance().reloadConfig();
2828
NerfFarms.getInstance().saveConfig();
29-
ConfigParser.validateConfig();
29+
NFConfig.validateConfig();
3030
sender.sendRichMessage(NFMessage.PLUGIN_RELOADED.getMessage());
31-
if (ConfigParser.getErrorCount() > 0) {
32-
sender.sendMessage(NerfFarms.getMiniMessage().deserialize(NFMessage.PLUGIN_RELOADED_WITH_ERRORS.getMessage(), Placeholder.unparsed("errors", String.valueOf(ConfigParser.getErrorCount()))));
31+
if (NFConfig.getErrorCount() > 0) {
32+
sender.sendMessage(NerfFarms.getMiniMessage().deserialize(NFMessage.PLUGIN_RELOADED_WITH_ERRORS.getMessage(), Placeholder.unparsed("errors", String.valueOf(NFConfig.getErrorCount()))));
3333
}
3434
if (ModType.getModType() == ModType.NEITHER) {
3535
sender.sendRichMessage(NFMessage.PLUGIN_USELESS.getMessage());
Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package adhdmc.nerffarms.listener;
22

3-
import adhdmc.nerffarms.config.ConfigParser;
4-
import adhdmc.nerffarms.config.ConfigToggle;
3+
import adhdmc.nerffarms.util.NFConfig;
54
import adhdmc.nerffarms.util.NFKey;
65
import adhdmc.nerffarms.util.Util;
76
import org.bukkit.NamespacedKey;
8-
import org.bukkit.entity.Entity;
97
import org.bukkit.entity.EntityType;
10-
import org.bukkit.entity.Mob;
118
import org.bukkit.event.EventHandler;
129
import org.bukkit.event.EventPriority;
1310
import org.bukkit.event.Listener;
@@ -21,20 +18,12 @@
2118

2219
public class ItemPickupListener implements Listener {
2320
private final NamespacedKey pickedUp = NFKey.PICKED_UP_ITEM.getKey();
24-
HashSet<EntityType> pickupBlacklist = ConfigParser.getBlacklistedPickupMobs();
21+
HashSet<EntityType> pickupBlacklist = NFConfig.getBlacklistedPickupMobs();
2522

2623
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
2724
public void onItemPickup(EntityPickupItemEvent pickupEvent) {
28-
byte t = 1;
29-
if (!(pickupBlacklist.contains(pickupEvent.getEntityType()))) return;
30-
pickupEvent.setCancelled(true);
31-
/*ItemStack item = pickupEvent.getItem().getItemStack();
32-
ItemMeta meta = item.getItemMeta();
33-
PersistentDataContainer itemPDC = meta.getPersistentDataContainer();
34-
itemPDC.set(pickedUp, PersistentDataType.BYTE, t);
35-
item.setItemMeta(meta);
36-
pickupEvent.getItem().setItemStack(item);
37-
Util.debugLvl3("Item meta, item picked up: " + pickupEvent.getItem().getItemStack().getItemMeta().getPersistentDataContainer().get(pickedUp, PersistentDataType.BYTE));
38-
*/
25+
if (pickupBlacklist.contains(pickupEvent.getEntityType())) {
26+
pickupEvent.setCancelled(true);
27+
}
3928
}
4029
}
Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,51 @@
11
package adhdmc.nerffarms.listener;
22

33

4-
import adhdmc.nerffarms.config.ConfigToggle;
5-
import adhdmc.nerffarms.config.ModType;
6-
import adhdmc.nerffarms.util.NFKey;
7-
import adhdmc.nerffarms.util.Util;
4+
import adhdmc.nerffarms.util.*;
85
import org.bukkit.NamespacedKey;
6+
import org.bukkit.configuration.file.FileConfiguration;
97
import org.bukkit.entity.Entity;
8+
import org.bukkit.entity.LivingEntity;
109
import org.bukkit.event.EventHandler;
1110
import org.bukkit.event.EventPriority;
1211
import org.bukkit.event.Listener;
1312
import org.bukkit.event.entity.EntityDeathEvent;
14-
import org.bukkit.inventory.ItemStack;
15-
import org.bukkit.inventory.meta.ItemMeta;
1613
import org.bukkit.persistence.PersistentDataContainer;
17-
import org.bukkit.persistence.PersistentDataType;
18-
19-
import java.util.ArrayList;
20-
import java.util.List;
14+
import org.bukkit.potion.PotionEffectType;
2115

2216
public class MobDeathListener implements Listener {
2317
private final NamespacedKey nerfMob = NFKey.NERF_MOB.getKey();
2418
private final NamespacedKey pickedUp = NFKey.PICKED_UP_ITEM.getKey();
2519

2620
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
2721
public void onMobDeath(EntityDeathEvent deathEvent) {
28-
Entity deadMob = deathEvent.getEntity();
22+
LivingEntity deadMob = deathEvent.getEntity();
2923
PersistentDataContainer mobPDC = deadMob.getPersistentDataContainer();
24+
if ((deadMob.customName() != null) && NFToggles.WHITELIST_NAMED.isEnabled()) {
25+
Util.debugLvl2("Mob is named, and named mobs have been whitelisted. Returning without nerfing, regardless of nerf status");
26+
return;
27+
}
28+
if (deadMob.isInsideVehicle() && NFToggles.WHITELIST_VEHICLES.isEnabled()) {
29+
Util.debugLvl2("Mob is in a vehicle and mobs in vehicles are whitelisted. Returning without nerfing, regardlist of nerf status");
30+
return;
31+
}
32+
if (deadMob.hasPotionEffect(PotionEffectType.WEAKNESS) && NFToggles.WHITELIST_WEAKNESS.isEnabled()) {
33+
Util.debugLvl2("Mob has weakness and mobs with weakness are whitelisted. Returning without nerfing regardless of nerf status");
34+
return;
35+
}
36+
if (deadMob.isLeashed() && NFToggles.WHITELIST_LEASHED.isEnabled()) {
37+
Util.debugLvl2("Mob is leashed and leashed mobs are whitelisted. Returning without nerfing regardless of nerf status");
38+
return;
39+
}
40+
if (deadMob.getKiller() != null && deadMob.getKiller().hasPermission(NFPerm.NF_BYPASS.getPerm())) {
41+
Util.debugLvl2("Player has bypass permission, and so mobs will not be nerfed. Returning without nerfing regardless of nerf status");
42+
return;
43+
}
3044
if (mobPDC.has(nerfMob)) {
3145
Util.debugLvl3("Running clearDrops");
3246
clearDrops(deathEvent);
3347
}
48+
3449
}
3550

3651
private void clearDrops(EntityDeathEvent deathEvent) {
@@ -41,33 +56,7 @@ private void clearDrops(EntityDeathEvent deathEvent) {
4156
}
4257
if (configMod == ModType.DROPS || configMod == ModType.BOTH) {
4358
Util.debugLvl3("configMod Setting clears Drops.");
44-
if (ConfigToggle.DROP_PLAYER_ITEMS.isEnabled()) {
45-
dropPlayerItems(deathEvent);
46-
} else {
47-
deathEvent.getDrops().clear();
48-
}
49-
}
50-
}
51-
52-
private void dropPlayerItems(EntityDeathEvent deathEvent) {
53-
List<ItemStack> drops = deathEvent.getDrops();
54-
List<ItemStack> pickedUpItems = new ArrayList<>();
55-
for (ItemStack item : drops) {
56-
Util.debugLvl3("Item in inventory: " + item.toString());
57-
ItemMeta itemMeta = item.getItemMeta();
58-
PersistentDataContainer itemPDC = itemMeta.getPersistentDataContainer();
59-
Util.debugLvl3("ItemPDC output: " + itemPDC.get(pickedUp, PersistentDataType.BYTE)
60-
+ "\nKeys: " + itemPDC.getKeys());
61-
if (itemPDC.get(pickedUp, PersistentDataType.BYTE) != null) {
62-
pickedUpItems.add(item);
63-
Util.debugLvl3("Adding item to items that should drop.");
64-
}
65-
}
66-
deathEvent.getDrops().clear();
67-
Util.debugLvl3("Clearing normal drops");
68-
for (ItemStack item : pickedUpItems) {
69-
Util.debugLvl3("Adding " + item.toString() + " to drops");
70-
deathEvent.getDrops().add(item);
59+
deathEvent.getDrops().clear();
7160
}
7261
}
7362
}

src/main/java/adhdmc/nerffarms/listener/damagehandling/bypasschecks/IsBlacklistedMob.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package adhdmc.nerffarms.listener.damagehandling.bypasschecks;
22

3-
import adhdmc.nerffarms.config.ConfigParser;
3+
import adhdmc.nerffarms.util.NFConfig;
44
import adhdmc.nerffarms.listener.damagehandling.DamageListener;
55
import adhdmc.nerffarms.util.Util;
66
import org.bukkit.NamespacedKey;
@@ -16,7 +16,7 @@ public class IsBlacklistedMob {
1616
*/
1717
public static boolean isBlacklistedMob(NamespacedKey nerfMob, Entity entity) {
1818
Util.debugLvl1("Performing isWhitelistedMob on " + entity.getName());
19-
if (ConfigParser.getBlacklistedMobList().contains(entity.getType())) {
19+
if (NFConfig.getBlacklistedMobList().contains(entity.getType())) {
2020
entity.getPersistentDataContainer().set(nerfMob, PersistentDataType.BYTE, DamageListener.t);
2121
Util.debugLvl2("Nerfing " + entity.getName() + " Because they are on the blacklisted mob types as "
2222
+ entity.getType() + ". Nerfing and returning true");

src/main/java/adhdmc/nerffarms/listener/damagehandling/bypasschecks/IsBlacklistedSpawnReason.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package adhdmc.nerffarms.listener.damagehandling.bypasschecks;
22

3-
import adhdmc.nerffarms.config.ConfigParser;
3+
import adhdmc.nerffarms.util.NFConfig;
44
import adhdmc.nerffarms.listener.damagehandling.DamageListener;
55
import adhdmc.nerffarms.util.Util;
66
import org.bukkit.NamespacedKey;
@@ -16,7 +16,7 @@ public class IsBlacklistedSpawnReason {
1616
*/
1717
public static boolean isBlacklistedSpawnReason(NamespacedKey nerfMob, Entity entity) {
1818
Util.debugLvl1("Performing isBlacklistedSpawnReason on " + entity.getName());
19-
if (ConfigParser.getBlacklistedSpawnReasonList().contains(entity.getEntitySpawnReason())) {
19+
if (NFConfig.getBlacklistedSpawnReasonList().contains(entity.getEntitySpawnReason())) {
2020
entity.getPersistentDataContainer().set(nerfMob, PersistentDataType.BYTE, DamageListener.t);
2121
Util.debugLvl2("Nerfing " + entity.getName() + " because they spawned with the spawn reason "
2222
+ entity.getEntitySpawnReason() + " which is blacklisted. Setting mob as nerfed. Returning true");

src/main/java/adhdmc/nerffarms/listener/damagehandling/bypasschecks/IsHostileCheck.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package adhdmc.nerffarms.listener.damagehandling.bypasschecks;
22

3-
import adhdmc.nerffarms.config.ConfigToggle;
3+
import adhdmc.nerffarms.util.NFToggles;
44
import adhdmc.nerffarms.util.Util;
55
import org.bukkit.entity.Entity;
66
import org.bukkit.entity.Monster;
@@ -14,7 +14,7 @@ public class IsHostileCheck {
1414
*/
1515
public static boolean checkHostile(Entity entity) {
1616
Util.debugLvl1("Performing isHostileNerf on " + entity.getName());
17-
if (ConfigToggle.ONLY_NERF_HOSTILES.isEnabled() && !(entity instanceof Monster)) {
17+
if (NFToggles.ONLY_NERF_HOSTILES.isEnabled() && !(entity instanceof Monster)) {
1818
Util.debugLvl2("Ignoring onMobDamage because " + entity.getName() + " is not a Monster and Nerf Hostiles Only is True. Returning false");
1919
return false;
2020
}

src/main/java/adhdmc/nerffarms/listener/damagehandling/bypasschecks/IsWhitelistedMob.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package adhdmc.nerffarms.listener.damagehandling.bypasschecks;
22

3-
import adhdmc.nerffarms.config.ConfigParser;
3+
import adhdmc.nerffarms.util.NFConfig;
44
import adhdmc.nerffarms.listener.damagehandling.DamageListener;
55
import adhdmc.nerffarms.util.Util;
66
import org.bukkit.NamespacedKey;
@@ -18,7 +18,7 @@ public class IsWhitelistedMob {
1818
*/
1919
public static boolean isWhitelistedMob(Entity entity, PersistentDataContainer mobPDC, NamespacedKey bypass) {
2020
Util.debugLvl1("Performing isWhitelistedMob on " + entity.getName());
21-
if (ConfigParser.getWhitelistedMobList().contains(entity.getType())) {
21+
if (NFConfig.getWhitelistedMobList().contains(entity.getType())) {
2222
Util.debugLvl2("Ignoring onMobDamage because " + entity.getName() + " is on the Whitelisted Mob list as "
2323
+ entity.getType() + ". Setting mob to bypass future checks. Returning true");
2424
mobPDC.set(bypass, PersistentDataType.BYTE, DamageListener.t);

src/main/java/adhdmc/nerffarms/listener/damagehandling/bypasschecks/IsWhitelistedSpawnReasonCheck.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package adhdmc.nerffarms.listener.damagehandling.bypasschecks;
22

3-
import adhdmc.nerffarms.config.ConfigParser;
3+
import adhdmc.nerffarms.util.NFConfig;
44
import adhdmc.nerffarms.listener.damagehandling.DamageListener;
55
import adhdmc.nerffarms.util.Util;
66
import org.bukkit.NamespacedKey;
@@ -18,7 +18,7 @@ public class IsWhitelistedSpawnReasonCheck {
1818
*/
1919
public static boolean isWhitelistedSpawnReason(PersistentDataContainer mobPDC, Entity entity, NamespacedKey bypass) {
2020
Util.debugLvl1("Performing isWhitelistedSpawnReason on " + entity.getName());
21-
if (ConfigParser.getWhitelistedSpawnReasonList().contains(entity.getEntitySpawnReason())) {
21+
if (NFConfig.getWhitelistedSpawnReasonList().contains(entity.getEntitySpawnReason())) {
2222
Util.debugLvl2("Ignoring onMobDamage because " + entity.getName() + " spawned from "
2323
+ entity.getEntitySpawnReason() + " which is whitelisted. Marking to skip future checks and returning true");
2424
mobPDC.set(bypass, PersistentDataType.BYTE, DamageListener.t);

0 commit comments

Comments
 (0)