186 Zeilen
8.2 KiB
Java
186 Zeilen
8.2 KiB
Java
package me.yaruma.fightsystem.utils;
|
|
|
|
import com.boydti.fawe.FaweAPI;
|
|
import com.boydti.fawe.util.EditSessionBuilder;
|
|
import com.sk89q.worldedit.EditSession;
|
|
import com.sk89q.worldedit.IncompleteRegionException;
|
|
import com.sk89q.worldedit.Vector;
|
|
import com.sk89q.worldedit.blocks.BaseBlock;
|
|
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
|
import com.sk89q.worldedit.bukkit.selections.CuboidSelection;
|
|
import com.sk89q.worldedit.math.transform.AffineTransform;
|
|
import com.sk89q.worldedit.world.World;
|
|
import de.warking.hunjy.MySQL.Schematic;
|
|
import de.warking.hunjy.MySQL.SchematicType;
|
|
import de.warking.hunjy.MySQL.WarkingUser;
|
|
import me.yaruma.fightsystem.FightSystem;
|
|
import net.md_5.bungee.api.ChatColor;
|
|
import net.md_5.bungee.api.chat.ClickEvent;
|
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
|
import net.md_5.bungee.api.chat.HoverEvent;
|
|
import net.md_5.bungee.api.chat.TextComponent;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
public class WorldEdit {
|
|
|
|
public static void replace(Player player, int minX, int minY, int minZ, int maxX, int maxY, int maxZ) {
|
|
World weWorld = new BukkitWorld(player.getWorld());
|
|
EditSession editSession = new EditSessionBuilder(weWorld).fastmode(true).build();
|
|
CuboidSelection cuboidSelection = new CuboidSelection(player.getWorld(), new Location(player.getWorld(), minX, minY, minZ), new Location(player.getWorld(), maxX, maxY, maxZ));
|
|
|
|
Set<BaseBlock> targetObsidian = new HashSet<>();
|
|
targetObsidian.add(new BaseBlock(49));
|
|
|
|
Set<BaseBlock> targetBedrock = new HashSet<>();
|
|
targetBedrock.add(new BaseBlock(7));
|
|
|
|
try {
|
|
int tnt = editSession.replaceBlocks(cuboidSelection.getRegionSelector().getRegion(), targetObsidian, new BaseBlock(46));
|
|
int slime = editSession.replaceBlocks(cuboidSelection.getRegionSelector().getRegion(), targetBedrock, new BaseBlock(165));
|
|
|
|
editSession.flushQueue();
|
|
} catch (Exception ex){
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static void pasteSchematic(File file, World world, Vector vector, boolean allowUndo, boolean pasteAir, AffineTransform affineTransform) {
|
|
try {
|
|
FaweAPI.load(file).paste(world, vector, allowUndo, pasteAir, affineTransform).flushQueue();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static int countBlocks(Player player, int minX, int minY, int minZ, int maxX, int maxY, int maxZ, BaseBlock baseBlock) {
|
|
World weWorld = new BukkitWorld(player.getWorld());
|
|
EditSession editSession = new EditSessionBuilder(weWorld).fastmode(true).build();
|
|
CuboidSelection cuboidSelection = new CuboidSelection(player.getWorld(), new Location(player.getWorld(), minX, minY, minZ), new Location(player.getWorld(), maxX, maxY, maxZ));
|
|
Set<BaseBlock> target = new HashSet<>();
|
|
target.add(baseBlock);
|
|
try {
|
|
return editSession.countBlocks(cuboidSelection.getRegionSelector().getRegion(), target);
|
|
} catch (IncompleteRegionException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public static void sendPlayerScheamticList(File folder, int currentPage, int filesPerPage, Player player) {
|
|
File[] listOfFiles = folder.listFiles();
|
|
|
|
int pages = listOfFiles.length / filesPerPage;
|
|
int currPage = currentPage;
|
|
if(currPage > pages) {
|
|
currPage = 0;
|
|
}
|
|
|
|
for(int i = currPage * filesPerPage; i < (currPage * filesPerPage) + filesPerPage; i++) {
|
|
|
|
TextComponent schematics = new TextComponent(listOfFiles[i].toString());
|
|
schematics.setColor(ChatColor.AQUA);
|
|
schematics.setBold(true);
|
|
|
|
schematics.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Schematic benutzen...").create()));
|
|
schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "")); //COMMAND MISSING
|
|
|
|
player.spigot().sendMessage(schematics);
|
|
|
|
|
|
TextComponent nextPage = new TextComponent("Naechste Seite");
|
|
nextPage.setColor(ChatColor.RED);
|
|
|
|
nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Naechste Seite...").create()));
|
|
nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "")); //COMMAND MISSING
|
|
|
|
player.spigot().sendMessage(nextPage);
|
|
|
|
}
|
|
}
|
|
|
|
public static void sendPlayerSchematicList(int currentPage, int filesPerPage, Player player, SchematicType schematicType) {
|
|
List<Schematic> preSchematicList = Schematic.getSchemsAccessibleByUser(player.getUniqueId());
|
|
List<Schematic> schematicList = new ArrayList<>();
|
|
for(Schematic s : preSchematicList) {
|
|
if(s.getSchemType() == schematicType)
|
|
schematicList.add(s);
|
|
}
|
|
|
|
if(schematicList.isEmpty()) {
|
|
player.sendMessage(FightSystem.PREFIX + "§cDu hast noch keine Schematic(s)!");
|
|
return;
|
|
}
|
|
|
|
int pages;
|
|
|
|
double doublePages = (Double.valueOf(schematicList.size()) / Double.valueOf(filesPerPage));
|
|
int intPages = schematicList.size() / filesPerPage;
|
|
|
|
if(schematicList.size() <= filesPerPage) {
|
|
pages = 1;
|
|
} else if(doublePages > intPages) {
|
|
pages = (intPages + 1);
|
|
} else
|
|
pages = intPages;
|
|
|
|
int currPage = currentPage;
|
|
|
|
if(currPage >= pages) return;
|
|
|
|
player.sendMessage("§5======§8[§dSeite " + (currentPage + 1) + " §7/ §d" + pages + " §7| §d" + schematicList.size() + " Schematic(s)§8]§5======");
|
|
|
|
for(int i = currPage * filesPerPage; i < (currPage * filesPerPage) + filesPerPage; i++) {
|
|
if(schematicList.size() <= i) break;
|
|
|
|
Schematic schematic = schematicList.get(i);
|
|
|
|
TextComponent schematics = new TextComponent("§b" + schematic.getSchemName());
|
|
schematics.setBold(true);
|
|
|
|
schematics.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Schematic benutzen...").create()));
|
|
schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/schem info " + schematic.getSchemName()));
|
|
|
|
player.spigot().sendMessage(schematics);
|
|
}
|
|
|
|
if(pages <= 1) return;
|
|
|
|
if(currPage == 0) {
|
|
TextComponent nextPage = new TextComponent("Nächste Seite >>");
|
|
nextPage.setColor(ChatColor.RED);
|
|
nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
|
|
nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/schem list 1"));
|
|
player.spigot().sendMessage(nextPage);
|
|
} else if((currPage + 1) == pages) {
|
|
TextComponent beforePage = new TextComponent("<< Vorherige Seite");
|
|
beforePage.setColor(ChatColor.RED);
|
|
beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
|
|
beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/schem list " + (currPage - 1)));
|
|
player.spigot().sendMessage(beforePage);
|
|
} else {
|
|
TextComponent beforePage = new TextComponent("<< Seite ");
|
|
beforePage.setColor(ChatColor.RED);
|
|
beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
|
|
beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/schem list " + (currPage - 1)));
|
|
|
|
TextComponent nextPage = new TextComponent(">>");
|
|
nextPage.setColor(ChatColor.RED);
|
|
nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
|
|
nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/schem list " + (currPage + 1)));
|
|
|
|
beforePage.addExtra(nextPage);
|
|
player.spigot().sendMessage(beforePage);
|
|
}
|
|
}
|
|
|
|
|
|
}
|