Add 'Force Delete' for special regions
This commit is contained in:
+65
-16
@@ -89,7 +89,7 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
||||
private final Player player;
|
||||
|
||||
private final BukkitTask task;
|
||||
private Type type = new Delete();
|
||||
private Type type = new Empty();
|
||||
|
||||
public DynamicRegionEditor(Player player) {
|
||||
this.player = player;
|
||||
@@ -156,7 +156,9 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
||||
event.setCancelled(true);
|
||||
|
||||
List<SWListInv.SWListEntry<Type>> list = new ArrayList<>();
|
||||
list.add(new SWListInv.SWListEntry<>(new SWItem(Material.BARRIER, "§cDelete"), new Delete()));
|
||||
list.add(new SWListInv.SWListEntry<>(new SWItem(Material.STRUCTURE_VOID, "§6Deselect"), new Empty()));
|
||||
list.add(new SWListInv.SWListEntry<>(new SWItem(Material.BARRIER, "§cDelete"), new Delete(false)));
|
||||
list.add(new SWListInv.SWListEntry<>(new SWItem(Material.COMMAND_BLOCK, "§4Force Delete"), new Delete(true)));
|
||||
list.add(new SWListInv.SWListEntry<>(new SWItem(Material.LODESTONE, "§fBig Spawn"), new Spawn()));
|
||||
|
||||
DynamicRegionSystem.constructorDataMap.values()
|
||||
@@ -168,9 +170,19 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
||||
});
|
||||
|
||||
SWListInv<Type> inventory = new SWListInv<>(player, "Select Region to place", list, (click, type) -> {
|
||||
this.type = type;
|
||||
player.closeInventory();
|
||||
showHotbar();
|
||||
if (type instanceof Delete delete) {
|
||||
delete.confirmForceDelete(player, () -> {
|
||||
player.closeInventory();
|
||||
this.type = delete;
|
||||
area.hide(true);
|
||||
showHotbar();
|
||||
});
|
||||
} else {
|
||||
player.closeInventory();
|
||||
this.type = type;
|
||||
area.hide(true);
|
||||
showHotbar();
|
||||
}
|
||||
});
|
||||
inventory.open();
|
||||
}
|
||||
@@ -226,16 +238,53 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
||||
void run(Player player, int tileX, int tileZ);
|
||||
}
|
||||
|
||||
private static class Delete implements Type {
|
||||
private static class Empty implements Type {
|
||||
|
||||
private boolean valid = false;
|
||||
|
||||
private Delete() {
|
||||
private Empty() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String title() {
|
||||
return "§cDelete";
|
||||
return "§6---";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visualize(CArea area, int tileX, int tileZ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(Player player, int tileX, int tileZ) {
|
||||
}
|
||||
}
|
||||
|
||||
private static class Delete implements Type {
|
||||
|
||||
protected static final String CONFIRM_DELETE = "Confirm delete: ";
|
||||
protected static final String ACCEPT_DELETE = "§cDelete: ";
|
||||
|
||||
private final boolean force;
|
||||
private boolean valid = false;
|
||||
|
||||
private Delete(boolean force) {
|
||||
this.force = force;
|
||||
}
|
||||
|
||||
public void confirmForceDelete(Player player, Runnable callback) {
|
||||
if (force) {
|
||||
confirmInventory(player, "Enable Force Delete", "§cEnable", "", callback);
|
||||
} else {
|
||||
callback.run();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String title() {
|
||||
if (force) {
|
||||
return "§4Force Delete";
|
||||
} else {
|
||||
return "§cDelete";
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isBigSpawn() {
|
||||
@@ -309,7 +358,7 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
if (region.getType().isPath()) {
|
||||
if (region.getType().isPath() || (force && region.getType().isSpecial())) {
|
||||
region.delete();
|
||||
} else {
|
||||
deleteRegion(player, tile, region);
|
||||
@@ -317,7 +366,7 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
||||
}
|
||||
|
||||
private void deleteSpawn(Player player) {
|
||||
confirmInventory(player, "Big Spawn", () -> {
|
||||
confirmInventory(player, CONFIRM_DELETE, ACCEPT_DELETE, "Big Spawn", () -> {
|
||||
checkSpawnRegionAndDelete(Tile.TILE_NN);
|
||||
checkSpawnRegionAndDelete(Tile.TILE_NP);
|
||||
checkSpawnRegionAndDelete(Tile.TILE_PN);
|
||||
@@ -332,18 +381,18 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
||||
|
||||
private void deleteRegion(Player player, Tile tile, Region region) {
|
||||
RegionConstructorData data = DynamicRegionSystem.constructorDataMap.get(region.getClass());
|
||||
confirmInventory(player, data.name(), () -> {
|
||||
confirmInventory(player, CONFIRM_DELETE, ACCEPT_DELETE, data.name(), () -> {
|
||||
Region checkRegion = DynamicRegionSystem.INSTANCE.get(tile);
|
||||
if (region == checkRegion) region.delete();
|
||||
});
|
||||
}
|
||||
|
||||
private void confirmInventory(Player player, String name, Runnable deleteCallback) {
|
||||
SWInventory inventory = new SWInventory(player, 9, "Confirm delete: " + name);
|
||||
private void confirmInventory(Player player, String title, String accept, String name, Runnable deleteCallback) {
|
||||
SWInventory inventory = new SWInventory(player, 9, title + name);
|
||||
inventory.setItem(0, new SWItem(Material.GRAY_CONCRETE, "§7Cancel", click -> {
|
||||
player.closeInventory();
|
||||
}));
|
||||
inventory.setItem(8, new SWItem(Material.RED_CONCRETE, "§cDelete: " + name, click -> {
|
||||
inventory.setItem(8, new SWItem(Material.RED_CONCRETE, accept + name, click -> {
|
||||
player.closeInventory();
|
||||
deleteCallback.run();
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user