13
0

New config format, usage of new apis #95

Zusammengeführt
Lixfel hat 2 Commits von configRefactoring nach master 2021-12-02 14:50:56 +01:00 zusammengeführt
15 geänderte Dateien mit 228 neuen und 402 gelöschten Zeilen

Datei anzeigen

@ -33,7 +33,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>steamwar</groupId> <groupId>steamwar</groupId>
<artifactId>SchematicSystem_API</artifactId> <artifactId>SchematicSystem_Core</artifactId>
<version>1.0</version> <version>1.0</version>
</dependency> </dependency>
<dependency> <dependency>

Datei anzeigen

@ -24,18 +24,13 @@ import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import de.steamwar.sql.NoClipboardException;
import de.steamwar.sql.Schematic;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.IOException;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.logging.Level;
class CheckSchemType_15 { public class CheckSchemType15 implements CheckSchemType.ICheckSchemType {
private static final Set<Material> INVENTORY = EnumSet.of( private static final Set<Material> INVENTORY = EnumSet.of(
Material.BARREL, Material.BARREL,
Material.BLAST_FURNACE, Material.BLAST_FURNACE,
@ -89,19 +84,8 @@ class CheckSchemType_15 {
Material.GOLDEN_HORSE_ARMOR, Material.GOLDEN_HORSE_ARMOR,
Material.HONEY_BOTTLE); Material.HONEY_BOTTLE);
private CheckSchemType_15(){} @Override
public void autoCheck(AutoCheckResult result, Clipboard clipboard) {
static AutoCheckResult autoCheck(Schematic schematic, ICheckSchemType type) {
AutoCheckResult result = new AutoCheckResult(type);
Clipboard clipboard;
try {
clipboard = schematic.load();
} catch (IOException | NoClipboardException e) {
result.setErrorLoadingSchematic();
Bukkit.getLogger().log(Level.SEVERE, "Schematic could not be loaded", e);
return result;
}
BlockVector3 dimensions = clipboard.getDimensions(); BlockVector3 dimensions = clipboard.getDimensions();
result.setLength(dimensions.getBlockX()); result.setLength(dimensions.getBlockX());
result.setHeight(dimensions.getBlockY()); result.setHeight(dimensions.getBlockY());
@ -111,11 +95,7 @@ class CheckSchemType_15 {
BlockVector3 min = region.getMinimumPoint(); BlockVector3 min = region.getMinimumPoint();
BlockVector3 max = region.getMaximumPoint(); BlockVector3 max = region.getMaximumPoint();
int tnt = 0;
int slime = 0;
int dispenser = 0;
int blocks = 0; int blocks = 0;
for(int x = min.getBlockX(); x <= max.getBlockX(); x++){ for(int x = min.getBlockX(); x <= max.getBlockX(); x++){
for(int y = min.getBlockY(); y <= max.getBlockY(); y++){ for(int y = min.getBlockY(); y <= max.getBlockY(); y++){
for(int z = min.getBlockZ(); z <= max.getBlockZ(); z++){ for(int z = min.getBlockZ(); z <= max.getBlockZ(); z++){
@ -126,15 +106,6 @@ class CheckSchemType_15 {
result.checkMaterial(blockMaterial.name()); result.checkMaterial(blockMaterial.name());
if(blockMaterial == Material.TNT || blockMaterial == Material.OBSIDIAN)
tnt++;
if(blockMaterial == Material.SLIME_BLOCK || blockMaterial == Material.HONEY_BLOCK || blockMaterial == Material.BEDROCK)
slime++;
if(blockMaterial == Material.DISPENSER)
dispenser++;
if(blockMaterial != Material.AIR) if(blockMaterial != Material.AIR)
blocks++; blocks++;
@ -144,15 +115,10 @@ class CheckSchemType_15 {
} }
} }
result.setTNT(tnt);
result.setSlime(slime);
result.setDispenser(dispenser);
result.setBlocks(blocks); result.setBlocks(blocks);
return result;
} }
private static void checkInventory(AutoCheckResult result, BaseBlock block, Material blockMaterial){ private static void checkInventory(AutoCheckResult result, BaseBlock block, Material blockMaterial) {
CompoundTag nbt = block.getNbtData(); CompoundTag nbt = block.getNbtData();
if(nbt == null){ if(nbt == null){
result.defunctNbt(blockMaterial.name()); result.defunctNbt(blockMaterial.name());

Datei anzeigen

@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>SchematicSystem_12</artifactId> <artifactId>SchematicSystem_8</artifactId>
<version>1.0</version> <version>1.0</version>
<parent> <parent>
@ -34,9 +34,9 @@
<dependency> <dependency>
<groupId>steamwar</groupId> <groupId>steamwar</groupId>
<artifactId>Spigot</artifactId> <artifactId>Spigot</artifactId>
<version>1.12</version> <version>1.8</version>
<scope>system</scope> <scope>system</scope>
<systemPath>${main.basedir}/lib/Spigot-1.12.jar</systemPath> <systemPath>${main.basedir}/lib/Spigot-1.8.jar</systemPath>
</dependency> </dependency>
<dependency> <dependency>
<groupId>steamwar</groupId> <groupId>steamwar</groupId>
@ -47,7 +47,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>steamwar</groupId> <groupId>steamwar</groupId>
<artifactId>SchematicSystem_API</artifactId> <artifactId>SchematicSystem_Core</artifactId>
<version>1.0</version> <version>1.0</version>
</dependency> </dependency>
</dependencies> </dependencies>

Datei anzeigen

@ -24,19 +24,14 @@ import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.Region;
import de.steamwar.sql.NoClipboardException;
import de.steamwar.sql.Schematic;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import java.io.IOException;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.logging.Level;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
class CheckSchemType_12 { public class CheckSchemType8 implements CheckSchemType.ICheckSchemType {
private static final int TNT = Material.TNT.getId(); private static final int TNT = Material.TNT.getId();
private static final int SLIME = Material.SLIME_BLOCK.getId(); private static final int SLIME = Material.SLIME_BLOCK.getId();
private static final int OBSIDIAN = Material.OBSIDIAN.getId(); private static final int OBSIDIAN = Material.OBSIDIAN.getId();
@ -45,38 +40,23 @@ class CheckSchemType_12 {
private static final int AIR = Material.AIR.getId(); private static final int AIR = Material.AIR.getId();
private static final int JUKEBOX = Material.JUKEBOX.getId(); private static final int JUKEBOX = Material.JUKEBOX.getId();
private static final int CHEST = Material.CHEST.getId(); private static final int CHEST = Material.CHEST.getId();
private static final Set<Integer> INVENTORY; private static final Set<Integer> INVENTORY = new HashSet<>();
private static final Set<Material> FLOWERS; private static final Set<Material> FLOWERS;
static{ static{
Set<Integer> inventory = new HashSet<>(); INVENTORY.add(CHEST);
inventory.add(CHEST); INVENTORY.add(Material.TRAPPED_CHEST.getId());
inventory.add(Material.TRAPPED_CHEST.getId()); INVENTORY.add(Material.HOPPER.getId());
inventory.add(Material.HOPPER.getId()); INVENTORY.add(Material.FURNACE.getId());
inventory.add(Material.FURNACE.getId()); INVENTORY.add(Material.BURNING_FURNACE.getId());
inventory.add(Material.BURNING_FURNACE.getId()); INVENTORY.add(JUKEBOX); //RecordItem
inventory.add(JUKEBOX); //RecordItem INVENTORY.add(DISPENSER);
inventory.add(DISPENSER); INVENTORY.add(Material.DROPPER.getId());
inventory.add(Material.DROPPER.getId()); INVENTORY.add(Material.ANVIL.getId());
inventory.add(Material.ANVIL.getId()); INVENTORY.add(Material.BREWING_STAND.getId());
inventory.add(Material.BREWING_STAND.getId()); for(int i = 219; i <= 234; i++) {
inventory.add(Material.BLACK_SHULKER_BOX.getId()); INVENTORY.add(i); // ShulkerBoxes
inventory.add(Material.RED_SHULKER_BOX.getId()); }
inventory.add(Material.WHITE_SHULKER_BOX.getId());
inventory.add(Material.ORANGE_SHULKER_BOX.getId());
inventory.add(Material.BLUE_SHULKER_BOX.getId());
inventory.add(Material.LIGHT_BLUE_SHULKER_BOX.getId());
inventory.add(Material.YELLOW_SHULKER_BOX.getId());
inventory.add(Material.GREEN_SHULKER_BOX.getId());
inventory.add(Material.BROWN_SHULKER_BOX.getId());
inventory.add(Material.CYAN_SHULKER_BOX.getId());
inventory.add(Material.GRAY_SHULKER_BOX.getId());
inventory.add(Material.SILVER_SHULKER_BOX.getId());
inventory.add(Material.LIME_SHULKER_BOX.getId());
inventory.add(Material.MAGENTA_SHULKER_BOX.getId());
inventory.add(Material.PINK_SHULKER_BOX.getId());
inventory.add(Material.PURPLE_SHULKER_BOX.getId());
INVENTORY = inventory;
Set<Material> flowers = new HashSet<>(); Set<Material> flowers = new HashSet<>();
flowers.add(Material.YELLOW_FLOWER); flowers.add(Material.YELLOW_FLOWER);
@ -88,19 +68,8 @@ class CheckSchemType_12 {
FLOWERS = flowers; FLOWERS = flowers;
} }
private CheckSchemType_12(){} @Override
public void autoCheck(AutoCheckResult result, Clipboard clipboard) {
static AutoCheckResult autoCheck(Schematic schematic, ICheckSchemType type) {
AutoCheckResult result = new AutoCheckResult(type);
Clipboard clipboard;
try {
clipboard = schematic.load();
} catch (IOException | NoClipboardException e) {
Bukkit.getLogger().log(Level.SEVERE, "Schematic could not be loaded", e);
result.setErrorLoadingSchematic();
return result;
}
Vector dimensions = clipboard.getDimensions(); Vector dimensions = clipboard.getDimensions();
result.setLength(dimensions.getBlockX()); result.setLength(dimensions.getBlockX());
result.setHeight(dimensions.getBlockY()); result.setHeight(dimensions.getBlockY());
@ -110,47 +79,29 @@ class CheckSchemType_12 {
Vector min = region.getMinimumPoint(); Vector min = region.getMinimumPoint();
Vector max = region.getMaximumPoint(); Vector max = region.getMaximumPoint();
int tnt = 0;
int slime = 0;
int blocks = 0; int blocks = 0;
int dispenser = 0;
for(int x = min.getBlockX(); x <= max.getBlockX(); x++){ for(int x = min.getBlockX(); x <= max.getBlockX(); x++){
for(int y = min.getBlockY(); y <= max.getBlockY(); y++){ for(int y = min.getBlockY(); y <= max.getBlockY(); y++){
for(int z = min.getBlockZ(); z <= max.getBlockZ(); z++){ for(int z = min.getBlockZ(); z <= max.getBlockZ(); z++){
final BaseBlock block = clipboard.getBlock(new Vector(x, y, z)); final BaseBlock block = clipboard.getBlock(new Vector(x, y, z));
final int blockId = block.getId(); final int blockId = block.getId();
if(blockId == TNT || blockId == OBSIDIAN) result.checkMaterial(Material.getMaterial(blockId).name());
tnt++;
if(blockId == SLIME || blockId == BEDROCK)
slime++;
if(blockId == DISPENSER)
dispenser++;
if (blockId != AIR) if (blockId != AIR)
blocks++; blocks++;
if(INVENTORY.contains(blockId)){ if(INVENTORY.contains(blockId)){
checkInventory(result, block, blockId, type); checkInventory(result, block, blockId);
} }
result.checkMaterial(Material.getMaterial(blockId).name());
} }
} }
} }
result.setTNT(tnt);
result.setSlime(slime);
result.setDispenser(dispenser);
result.setBlocks(blocks); result.setBlocks(blocks);
return result;
} }
private static void checkInventory(AutoCheckResult result, BaseBlock block, int blockId, ICheckSchemType type){ private static void checkInventory(AutoCheckResult result, BaseBlock block, int blockId) {
CompoundTag nbt = block.getNbtData(); CompoundTag nbt = block.getNbtData();
if(nbt == null){ if(nbt == null){
result.defunctNbt(Material.getMaterial(blockId).name()); result.defunctNbt(Material.getMaterial(blockId).name());

Datei anzeigen

@ -1,38 +0,0 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 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.schematicsystem;
import java.util.List;
interface ICheckSchemType {
String getName();
int getWidth();
int getHeight();
int getDepth();
int getMaxDispenserItems();
int getMaxDispenser();
int getMaxTNT();
int getMaxTNTSlime();
int getMaxSlime();
int getMaxBlocks();
List<String> getForbidden();
}

Datei anzeigen

@ -14,8 +14,9 @@
<main.basedir>${project.basedir}/..</main.basedir> <main.basedir>${project.basedir}/..</main.basedir>
</properties> </properties>
<artifactId>SchematicSystem_API</artifactId> <artifactId>SchematicSystem_Core</artifactId>
<version>1.0</version> <version>1.0</version>
<packaging>jar</packaging>
<build> <build>
<sourceDirectory>src</sourceDirectory> <sourceDirectory>src</sourceDirectory>
@ -30,13 +31,39 @@
</resources> </resources>
</build> </build>
<repositories>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.org</url>
</repository>
</repositories>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>steamwar</groupId> <groupId>steamwar</groupId>
<artifactId>Spigot</artifactId> <artifactId>Spigot</artifactId>
<version>1.12</version> <version>1.15</version>
<scope>system</scope> <scope>system</scope>
<systemPath>${main.basedir}/lib/Spigot-1.12.jar</systemPath> <systemPath>${main.basedir}/lib/Spigot-1.15.jar</systemPath>
</dependency>
<dependency>
<groupId>steamwar</groupId>
<artifactId>WorldEdit</artifactId>
<version>1.15</version>
<scope>system</scope>
<systemPath>${main.basedir}/lib/WorldEdit-1.15.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.13</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

Datei anzeigen

@ -19,54 +19,37 @@
package de.steamwar.schematicsystem; package de.steamwar.schematicsystem;
import de.steamwar.core.Core;
import java.util.*; import java.util.*;
public class AutoCheckResult { public class AutoCheckResult {
private final ICheckSchemType type; private final CheckSchemType type;
private final boolean noChecksInThisVersion; private boolean errorLoadingSchematic = false;
private boolean wrongVersionException = false; // Schematic nicht in der Version ladbar
private boolean errorLoadingSchematic = false; // Schematic irgendwie invalide
private int width = 0; private int width = 0;
private int height = 0; private int height = 0;
private int length = 0; private int length = 0;
private int tnt = 0;
private int slime = 0;
private int dispenser = 0;
private int blocks = 0; private int blocks = 0;
private Map<String, Integer> forbiddenMaterials = new HashMap<>(); // Anzahl verbotener Blöcke nach Material private final Map<Set<String>, Integer> limitedMaterials;
private Map<String, Integer> defunctNbt = new HashMap<>(); // Anzahl an defekten NBT-Blöcken nach Materialname private final Map<String, Integer> defunctNbt = new HashMap<>(); // Amount of defect NBT-Blocks with material name
private int records = 0; // Gefundene Schallplatten
private Map<String, Map<String, Integer>> forbiddenItems = new HashMap<>(); // Anzahl verbotener Items nach Inventartyp
private Map<String, Map<String, Integer>> itemsWithTag = new HashMap<>(); // Anzahl an Items mit Tag nach Inventartyp
private int tooManyDispenserItems = 0; // Gefundene Überschreitungen von DispenserItems
AutoCheckResult(ICheckSchemType type){ private int records = 0; // Amount of found records
private final Map<String, Map<String, Integer>> forbiddenItems = new HashMap<>(); // Amount forbidden items per inventory block
private final Map<String, Map<String, Integer>> itemsWithTag = new HashMap<>(); // Amount of items with forbidden nbt tags
private int tooManyDispenserItems = 0; // Amount of dispensers with too many items
public AutoCheckResult(CheckSchemType type) {
this.type = type; this.type = type;
noChecksInThisVersion = false; this.limitedMaterials = type.getLimits();
} }
AutoCheckResult(){ public Collection<String> errors() {
type = null;
noChecksInThisVersion = true;
}
public Collection<String> errors(){
List<String> errors = new LinkedList<>(); List<String> errors = new LinkedList<>();
if(noChecksInThisVersion){
errors.add("In der 1." + Core.getVersion() + " können keine Schematics eingesendet werden");
return errors;
}
if(wrongVersionException)
errors.add("Diese Schematic kann nicht in dieser Version geändert werden");
if(errorLoadingSchematic) if(errorLoadingSchematic)
errors.add("Die Schematic konnte nicht geladen werden"); errors.add("Die Schematic konnte nicht geladen werden");
@ -78,22 +61,15 @@ public class AutoCheckResult {
if(height > type.getHeight()) if(height > type.getHeight())
errors.add("Die Schematic ist zu hoch (" + height + " > " + type.getHeight() + ")"); errors.add("Die Schematic ist zu hoch (" + height + " > " + type.getHeight() + ")");
int errorTNTSlime = slime + tnt; for(Map.Entry<Set<String>, Integer> entry : limitedMaterials.entrySet()) {
if(type.getMaxTNT() != 0 && tnt > type.getMaxTNT()) if(entry.getValue() < 0)
errors.add("Zu viele TNT-Blöcke (" + tnt + " > " + type.getMaxTNT() + ")"); errors.add((entry.getKey().size() == 1 ? "Der Block " : "Die Blockkombination") + String.join(" ", entry.getKey()) + " wurde " + (-entry.getValue()) + " mal zu häufig verbaut");
if(type.getMaxSlime() != 0 && slime > type.getMaxSlime()) }
errors.add("Zu viele Schleim/Honig-Blöcke (" + slime + " > " + type.getMaxSlime() + ")");
if(type.getMaxDispenser() != 0 && dispenser > type.getMaxDispenser())
errors.add("Zu viele Werfer (" + dispenser + " > " + type.getMaxDispenser() + ")");
if(type.getMaxTNTSlime() != 0 && errorTNTSlime > type.getMaxTNTSlime())
errors.add("Zu viel Schleim+TNT" + errorTNTSlime + " > " + type.getMaxTNTSlime() + ")");
if(type.getMaxBlocks() != 0 && blocks > type.getMaxBlocks()) { if(type.getMaxBlocks() != 0 && blocks > type.getMaxBlocks()) {
errors.add("Zu viele Blöcke (" + blocks + " > " + type.getMaxBlocks() + ")"); errors.add("Zu viele Blöcke (" + blocks + " > " + type.getMaxBlocks() + ")");
} }
for(Map.Entry<String, Integer> block : forbiddenMaterials.entrySet())
errors.add("Der Block " + block.getKey() + " ist verboten (" + block.getValue() + " verbaut)");
if(records > 0) if(records > 0)
errors.add("Keine Schallplatten erlaubt (" + records + " gefunden)"); errors.add("Keine Schallplatten erlaubt (" + records + " gefunden)");
for(Map.Entry<String, Map<String, Integer>> block : forbiddenItems.entrySet()) for(Map.Entry<String, Map<String, Integer>> block : forbiddenItems.entrySet())
@ -137,23 +113,15 @@ public class AutoCheckResult {
this.height = height; this.height = height;
} }
void setTNT(int tnt){
this.tnt = tnt;
}
void setSlime(int slime){
this.slime = slime;
}
void setDispenser(int dispenser){
this.dispenser = dispenser;
}
void setBlocks(int blocks) { void setBlocks(int blocks) {
this.blocks = blocks; this.blocks = blocks;
} }
void checkMaterial(String name){ void checkMaterial(String name){
assert type != null; for(Map.Entry<Set<String>, Integer> entry : limitedMaterials.entrySet()) {
if(type.getForbidden().contains(name)) if(entry.getKey().contains(name))
forbiddenMaterials.compute(name, (k, v) -> v == null ? 1 : v+1); entry.setValue(entry.getValue() - 1);
}
} }
void defunctNbt(String name){ void defunctNbt(String name){

Datei anzeigen

@ -0,0 +1,136 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 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.schematicsystem;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import de.steamwar.core.Core;
import de.steamwar.core.VersionDependent;
import de.steamwar.sql.NoClipboardException;
import de.steamwar.sql.Schematic;
import de.steamwar.sql.SchematicType;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.logging.Level;
public class CheckSchemType {
private static final Map<SchematicType, CheckSchemType> types = new HashMap<>();
private final int width;
private final int height;
private final int depth;
private final int maxDispenserItems;
private final Map<Set<String>, Integer> limits;
private final int maxBlocks;
private CheckSchemType(ConfigurationSection section) {
String name = section.getString("Schematic.Type");
width = section.getInt("Schematic.Size.x");
height = section.getInt("Schematic.Size.y");
depth = section.getInt("Schematic.Size.z");
maxDispenserItems = section.getInt("Schematic.MaxDispenserItems", 128);
maxBlocks = section.getInt("Schematic.MaxBlocks", 0);
limits = new HashMap<>();
for(Map<?, ?> entry : section.getMapList("Schematic.Limited")) {
int amount = (Integer) entry.get("Amount");
Set<String> materials = new HashSet<>((List<String>) entry.get("Materials"));
if(amount == 0) {
materials.forEach(material -> limits.put(Collections.singleton(material), 0));
} else {
limits.put(materials, amount);
}
}
types.put(SchematicType.fromDB(name.toLowerCase()), this);
types.put(SchematicType.fromDB("c" + name.toLowerCase()), this);
}
static {
File folder = new File(Core.getInstance().getDataFolder().getParentFile(), "FightSystem");
if(folder.exists()) {
for(File configFile : folder.listFiles((file, name) -> name.endsWith(".yml") && !name.endsWith(".kits.yml"))) {
YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile);
if (!config.isList("CheckQuestions"))
continue;
new CheckSchemType(config);
}
}
}
public static CheckSchemType get(SchematicType type){
return types.get(type);
}
public AutoCheckResult autoCheck(Schematic schematic) {
AutoCheckResult result = new AutoCheckResult(this);
Clipboard clipboard;
try {
clipboard = schematic.load();
} catch (IOException | NoClipboardException e) {
Bukkit.getLogger().log(Level.SEVERE, "Schematic could not be loaded", e);
result.setErrorLoadingSchematic();
return result;
}
impl.autoCheck(result, clipboard);
return result;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public int getDepth() {
return depth;
}
public int getMaxDispenserItems() {
return maxDispenserItems;
}
public int getMaxBlocks(){
return maxBlocks;
}
public Map<Set<String>, Integer> getLimits() {
return new HashMap<>(limits);
}
public static final ICheckSchemType impl = VersionDependent.getVersionImpl(SchematicSystem.getInstance());
public interface ICheckSchemType {
void autoCheck(AutoCheckResult result, Clipboard clipboard);
}
}

Datei anzeigen

@ -20,23 +20,21 @@
package de.steamwar.schematicsystem; package de.steamwar.schematicsystem;
import de.steamwar.schematicsystem.commands.SchematicCommand; import de.steamwar.schematicsystem.commands.SchematicCommand;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.util.logging.Level;
public class SchematicSystem extends JavaPlugin { public class SchematicSystem extends JavaPlugin {
public static final String PREFIX = "§eSchematic§8» §7"; public static final String PREFIX = "§eSchematic§8» §7";
private static SchematicSystem instance;
@Override @Override
public void onEnable() { public void onEnable() {
if (!new File(getDataFolder(), "config.yml").exists()) { instance = this;
saveDefaultConfig();
Bukkit.getLogger().log(Level.SEVERE, "config.yml erstellt und geladen!");
}
CheckSchemType.init(getConfig());
getCommand("schem").setExecutor(new SchematicCommand()); getCommand("schem").setExecutor(new SchematicCommand());
} }
public static SchematicSystem getInstance() {
return instance;
}
} }

Datei anzeigen

@ -60,12 +60,6 @@ class GUI {
inv.setItem(0, SWItem.getDye(1), (byte) 1, "§eLöschen", click -> { inv.setItem(0, SWItem.getDye(1), (byte) 1, "§eLöschen", click -> {
schem.remove(); schem.remove();
List<CheckedSchematic> checkedSchematics = CheckedSchematic.getLastDeclined(p.getUniqueId());
for(CheckedSchematic checkedSchematic : checkedSchematics) {
if(checkedSchematic.getSchemOwner() == schem.getSchemOwner() &&
checkedSchematic.getSchemName().equals(schem.getSchemName()))
checkedSchematic.remove();
}
p.sendMessage(SchematicSystem.PREFIX + "Schematic §e" + schem.getSchemName() + " §7gelöscht"); p.sendMessage(SchematicSystem.PREFIX + "Schematic §e" + schem.getSchemName() + " §7gelöscht");
p.closeInventory(); p.closeInventory();
}); });

Datei anzeigen

@ -11,4 +11,3 @@ commands:
- schematic - schematic
- /schematic - /schematic
- /schem - /schem
check:

Datei anzeigen

@ -16,19 +16,8 @@
<artifactId>SchematicSystem_Main</artifactId> <artifactId>SchematicSystem_Main</artifactId>
<version>1.0</version> <version>1.0</version>
<packaging>jar</packaging>
<build> <build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
<exclude>**/*.kt</exclude>
</excludes>
</resource>
</resources>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
@ -47,23 +36,7 @@
<finalName>schematicsystem</finalName> <finalName>schematicsystem</finalName>
</build> </build>
<repositories>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.org</url>
</repository>
</repositories>
<dependencies> <dependencies>
<dependency>
<groupId>steamwar</groupId>
<artifactId>Spigot</artifactId>
<version>1.15</version>
<scope>system</scope>
<systemPath>${main.basedir}/lib/Spigot-1.15.jar</systemPath>
</dependency>
<dependency> <dependency>
<groupId>steamwar</groupId> <groupId>steamwar</groupId>
<artifactId>SchematicSystem_15</artifactId> <artifactId>SchematicSystem_15</artifactId>
@ -72,25 +45,15 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>steamwar</groupId> <groupId>steamwar</groupId>
<artifactId>SchematicSystem_12</artifactId> <artifactId>SchematicSystem_8</artifactId>
<version>1.0</version> <version>1.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>steamwar</groupId> <groupId>steamwar</groupId>
<artifactId>SchematicSystem_API</artifactId> <artifactId>SchematicSystem_Core</artifactId>
<version>1.0</version> <version>1.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.13</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

Datei anzeigen

@ -1,138 +0,0 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 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.schematicsystem;
import de.steamwar.core.VersionedCallable;
import de.steamwar.sql.Schematic;
import de.steamwar.sql.SchematicType;
import org.bukkit.configuration.ConfigurationSection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CheckSchemType implements ICheckSchemType {
private static final Map<SchematicType, CheckSchemType> types = new HashMap<>();
private final String name;
private final int width;
private final int height;
private final int depth;
private final int maxDispenserItems;
private final List<String> forbiddenMaterials;
private final int maxTNT;
private final int maxSlime;
private final int maxTNTSlime;
private final int maxDispenser;
private final int maxBlocks;
private CheckSchemType(ConfigurationSection section) {
name = section.getName();
width = section.getInt("width");
height = section.getInt("height");
depth = section.getInt("depth");
maxTNT = section.getInt("maxTNT");
maxSlime = section.getInt("maxSlime");
maxTNTSlime = section.getInt("maxTNTSlime");
maxDispenser = section.getInt("maxDispenser");
maxDispenserItems = section.getInt("maxDispenserItems");
maxBlocks = section.getInt("maxBlocks");
forbiddenMaterials = section.getStringList("forbiddenMaterials");
types.put(SchematicType.fromDB(name), this);
types.put(SchematicType.fromDB("c" + name), this);
}
static void init(ConfigurationSection config){
ConfigurationSection types = config.getConfigurationSection("Schematics");
for(String sectionName : types.getKeys(false))
new CheckSchemType(types.getConfigurationSection(sectionName));
}
public static CheckSchemType get(SchematicType type){
return types.get(type);
}
public AutoCheckResult autoCheck(Schematic schematic) {
return VersionedCallable.call(new VersionedCallable<>(AutoCheckResult::new, 8),
new VersionedCallable<>(() -> CheckSchemType_12.autoCheck(schematic, this), 12),
new VersionedCallable<>(AutoCheckResult::new, 13),
new VersionedCallable<>(() -> CheckSchemType_15.autoCheck(schematic, this), 15));
}
@Override
public String getName() {
return name;
}
@Override
public int getWidth() {
return width;
}
@Override
public int getHeight() {
return height;
}
@Override
public int getDepth() {
return depth;
}
@Override
public int getMaxDispenserItems() {
return maxDispenserItems;
}
@Override
public int getMaxDispenser() {
return maxDispenser;
}
@Override
public int getMaxTNT() {
return maxTNT;
}
@Override
public int getMaxTNTSlime() {
return maxTNTSlime;
}
@Override
public int getMaxSlime() {
return maxSlime;
}
@Override
public int getMaxBlocks(){
return maxBlocks;
}
@Override
public List<String> getForbidden() {
return forbiddenMaterials;
}
}

Datei anzeigen

@ -30,10 +30,10 @@
</build> </build>
<modules> <modules>
<module>SchematicSystem_12</module> <module>SchematicSystem_8</module>
<module>SchematicSystem_15</module> <module>SchematicSystem_15</module>
<module>SchematicSystem_API</module>
<module>SchematicSystem_Main</module> <module>SchematicSystem_Main</module>
<module>SchematicSystem_Core</module>
</modules> </modules>
<dependencies> <dependencies>