Hi!
I need to:
- Fully delete player from a server, including EVERYTHING, Inventory, Gamemode, Location. Health, Food, and etc.
- Get all created chunks.
- Regenerate chunk.
How can I do this? There is my code, and comments where I need help… Thanks!
[code]public class WorldRegenerator {
private boolean regenerating = false;
public void regenerate() {
setRegenerating(true);
for (Player player : Sponge.getServer().getOnlinePlayers()) {
player.kick(LanguageUtils.getText("REGENERATING_WORLD"));
}
//1. Will that code FULL delete Player from a server, including his Inventory, Location, and everything other?
Optional<UserStorageService> optional_user_storage_service = Sponge.getServiceManager().provide(UserStorageService.class);
if (optional_user_storage_service.isPresent()) {
UserStorageService user_storage_service = optional_user_storage_service.get();
for (GameProfile profile : user_storage_service.getAll()) {
UUID uuid = profile.getUniqueId();
if ((System.currentTimeMillis() - UserUtils.getLastSeenDate(uuid)) >= 1000*60*60*24*30 &&
UserUtils.getGroup(uuid).equals(Groups.DEFAULT)) {
user_storage_service.delete(profile);
UserUtils.delete(uuid);
}
}
}
List<Chunk> to_regenerate = new ArrayList();
for (World world : Sponge.getServer().getWorlds()) {
for (Chunk chunk : ???) { //2. How to get all CREATED (not only LOADED) chunks?
AABB chunk_aabb = new AABB(chunk.getBlockMin(), chunk.getBlockMax());
boolean chunk_has_region = false;
for (String region : RegionUtils.getRegions()) {
Selection selection = RegionUtils.getSelection(region);
if (!selection.getFirst().getExtent().equals(world) || !selection.isValid()) return;
AABB region_aabb = selection.toAABB();
if (chunk_aabb.intersects(region_aabb)) {
chunk_has_region = true;
break;
}
}
if (!chunk_has_region) {
to_regenerate.add(chunk);
}
}
}
Sponge.getScheduler().createTaskBuilder().execute(new RegenerateThread(to_regenerate)).submit(GWMPlugin.getInstance());
}
@Listener(order = Order.LATE)
public void disallowJoin(ClientConnectionEvent.Auth event) {
if (isRegenerating()) {
event.setCancelled(true);
event.setMessage(LanguageUtils.getText("REGENERATING_WORLD"));
}
}
public void setRegenerating(boolean regenerating) {
this.regenerating = regenerating;
}
public boolean isRegenerating() {
return this.regenerating;
}
public class RegenerateThread implements Runnable {
private List<Chunk> to_regenerate = null;
public RegenerateThread(List<Chunk> to_regenerate) {
setToRegenerate(to_regenerate);
}
@Override
public void run() {
if (!getToRegenerate().isEmpty()) {
Chunk chunk = getToRegenerate().remove(0);
//3. How to regenerate this chunk?
Sponge.getScheduler().createTaskBuilder().delayTicks(1).execute(new RegenerateThread(getToRegenerate())).submit(GWMPlugin.getInstance());
} else {
setRegenerating(false);
}
}
public void setToRegenerate(List<Chunk> to_regenerate) {
this.to_regenerate = to_regenerate;
}
public List<Chunk> getToRegenerate() {
return this.to_regenerate;
}
}
}[/code]