From a2c1eb155ddb51ff17214d84241448d206a005a0 Mon Sep 17 00:00:00 2001 From: DaTTV Date: Wed, 19 Feb 2025 12:26:16 +0100 Subject: [PATCH] Impl homes --- .../8.8/fileHashes/resourceHashesCache.bin | Bin 18837 -> 20027 bytes .../plugins/papermc/blazesmp/BlazeSMP.java | 12 +-- .../papermc/blazesmp/command/HomeCommand.java | 52 +++++++++++++ .../blazesmp/module/manager/Homes.java | 19 +++++ .../tasks/PlayerTeleportHomeTimer.java | 70 ++++++++++++++++++ 5 files changed, 148 insertions(+), 5 deletions(-) create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/command/HomeCommand.java create mode 100644 src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/PlayerTeleportHomeTimer.java diff --git a/.gradle/8.8/fileHashes/resourceHashesCache.bin b/.gradle/8.8/fileHashes/resourceHashesCache.bin index a0c134a045b6868b84b975f294f2a06e7d91f9f6..97ed5bd73f376e619f9bffc11b90a6278ab4a41e 100644 GIT binary patch literal 20027 zcmeI3do)ye9KdIi$|HGpXgrcvVPXuiQSwN}Gum>BNKx(3!=q4%6z#5|)Jj6K6IQJv zq`YR)C^TNREQ;ivM-Pe8vgX|TJDqhqXaDPuJ>NO!&fN2v&-u>1pZWbazp*5dWW{Ij z2kFa0=F2IZK>;WL1)u;FfC5ke3P1rU00p1`6o3Ly017|>C;$bZ02F`%|Ca(=XKzFp zyBS&SdHj==Xz&C5>-3hm;QC+#d00NmK5Y`N@qq zpFlj8m)%#V9WIS=8wJGA{rovEqexd5<96#1znu7#rC%d<9^;Hc#B)lOKXGsN72)%R z5HDF^sOL8%V1fGqh;y1#<6O^lD`DLBBI1?lOV?5566!H-D;g|Bk7`NVo_^@4# zmLWM~6rb;i_*>d`3M=d3G2D+td@NsV{mNSfhjITS;^U4HfrGTzA8_7+_+%`{puy?g z5{xr+5TE{#AsS-hcpc|ch?91%x;pci(S>n43gV*UDZ-Y=Dfn`+9zt9~t3oK`P{L|_ zPAlS+HU;&2XIk;~W9x@FHOxhL&5AX7m~Uf>_?m-*zE!`9`C!~u1aZSaLGm(nK{oC` zMBHc~Vp++?Q2hF>s}VN|)Kn~ICY{54J2v7BO5VmJ9cB3XWGqJ9uA`^aeI2s`^X(5I zZlB`p@*%l}gY!JZ9qG;FO{1Y^`216dJ1JP@dWw{_;k+MlXNLntUXGoq7`HY<+~qw- z>UpJn9qxM|?&hr>mlBwI7w25W-7g0T1;tQvF>YIcxaZTEMx&wF;}~Z+A-*TeDJ#BK z1pnS`1`+pVMRFWCQDn@w&P3dwTQv5OHIC>?K<}C;$bZ02F`%Pyh-*0Vn_kpa2wr0#E=7K!I;rfIj|CR^R)MED@FS%86*aTQu=eDnRf`zs1ptBdycgM5E1L%j|ZP->WH-;!hWn=#Pko z16kyB{`INdCVKVlpUcYlyRqk7X><481QDvnKBo3ixniaK z7S<7>Q9`XM(uu8BF$#;g%6VYU-}^r2Q-(&Gr6rz>J#Toj;nQfO)hMC1G7PVHfhw%W;o`~F(aj3c#2GYGX~}w?66ewro#LS05dQA=Iak_b*b~53i)6?#7c%$x zPkrTXJ)a-6s<%Dg%}xj?5%IO>?^K^NLeX;BG$Te!1isdpEPXiybg=uvenNhZV~rxledqU-|ZzD{GA1&n-<$>0Qj5mXI|k z&Zt_eZ;^b$c*Uyn4cTgEKl>7maLWr~yN0A1C)tvPLd;{^hz9rZeR)&c!_su;Ez4Zr z4Ks;`S4ZZF$KzQ#w!dq(i}|kgAR4OWMKF!G`>Qqs&=j0SxXR2EjD8?)9zNF7-#th(>7kc$YUT z?GEqEE*t$f#k+~dwFA>(#UV delta 77 zcmdlzhjHp;#tkMCj9ioNN=Qs@m6Vvg6^Q==v8$BCYou must be a player to use this command!")); + return true; + } + Homes homes = BlazeSMP.getInstance().getHomes(); + + if (label.equalsIgnoreCase("sethome")) { + homes.setHome(player); + player.sendMessage(MiniMessage.miniMessage().deserialize("Home set!")); + } else if (label.equalsIgnoreCase("delhome")) { + homes.removeHome(player); + player.sendMessage(MiniMessage.miniMessage().deserialize("Home removed!")); + } else { + if (homes.hasHome(player)) { + // Informiere den Spieler, dass der Teleport-Vorgang gestartet wird + player.sendMessage(MiniMessage.miniMessage().deserialize("Teleporting to home!")); + new PlayerTeleportHomeTimer(player).runTaskTimer(BlazeSMP.getInstance(), 0, 1); + } else { + homes.setHome(player); + player.sendMessage(MiniMessage.miniMessage().deserialize("Home set!")); + } + } + return true; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return List.of(); + } +} diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java index 81d7b37..f79a0d9 100644 --- a/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/module/manager/Homes.java @@ -7,6 +7,7 @@ import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.entity.Player; import java.io.File; import java.io.FileReader; @@ -112,6 +113,24 @@ public class Homes { } } + public boolean hasHome(Player player) { + return homes.containsKey(player.getUniqueId()); + } + + public Location getHome(Player player) { + return homes.get(player.getUniqueId()); + } + + public void setHome(Player player) { + homes.put(player.getUniqueId(), player.getLocation()); + save(); + } + + public void removeHome(Player player) { + homes.remove(player.getUniqueId()); + save(); + } + /** * Inner class representing the JSON structure for a location. */ diff --git a/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/PlayerTeleportHomeTimer.java b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/PlayerTeleportHomeTimer.java new file mode 100644 index 0000000..a552600 --- /dev/null +++ b/src/main/java/me/freezy/plugins/papermc/blazesmp/tasks/PlayerTeleportHomeTimer.java @@ -0,0 +1,70 @@ +package me.freezy.plugins.papermc.blazesmp.tasks; + +import me.freezy.plugins.papermc.blazesmp.BlazeSMP; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class PlayerTeleportHomeTimer extends BukkitRunnable { + private final Player player; + private final double origX; + private final double origY; + private final double origZ; + // Countdown in Ticks (5 Sekunden * 20 Ticks pro Sekunde) + private int ticksRemaining = 5 * 20; + + // Felder für den Spiraleneffekt + private double angle = 0; + + public PlayerTeleportHomeTimer(Player player) { + this.player = player; + // Speichere die ursprüngliche Position, um Bewegungen zu erkennen + origX = player.getLocation().getX(); + origY = player.getLocation().getY(); + origZ = player.getLocation().getZ(); + } + + @Override + public void run() { + // Abbruch, falls sich der Spieler bewegt hat + if (player.getLocation().getX() != origX || + player.getLocation().getY() != origY || + player.getLocation().getZ() != origZ) { + player.sendMessage(MiniMessage.miniMessage().deserialize("Teleporting cancelt you moved!")); + cancel(); + return; + } + + // Berechne, wie viele Ticks bereits vergangen sind + int ticksElapsed = (5 * 20) - ticksRemaining; + + // Erzeuge den Spiraleneffekt + Location baseLoc = player.getLocation(); + double radius = 1.5; + double offsetX = Math.cos(angle) * radius; + double offsetZ = Math.sin(angle) * radius; + // Inkrementiere den Y-Wert, sodass die Spirale nach oben steigt + double offsetY = 0.2 + ticksElapsed * 0.05; + Location particleLoc = baseLoc.clone().add(offsetX, offsetY, offsetZ); + player.getWorld().spawnParticle(Particle.FLAME, particleLoc, 1, 0, 0, 0, 0); + + // Erhöhe den Winkel schneller, sodass sich die Spirale schneller dreht + double angleIncrement = Math.PI / 4; + angle += angleIncrement; + + // Teleport-Countdown und Nachrichten + if (ticksRemaining <= 0) { + player.teleportAsync(BlazeSMP.getInstance().getHomes().getHome(player)); + player.sendMessage(MiniMessage.miniMessage().deserialize("Teleported!")); + cancel(); + } else if (ticksRemaining % 20 == 0) { + int secondsLeft = ticksRemaining / 20; + String message = String.format("Teleporting to home in %s seconds!", secondsLeft); + player.sendMessage(MiniMessage.miniMessage().deserialize(message)); + } + + ticksRemaining--; + } +}