From 97fe199ffd5c2598ffd8d5f5571cfdfe8ae35511 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 10 Apr 2021 17:43:48 +0200 Subject: [PATCH] Add CommandAutostartTimer --- .../src/de/steamwar/bausystem/BauSystem.java | 1 + .../commands/CommandAutostartTimer.java | 70 ++++++++++++++++++- .../bausystem/commands/RegionUtils.java | 8 +++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java index 829132c..e50e4ee 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java @@ -95,6 +95,7 @@ public class BauSystem extends JavaPlugin implements Listener { new CommandWorldSpawn(); new CommandRegion(); new CommandSelect(); + new CommandAutostartTimer(); VersionedRunnable.call(new VersionedRunnable(() -> { if (Region.buildAreaEnabled()) { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandAutostartTimer.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandAutostartTimer.java index e8616c4..c17e0ec 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandAutostartTimer.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/CommandAutostartTimer.java @@ -19,19 +19,85 @@ package de.steamwar.bausystem.commands; +import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.SWUtils; +import de.steamwar.bausystem.world.TPSUtils; +import de.steamwar.bausystem.world.regions.GlobalRegion; +import de.steamwar.bausystem.world.regions.Region; +import de.steamwar.bausystem.world.regions.RegionExtensionType; +import de.steamwar.bausystem.world.regions.RegionType; import de.steamwar.command.SWCommand; import de.steamwar.inventory.SWItem; +import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; -public class CommandAutostartTimer extends SWCommand { +public class CommandAutostartTimer extends SWCommand implements Listener { - public static final ItemStack WAND = new SWItem(Material.BLAZE_ROD, "§eRedstonetester", Arrays.asList("§eRechtsklick Block §8- §7Starte den Timer"), false, null).getItemStack(); + public static final ItemStack WAND = new SWItem(Material.BLAZE_ROD, "§eAutostartTimer", Arrays.asList("§eRechtsklick Block §8- §7Starte den Timer"), false, null).getItemStack(); + + private Map regionStartTime = new HashMap<>(); public CommandAutostartTimer() { super("timer", "autostarttimer", "at"); + Bukkit.getPluginManager().registerEvents(this, BauSystem.getPlugin()); } + @Register(help = true) + public void genericHelp(Player p, String... args) { + p.sendMessage("§8/§etimer §8- §7Legt den AutostartTimer ins Inventar"); + } + + @Register + public void genericCommand(Player p) { + SWUtils.giveItemToPlayer(p, WAND); + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (!WAND.isSimilar(event.getItem())) { + return; + } + if (event.getClickedBlock() == null) { + return; + } + Player player = event.getPlayer(); + Region region = Region.getRegion(event.getClickedBlock().getLocation()); + if (GlobalRegion.isGlobalRegion(region)) { + player.sendMessage(BauSystem.PREFIX + "§cDu befindest dich derzeit in keiner Region"); + return; + } + if (!region.hasTestblock()) { + player.sendMessage(BauSystem.PREFIX + "§cDu befindest dich derzeit in keiner Region"); + return; + } + if (regionStartTime.containsKey(region)) { + player.sendMessage(BauSystem.PREFIX + "§eDer AutostartTimer wurde zurückgesetzt"); + } else { + player.sendMessage(BauSystem.PREFIX + "§eAutostartTimer gestartet"); + } + regionStartTime.put(region, TPSUtils.currentTick.get()); + } + + @EventHandler + public void onEntityExplode(EntityExplodeEvent event) { + event.blockList().forEach(block -> { + Region region = Region.getRegion(block.getLocation()); + if (!regionStartTime.containsKey(region)) return; + if (!region.hasTestblock()) return; + if (!region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) return; + RegionUtils.message(region, BauSystem.PREFIX + "§eZeit §7bis zur §eExplosion §7am Gegner§8:§e " + new SimpleDateFormat("mm:ss SSSS").format(new Date((TPSUtils.currentTick.get() - regionStartTime.remove(region)) * 50))); + }); + } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/commands/RegionUtils.java b/BauSystem_Main/src/de/steamwar/bausystem/commands/RegionUtils.java index 1d9dc60..2a9774c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/commands/RegionUtils.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/commands/RegionUtils.java @@ -39,4 +39,12 @@ public class RegionUtils { } } + public static void message(Region region, String s) { + if (GlobalRegion.isGlobalRegion(region)) { + Bukkit.getOnlinePlayers().stream().filter(player -> Region.getRegion(player.getLocation()) == null).forEach(player -> player.sendMessage(s)); + } else { + Bukkit.getOnlinePlayers().stream().filter(player -> region.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)).forEach(player -> player.sendMessage(s)); + } + } + }