diff --git a/build.gradle.kts b/build.gradle.kts index 69a87af..018e405 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "me.ghosty" -version = "1.1.2" +version = "1.2.0" repositories { mavenCentral() diff --git a/configs/english.yml b/configs/english.yml index 60f05b4..b482ee9 100644 --- a/configs/english.yml +++ b/configs/english.yml @@ -66,8 +66,8 @@ ritual: # The content of the 2 pages to perform the different pacts # %command1% = Bloody Pact, %command2% = Forgotten Pact pages: - - "Bloody Pact

This pact allows you to increase your life by 5 hearts, but your next death will cost you 3 heads...
Will you accept it?

[Accept the Pact]" - - "Forgotten Pact

This pact allows you to leave no head behind you when you die, however for the rest of this life you will be weaker
Will you accept it?

[Accept the Pact]" + - "Bloody Pact

This pact allows you to increase your life by 5 hearts, but your next death will cost you 3 heads...
Will you accept it?

Click to accept this pact\">[Accept the Pact]" + - "Forgotten Pact

This pact allows you to leave no head behind you when you die, however for the rest of this life you will be weaker
Will you accept it?

Click to accept this pact\">[Accept the Pact]" pactes: bloody: # Bloody Pact HP Boost @@ -100,7 +100,7 @@ ritual: size: 1 # The percentage chance of having a lava particle lava-chance: 5 - # If the lava particles should do a sound at the send + # If the lava particles should make a sound when dropping lava-sound: false # The minimum & maximum time to start a ritual # Example: 0 & 12000 will prevent it during the night @@ -108,6 +108,21 @@ ritual: min-time: 0 max-time: 24000 + # The settings of the animation when the pact is accepted + accepted: + # The radius of the lava sphere + lava-radius: 1.5 + # The count of lava particles + lava-particles: 300 + # If the lava particles should make a sound when dropping + lava-sound: false + # The count of flame particles + flame-particles: 500 + # The speed/distance made by the flame particles + flame-speed: 0.5 + # If the particles should be blue + flame-soul: true + # Information: # There is no way to block the mace from being put into the enderchest (yet?) diff --git a/configs/french.yml b/configs/french.yml index f9f9709..ef45d0e 100644 --- a/configs/french.yml +++ b/configs/french.yml @@ -71,8 +71,8 @@ ritual: # Le contenu des 2 pages pour effectuer les différents pactes # %command1% = Pacte Ensanglanté, %command2% = Pacte Oublié pages: - - "Pacte Ensanglanté

Ce pacte te permet d'augmenter ta vie de 5 coeurs t'est proposé, mais ta prochaine mort te coûtera 3 têtes...
Vas-tu l'accepter ?

[Accepter le Pacte]" - - "Pacte Oublié

Ce pacte te permet de ne pas laisser de tête derrière toi à ta mort, cependant durant le restant de cette vie tu seras plus faible
Vas-tu l'accepter ?

[Accepter le Pacte]" + - "Pacte Ensanglanté

Ce pacte te permet d'augmenter ta vie de 5 coeurs t'est proposé, mais ta prochaine mort te coûtera 3 têtes...
Vas-tu l'accepter ?

Clique pour accepter ce pacte\">[Accepter le Pacte]" + - "Pacte Oublié

Ce pacte te permet de ne pas laisser de tête derrière toi à ta mort, cependant durant le restant de cette vie tu seras plus faible
Vas-tu l'accepter ?

Clique pour accepter ce pacte\">[Accepter le Pacte]" pactes: bloody: # Le boost de pv du Pacte Ensanglanté @@ -105,7 +105,7 @@ ritual: size: 1 # Le pourcentage de chance d'avoir une particule de lave lava-chance: 5 - # Si les particules de lave produisent du son à la fin + # Si les particules de lave produisent du son quand elles tombent lava-sound: false # Les temps dans le monde minimum & maximum pour lancer le rituel # Exemple: 0 & 12000 empêchera de lancer le rituel la nuit @@ -113,6 +113,21 @@ ritual: min-time: 0 max-time: 24000 + # Les paramètres de l'animation quand le pacte est accepté + accepted: + # Le rayon de la sphère de lave + lava-radius: 1.5 + # Le nombre de particules de lave + lava-particles: 300 + # Si les particules de lave produisent du son quand elles tombent + lava-sound: false + # Le nombre de particules de flamme + flame-particles: 500 + # La vitesse/distance parcourue des particules de flamme + flame-speed: 0.5 + # Si les particules de flamme doivent être bleues + flame-soul: true + # Information: # Il n'y a pas de moyen de bloquer la mise de la mace dans l'enderchest (pour le moment?) diff --git a/src/main/java/me/ghosty/kamoof/commands/KamoofCMD.java b/src/main/java/me/ghosty/kamoof/commands/KamoofCMD.java index 04b1bc5..0489a7d 100644 --- a/src/main/java/me/ghosty/kamoof/commands/KamoofCMD.java +++ b/src/main/java/me/ghosty/kamoof/commands/KamoofCMD.java @@ -77,7 +77,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } case "book": { - player.getInventory().addItem(RitualBook.getBook(RitualHandler.addNewUUID())); + player.getWorld().dropItemNaturally(player.getLocation(), RitualBook.getBook(RitualHandler.addNewUUID())); return true; } case "setup": { diff --git a/src/main/java/me/ghosty/kamoof/features/autoupdate/UpdateChecker.java b/src/main/java/me/ghosty/kamoof/features/autoupdate/UpdateChecker.java index 728c0e0..349c09d 100644 --- a/src/main/java/me/ghosty/kamoof/features/autoupdate/UpdateChecker.java +++ b/src/main/java/me/ghosty/kamoof/features/autoupdate/UpdateChecker.java @@ -42,6 +42,7 @@ public UpdateChecker() { public boolean checkForUpdate() { try { + Bukkit.getConsoleSender().sendMessage(Lang.UPDATE_CHECKING.get()); String data = HTTPUtils.get("https://api.modrinth.com/v2/project/camouf2/version", new HashMap<>() {{ put("User-Agent", "github: @Ghosty920/KamoofSMP-S2/v" + currentVersion); @@ -86,6 +87,7 @@ public boolean downloadUpdate(String url) { if (url == null) return false; try { + Bukkit.getConsoleSender().sendMessage(Lang.UPDATE_DOWNLOADING.get()); HTTPUtils.RawResponse response = HTTPUtils.getRaw(url, new HashMap<>() {{ put("User-Agent", "github: @Ghosty920/KamoofSMP-S2/v" + currentVersion); @@ -93,6 +95,7 @@ public boolean downloadUpdate(String url) { URL location = KamoofSMP.class.getProtectionDomain().getCodeSource().getLocation(); Files.write(Path.of(location.toURI()), response.response()); + Bukkit.getConsoleSender().sendMessage(Lang.UPDATE_DOWNLOADED.get()); Bukkit.getScheduler().runTask(KamoofSMP.getInstance(), () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "restart")); diff --git a/src/main/java/me/ghosty/kamoof/features/macelimiter/MaceLimiter.java b/src/main/java/me/ghosty/kamoof/features/macelimiter/MaceLimiter.java index ca3c6c0..e7fa919 100644 --- a/src/main/java/me/ghosty/kamoof/features/macelimiter/MaceLimiter.java +++ b/src/main/java/me/ghosty/kamoof/features/macelimiter/MaceLimiter.java @@ -1,7 +1,7 @@ package me.ghosty.kamoof.features.macelimiter; import me.ghosty.kamoof.KamoofSMP; -import org.bukkit.GameMode; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.event.*; import org.bukkit.event.block.CrafterCraftEvent; @@ -11,6 +11,25 @@ public final class MaceLimiter implements Listener { + // fix un bug avec certaines versions spigot + public MaceLimiter() { + try { + Bukkit.getPluginManager().registerEvents(new Listener() { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onCrafter(CrafterCraftEvent event) { + if (event.getResult().getType() != Material.MACE) + return; + if (canCraft()) add(); + else event.setCancelled(true); + } + + }, KamoofSMP.getInstance()); + } catch (Throwable exc) { + exc.printStackTrace(); + } + } + public static void add() { KamoofSMP.getData().set("maces", KamoofSMP.getData().getInt("maces", 0) + 1); KamoofSMP.saveData(); @@ -23,17 +42,16 @@ public static boolean canCraft() { @EventHandler(priority = EventPriority.HIGHEST) public void onPrepareCraft(PrepareItemCraftEvent event) { ItemStack result = event.getInventory().getResult(); - if (event.getView().getPlayer().getGameMode() == GameMode.CREATIVE) - return; - if (result != null && result.getType() == Material.MACE) - if (!canCraft()) - event.getInventory().setResult(null); +// if (event.getView().getPlayer().getGameMode() == GameMode.CREATIVE) +// return; + if (result != null && result.getType() == Material.MACE && !canCraft()) + event.getInventory().setResult(null); } @EventHandler(priority = EventPriority.HIGHEST) public void onCraft(CraftItemEvent event) { - if (event.getView().getPlayer().getGameMode() == GameMode.CREATIVE) - return; +// if (event.getView().getPlayer().getGameMode() == GameMode.CREATIVE) +// return; if (event.getCurrentItem().getType() != Material.MACE) return; @@ -56,16 +74,4 @@ public void onCraft(CraftItemEvent event) { else event.setCancelled(true); } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onCrafter(CrafterCraftEvent event) { - if (event.getResult().getType() != Material.MACE) - return; - - if (canCraft()) - add(); - else - event.setCancelled(true); - } - } diff --git a/src/main/java/me/ghosty/kamoof/features/ritual/RitualHandler.java b/src/main/java/me/ghosty/kamoof/features/ritual/RitualHandler.java index 654b8f5..7427d1a 100644 --- a/src/main/java/me/ghosty/kamoof/features/ritual/RitualHandler.java +++ b/src/main/java/me/ghosty/kamoof/features/ritual/RitualHandler.java @@ -2,6 +2,7 @@ import me.ghosty.kamoof.KamoofSMP; import me.ghosty.kamoof.utils.Message; +import me.ghosty.kamoof.utils.SLocation; import org.bukkit.*; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -15,6 +16,8 @@ import java.util.*; +import static me.ghosty.kamoof.KamoofSMP.config; + public final class RitualHandler { public static final ArrayList armorStands = new ArrayList<>(); @@ -138,6 +141,38 @@ public static void setPacte(Player player, String pacte) { Message.send(player, "messages.chose-forgotten", Map.of("player", NickAPI.getOriginalName(player))); } } + + /* + * Animation + */ + final Particle lavaParticle = config().getBoolean("ritual.accepted.lava-sound") + ? Particle.DRIPPING_DRIPSTONE_LAVA + : Particle.DRIPPING_LAVA; + final World world = player.getWorld(); + final double radius = config().getDouble("ritual.accepted.lava-radius"), + particles = config().getDouble("ritual.accepted.lava-particles"); + final Location loc = new SLocation(player.getLocation()).plus(0, 0.9, 0); + + for (int i = 0; i < particles; i++) { + double rand1 = Math.random(), rand2 = Math.random(); + + double phi = 2 * Math.PI * rand1; + double posY = loc.getY() + radius * Math.cos(phi); + double phiSin = Math.sin(phi); + + double angle = 2 * Math.PI * rand2; + double posX = loc.getX() + (radius * Math.cos(angle) * phiSin); + double posZ = loc.getZ() + (radius * Math.sin(angle) * phiSin); + + world.spawnParticle(lavaParticle, posX, posY, posZ, 1, 0, 0, 0, 0, null, true); + } + + world.spawnParticle( + config().getBoolean("ritual.accepted.flame-soul") ? Particle.SOUL_FIRE_FLAME : Particle.FLAME, + loc, + config().getInt("ritual.accepted.flame-particles"), 0, 0, 0, + config().getDouble("ritual.accepted.flame-speed"), null, true + ); } public static String getPacte(Player player) { diff --git a/src/main/java/me/ghosty/kamoof/utils/Lang.java b/src/main/java/me/ghosty/kamoof/utils/Lang.java index 2502c91..92f2b06 100644 --- a/src/main/java/me/ghosty/kamoof/utils/Lang.java +++ b/src/main/java/me/ghosty/kamoof/utils/Lang.java @@ -44,14 +44,26 @@ public enum Lang { PREFIX + "§aVous vous êtes donné la tête de §e%s", PREFIX + "§aGave yourself the head of §e%s" }), + UPDATE_CHECKING(new String[]{ + PREFIX + "§aVérification de la dernière version...", + PREFIX + "§aChecking for the last version available..." + }), UPDATE_CHECKER_FAIL(new String[]{ PREFIX + "§cImpossible de récupérer/traiter la dernière version", PREFIX + "§cCouldn't fetch/process the last version" }), + UPDATE_DOWNLOADING(new String[]{ + PREFIX + "§aTéléchargement de la dernière version...", + PREFIX + "§aDownloading the last version available..." + }), UPDATE_DOWNLOAD_FAIL(new String[]{ PREFIX + "§cImpossible de télécharger/sauvegarder la dernière version", PREFIX + "§cCouldn't download/save the last version" }), + UPDATE_DOWNLOADED(new String[]{ + PREFIX + "§aNouvelle version téléchargée avec succès. Redémarrage du serveur.", + PREFIX + "§aNew version downloaded successfully. Restarting the server." + }), NEW_VERSION(new String[]{ "[KamoofSMP] ➤ Nouvelle version disponible ! %s ➞ %s", "[KamoofSMP] ➤ New version available! %s ➞ %s" diff --git a/src/main/java/me/ghosty/kamoof/utils/SLocation.java b/src/main/java/me/ghosty/kamoof/utils/SLocation.java index 674af8e..3878381 100644 --- a/src/main/java/me/ghosty/kamoof/utils/SLocation.java +++ b/src/main/java/me/ghosty/kamoof/utils/SLocation.java @@ -8,6 +8,10 @@ */ public class SLocation extends Location { + public SLocation(Location location) { + super(location.getWorld(), location.getX(), location.getY(), location.getZ()); + } + public SLocation(World world, double x, double y, double z) { super(world, x, y, z); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a043050..a90008b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -71,8 +71,8 @@ ritual: # Le contenu des 2 pages pour effectuer les différents pactes # %command1% = Pacte Ensanglanté, %command2% = Pacte Oublié pages: - - "Pacte Ensanglanté

Ce pacte te permet d'augmenter ta vie de 5 coeurs t'est proposé, mais ta prochaine mort te coûtera 3 têtes...
Vas-tu l'accepter ?

[Accepter le Pacte]" - - "Pacte Oublié

Ce pacte te permet de ne pas laisser de tête derrière toi à ta mort, cependant durant le restant de cette vie tu seras plus faible
Vas-tu l'accepter ?

[Accepter le Pacte]" + - "Pacte Ensanglanté

Ce pacte te permet d'augmenter ta vie de 5 coeurs t'est proposé, mais ta prochaine mort te coûtera 3 têtes...
Vas-tu l'accepter ?

Clique pour accepter ce pacte\">[Accepter le Pacte]" + - "Pacte Oublié

Ce pacte te permet de ne pas laisser de tête derrière toi à ta mort, cependant durant le restant de cette vie tu seras plus faible
Vas-tu l'accepter ?

Clique pour accepter ce pacte\">[Accepter le Pacte]" pactes: bloody: # Le boost de pv du Pacte Ensanglanté @@ -105,7 +105,7 @@ ritual: size: 1 # Le pourcentage de chance d'avoir une particule de lave lava-chance: 5 - # Si les particules de lave produisent du son à la fin + # Si les particules de lave produisent du son quand elles tombent lava-sound: false # Les temps dans le monde minimum & maximum pour lancer le rituel # Exemple: 0 & 12000 empêchera de lancer le rituel la nuit @@ -113,6 +113,21 @@ ritual: min-time: 0 max-time: 24000 + # Les paramètres de l'animation quand le pacte est accepté + accepted: + # Le rayon de la sphère de lave + lava-radius: 1.5 + # Le nombre de particules de lave + lava-particles: 300 + # Si les particules de lave produisent du son quand elles tombent + lava-sound: false + # Le nombre de particules de flamme + flame-particles: 500 + # La vitesse/distance parcourue des particules de flamme + flame-speed: 0.5 + # Si les particules de flamme doivent être bleues + flame-soul: true + # Information: # Il n'y a pas de moyen de bloquer la mise de la mace dans l'enderchest (pour le moment?)