From 4c40a255a99118b4dc97f096d55b790a23eeb235 Mon Sep 17 00:00:00 2001
From: lijinhong11 <tygfhk@outlook.com>
Date: Fri, 19 Jul 2024 09:42:35 +0800
Subject: [PATCH] 1.1

---
 pom.xml                                       |  2 +-
 .../me/mmmjjkx/bbox/moreflags/FlagNames.java  |  1 +
 .../bbox/moreflags/MoreFlagsAddon.java        |  9 +++---
 .../bbox/moreflags/config/FlagSet.java        | 18 +++++++----
 .../moreflags/config/FlagSetSerializer.java   | 13 ++++++--
 .../bbox/moreflags/config/Settings.java       | 15 ++++++----
 .../moreflags/listener/EntityListener.java    | 13 ++++++++
 src/main/resources/addon.yml                  |  2 +-
 src/main/resources/config.yml                 | 30 ++++++++++++-------
 src/main/resources/locales/en-US.yml          |  5 +++-
 src/main/resources/locales/zh-CN.yml          |  5 +++-
 src/main/resources/locales/zh-HK.yml          |  5 +++-
 12 files changed, 85 insertions(+), 33 deletions(-)

diff --git a/pom.xml b/pom.xml
index d8d7a5d..b624ea6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
   <groupId>me.mmmjjkx.bbox</groupId>
   <artifactId>MoreFlags</artifactId>
-  <version>1.0.2</version>
+  <version>1.1</version>
   <packaging>jar</packaging>
 
   <name>MoreFlags</name>
diff --git a/src/main/java/me/mmmjjkx/bbox/moreflags/FlagNames.java b/src/main/java/me/mmmjjkx/bbox/moreflags/FlagNames.java
index 4a924a3..39874fa 100644
--- a/src/main/java/me/mmmjjkx/bbox/moreflags/FlagNames.java
+++ b/src/main/java/me/mmmjjkx/bbox/moreflags/FlagNames.java
@@ -4,4 +4,5 @@ public class FlagNames {
     public static final String CREEPER_EXPLOSION = "creeper_explosion";
     public static final String WITHER_EXPLOSION = "wither_explosion";
     public static final String PHANTOM_SPAWNING = "phantom_spawning";
+    public static final String WITCH_POTION_THROWING = "witch_potion_throwing";
 }
diff --git a/src/main/java/me/mmmjjkx/bbox/moreflags/MoreFlagsAddon.java b/src/main/java/me/mmmjjkx/bbox/moreflags/MoreFlagsAddon.java
index c7bb75b..1228474 100644
--- a/src/main/java/me/mmmjjkx/bbox/moreflags/MoreFlagsAddon.java
+++ b/src/main/java/me/mmmjjkx/bbox/moreflags/MoreFlagsAddon.java
@@ -17,11 +17,11 @@ public class MoreFlagsAddon extends Addon {
     @Override
     public void onEnable() {
         saveDefaultConfig();
+        saveConfig();
 
         settings = new Config<>(this, Settings.class).loadConfigObject();
 
-        Settings save = new Settings();
-        new Config<>(this, Settings.class).saveConfigObject(save);
+        new Config<>(this, Settings.class).saveConfigObject(settings);
 
         EntityListener entityListener = new EntityListener(settings);
 
@@ -32,6 +32,7 @@ private void registerFlags(EntityListener entityListener) {
         registerFlagSet(FlagNames.CREEPER_EXPLOSION, Material.CREEPER_HEAD, settings.getCreeperExplosions(), entityListener);
         registerFlagSet(FlagNames.WITHER_EXPLOSION, Material.WITHER_SKELETON_SKULL, settings.getWitherExplosions(), entityListener);
         registerFlagSet(FlagNames.PHANTOM_SPAWNING, Material.PHANTOM_SPAWN_EGG, settings.getPhantomSpawning(), entityListener);
+        registerFlagSet(FlagNames.WITCH_POTION_THROWING, Material.SPLASH_POTION, settings.getWitchPotionThrowing(), entityListener);
     }
 
     @Override
@@ -41,8 +42,7 @@ public void onReload() {
 
         settings = new Config<>(this, Settings.class).loadConfigObject();
 
-        Settings save = new Settings();
-        new Config<>(this, Settings.class).saveConfigObject(save);
+        new Config<>(this, Settings.class).saveConfigObject(settings);
     }
 
     @Override
@@ -57,6 +57,7 @@ private void registerFlagSet(String id, Material icon, FlagSet flagSet, Listener
                     .listener(listener)
                     .type(Flag.Type.SETTING)
                     .cooldown(flagSet.getChangeCooldown())
+                    .defaultSetting(flagSet.getDefaultValue())
                     .build();
             registerFlag(flag);
         }
diff --git a/src/main/java/me/mmmjjkx/bbox/moreflags/config/FlagSet.java b/src/main/java/me/mmmjjkx/bbox/moreflags/config/FlagSet.java
index aeec4e1..25c3238 100644
--- a/src/main/java/me/mmmjjkx/bbox/moreflags/config/FlagSet.java
+++ b/src/main/java/me/mmmjjkx/bbox/moreflags/config/FlagSet.java
@@ -2,16 +2,22 @@
 
 import lombok.Getter;
 import lombok.Setter;
-import world.bentobox.bentobox.api.configuration.ConfigEntry;
 
-@Getter
 @Setter
 public class FlagSet {
     public FlagSet() {
+        enabled = true;
+        changeCooldown = 0;
+        defaultValue = true;
     }
 
-    @ConfigEntry(path = "enabled")
-    private boolean enabled = true;
-    @ConfigEntry(path = "change-cooldown")
-    private int changeCooldown = 0;
+    @Getter
+    private boolean enabled;
+    private boolean defaultValue;
+    @Getter
+    private int changeCooldown;
+
+    public boolean getDefaultValue() {
+        return defaultValue;
+    }
 }
diff --git a/src/main/java/me/mmmjjkx/bbox/moreflags/config/FlagSetSerializer.java b/src/main/java/me/mmmjjkx/bbox/moreflags/config/FlagSetSerializer.java
index 8f875c0..411fba5 100644
--- a/src/main/java/me/mmmjjkx/bbox/moreflags/config/FlagSetSerializer.java
+++ b/src/main/java/me/mmmjjkx/bbox/moreflags/config/FlagSetSerializer.java
@@ -14,8 +14,14 @@ public FlagSetSerializer() {
     public FlagSet deserialize(Object o) {
         FlagSet flagSet = new FlagSet();
         if (o instanceof MemorySection ms) {
-            flagSet.setEnabled(ms.getBoolean("enabled"));
-            flagSet.setChangeCooldown(ms.getInt("change-cooldown"));
+            flagSet.setEnabled(ms.getBoolean("enabled", true));
+            flagSet.setChangeCooldown(ms.getInt("change-cooldown", 0));
+            flagSet.setDefaultValue(ms.getBoolean("default-value", true));
+        } else if (o instanceof Map<?, ?> m) {
+            Map<String, Object> map = (Map<String, Object>) m;
+            flagSet.setEnabled((boolean) map.getOrDefault("enabled", true));
+            flagSet.setChangeCooldown((int) map.getOrDefault("change-cooldown", 0));
+            flagSet.setDefaultValue((boolean) map.getOrDefault("default-value", true));
         }
         return flagSet;
     }
@@ -25,7 +31,8 @@ public Map<String, Object> serialize(Object o) {
         if (o instanceof FlagSet fs) {
             boolean enabled = fs.isEnabled();
             int changeCooldown = fs.getChangeCooldown();
-            return Map.of("enabled", enabled, "change-cooldown", changeCooldown);
+            boolean defaultValue = fs.getDefaultValue();
+            return Map.of("enabled", enabled, "change-cooldown", changeCooldown, "default-value", defaultValue);
         } else {
             return null;
         }
diff --git a/src/main/java/me/mmmjjkx/bbox/moreflags/config/Settings.java b/src/main/java/me/mmmjjkx/bbox/moreflags/config/Settings.java
index 06cb5fb..25865d3 100644
--- a/src/main/java/me/mmmjjkx/bbox/moreflags/config/Settings.java
+++ b/src/main/java/me/mmmjjkx/bbox/moreflags/config/Settings.java
@@ -5,22 +5,27 @@
 import world.bentobox.bentobox.api.configuration.*;
 import world.bentobox.bentobox.database.objects.adapters.Adapter;
 
-@StoreAt(filename = "config.yml", path = "flags")
+@StoreAt(filename = "config.yml", path = "addons/MoreFlags")
 @Getter
 @Setter
 public class Settings implements ConfigObject {
     @ConfigEntry(path = "creeper_explosion")
     @ConfigComment("It can control creeper explosions.")
     @Adapter(FlagSetSerializer.class)
-    private FlagSet creeperExplosions = new FlagSet();
+    private FlagSet creeperExplosions;
 
-    @ConfigEntry(path = ".wither_explosion")
+    @ConfigEntry(path = "wither_explosion")
     @ConfigComment("It can control wither explosions.")
     @Adapter(FlagSetSerializer.class)
-    private FlagSet witherExplosions = new FlagSet();
+    private FlagSet witherExplosions;
 
     @ConfigEntry(path = "phantom_spawning")
     @ConfigComment("It can control phantom spawning.")
     @Adapter(FlagSetSerializer.class)
-    private FlagSet phantomSpawning = new FlagSet();
+    private FlagSet phantomSpawning;
+
+    @ConfigEntry(path = "witch_potion_throwing", since = "1.1")
+    @ConfigComment("It can control witch potion throwing.")
+    @Adapter(FlagSetSerializer.class)
+    private FlagSet witchPotionThrowing;
 }
\ No newline at end of file
diff --git a/src/main/java/me/mmmjjkx/bbox/moreflags/listener/EntityListener.java b/src/main/java/me/mmmjjkx/bbox/moreflags/listener/EntityListener.java
index 79c95b3..623bf76 100644
--- a/src/main/java/me/mmmjjkx/bbox/moreflags/listener/EntityListener.java
+++ b/src/main/java/me/mmmjjkx/bbox/moreflags/listener/EntityListener.java
@@ -5,10 +5,13 @@
 import me.mmmjjkx.bbox.moreflags.config.Settings;
 import org.bukkit.entity.Entity;
 import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Witch;
 import org.bukkit.event.EventHandler;
 import org.bukkit.event.Listener;
 import org.bukkit.event.entity.EntityExplodeEvent;
 import org.bukkit.event.entity.EntitySpawnEvent;
+import org.bukkit.event.entity.PotionSplashEvent;
+import org.bukkit.projectiles.ProjectileSource;
 import world.bentobox.bentobox.BentoBox;
 import world.bentobox.bentobox.api.flags.Flag;
 import world.bentobox.bentobox.database.objects.Island;
@@ -54,6 +57,16 @@ public void spawn(EntitySpawnEvent e) {
         }
     }
 
+    @EventHandler
+    public void potionDrop(PotionSplashEvent e) {
+        ProjectileSource source = e.getPotion().getShooter();
+        if (source instanceof Witch witch) {
+            if (settings.getWitchPotionThrowing().isEnabled() && !inIsland(witch, FlagNames.WITCH_POTION_THROWING, true)) {
+                e.setCancelled(true);
+            }
+        }
+    }
+
     private boolean inIsland(Entity en, String id, boolean destExpression) {
         IslandsManager im = BentoBox.getInstance().getIslands();
         Optional<Island> island = im.getIslandAt(en.getLocation());
diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml
index 7bb469e..e71d28b 100644
--- a/src/main/resources/addon.yml
+++ b/src/main/resources/addon.yml
@@ -1,6 +1,6 @@
 name: MoreFlags
 main: me.mmmjjkx.bbox.moreflags.MoreFlagsAddon
-version: 1.0.0
+version: "${project.version}"
 api-version: 1.16.4
 authors: mmmjjkx
 description: Adds more flags to the game mode addon.
\ No newline at end of file
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 6b1bd6e..c15b2b2 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -1,10 +1,20 @@
-flags:
-  creeper_explosion:
-    enabled: true
-    change-cooldown: 0
-  wither_explosion:
-    enabled: true
-    change-cooldown: 0
-  phantom_spawning:
-    enabled: true
-    change-cooldown: 0
\ No newline at end of file
+#It can control creeper explosions.
+creeper_explosion:
+  enabled: true
+  change-cooldown: 0
+  default-value: true
+#It can control wither explosions.
+wither_explosion:
+  enabled: true
+  change-cooldown: 0
+  default-value: true
+#It can control phantom spawning.
+phantom_spawning:
+  enabled: true
+  change-cooldown: 0
+  default-value: true
+#It can control witch potion throwing.
+witch_potion_throwing:
+  enabled: true
+  change-cooldown: 0
+  default-value: true
\ No newline at end of file
diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml
index e47b959..3aa05ac 100644
--- a/src/main/resources/locales/en-US.yml
+++ b/src/main/resources/locales/en-US.yml
@@ -8,4 +8,7 @@ protection:
       description: "&aAllow &7/ &c Prevent &awither explosions destroying blocks"
     phantom_spawning:
       name: Phantom spawning
-      description: "&aAllow &7/ &c Prevent &aphantoms spawning"
\ No newline at end of file
+      description: "&aAllow &7/ &c Prevent &aphantoms spawning"
+    witch_potion_throwing:
+      name: Witch potion throwing
+      description: "&aAllow &7/ &c Prevent &awitches throwing potions"
\ No newline at end of file
diff --git a/src/main/resources/locales/zh-CN.yml b/src/main/resources/locales/zh-CN.yml
index b159a20..13431ef 100644
--- a/src/main/resources/locales/zh-CN.yml
+++ b/src/main/resources/locales/zh-CN.yml
@@ -8,4 +8,7 @@ protection:
       description: "&a允许&7/&c禁止 &a凋零爆炸破坏方块"
     phantom_spawning:
       name: 幻翼生成
-      description: "&a允许&7/&c禁止 &a幻翼生成"
\ No newline at end of file
+      description: "&a允许&7/&c禁止 &a幻翼生成"
+    witch_potion_throwing:
+      name: 女巫药水投掷
+      description: "&a允许&7/&c禁止 &a女巫药水投掷"
\ No newline at end of file
diff --git a/src/main/resources/locales/zh-HK.yml b/src/main/resources/locales/zh-HK.yml
index b159a20..13431ef 100644
--- a/src/main/resources/locales/zh-HK.yml
+++ b/src/main/resources/locales/zh-HK.yml
@@ -8,4 +8,7 @@ protection:
       description: "&a允许&7/&c禁止 &a凋零爆炸破坏方块"
     phantom_spawning:
       name: 幻翼生成
-      description: "&a允许&7/&c禁止 &a幻翼生成"
\ No newline at end of file
+      description: "&a允许&7/&c禁止 &a幻翼生成"
+    witch_potion_throwing:
+      name: 女巫药水投掷
+      description: "&a允许&7/&c禁止 &a女巫药水投掷"
\ No newline at end of file