forked from SteamWar/SteamWar
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 Player player;
|
||||||
|
|
||||||
private final BukkitTask task;
|
private final BukkitTask task;
|
||||||
private Type type = new Delete();
|
private Type type = new Empty();
|
||||||
|
|
||||||
public DynamicRegionEditor(Player player) {
|
public DynamicRegionEditor(Player player) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
@@ -156,7 +156,9 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
List<SWListInv.SWListEntry<Type>> list = new ArrayList<>();
|
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()));
|
list.add(new SWListInv.SWListEntry<>(new SWItem(Material.LODESTONE, "§fBig Spawn"), new Spawn()));
|
||||||
|
|
||||||
DynamicRegionSystem.constructorDataMap.values()
|
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) -> {
|
SWListInv<Type> inventory = new SWListInv<>(player, "Select Region to place", list, (click, type) -> {
|
||||||
this.type = type;
|
if (type instanceof Delete delete) {
|
||||||
player.closeInventory();
|
delete.confirmForceDelete(player, () -> {
|
||||||
showHotbar();
|
player.closeInventory();
|
||||||
|
this.type = delete;
|
||||||
|
area.hide(true);
|
||||||
|
showHotbar();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
player.closeInventory();
|
||||||
|
this.type = type;
|
||||||
|
area.hide(true);
|
||||||
|
showHotbar();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
inventory.open();
|
inventory.open();
|
||||||
}
|
}
|
||||||
@@ -226,16 +238,53 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
|||||||
void run(Player player, int tileX, int tileZ);
|
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 Empty() {
|
||||||
|
|
||||||
private Delete() {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String title() {
|
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() {
|
private boolean isBigSpawn() {
|
||||||
@@ -309,7 +358,7 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (region.getType().isPath()) {
|
if (region.getType().isPath() || (force && region.getType().isSpecial())) {
|
||||||
region.delete();
|
region.delete();
|
||||||
} else {
|
} else {
|
||||||
deleteRegion(player, tile, region);
|
deleteRegion(player, tile, region);
|
||||||
@@ -317,7 +366,7 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void deleteSpawn(Player player) {
|
private void deleteSpawn(Player player) {
|
||||||
confirmInventory(player, "Big Spawn", () -> {
|
confirmInventory(player, CONFIRM_DELETE, ACCEPT_DELETE, "Big Spawn", () -> {
|
||||||
checkSpawnRegionAndDelete(Tile.TILE_NN);
|
checkSpawnRegionAndDelete(Tile.TILE_NN);
|
||||||
checkSpawnRegionAndDelete(Tile.TILE_NP);
|
checkSpawnRegionAndDelete(Tile.TILE_NP);
|
||||||
checkSpawnRegionAndDelete(Tile.TILE_PN);
|
checkSpawnRegionAndDelete(Tile.TILE_PN);
|
||||||
@@ -332,18 +381,18 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
|
|||||||
|
|
||||||
private void deleteRegion(Player player, Tile tile, Region region) {
|
private void deleteRegion(Player player, Tile tile, Region region) {
|
||||||
RegionConstructorData data = DynamicRegionSystem.constructorDataMap.get(region.getClass());
|
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);
|
Region checkRegion = DynamicRegionSystem.INSTANCE.get(tile);
|
||||||
if (region == checkRegion) region.delete();
|
if (region == checkRegion) region.delete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void confirmInventory(Player player, String name, Runnable deleteCallback) {
|
private void confirmInventory(Player player, String title, String accept, String name, Runnable deleteCallback) {
|
||||||
SWInventory inventory = new SWInventory(player, 9, "Confirm delete: " + name);
|
SWInventory inventory = new SWInventory(player, 9, title + name);
|
||||||
inventory.setItem(0, new SWItem(Material.GRAY_CONCRETE, "§7Cancel", click -> {
|
inventory.setItem(0, new SWItem(Material.GRAY_CONCRETE, "§7Cancel", click -> {
|
||||||
player.closeInventory();
|
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();
|
player.closeInventory();
|
||||||
deleteCallback.run();
|
deleteCallback.run();
|
||||||
}));
|
}));
|
||||||
|
|||||||
Reference in New Issue
Block a user