diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/region/TestblockCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/region/TestblockCommand.java new file mode 100644 index 00000000..b2145d12 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/region/TestblockCommand.java @@ -0,0 +1,115 @@ +package de.steamwar.bausystem.features.region; + +import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.Permission; +import de.steamwar.bausystem.linkage.LinkageType; +import de.steamwar.bausystem.linkage.Linked; +import de.steamwar.bausystem.region.Region; +import de.steamwar.bausystem.region.utils.RegionExtensionType; +import de.steamwar.bausystem.region.utils.RegionType; +import de.steamwar.command.SWCommand; +import de.steamwar.command.SWCommandUtils; +import de.steamwar.command.TypeMapper; +import de.steamwar.sql.Schematic; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; + +@Linked(LinkageType.COMMAND) +public class TestblockCommand extends SWCommand { + + public TestblockCommand() { + super("testblock", "tb"); + } + + @Register(help = true) + public void genericHelp(Player p, String... args) { + p.sendMessage("§8/§etestblock §8- §7Setzte den Testblock zurück"); + p.sendMessage("§8/§etestblock §8[§7Schematic§8] §8- §7Setzte den Testblock mit einer Schematic zurück"); + } + + @Register + public void genericTestblockCommand(Player p) { + genericTestblockCommand(p, RegionExtensionType.NORMAL); + } + + @Register + public void genericTestblockCommand(Player p, RegionExtensionType regionExtensionType) { + if (!permissionCheck(p)) return; + Region region = regionCheck(p); + if (region == null) return; + try { + region.reset(RegionType.TESTBLOCK, regionExtensionType); + p.sendMessage(BauSystem.PREFIX + "§7Testblock zurückgesetzt"); + } catch (IOException e) { + p.sendMessage(BauSystem.PREFIX + "§cFehler beim Zurücksetzen des Testblocks"); + Bukkit.getLogger().log(Level.WARNING, "Failed testblock", e); + } + } + + + @Register + public void schematicTestblockCommand(Player p, String s) { + schematicTestblockCommand(p, s, RegionExtensionType.NORMAL); + } + + @Register + public void schematicTestblockCommand(Player p, RegionExtensionType regionExtensionType, String s) { + schematicTestblockCommand(p, s, regionExtensionType); + } + + @Register + public void schematicTestblockCommand(Player p, String s, RegionExtensionType regionExtensionType) { + if (!permissionCheck(p)) return; + Region region = regionCheck(p); + if (region == null) return; + Schematic schem = Schematic.getSchemFromDB(s, p.getUniqueId()); + if (schem == null) { + p.sendMessage(BauSystem.PREFIX + "§cSchematic nicht gefunden"); + return; + } + try { + region.reset(schem, RegionType.TESTBLOCK, regionExtensionType); + p.sendMessage(BauSystem.PREFIX + "§7Testblock zurückgesetzt"); + } catch (IOException e) { + p.sendMessage(BauSystem.PREFIX + "§cFehler beim Zurücksetzen des Testblocks"); + Bukkit.getLogger().log(Level.WARNING, "Failed testblock", e); + } + } + + @ClassMapper(value = RegionExtensionType.class, local = true) + private TypeMapper regionExtensionTypeTypeMapper() { + Map showModeParameterTypesMap = new HashMap<>(); + showModeParameterTypesMap.put("-normal", RegionExtensionType.NORMAL); + showModeParameterTypesMap.put("-n", RegionExtensionType.NORMAL); + showModeParameterTypesMap.put("-extension", RegionExtensionType.EXTENSION); + showModeParameterTypesMap.put("-e", RegionExtensionType.EXTENSION); + + List tabCompletes = new ArrayList<>(showModeParameterTypesMap.keySet()); + return SWCommandUtils.createMapper(s -> showModeParameterTypesMap.getOrDefault(s, null), s -> tabCompletes); + } + + private boolean permissionCheck(Player player) { + if (Permission.hasPermission(player, Permission.WORLDEDIT)) { + return true; + } + player.sendMessage(BauSystem.PREFIX + "§cDu darfst hier nicht den Testblock zurücksetzen"); + return false; + } + + private Region regionCheck(Player player) { + Region region = Region.getRegion(player.getLocation()); + if (!region.hasType(RegionType.TESTBLOCK)) { + player.sendMessage(BauSystem.PREFIX + "§cDu befindest dich derzeit in keiner Region"); + return null; + } + return region; + } + +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java b/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java index f26916c7..3395ae60 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java @@ -26,6 +26,7 @@ import de.steamwar.bausystem.region.loader.RegionLoader; import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.shared.SizedStack; +import de.steamwar.sql.Schematic; import lombok.Getter; import lombok.NonNull; import org.bukkit.Location; @@ -33,6 +34,7 @@ import yapion.hierarchy.types.YAPIONObject; import yapion.hierarchy.types.YAPIONType; import yapion.hierarchy.types.YAPIONValue; +import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -298,19 +300,51 @@ public class Region { } } - public void reset(RegionType regionType) { + boolean hasReset(RegionType regionType) { if (!hasType(regionType)) { + return false; + } + switch (regionType) { + case TESTBLOCK: + return prototype.getTestblock().getSchematicFile() != null; + case BUILD: + return prototype.getBuild().getSchematicFile() != null; + default: + case NORMAL: + return prototype.getSchematicFile() != null; + } + } + + public void reset(RegionType regionType) throws IOException { + reset(null, regionType); + } + + public void reset(Schematic schematic, RegionType regionType) throws IOException { + reset(schematic, regionType, RegionExtensionType.NORMAL); + } + + public void reset(RegionType regionType, RegionExtensionType regionExtensionType) throws IOException { + reset(null, regionType, regionExtensionType); + } + + public void reset(Schematic schematic, RegionType regionType, RegionExtensionType regionExtensionType) throws IOException { + if (!hasReset(regionType)) { return; } + if (regionExtensionType == RegionExtensionType.EXTENSION && !hasExtensionType(regionType)) { + regionExtensionType = RegionExtensionType.NORMAL; + } switch (regionType) { case BUILD: case TESTBLOCK: + default: case NORMAL: } } + public boolean isGlobal() { return this == GlobalRegion.getInstance(); }