Compare commits
No commits in common. "master" and "spigot-1.9" have entirely different histories.
master
...
spigot-1.9
21 changed files with 1367 additions and 1636 deletions
|
@ -18,11 +18,3 @@ Dependencies for optional integrations
|
||||||
* [Vault](http://dev.bukkit.org/bukkit-plugins/vault/)
|
* [Vault](http://dev.bukkit.org/bukkit-plugins/vault/)
|
||||||
* [Multiworld](http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/)
|
* [Multiworld](http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/)
|
||||||
* [LogBlock](http://dev.bukkit.org/bukkit-plugins/logblock/)
|
* [LogBlock](http://dev.bukkit.org/bukkit-plugins/logblock/)
|
||||||
|
|
||||||
Building
|
|
||||||
--------
|
|
||||||
Download and install xAuth and Multiworld into the local `repo` repository with a command like so:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mvn install:install-file -Dfile=xAuth-2.0.26.jar -Dpackaging=jar -DlocalRepositoryPath=repo -DgroupId=de.luricos.bukkit -DartifactId=xAuth -Dversion=2.0.26
|
|
||||||
```
|
|
116
pom.xml
116
pom.xml
|
@ -1,16 +1,15 @@
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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>
|
||||||
<groupId>de.jaschastarke</groupId>
|
<groupId>de.jaschastarke</groupId>
|
||||||
<artifactId>LimitedCreative</artifactId>
|
<artifactId>LimitedCreative</artifactId>
|
||||||
<name>LimitedCreative</name>
|
<name>LimitedCreative</name>
|
||||||
<version>2.5</version>
|
<version>2.3-SNAPSHOT</version>
|
||||||
<url>https://github.com/possi/LimitedCreative</url>
|
<url>https://github.com/possi/LimitedCreative</url>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<plib.version>1.4-SNAPSHOT</plib.version>
|
<plib.version>1.4-SNAPSHOT</plib.version>
|
||||||
<bukkit.version>1.12.2-R0.1-SNAPSHOT</bukkit.version>
|
<bukkit.version>1.9.4-R0.1-SNAPSHOT</bukkit.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<scm>
|
<scm>
|
||||||
|
@ -37,25 +36,20 @@
|
||||||
<!-- Possible public Maven Repository, containing LimitedCreative builds and other dependencies without own rep.
|
<!-- Possible public Maven Repository, containing LimitedCreative builds and other dependencies without own rep.
|
||||||
like AuthMe, etc.
|
like AuthMe, etc.
|
||||||
Supports http only -->
|
Supports http only -->
|
||||||
<!-- <repository> - offline
|
<repository>
|
||||||
<id>de-jas-rep</id>
|
<id>de-jas-rep</id>
|
||||||
<url>http://repo.ja-s.de/mvn</url>
|
<url>http://repo.ja-s.de/mvn</url>
|
||||||
</repository> -->
|
|
||||||
<!-- Local repository for plugins without a repo -->
|
|
||||||
<repository>
|
|
||||||
<id>localRepo</id>
|
|
||||||
<url>file://${project.basedir}/repo</url>
|
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<!-- Official (Craft-)Bukkit repository -->
|
<!-- (Craft-)Bukkit repository -->
|
||||||
<repository>
|
<repository>
|
||||||
<id>spigot-repo</id>
|
<id>spigot-repo</id>
|
||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
<url>http://repo.bukkit.org/content/groups/public</url>
|
||||||
</repository>
|
</repository>
|
||||||
<!-- Official WorldGuard and WorldEdit repository -->
|
<!-- Official WorldGuard and WorldEdit repository -->
|
||||||
<repository>
|
<repository>
|
||||||
<id>sk89q-mvn2</id>
|
<id>sk89q-mvn2</id>
|
||||||
<url>https://maven.enginehub.org/repo/</url>
|
<url>http://mvn2.sk89q.com/repo</url>
|
||||||
</repository>
|
</repository>
|
||||||
<!-- Official Multiverse repository -->
|
<!-- Official Multiverse repository -->
|
||||||
<repository>
|
<repository>
|
||||||
|
@ -65,37 +59,20 @@
|
||||||
<!-- Official xAuth repository; it is no good! we keep our own dep-files of it - ->
|
<!-- Official xAuth repository; it is no good! we keep our own dep-files of it - ->
|
||||||
<repository>
|
<repository>
|
||||||
<id>luricos.de-repo</id>
|
<id>luricos.de-repo</id>
|
||||||
<url>http://repo.luricos.de/repository/bukkit-plugins/</url>
|
<url>http://repo.luricos.de/bukkit-plugins/</url>
|
||||||
</repository><!- - It points to dependencies that don't exist anymore -->
|
</repository><!- - -->
|
||||||
<!-- Official LogBlock repository -->
|
<!-- Official LogBlock repository -->
|
||||||
<repository>
|
<repository>
|
||||||
<id>md5</id>
|
<id>md5</id>
|
||||||
<url>http://repo.md-5.net/content/groups/public/</url>
|
<url>http://repo.md-5.net/content/groups/public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
<!-- Official AuthMe Reloaded repository -->
|
<!-- https://github.com/Hidendra/Plugin-Metrics/wiki/Usage -->
|
||||||
<repository>
|
<repository>
|
||||||
<id>codemc-repo</id>
|
<id>Plugin Metrics</id>
|
||||||
<url>https://repo.codemc.org/repository/maven-public/</url>
|
<url>http://repo.mcstats.org/content/repositories/public</url>
|
||||||
</repository>
|
|
||||||
<!-- Official CoreProtect repository -->
|
|
||||||
<repository>
|
|
||||||
<id>coreprotect-repo</id>
|
|
||||||
<url>http://maven.playpro.com/</url>
|
|
||||||
</repository>
|
|
||||||
<!-- Official PermissionsEx repository -->
|
|
||||||
<repository>
|
|
||||||
<id>pex-repo</id>
|
|
||||||
<url>https://repo.glaremasters.me/repository/permissionsex/</url>
|
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<pluginRepositories>
|
|
||||||
<pluginRepository>
|
|
||||||
<id>de-jas-rep</id>
|
|
||||||
<url>http://repo.ja-s.de/mvn</url>
|
|
||||||
</pluginRepository>
|
|
||||||
</pluginRepositories>
|
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>de.jaschastarke</groupId>
|
<groupId>de.jaschastarke</groupId>
|
||||||
|
@ -109,29 +86,28 @@
|
||||||
<version>${bukkit.version}</version>
|
<version>${bukkit.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- http://dl.bukkit.org/ -->
|
<!-- http://dev.bukkit.org/server-mods/worldguard/ -->
|
||||||
<groupId>org.bukkit.</groupId> <!-- Needed for WE integration -->
|
<groupId>com.sk89q</groupId>
|
||||||
<artifactId>bukkit</artifactId>
|
<artifactId>worldguard</artifactId>
|
||||||
<version>1.14.4-R0.1-SNAPSHOT</version>
|
<version>6.0.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- http://dev.bukkit.org/server-mods/worldguard/ -->
|
<!-- http://dev.bukkit.org/server-mods/worldedit/ -->
|
||||||
<groupId>com.sk89q.worldguard</groupId>
|
<groupId>com.sk89q</groupId>
|
||||||
<artifactId>worldguard-bukkit</artifactId>
|
<artifactId>worldedit</artifactId>
|
||||||
<version>7.0.0</version>
|
<version>6.0.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- http://dev.bukkit.org/server-mods/worldguard/ -->
|
<!-- http://dev.bukkit.org/server-mods/authme-reloaded/ -->
|
||||||
<groupId>com.sk89q.worldedit</groupId>
|
<groupId>uk.org.whoami</groupId>
|
||||||
<artifactId>worldedit-bukkit</artifactId>
|
<artifactId>authme</artifactId>
|
||||||
<version>7.0.0</version>
|
<version>2.9.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- http://dev.bukkit.org/server-mods/authme-reloaded/ -->
|
<!-- http://dev.bukkit.org/server-mods/authme-reloaded/ -->
|
||||||
<groupId>fr.xephi</groupId>
|
<groupId>fr.xephi</groupId>
|
||||||
<artifactId>authme</artifactId>
|
<artifactId>authme</artifactId>
|
||||||
<version>5.6.0-SNAPSHOT</version>
|
<version>3.0</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- http://dev.bukkit.org/server-mods/multiverse-core/ -->
|
<!-- http://dev.bukkit.org/server-mods/multiverse-core/ -->
|
||||||
|
@ -143,30 +119,19 @@
|
||||||
<!-- http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/ -->
|
<!-- http://dev.bukkit.org/bukkit-plugins/multiworld-v-2-0/ -->
|
||||||
<groupId>multiworld</groupId>
|
<groupId>multiworld</groupId>
|
||||||
<artifactId>multiworld</artifactId>
|
<artifactId>multiworld</artifactId>
|
||||||
<version>5.2.8</version>
|
<version>4.7.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- http://dev.bukkit.org/server-mods/xauth/ -->
|
<!-- http://dev.bukkit.org/server-mods/xauth/ -->
|
||||||
<groupId>de.luricos.bukkit</groupId>
|
<groupId>com.cypherx</groupId>
|
||||||
<artifactId>xAuth</artifactId>
|
<artifactId>xauth</artifactId>
|
||||||
<version>2.0.26</version>
|
<version>2.0.26</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- http://dev.bukkit.org/bukkit-plugins/coreprotect/ -->
|
<!-- https://github.com/Hidendra/Plugin-Metrics/wiki/Usage -->
|
||||||
<groupId>net.coreprotect</groupId>
|
<groupId>org.mcstats.bukkit</groupId>
|
||||||
<artifactId>coreprotect</artifactId>
|
<artifactId>metrics</artifactId>
|
||||||
<version>19.1</version>
|
<version>R8-SNAPSHOT</version>
|
||||||
</dependency>
|
|
||||||
<!-- https://mvnrepository.com/artifact/org.avaje/ebean -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.avaje</groupId>
|
|
||||||
<artifactId>ebean</artifactId>
|
|
||||||
<version>2.7.3</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bstats</groupId>
|
|
||||||
<artifactId>bstats-bukkit</artifactId>
|
|
||||||
<version>2.2.1</version>
|
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -179,10 +144,10 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.8.1</version>
|
<version>2.3.2</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.8</source>
|
<source>1.6</source>
|
||||||
<target>1.8</target>
|
<target>1.6</target>
|
||||||
<annotationProcessors>
|
<annotationProcessors>
|
||||||
<!-- Needed to fetch DocComments from Source -->
|
<!-- Needed to fetch DocComments from Source -->
|
||||||
<annotationProcessor>de.jaschastarke.maven.AnnotationProcessor</annotationProcessor>
|
<annotationProcessor>de.jaschastarke.maven.AnnotationProcessor</annotationProcessor>
|
||||||
|
@ -212,7 +177,6 @@
|
||||||
<param>MultiInv</param>
|
<param>MultiInv</param>
|
||||||
<param>Multiverse-Inventories</param>
|
<param>Multiverse-Inventories</param>
|
||||||
<param>Vault</param>
|
<param>Vault</param>
|
||||||
<param>CoreProtect</param>
|
|
||||||
</softdepend>
|
</softdepend>
|
||||||
<custom>
|
<custom>
|
||||||
<dev-url>http://dev.bukkit.org/server-mods/limited-creative/</dev-url>
|
<dev-url>http://dev.bukkit.org/server-mods/limited-creative/</dev-url>
|
||||||
|
@ -224,7 +188,7 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-shade-plugin</artifactId>
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
<version>3.2.4</version>
|
<version>2.0</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>package</phase>
|
<phase>package</phase>
|
||||||
|
@ -236,7 +200,7 @@
|
||||||
<artifactSet>
|
<artifactSet>
|
||||||
<includes>
|
<includes>
|
||||||
<include>de.jaschastarke:plib</include>
|
<include>de.jaschastarke:plib</include>
|
||||||
<include>org.bstats</include>
|
<include>org.mcstats.*:*</include>
|
||||||
</includes>
|
</includes>
|
||||||
</artifactSet>
|
</artifactSet>
|
||||||
<filters>
|
<filters>
|
||||||
|
@ -250,8 +214,8 @@
|
||||||
</filters>
|
</filters>
|
||||||
<relocations>
|
<relocations>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>org.bstats</pattern>
|
<pattern>org.mcstats</pattern>
|
||||||
<shadedPattern>de.jaschastarke.minecraft.limitedcreative.bstats</shadedPattern>
|
<shadedPattern>de.jaschastarke.minecraft.limitedcreative.metrics</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
</relocations>
|
</relocations>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -282,7 +246,7 @@
|
||||||
</goals>
|
</goals>
|
||||||
</pluginExecutionFilter>
|
</pluginExecutionFilter>
|
||||||
<action>
|
<action>
|
||||||
<ignore/>
|
<ignore></ignore>
|
||||||
</action>
|
</action>
|
||||||
</pluginExecution>
|
</pluginExecution>
|
||||||
</pluginExecutions>
|
</pluginExecutions>
|
||||||
|
|
|
@ -1,46 +1,70 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.mcstats.Metrics;
|
||||||
|
|
||||||
import de.jaschastarke.bukkit.lib.CoreModule;
|
import de.jaschastarke.bukkit.lib.CoreModule;
|
||||||
|
import de.jaschastarke.bukkit.tools.stats.IStatistics;
|
||||||
|
import de.jaschastarke.bukkit.tools.stats.PiwikStatistics;
|
||||||
import de.jaschastarke.modularize.IModule;
|
import de.jaschastarke.modularize.IModule;
|
||||||
import de.jaschastarke.modularize.ModuleEntry;
|
import de.jaschastarke.modularize.ModuleEntry;
|
||||||
import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
||||||
import org.bstats.bukkit.Metrics;
|
|
||||||
import org.bstats.charts.AdvancedPie;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
public class FeatureMetrics extends CoreModule<LimitedCreative> implements Listener {
|
public class FeatureMetrics extends CoreModule<LimitedCreative> implements Listener {
|
||||||
public FeatureMetrics(LimitedCreative plugin) {
|
public FeatureMetrics(LimitedCreative plugin) {
|
||||||
super(plugin);
|
super(plugin);
|
||||||
}
|
}
|
||||||
|
private IStatistics metric;
|
||||||
private Metrics bstats = null;
|
private Metrics mcstats = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
super.onEnable();
|
super.onEnable();
|
||||||
if (bstats == null) {
|
metric = new PiwikStatistics(plugin);
|
||||||
bstats = new Metrics(plugin, 10413);
|
if (mcstats == null) {
|
||||||
|
try {
|
||||||
|
mcstats = new Metrics(plugin);
|
||||||
|
|
||||||
bstats.addCustomChart(new AdvancedPie("module_usage", () -> {
|
Metrics.Graph moduleGraph = mcstats.createGraph("Module Usage");
|
||||||
HashMap<String, Integer> ret = new HashMap<>();
|
for (final ModuleEntry<IModule> mod : plugin.getModules()) {
|
||||||
for (final ModuleEntry<IModule> mod : plugin.getModules())
|
if (mod.getModule() instanceof CoreModule<?>) {
|
||||||
if (mod.getModule() instanceof CoreModule<?>)
|
moduleGraph.addPlotter(new Metrics.Plotter(((CoreModule<?>) mod.getModule()).getName()) {
|
||||||
ret.put(((CoreModule<?>) mod.getModule()).getName(), mod.getState() == ModuleState.ENABLED ? 1 : 0);
|
@Override
|
||||||
return ret;
|
public int getValue() {
|
||||||
}));
|
return mod.getState() == ModuleState.ENABLED ? 1 : 0;
|
||||||
bstats.addCustomChart(new AdvancedPie("dependencies", () -> {
|
}
|
||||||
HashMap<String, Integer> ret = new HashMap<>();
|
});
|
||||||
for (final String dep : plugin.getDescription().getSoftDepend())
|
}
|
||||||
ret.put(dep, plugin.getServer().getPluginManager().isPluginEnabled(dep) ? 1 : 0);
|
}
|
||||||
return ret;
|
Metrics.Graph depGraph = mcstats.createGraph("Dependencies");
|
||||||
}));
|
for (final String dep : plugin.getDescription().getSoftDepend()) {
|
||||||
|
depGraph.addPlotter(new Metrics.Plotter(dep) {
|
||||||
|
@Override
|
||||||
|
public int getValue() {
|
||||||
|
return plugin.getServer().getPluginManager().isPluginEnabled(dep) ? 1 : 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
mcstats.start();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Failed to submit the stats :-(
|
||||||
|
getLog().warn("MCStats-Error: " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
super.onDisable();
|
super.onDisable();
|
||||||
|
metric.unregister();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void track(String event) throws IOException {
|
||||||
|
if (metric == null)
|
||||||
|
throw new IllegalAccessError("The feature hasn't been enabled");
|
||||||
|
metric.trackEvent(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
import de.jaschastarke.hooking.BooleanHooker;
|
import de.jaschastarke.hooking.BooleanHooker;
|
||||||
import de.jaschastarke.hooking.GetHooker;
|
import de.jaschastarke.hooking.GetHooker;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.hooks.MultiVerseHooks;
|
import de.jaschastarke.minecraft.limitedcreative.hooks.MultiVerseHooks;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.hooks.PlayerCheckHooker;
|
import de.jaschastarke.minecraft.limitedcreative.hooks.PlayerCheckHooker;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.hooks.WorldTypeHooker;
|
import de.jaschastarke.minecraft.limitedcreative.hooks.WorldTypeHooker;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.hooks.xAuthHooks;
|
import de.jaschastarke.minecraft.limitedcreative.hooks.xAuthHooks;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
|
|
||||||
public final class Hooks {
|
public final class Hooks {
|
||||||
public static PlayerCheckHooker IsLoggedIn = new PlayerCheckHooker(true);
|
public static PlayerCheckHooker IsLoggedIn = new PlayerCheckHooker(true);
|
||||||
|
@ -52,8 +53,7 @@ public final class Hooks {
|
||||||
public static boolean isAuthMePresent() {
|
public static boolean isAuthMePresent() {
|
||||||
if (isPluginEnabled("AuthMe")) {
|
if (isPluginEnabled("AuthMe")) {
|
||||||
try {
|
try {
|
||||||
Class.forName("uk.org.whoami.authme.api.API");
|
return Class.forName("uk.org.whoami.authme.api.API") != null;
|
||||||
return true;
|
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -64,8 +64,7 @@ public final class Hooks {
|
||||||
public static boolean isXAuth20Present() {
|
public static boolean isXAuth20Present() {
|
||||||
if (isPluginEnabled("xAuth")) {
|
if (isPluginEnabled("xAuth")) {
|
||||||
try {
|
try {
|
||||||
Class.forName("com.cypherx.xauth.xAuth");
|
return Class.forName("com.cypherx.xauth.xAuth") != null;
|
||||||
return true;
|
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative;
|
package de.jaschastarke.minecraft.limitedcreative;
|
||||||
|
|
||||||
import de.jaschastarke.bukkit.lib.CoreModule;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.inventories.*;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.inventories.store.PlayerInventoryStorage;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.inventories.store.ReflectionStorage;
|
|
||||||
import de.jaschastarke.modularize.IModule;
|
|
||||||
import de.jaschastarke.modularize.ModuleEntry;
|
|
||||||
import org.bukkit.GameMode;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import de.jaschastarke.bukkit.lib.CoreModule;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.inventories.ArmoryConfig;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.inventories.Inventory;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.inventories.InventoryConfig;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.inventories.InventoryPermissions;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.inventories.PlayerListener;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.inventories.store.InvYamlStorage;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.inventories.store.PlayerInventoryStorage;
|
||||||
|
import de.jaschastarke.modularize.IModule;
|
||||||
|
import de.jaschastarke.modularize.ModuleEntry;
|
||||||
|
|
||||||
public class ModInventories extends CoreModule<LimitedCreative> {
|
public class ModInventories extends CoreModule<LimitedCreative> {
|
||||||
protected PlayerInventoryStorage storage;
|
protected PlayerInventoryStorage storage;
|
||||||
protected Map<Player, Inventory> inventories;
|
protected Map<Player, Inventory> inventories;
|
||||||
|
@ -28,6 +33,7 @@ public class ModInventories extends CoreModule<LimitedCreative> {
|
||||||
return "Inventory";
|
return "Inventory";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public void initialize(ModuleEntry<IModule> entry) {
|
public void initialize(ModuleEntry<IModule> entry) {
|
||||||
super.initialize(entry);
|
super.initialize(entry);
|
||||||
|
@ -51,8 +57,7 @@ public class ModInventories extends CoreModule<LimitedCreative> {
|
||||||
throw new IllegalAccessError(plugin.getLocale().trans("inventory.warning.conflict", incomp, this.getName()));
|
throw new IllegalAccessError(plugin.getLocale().trans("inventory.warning.conflict", incomp, this.getName()));
|
||||||
}
|
}
|
||||||
super.onEnable();
|
super.onEnable();
|
||||||
//storage = new InvYamlStorage(this, new File(plugin.getDataFolder(), config.getFolder()));
|
storage = new InvYamlStorage(this, new File(plugin.getDataFolder(), config.getFolder()));
|
||||||
storage = new ReflectionStorage(this, new File(plugin.getDataFolder(), config.getFolder()));
|
|
||||||
inventories = new WeakHashMap<Player, Inventory>();
|
inventories = new WeakHashMap<Player, Inventory>();
|
||||||
getLog().info(plugin.getLocale().trans("basic.loaded.module"));
|
getLog().info(plugin.getLocale().trans("basic.loaded.module"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,13 +82,7 @@ public class BlockState {
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO Rename
|
//TODO Rename
|
||||||
@SuppressWarnings("deprecation")
|
public void setPlayerName(String s) {
|
||||||
public void setPlayerNameOrUUID(String s) {
|
|
||||||
if(s==null)
|
|
||||||
uuid=null;
|
|
||||||
else if(!s.matches("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"))
|
|
||||||
uuid = Bukkit.getOfflinePlayer(s).getUniqueId(); //If it's a name, get UUID
|
|
||||||
else
|
|
||||||
uuid = UUID.fromString(s);
|
uuid = UUID.fromString(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +115,7 @@ public class BlockState {
|
||||||
|
|
||||||
public void setSource(Source source) {
|
public void setSource(Source source) {
|
||||||
if (source != Source.PLAYER && source != Source.EDIT && source != Source.COMMAND)
|
if (source != Source.PLAYER && source != Source.EDIT && source != Source.COMMAND)
|
||||||
setPlayerNameOrUUID(null);
|
setPlayerName(null);
|
||||||
this.source = source;
|
this.source = source;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,23 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.blockstate;
|
package de.jaschastarke.minecraft.limitedcreative.blockstate;
|
||||||
|
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import java.util.Date;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitPlayer;
|
import org.bukkit.Bukkit;
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
import org.bukkit.GameMode;
|
||||||
import com.sk89q.worldedit.regions.Region;
|
import org.bukkit.Location;
|
||||||
import com.sk89q.worldedit.world.World;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||||
|
import com.sk89q.worldedit.bukkit.selections.Selection;
|
||||||
|
|
||||||
import de.jaschastarke.LocaleString;
|
import de.jaschastarke.LocaleString;
|
||||||
import de.jaschastarke.bukkit.lib.chat.ChatFormattings;
|
import de.jaschastarke.bukkit.lib.chat.ChatFormattings;
|
||||||
import de.jaschastarke.bukkit.lib.commands.*;
|
import de.jaschastarke.bukkit.lib.commands.BukkitCommand;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.CommandContext;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.CommandException;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.HelpCommand;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.IHelpDescribed;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.MissingPermissionCommandException;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
||||||
import de.jaschastarke.bukkit.lib.commands.parser.DefinedParameterParser;
|
import de.jaschastarke.bukkit.lib.commands.parser.DefinedParameterParser;
|
||||||
|
@ -23,11 +32,6 @@ import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState.Source;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.Cuboid;
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.Cuboid;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.DBTransaction;
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.DBTransaction;
|
||||||
import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.GameMode;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LimitedCreative-BlockState-Command: modify blockstate database to prevent drops of selected blocks (requires WorldEdit)
|
* LimitedCreative-BlockState-Command: modify blockstate database to prevent drops of selected blocks (requires WorldEdit)
|
||||||
|
@ -151,34 +155,29 @@ public class BlockStateCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
BukkitPlayer bp = BukkitAdapter.adapt(context.getPlayer());
|
WorldEditPlugin we = (WorldEditPlugin) mod.getPlugin().getServer().getPluginManager().getPlugin("WorldEdit");
|
||||||
Region region = null;
|
final Selection selection = we.getSelection(context.getPlayer());
|
||||||
try {
|
|
||||||
region = WorldEdit.getInstance().getSessionManager().get(bp).getSelection(bp.getWorld());
|
|
||||||
} catch (Exception ignored) { //IncompleteRegionException
|
|
||||||
}
|
|
||||||
|
|
||||||
final Region selection = region;
|
|
||||||
if (selection == null) {
|
if (selection == null) {
|
||||||
context.response(L("command.blockstate.worledit_selection_empty"));
|
context.response(L("command.blockstate.worledit_selection_empty"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
final BlockVector3 min = selection.getMinimumPoint();
|
final Location min = selection.getMinimumPoint();
|
||||||
final BlockVector3 max = selection.getMaximumPoint();
|
final Location max = selection.getMaximumPoint();
|
||||||
|
|
||||||
mod.getPlugin().getServer().getScheduler().runTaskAsynchronously(mod.getPlugin(), () -> {
|
mod.getPlugin().getServer().getScheduler().runTaskAsynchronously(mod.getPlugin(), new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
if (mod.isDebug())
|
if (mod.isDebug())
|
||||||
mod.getLog().debug("Scheduler: Asynchronous Task run");
|
mod.getLog().debug("Scheduler: Asynchronous Task run");
|
||||||
DBTransaction update = mod.getModel().groupUpdate();
|
DBTransaction update = mod.getModel().groupUpdate();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
World w = selection.getWorld();
|
World w = selection.getWorld();
|
||||||
assert w != null;
|
|
||||||
org.bukkit.World bw = BukkitAdapter.adapt(w);
|
|
||||||
|
|
||||||
Cuboid c = new Cuboid();
|
Cuboid c = new Cuboid();
|
||||||
c.add(new Location(bw, min.getBlockX(), min.getBlockY(), min.getBlockZ()));
|
c.add(min);
|
||||||
c.add(new Location(bw, max.getBlockX(), max.getBlockY(), max.getBlockZ()));
|
c.add(max);
|
||||||
mod.getModel().cacheStates(c);
|
mod.getModel().cacheStates(c);
|
||||||
|
|
||||||
BlockState seed = new BlockState();
|
BlockState seed = new BlockState();
|
||||||
|
@ -189,9 +188,9 @@ public class BlockStateCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
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++) {
|
||||||
BlockVector3 loc = BlockVector3.at(x, y, z);
|
Location loc = new Location(w, x, y, z);
|
||||||
if (!w.getBlock(loc).getBlockType().getMaterial().isAir() && selection.contains(loc)) {
|
if (w.getBlockAt(loc).getType() != Material.AIR && selection.contains(loc)) {
|
||||||
seed.setLocation(new Location(bw, x, y, z));
|
seed.setLocation(loc);
|
||||||
update.setState(new BlockState(seed));
|
update.setState(new BlockState(seed));
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
@ -201,6 +200,7 @@ public class BlockStateCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
update.finish();
|
update.finish();
|
||||||
|
|
||||||
context.response(L("command.blockstate.command_updated", count));
|
context.response(L("command.blockstate.command_updated", count));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,7 @@ public class CreativeControlImportThread extends DatabaseMigrationThread {
|
||||||
bs.setLocation(new Location(c.getWorld(), rs.getInt("x"), rs.getInt("y"), rs.getInt("z")));
|
bs.setLocation(new Location(c.getWorld(), rs.getInt("x"), rs.getInt("y"), rs.getInt("z")));
|
||||||
bs.setDate(new Date(rs.getLong("time")));
|
bs.setDate(new Date(rs.getLong("time")));
|
||||||
bs.setGameMode(GameMode.CREATIVE);
|
bs.setGameMode(GameMode.CREATIVE);
|
||||||
bs.setPlayerNameOrUUID(rs.getString("player"));
|
bs.setPlayerName(rs.getString("player"));
|
||||||
bs.setSource(Source.PLAYER);
|
bs.setSource(Source.PLAYER);
|
||||||
return bs;
|
return bs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class DBQueries {
|
||||||
bs.setLocation(loc);
|
bs.setLocation(loc);
|
||||||
bs.setDate(rs.getTimestamp("cdate"));
|
bs.setDate(rs.getTimestamp("cdate"));
|
||||||
bs.setGameMode(getGameMode(rs));
|
bs.setGameMode(getGameMode(rs));
|
||||||
bs.setPlayerNameOrUUID(rs.getString("player"));
|
bs.setPlayerName(rs.getString("player"));
|
||||||
bs.setSource(getSource(rs));
|
bs.setSource(getSource(rs));
|
||||||
rs.close();
|
rs.close();
|
||||||
return bs;
|
return bs;
|
||||||
|
@ -72,7 +72,7 @@ public class DBQueries {
|
||||||
bs.setLocation(new Location(c.getWorld(), rs.getInt("x"), rs.getInt("y"), rs.getInt("z")));
|
bs.setLocation(new Location(c.getWorld(), rs.getInt("x"), rs.getInt("y"), rs.getInt("z")));
|
||||||
bs.setDate(rs.getTimestamp("cdate"));
|
bs.setDate(rs.getTimestamp("cdate"));
|
||||||
bs.setGameMode(getGameMode(rs));
|
bs.setGameMode(getGameMode(rs));
|
||||||
bs.setPlayerNameOrUUID(rs.getString("player"));
|
bs.setPlayerName(rs.getString("player"));
|
||||||
bs.setSource(getSource(rs));
|
bs.setSource(getSource(rs));
|
||||||
blocks.add(bs);
|
blocks.add(bs);
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ public class DBQueries {
|
||||||
bs.setLocation(new Location(c.getWorld(), rs.getInt("x"), rs.getInt("y"), rs.getInt("z")));
|
bs.setLocation(new Location(c.getWorld(), rs.getInt("x"), rs.getInt("y"), rs.getInt("z")));
|
||||||
bs.setDate(rs.getTimestamp("cdate"));
|
bs.setDate(rs.getTimestamp("cdate"));
|
||||||
bs.setGameMode(getGameMode(rs));
|
bs.setGameMode(getGameMode(rs));
|
||||||
bs.setPlayerNameOrUUID(rs.getString("player"));
|
bs.setPlayerName(rs.getString("player"));
|
||||||
bs.setSource(getSource(rs));
|
bs.setSource(getSource(rs));
|
||||||
return bs;
|
return bs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.blockstate.thread;
|
package de.jaschastarke.minecraft.limitedcreative.blockstate.thread;
|
||||||
|
|
||||||
import de.jaschastarke.bukkit.lib.ModuleLogger;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.AbstractModel.HasBlockState;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.Cuboid;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBQueries;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.ThreadedModel;
|
|
||||||
import org.bukkit.Chunk;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
|
|
||||||
import java.lang.Thread.UncaughtExceptionHandler;
|
import java.lang.Thread.UncaughtExceptionHandler;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
|
||||||
|
import de.jaschastarke.bukkit.lib.ModuleLogger;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.AbstractModel.HasBlockState;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.Cuboid;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBQueries;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.ThreadedModel;
|
||||||
|
|
||||||
public class ThreadLink {
|
public class ThreadLink {
|
||||||
private static final int BATCH_ACTION_LENGTH = 25;
|
private static final int BATCH_ACTION_LENGTH = 25;
|
||||||
private static final int QUEUE_ACCESS_WARNING_DURATION = 5; // ms
|
private static final int QUEUE_ACCESS_WARNING_DURATION = 5; // ms
|
||||||
|
@ -23,11 +24,10 @@ public class ThreadLink {
|
||||||
private static final int COUNT_ERROR_QUEUE = 20;
|
private static final int COUNT_ERROR_QUEUE = 20;
|
||||||
private static final int QUEUE_TIMING_DURATION = 500; // ms
|
private static final int QUEUE_TIMING_DURATION = 500; // ms
|
||||||
private static final int STARTUP_TIMING = 30000; // ms
|
private static final int STARTUP_TIMING = 30000; // ms
|
||||||
private static final int THREAD_SHUTDOWN_WAIT_MS = 30000;
|
|
||||||
private long lastTimeout;
|
private long lastTimeout;
|
||||||
private final Stack<Action> updateQueue = new Stack<Action>();
|
private Stack<Action> updateQueue = new Stack<Action>();
|
||||||
|
|
||||||
private boolean shutdown;
|
private boolean shutdown = false;
|
||||||
private ModuleLogger log;
|
private ModuleLogger log;
|
||||||
private ThreadedModel model;
|
private ThreadedModel model;
|
||||||
private Thread thread;
|
private Thread thread;
|
||||||
|
@ -39,8 +39,15 @@ public class ThreadLink {
|
||||||
/*
|
/*
|
||||||
* In theory we could add multiple threads, e.g. 1 write and 2 read threads.
|
* In theory we could add multiple threads, e.g. 1 write and 2 read threads.
|
||||||
*/
|
*/
|
||||||
createThread(queries);
|
thread = new DBThread(queries);
|
||||||
shutdown = true; //Don't allow the thread to run until it's started
|
thread.setName("LC BlockState DB-Thread");
|
||||||
|
thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
|
||||||
|
@Override
|
||||||
|
public void uncaughtException(Thread thread, Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
log.severe("Thread " + thread.getName() + " encoutered an uncaught Exception: " + e.getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private class DBThread extends Thread {
|
private class DBThread extends Thread {
|
||||||
|
@ -55,8 +62,6 @@ public class ThreadLink {
|
||||||
lastTimeout = System.currentTimeMillis() + STARTUP_TIMING;
|
lastTimeout = System.currentTimeMillis() + STARTUP_TIMING;
|
||||||
while (!shutdown || !updateQueue.isEmpty()) {
|
while (!shutdown || !updateQueue.isEmpty()) {
|
||||||
try {
|
try {
|
||||||
//Thread.sleep(1000);
|
|
||||||
//throw new RuntimeException("Test exception pls ignore");
|
|
||||||
List<Action> acts = new LinkedList<Action>();
|
List<Action> acts = new LinkedList<Action>();
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
while (updateQueue.isEmpty() && !shutdown)
|
while (updateQueue.isEmpty() && !shutdown)
|
||||||
|
@ -86,7 +91,6 @@ public class ThreadLink {
|
||||||
for (Action act : acts) {
|
for (Action act : acts) {
|
||||||
if (!shutdown || !(act instanceof CacheChunkAction)) {
|
if (!shutdown || !(act instanceof CacheChunkAction)) {
|
||||||
if (act instanceof CallableAction) {
|
if (act instanceof CallableAction) {
|
||||||
//noinspection SynchronizationOnLocalVariableOrMethodParameter
|
|
||||||
synchronized (act) {
|
synchronized (act) {
|
||||||
act.process(ThreadLink.this, this.q);
|
act.process(ThreadLink.this, this.q);
|
||||||
act.notify();
|
act.notify();
|
||||||
|
@ -100,7 +104,7 @@ public class ThreadLink {
|
||||||
log.debug("DB-Thread '" + Thread.currentThread().getName() + "' execution time: " + (System.currentTimeMillis() - t) + "ms");
|
log.debug("DB-Thread '" + Thread.currentThread().getName() + "' execution time: " + (System.currentTimeMillis() - t) + "ms");
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
log.severe("DB-Thread '" + Thread.currentThread().getName() + "' was harmfully interupted");
|
log.severe("DB-Thread '" + Thread.currentThread().getName() + "' was harmfull interupted");
|
||||||
}
|
}
|
||||||
Thread.yield();
|
Thread.yield();
|
||||||
}
|
}
|
||||||
|
@ -110,47 +114,42 @@ public class ThreadLink {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
shutdown = false;
|
|
||||||
if (!thread.isAlive())
|
if (!thread.isAlive())
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void queueUpdate(Block block) {
|
public void queueUpdate(Block block) {
|
||||||
restartThreadIfNeeded();
|
|
||||||
long l = System.currentTimeMillis();
|
long l = System.currentTimeMillis();
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
updateQueue.add(new UpdateBlockStateAction(block));
|
updateQueue.add(new UpdateBlockStateAction(block));
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
long l2 = System.currentTimeMillis();
|
long l2 = System.currentTimeMillis();
|
||||||
if (l2 - l > QUEUE_ACCESS_WARNING_DURATION) {
|
if (l2 - l > QUEUE_ACCESS_WARNING_DURATION) {
|
||||||
getLog().warn("queueUpdate-action took too long: " + (l2 - l) + "ms");
|
getLog().warn("queueUpdate-action took to long: " + (l - 2) + "ms");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockState callUpdate(Block block) {
|
public BlockState callUpdate(Block block) {
|
||||||
restartThreadIfNeeded();
|
|
||||||
FetchBlockStateAction action = new FetchBlockStateAction(block);
|
FetchBlockStateAction action = new FetchBlockStateAction(block);
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
updateQueue.push(action);
|
updateQueue.push(action);
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
return action.getValue();
|
return action.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void queue(Action act) {
|
public void queue(Action act) {
|
||||||
restartThreadIfNeeded();
|
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
updateQueue.add(act);
|
updateQueue.add(act);
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public <T> T call(CallableAction<T> act) {
|
public <T> T call(CallableAction<T> act) {
|
||||||
restartThreadIfNeeded();
|
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
updateQueue.push(act);
|
updateQueue.push(act);
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
return act.getValue();
|
return act.getValue();
|
||||||
}
|
}
|
||||||
|
@ -159,43 +158,38 @@ public class ThreadLink {
|
||||||
FetchCuboidAction action = new FetchCuboidAction(c);
|
FetchCuboidAction action = new FetchCuboidAction(c);
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
updateQueue.push(action);
|
updateQueue.push(action);
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
return action.getValue();
|
return action.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void queueMetaMove(Location from, Location to) {
|
public void queueMetaMove(Location from, Location to) {
|
||||||
restartThreadIfNeeded();
|
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
updateQueue.add(new MoveBlockStateAction(from, to));
|
updateQueue.add(new MoveBlockStateAction(from, to));
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void queueChunkLoad(Chunk chunk) {
|
public void queueChunkLoad(Chunk chunk) {
|
||||||
restartThreadIfNeeded();
|
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
updateQueue.add(new CacheChunkAction(chunk));
|
updateQueue.add(new CacheChunkAction(chunk));
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void queueTransaction(Transaction transaction) {
|
public void queueTransaction(Transaction transaction) {
|
||||||
restartThreadIfNeeded();
|
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
updateQueue.add(transaction);
|
updateQueue.add(transaction);
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown() throws InterruptedException {
|
public void shutdown() throws InterruptedException {
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
shutdown = true;
|
shutdown = true;
|
||||||
updateQueue.notifyAll();
|
updateQueue.notify();
|
||||||
}
|
}
|
||||||
thread.join(THREAD_SHUTDOWN_WAIT_MS);
|
thread.join();
|
||||||
if (thread.isAlive())
|
|
||||||
thread.interrupt(); //Wake it up
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public HasBlockState getMetaState(Block block) {
|
public HasBlockState getMetaState(Block block) {
|
||||||
|
@ -215,27 +209,4 @@ public class ThreadLink {
|
||||||
public ModuleLogger getLog() {
|
public ModuleLogger getLog() {
|
||||||
return log;
|
return log;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restartThreadIfNeeded() {
|
|
||||||
if ((thread != null && thread.isAlive()) || shutdown)
|
|
||||||
return;
|
|
||||||
log.warn("Thread is dead, restarting!");
|
|
||||||
new Exception("Thread-restarting update called").printStackTrace();
|
|
||||||
createThread(((DBThread) thread).q);
|
|
||||||
start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createThread(DBQueries queries) {
|
|
||||||
if (shutdown)
|
|
||||||
return;
|
|
||||||
thread = new DBThread(queries);
|
|
||||||
thread.setName("LC BlockState DB-Thread");
|
|
||||||
thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
|
|
||||||
@Override
|
|
||||||
public void uncaughtException(Thread thread, Throwable e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
log.severe("Thread " + thread.getName() + " encoutered an uncaught Exception: " + e.getMessage());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,21 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.blockstate.worldedit;
|
package de.jaschastarke.minecraft.limitedcreative.blockstate.worldedit;
|
||||||
|
|
||||||
import com.sk89q.worldedit.WorldEditException;
|
import java.util.Date;
|
||||||
import com.sk89q.worldedit.extent.AbstractDelegateExtent;
|
|
||||||
import com.sk89q.worldedit.extent.Extent;
|
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
|
||||||
import com.sk89q.worldedit.world.block.BlockStateHolder;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState.Source;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.Date;
|
import com.sk89q.worldedit.Vector;
|
||||||
|
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||||
|
import com.sk89q.worldedit.extent.Extent;
|
||||||
|
import com.sk89q.worldedit.extent.logging.AbstractLoggingExtent;
|
||||||
|
|
||||||
public class EditSessionExtent extends AbstractDelegateExtent {
|
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState.Source;
|
||||||
|
|
||||||
|
public class EditSessionExtent extends AbstractLoggingExtent {
|
||||||
private ModBlockStates mod;
|
private ModBlockStates mod;
|
||||||
private Player player = null;
|
private Player player = null;
|
||||||
private World world;
|
private World world;
|
||||||
|
@ -29,15 +30,14 @@ public class EditSessionExtent extends AbstractDelegateExtent {
|
||||||
/**
|
/**
|
||||||
* Called when a block is being changed.
|
* Called when a block is being changed.
|
||||||
*
|
*
|
||||||
* @param pt the position
|
* @param position the position
|
||||||
* @param newBlock the new block to replace the old one
|
* @param newBlock the new block to replace the old one
|
||||||
*/
|
*/
|
||||||
@Override
|
protected void onBlockChange(Vector pt, BaseBlock newBlock) {
|
||||||
public <T extends BlockStateHolder<T>> boolean setBlock(BlockVector3 pt, T newBlock) throws WorldEditException {
|
|
||||||
if (mod.isDebug())
|
if (mod.isDebug())
|
||||||
mod.getLog().debug("WorldEdit-Integration: BlockChange: "+pt.toString()+" BB: " + newBlock.toString());
|
mod.getLog().debug("WorldEdit-Integration: BlockChange: "+pt.toString()+" BB: " + newBlock.toString());
|
||||||
Location loc = new Location(world, pt.getBlockX(), pt.getBlockY(), pt.getBlockZ());
|
Location loc = new Location(world, pt.getBlockX(), pt.getBlockY(), pt.getBlockZ());
|
||||||
if (newBlock.getBlockType().getMaterial().isAir()) {
|
if (newBlock.getType() == 0) {
|
||||||
mod.getModel().removeState(loc.getBlock());
|
mod.getModel().removeState(loc.getBlock());
|
||||||
} else {
|
} else {
|
||||||
BlockState s = mod.getModel().getState(loc.getBlock());
|
BlockState s = mod.getModel().getState(loc.getBlock());
|
||||||
|
@ -46,7 +46,7 @@ public class EditSessionExtent extends AbstractDelegateExtent {
|
||||||
s.setLocation(loc);
|
s.setLocation(loc);
|
||||||
}
|
}
|
||||||
s.setGameMode(null);
|
s.setGameMode(null);
|
||||||
s.setPlayerNameOrUUID(player.getUniqueId().toString());
|
s.setPlayerName(player.getUniqueId().toString());
|
||||||
s.setDate(new Date());
|
s.setDate(new Date());
|
||||||
s.setSource(Source.EDIT);
|
s.setSource(Source.EDIT);
|
||||||
if (mod.isDebug())
|
if (mod.isDebug())
|
||||||
|
@ -54,7 +54,5 @@ public class EditSessionExtent extends AbstractDelegateExtent {
|
||||||
|
|
||||||
mod.getModel().setState(s);
|
mod.getModel().setState(s);
|
||||||
}
|
}
|
||||||
super.setBlock(pt, newBlock);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.hooks;
|
package de.jaschastarke.minecraft.limitedcreative.hooks;
|
||||||
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.Hooks;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.LimitedCreative;
|
|
||||||
import fr.xephi.authme.api.v3.AuthMeApi;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
//@Deprecated // AuthMe 3.0 released. Compatibility for older versions will be removed sometime
|
import uk.org.whoami.authme.api.API;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.Hooks;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.LimitedCreative;
|
||||||
|
|
||||||
|
@Deprecated // AuthMe 3.0 released. Compatibility for older versions will be removed sometime
|
||||||
public class AuthMeHooks {
|
public class AuthMeHooks {
|
||||||
public AuthMeHooks(final LimitedCreative plugin) {
|
public AuthMeHooks(final LimitedCreative plugin) {
|
||||||
Hooks.IsLoggedIn.register(new PlayerCheckHooker.Check() {
|
Hooks.IsLoggedIn.register(new PlayerCheckHooker.Check() {
|
||||||
@Override
|
@Override
|
||||||
public boolean test(Player player) {
|
public boolean test(Player player) {
|
||||||
boolean li = AuthMeApi.getInstance().isAuthenticated(player);
|
boolean li = API.isAuthenticated(player);
|
||||||
if (plugin.isDebug()) // not nessesary, but so no string concation without debug needed
|
if (plugin.isDebug()) // not nessesary, but so no string concation without debug needed
|
||||||
plugin.getLog().debug("AuthMe: "+player.getName()+": logged in: "+li);
|
plugin.getLog().debug("AuthMe: "+player.getName()+": logged in: "+li);
|
||||||
return li;
|
return li;
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.inventories;
|
package de.jaschastarke.minecraft.limitedcreative.inventories;
|
||||||
|
|
||||||
import de.jaschastarke.bukkit.lib.SimpleModule;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.LimitedCreative;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.ModInventories;
|
|
||||||
import fr.xephi.authme.events.ProtectInventoryEvent;
|
|
||||||
import fr.xephi.authme.events.RestoreInventoryEvent;
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
//@Deprecated // AuthMe 3.0 released. Compatibility for older versions will be removed sometime
|
import uk.org.whoami.authme.events.RestoreInventoryEvent;
|
||||||
|
import uk.org.whoami.authme.events.StoreInventoryEvent;
|
||||||
|
import de.jaschastarke.bukkit.lib.SimpleModule;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.LimitedCreative;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.ModInventories;
|
||||||
|
|
||||||
|
@Deprecated // AuthMe 3.0 released. Compatibility for older versions will be removed sometime
|
||||||
public class AuthMeInventories extends SimpleModule<LimitedCreative> implements Listener {
|
public class AuthMeInventories extends SimpleModule<LimitedCreative> implements Listener {
|
||||||
ModInventories invmod;
|
ModInventories invmod;
|
||||||
public AuthMeInventories(LimitedCreative plugin, ModInventories modInventories) {
|
public AuthMeInventories(LimitedCreative plugin, ModInventories modInventories) {
|
||||||
|
@ -18,7 +19,7 @@ public class AuthMeInventories extends SimpleModule<LimitedCreative> implements
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onStoreInventory(ProtectInventoryEvent event) {
|
public void onStoreInventory(StoreInventoryEvent event) {
|
||||||
if (isDebug())
|
if (isDebug())
|
||||||
getLog().debug("AuthMe Store Event: "+event.getPlayer().getName());
|
getLog().debug("AuthMe Store Event: "+event.getPlayer().getName());
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class InvYamlStorage extends InvConfStorage {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(Inventory pinv, Target target) {
|
public void load(Inventory pinv, Target target) {
|
||||||
load(pinv, YamlConfiguration.loadConfiguration(getFile(pinv, target, false)));
|
load(pinv, YamlConfiguration.loadConfiguration(getFile(pinv, target)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -52,11 +52,7 @@ public class InvYamlStorage extends InvConfStorage {
|
||||||
yml.options().header("DO NOT MODIFY THIS FILE");
|
yml.options().header("DO NOT MODIFY THIS FILE");
|
||||||
store(pinv, yml);
|
store(pinv, yml);
|
||||||
try {
|
try {
|
||||||
File nameFile=getFile(pinv, target, false);
|
yml.save(getFile(pinv, target));
|
||||||
File uuidFile=getFile(pinv, target, true);
|
|
||||||
if(!nameFile.equals(uuidFile)) //It'd be recreated right after, still, don't remove if the same
|
|
||||||
nameFile.delete(); //Delete file with name so it doesn't get loaded again
|
|
||||||
yml.save(uuidFile);
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
mod.getLog().warn("Failed to save Inventory for Player " + pinv.getPlayer().getName());
|
mod.getLog().warn("Failed to save Inventory for Player " + pinv.getPlayer().getName());
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -65,28 +61,19 @@ public class InvYamlStorage extends InvConfStorage {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(Inventory pinv, Target target) {
|
public void remove(Inventory pinv, Target target) {
|
||||||
getFile(pinv, target, true).delete();
|
getFile(pinv, target).delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean contains(Inventory pinv, Target target) {
|
public boolean contains(Inventory pinv, Target target) {
|
||||||
return getFile(pinv, target, false).exists();
|
return getFile(pinv, target).exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected File getFile(Inventory pinv, Target target, boolean uuidonly) {
|
protected File getFile(Inventory pinv, Target target) {
|
||||||
File file;
|
|
||||||
String player;
|
|
||||||
do {
|
|
||||||
player = uuidonly ? pinv.getPlayer().getUniqueId().toString() : pinv.getPlayer().getName();
|
|
||||||
if (target != default_target) {
|
if (target != default_target) {
|
||||||
file = new File(dir, player + "_" + target.toString().toLowerCase() + SUFFIX);
|
return new File(dir, pinv.getPlayer().getUniqueId() + "_" + target.toString().toLowerCase() + SUFFIX);
|
||||||
} else {
|
} else {
|
||||||
file = new File(dir, player + SUFFIX);
|
return new File(dir, pinv.getPlayer().getUniqueId() + SUFFIX);
|
||||||
}
|
}
|
||||||
if(uuidonly)
|
|
||||||
return file; //Use file with UUID, even if doesn't exist
|
|
||||||
uuidonly = true; //Run again with UUID, then return...
|
|
||||||
} while(!file.exists()); //...if the file with name is not found
|
|
||||||
return file; //Found file with player name
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,217 +0,0 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.inventories.store;
|
|
||||||
|
|
||||||
import de.jaschastarke.bukkit.lib.CoreModule;
|
|
||||||
import de.jaschastarke.bukkit.lib.ModuleLogger;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.inventories.Inventory;
|
|
||||||
import org.bukkit.configuration.Configuration;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Base64;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.IntStream;
|
|
||||||
|
|
||||||
public class ReflectionStorage extends PlayerInventoryStorage {
|
|
||||||
private CoreModule<?> mod;
|
|
||||||
private File dir;
|
|
||||||
private String nms;
|
|
||||||
private InvYamlStorage yamlStorage;
|
|
||||||
|
|
||||||
public ReflectionStorage(CoreModule<?> mod, File file) {
|
|
||||||
this.mod = mod;
|
|
||||||
dir = file;
|
|
||||||
yamlStorage = new InvYamlStorage(mod, file);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ModuleLogger getLog() {
|
|
||||||
return mod.getLog();
|
|
||||||
}
|
|
||||||
|
|
||||||
private File getFile(UUID uuid) {
|
|
||||||
return new File(dir, uuid.toString() + "_ref.yml");
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object getInventory(Player player) throws Exception {
|
|
||||||
org.bukkit.inventory.Inventory inv = player.getInventory();
|
|
||||||
if (getInventory == null)
|
|
||||||
getInventory = inv.getClass().getMethod("getInventory");
|
|
||||||
Object handle = getInventory.invoke(inv);
|
|
||||||
if (nms == null)
|
|
||||||
nms = handle.getClass().getPackage().getName();
|
|
||||||
return handle;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void store(Inventory pinv, Inventory.Target target) {
|
|
||||||
try {
|
|
||||||
File f = getFile(pinv.getPlayer().getUniqueId());
|
|
||||||
YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
|
|
||||||
config.set(target.name(), serialize(getInventory(pinv.getPlayer())));
|
|
||||||
config.save(f);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Method getInventory;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void load(Inventory pinv, Inventory.Target target) {
|
|
||||||
Player player = pinv.getPlayer();
|
|
||||||
try {
|
|
||||||
File f = getFile(player.getUniqueId());
|
|
||||||
if (!f.exists()) { //If not found use the older file(s)
|
|
||||||
yamlStorage.load(pinv, target);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//String content = new String(Files.readAllBytes(f.toPath()));
|
|
||||||
Configuration config = YamlConfiguration.loadConfiguration(f);
|
|
||||||
String content = config.getString(target.name());
|
|
||||||
if (content == null) {
|
|
||||||
yamlStorage.load(pinv, target);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setFromSerialized(getInventory(player), content);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void remove(Inventory pinv, Inventory.Target target) {
|
|
||||||
File f = getFile(pinv.getPlayer().getUniqueId());
|
|
||||||
if (!f.exists()) return;
|
|
||||||
Configuration config = YamlConfiguration.loadConfiguration(f);
|
|
||||||
config.set(target.name(), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean contains(Inventory pinv, Inventory.Target target) {
|
|
||||||
File f = getFile(pinv.getPlayer().getUniqueId());
|
|
||||||
if (!f.exists()) return yamlStorage.contains(pinv, target);
|
|
||||||
Configuration config = YamlConfiguration.loadConfiguration(f);
|
|
||||||
return config.contains(target.name()) || yamlStorage.contains(pinv, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Based on iie's per-world inventory
|
|
||||||
//https://github.com/TBMCPlugins/iiePerWorldInventory/blob/master/src/buttondevteam/perworld/serializers/inventory.java
|
|
||||||
|
|
||||||
private Method save;
|
|
||||||
private Class<?> nbtcl;
|
|
||||||
private Method nbtcsta;
|
|
||||||
private Class<?> nbtcstcl;
|
|
||||||
|
|
||||||
//SERIALIZE ITEMSTACK
|
|
||||||
private String serializeItemStack(Object itemStack) throws Exception {
|
|
||||||
if (nbtcl == null)
|
|
||||||
nbtcl = Class.forName(nms + ".NBTTagCompound");
|
|
||||||
if (save == null)
|
|
||||||
save = itemStack.getClass().getMethod("save", nbtcl);
|
|
||||||
if (nbtcstcl == null)
|
|
||||||
nbtcstcl = Class.forName(nms + ".NBTCompressedStreamTools");
|
|
||||||
if (nbtcsta == null)
|
|
||||||
nbtcsta = nbtcstcl.getMethod("a", nbtcl, OutputStream.class);
|
|
||||||
Object tag = save.invoke(itemStack, nbtcl.newInstance());
|
|
||||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
|
||||||
|
|
||||||
nbtcsta.invoke(null, tag, outputStream);
|
|
||||||
|
|
||||||
return Base64.getEncoder().encodeToString(outputStream.toByteArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private Method nbtcstaa;
|
|
||||||
private Function<Object, Object> createStack;
|
|
||||||
|
|
||||||
//DESERIALIZE ITEMSTACK
|
|
||||||
private Object deserializeItemStack(String itemStackString) throws Exception {
|
|
||||||
if (nbtcstcl == null)
|
|
||||||
nbtcstcl = Class.forName(nms + ".NBTCompressedStreamTools");
|
|
||||||
if (nbtcstaa == null)
|
|
||||||
nbtcstaa = nbtcstcl.getMethod("a", InputStream.class);
|
|
||||||
if (nbtcl == null)
|
|
||||||
nbtcl = Class.forName(nms + ".NBTTagCompound");
|
|
||||||
try {
|
|
||||||
if (createStack == null) {
|
|
||||||
final Method a = iscl.getMethod("a", nbtcl);
|
|
||||||
createStack = nbt -> {
|
|
||||||
try {
|
|
||||||
return a.invoke(null, nbt);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} catch (NoSuchMethodException ex) { //It can only get here inside the if
|
|
||||||
final Constructor<?> constructor = iscl.getConstructor(nbtcl);
|
|
||||||
createStack = nbt -> {
|
|
||||||
try {
|
|
||||||
return constructor.newInstance(nbt);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64.getDecoder().decode(itemStackString));
|
|
||||||
|
|
||||||
Object nbtTagCompound = nbtcstaa.invoke(null, inputStream);
|
|
||||||
return createStack.apply(nbtTagCompound);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Method getSize;
|
|
||||||
private Method getItem;
|
|
||||||
|
|
||||||
//SERIALIZE INVENTORY
|
|
||||||
private String serialize(Object invInventory) throws Exception {
|
|
||||||
if (getSize == null)
|
|
||||||
getSize = invInventory.getClass().getMethod("getSize");
|
|
||||||
if (getItem == null)
|
|
||||||
getItem = invInventory.getClass().getMethod("getItem", int.class);
|
|
||||||
return IntStream.range(0, (int) getSize.invoke(invInventory))
|
|
||||||
.mapToObj(s -> {
|
|
||||||
try {
|
|
||||||
//nms ItemStack
|
|
||||||
Object i = getItem.invoke(invInventory, s);
|
|
||||||
return Objects.isNull(i) ? null : s + "#" + serializeItemStack(i);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.filter(Objects::nonNull)
|
|
||||||
.collect(Collectors.joining(";"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Method clear;
|
|
||||||
private Method setItem;
|
|
||||||
private Class<?> iscl;
|
|
||||||
|
|
||||||
//SET INVENTORY FROM SERIALIZED
|
|
||||||
private void setFromSerialized(Object invInventory, String invString) throws Exception {
|
|
||||||
if (clear == null)
|
|
||||||
clear = invInventory.getClass().getMethod("clear");
|
|
||||||
if (iscl == null)
|
|
||||||
iscl = Class.forName(nms + ".ItemStack");
|
|
||||||
if (setItem == null)
|
|
||||||
setItem = invInventory.getClass().getMethod("setItem", int.class, iscl);
|
|
||||||
clear.invoke(invInventory); //clear inventory
|
|
||||||
if (invString != null && !invString.isEmpty())
|
|
||||||
Arrays.asList(invString.split(";"))
|
|
||||||
.parallelStream()
|
|
||||||
.forEach(s -> {
|
|
||||||
String[] e = s.split("#");
|
|
||||||
try {
|
|
||||||
setItem.invoke(invInventory, Integer.parseInt(e[0]), deserializeItemStack(e[1]));
|
|
||||||
} catch (Exception ex) {
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -39,6 +39,7 @@ import org.bukkit.event.player.*;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.material.DirectionalContainer;
|
import org.bukkit.material.DirectionalContainer;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.projectiles.ProjectileSource;
|
||||||
|
|
||||||
import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission;
|
import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission;
|
||||||
import de.jaschastarke.minecraft.lib.permissions.IDynamicPermission;
|
import de.jaschastarke.minecraft.lib.permissions.IDynamicPermission;
|
||||||
|
@ -222,8 +223,11 @@ public class PlayerListener implements Listener {
|
||||||
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) rawevent;
|
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) rawevent;
|
||||||
|
|
||||||
Entity source = event.getDamager();
|
Entity source = event.getDamager();
|
||||||
if (source instanceof Projectile && ((Projectile) source).getShooter() instanceof Entity)
|
if (source instanceof Projectile) {
|
||||||
source = (Entity) ((Projectile) source).getShooter();
|
ProjectileSource shooter = ((Projectile) source).getShooter();
|
||||||
|
if (shooter instanceof Entity)
|
||||||
|
source = (Entity) shooter;
|
||||||
|
}
|
||||||
|
|
||||||
if (source instanceof Player) {
|
if (source instanceof Player) {
|
||||||
Player player = (Player) source;
|
Player player = (Player) source;
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.regions;
|
package de.jaschastarke.minecraft.limitedcreative.regions;
|
||||||
|
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
import com.sk89q.worldguard.protection.flags.Flag;
|
||||||
import com.sk89q.worldguard.protection.flags.FlagContext;
|
|
||||||
import com.sk89q.worldguard.protection.flags.InvalidFlagFormat;
|
import com.sk89q.worldguard.protection.flags.InvalidFlagFormat;
|
||||||
import com.sk89q.worldguard.protection.flags.RegionGroup;
|
import com.sk89q.worldguard.protection.flags.RegionGroup;
|
||||||
import org.bukkit.GameMode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Well, that was an interesting idea, but it doesn't work.
|
* Well, that was an interesting idea, but it doesn't work.
|
||||||
|
@ -15,8 +17,7 @@ public class GameModeFlag extends Flag<GameMode> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GameMode parseInput(FlagContext context) throws InvalidFlagFormat {
|
public GameMode parseInput(WorldGuardPlugin plugin, CommandSender sender, String input) throws InvalidFlagFormat {
|
||||||
String input = context.getUserInput();
|
|
||||||
input = input.trim();
|
input = input.trim();
|
||||||
if (input.equalsIgnoreCase("creative")) {
|
if (input.equalsIgnoreCase("creative")) {
|
||||||
return GameMode.CREATIVE;
|
return GameMode.CREATIVE;
|
||||||
|
|
|
@ -1,19 +1,31 @@
|
||||||
package de.jaschastarke.minecraft.limitedcreative.regions;
|
package de.jaschastarke.minecraft.limitedcreative.regions;
|
||||||
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import java.util.ArrayList;
|
||||||
import com.sk89q.worldguard.WorldGuard;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
import com.sk89q.worldguard.protection.flags.Flag;
|
||||||
import com.sk89q.worldguard.protection.flags.FlagContext;
|
|
||||||
import com.sk89q.worldguard.protection.flags.InvalidFlagFormat;
|
import com.sk89q.worldguard.protection.flags.InvalidFlagFormat;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import com.sk89q.worldguard.protection.regions.GlobalProtectedRegion;
|
import com.sk89q.worldguard.protection.regions.GlobalProtectedRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
|
||||||
import de.jaschastarke.LocaleString;
|
import de.jaschastarke.LocaleString;
|
||||||
import de.jaschastarke.bukkit.lib.chat.ChatFormattings;
|
import de.jaschastarke.bukkit.lib.chat.ChatFormattings;
|
||||||
import de.jaschastarke.bukkit.lib.commands.*;
|
import de.jaschastarke.bukkit.lib.commands.BukkitCommand;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.CommandContext;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.CommandException;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.HelpCommand;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.ICommand;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.IHelpDescribed;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.MethodCommand;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.MissingPermissionCommandException;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
||||||
import de.jaschastarke.bukkit.lib.commands.parser.DefinedParameterParser;
|
import de.jaschastarke.bukkit.lib.commands.parser.DefinedParameterParser;
|
||||||
|
@ -28,13 +40,6 @@ import de.jaschastarke.minecraft.limitedcreative.regions.worldguard.FlagList;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.regions.worldguard.FlagValue;
|
import de.jaschastarke.minecraft.limitedcreative.regions.worldguard.FlagValue;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.regions.worldguard.Region;
|
import de.jaschastarke.minecraft.limitedcreative.regions.worldguard.Region;
|
||||||
import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.World;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LimitedCreative-Region-Command: configure creative regions
|
* LimitedCreative-Region-Command: configure creative regions
|
||||||
|
@ -133,8 +138,7 @@ public class RegionsCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
if (idx > -1 && context.getArgument(idx) != null)
|
if (idx > -1 && context.getArgument(idx) != null)
|
||||||
w = Bukkit.getWorld(context.getArgument(idx));
|
w = Bukkit.getWorld(context.getArgument(idx));
|
||||||
if (w != null) {
|
if (w != null) {
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
RegionManager mgr = getWorldGuard().getRegionManager(w);
|
||||||
RegionManager mgr = container.get(BukkitAdapter.adapt(w));
|
|
||||||
if (mgr != null) {
|
if (mgr != null) {
|
||||||
List<String> hints = new ArrayList<String>();
|
List<String> hints = new ArrayList<String>();
|
||||||
for (String rId : mgr.getRegions().keySet()) {
|
for (String rId : mgr.getRegions().keySet()) {
|
||||||
|
@ -170,8 +174,7 @@ public class RegionsCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
if (w == null)
|
if (w == null)
|
||||||
throw new CommandException(L("command.worldguard.world_not_found"));
|
throw new CommandException(L("command.worldguard.world_not_found"));
|
||||||
|
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
RegionManager mgr = getWorldGuard().getRegionManager(w);
|
||||||
RegionManager mgr = container.get(BukkitAdapter.adapt(w));
|
|
||||||
ProtectedRegion region = mgr.getRegion(params.getArgument(0));
|
ProtectedRegion region = mgr.getRegion(params.getArgument(0));
|
||||||
if (region == null && params.getArgument(0).equalsIgnoreCase("__global__")) {
|
if (region == null && params.getArgument(0).equalsIgnoreCase("__global__")) {
|
||||||
region = new GlobalProtectedRegion(params.getArgument(0));
|
region = new GlobalProtectedRegion(params.getArgument(0));
|
||||||
|
@ -199,7 +202,7 @@ public class RegionsCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
String value = params.getValue();
|
String value = params.getValue();
|
||||||
try {
|
try {
|
||||||
if (value != null && value.trim().length() > 0) {
|
if (value != null && value.trim().length() > 0) {
|
||||||
reg.setFlag(flag, flag.parseInput(FlagContext.create().setInput(value).build()));
|
reg.setFlag(flag, flag.parseInput(getWorldGuard(), context.getSender(), value));
|
||||||
} else {
|
} else {
|
||||||
reg.setFlag(flag, null);
|
reg.setFlag(flag, null);
|
||||||
}
|
}
|
||||||
|
@ -234,18 +237,17 @@ public class RegionsCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
throw new CommandException(L("command.worldguard.world_not_found"));
|
throw new CommandException(L("command.worldguard.world_not_found"));
|
||||||
|
|
||||||
ProtectedRegion region = null;
|
ProtectedRegion region = null;
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
|
||||||
if (params.getArgumentCount() == 0 && context.isPlayer()) {
|
if (params.getArgumentCount() == 0 && context.isPlayer()) {
|
||||||
RegionManager mgr = container.get(BukkitAdapter.adapt(context.getPlayer().getWorld()));
|
RegionManager mgr = getWorldGuard().getRegionManager(context.getPlayer().getWorld());
|
||||||
ApplicableRegionSet set = mgr.getApplicableRegions(BukkitAdapter.asBlockVector(context.getPlayer().getLocation()));
|
ApplicableRegionSet set = mgr.getApplicableRegions(context.getPlayer().getLocation());
|
||||||
if (set.size() > 0) {
|
if (set.size() > 0) {
|
||||||
region = set.iterator().next();
|
region = set.iterator().next();
|
||||||
} else {
|
} else {
|
||||||
region = container.get(BukkitAdapter.adapt(w)).getRegion(GLOBAL_REGION);
|
region = getWorldGuard().getRegionManager(w).getRegion(GLOBAL_REGION);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int rpc = params.getArgumentCount() > 1 ? 1 : 0;
|
int rpc = params.getArgumentCount() > 1 ? 1 : 0;
|
||||||
RegionManager mgr = container.get(BukkitAdapter.adapt(w));
|
RegionManager mgr = getWorldGuard().getRegionManager(w);
|
||||||
region = mgr.getRegion(params.getArgument(rpc));
|
region = mgr.getRegion(params.getArgument(rpc));
|
||||||
if (region == null && params.getArgument(rpc).equalsIgnoreCase(GLOBAL_REGION)) {
|
if (region == null && params.getArgument(rpc).equalsIgnoreCase(GLOBAL_REGION)) {
|
||||||
region = new GlobalProtectedRegion(params.getArgument(rpc));
|
region = new GlobalProtectedRegion(params.getArgument(rpc));
|
||||||
|
|
|
@ -17,16 +17,14 @@
|
||||||
*/
|
*/
|
||||||
package de.jaschastarke.minecraft.limitedcreative.regions.worldguard;
|
package de.jaschastarke.minecraft.limitedcreative.regions.worldguard;
|
||||||
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import java.io.File;
|
||||||
import com.sk89q.worldguard.WorldGuard;
|
import java.io.IOException;
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
import java.util.ArrayList;
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
import java.util.Arrays;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import java.util.HashMap;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
import java.util.List;
|
||||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
import java.util.Map;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.ModRegions;
|
|
||||||
import de.jaschastarke.minecraft.limitedcreative.regions.WorldGuardIntegration;
|
|
||||||
import de.jaschastarke.utils.StringUtil;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
@ -34,9 +32,15 @@ import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.io.File;
|
import com.sk89q.worldguard.bukkit.BukkitUtil;
|
||||||
import java.io.IOException;
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
import java.util.*;
|
import com.sk89q.worldguard.protection.flags.Flag;
|
||||||
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
|
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.ModRegions;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.regions.WorldGuardIntegration;
|
||||||
|
import de.jaschastarke.utils.StringUtil;
|
||||||
|
|
||||||
public class CustomRegionManager {
|
public class CustomRegionManager {
|
||||||
protected YamlConfiguration c;
|
protected YamlConfiguration c;
|
||||||
|
@ -157,13 +161,12 @@ public class CustomRegionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegionManager getWGManager(World world) {
|
public RegionManager getWGManager(World world) {
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
return getWorldGuard().getRegionManager(world);
|
||||||
return container.get(BukkitAdapter.adapt(world));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRegionsHash(Location loc) {
|
public String getRegionsHash(Location loc) {
|
||||||
StringBuilder hash = new StringBuilder(loc.getWorld().getName());
|
StringBuilder hash = new StringBuilder(loc.getWorld().getName());
|
||||||
List<String> idlist = getWGManager(loc.getWorld()).getApplicableRegionsIDs(BukkitAdapter.asBlockVector(loc));
|
List<String> idlist = getWGManager(loc.getWorld()).getApplicableRegionsIDs(BukkitUtil.toVector(loc));
|
||||||
if (idlist.size() > 0) {
|
if (idlist.size() > 0) {
|
||||||
hash.append("#");
|
hash.append("#");
|
||||||
String[] ids = idlist.toArray(new String[idlist.size()]);
|
String[] ids = idlist.toArray(new String[idlist.size()]);
|
||||||
|
@ -176,7 +179,7 @@ public class CustomRegionManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApplicableRegions getRegionSet(Location loc) {
|
public ApplicableRegions getRegionSet(Location loc) {
|
||||||
return new ApplicableRegions(getWGManager(loc.getWorld()).getApplicableRegions(BukkitAdapter.asBlockVector(loc)), this.world(loc.getWorld()));
|
return new ApplicableRegions(getWGManager(loc.getWorld()).getApplicableRegions(loc), this.world(loc.getWorld()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApplicableRegions getRegionSet(Block block) {
|
public ApplicableRegions getRegionSet(Block block) {
|
||||||
|
|
2
src/main/resources/settings.properties
Normal file
2
src/main/resources/settings.properties
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
piwik_url = http://stats.ja-s.de/piwikProxy.php
|
||||||
|
piwik_site_id = 2
|
Loading…
Reference in a new issue