Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
403ca8dae7
Commit
3ef7812aa7
@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.bausystem.features.worldedit;
|
||||||
|
|
||||||
|
import com.sk89q.worldedit.EditSession;
|
||||||
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
|
import com.sk89q.worldedit.regions.Region;
|
||||||
|
import com.sk89q.worldedit.util.formatting.text.Component;
|
||||||
|
import com.sk89q.worldedit.util.formatting.text.TextComponent;
|
||||||
|
import com.sk89q.worldedit.util.formatting.text.TranslatableComponent;
|
||||||
|
import de.steamwar.bausystem.linkage.LinkageType;
|
||||||
|
import de.steamwar.bausystem.linkage.Linked;
|
||||||
|
import de.steamwar.bausystem.utils.WorldEditUtils;
|
||||||
|
import de.steamwar.command.SWCommand;
|
||||||
|
import de.steamwar.command.TypeMapper;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Linked(LinkageType.COMMAND)
|
||||||
|
public class MultiReplaceCommand extends SWCommand {
|
||||||
|
|
||||||
|
public MultiReplaceCommand() {
|
||||||
|
super("/multireplace", "/multirep", "/mrep", "/multir", "/mr");
|
||||||
|
}
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
private static class Replacement {
|
||||||
|
private Material from;
|
||||||
|
private Material to;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Register
|
||||||
|
@SneakyThrows
|
||||||
|
public void genericCommand(Player player, Replacement... replacements) {
|
||||||
|
World world = player.getWorld();
|
||||||
|
|
||||||
|
Map<String, String> stringReplacements = new HashMap<>();
|
||||||
|
for (Replacement replacement : replacements) {
|
||||||
|
stringReplacements.put(replacement.from.name(), replacement.to.name());
|
||||||
|
}
|
||||||
|
|
||||||
|
Region region = WorldEditUtils.getRegion(player);
|
||||||
|
EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(BukkitAdapter.adapt(world), -1, BukkitAdapter.adapt(player));
|
||||||
|
|
||||||
|
SpecialReplace specialReplace = new SpecialReplace(editSession, stringReplacements);
|
||||||
|
int affected = editSession.replaceBlocks(region, specialReplace, specialReplace);
|
||||||
|
editSession.flushSession();
|
||||||
|
BukkitAdapter.adapt(player).printInfo(TranslatableComponent.of("worldedit.replace.replaced", new Component[]{TextComponent.of(affected)}));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ClassMapper(value = Replacement.class, local = true)
|
||||||
|
public TypeMapper<Replacement> replacementTypeMapper() {
|
||||||
|
Set<Material> materials = Arrays.stream(Material.values()).filter(Material::isBlock).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
return new TypeMapper<Replacement>() {
|
||||||
|
@Override
|
||||||
|
public Replacement map(CommandSender commandSender, String[] previousArguments, String s) {
|
||||||
|
String[] split = s.split(":");
|
||||||
|
if(split.length != 2) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Material from = Material.matchMaterial(split[0]);
|
||||||
|
Material to = Material.matchMaterial(split[1]);
|
||||||
|
if(from == null || to == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Replacement(from, to);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> tabCompletes(CommandSender commandSender, String[] strings, String s) {
|
||||||
|
int index = s.indexOf(":");
|
||||||
|
if (index != -1 && index == s.lastIndexOf(":")) {
|
||||||
|
return materials.stream().map(Material::name).map(t -> s + t).collect(Collectors.toList());
|
||||||
|
} else if (index == -1) {
|
||||||
|
return materials.stream().map(Material::name).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
In neuem Issue referenzieren
Einen Benutzer sperren