mirror of
https://github.com/EssentialsX/Essentials.git
synced 2024-09-06 04:58:00 +02:00
Merge branch '2.9' into release
This commit is contained in:
commit
44e9c6ebfc
83
.gitignore
vendored
83
.gitignore
vendored
@ -1,42 +1,45 @@
|
||||
.DS_Store
|
||||
/BuildAll/nbproject/private/
|
||||
/EssentialsProtect/nbproject/private/
|
||||
/EssentialsChat/nbproject/private/
|
||||
/EssentialsGroupBridge/nbproject/private/
|
||||
/EssentialsGeoIP/nbproject/private/
|
||||
/EssentialsSpawn/nbproject/private/
|
||||
/EssentialsXMPP/nbproject/private/
|
||||
/EssentialsGroupManager/nbproject/private/
|
||||
/BuildAll/build/
|
||||
/EssentialsGroupBridge/dist/
|
||||
/EssentialsGroupBridge/build/
|
||||
/EssentialsGeoIP/dist/
|
||||
/EssentialsGeoIP/build/
|
||||
/EssentialsGroupManager/build/
|
||||
/EssentialsGroupManager/dist/
|
||||
/BuildAll/dist/
|
||||
/EssentialsChat/build/
|
||||
/EssentialsChat/dist/
|
||||
/EssentialsSpawn/build/
|
||||
/EssentialsSpawn/dist/
|
||||
/EssentialsXMPP/dist/
|
||||
/EssentialsXMPP/build/
|
||||
/EssentialsProtect/dist/
|
||||
/EssentialsProtect/build/
|
||||
/EssentialsPermissionsCommands/nbproject/private/
|
||||
/EssentialsPermissionsCommands/build/
|
||||
/EssentialsPermissionsCommands/dist/
|
||||
/Essentials/nbproject/private/
|
||||
/Essentials/dist/
|
||||
/Essentials/build/
|
||||
/YamlAnnotations/
|
||||
/EssentialsUpdate/nbproject/private/
|
||||
/EssentialsRelease/
|
||||
/EssentialsUpdate/dist/
|
||||
/EssentialsUpdate/build/
|
||||
/WebPush/apikey.php
|
||||
/WebPush/nbproject/private
|
||||
/.idea
|
||||
.DS_Store
|
||||
/BuildAll/nbproject/private/
|
||||
/EssentialsProtect/nbproject/private/
|
||||
/EssentialsChat/nbproject/private/
|
||||
/EssentialsGroupBridge/nbproject/private/
|
||||
/EssentialsGeoIP/nbproject/private/
|
||||
/EssentialsSpawn/nbproject/private/
|
||||
/EssentialsXMPP/nbproject/private/
|
||||
/EssentialsGroupManager/nbproject/private/
|
||||
/BuildAll/build/
|
||||
/EssentialsGroupBridge/dist/
|
||||
/EssentialsGroupBridge/build/
|
||||
/EssentialsGeoIP/dist/
|
||||
/EssentialsGeoIP/build/
|
||||
/EssentialsGroupManager/build/
|
||||
/EssentialsGroupManager/dist/
|
||||
/BuildAll/dist/
|
||||
/EssentialsChat/build/
|
||||
/EssentialsChat/dist/
|
||||
/EssentialsSpawn/build/
|
||||
/EssentialsSpawn/dist/
|
||||
/EssentialsXMPP/dist/
|
||||
/EssentialsXMPP/build/
|
||||
/EssentialsProtect/dist/
|
||||
/EssentialsProtect/build/
|
||||
/EssentialsPermissionsCommands/nbproject/private/
|
||||
/EssentialsPermissionsCommands/build/
|
||||
/EssentialsPermissionsCommands/dist/
|
||||
/Essentials/nbproject/private/
|
||||
/Essentials/dist/
|
||||
/Essentials/build/
|
||||
/YamlAnnotations/
|
||||
/EssentialsUpdate/nbproject/private/
|
||||
/EssentialsRelease/
|
||||
/EssentialsUpdate/dist/
|
||||
/EssentialsUpdate/build/
|
||||
/WebPush/apikey.php
|
||||
/WebPush/nbproject/private
|
||||
/.idea
|
||||
*.iml
|
||||
/EssentialsGroupManager/bin
|
||||
/EssentialsGroupManager/.externalToolBuilders
|
||||
/EssentialsGroupManager/.externalToolBuilders
|
||||
/EssentialsAntiBuild/nbproject/private/
|
||||
/EssentialsAntiBuild/dist/
|
||||
/EssentialsAntiBuild/build/
|
@ -12,9 +12,9 @@ is divided into following sections:
|
||||
- execution
|
||||
- debugging
|
||||
- javadoc
|
||||
- test compilation
|
||||
- test execution
|
||||
- test debugging
|
||||
- junit compilation
|
||||
- junit execution
|
||||
- junit debugging
|
||||
- applet
|
||||
- cleanup
|
||||
|
||||
@ -181,7 +181,6 @@ is divided into following sections:
|
||||
</and>
|
||||
</condition>
|
||||
<property name="run.jvmargs" value=""/>
|
||||
<property name="run.jvmargs.ide" value=""/>
|
||||
<property name="javac.compilerargs" value=""/>
|
||||
<property name="work.dir" value="${basedir}"/>
|
||||
<condition property="no.deps">
|
||||
@ -226,27 +225,6 @@ is divided into following sections:
|
||||
<property name="jar.index.metainf" value="${jar.index}"/>
|
||||
<property name="copylibs.rebase" value="true"/>
|
||||
<available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
|
||||
<condition property="junit.available">
|
||||
<or>
|
||||
<available classname="org.junit.Test" classpath="${run.test.classpath}"/>
|
||||
<available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
|
||||
</or>
|
||||
</condition>
|
||||
<condition property="testng.available">
|
||||
<available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
|
||||
</condition>
|
||||
<condition property="junit+testng.available">
|
||||
<and>
|
||||
<istrue value="${junit.available}"/>
|
||||
<istrue value="${testng.available}"/>
|
||||
</and>
|
||||
</condition>
|
||||
<condition else="testng" property="testng.mode" value="mixed">
|
||||
<istrue value="${junit+testng.available}"/>
|
||||
</condition>
|
||||
<condition else="" property="testng.debug.mode" value="-mixed">
|
||||
<istrue value="${junit+testng.available}"/>
|
||||
</condition>
|
||||
</target>
|
||||
<target name="-post-init">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
@ -379,52 +357,11 @@ is divided into following sections:
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${junit.available}" name="-init-macrodef-junit-init">
|
||||
<condition else="false" property="nb.junit.batch" value="true">
|
||||
<and>
|
||||
<istrue value="${junit.available}"/>
|
||||
<not>
|
||||
<isset property="test.method"/>
|
||||
</not>
|
||||
</and>
|
||||
</condition>
|
||||
<condition else="false" property="nb.junit.single" value="true">
|
||||
<and>
|
||||
<istrue value="${junit.available}"/>
|
||||
<isset property="test.method"/>
|
||||
</and>
|
||||
</condition>
|
||||
</target>
|
||||
<target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
|
||||
<target name="-init-macrodef-junit">
|
||||
<macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<property name="junit.forkmode" value="perTest"/>
|
||||
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||||
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg value="-ea"/>
|
||||
<customize/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
|
||||
<macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<property name="junit.forkmode" value="perTest"/>
|
||||
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||||
@ -433,270 +370,32 @@ is divided into following sections:
|
||||
<filename name="@{testincludes}"/>
|
||||
</fileset>
|
||||
</batchtest>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
</classpath>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
|
||||
<jvmarg value="-ea"/>
|
||||
<customize/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
|
||||
<target if="${testng.available}" name="-init-macrodef-testng">
|
||||
<macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
|
||||
<isset property="test.method"/>
|
||||
</condition>
|
||||
<union id="test.set">
|
||||
<fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
|
||||
<filename name="@{testincludes}"/>
|
||||
</fileset>
|
||||
</union>
|
||||
<taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
|
||||
<testng classfilesetref="test.set" failureProperty="tests.failed" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="BuildAll" testname="TestNG tests" workingDir="${work.dir}">
|
||||
<xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
|
||||
<propertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</propertyset>
|
||||
<customize/>
|
||||
</testng>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-macrodef-test-impl">
|
||||
<macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element implicit="true" name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<echo>No tests executed.</echo>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
|
||||
<macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element implicit="true" name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize/>
|
||||
</j2seproject3:junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
|
||||
<macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element implicit="true" name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize/>
|
||||
</j2seproject3:testng>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
|
||||
<macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<sequential>
|
||||
<j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
</classpath>
|
||||
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<jvmarg line="${run.jvmargs.ide}"/>
|
||||
</customize>
|
||||
</j2seproject3:test-impl>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
|
||||
<macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<property name="junit.forkmode" value="perTest"/>
|
||||
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||||
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg value="-ea"/>
|
||||
<jvmarg line="${debug-args-line}"/>
|
||||
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
|
||||
<customize/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
|
||||
<macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<property name="junit.forkmode" value="perTest"/>
|
||||
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||||
<batchtest todir="${build.test.results.dir}">
|
||||
<fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
|
||||
<filename name="@{testincludes}"/>
|
||||
</fileset>
|
||||
</batchtest>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg value="-ea"/>
|
||||
<jvmarg line="${debug-args-line}"/>
|
||||
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
|
||||
<customize/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
|
||||
<macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element implicit="true" name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize/>
|
||||
</j2seproject3:junit-debug>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${testng.available}" name="-init-macrodef-testng-debug">
|
||||
<macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${main.class}" name="testClass"/>
|
||||
<attribute default="" name="testMethod"/>
|
||||
<element name="customize2" optional="true"/>
|
||||
<sequential>
|
||||
<condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
|
||||
<isset property="test.method"/>
|
||||
</condition>
|
||||
<condition else="-suitename BuildAll -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
|
||||
<matches pattern=".*\.xml" string="@{testClass}"/>
|
||||
</condition>
|
||||
<delete dir="${build.test.results.dir}" quiet="true"/>
|
||||
<mkdir dir="${build.test.results.dir}"/>
|
||||
<j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
|
||||
<customize>
|
||||
<customize2/>
|
||||
<jvmarg value="-ea"/>
|
||||
<arg line="${testng.debug.mode}"/>
|
||||
<arg line="-d ${build.test.results.dir}"/>
|
||||
<arg line="-listener org.testng.reporters.VerboseReporter"/>
|
||||
<arg line="${testng.cmd.args}"/>
|
||||
</customize>
|
||||
</j2seproject3:debug>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
|
||||
<macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${main.class}" name="testClass"/>
|
||||
<attribute default="" name="testMethod"/>
|
||||
<element implicit="true" name="customize2" optional="true"/>
|
||||
<sequential>
|
||||
<j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
|
||||
<customize2/>
|
||||
</j2seproject3:testng-debug>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
|
||||
<macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<attribute default="${main.class}" name="testClass"/>
|
||||
<attribute default="" name="testMethod"/>
|
||||
<sequential>
|
||||
<j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
</classpath>
|
||||
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<jvmarg line="${run.jvmargs.ide}"/>
|
||||
</customize>
|
||||
</j2seproject3:test-debug-impl>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
|
||||
<macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<attribute default="${main.class}" name="testClass"/>
|
||||
<attribute default="" name="testMethod"/>
|
||||
<sequential>
|
||||
<j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
|
||||
<customize2>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
</customize2>
|
||||
</j2seproject3:testng-debug-impl>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
|
||||
<!--
|
||||
pre NB7.2 profiling section; consider it deprecated
|
||||
-->
|
||||
<target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
|
||||
<target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
|
||||
<target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" name="profile-init"/>
|
||||
<target name="-profile-pre-init">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target if="profiler.info.jvmargs.agent" name="-profile-post-init">
|
||||
<target name="-profile-post-init">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">
|
||||
<target name="-profile-init-macrodef-profile">
|
||||
<macrodef name="resolve">
|
||||
<attribute name="name"/>
|
||||
<attribute name="value"/>
|
||||
@ -728,13 +427,10 @@ is divided into following sections:
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">
|
||||
<target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" name="-profile-init-check">
|
||||
<fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
|
||||
<fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
|
||||
</target>
|
||||
<!--
|
||||
end of pre NB7.2 profiling section
|
||||
-->
|
||||
<target depends="-init-debug-args" name="-init-macrodef-nbjpda">
|
||||
<macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute default="${main.class}" name="name"/>
|
||||
@ -792,7 +488,6 @@ is divided into following sections:
|
||||
<jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
|
||||
<redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<jvmarg line="${run.jvmargs.ide}"/>
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
@ -809,7 +504,6 @@ is divided into following sections:
|
||||
<macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute default="${main.class}" name="classname"/>
|
||||
<attribute default="${run.classpath}" name="classpath"/>
|
||||
<attribute default="jvm" name="jvm"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<java classname="@{classname}" dir="${work.dir}" fork="true">
|
||||
@ -817,7 +511,6 @@ is divided into following sections:
|
||||
<jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
|
||||
<redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<jvmarg line="${run.jvmargs.ide}"/>
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
@ -844,9 +537,6 @@ is divided into following sections:
|
||||
<path path="${run.classpath.without.build.classes.dir}"/>
|
||||
<chainedmapper>
|
||||
<flattenmapper/>
|
||||
<filtermapper>
|
||||
<replacestring from=" " to="%20"/>
|
||||
</filtermapper>
|
||||
<globmapper from="*" to="lib/*"/>
|
||||
</chainedmapper>
|
||||
</pathconvert>
|
||||
@ -892,7 +582,7 @@ is divided into following sections:
|
||||
<target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
|
||||
<property name="ap.cmd.line.internal" value=""/>
|
||||
</target>
|
||||
<target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
|
||||
<target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
|
||||
<!--
|
||||
===================
|
||||
COMPILATION SECTION
|
||||
@ -948,6 +638,13 @@ is divided into following sections:
|
||||
<param name="call.target" value="jar"/>
|
||||
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
|
||||
</antcall>
|
||||
<antcall target="-maybe-call-dep">
|
||||
<param name="call.built.properties" value="${built-jar.properties}"/>
|
||||
<param location="${project.EssentialsAntiBuild}" name="call.subproject"/>
|
||||
<param location="${project.EssentialsAntiBuild}/build.xml" name="call.script"/>
|
||||
<param name="call.target" value="jar"/>
|
||||
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
|
||||
</antcall>
|
||||
<antcall target="-maybe-call-dep">
|
||||
<param name="call.built.properties" value="${built-jar.properties}"/>
|
||||
<param location="${project.EssentialsProtect}" name="call.subproject"/>
|
||||
@ -1164,11 +861,7 @@ is divided into following sections:
|
||||
PROFILING SECTION
|
||||
=================
|
||||
-->
|
||||
<!--
|
||||
pre NB7.2 profiler integration
|
||||
-->
|
||||
<target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
|
||||
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
|
||||
<target depends="profile-init,compile" description="Profile a project in the IDE." if="netbeans.home" name="profile">
|
||||
<nbprofiledirect>
|
||||
<classpath>
|
||||
<path path="${run.classpath}"/>
|
||||
@ -1176,9 +869,8 @@ is divided into following sections:
|
||||
</nbprofiledirect>
|
||||
<profile/>
|
||||
</target>
|
||||
<target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
|
||||
<target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="netbeans.home" name="profile-single">
|
||||
<fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
|
||||
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
|
||||
<nbprofiledirect>
|
||||
<classpath>
|
||||
<path path="${run.classpath}"/>
|
||||
@ -1186,8 +878,12 @@ is divided into following sections:
|
||||
</nbprofiledirect>
|
||||
<profile classname="${profile.class}"/>
|
||||
</target>
|
||||
<target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
|
||||
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
|
||||
<!--
|
||||
=========================
|
||||
APPLET PROFILING SECTION
|
||||
=========================
|
||||
-->
|
||||
<target depends="profile-init,compile-single" if="netbeans.home" name="profile-applet">
|
||||
<nbprofiledirect>
|
||||
<classpath>
|
||||
<path path="${run.classpath}"/>
|
||||
@ -1199,8 +895,12 @@ is divided into following sections:
|
||||
</customize>
|
||||
</profile>
|
||||
</target>
|
||||
<target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
|
||||
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
|
||||
<!--
|
||||
=========================
|
||||
TESTS PROFILING SECTION
|
||||
=========================
|
||||
-->
|
||||
<target depends="profile-init,compile-test-single" if="netbeans.home" name="profile-test-single">
|
||||
<nbprofiledirect>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
@ -1222,42 +922,6 @@ is divided into following sections:
|
||||
<formatter type="xml"/>
|
||||
</junit>
|
||||
</target>
|
||||
<!--
|
||||
end of pre NB72 profiling section
|
||||
-->
|
||||
<target if="netbeans.home" name="-profile-check">
|
||||
<condition property="profiler.configured">
|
||||
<or>
|
||||
<contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
|
||||
<contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
|
||||
</or>
|
||||
</condition>
|
||||
</target>
|
||||
<target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
|
||||
<startprofiler/>
|
||||
<antcall target="run"/>
|
||||
</target>
|
||||
<target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
|
||||
<fail unless="run.class">Must select one file in the IDE or set run.class</fail>
|
||||
<startprofiler/>
|
||||
<antcall target="run-single"/>
|
||||
</target>
|
||||
<target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
|
||||
<target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
|
||||
<fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
|
||||
<startprofiler/>
|
||||
<antcall target="test-single"/>
|
||||
</target>
|
||||
<target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
|
||||
<fail unless="run.class">Must select one file in the IDE or set run.class</fail>
|
||||
<startprofiler/>
|
||||
<antcal target="run-test-with-main"/>
|
||||
</target>
|
||||
<target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
|
||||
<fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
|
||||
<startprofiler/>
|
||||
<antcall target="run-applet"/>
|
||||
</target>
|
||||
<!--
|
||||
===============
|
||||
JAVADOC SECTION
|
||||
@ -1301,7 +965,7 @@ is divided into following sections:
|
||||
<target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
|
||||
<!--
|
||||
=========================
|
||||
TEST COMPILATION SECTION
|
||||
JUNIT COMPILATION SECTION
|
||||
=========================
|
||||
-->
|
||||
<target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
|
||||
@ -1344,14 +1008,14 @@ is divided into following sections:
|
||||
<target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
|
||||
<!--
|
||||
=======================
|
||||
TEST EXECUTION SECTION
|
||||
JUNIT EXECUTION SECTION
|
||||
=======================
|
||||
-->
|
||||
<target depends="init" if="have.tests" name="-pre-test-run">
|
||||
<mkdir dir="${build.test.results.dir}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
|
||||
<j2seproject3:test testincludes="**/*Test.java"/>
|
||||
<j2seproject3:junit testincludes="**/*Test.java"/>
|
||||
</target>
|
||||
<target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
|
||||
<fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
|
||||
@ -1364,40 +1028,39 @@ is divided into following sections:
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
|
||||
<fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
|
||||
<j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
|
||||
<j2seproject3:junit excludes="" includes="${test.includes}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
|
||||
<fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
|
||||
<fail unless="test.class">Must select some files in the IDE or set test.class</fail>
|
||||
<fail unless="test.method">Must select some method in the IDE or set test.method</fail>
|
||||
<j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
|
||||
<fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
|
||||
<!--
|
||||
=======================
|
||||
TEST DEBUGGING SECTION
|
||||
JUNIT DEBUGGING SECTION
|
||||
=======================
|
||||
-->
|
||||
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
|
||||
<target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test">
|
||||
<fail unless="test.class">Must select one file in the IDE or set test.class</fail>
|
||||
<j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
|
||||
<fail unless="test.class">Must select one file in the IDE or set test.class</fail>
|
||||
<fail unless="test.method">Must select some method in the IDE or set test.method</fail>
|
||||
<j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
|
||||
<property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/>
|
||||
<delete file="${test.report.file}"/>
|
||||
<mkdir dir="${build.test.results.dir}"/>
|
||||
<j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}">
|
||||
<customize>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<arg value="${test.class}"/>
|
||||
<arg value="showoutput=true"/>
|
||||
<arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>
|
||||
<arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>
|
||||
</customize>
|
||||
</j2seproject3:debug>
|
||||
</target>
|
||||
<target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
|
||||
<j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
|
||||
<target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
|
||||
<target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
|
||||
<j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
|
||||
</target>
|
||||
@ -1484,6 +1147,13 @@ is divided into following sections:
|
||||
<param name="call.target" value="clean"/>
|
||||
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
|
||||
</antcall>
|
||||
<antcall target="-maybe-call-dep">
|
||||
<param name="call.built.properties" value="${built-clean.properties}"/>
|
||||
<param location="${project.EssentialsAntiBuild}" name="call.subproject"/>
|
||||
<param location="${project.EssentialsAntiBuild}/build.xml" name="call.script"/>
|
||||
<param name="call.target" value="clean"/>
|
||||
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
|
||||
</antcall>
|
||||
<antcall target="-maybe-call-dep">
|
||||
<param name="call.built.properties" value="${built-clean.properties}"/>
|
||||
<param location="${project.EssentialsProtect}" name="call.subproject"/>
|
||||
@ -1518,12 +1188,9 @@ is divided into following sections:
|
||||
<target name="-check-call-dep">
|
||||
<property file="${call.built.properties}" prefix="already.built."/>
|
||||
<condition property="should.call.dep">
|
||||
<and>
|
||||
<not>
|
||||
<isset property="already.built.${call.subproject}"/>
|
||||
</not>
|
||||
<available file="${call.script}"/>
|
||||
</and>
|
||||
<not>
|
||||
<isset property="already.built.${call.subproject}"/>
|
||||
</not>
|
||||
</condition>
|
||||
</target>
|
||||
<target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
|
||||
|
@ -1,8 +1,8 @@
|
||||
build.xml.data.CRC32=51b33957
|
||||
build.xml.data.CRC32=b4df970c
|
||||
build.xml.script.CRC32=7a797370
|
||||
build.xml.stylesheet.CRC32=28e38971@1.44.1.45
|
||||
build.xml.stylesheet.CRC32=28e38971@1.50.3.46
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=51b33957
|
||||
nbproject/build-impl.xml.script.CRC32=2a17f1e9
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
|
||||
nbproject/build-impl.xml.data.CRC32=b4df970c
|
||||
nbproject/build-impl.xml.script.CRC32=1fd6d3cc
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.3.46
|
||||
|
@ -66,6 +66,7 @@ jar.compress=true
|
||||
javac.classpath=\
|
||||
${reference.Essentials.jar}:\
|
||||
${reference.EssentialsChat.jar}:\
|
||||
${reference.EssentialsAntiBuild.jar}:\
|
||||
${reference.EssentialsProtect.jar}:\
|
||||
${reference.EssentialsSpawn.jar}:\
|
||||
${reference.EssentialsGeoIP.jar}:\
|
||||
@ -103,6 +104,7 @@ project.EssentialsChat=../EssentialsChat
|
||||
project.EssentialsGeoIP=../EssentialsGeoIP
|
||||
project.EssentialsGroupBridge=../EssentialsGroupBridge
|
||||
project.EssentialsGroupManager=../EssentialsGroupManager
|
||||
project.EssentialsAntiBuild=../EssentialsAntiBuild
|
||||
project.EssentialsProtect=../EssentialsProtect
|
||||
project.EssentialsSpawn=../EssentialsSpawn
|
||||
project.EssentialsXMPP=../EssentialsXMPP
|
||||
@ -111,6 +113,7 @@ reference.EssentialsChat.jar=${project.EssentialsChat}/dist/EssentialsChat.jar
|
||||
reference.EssentialsGeoIP.jar=${project.EssentialsGeoIP}/dist/EssentialsGeoIP.jar
|
||||
reference.EssentialsGroupBridge.jar=${project.EssentialsGroupBridge}/dist/EssentialsGroupBridge.jar
|
||||
reference.EssentialsGroupManager.jar=${project.EssentialsGroupManager}/dist/EssentialsGroupManager.jar
|
||||
reference.EssentialsAntiBuild.jar=${project.EssentialsAntiBuild}/dist/EssentialsAntiBuild.jar
|
||||
reference.EssentialsProtect.jar=${project.EssentialsProtect}/dist/EssentialsProtect.jar
|
||||
reference.EssentialsSpawn.jar=${project.EssentialsSpawn}/dist/EssentialsSpawn.jar
|
||||
reference.EssentialsXMPP.jar=${project.EssentialsXMPP}/dist/EssentialsXMPP.jar
|
||||
|
@ -55,6 +55,14 @@
|
||||
<clean-target>clean</clean-target>
|
||||
<id>jar</id>
|
||||
</reference>
|
||||
<reference>
|
||||
<foreign-project>EssentialsAntiBuild</foreign-project>
|
||||
<artifact-type>jar</artifact-type>
|
||||
<script>build.xml</script>
|
||||
<target>jar</target>
|
||||
<clean-target>clean</clean-target>
|
||||
<id>jar</id>
|
||||
</reference>
|
||||
<reference>
|
||||
<foreign-project>EssentialsProtect</foreign-project>
|
||||
<artifact-type>jar</artifact-type>
|
||||
|
@ -1,5 +1,5 @@
|
||||
annotation.processing.enabled=true
|
||||
annotation.processing.enabled.in.editor=false
|
||||
annotation.processing.enabled.in.editor=true
|
||||
annotation.processing.processors.list=lombok.core.AnnotationProcessor
|
||||
annotation.processing.run.all.processors=false
|
||||
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
|
||||
|
@ -70,7 +70,8 @@ public class I18n implements II18n
|
||||
|
||||
public static String _(final String string, final Object... objects)
|
||||
{
|
||||
if (instance == null) {
|
||||
if (instance == null)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
if (objects.length == 0)
|
||||
@ -85,11 +86,20 @@ public class I18n implements II18n
|
||||
|
||||
public String format(final String string, final Object... objects)
|
||||
{
|
||||
final String format = translate(string);
|
||||
String format = translate(string);
|
||||
MessageFormat messageFormat = messageFormatCache.get(format);
|
||||
if (messageFormat == null)
|
||||
{
|
||||
messageFormat = new MessageFormat(format);
|
||||
try
|
||||
{
|
||||
messageFormat = new MessageFormat(format);
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
{
|
||||
ess.getLogger().log(Level.SEVERE, "Invalid Translation key for '" + string + "': " + e.getMessage());
|
||||
format = format.replaceAll("\\{(\\D*?)\\}", "\\[$1\\]");
|
||||
messageFormat = new MessageFormat(format);
|
||||
}
|
||||
messageFormatCache.put(format, messageFormat);
|
||||
}
|
||||
return messageFormat.format(objects);
|
||||
|
@ -1,9 +1,5 @@
|
||||
package com.earth2me.essentials;
|
||||
|
||||
/**
|
||||
* @deprecated New interface will be IReload in api package
|
||||
*/
|
||||
@Deprecated
|
||||
public interface IConf {
|
||||
public void reloadConfig();
|
||||
}
|
||||
|
@ -12,10 +12,6 @@ import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated This will be moved to the api package soon
|
||||
*/
|
||||
@Deprecated
|
||||
public interface IEssentials extends Plugin
|
||||
{
|
||||
void addReloadListener(IConf listener);
|
||||
|
@ -5,10 +5,6 @@ import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated This will be moved to the api package soon
|
||||
*/
|
||||
@Deprecated
|
||||
public interface IUser extends Player
|
||||
{
|
||||
long getLastTeleportTimestamp();
|
||||
|
@ -78,6 +78,7 @@ public class Kit
|
||||
{
|
||||
throw new Exception(_("kitError2"));
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -63,6 +63,12 @@ public class Trade
|
||||
|
||||
public void isAffordableFor(final IUser user) throws ChargeException
|
||||
{
|
||||
|
||||
if (ess.getSettings().isDebug())
|
||||
{
|
||||
ess.getLogger().log(Level.INFO, "checking if " + user.getName() + " can afford charge.");
|
||||
}
|
||||
|
||||
if (getMoney() != null
|
||||
&& getMoney() > 0
|
||||
&& !user.canAfford(getMoney()))
|
||||
@ -206,8 +212,17 @@ public class Trade
|
||||
cost = ess.getSettings().getCommandCost(command.charAt(0) == '/' ? command.substring(1) : command);
|
||||
if (cost == 0.0 && fallbackCommand != null && !fallbackCommand.isEmpty())
|
||||
{
|
||||
if (ess.getSettings().isDebug())
|
||||
{
|
||||
ess.getLogger().log(Level.INFO, "checking fallback command cost (" + fallbackCommand + ") cost for " + user.getName());
|
||||
}
|
||||
cost = ess.getSettings().getCommandCost(fallbackCommand.charAt(0) == '/' ? fallbackCommand.substring(1) : fallbackCommand);
|
||||
}
|
||||
|
||||
if (ess.getSettings().isDebug())
|
||||
{
|
||||
ess.getLogger().log(Level.INFO, "calculated command (" + command + ") cost for " + user.getName() + " as " + cost);
|
||||
}
|
||||
}
|
||||
return cost;
|
||||
}
|
||||
|
@ -1,10 +0,0 @@
|
||||
package com.earth2me.essentials.api;
|
||||
|
||||
import java.util.Map;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
|
||||
|
||||
public interface IAlternativeCommandsHandler
|
||||
{
|
||||
Map<String, String> disabledCommands();
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
package com.earth2me.essentials.api;
|
||||
|
||||
import com.earth2me.essentials.perm.IPermissionsHandler;
|
||||
import com.earth2me.essentials.register.payment.Methods;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public interface IEssentials extends Plugin, IReload
|
||||
{
|
||||
void addReloadListener(IReload listener);
|
||||
|
||||
IUser getUser(Object base);
|
||||
|
||||
int broadcastMessage(IUser sender, String message);
|
||||
|
||||
II18n getI18n();
|
||||
|
||||
ISettings getSettings();
|
||||
|
||||
IJails getJail();
|
||||
|
||||
IWarps getWarps();
|
||||
|
||||
IWorth getWorth();
|
||||
|
||||
IItemDb getItemDb();
|
||||
|
||||
IUserMap getUserMap();
|
||||
|
||||
IEssentialsEconomy getEconomy();
|
||||
|
||||
World getWorld(String name);
|
||||
|
||||
Methods getPaymentMethod();
|
||||
|
||||
int scheduleAsyncDelayedTask(Runnable run);
|
||||
|
||||
int scheduleSyncDelayedTask(Runnable run);
|
||||
|
||||
int scheduleSyncDelayedTask(Runnable run, long delay);
|
||||
|
||||
int scheduleSyncRepeatingTask(Runnable run, long delay, long period);
|
||||
|
||||
IPermissionsHandler getPermissionsHandler();
|
||||
|
||||
IAlternativeCommandsHandler getAlternativeCommandsHandler();
|
||||
|
||||
void showCommandError(CommandSender sender, String commandLabel, Throwable exception);
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
package com.earth2me.essentials.api;
|
||||
|
||||
|
||||
public interface IEssentialsEconomy
|
||||
{
|
||||
double getMoney(String name) throws UserDoesNotExistException;
|
||||
|
||||
void setMoney(String name, double balance) throws UserDoesNotExistException, NoLoanPermittedException;
|
||||
|
||||
void add(String name, double amount) throws UserDoesNotExistException, NoLoanPermittedException;
|
||||
|
||||
void subtract(String name, double amount) throws UserDoesNotExistException, NoLoanPermittedException;
|
||||
|
||||
void divide(String name, double value) throws UserDoesNotExistException, NoLoanPermittedException;
|
||||
|
||||
void multiply(String name, double value) throws UserDoesNotExistException, NoLoanPermittedException;
|
||||
|
||||
void resetBalance(String name) throws UserDoesNotExistException, NoLoanPermittedException;
|
||||
|
||||
boolean hasEnough(String name, double amount) throws UserDoesNotExistException;
|
||||
|
||||
boolean hasMore(String name, double amount) throws UserDoesNotExistException;
|
||||
|
||||
boolean hasLess(String name, double amount) throws UserDoesNotExistException;
|
||||
|
||||
boolean isNegative(String name) throws UserDoesNotExistException;
|
||||
|
||||
String format(double amount);
|
||||
|
||||
boolean playerExists(String name);
|
||||
|
||||
boolean isNPC(String name) throws UserDoesNotExistException;
|
||||
|
||||
boolean createNPC(String name);
|
||||
|
||||
void removeNPC(String name) throws UserDoesNotExistException;
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
package com.earth2me.essentials.api;
|
||||
|
||||
import com.earth2me.essentials.settings.Settings;
|
||||
import com.earth2me.essentials.storage.IStorageObjectHolder;
|
||||
|
||||
|
||||
public interface ISettings extends IStorageObjectHolder<Settings>
|
||||
{
|
||||
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package com.earth2me.essentials.api;
|
||||
|
||||
import com.earth2me.essentials.commands.IEssentialsCommand;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
public interface IUser extends Player, IReload
|
||||
{
|
||||
long getLastTeleportTimestamp();
|
||||
|
||||
boolean isAuthorized(String node);
|
||||
|
||||
boolean isAuthorized(IEssentialsCommand cmd);
|
||||
|
||||
boolean isAuthorized(IEssentialsCommand cmd, String permissionPrefix);
|
||||
|
||||
void setLastTeleportTimestamp(long time);
|
||||
|
||||
Location getLastLocation();
|
||||
|
||||
Player getBase();
|
||||
|
||||
double getMoney();
|
||||
|
||||
void takeMoney(double value);
|
||||
|
||||
void giveMoney(double value);
|
||||
|
||||
String getGroup();
|
||||
|
||||
void setLastLocation();
|
||||
|
||||
Location getHome(String name) throws Exception;
|
||||
|
||||
Location getHome(Location loc) throws Exception;
|
||||
|
||||
boolean isHidden();
|
||||
|
||||
ITeleport getTeleport();
|
||||
|
||||
void setJail(String jail);
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
package com.earth2me.essentials.api;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
public interface IUserMap
|
||||
{
|
||||
boolean userExists(final String name);
|
||||
|
||||
IUser getUser(final String name);
|
||||
|
||||
void removeUser(final String name);
|
||||
|
||||
Set<String> getAllUniqueUsers();
|
||||
|
||||
int getUniqueUsers();
|
||||
|
||||
File getUserFile(final String name);
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
package com.earth2me.essentials.api;
|
||||
|
||||
import java.util.Collection;
|
||||
import org.bukkit.Location;
|
||||
|
||||
|
||||
public interface IWarps extends IReload
|
||||
{
|
||||
Location getWarp(String warp) throws Exception;
|
||||
|
||||
Collection<String> getWarps();
|
||||
|
||||
void removeWarp(String name) throws Exception;
|
||||
|
||||
void setWarp(String name, Location loc) throws Exception;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
package com.earth2me.essentials.api;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
public interface IWorth extends IReload
|
||||
{
|
||||
double getPrice(ItemStack itemStack);
|
||||
|
||||
void setPrice(ItemStack itemStack, double price);
|
||||
}
|
@ -3,6 +3,7 @@ package com.earth2me.essentials.commands;
|
||||
import com.earth2me.essentials.Console;
|
||||
import static com.earth2me.essentials.I18n._;
|
||||
import com.earth2me.essentials.User;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -55,6 +56,8 @@ public class Commandban extends EssentialsCommand
|
||||
user.setBanReason(banReason);
|
||||
user.setBanned(true);
|
||||
user.kickPlayer(banReason);
|
||||
|
||||
server.getLogger().log(Level.INFO, _("playerBanned", senderName, user.getName(), banReason));
|
||||
|
||||
for (Player onlinePlayer : server.getOnlinePlayers())
|
||||
{
|
||||
|
@ -23,53 +23,86 @@ public class Commandgamemode extends EssentialsCommand
|
||||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
gamemodeOtherPlayers(server, sender, args);
|
||||
GameMode gameMode = matchGameMode(args[0].toLowerCase(Locale.ENGLISH));
|
||||
gamemodeOtherPlayers(server, sender, gameMode, args[1]);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
|
||||
{
|
||||
if (args.length < 1)
|
||||
GameMode gameMode;
|
||||
if (args.length == 0)
|
||||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
gameMode = matchGameMode(commandLabel);
|
||||
}
|
||||
|
||||
if (args.length > 1 && args[1].trim().length() > 2 && user.isAuthorized("essentials.gamemode.others"))
|
||||
else if (args.length > 1 && args[1].trim().length() > 2 && user.isAuthorized("essentials.gamemode.others"))
|
||||
{
|
||||
gamemodeOtherPlayers(server, user, args);
|
||||
gameMode = matchGameMode(args[0].toLowerCase(Locale.ENGLISH));
|
||||
gamemodeOtherPlayers(server, user, gameMode, args[1]);
|
||||
return;
|
||||
}
|
||||
performSetMode(args[0].toLowerCase(Locale.ENGLISH), user);
|
||||
else
|
||||
{
|
||||
try {
|
||||
gameMode = matchGameMode(args[0].toLowerCase(Locale.ENGLISH));
|
||||
}
|
||||
catch (NotEnoughArgumentsException e) {
|
||||
gameMode = matchGameMode(commandLabel);
|
||||
gamemodeOtherPlayers(server, user, gameMode, args[0]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
user.setGameMode(gameMode);
|
||||
user.sendMessage(_("gameMode", _(user.getGameMode().toString().toLowerCase(Locale.ENGLISH)), user.getDisplayName()));
|
||||
}
|
||||
|
||||
private void gamemodeOtherPlayers(final Server server, final CommandSender sender, final String[] args)
|
||||
private void gamemodeOtherPlayers(final Server server, final CommandSender sender, final GameMode gameMode, final String player) throws NotEnoughArgumentsException
|
||||
{
|
||||
for (Player matchPlayer : server.matchPlayer(args[1]))
|
||||
//TODO: TL this
|
||||
if (player.trim().length() < 2)
|
||||
{
|
||||
final User player = ess.getUser(matchPlayer);
|
||||
if (player.isHidden())
|
||||
throw new NotEnoughArgumentsException("You need to specify a valid player/mode.");
|
||||
}
|
||||
|
||||
boolean foundUser = false;
|
||||
for (Player matchPlayer : server.matchPlayer(player))
|
||||
{
|
||||
final User user = ess.getUser(matchPlayer);
|
||||
if (user.isHidden())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
performSetMode(args[0].toLowerCase(Locale.ENGLISH), player);
|
||||
sender.sendMessage(_("gameMode", _(player.getGameMode().toString().toLowerCase(Locale.ENGLISH)), player.getDisplayName()));
|
||||
user.setGameMode(gameMode);
|
||||
sender.sendMessage(_("gameMode", _(user.getGameMode().toString().toLowerCase(Locale.ENGLISH)), user.getDisplayName()));
|
||||
foundUser = true;
|
||||
}
|
||||
if (!foundUser)
|
||||
{
|
||||
throw new NotEnoughArgumentsException(_("playerNotFound"));
|
||||
}
|
||||
}
|
||||
|
||||
private void performSetMode(String mode, Player player)
|
||||
private GameMode matchGameMode(String modeString) throws NotEnoughArgumentsException
|
||||
{
|
||||
if (mode.contains("survi") || mode.equalsIgnoreCase("0") || mode.equalsIgnoreCase("s"))
|
||||
GameMode mode = null;
|
||||
if (modeString.equalsIgnoreCase("gmc") || modeString.equalsIgnoreCase("egmc")
|
||||
|| modeString.contains("creat") || modeString.equalsIgnoreCase("1") || modeString.equalsIgnoreCase("c"))
|
||||
{
|
||||
player.setGameMode(GameMode.SURVIVAL);
|
||||
mode = GameMode.CREATIVE;
|
||||
}
|
||||
else if (mode.contains("creat") || mode.equalsIgnoreCase("1") || mode.equalsIgnoreCase("c"))
|
||||
else if (modeString.equalsIgnoreCase("gms") || modeString.equalsIgnoreCase("egms")
|
||||
|| modeString.contains("survi") || modeString.equalsIgnoreCase("0") || modeString.equalsIgnoreCase("s"))
|
||||
{
|
||||
player.setGameMode(GameMode.CREATIVE);
|
||||
mode = GameMode.SURVIVAL;
|
||||
}
|
||||
else if (mode.contains("advent") || mode.equalsIgnoreCase("2") || mode.equalsIgnoreCase("a"))
|
||||
else if (modeString.equalsIgnoreCase("gma") || modeString.equalsIgnoreCase("egma")
|
||||
|| modeString.contains("advent") || modeString.equalsIgnoreCase("2") || modeString.equalsIgnoreCase("a"))
|
||||
{
|
||||
player.setGameMode(GameMode.ADVENTURE);
|
||||
mode = GameMode.ADVENTURE;
|
||||
}
|
||||
else {
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
return mode;
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@ package com.earth2me.essentials.commands;
|
||||
import com.earth2me.essentials.Console;
|
||||
import static com.earth2me.essentials.I18n._;
|
||||
import com.earth2me.essentials.User;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -31,6 +32,8 @@ public class Commandkick extends EssentialsCommand
|
||||
final String kickReason = args.length > 1 ? getFinalArg(args, 1) : _("kickDefault");
|
||||
user.kickPlayer(kickReason);
|
||||
final String senderName = sender instanceof Player ? ((Player)sender).getDisplayName() : Console.NAME;
|
||||
|
||||
server.getLogger().log(Level.INFO, _("playerKicked", senderName, user.getName(), kickReason));
|
||||
|
||||
for (Player onlinePlayer : server.getOnlinePlayers())
|
||||
{
|
||||
|
@ -21,6 +21,12 @@ public class Commandkill extends EssentialsCommand
|
||||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
|
||||
//TODO: TL this
|
||||
if (args[0].trim().length() < 2)
|
||||
{
|
||||
throw new NotEnoughArgumentsException("You need to specify a player to kill.");
|
||||
}
|
||||
|
||||
for (Player matchPlayer : server.matchPlayer(args[0]))
|
||||
{
|
||||
|
@ -26,12 +26,12 @@ public class Commandkit extends EssentialsCommand
|
||||
else if (args.length > 1 && user.isAuthorized("essentials.kit.others"))
|
||||
{
|
||||
final User userTo = getPlayer(server, args, 1, true);
|
||||
final String kitName = Util.sanitizeString(args[0].toLowerCase(Locale.ENGLISH));
|
||||
final String kitName = Util.sanitizeString(args[0].toLowerCase(Locale.ENGLISH)).trim();
|
||||
giveKit(userTo, user, kitName);
|
||||
}
|
||||
else
|
||||
{
|
||||
final String kitName = Util.sanitizeString(args[0].toLowerCase(Locale.ENGLISH));
|
||||
final String kitName = Util.sanitizeString(args[0].toLowerCase(Locale.ENGLISH)).trim();
|
||||
giveKit(user, user, kitName);
|
||||
}
|
||||
}
|
||||
@ -59,7 +59,12 @@ public class Commandkit extends EssentialsCommand
|
||||
}
|
||||
|
||||
private void giveKit(User userTo, User userFrom, String kitName) throws Exception
|
||||
{
|
||||
{
|
||||
if (kitName.isEmpty())
|
||||
{
|
||||
throw new Exception(_("kitError2"));
|
||||
}
|
||||
|
||||
final Map<String, Object> kit = ess.getSettings().getKit(kitName);
|
||||
|
||||
if (!userFrom.isAuthorized("essentials.kit." + kitName))
|
||||
|
@ -21,7 +21,7 @@ public class Commandmsg extends EssentialsCommand
|
||||
@Override
|
||||
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception
|
||||
{
|
||||
if (args.length < 2 || args[0].trim().length() < 3 || args[1].trim().isEmpty())
|
||||
if (args.length < 2 || args[0].trim().length() < 2 || args[1].trim().isEmpty())
|
||||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
|
@ -22,7 +22,8 @@ public class Commandpay extends EssentialsCommand
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
|
||||
if (args[0].trim().length() < 3)
|
||||
//TODO: TL this
|
||||
if (args[0].trim().length() < 2)
|
||||
{
|
||||
throw new NotEnoughArgumentsException("You need to specify a player to pay.");
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ public class Commandwarp extends EssentialsCommand
|
||||
@Override
|
||||
public void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception
|
||||
{
|
||||
if (args.length < 2 || args[0].matches("[0-9]+"))
|
||||
if (args.length < 2 || Util.isInt(args[0]))
|
||||
{
|
||||
warpList(sender, args);
|
||||
throw new NoChargeException();
|
||||
@ -94,7 +94,7 @@ public class Commandwarp extends EssentialsCommand
|
||||
}
|
||||
}
|
||||
int page = 1;
|
||||
if (args.length > 0)
|
||||
if (args.length > 0 && Util.isInt(args[0]))
|
||||
{
|
||||
page = Integer.parseInt(args[0]);
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class BPermissions2Handler extends SuperpermsHandler
|
||||
@Override
|
||||
public boolean canBuild(final Player base, final String group)
|
||||
{
|
||||
return hasPermission(base, "essentials.build") || hasPermission(base, "bPermissions.build");
|
||||
return hasPermission(base, "bPermissions.build");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -56,7 +56,7 @@ public class BPermissionsHandler extends SuperpermsHandler
|
||||
@Override
|
||||
public boolean canBuild(final Player base, final String group)
|
||||
{
|
||||
return hasPermission(base, "essentials.build") || hasPermission(base, "bPermissions.build");
|
||||
return hasPermission(base, "bPermissions.build");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -78,6 +78,6 @@ public class PermissionsBukkitHandler extends SuperpermsHandler
|
||||
@Override
|
||||
public boolean canBuild(Player base, String group)
|
||||
{
|
||||
return hasPermission(base, "essentials.build") || hasPermission(base, "permissions.build");
|
||||
return hasPermission(base, "permissions.build");
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ public class PrivilegesHandler extends SuperpermsHandler
|
||||
@Override
|
||||
public boolean canBuild(Player base, String group)
|
||||
{
|
||||
return hasPermission(base, "essentials.build") || hasPermission(base, "privileges.build");
|
||||
return hasPermission(base, "privileges.build");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ public class SuperpermsHandler implements IPermissionsHandler
|
||||
@Override
|
||||
public boolean canBuild(final Player base, final String group)
|
||||
{
|
||||
return hasPermission(base, "essentials.build");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,17 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Backup implements StorageObject
|
||||
{
|
||||
@Comment("Interval in minutes")
|
||||
private long interval = 60;
|
||||
@Comment("Add a command that backups your data, e.g. 'rdiff-backup World1 backups/World1'")
|
||||
private String command;
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Chat implements StorageObject
|
||||
{
|
||||
@Comment("The character(s) to prefix all nicknames, so that you know they are not true usernames.")
|
||||
private String nicknamePrefix = "~";
|
||||
@Comment("Disable this if you have any other plugin, that modifies the displayname of a user.")
|
||||
private boolean changeDisplayname = true;
|
||||
private String displaynameFormat = "{PREFIX}{NICKNAMEPREFIX}{NAME}{SUFFIX}";
|
||||
@Comment(
|
||||
{
|
||||
"If EssentialsChat is installed, this will define how far a player's voice travels, in blocks. Set to 0 to make all chat global.",
|
||||
"Note that users with the \"essentials.chat.spy\" permission will hear everything, regardless of this setting.",
|
||||
"Users with essentials.chat.shout can override this by prefixing text with an exclamation mark (!)",
|
||||
"Or with essentials.chat.question can override this by prefixing text with a question mark (?)",
|
||||
"You can add command costs for shout/question by adding chat-shout and chat-question to the command costs section."
|
||||
})
|
||||
private int localRadius = 0;
|
||||
@Comment("Set the default chat format here, it will be overwritten by group specific chat formats.")
|
||||
private String defaultFormat = "&7[{GROUP}]&f {DISPLAYNAME}&7:&f {MESSAGE}";
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.settings.commands.*;
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.ListType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Commands implements StorageObject
|
||||
{
|
||||
private Afk afk = new Afk();
|
||||
private God god = new God();
|
||||
private Help help = new Help();
|
||||
private Home home = new Home();
|
||||
private Kit kit = new Kit();
|
||||
private Lightning lightning = new Lightning();
|
||||
private Spawnmob spawnmob = new Spawnmob();
|
||||
@ListType
|
||||
@Comment(
|
||||
{
|
||||
"When a command conflicts with another plugin, by default, Essentials will try to force the OTHER plugin to take",
|
||||
"priority. If a command is in this list, Essentials will try to give ITSELF priority. This does not always work:",
|
||||
"usually whichever plugin was updated most recently wins out. However, the full name of the command will always work.",
|
||||
"For example, if WorldGuard and Essentials are both enabled, and WorldGuard takes control over /god, /essentials:god",
|
||||
"will still map to Essentials, whereas it might normally get forced upon WorldGuard. Commands prefixed with an \"e\",",
|
||||
"such as /egod, will always grant Essentials priority.",
|
||||
"We should try to take priority over /god. If this doesn't work, use /essentials:god or /egod.",
|
||||
"If god is set using WorldGuard, use /ungod to remove then use whichever you see fit."
|
||||
})
|
||||
private List<String> overwritten = new ArrayList<String>();
|
||||
@ListType
|
||||
@Comment("Disabled commands will be completelly unavailable on the server.")
|
||||
private List<String> disabled = new ArrayList<String>();
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.MapValueType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Economy implements StorageObject
|
||||
{
|
||||
@Comment("Defines the balance with which new players begin. Defaults to 0.")
|
||||
private double startingBalance = 0.0;
|
||||
@MapValueType(Double.class)
|
||||
@Comment("Defines the cost to use the given commands PER USE")
|
||||
private Map<String, Double> commandCosts = new HashMap<String, Double>();
|
||||
@Comment("Set this to a currency symbol you want to use.")
|
||||
private String currencySymbol = "$";
|
||||
|
||||
public String getCurrencySymbol()
|
||||
{
|
||||
return currencySymbol == null || currencySymbol.isEmpty() ? "$" : currencySymbol.substring(0, 1);
|
||||
}
|
||||
private final transient static double MAXMONEY = 10000000000000.0;
|
||||
@Comment(
|
||||
{
|
||||
"Set the maximum amount of money a player can have",
|
||||
"The amount is always limited to 10 trillions because of the limitations of a java double"
|
||||
})
|
||||
private double maxMoney = MAXMONEY;
|
||||
|
||||
public double getMaxMoney()
|
||||
{
|
||||
return Math.abs(maxMoney) > MAXMONEY ? MAXMONEY : Math.abs(maxMoney);
|
||||
}
|
||||
@Comment("Enable this to log all interactions with trade/buy/sell signs and sell command")
|
||||
private boolean logEnabled = false;
|
||||
private Worth worth = new Worth();
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class General implements StorageObject
|
||||
{
|
||||
@Comment("Backup runs a command while saving is disabled")
|
||||
private Backup backup = new Backup();
|
||||
@Comment("You can disable the death messages of minecraft.")
|
||||
private boolean deathMessages = true;
|
||||
@Comment("Turn this on, if you want to see more error messages, if something goes wrong.")
|
||||
private boolean debug = false;
|
||||
@Comment(
|
||||
{
|
||||
"Set the locale here, if you want to change the language of Essentials.",
|
||||
"If this is not set, Essentials will use the language of your computer.",
|
||||
"Available locales: da, de, en, fr, nl"
|
||||
})
|
||||
private String locale;
|
||||
@Comment(
|
||||
{
|
||||
"Should we announce to the server when someone logs in for the first time?",
|
||||
"If so, use this format, replacing {DISPLAYNAME} with the player name.",
|
||||
"If not, set to ''"
|
||||
})
|
||||
private String newPlayerAnnouncement = "&dWelcome {DISPLAYNAME} to the server!";
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class GroupOptions implements StorageObject
|
||||
{
|
||||
@Comment("Message format of chat messages")
|
||||
private String messageFormat;
|
||||
@Comment("Prefix for name")
|
||||
private String prefix;
|
||||
@Comment("Suffix for name")
|
||||
private String suffix;
|
||||
@Comment("Amount of homes a player can have")
|
||||
private Integer homes;
|
||||
@Comment("Cooldown between teleports")
|
||||
private Integer teleportCooldown;
|
||||
@Comment("Delay before teleport")
|
||||
private Integer teleportDelay;
|
||||
@Comment("Cooldown between heals")
|
||||
private Integer healCooldown;
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.MapValueType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.LinkedHashMap;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Groups implements StorageObject
|
||||
{
|
||||
public Groups()
|
||||
{
|
||||
GroupOptions defaultOptions = new GroupOptions();
|
||||
groups.put("default", defaultOptions);
|
||||
}
|
||||
@Comment(
|
||||
{
|
||||
"The order of the groups matters, the groups are checked from top to bottom.",
|
||||
"All group names have to be lower case.",
|
||||
"The groups can be connected to users using the permission essentials.groups.groupname"
|
||||
})
|
||||
@MapValueType(GroupOptions.class)
|
||||
private LinkedHashMap<String, GroupOptions> groups = new LinkedHashMap<String, GroupOptions>();
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.MapValueType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.bukkit.Location;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Locations implements StorageObject
|
||||
{
|
||||
@MapValueType(Location.class)
|
||||
Map<String, Location> jails = new HashMap<String, Location>();
|
||||
@MapValueType(Location.class)
|
||||
Map<String, Location> warps = new HashMap<String, Location>();
|
||||
@MapValueType(Location.class)
|
||||
Map<String, Location> spawns = new HashMap<String, Location>();
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Settings implements StorageObject
|
||||
{
|
||||
@Comment(
|
||||
{
|
||||
"##########################################################",
|
||||
"+------------------------------------------------------+ #",
|
||||
"| General Settings | #",
|
||||
"+------------------------------------------------------+ #",
|
||||
"##########################################################"
|
||||
})
|
||||
private General general = new General();
|
||||
@Comment(
|
||||
{
|
||||
"##########################################################",
|
||||
"+------------------------------------------------------+ #",
|
||||
"| Chat Settings | #",
|
||||
"+------------------------------------------------------+ #",
|
||||
"##########################################################"
|
||||
})
|
||||
private Chat chat = new Chat();
|
||||
@Comment(
|
||||
{
|
||||
"##########################################################",
|
||||
"+------------------------------------------------------+ #",
|
||||
"| Economy Settings | #",
|
||||
"+------------------------------------------------------+ #",
|
||||
"##########################################################"
|
||||
})
|
||||
private Economy economy = new Economy();
|
||||
@Comment(
|
||||
{
|
||||
"##########################################################",
|
||||
"+------------------------------------------------------+ #",
|
||||
"| Commands Settings | #",
|
||||
"+------------------------------------------------------+ #",
|
||||
"##########################################################"
|
||||
})
|
||||
private Commands commands = new Commands();
|
||||
@Comment(
|
||||
{
|
||||
"##########################################################",
|
||||
"+------------------------------------------------------+ #",
|
||||
"| Group Settings | #",
|
||||
"+------------------------------------------------------+ #",
|
||||
"##########################################################"
|
||||
})
|
||||
private Groups groups = new Groups();
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package com.earth2me.essentials.settings;
|
||||
|
||||
import com.earth2me.essentials.storage.EnchantmentLevel;
|
||||
import com.earth2me.essentials.storage.MapKeyType;
|
||||
import com.earth2me.essentials.storage.MapValueType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Worth implements StorageObject
|
||||
{
|
||||
@MapKeyType(MaterialData.class)
|
||||
@MapValueType(Double.class)
|
||||
private Map<MaterialData, Double> sell = new HashMap<MaterialData, Double>();
|
||||
@MapKeyType(MaterialData.class)
|
||||
@MapValueType(Double.class)
|
||||
private Map<MaterialData, Double> buy = new HashMap<MaterialData, Double>();
|
||||
@MapKeyType(EnchantmentLevel.class)
|
||||
@MapValueType(Double.class)
|
||||
private Map<EnchantmentLevel, Double> enchantmentMultiplier = new HashMap<EnchantmentLevel, Double>();
|
||||
|
||||
public Worth()
|
||||
{
|
||||
sell.put(new MaterialData(Material.APPLE, (byte)0), 1.0);
|
||||
}
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
package com.earth2me.essentials.settings.commands;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Afk implements StorageObject
|
||||
{
|
||||
@Comment(
|
||||
{
|
||||
"After this timeout in seconds, the user will be set as afk.",
|
||||
"Set to -1 for no timeout."
|
||||
})
|
||||
private int autoAFK = 300;
|
||||
@Comment(
|
||||
{
|
||||
"Auto-AFK Kick",
|
||||
"After this timeout in seconds, the user will be kicked from the server.",
|
||||
"Set to -1 for no timeout."
|
||||
})
|
||||
private int autoAFKKick = -1;
|
||||
@Comment(
|
||||
{
|
||||
"Set this to true, if you want to freeze the player, if he is afk.",
|
||||
"Other players or monsters can't push him out of afk mode then.",
|
||||
"This will also enable temporary god mode for the afk player.",
|
||||
"The player has to use the command /afk to leave the afk mode.",
|
||||
"You have to add a message to your welcome message or help page,",
|
||||
"since the player will not get a message, if he tries to move."
|
||||
})
|
||||
private boolean freezeAFKPlayers = false;
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package com.earth2me.essentials.settings.commands;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class God implements StorageObject
|
||||
{
|
||||
@Comment("Turn off god mode when people exit")
|
||||
private boolean removeOnDisconnect = false;
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package com.earth2me.essentials.settings.commands;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Help implements StorageObject
|
||||
{
|
||||
@Comment("Show other plugins commands in help")
|
||||
private boolean showNonEssCommandsInHelp = true;
|
||||
@Comment(
|
||||
{
|
||||
"Hide plugins which don't give a permission in their plugin.yml for each command.",
|
||||
"You can override a true value here for a single plugin by adding a permission to a user/group.",
|
||||
"The individual permission is: essentials.help.<plugin>, anyone with essentials.* or '*' will see all help this setting reguardless.",
|
||||
"You can use negative permissions to remove access to just a single plugins help if the following is enabled."
|
||||
})
|
||||
private boolean hidePermissionlessCommands = true;
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
package com.earth2me.essentials.settings.commands;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Home implements StorageObject
|
||||
{
|
||||
@Comment("When players die, should they respawn at their homes, instead of the spawnpoint?")
|
||||
private boolean respawnAtHome = false;
|
||||
@Comment(
|
||||
{
|
||||
"When a player interacts with a bed, should their home be set to that location?",
|
||||
"If you enable this and remove default player access to the /sethome command, ",
|
||||
"you can make beds the only way for players to set their home location."
|
||||
})
|
||||
private boolean bedSetsHome = false;
|
||||
@Comment("If no home is set, should the player be send to spawn, when /home is used.")
|
||||
private boolean spawnIfNoHome = false;
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package com.earth2me.essentials.settings.commands;
|
||||
|
||||
import com.earth2me.essentials.storage.MapValueType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Kit implements StorageObject
|
||||
{
|
||||
public Kit()
|
||||
{
|
||||
final KitObject kit = new KitObject();
|
||||
kit.setDelay(10.0);
|
||||
kit.getItems().add(new ItemStack(Material.DIAMOND_SPADE, 1));
|
||||
kit.getItems().add(new ItemStack(Material.DIAMOND_PICKAXE, 1));
|
||||
kit.getItems().add(new ItemStack(Material.DIAMOND_AXE, 1));
|
||||
kits.put("tools", kit);
|
||||
}
|
||||
@MapValueType(KitObject.class)
|
||||
private Map<String, KitObject> kits = new HashMap<String, KitObject>();
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
package com.earth2me.essentials.settings.commands;
|
||||
|
||||
import com.earth2me.essentials.storage.ListType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class KitObject implements StorageObject
|
||||
{
|
||||
@ListType(ItemStack.class)
|
||||
private List<ItemStack> items = new ArrayList<ItemStack>();
|
||||
private Double delay;
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package com.earth2me.essentials.settings.commands;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Lightning implements StorageObject
|
||||
{
|
||||
@Comment("Shall we notify users when using /lightning")
|
||||
private boolean warnPlayer = true;
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package com.earth2me.essentials.settings.commands;
|
||||
|
||||
import com.earth2me.essentials.storage.Comment;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Spawnmob implements StorageObject
|
||||
{
|
||||
@Comment("The maximum amount of monsters, a player can spawn with a call of /spawnmob.")
|
||||
private int limit = 10;
|
||||
}
|
@ -19,7 +19,7 @@ public class SignKit extends EssentialsSign
|
||||
{
|
||||
validateTrade(sign, 3, ess);
|
||||
|
||||
final String kitName = sign.getLine(1).toLowerCase(Locale.ENGLISH);
|
||||
final String kitName = sign.getLine(1).toLowerCase(Locale.ENGLISH).trim();
|
||||
|
||||
if (kitName.isEmpty())
|
||||
{
|
||||
@ -48,7 +48,7 @@ public class SignKit extends EssentialsSign
|
||||
@Override
|
||||
protected boolean onSignInteract(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException, ChargeException
|
||||
{
|
||||
final String kitName = sign.getLine(1).toLowerCase(Locale.ENGLISH);
|
||||
final String kitName = sign.getLine(1).toLowerCase(Locale.ENGLISH).trim();
|
||||
final String group = sign.getLine(2);
|
||||
if ((!group.isEmpty() && ("§2Everyone".equals(group) || player.inGroup(group)))
|
||||
|| (group.isEmpty() && (player.isAuthorized("essentials.kit." + kitName))))
|
||||
|
@ -1,7 +1,5 @@
|
||||
package com.earth2me.essentials.storage;
|
||||
|
||||
import com.earth2me.essentials.user.UserData;
|
||||
|
||||
|
||||
public interface IStorageObjectHolder<T extends StorageObject>
|
||||
{
|
||||
|
@ -1,14 +0,0 @@
|
||||
package com.earth2me.essentials.user;
|
||||
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Ban implements StorageObject
|
||||
{
|
||||
private String reason;
|
||||
private long timeout;
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
package com.earth2me.essentials.user;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
|
||||
public interface IOfflinePlayer
|
||||
{
|
||||
String getName();
|
||||
|
||||
String getDisplayName();
|
||||
|
||||
Location getBedSpawnLocation();
|
||||
|
||||
void setBanned(boolean bln);
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
package com.earth2me.essentials.user;
|
||||
|
||||
import com.earth2me.essentials.storage.IStorageObjectHolder;
|
||||
|
||||
|
||||
public interface IOfflineUser extends IStorageObjectHolder<UserData>, IOfflinePlayer
|
||||
{
|
||||
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package com.earth2me.essentials.user;
|
||||
|
||||
import com.earth2me.essentials.storage.MapKeyType;
|
||||
import com.earth2me.essentials.storage.MapValueType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class Inventory implements StorageObject
|
||||
{
|
||||
private int size;
|
||||
@MapKeyType(Integer.class)
|
||||
@MapValueType(ItemStack.class)
|
||||
private Map<Integer, ItemStack> items = new HashMap<Integer, ItemStack>();
|
||||
|
||||
public Inventory()
|
||||
{
|
||||
items.put(1, new ItemStack(Material.APPLE, 64));
|
||||
}
|
||||
}
|
@ -1,220 +0,0 @@
|
||||
package com.earth2me.essentials.user;
|
||||
|
||||
import com.earth2me.essentials.IEssentials;
|
||||
import com.earth2me.essentials.IUser;
|
||||
import com.earth2me.essentials.Teleport;
|
||||
import com.earth2me.essentials.commands.IEssentialsCommand;
|
||||
import lombok.Cleanup;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
public class User extends UserBase implements IUser
|
||||
{
|
||||
public User(final Player base, final IEssentials ess)
|
||||
{
|
||||
super(base, ess);
|
||||
}
|
||||
|
||||
public User(final OfflinePlayer offlinePlayer, final IEssentials ess)
|
||||
{
|
||||
super(offlinePlayer, ess);
|
||||
}
|
||||
|
||||
public void example()
|
||||
{
|
||||
// Cleanup will call close at the end of the function
|
||||
@Cleanup
|
||||
final User user = this;
|
||||
|
||||
// read lock allows to read data from the user
|
||||
user.acquireReadLock();
|
||||
final double money = user.getData().getMoney();
|
||||
|
||||
// write lock allows only one thread to modify the data
|
||||
user.acquireWriteLock();
|
||||
user.getData().setMoney(10 + money);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finishRead()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finishWrite()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLastTeleportTimestamp()
|
||||
{
|
||||
acquireReadLock();
|
||||
try
|
||||
{
|
||||
return getData().getTimestamps().get("lastteleport");
|
||||
}
|
||||
finally
|
||||
{
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAuthorized(String node)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAuthorized(IEssentialsCommand cmd)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAuthorized(IEssentialsCommand cmd, String permissionPrefix)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLastTeleportTimestamp(long time)
|
||||
{
|
||||
acquireWriteLock();
|
||||
try
|
||||
{
|
||||
getData().getTimestamps().put("lastteleport", time);
|
||||
}
|
||||
finally
|
||||
{
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getLastLocation()
|
||||
{
|
||||
acquireReadLock();
|
||||
try
|
||||
{
|
||||
return getData().getLastLocation();
|
||||
}
|
||||
finally
|
||||
{
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getMoney()
|
||||
{
|
||||
acquireReadLock();
|
||||
try
|
||||
{
|
||||
return getData().getMoney();
|
||||
}
|
||||
finally
|
||||
{
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void takeMoney(double value)
|
||||
{
|
||||
acquireWriteLock();
|
||||
try
|
||||
{
|
||||
getData().setMoney(getData().getMoney() - value);
|
||||
}
|
||||
finally
|
||||
{
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void giveMoney(double value)
|
||||
{
|
||||
acquireWriteLock();
|
||||
try
|
||||
{
|
||||
getData().setMoney(getData().getMoney() + value);
|
||||
}
|
||||
finally
|
||||
{
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGroup()
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLastLocation()
|
||||
{
|
||||
acquireWriteLock();
|
||||
try
|
||||
{
|
||||
getData().setLastLocation(base.getLocation());
|
||||
}
|
||||
finally
|
||||
{
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getHome(String name) throws Exception
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getHome(Location loc) throws Exception
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isHidden()
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Teleport getTeleport()
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setJail(final String jail)
|
||||
{
|
||||
acquireWriteLock();
|
||||
try
|
||||
{
|
||||
getData().setJail(jail);
|
||||
}
|
||||
finally
|
||||
{
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAfford(final double cost)
|
||||
{
|
||||
final double mon = getMoney();
|
||||
if (isAuthorized("essentials.eco.loan"))
|
||||
{
|
||||
return (mon - cost) >= ess.getSettings().getMinMoney();
|
||||
}
|
||||
return cost <= mon;
|
||||
}
|
||||
}
|
@ -1,117 +0,0 @@
|
||||
package com.earth2me.essentials.user;
|
||||
|
||||
import com.earth2me.essentials.IEssentials;
|
||||
import com.earth2me.essentials.storage.AsyncStorageObjectHolder;
|
||||
import java.io.File;
|
||||
import lombok.Delegate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.serialization.ConfigurationSerializable;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.permissions.Permissible;
|
||||
import org.bukkit.permissions.ServerOperator;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
|
||||
public abstract class UserBase extends AsyncStorageObjectHolder<UserData> implements Player, IOfflineUser
|
||||
{
|
||||
|
||||
@Delegate(types =
|
||||
{
|
||||
Player.class, Entity.class, CommandSender.class, ServerOperator.class,
|
||||
HumanEntity.class, ConfigurationSerializable.class, LivingEntity.class,
|
||||
Permissible.class
|
||||
},excludes=IOfflinePlayer.class)
|
||||
protected Player base;
|
||||
protected transient OfflinePlayer offlinePlayer;
|
||||
|
||||
public UserBase(final Player base, final IEssentials ess)
|
||||
{
|
||||
super(ess, UserData.class);
|
||||
this.base = base;
|
||||
reloadConfig();
|
||||
}
|
||||
|
||||
public UserBase(final OfflinePlayer offlinePlayer, final IEssentials ess)
|
||||
{
|
||||
super(ess, UserData.class);
|
||||
this.offlinePlayer = offlinePlayer;
|
||||
reloadConfig();
|
||||
}
|
||||
|
||||
public final Player getBase()
|
||||
{
|
||||
return base;
|
||||
}
|
||||
|
||||
public final Player setBase(final Player base)
|
||||
{
|
||||
return this.base = base;
|
||||
}
|
||||
|
||||
public void update(final Player base)
|
||||
{
|
||||
setBase(base);
|
||||
}
|
||||
|
||||
public void update(final OfflinePlayer offlinePlayer)
|
||||
{
|
||||
this.offlinePlayer = offlinePlayer;
|
||||
}
|
||||
|
||||
public void dispose()
|
||||
{
|
||||
this.offlinePlayer = Bukkit.getOfflinePlayer(base.getName());
|
||||
this.base = null;
|
||||
}
|
||||
|
||||
public boolean isOnlineUser() {
|
||||
return base != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
if (isOnlineUser()) {
|
||||
return base.getName();
|
||||
} else {
|
||||
return offlinePlayer.getName();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName()
|
||||
{
|
||||
if (isOnlineUser()) {
|
||||
return base.getDisplayName();
|
||||
} else {
|
||||
return offlinePlayer.getName();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getBedSpawnLocation()
|
||||
{
|
||||
return base.getBedSpawnLocation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBanned(boolean bln)
|
||||
{
|
||||
if (isOnlineUser()) {
|
||||
base.setBanned(bln);
|
||||
} else {
|
||||
offlinePlayer.setBanned(bln);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getStorageFile()
|
||||
{
|
||||
return ess.getUserMap().getUserFile(getName());
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
package com.earth2me.essentials.user;
|
||||
|
||||
import com.earth2me.essentials.storage.ListType;
|
||||
import com.earth2me.essentials.storage.MapKeyType;
|
||||
import com.earth2me.essentials.storage.MapValueType;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import java.util.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class UserData implements StorageObject
|
||||
{
|
||||
private String nickname;
|
||||
private double money;
|
||||
@MapValueType(Location.class)
|
||||
private Map<String, Location> homes = new HashMap<String, Location>();
|
||||
@ListType(Material.class)
|
||||
private Set<Material> unlimited = new HashSet<Material>();
|
||||
@MapValueType(List.class)
|
||||
@MapKeyType(Material.class)
|
||||
private Map<Material, List<String>> powerTools = new HashMap<Material, List<String>>();
|
||||
private Location lastLocation;
|
||||
@MapValueType(Long.class)
|
||||
private Map<String, Long> timestamps;
|
||||
private String jail;
|
||||
@ListType
|
||||
private List<String> mails;
|
||||
private Inventory inventory;
|
||||
private boolean teleportEnabled;
|
||||
@ListType
|
||||
private Set<String> ignore;
|
||||
private boolean godmode;
|
||||
private boolean muted;
|
||||
private boolean jailed;
|
||||
private Ban ban;
|
||||
private String ipAddress;
|
||||
private boolean afk;
|
||||
private boolean newplayer = true;
|
||||
private String geolocation;
|
||||
private boolean socialspy;
|
||||
private boolean npc;
|
||||
private boolean powertoolsenabled;
|
||||
|
||||
public UserData()
|
||||
{
|
||||
unlimited.add(Material.AIR);
|
||||
unlimited.add(Material.ARROW);
|
||||
unlimited.add(Material.APPLE);
|
||||
powerTools.put(Material.DEAD_BUSH, Collections.singletonList("test"));
|
||||
}
|
||||
}
|
@ -1,128 +0,0 @@
|
||||
package com.earth2me.essentials.user;
|
||||
|
||||
import com.earth2me.essentials.IConf;
|
||||
import com.earth2me.essentials.IEssentials;
|
||||
import com.earth2me.essentials.Util;
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.util.concurrent.UncheckedExecutionException;
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
public class UserMap extends CacheLoader<String, User> implements IConf
|
||||
{
|
||||
private final transient IEssentials ess;
|
||||
private final transient Cache<String, User> users = CacheBuilder.newBuilder().softValues().build(this);
|
||||
private final transient ConcurrentSkipListSet<String> keys = new ConcurrentSkipListSet<String>();
|
||||
|
||||
public UserMap(final IEssentials ess)
|
||||
{
|
||||
super();
|
||||
this.ess = ess;
|
||||
loadAllUsersAsync(ess);
|
||||
}
|
||||
|
||||
private void loadAllUsersAsync(final IEssentials ess)
|
||||
{
|
||||
ess.scheduleAsyncDelayedTask(new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
final File userdir = new File(ess.getDataFolder(), "userdata");
|
||||
if (!userdir.exists())
|
||||
{
|
||||
return;
|
||||
}
|
||||
keys.clear();
|
||||
users.invalidateAll();
|
||||
for (String string : userdir.list())
|
||||
{
|
||||
if (!string.endsWith(".yml"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
final String name = string.substring(0, string.length() - 4);
|
||||
keys.add(name.toLowerCase(Locale.ENGLISH));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean userExists(final String name)
|
||||
{
|
||||
return keys.contains(name.toLowerCase(Locale.ENGLISH));
|
||||
}
|
||||
|
||||
public User getUser(final String name)
|
||||
{
|
||||
try
|
||||
{
|
||||
return users.get(name.toLowerCase(Locale.ENGLISH));
|
||||
}
|
||||
catch (ExecutionException ex)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
catch (UncheckedExecutionException ex)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public User load(final String name) throws Exception
|
||||
{
|
||||
for (Player player : ess.getServer().getOnlinePlayers())
|
||||
{
|
||||
if (player.getName().equalsIgnoreCase(name))
|
||||
{
|
||||
keys.add(name.toLowerCase(Locale.ENGLISH));
|
||||
return new User(player, ess);
|
||||
}
|
||||
}
|
||||
final File userFile = getUserFile(name);
|
||||
if (userFile.exists())
|
||||
{
|
||||
keys.add(name.toLowerCase(Locale.ENGLISH));
|
||||
return new User(Bukkit.getOfflinePlayer(name), ess);
|
||||
}
|
||||
throw new Exception("User not found!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reloadConfig()
|
||||
{
|
||||
loadAllUsersAsync(ess);
|
||||
}
|
||||
|
||||
public void removeUser(final String name)
|
||||
{
|
||||
keys.remove(name.toLowerCase(Locale.ENGLISH));
|
||||
users.invalidate(name.toLowerCase(Locale.ENGLISH));
|
||||
}
|
||||
|
||||
public Set<String> getAllUniqueUsers()
|
||||
{
|
||||
return Collections.unmodifiableSet(keys);
|
||||
}
|
||||
|
||||
public int getUniqueUsers()
|
||||
{
|
||||
return keys.size();
|
||||
}
|
||||
|
||||
public File getUserFile(final String name)
|
||||
{
|
||||
final File userFolder = new File(ess.getDataFolder(), "userdata");
|
||||
return new File(userFolder, Util.sanitizeFileName(name) + ".yml");
|
||||
}
|
||||
}
|
@ -450,28 +450,6 @@ protect:
|
||||
password: 'root'
|
||||
mysqlDb: 'jdbc:mysql://localhost:3306/minecraft'
|
||||
|
||||
# For which block types would you like to be alerted?
|
||||
# You can find a list of IDs in plugins/Essentials/items.csv after loading Essentials for the first time.
|
||||
# 10 = lava :: 11 = still lava :: 46 = TNT :: 327 = lava bucket
|
||||
alert:
|
||||
on-placement: 10,11,46,327
|
||||
on-use: 327
|
||||
on-break:
|
||||
|
||||
blacklist:
|
||||
|
||||
# Which blocks should people be prevented from placing
|
||||
placement: 10,11,46,327
|
||||
|
||||
# Which items should people be prevented from using
|
||||
usage: 327
|
||||
|
||||
# Which blocks should people be prevented from breaking
|
||||
break:
|
||||
|
||||
# Which blocks should not be pushed by pistons
|
||||
piston:
|
||||
|
||||
# General physics/behavior modifications
|
||||
prevent:
|
||||
lava-flow: false
|
||||
@ -532,10 +510,10 @@ protect:
|
||||
# Protect various blocks.
|
||||
protect:
|
||||
# Protect all signs
|
||||
signs: true
|
||||
signs: false
|
||||
|
||||
# Prevent users from destroying rails
|
||||
rails: true
|
||||
rails: false
|
||||
|
||||
# Blocks below rails/signs are also protected if the respective rail/sign is protected.
|
||||
# This makes it more difficult to circumvent protection, and should be enabled.
|
||||
@ -577,6 +555,20 @@ protect:
|
||||
# Should the damage after hit by a lightning be disabled?
|
||||
lightning: false
|
||||
|
||||
# Disable weather options
|
||||
weather:
|
||||
storm: false
|
||||
thunder: false
|
||||
lightning: false
|
||||
|
||||
############################################################
|
||||
# +------------------------------------------------------+ #
|
||||
# | EssentialsAntiBuild | #
|
||||
# +------------------------------------------------------+ #
|
||||
############################################################
|
||||
|
||||
# Disable various default physics and behaviors
|
||||
|
||||
# Should people with build: false in permissions be allowed to build
|
||||
# Set true to disable building for those people
|
||||
build: true
|
||||
@ -587,12 +579,28 @@ protect:
|
||||
|
||||
# Should we tell people they are not allowed to build
|
||||
warn-on-build-disallow: true
|
||||
|
||||
# For which block types would you like to be alerted?
|
||||
# You can find a list of IDs in plugins/Essentials/items.csv after loading Essentials for the first time.
|
||||
# 10 = lava :: 11 = still lava :: 46 = TNT :: 327 = lava bucket
|
||||
alert:
|
||||
on-placement: 10,11,46,327
|
||||
on-use: 327
|
||||
on-break:
|
||||
|
||||
# Disable weather options
|
||||
weather:
|
||||
storm: false
|
||||
thunder: false
|
||||
lightning: false
|
||||
blacklist:
|
||||
|
||||
# Which blocks should people be prevented from placing
|
||||
placement: 10,11,46,327
|
||||
|
||||
# Which items should people be prevented from using
|
||||
usage: 327
|
||||
|
||||
# Which blocks should people be prevented from breaking
|
||||
break:
|
||||
|
||||
# Which blocks should not be pushed by pistons
|
||||
piston:
|
||||
|
||||
############################################################
|
||||
# +------------------------------------------------------+ #
|
||||
|
@ -22,6 +22,20 @@ wplank,5,0
|
||||
plankwooden,5,0
|
||||
plankwood,5,0
|
||||
plankw,5,0
|
||||
oakplank,5,0
|
||||
oakwoodenplank,5,0
|
||||
oakwoodplank,5,0
|
||||
oakwplank,5,0
|
||||
oakplankwooden,5,0
|
||||
oakplankwood,5,0
|
||||
oakplankw,5,0
|
||||
oplank,5,0
|
||||
owoodenplank,5,0
|
||||
owoodplank,5,0
|
||||
owplank,5,0
|
||||
oplankwooden,5,0
|
||||
oplankwood,5,0
|
||||
oplankw,5,0
|
||||
darkplank,5,1
|
||||
darkwoodenplank,5,1
|
||||
darkwoodplank,5,1
|
||||
@ -50,6 +64,20 @@ swplank,5,1
|
||||
splankwooden,5,1
|
||||
splankwood,5,1
|
||||
splankw,5,1
|
||||
pineplank,5,1
|
||||
pinewoodenplank,5,1
|
||||
pinewoodplank,5,1
|
||||
pinewplank,5,1
|
||||
pineplankwooden,5,1
|
||||
pineplankwood,5,1
|
||||
pineplankw,5,1
|
||||
pplank,5,1
|
||||
pwoodenplank,5,1
|
||||
pwoodplank,5,1
|
||||
pwplank,5,1
|
||||
pplankwooden,5,1
|
||||
pplankwood,5,1
|
||||
pplankw,5,1
|
||||
lightplank,5,2
|
||||
lightwoodenplank,5,2
|
||||
lightwoodplank,5,2
|
||||
@ -57,6 +85,13 @@ lightwplank,5,2
|
||||
lightplankwooden,5,2
|
||||
lightplankwood,5,2
|
||||
lightplankw,5,2
|
||||
lplank,5,2
|
||||
lwoodenplank,5,2
|
||||
lwoodplank,5,2
|
||||
lwplank,5,2
|
||||
lplankwooden,5,2
|
||||
lplankwood,5,2
|
||||
lplankw,5,2
|
||||
birchplank,5,2
|
||||
birchwoodenplank,5,2
|
||||
birchwoodplank,5,2
|
||||
@ -71,6 +106,19 @@ bwplank,5,2
|
||||
bplankwooden,5,2
|
||||
bplankwood,5,2
|
||||
bplankw,5,2
|
||||
whiteplank,5,2
|
||||
whitewoodenplank,5,2
|
||||
whitewoodplank,5,2
|
||||
whitewplank,5,2
|
||||
whiteplankwooden,5,2
|
||||
whiteplankwood,5,2
|
||||
whiteplankw,5,2
|
||||
wwoodenplank,5,2
|
||||
wwoodplank,5,2
|
||||
wwplank,5,2
|
||||
wplankwooden,5,2
|
||||
wplankwood,5,2
|
||||
wplankw,5,2
|
||||
jungleplank,5,3
|
||||
junglewoodenplank,5,3
|
||||
junglewoodplank,5,3
|
||||
@ -85,6 +133,20 @@ jwplank,5,3
|
||||
jplankwooden,5,3
|
||||
jplankwood,5,3
|
||||
jplankw,5,3
|
||||
forestplank,5,3
|
||||
forestwoodenplank,5,3
|
||||
forestwoodplank,5,3
|
||||
forestwplank,5,3
|
||||
forestplankwooden,5,3
|
||||
forestplankwood,5,3
|
||||
forestplankw,5,3
|
||||
fplank,5,3
|
||||
fwoodenplank,5,3
|
||||
fwoodplank,5,3
|
||||
fwplank,5,3
|
||||
fplankwooden,5,3
|
||||
fplankwood,5,3
|
||||
fplankw,5,3
|
||||
sapling,6,0
|
||||
treesapling,6,0
|
||||
logsapling,6,0
|
||||
@ -94,162 +156,91 @@ oaktreesapling,6,0
|
||||
oaklogsapling,6,0
|
||||
oaktrunksapling,6,0
|
||||
oakwoodsapling,6,0
|
||||
normaltreesapling,6,0
|
||||
normallogsapling,6,0
|
||||
normaltrunksapling,6,0
|
||||
normalwoodsapling,6,0
|
||||
osapling,6,0
|
||||
otreesapling,6,0
|
||||
ologsapling,6,0
|
||||
otrunksapling,6,0
|
||||
owoodsapling,6,0
|
||||
nsapling,6,0
|
||||
ntreesapling,6,0
|
||||
nlogsapling,6,0
|
||||
ntrunksapling,6,0
|
||||
nwoodsapling,6,0
|
||||
treesap,6,0
|
||||
logsap,6,0
|
||||
trunksap,6,0
|
||||
woodsap,6,0
|
||||
oaktreesap,6,0
|
||||
oaklogsap,6,0
|
||||
oaktrunksap,6,0
|
||||
oakwoodsap,6,0
|
||||
osap,6,0
|
||||
otreesap,6,0
|
||||
ologsap,6,0
|
||||
otrunksap,6,0
|
||||
owoodsap,6,0
|
||||
darksapling,6,1
|
||||
darktreesapling,6,1
|
||||
darklogsapling,6,1
|
||||
darktrunksapling,6,1
|
||||
darkwoodsapling,6,1
|
||||
blacksapling,6,1
|
||||
blacktreesapling,6,1
|
||||
blacklogsapling,6,1
|
||||
blacktrunksapling,6,1
|
||||
blackwoodsapling,6,1
|
||||
sprucesapling,6,1
|
||||
sprucetreesapling,6,1
|
||||
sprucelogsapling,6,1
|
||||
sprucetrunksapling,6,1
|
||||
sprucewoodsapling,6,1
|
||||
pinesapling,6,1
|
||||
pinetreesapling,6,1
|
||||
pinelogsapling,6,1
|
||||
pinetrunksapling,6,1
|
||||
pinewoodsapling,6,1
|
||||
dsapling,6,1
|
||||
dtreesapling,6,1
|
||||
dlogsapling,6,1
|
||||
dtrunksapling,6,1
|
||||
dwoodsapling,6,1
|
||||
blsapling,6,1
|
||||
bltreesapling,6,1
|
||||
bllogsapling,6,1
|
||||
bltrunksapling,6,1
|
||||
blwoodsapling,6,1
|
||||
ssapling,6,1
|
||||
streesapling,6,1
|
||||
slogsapling,6,1
|
||||
strunksapling,6,1
|
||||
swoodsapling,6,1
|
||||
darksap,6,1
|
||||
darktreesap,6,1
|
||||
darklogsap,6,1
|
||||
darktrunksap,6,1
|
||||
darkwoodsap,6,1
|
||||
blacksap,6,1
|
||||
blacktreesap,6,1
|
||||
blacklogsap,6,1
|
||||
blacktrunksap,6,1
|
||||
blackwoodsap,6,1
|
||||
pinesap,6,1
|
||||
pinetreesap,6,1
|
||||
pinelogsap,6,1
|
||||
pinetrunksap,6,1
|
||||
pinewoodsap,6,1
|
||||
sprucesap,6,1
|
||||
sprucetreesap,6,1
|
||||
sprucelogsap,6,1
|
||||
sprucetrunksap,6,1
|
||||
sprucewoodsap,6,1
|
||||
dsap,6,1
|
||||
dtreesap,6,1
|
||||
dlogsap,6,1
|
||||
dtrunksap,6,1
|
||||
dwoodsap,6,1
|
||||
blsap,6,1
|
||||
bltreesap,6,1
|
||||
bllogsap,6,1
|
||||
bltrunksap,6,1
|
||||
blwoodsap,6,1
|
||||
ssap,6,1
|
||||
streesap,6,1
|
||||
slogsap,6,1
|
||||
strunksap,6,1
|
||||
swoodsap,6,1
|
||||
psapling,6,1
|
||||
ptreesapling,6,1
|
||||
plogsapling,6,1
|
||||
ptrunksapling,6,1
|
||||
pwoodsapling,6,1
|
||||
birchsapling,6,2
|
||||
birchtreesapling,6,2
|
||||
birchlogsapling,6,2
|
||||
birchtrunksapling,6,2
|
||||
birchwoodsapling,6,2
|
||||
lightsapling,6,2
|
||||
lighttreesapling,6,2
|
||||
lightlogsapling,6,2
|
||||
lighttrunksapling,6,2
|
||||
lightwoodsapling,6,2
|
||||
whitesapling,6,2
|
||||
whitetreesapling,6,2
|
||||
whitelogsapling,6,2
|
||||
whitetrunksapling,6,2
|
||||
whitewoodsapling,6,2
|
||||
bisapling,6,2
|
||||
bitreesapling,6,2
|
||||
bilogsapling,6,2
|
||||
bitrunksapling,6,2
|
||||
biwoodsapling,6,2
|
||||
bsapling,6,2
|
||||
btreesapling,6,2
|
||||
blogsapling,6,2
|
||||
btrunksapling,6,2
|
||||
bwoodsapling,6,2
|
||||
pasapling,6,2
|
||||
patreesapling,6,2
|
||||
palogsapling,6,2
|
||||
patrunksapling,6,2
|
||||
pawoodsapling,6,2
|
||||
lsapling,6,2
|
||||
ltreesapling,6,2
|
||||
llogsapling,6,2
|
||||
ltrunksapling,6,2
|
||||
lwoodsapling,6,2
|
||||
wsapling,6,2
|
||||
wtreesapling,6,2
|
||||
wlogsapling,6,2
|
||||
wtrunksapling,6,2
|
||||
wwoodsapling,6,2
|
||||
birchsap,6,2
|
||||
birchtreesap,6,2
|
||||
birchlogsap,6,2
|
||||
birchtrunksap,6,2
|
||||
birchwoodsap,6,2
|
||||
whitesap,6,2
|
||||
whitetreesap,6,2
|
||||
whitelogsap,6,2
|
||||
whitetrunksap,6,2
|
||||
whitewoodsap,6,2
|
||||
bisap,6,2
|
||||
bitreesap,6,2
|
||||
bilogsap,6,2
|
||||
bitrunksap,6,2
|
||||
biwoodsap,6,2
|
||||
bsap,6,2
|
||||
btreesap,6,2
|
||||
blogsap,6,2
|
||||
btrunksap,6,2
|
||||
bwoodsap,6,2
|
||||
pasap,6,2
|
||||
patreesap,6,2
|
||||
palogsap,6,2
|
||||
patrunksap,6,2
|
||||
pawoodsap,6,2
|
||||
wsap,6,2
|
||||
wtreesap,6,2
|
||||
wlogsap,6,2
|
||||
wtrunksap,6,2
|
||||
wwoodsap,6,2
|
||||
junglesapling,6,3
|
||||
jungletreesapling,6,3
|
||||
junglelogsapling,6,3
|
||||
jungletrunksapling,6,3
|
||||
junglewoodsapling,6,3
|
||||
forestsapling,6,3
|
||||
foresttreesapling,6,3
|
||||
forestlogsapling,6,3
|
||||
foresttrunksapling,6,3
|
||||
forestwoodsapling,6,3
|
||||
jsapling,6,3
|
||||
junglesap,6,3
|
||||
jsap,6,3
|
||||
jtreesapling,6,3
|
||||
jlogsapling,6,3
|
||||
jtrunksapling,6,3
|
||||
jwoodsapling,6,3
|
||||
fsapling,6,3
|
||||
ftreesapling,6,3
|
||||
flogsapling,6,3
|
||||
ftrunksapling,6,3
|
||||
fwoodsapling,6,3
|
||||
bedrock,7,0
|
||||
oprock,7,0
|
||||
opblock,7,0
|
||||
@ -291,6 +282,7 @@ tree,17,0
|
||||
log,17,0
|
||||
trunk,17,0
|
||||
wood,17,0
|
||||
oak,17,0
|
||||
oaktree,17,0
|
||||
oaklog,17,0
|
||||
oaktrunk,17,0
|
||||
@ -299,44 +291,48 @@ otree,17,0
|
||||
olog,17,0
|
||||
otrunk,17,0
|
||||
owood,17,0
|
||||
dark,17,1
|
||||
darktree,17,1
|
||||
darklog,17,1
|
||||
darktrunk,17,1
|
||||
darkwood,17,1
|
||||
blacktree,17,1
|
||||
blacklog,17,1
|
||||
blacktrunk,17,1
|
||||
blackwood,17,1
|
||||
spruce,17,1
|
||||
sprucetree,17,1
|
||||
sprucelog,17,1
|
||||
sprucetrunk,17,1
|
||||
sprucewood,17,1
|
||||
pine,17,1
|
||||
pinetree,17,1
|
||||
pinelog,17,1
|
||||
pinetrunk,17,1
|
||||
pinewood,17,1
|
||||
dtree,17,1
|
||||
dlog,17,1
|
||||
dtrunk,17,1
|
||||
dwood,17,1
|
||||
bltree,17,1
|
||||
bllog,17,1
|
||||
bltrunk,17,1
|
||||
blwood,17,1
|
||||
stree,17,1
|
||||
slog,17,1
|
||||
strunk,17,1
|
||||
swood,17,1
|
||||
ptree,17,1
|
||||
plog,17,1
|
||||
ptrunk,17,1
|
||||
pwood,17,1
|
||||
birch,17,2
|
||||
birchtree,17,2
|
||||
birchlog,17,2
|
||||
birchtrunk,17,2
|
||||
birchwood,17,2
|
||||
white,17,2
|
||||
whitetree,17,2
|
||||
whitelog,17,2
|
||||
whitetrunk,17,2
|
||||
whitewood,17,2
|
||||
bitree,17,2
|
||||
bilog,17,2
|
||||
bitrunk,17,2
|
||||
biwood,17,2
|
||||
light,17,2
|
||||
lighttree,17,2
|
||||
lightlog,17,2
|
||||
lighttrunk,17,2
|
||||
lightwood,17,2
|
||||
btree,17,2
|
||||
blog,17,2
|
||||
btrunk,17,2
|
||||
@ -345,18 +341,38 @@ wtree,17,2
|
||||
wlog,17,2
|
||||
wtrunk,17,2
|
||||
wwood,17,2
|
||||
junglewood,17,3
|
||||
jwood,17,3
|
||||
ltree,17,2
|
||||
llog,17,2
|
||||
ltrunk,17,2
|
||||
lwood,17,2
|
||||
jungle,17,3
|
||||
jungletree,17,3
|
||||
junglelog,17,3
|
||||
jungletrunk,17,3
|
||||
junglewood,17,3
|
||||
forest,17,3
|
||||
foresttree,17,3
|
||||
forestlog,17,3
|
||||
foresttrunk,17,3
|
||||
forestwood,17,3
|
||||
jtree,17,3
|
||||
jlog,17,3
|
||||
monkeytree,17,3
|
||||
monkeylog,17,3
|
||||
jtrunk,17,3
|
||||
jwood,17,3
|
||||
ftree,17,3
|
||||
flog,17,3
|
||||
ftrunk,17,3
|
||||
fwood,17,3
|
||||
leaves,18,4
|
||||
leaf,18,4
|
||||
treeleaves,18,4
|
||||
logleaves,18,4
|
||||
trunkleaves,18,4
|
||||
woodleaves,18,4
|
||||
oakleaves,18,4
|
||||
oakleaf,18,4
|
||||
oleaves,18,4
|
||||
oleaf,18,4
|
||||
oaktreeleaves,18,4
|
||||
oaklogleaves,18,4
|
||||
oaktrunkleaves,18,4
|
||||
@ -377,8 +393,70 @@ otreeleaf,18,4
|
||||
ologleaf,18,4
|
||||
otrunkleaf,18,4
|
||||
owoodleaf,18,4
|
||||
spruceleaves,18,5
|
||||
spruceleaf,18,5
|
||||
sleaves,18,5
|
||||
sleaf,18,5
|
||||
sprucetreeleaves,18,5
|
||||
sprucelogleaves,18,5
|
||||
sprucetrunkleaves,18,5
|
||||
sprucewoodleaves,18,5
|
||||
streeleaves,18,5
|
||||
slogleaves,18,5
|
||||
strunkleaves,18,5
|
||||
swoodleaves,18,5
|
||||
pineleaves,18,5
|
||||
pineleaf,18,5
|
||||
pleaves,18,5
|
||||
pleaf,18,5
|
||||
pinetreeleaves,18,5
|
||||
pinelogleaves,18,5
|
||||
pinetrunkleaves,18,5
|
||||
pinewoodleaves,18,5
|
||||
ptreeleaves,18,5
|
||||
plogleaves,18,5
|
||||
ptrunkleaves,18,5
|
||||
pwoodleaves,18,5
|
||||
darkleaves,18,5
|
||||
darkleaf,18,5
|
||||
dleaves,18,5
|
||||
dleaf,18,5
|
||||
darktreeleaves,18,5
|
||||
darklogleaves,18,5
|
||||
darktrunkleaves,18,5
|
||||
darkwoodleaves,18,5
|
||||
dtreeleaves,18,5
|
||||
dlogleaves,18,5
|
||||
dtrunkleaves,18,5
|
||||
dwoodleaves,18,5
|
||||
sprucetreeleaf,18,5
|
||||
sprucelogleaf,18,5
|
||||
sprucetrunkleaf,18,5
|
||||
sprucewoodleaf,18,5
|
||||
streeleaf,18,5
|
||||
slogleaf,18,5
|
||||
strunkleaf,18,5
|
||||
swoodleaf,18,5
|
||||
pinetreeleaf,18,5
|
||||
pinelogleaf,18,5
|
||||
pinetrunkleaf,18,5
|
||||
pinewoodleaf,18,5
|
||||
ptreeleaf,18,5
|
||||
plogleaf,18,5
|
||||
ptrunkleaf,18,5
|
||||
pwoodleaf,18,5
|
||||
darktreeleaf,18,5
|
||||
darklogleaf,18,5
|
||||
darktrunkleaf,18,5
|
||||
darkwoodleaf,18,5
|
||||
dtreeleaf,18,5
|
||||
dlogleaf,18,5
|
||||
dtrunkleaf,18,5
|
||||
dwoodleaf,18,5
|
||||
birchleaves,18,6
|
||||
birchleaf,18,6
|
||||
bleaves,18,6
|
||||
bleaf,18,6
|
||||
birchtreeleaves,18,6
|
||||
birchlogleaves,18,6
|
||||
birchtrunkleaves,18,6
|
||||
@ -387,10 +465,30 @@ btreeleaves,18,6
|
||||
blogleaves,18,6
|
||||
btrunkleaves,18,6
|
||||
bwoodleaves,18,6
|
||||
bitreeleaves,18,6
|
||||
bilogleaves,18,6
|
||||
bitrunkleaves,18,6
|
||||
biwoodleaves,18,6
|
||||
lightleaves,18,6
|
||||
lightleaf,18,6
|
||||
lleaves,18,6
|
||||
lleaf,18,6
|
||||
lighttreeleaves,18,6
|
||||
lightlogleaves,18,6
|
||||
lighttrunkleaves,18,6
|
||||
lightwoodleaves,18,6
|
||||
ltreeleaves,18,6
|
||||
llogleaves,18,6
|
||||
ltrunkleaves,18,6
|
||||
lwoodleaves,18,6
|
||||
whiteleaves,18,6
|
||||
whiteleaf,18,6
|
||||
wleaves,18,6
|
||||
wleaf,18,6
|
||||
whitetreeleaves,18,6
|
||||
whitelogleaves,18,6
|
||||
whitetrunkleaves,18,6
|
||||
whitewoodleaves,18,6
|
||||
wtreeleaves,18,6
|
||||
wlogleaves,18,6
|
||||
wtrunkleaves,18,6
|
||||
wwoodleaves,18,6
|
||||
birchtreeleaf,18,6
|
||||
birchlogleaf,18,6
|
||||
birchtrunkleaf,18,6
|
||||
@ -399,16 +497,62 @@ btreeleaf,18,6
|
||||
blogleaf,18,6
|
||||
btrunkleaf,18,6
|
||||
bwoodleaf,18,6
|
||||
bitreeleaf,18,6
|
||||
bilogleaf,18,6
|
||||
bitrunkleaf,18,6
|
||||
biwoodleaf,18,6
|
||||
lighttreeleaf,18,6
|
||||
lightlogleaf,18,6
|
||||
lighttrunkleaf,18,6
|
||||
lightwoodleaf,18,6
|
||||
ltreeleaf,18,6
|
||||
llogleaf,18,6
|
||||
ltrunkleaf,18,6
|
||||
lwoodleaf,18,6
|
||||
whitetreeleaf,18,6
|
||||
whitelogleaf,18,6
|
||||
whitetrunkleaf,18,6
|
||||
whitewoodleaf,18,6
|
||||
wtreeleaf,18,6
|
||||
wlogleaf,18,6
|
||||
wtrunkleaf,18,6
|
||||
wwoodleaf,18,6
|
||||
jungleleaves,18,7
|
||||
jungleleaf,18,7
|
||||
jleaves,18,7
|
||||
jleaf,18,7
|
||||
jungleleaf,18,7
|
||||
monkeyleaf,18,7
|
||||
monkeyleaves,18,7
|
||||
jungletreeleaves,18,7
|
||||
junglelogleaves,18,7
|
||||
jungletrunkleaves,18,7
|
||||
junglewoodleaves,18,7
|
||||
jtreeleaves,18,7
|
||||
jlogleaves,18,7
|
||||
jtrunkleaves,18,7
|
||||
jwoodleaves,18,7
|
||||
forestleaves,18,7
|
||||
forestleaf,18,7
|
||||
fleaves,18,7
|
||||
fleaf,18,7
|
||||
foresttreeleaves,18,7
|
||||
forestlogleaves,18,7
|
||||
foresttrunkleaves,18,7
|
||||
forestwoodleaves,18,7
|
||||
ftreeleaves,18,7
|
||||
flogleaves,18,7
|
||||
ftrunkleaves,18,7
|
||||
fwoodleaves,18,7
|
||||
jungletreeleaf,18,7
|
||||
junglelogleaf,18,7
|
||||
jungletrunkleaf,18,7
|
||||
junglewoodleaf,18,7
|
||||
jtreeleaf,18,7
|
||||
jlogleaf,18,7
|
||||
jtrunkleaf,18,7
|
||||
jwoodleaf,18,7
|
||||
foresttreeleaf,18,7
|
||||
forestlogleaf,18,7
|
||||
foresttrunkleaf,18,7
|
||||
forestwoodleaf,18,7
|
||||
ftreeleaf,18,7
|
||||
flogleaf,18,7
|
||||
ftrunkleaf,18,7
|
||||
fwoodleaf,18,7
|
||||
sponge,19,0
|
||||
glass,20,0
|
||||
lapislazuliore,21,0
|
||||
@ -586,6 +730,12 @@ lightgrecotton,35,5
|
||||
lgrecloth,35,5
|
||||
lgrewool,35,5
|
||||
lgrecotton,35,5
|
||||
limecloth,35,5
|
||||
limewool,35,5
|
||||
limecotton,35,5
|
||||
lcloth,35,5
|
||||
lwool,35,5
|
||||
lcotton,35,5
|
||||
pinkcloth,35,6
|
||||
pinkwool,35,6
|
||||
pinkcotton,35,6
|
||||
@ -1104,6 +1254,9 @@ mcobblestone,48,0
|
||||
mossycobble,48,0
|
||||
mosscobble,48,0
|
||||
mcobble,48,0
|
||||
mossstone,48,0
|
||||
mossystone,48,0
|
||||
mstone,48,0
|
||||
obsidian,49,0
|
||||
obsi,49,0
|
||||
obby,49,0
|
||||
@ -2821,6 +2974,8 @@ flintiron,259,0
|
||||
flinttinder,259,0
|
||||
lighter,259,0
|
||||
apple,260,0
|
||||
normalapple,260,0
|
||||
redapple,260,0
|
||||
bow,261,0
|
||||
arrow,262,0
|
||||
coal,263,0
|
||||
@ -3205,6 +3360,27 @@ picture,321,0
|
||||
goldenapple,322,0
|
||||
goldapple,322,0
|
||||
gapple,322,0
|
||||
enchantedgoldenapple,322,1
|
||||
enchantedgoldapple,322,1
|
||||
enchantedgapple,322,1
|
||||
supergoldenapple,322,1
|
||||
supergoldapple,322,1
|
||||
supergapple,322,1
|
||||
magicalgoldenapple,322,1
|
||||
magicalgoldapple,322,1
|
||||
magicalgapple,322,1
|
||||
magicgoldenapple,322,1
|
||||
magicgoldapple,322,1
|
||||
magicgapple,322,1
|
||||
egoldenapple,322,1
|
||||
egoldapple,322,1
|
||||
egapple,322,1
|
||||
sgoldenapple,322,1
|
||||
sgoldapple,322,1
|
||||
sgapple,322,1
|
||||
mgoldenapple,322,1
|
||||
mgoldapple,322,1
|
||||
mgapple,322,1
|
||||
sign,323,0
|
||||
woodendoor,324,0
|
||||
wooddoor,324,0
|
||||
@ -3628,8 +3804,24 @@ delay,356,0
|
||||
dioder,356,0
|
||||
diode,356,0
|
||||
cookie,357,0
|
||||
map,358,0
|
||||
chart,358,0
|
||||
map,358,0
|
||||
map_0,358,0
|
||||
map_1,358,1
|
||||
map_2,358,2
|
||||
map_3,358,3
|
||||
map_4,358,4
|
||||
map_5,358,5
|
||||
map_6,358,6
|
||||
map_7,358,7
|
||||
map_8,358,8
|
||||
map_9,358,9
|
||||
map_10,358,10
|
||||
map_11,358,11
|
||||
map_12,358,12
|
||||
map_13,358,13
|
||||
map_14,358,14
|
||||
map_15,358,15
|
||||
shears,359,0
|
||||
shear,359,0
|
||||
sheers,359,0
|
||||
@ -4108,7 +4300,7 @@ spldmgpotion,373,16396
|
||||
splharmingpot,373,16396
|
||||
spldamagepot,373,16396
|
||||
spldmgpot,373,16396
|
||||
sdpot,373,16396
|
||||
spdpot,373,16396
|
||||
splashregenerationleveliipotion,373,16417
|
||||
splashregenerateleveliipotion,373,16417
|
||||
splashregenleveliipotion,373,16417
|
||||
@ -4798,10 +4990,10 @@ redmusicrecord,2259,0
|
||||
redmusicdisk,2259,0
|
||||
redmusicdisc,2259,0
|
||||
redmusiccd,2259,0
|
||||
chripmusicrecord,2259,0
|
||||
chripmusicdisk,2259,0
|
||||
chripmusicdisc,2259,0
|
||||
chripmusiccd,2259,0
|
||||
chirpmusicrecord,2259,0
|
||||
chirpmusicdisk,2259,0
|
||||
chirpmusicdisc,2259,0
|
||||
chirpmusiccd,2259,0
|
||||
remusicrecord,2259,0
|
||||
remusicdisk,2259,0
|
||||
remusicdisc,2259,0
|
||||
@ -4810,10 +5002,10 @@ redmrecord,2259,0
|
||||
redmdisk,2259,0
|
||||
redmdisc,2259,0
|
||||
redmcd,2259,0
|
||||
chripmrecord,2259,0
|
||||
chripmdisk,2259,0
|
||||
chripmdisc,2259,0
|
||||
chripmcd,2259,0
|
||||
chirpmrecord,2259,0
|
||||
chirpmdisk,2259,0
|
||||
chirpmdisc,2259,0
|
||||
chirpmcd,2259,0
|
||||
remrecord,2259,0
|
||||
remdisk,2259,0
|
||||
remdisc,2259,0
|
||||
@ -4822,10 +5014,10 @@ redrecord,2259,0
|
||||
reddisk,2259,0
|
||||
reddisc,2259,0
|
||||
redcd,2259,0
|
||||
chriprecord,2259,0
|
||||
chripdisk,2259,0
|
||||
chripdisc,2259,0
|
||||
chripcd,2259,0
|
||||
chirprecord,2259,0
|
||||
chirpdisk,2259,0
|
||||
chirpdisc,2259,0
|
||||
chirpcd,2259,0
|
||||
rerecord,2259,0
|
||||
redisk,2259,0
|
||||
redisc,2259,0
|
||||
@ -4905,7 +5097,7 @@ cd5,2260,0
|
||||
5record,2260,0
|
||||
5disk,2260,0
|
||||
5disc,2260,0
|
||||
5cs,2260,0
|
||||
5cd,2260,0
|
||||
purplemusicrecord,2261,0
|
||||
purplemusicdisk,2261,0
|
||||
purplemusicdisc,2261,0
|
||||
@ -5149,7 +5341,7 @@ cd10,2265,0
|
||||
10record,2265,0
|
||||
10disk,2265,0
|
||||
10disc,2265,0
|
||||
10cs,2265,0
|
||||
10cd,2265,0
|
||||
crackedmusicrecord,2266,0
|
||||
crackedmusicdisk,2266,0
|
||||
crackedmusicdisc,2266,0
|
||||
|
|
@ -3,16 +3,16 @@
|
||||
# Translations start here
|
||||
# by: oggehej, corrected by NeonMaster.
|
||||
action=* {0} {1}
|
||||
addedToAccount=\u00a7a{0} har blivit tillagt p\u00c3\u00a5 ditt konto.
|
||||
addedToOthersAccount=\u00a7a{0} har blivit tillagt p\u00c3\u00a5 {1}\u00a7a konto. Ny balans: {2}
|
||||
addedToAccount=\u00a7a{0} har blivit tillagt p\u00e5 ditt konto.
|
||||
addedToOthersAccount=\u00a7a{0} har blivit tillagt p\u00e5 {1}\u00a7a konto. Ny balans: {2}
|
||||
adventure = adventure
|
||||
alertBroke=gjorde s\u00c3\u00b6nder:
|
||||
alertBroke=gjorde s\u00f6nder:
|
||||
alertFormat=\u00a73[{0}] \u00a7f {1} \u00a76 {2} at: {3}
|
||||
alertPlaced=placerade:
|
||||
alertUsed=anv\u00c3\u00a4nde:
|
||||
autoAfkKickReason=Du har blivit utsparkad f\u00c3\u00b6r att ha varit inaktiv i mer \u00c3\u00a4n {0} minuter.
|
||||
backAfterDeath=\u00a77Anv\u00c3\u00a4nd /back kommandot f\u00c3\u00b6r att komma tillbaka till din d\u00c3\u00b6dsplats.
|
||||
backUsageMsg=\u00a77Tar dig tillbaka till din f\u00c3\u00b6reg\u00c3\u00a5ende position.
|
||||
alertUsed=anv\u00e4nde:
|
||||
autoAfkKickReason=Du har blivit utsparkad f\u00f6r att ha varit inaktiv i mer \u00e4n {0} minuter.
|
||||
backAfterDeath=\u00a77Anv\u00e4nd /back kommandot f\u00f6r att komma tillbaka till din d\u00f6dsplats.
|
||||
backUsageMsg=\u00a77Tar dig tillbaka till din f\u00f6reg\u00e5ende position.
|
||||
backupDisabled=Ett externt backup-skript har inte blivit konfigurerat.
|
||||
backupFinished=Backup klar
|
||||
backupStarted=Backup startad
|
||||
@ -20,418 +20,418 @@ balance=\u00a77Balans: {0}
|
||||
balanceTop=\u00a77Topp balans ({0})
|
||||
banExempt=\u00a7cDu kan inte banna den spelaren.
|
||||
banIpAddress=\u00a77Bannade IP-adress
|
||||
bannedIpsFileError=Kunde inte l\u00c3\u00a4sa banned-ips.txt
|
||||
bannedIpsFileError=Kunde inte l\u00e4sa banned-ips.txt
|
||||
bannedIpsFileNotFound=banned-ips.txt hittades inte
|
||||
bannedPlayersFileError=Kunde inte l\u00c3\u00a4sa banned-players.txt
|
||||
bannedPlayersFileError=Kunde inte l\u00e4sa banned-players.txt
|
||||
bannedPlayersFileNotFound=banned-players.txt hittades inte
|
||||
bigTreeFailure=\u00a7cEtt stort tr\u00c3\u00a4d kunde inte genereras misslyckades. F\u00c3\u00b6s\u00c3\u00b6k igen p\u00c3\u00a5 gr\u00c3\u00a4s eller jord.
|
||||
bigTreeSuccess= \u00a77Stort tr\u00c3\u00a4d genererat.
|
||||
blockList=Essentials vidarebefordrade f\u00c3\u00b6ljande kommandon till ett annat insticksprogram:
|
||||
broadcast=[\u00a7cUts\u00c3\u00a4ndning\u00a7f]\u00a7a {0}
|
||||
buildAlert=\u00a7cDu har inte till\u00c3\u00a5telse att bygga
|
||||
bukkitFormatChanged=Bukkit versionsformat bytt. Version \u00c3\u00a4r inte kollad.
|
||||
burnMsg=\u00a77Du satte eld p\u00c3\u00a5 {0} i {1} sekunder.
|
||||
bigTreeFailure=\u00a7cEtt stort tr\u00e4d kunde inte genereras misslyckades. F\u00f6s\u00f6k igen p\u00e5 gr\u00e4s eller jord.
|
||||
bigTreeSuccess= \u00a77Stort tr\u00e4d genererat.
|
||||
blockList=Essentials vidarebefordrade f\u00f6ljande kommandon till ett annat insticksprogram:
|
||||
broadcast=[\u00a7cUts\u00e4ndning\u00a7f]\u00a7a {0}
|
||||
buildAlert=\u00a7cDu har inte till\u00e5telse att bygga
|
||||
bukkitFormatChanged=Bukkit versionsformat bytt. Version \u00e4r inte kollad.
|
||||
burnMsg=\u00a77Du satte eld p\u00e5 {0} i {1} sekunder.
|
||||
canTalkAgain=\u00a77Du kan nu prata igen!
|
||||
cantFindGeoIpDB=Kunde inte hitta GeoIP-databasen!
|
||||
cantReadGeoIpDB=Kunde inte l\u00c3\u00a4sa inneh\u00c3\u00a5ll fr\u00c3\u00a5n GeoIP-databasen!
|
||||
cantSpawnItem=\u00a7cDu har inte beh\u00c3\u00b6righet att spawna {0}
|
||||
cantReadGeoIpDB=Kunde inte l\u00e4sa inneh\u00e5ll fr\u00e5n GeoIP-databasen!
|
||||
cantSpawnItem=\u00a7cDu har inte beh\u00f6righet att spawna {0}
|
||||
chatTypeLocal=[L]
|
||||
chatTypeSpy=[Spy]
|
||||
commandFailed=Kommando {0} misslyckades:
|
||||
commandHelpFailedForPlugin=Kunde inte hitta hj\u00c3\u00a4lp f\u00c3\u00b6r: {0}
|
||||
commandNotLoaded=\u00a7cKommando {0} \u00c3\u00a4r felaktigt laddat.
|
||||
compassBearing=\u00a77B\u00c3\u00a4ring: {0} ({1} grader).
|
||||
commandHelpFailedForPlugin=Kunde inte hitta hj\u00e4lp f\u00f6r: {0}
|
||||
commandNotLoaded=\u00a7cKommando {0} \u00e4r felaktigt laddat.
|
||||
compassBearing=\u00a77B\u00e4ring: {0} ({1} grader).
|
||||
configFileMoveError=Kunde inte flytta config.yml till backup-platsen.
|
||||
configFileRenameError=Kunde inte byta namn p\u00c3\u00a5 temp-filen till config.yml
|
||||
configFileRenameError=Kunde inte byta namn p\u00e5 temp-filen till config.yml
|
||||
connectedPlayers=Anslutna spelare:
|
||||
connectionFailed=Kunde inte \u00c3\u00b6ppna anslutning.
|
||||
connectionFailed=Kunde inte \u00f6ppna anslutning.
|
||||
cooldownWithMessage=\u00a7cNedkylning: {0}
|
||||
corruptNodeInConfig=\u00a74Notice: Din konfigurationsfil har en korrupt {0} nod.
|
||||
couldNotFindTemplate=Kunde inte hitta mallen {0}
|
||||
creatingConfigFromTemplate=Skapar konfiguration fr\u00c3\u00a5n mallen: {0}
|
||||
creatingConfigFromTemplate=Skapar konfiguration fr\u00e5n mallen: {0}
|
||||
creatingEmptyConfig=Skapar tom konfiguration: {0}
|
||||
creative=kreativ
|
||||
currency={0}{1}
|
||||
currentWorld=Nuvarande v\u00c3\u00a4rld: {0}
|
||||
currentWorld=Nuvarande v\u00e4rld: {0}
|
||||
day=dag
|
||||
days=dagar
|
||||
defaultBanReason=Banhammaren har talat!
|
||||
deleteFileError=Kunde inte radera filen: {0}
|
||||
deleteHome=\u00a77Hemmet {0} har tagits bort.
|
||||
deleteJail=\u00a77F\u00c3\u00a4ngelset {0} har tagits bort.
|
||||
deleteJail=\u00a77F\u00e4ngelset {0} har tagits bort.
|
||||
deleteWarp=\u00a77Warpen {0} har tagits bort.
|
||||
deniedAccessCommand={0} nekades \u00c3\u00a5tkomst till kommandot.
|
||||
dependancyDownloaded=[Essentials] Beroende {0} laddades ner framg\u00c3\u00a5ngsrikt.
|
||||
dependancyException=[Essentials] Ett fel uppstod n\u00c3\u00a4r ett beroende laddades ner.
|
||||
dependancyNotFound=[Essentials] Ett n\u00c3\u00b6dv\u00c3\u00a4ndigt beroende hittades inte, laddar ner nu.
|
||||
depth=\u00a77Du \u00c3\u00a4r p\u00c3\u00a5 havsniv\u00c3\u00a5n.
|
||||
depthAboveSea=\u00a77Du \u00c3\u00a4r {0} block ovanf\u00c3\u00b6r havsni\u00c3\u00a5n.
|
||||
depthBelowSea=\u00a77Du \u00c3\u00a4r {0} block under havsniv\u00c3\u00a5n.
|
||||
destinationNotSet=Ingen destination \u00c3\u00a4r inst\u00c3\u00a4lld.
|
||||
disableUnlimited=\u00a77Inaktiverade o\u00c3\u00a4ndligt placerande av {0} f\u00c3\u00b6r {1}.
|
||||
deniedAccessCommand={0} nekades \u00e5tkomst till kommandot.
|
||||
dependancyDownloaded=[Essentials] Beroende {0} laddades ner framg\u00e5ngsrikt.
|
||||
dependancyException=[Essentials] Ett fel uppstod n\u00e4r ett beroende laddades ner.
|
||||
dependancyNotFound=[Essentials] Ett n\u00f6dv\u00e4ndigt beroende hittades inte, laddar ner nu.
|
||||
depth=\u00a77Du \u00e4r p\u00e5 havsniv\u00e5n.
|
||||
depthAboveSea=\u00a77Du \u00e4r {0} block ovanf\u00f6r havsni\u00e5n.
|
||||
depthBelowSea=\u00a77Du \u00e4r {0} block under havsniv\u00e5n.
|
||||
destinationNotSet=Ingen destination \u00e4r inst\u00e4lld.
|
||||
disableUnlimited=\u00a77Inaktiverade o\u00e4ndligt placerande av {0} f\u00f6r {1}.
|
||||
disabled=inaktiverad
|
||||
disabledToSpawnMob=Att spawna fram den h\u00c3\u00a4r moben \u00c3\u00a4r inaktiverat i configurationsfilen.
|
||||
dontMoveMessage=\u00a77Teleporteringen p\u00c3\u00a5b\u00c3\u00b6rjas om {0}. R\u00c3\u00b6r dig inte.
|
||||
downloadingGeoIp=Laddar ner GeoIP-databasen... det h\u00c3\u00a4r kan ta en stund (land: 0.6 MB, stad: 20MB)
|
||||
duplicatedUserdata=Dublicerad anv\u00c3\u00a4ndardata: {0} och {1}
|
||||
durability=\u00a77Det h\u00c3\u00a4r verktyget har \u00a7c{0}\u00a77 anv\u00c3\u00a4ndningar kvar
|
||||
enableUnlimited=\u00a77Ger o\u00c3\u00a4ndligt av {0} till {1}.
|
||||
disabledToSpawnMob=Att spawna fram den h\u00e4r moben \u00e4r inaktiverat i configurationsfilen.
|
||||
dontMoveMessage=\u00a77Teleporteringen p\u00e5b\u00f6rjas om {0}. R\u00f6r dig inte.
|
||||
downloadingGeoIp=Laddar ner GeoIP-databasen... det h\u00e4r kan ta en stund (land: 0.6 MB, stad: 20MB)
|
||||
duplicatedUserdata=Dublicerad anv\u00e4ndardata: {0} och {1}
|
||||
durability=\u00a77Det h\u00e4r verktyget har \u00a7c{0}\u00a77 anv\u00e4ndningar kvar
|
||||
enableUnlimited=\u00a77Ger o\u00e4ndligt av {0} till {1}.
|
||||
enabled=aktiverad
|
||||
enchantmentApplied = \u00a77F\u00c3\u00b6rtrollningen {0} har blivit till\u00c3\u00a4mpad p\u00c3\u00a5 saken du har i handen.
|
||||
enchantmentNotFound = \u00a7cF\u00c3\u00b6rtrollningen hittades inte
|
||||
enchantmentPerm = \u00a7cDu har inte beh\u00c3\u00b6righet att {0}
|
||||
enchantmentRemoved = \u00a77F\u00c3\u00b6rtrollningen {0} har tagits bort fr\u00c3\u00a5n saken i din hand.
|
||||
enchantments = \u00a77F\u00c3\u00b6rtrollningar: {0}
|
||||
enchantmentApplied = \u00a77F\u00f6rtrollningen {0} har blivit till\u00e4mpad p\u00e5 saken du har i handen.
|
||||
enchantmentNotFound = \u00a7cF\u00f6rtrollningen hittades inte
|
||||
enchantmentPerm = \u00a7cDu har inte beh\u00f6righet att {0}
|
||||
enchantmentRemoved = \u00a77F\u00f6rtrollningen {0} har tagits bort fr\u00e5n saken i din hand.
|
||||
enchantments = \u00a77F\u00f6rtrollningar: {0}
|
||||
errorCallingCommand=Kunde inte kontakta kommandot /{0}
|
||||
errorWithMessage=\u00a7cFel: {0}
|
||||
essentialsHelp1=Filen \u00c3\u00a4r trasig och Essentials kan inte \u00c3\u00b6ppna den. Essentials \u00c3\u00a4r nu inaktiverat. Om du inte kan fixa problemet sj\u00c3\u00a4lv, g\u00c3\u00a5 till http://tiny.cc/EssentialsChat
|
||||
essentialsHelp2=Filen \u00c3\u00a4r trasig och Essentials kan inte \u00c3\u00b6ppna den. Essentials \u00c3\u00a4r nu inaktiverat. Om du inte kan fixa problemet sj\u00c3\u00a4lv, skriv /essentialshelp i spelet eller g\u00c3\u00a5 till http://tiny.cc/EssentialsChat
|
||||
essentialsHelp1=Filen \u00e4r trasig och Essentials kan inte \u00f6ppna den. Essentials \u00e4r nu inaktiverat. Om du inte kan fixa problemet sj\u00e4lv, g\u00e5 till http://tiny.cc/EssentialsChat
|
||||
essentialsHelp2=Filen \u00e4r trasig och Essentials kan inte \u00f6ppna den. Essentials \u00e4r nu inaktiverat. Om du inte kan fixa problemet sj\u00e4lv, skriv /essentialshelp i spelet eller g\u00e5 till http://tiny.cc/EssentialsChat
|
||||
essentialsReload=\u00a77Essentials Omladdat {0}
|
||||
exp=\u00a7c{0} \u00a77har\u00a7c {1} \u00a77exp (level\u00a7c {2}\u00a77) och beh\u00c3\u00b6ver\u00a7c {3} \u00a77mer erfarenhet f\u00c3\u00b6r att g\u00c3\u00a5 upp en niv\u00c3\u00a5.
|
||||
exp=\u00a7c{0} \u00a77har\u00a7c {1} \u00a77exp (level\u00a7c {2}\u00a77) och beh\u00f6ver\u00a7c {3} \u00a77mer erfarenhet f\u00f6r att g\u00e5 upp en niv\u00e5.
|
||||
expSet=\u00a7c{0} \u00a77har nu\u00a7c {1} \u00a77erfarenhet.
|
||||
extinguish=\u00a77Du sl\u00c3\u00a4ckte dig sj\u00c3\u00a4lv.
|
||||
extinguishOthers=\u00a77Du sl\u00c3\u00a4ckte {0}.
|
||||
failedToCloseConfig=Kunde inte st\u00c3\u00a4nga konfiguration {0}
|
||||
extinguish=\u00a77Du sl\u00e4ckte dig sj\u00e4lv.
|
||||
extinguishOthers=\u00a77Du sl\u00e4ckte {0}.
|
||||
failedToCloseConfig=Kunde inte st\u00e4nga konfiguration {0}
|
||||
failedToCreateConfig=Kunde inte skapa konfiguration {0}
|
||||
failedToWriteConfig=Kunde inte skriva konfiguration {0}
|
||||
false=falskt
|
||||
feed=\u00a77Din hunger \u00c3\u00a4r m\u00c3\u00a4ttad.
|
||||
feed=\u00a77Din hunger \u00e4r m\u00e4ttad.
|
||||
feedOther=\u00a77Matade {0}.
|
||||
fileRenameError=Namnbytet av filen {0} misslyckades
|
||||
flyMode=\u00a77Aktiverade flygl\u00c3\u00a4ge {0} f\u00c3\u00b6r {1}.
|
||||
flyMode=\u00a77Aktiverade flygl\u00e4ge {0} f\u00f6r {1}.
|
||||
foreverAlone=\u00a7cDu har ingen att svara.
|
||||
freedMemory=Befriade {0} MB.
|
||||
gameMode=\u00a77Satte {0}s spell\u00c3\u00a4ge till {1}.
|
||||
gameMode=\u00a77Satte {0}s spell\u00e4ge till {1}.
|
||||
gcchunks= bitar,
|
||||
gcentities= enheter
|
||||
gcfree=Ledigt minne: {0} MB
|
||||
gcmax=Maximalt minne: {0} MB
|
||||
gctotal=Tilldelat minne: {0} MB
|
||||
geoIpUrlEmpty=Nerladdningsadressen f\u00c3\u00b6r GeoIP \u00c3\u00a4r tom.
|
||||
geoIpUrlInvalid=Nerladdningsadressen f\u00c3\u00b6r GeoIP \u00c3\u00a4r ogiltig.
|
||||
geoipJoinFormat=Spelaren {0} kommer fr\u00c3\u00a5n {1}
|
||||
godDisabledFor=inaktiverat f\u00c3\u00b6r {0}
|
||||
godEnabledFor=aktiverat f\u00c3\u00b6r {0}
|
||||
godMode=\u00a77Od\u00c3\u00b6dlighet {0}.
|
||||
hatArmor=\u00a7cFel, du kan inte anv\u00c3\u00a4nda den h\u00c3\u00a4r saken som en hatt!
|
||||
hatFail=\u00a7cDu m\u00c3\u00a5ste ha n\u00c3\u00a5gonting att b\u00c3\u00a4ra i din hand.
|
||||
geoIpUrlEmpty=Nerladdningsadressen f\u00f6r GeoIP \u00e4r tom.
|
||||
geoIpUrlInvalid=Nerladdningsadressen f\u00f6r GeoIP \u00e4r ogiltig.
|
||||
geoipJoinFormat=Spelaren {0} kommer fr\u00e5n {1}
|
||||
godDisabledFor=inaktiverat f\u00f6r {0}
|
||||
godEnabledFor=aktiverat f\u00f6r {0}
|
||||
godMode=\u00a77Od\u00f6dlighet {0}.
|
||||
hatArmor=\u00a7cFel, du kan inte anv\u00e4nda den h\u00e4r saken som en hatt!
|
||||
hatFail=\u00a7cDu m\u00e5ste ha n\u00e5gonting att b\u00e4ra i din hand.
|
||||
hatPlaced=\u00a7eNjut av din nya hatt!
|
||||
haveBeenReleased=\u00a77Du har blivit friad
|
||||
heal=\u00a77Du har blivit l\u00c3\u00a4kt.
|
||||
healOther=\u00a77L\u00c3\u00a4kte {0}.
|
||||
helpConsole=F\u00c3\u00b6r att visa hj\u00c3\u00a4lp fr\u00c3\u00a5n konsolen, skriv ?.
|
||||
helpFrom=\u00a77Kommandon fr\u00c3\u00a5n {0}:
|
||||
heal=\u00a77Du har blivit l\u00e4kt.
|
||||
healOther=\u00a77L\u00e4kte {0}.
|
||||
helpConsole=F\u00f6r att visa hj\u00e4lp fr\u00e5n konsolen, skriv ?.
|
||||
helpFrom=\u00a77Kommandon fr\u00e5n {0}:
|
||||
helpLine=\u00a76/{0}\u00a7f: {1}
|
||||
helpMatching=\u00a77Kommandon matchar "{0}":
|
||||
helpOp=\u00a7c[OpHj\u00c3\u00a4lp]\u00a7f \u00a77{0}:\u00a7f {1}
|
||||
helpOp=\u00a7c[OpHj\u00e4lp]\u00a7f \u00a77{0}:\u00a7f {1}
|
||||
helpPages=Sida \u00a7c{0}\u00a7f av \u00a7c{1}\u00a7f:
|
||||
helpPlugin=\u00a74{0}\u00a7f: Hj\u00c3\u00a4lp f\u00c3\u00b6r insticksprogram: /help {1}
|
||||
holeInFloor=H\u00c3\u00a5l i golvet
|
||||
homeSet=\u00a77Hem inst\u00c3\u00a4llt.
|
||||
homeSetToBed=\u00a77Ditt hem \u00c3\u00a4r nu inst\u00c3\u00a4llt till den h\u00c3\u00a4r s\u00c3\u00a4ngen.
|
||||
helpPlugin=\u00a74{0}\u00a7f: Hj\u00e4lp f\u00f6r insticksprogram: /help {1}
|
||||
holeInFloor=H\u00e5l i golvet
|
||||
homeSet=\u00a77Hem inst\u00e4llt.
|
||||
homeSetToBed=\u00a77Ditt hem \u00e4r nu inst\u00e4llt till den h\u00e4r s\u00e4ngen.
|
||||
homes=Hem: {0}
|
||||
hour=timme
|
||||
hours=timmar
|
||||
ignorePlayer=Du ignorerar spelaren {0} fr\u00c3\u00a5n och med nu.
|
||||
ignorePlayer=Du ignorerar spelaren {0} fr\u00e5n och med nu.
|
||||
illegalDate=Felaktigt datumformat.
|
||||
infoChapter=V\u00c3\u00a4lj kapitel:
|
||||
infoChapter=V\u00e4lj kapitel:
|
||||
infoChapterPages=Kapitel {0}, sida \u00a7c{1}\u00a7f av \u00a7c{2}\u00a7f:
|
||||
infoFileDoesNotExist=Filen info.txt finns inte. Skapar en f\u00c3\u00b6r dig.
|
||||
infoFileDoesNotExist=Filen info.txt finns inte. Skapar en f\u00f6r dig.
|
||||
infoPages=\u00a7e ---- \u00a76{2} \u00a7e--\u00a76 Sida \u00a74{0}\u00a76/\u00a74{1} \u00a7e----
|
||||
infoUnknownChapter=Ok\u00c3\u00a4nt kapitel.
|
||||
invBigger=De andra anv\u00c3\u00a4ndarnas f\u00c3\u00b6rr\u00c3\u00a5d \u00c3\u00a4r st\u00c3\u00b6rre \u00c3\u00a4n ditt.
|
||||
invRestored=Ditt f\u00c3\u00b6rr\u00c3\u00a5d har blivit \u00c3\u00a5terst\u00c3\u00a4llt.
|
||||
invSee=Du ser nu {0}s f\u00c3\u00b6rr\u00c3\u00a5d.
|
||||
invSeeHelp=Anv\u00c3\u00a4nd /invsee f\u00c3\u00b6r att \u00c3\u00a5terst\u00c3\u00a4lla ditt f\u00c3\u00b6rr\u00c3\u00a5d.
|
||||
infoUnknownChapter=Ok\u00e4nt kapitel.
|
||||
invBigger=De andra anv\u00e4ndarnas f\u00f6rr\u00e5d \u00e4r st\u00f6rre \u00e4n ditt.
|
||||
invRestored=Ditt f\u00f6rr\u00e5d har blivit \u00e5terst\u00e4llt.
|
||||
invSee=Du ser nu {0}s f\u00f6rr\u00e5d.
|
||||
invSeeHelp=Anv\u00e4nd /invsee f\u00f6r att \u00e5terst\u00e4lla ditt f\u00f6rr\u00e5d.
|
||||
invalidCharge=\u00a7cOgiltig laddning.
|
||||
invalidHome=Hemmet {0} finns inte
|
||||
invalidMob=Ogiltig monster-typ.
|
||||
invalidServer=Ogiltig server!
|
||||
invalidSignLine=Rad {0} p\u00c3\u00a5 skylten \u00c3\u00a4r ogiltig.
|
||||
invalidWorld=\u00a7cOgiltig v\u00c3\u00a4rld.
|
||||
inventoryCleared=\u00a77F\u00c3\u00b6rr\u00c3\u00a5d rensat.
|
||||
inventoryClearedOthers=\u00a77F\u00c3\u00b6rr\u00c3\u00a5det av \u00a7c{0}\u00a77 \u00c3\u00a4r rensat.
|
||||
is=\u00c3\u00a4r
|
||||
itemCannotBeSold=Det objektet kan inte s\u00c3\u00a4ljas till servern.
|
||||
itemMustBeStacked=Objektet m\u00c3\u00a5ste k\u00c3\u00b6pas i staplar. En m\u00c3\u00a4ngd av 2s kommer bli 2 staplar, etc.
|
||||
itemNotEnough1=\u00a7cDu har inte tillr\u00c3\u00a4ckligt av den saken f\u00c3\u00b6r att s\u00c3\u00a4lja.
|
||||
itemNotEnough2=\u00a77Om du ville s\u00c3\u00a4lja alla block av den typen, anv\u00c3\u00a4nd /sell blocknamn
|
||||
itemNotEnough3=\u00a77/sell blocknamn -1 kommer att s\u00c3\u00a4lja allt av den blocktypen f\u00c3\u00b6rutom 1 o.s.v.
|
||||
itemSellAir=F\u00c3\u00b6rs\u00c3\u00b6kte du att s\u00c3\u00a4lja luft? S\u00c3\u00a4tt en sak i din hand.
|
||||
itemSold=\u00a77S\u00c3\u00a5lde f\u00c3\u00b6r \u00a7c{0} \u00a77({1} {2} f\u00c3\u00b6r {3} styck)
|
||||
itemSoldConsole={0} s\u00c3\u00a5lde {1} f\u00c3\u00b6r \u00a77{2} \u00a77({3} saker f\u00c3\u00b6r {4} styck)
|
||||
invalidSignLine=Rad {0} p\u00e5 skylten \u00e4r ogiltig.
|
||||
invalidWorld=\u00a7cOgiltig v\u00e4rld.
|
||||
inventoryCleared=\u00a77F\u00f6rr\u00e5d rensat.
|
||||
inventoryClearedOthers=\u00a77F\u00f6rr\u00e5det av \u00a7c{0}\u00a77 \u00e4r rensat.
|
||||
is=\u00e4r
|
||||
itemCannotBeSold=Det objektet kan inte s\u00e4ljas till servern.
|
||||
itemMustBeStacked=Objektet m\u00e5ste k\u00f6pas i staplar. En m\u00e4ngd av 2s kommer bli 2 staplar, etc.
|
||||
itemNotEnough1=\u00a7cDu har inte tillr\u00e4ckligt av den saken f\u00f6r att s\u00e4lja.
|
||||
itemNotEnough2=\u00a77Om du ville s\u00e4lja alla block av den typen, anv\u00e4nd /sell blocknamn
|
||||
itemNotEnough3=\u00a77/sell blocknamn -1 kommer att s\u00e4lja allt av den blocktypen f\u00f6rutom 1 o.s.v.
|
||||
itemSellAir=F\u00f6rs\u00f6kte du att s\u00e4lja luft? S\u00e4tt en sak i din hand.
|
||||
itemSold=\u00a77S\u00e5lde f\u00f6r \u00a7c{0} \u00a77({1} {2} f\u00f6r {3} styck)
|
||||
itemSoldConsole={0} s\u00e5lde {1} f\u00f6r \u00a77{2} \u00a77({3} saker f\u00f6r {4} styck)
|
||||
itemSpawn=\u00a77Ger {0} stycken {1}
|
||||
itemsCsvNotLoaded=Kunde inte ladda items.csv.
|
||||
jailAlreadyIncarcerated=\u00a7cPersonen \u00c3\u00a4r redan i f\u00c3\u00a4ngelse: {0}
|
||||
jailMessage=\u00a7cBryter du mot reglerna, f\u00c3\u00a5r du st\u00c3\u00a5 ditt kast.
|
||||
jailNotExist=Det f\u00c3\u00a4ngelset finns inte.
|
||||
jailReleased=\u00a77Spelaren \u00a7e{0}\u00a77 \u00c3\u00a4r frisl\u00c3\u00a4ppt.
|
||||
jailReleasedPlayerNotify=\u00a77Du har blivit frisl\u00c3\u00a4ppt!
|
||||
jailSentenceExtended=F\u00c3\u00a4ngelsestraffet f\u00c3\u00b6rl\u00c3\u00a4ngt till: {0)
|
||||
jailSet=\u00a77F\u00c3\u00a4ngelset {0} har skapats
|
||||
jumpError=Det skulle skadat din dators hj\u00c3\u00a4rna.
|
||||
kickDefault=Utsparkad fr\u00c3\u00a5n server
|
||||
jailAlreadyIncarcerated=\u00a7cPersonen \u00e4r redan i f\u00e4ngelse: {0}
|
||||
jailMessage=\u00a7cBryter du mot reglerna, f\u00e5r du st\u00e5 ditt kast.
|
||||
jailNotExist=Det f\u00e4ngelset finns inte.
|
||||
jailReleased=\u00a77Spelaren \u00a7e{0}\u00a77 \u00e4r frisl\u00e4ppt.
|
||||
jailReleasedPlayerNotify=\u00a77Du har blivit frisl\u00e4ppt!
|
||||
jailSentenceExtended=F\u00e4ngelsestraffet f\u00f6rl\u00e4ngt till: {0)
|
||||
jailSet=\u00a77F\u00e4ngelset {0} har skapats
|
||||
jumpError=Det skulle skadat din dators hj\u00e4rna.
|
||||
kickDefault=Utsparkad fr\u00e5n server
|
||||
kickExempt=\u00a7cDu kan inte sparka ut den spelaren.
|
||||
kickedAll=\u00a7cSparkade ut alla spelare fr\u00c3\u00a5n servern
|
||||
kill=\u00a77D\u00c3\u00b6dade {0}.
|
||||
kickedAll=\u00a7cSparkade ut alla spelare fr\u00e5n servern
|
||||
kill=\u00a77D\u00f6dade {0}.
|
||||
kitError2=\u00a7cDet kit:et finns inte eller har blivit felaktigt definierat.
|
||||
kitError=\u00a7cDet finns inga giltiga kit.
|
||||
kitErrorHelp=\u00a7cKanske en sak fattar m\u00c3\u00a4ngd i konfigurationen?
|
||||
kitErrorHelp=\u00a7cKanske en sak fattar m\u00e4ngd i konfigurationen?
|
||||
kitGive=\u00a77Ger kit {0}.
|
||||
kitInvFull=\u00a7cDitt F\u00c3\u00b6rr\u00c3\u00a5d var fullt, placerar kit p\u00c3\u00a5 golvet
|
||||
kitTimed=\u00a7cDu kan inte anv\u00c3\u00a4nda det kit:et igen p\u00c3\u00a5 {0}.
|
||||
kitInvFull=\u00a7cDitt F\u00f6rr\u00e5d var fullt, placerar kit p\u00e5 golvet
|
||||
kitTimed=\u00a7cDu kan inte anv\u00e4nda det kit:et igen p\u00e5 {0}.
|
||||
kits=\u00a77Kit: {0}
|
||||
lightningSmited=\u00a77Blixten har slagit ner p\u00c3\u00a5 dig
|
||||
lightningUse=\u00a77En blixt kommer sl\u00c3\u00a5 ner p\u00c3\u00a5 {0}
|
||||
lightningSmited=\u00a77Blixten har slagit ner p\u00e5 dig
|
||||
lightningUse=\u00a77En blixt kommer sl\u00e5 ner p\u00e5 {0}
|
||||
listAfkTag = \u00a77[AFK]\u00a7f
|
||||
listAmount = \u00a79Det \u00c3\u00a4r \u00a7c{0}\u00a79 av maximalt \u00a7c{1}\u00a79 spelare online.
|
||||
listAmountHidden = \u00a79Det \u00c3\u00a4r \u00a7c{0}\u00a77/{1}\u00a79 Av maximalt \u00a7c{2}\u00a79 spelare online.
|
||||
listAmount = \u00a79Det \u00e4r \u00a7c{0}\u00a79 av maximalt \u00a7c{1}\u00a79 spelare online.
|
||||
listAmountHidden = \u00a79Det \u00e4r \u00a7c{0}\u00a77/{1}\u00a79 Av maximalt \u00a7c{2}\u00a79 spelare online.
|
||||
listGroupTag={0}\u00a7f:
|
||||
listHiddenTag = \u00a77[G\u00c3\u0096MD]\u00a7f
|
||||
listHiddenTag = \u00a77[G\u00d6MD]\u00a7f
|
||||
loadWarpError=Kunde inte ladda warp {0}
|
||||
localFormat=Lokal: <{0}> {1}
|
||||
mailClear=\u00a7cF\u00c3\u00b6r att markera dina meddelanden som l\u00c3\u00a4sta, skriv /mail clear
|
||||
mailClear=\u00a7cF\u00f6r att markera dina meddelanden som l\u00e4sta, skriv /mail clear
|
||||
mailCleared=\u00a77Meddelanden rensade!
|
||||
mailSent=\u00a77Meddelandet skickad!
|
||||
markMailAsRead=\u00a7cF\u00c3\u00b6r att markera dina meddelanden som l\u00c3\u00a4sta, skriv /mail clear
|
||||
markedAsAway=\u00a77Du \u00c3\u00a4r nu markerad som borta.
|
||||
markedAsNotAway=\u00a77Du \u00c3\u00a4r inte l\u00c3\u00a4ngre markerad som borta.
|
||||
maxHomes=Du kan inte ha fler \u00c3\u00a4n {0} hem.
|
||||
mayNotJail=\u00a7cDu f\u00c3\u00a5r inte s\u00c3\u00a4tta den personen i f\u00c3\u00a4ngelse
|
||||
markMailAsRead=\u00a7cF\u00f6r att markera dina meddelanden som l\u00e4sta, skriv /mail clear
|
||||
markedAsAway=\u00a77Du \u00e4r nu markerad som borta.
|
||||
markedAsNotAway=\u00a77Du \u00e4r inte l\u00e4ngre markerad som borta.
|
||||
maxHomes=Du kan inte ha fler \u00e4n {0} hem.
|
||||
mayNotJail=\u00a7cDu f\u00e5r inte s\u00e4tta den personen i f\u00e4ngelse
|
||||
me=jag
|
||||
minute=minut
|
||||
minutes=minuter
|
||||
missingItems=Du har inte {0}x {1}.
|
||||
missingPrefixSuffix=Saknar ett prefix eller suffix f\u00c3\u00b6r {0}
|
||||
mobSpawnError=Fel n\u00c3\u00a4r mob-spawnaren f\u00c3\u00b6rs\u00c3\u00b6kte att \u00c3\u00a4ndras.
|
||||
mobSpawnLimit=M\u00c3\u00a4ngden mobs begr\u00c3\u00a4nsad till serverns maxgr\u00c3\u00a4ns
|
||||
mobSpawnTarget=M\u00c3\u00a5lblocket m\u00c3\u00a5ste vara en mob-spawnare.
|
||||
missingPrefixSuffix=Saknar ett prefix eller suffix f\u00f6r {0}
|
||||
mobSpawnError=Fel n\u00e4r mob-spawnaren f\u00f6rs\u00f6kte att \u00e4ndras.
|
||||
mobSpawnLimit=M\u00e4ngden mobs begr\u00e4nsad till serverns maxgr\u00e4ns
|
||||
mobSpawnTarget=M\u00e5lblocket m\u00e5ste vara en mob-spawnare.
|
||||
mobsAvailable=\u00a77Mobs: {0}
|
||||
moneyRecievedFrom=\u00a7a{0} har tagits emot fr\u00c3\u00a5n {1}
|
||||
moneyRecievedFrom=\u00a7a{0} har tagits emot fr\u00e5n {1}
|
||||
moneySentTo=\u00a7a{0} har skickats till {1}
|
||||
moneyTaken={0} \u00c3\u00a4r taget fr\u00c3\u00a5n ditt bankkonto.
|
||||
month=m\u00c3\u00a5nad
|
||||
months=m\u00c3\u00a5nader
|
||||
moreThanZero=M\u00c3\u00a5ngden m\u00c3\u00a5ste vara st\u00c3\u00b6rre \u00c3\u00a4n 0.
|
||||
moneyTaken={0} \u00e4r taget fr\u00e5n ditt bankkonto.
|
||||
month=m\u00e5nad
|
||||
months=m\u00e5nader
|
||||
moreThanZero=M\u00e5ngden m\u00e5ste vara st\u00f6rre \u00e4n 0.
|
||||
msgFormat=\u00a77[{0}\u00a77 -> {1}\u00a77] \u00a7f{2}
|
||||
muteExempt=\u00a7cDu kan inte tysta den spelaren.
|
||||
mutedPlayer=Spelaren {0} \u00c3\u00a4r tystad.
|
||||
mutedPlayerFor=Spelaren {0} \u00c3\u00a4r tystad i {1}.
|
||||
mutedUserSpeaks={0} f\u00c3\u00b6rs\u00c3\u00b6kte att prata, men blev tystad.
|
||||
nearbyPlayers=Spelare i n\u00c3\u00a4rheten: {0}
|
||||
negativeBalanceError=Anv\u00c3\u00a4ndaren \u00c3\u00a4r inte till\u00c3\u00a5ten att ha en negativ balans.
|
||||
nickChanged=Smeknamn \u00c3\u00a4ndrat.
|
||||
nickDisplayName=\u00a77Du m\u00c3\u00a5ste aktivera change-displayname i Essentials-konfigurationen.
|
||||
nickInUse=\u00a7cDet namnet anv\u00c3\u00a4nds redan.
|
||||
nickNamesAlpha=\u00a7cSmeknamn m\u00c3\u00a5ste vara alfanumeriska.
|
||||
nickNoMore=\u00a77Du har inte ett smeknamn l\u00c3\u00a4ngre
|
||||
nickOthersPermission=\u00a7cDu har inte tillst\u00c3\u00a5nd att \u00c3\u00a4ndra andras smeknamn
|
||||
nickSet=\u00a77Ditt smeknamn \u00c3\u00a4r nu \u00a7c{0}
|
||||
noAccessCommand=\u00a7cDu har inte tillg\u00c3\u00a5ng till det kommandot.
|
||||
noAccessPermission=\u00a7cDu har inte tillst\u00c3\u00a5nd till att komma \u00c3\u00a5t det {0}.
|
||||
noBreakBedrock=Du har inte till\u00c3\u00a5telse att f\u00c3\u00b6rst\u00c3\u00b6ra berggrund.
|
||||
noDestroyPermission=\u00a7Du har inte till\u00c3\u00a5telse att f\u00c3\u00b6rst\u00c3\u00b6ra det {0}.
|
||||
noDurability=\u00a7cDen saken har inte en h\u00c3\u00a5llbarhet.
|
||||
noGodWorldWarning=\u00a7cVarning! Od\u00c3\u00b6dlighet i den h\u00c3\u00a4r v\u00c3\u00a4rlden \u00c3\u00a4r inaktiverat.
|
||||
mutedPlayer=Spelaren {0} \u00e4r tystad.
|
||||
mutedPlayerFor=Spelaren {0} \u00e4r tystad i {1}.
|
||||
mutedUserSpeaks={0} f\u00f6rs\u00f6kte att prata, men blev tystad.
|
||||
nearbyPlayers=Spelare i n\u00e4rheten: {0}
|
||||
negativeBalanceError=Anv\u00e4ndaren \u00e4r inte till\u00e5ten att ha en negativ balans.
|
||||
nickChanged=Smeknamn \u00e4ndrat.
|
||||
nickDisplayName=\u00a77Du m\u00e5ste aktivera change-displayname i Essentials-konfigurationen.
|
||||
nickInUse=\u00a7cDet namnet anv\u00e4nds redan.
|
||||
nickNamesAlpha=\u00a7cSmeknamn m\u00e5ste vara alfanumeriska.
|
||||
nickNoMore=\u00a77Du har inte ett smeknamn l\u00e4ngre
|
||||
nickOthersPermission=\u00a7cDu har inte tillst\u00e5nd att \u00e4ndra andras smeknamn
|
||||
nickSet=\u00a77Ditt smeknamn \u00e4r nu \u00a7c{0}
|
||||
noAccessCommand=\u00a7cDu har inte tillg\u00e5ng till det kommandot.
|
||||
noAccessPermission=\u00a7cDu har inte tillst\u00e5nd till att komma \u00e5t det {0}.
|
||||
noBreakBedrock=Du har inte till\u00e5telse att f\u00f6rst\u00f6ra berggrund.
|
||||
noDestroyPermission=\u00a7Du har inte till\u00e5telse att f\u00f6rst\u00f6ra det {0}.
|
||||
noDurability=\u00a7cDen saken har inte en h\u00e5llbarhet.
|
||||
noGodWorldWarning=\u00a7cVarning! Od\u00f6dlighet i den h\u00e4r v\u00e4rlden \u00e4r inaktiverat.
|
||||
noHelpFound=\u00a7cInga matchande kommandon.
|
||||
noHomeSet=Du har inte angett ett hem.
|
||||
noHomeSetPlayer=Den h\u00c3\u00a4r spelaren har inte ett hem.
|
||||
noKitPermission=\u00a7cDu beh\u00c3\u00b6ver \u00a7c{0}\u00a7c tillst\u00c3\u00a5nd f\u00c3\u00b6r att anv\u00c3\u00a4nda det kitet.
|
||||
noKits=\u00a77Det finns inga kits tillg\u00c3\u00a4ngliga \u00c3\u00a4n
|
||||
noHomeSetPlayer=Den h\u00e4r spelaren har inte ett hem.
|
||||
noKitPermission=\u00a7cDu beh\u00f6ver \u00a7c{0}\u00a7c tillst\u00e5nd f\u00f6r att anv\u00e4nda det kitet.
|
||||
noKits=\u00a77Det finns inga kits tillg\u00e4ngliga \u00e4n
|
||||
noMail=Du har inget meddelande
|
||||
noMotd=\u00a7cDet finns inget meddelande f\u00c3\u00b6r dagen.
|
||||
noMotd=\u00a7cDet finns inget meddelande f\u00f6r dagen.
|
||||
noNewMail=\u00a77Du har inget nytt meddelande.
|
||||
noPendingRequest=Du har inga v\u00c3\u00a4ntande f\u00c3\u00b6rfr\u00c3\u00a5gan.
|
||||
noPerm=\u00a7cDu har inte \u00a7f{0}\u00a7c till\u00c3\u00a5telse.
|
||||
noPermToSpawnMob=\u00a7cDu har inte till\u00c3\u00a5telse att spawna den h\u00c3\u00a4r moben.
|
||||
noPlacePermission=\u00a7cDu har inte till\u00c3\u00a5telse att placera ett block n\u00c3\u00a4ra den skylten.
|
||||
noPendingRequest=Du har inga v\u00e4ntande f\u00f6rfr\u00e5gan.
|
||||
noPerm=\u00a7cDu har inte \u00a7f{0}\u00a7c till\u00e5telse.
|
||||
noPermToSpawnMob=\u00a7cDu har inte till\u00e5telse att spawna den h\u00e4r moben.
|
||||
noPlacePermission=\u00a7cDu har inte till\u00e5telse att placera ett block n\u00e4ra den skylten.
|
||||
noPowerTools=Du har inga power-tools tilldelade.
|
||||
noRules=\u00a7cDet finns inga specifierade regler \u00c3\u00a4n.
|
||||
noWarpsDefined=Inga warpar \u00c3\u00a4r definerade
|
||||
noRules=\u00a7cDet finns inga specifierade regler \u00e4n.
|
||||
noWarpsDefined=Inga warpar \u00e4r definerade
|
||||
none=inga
|
||||
notAllowedToQuestion=\u00a7cDu har inte tillst\u00c3\u00a5nd att anv\u00c3\u00a4nda den fr\u00c3\u00a5gan.
|
||||
notAllowedToShout=\u00a7cDu har inte tillst\u00c3\u00a5nd att ropa.
|
||||
notAllowedToQuestion=\u00a7cDu har inte tillst\u00e5nd att anv\u00e4nda den fr\u00e5gan.
|
||||
notAllowedToShout=\u00a7cDu har inte tillst\u00e5nd att ropa.
|
||||
notEnoughExperience=Du har inte nog med erfarenhet.
|
||||
notEnoughMoney=Du har inte tillr\u00c3\u00a4ckligt med pengar.
|
||||
notRecommendedBukkit= * ! * Bukkit-versionen \u00c3\u00a4r inte rekommenderad f\u00c3\u00b6r den h\u00c3\u00a4r versionen av Essentials.
|
||||
notSupportedYet=St\u00c3\u00b6ds inte \u00c3\u00a4n.
|
||||
notEnoughMoney=Du har inte tillr\u00e4ckligt med pengar.
|
||||
notRecommendedBukkit= * ! * Bukkit-versionen \u00e4r inte rekommenderad f\u00f6r den h\u00e4r versionen av Essentials.
|
||||
notSupportedYet=St\u00f6ds inte \u00e4n.
|
||||
nothingInHand = \u00a7cDu har inget i din hand.
|
||||
now=nu
|
||||
nuke=L\u00c3\u00a5t d\u00c3\u00b6d regna \u00c3\u00b6ver dem
|
||||
numberRequired=Det ska vara ett nummer d\u00c3\u00a4r, dumbom.
|
||||
onlyDayNight=/time st\u00c3\u00b6der bara day(dag) eller night(natt).
|
||||
onlyPlayers=Bara spelare som \u00c3\u00a4r online kan anv\u00c3\u00a4nda {0}.
|
||||
onlySunStorm=/weather st\u00c3\u00b6der bara sun(sol) eller storm(storm).
|
||||
orderBalances=Best\u00c3\u00a4ller balanser av {0} anv\u00c3\u00a4ndare, v\u00c3\u00a4nligen v\u00c3\u00a4nta...
|
||||
pTimeCurrent=\u00a7e{0}'*s\u00a7f klockan \u00c3\u00a4r {1}.
|
||||
pTimeCurrentFixed=\u00a7e{0}''s\u00a7f tiden \u00c3\u00a4r fixerad till {1}.
|
||||
pTimeNormal=\u00a7e{0}''s\u00a7f tiden \u00c3\u00a4r normal och matchar servern.
|
||||
pTimeOthersPermission=\u00a7cDu har inte beh\u00c3\u00b6righet att st\u00c3\u00a4lla in andra spelares tid.
|
||||
nuke=L\u00e5t d\u00f6d regna \u00f6ver dem
|
||||
numberRequired=Det ska vara ett nummer d\u00e4r, dumbom.
|
||||
onlyDayNight=/time st\u00f6der bara day(dag) eller night(natt).
|
||||
onlyPlayers=Bara spelare som \u00e4r online kan anv\u00e4nda {0}.
|
||||
onlySunStorm=/weather st\u00f6der bara sun(sol) eller storm(storm).
|
||||
orderBalances=Best\u00e4ller balanser av {0} anv\u00e4ndare, v\u00e4nligen v\u00e4nta...
|
||||
pTimeCurrent=\u00a7e{0}'*s\u00a7f klockan \u00e4r {1}.
|
||||
pTimeCurrentFixed=\u00a7e{0}''s\u00a7f tiden \u00e4r fixerad till {1}.
|
||||
pTimeNormal=\u00a7e{0}''s\u00a7f tiden \u00e4r normal och matchar servern.
|
||||
pTimeOthersPermission=\u00a7cDu har inte beh\u00f6righet att st\u00e4lla in andra spelares tid.
|
||||
pTimePlayers=Dessa spelare har sin egen tid:
|
||||
pTimeReset=Spelarens tid har blivit \u00c3\u00a5terst\u00c3\u00a4lld till: \u00a7e{0}
|
||||
pTimeSet=Spelarens tid \u00c3\u00a4r inst\u00c3\u00a4lld till \u00a73{0}\u00a7f till: \u00a7e{1}
|
||||
pTimeSetFixed=Spelarens tid \u00c3\u00a4r fixerad till \u00a73{0}\u00a7f f\u00c3\u00b6r: \u00a7e{1}
|
||||
parseError=Fel vid tolkning av {0} p\u00c3\u00a5 rad {1}
|
||||
pendingTeleportCancelled=\u00a7cAvvaktande teleporteringsbeg\u00c3\u00a4ran \u00c3\u00a4r avbruten.
|
||||
pTimeReset=Spelarens tid har blivit \u00e5terst\u00e4lld till: \u00a7e{0}
|
||||
pTimeSet=Spelarens tid \u00e4r inst\u00e4lld till \u00a73{0}\u00a7f till: \u00a7e{1}
|
||||
pTimeSetFixed=Spelarens tid \u00e4r fixerad till \u00a73{0}\u00a7f f\u00f6r: \u00a7e{1}
|
||||
parseError=Fel vid tolkning av {0} p\u00e5 rad {1}
|
||||
pendingTeleportCancelled=\u00a7cAvvaktande teleporteringsbeg\u00e4ran \u00e4r avbruten.
|
||||
permissionsError=Saknar Permissions/GroupManager; chattens prefixer/suffixer kommer vara inaktiverade.
|
||||
playerBanned=\u00a7cSpelaren {0} bannad {1} f\u00c3\u00b6r {2}
|
||||
playerInJail=\u00a7cSpelaren \u00c3\u00a4r redan i f\u00c3\u00a4ngelse {0}.
|
||||
playerJailed=\u00a77Spelaren {0} f\u00c3\u00a4ngslad.
|
||||
playerJailedFor= \u00a77Spelaren {0} f\u00c3\u00a4ngslad f\u00c3\u00b6r {1}.
|
||||
playerKicked=\u00a7cSpelaren {0} har sparkat ut {1} f\u00c3\u00b6r {2}
|
||||
playerBanned=\u00a7cSpelaren {0} bannad {1} f\u00f6r {2}
|
||||
playerInJail=\u00a7cSpelaren \u00e4r redan i f\u00e4ngelse {0}.
|
||||
playerJailed=\u00a77Spelaren {0} f\u00e4ngslad.
|
||||
playerJailedFor= \u00a77Spelaren {0} f\u00e4ngslad f\u00f6r {1}.
|
||||
playerKicked=\u00a7cSpelaren {0} har sparkat ut {1} f\u00f6r {2}
|
||||
playerMuted=\u00a77Du har blivit tystad
|
||||
playerMutedFor=\u00a77Du har blivit tystad f\u00c3\u00b6r {0}
|
||||
playerNeverOnServer=\u00a7cSpelaren {0} har aldrig varit p\u00c3\u00a5 den h\u00c3\u00a4r servern.
|
||||
playerMutedFor=\u00a77Du har blivit tystad f\u00f6r {0}
|
||||
playerNeverOnServer=\u00a7cSpelaren {0} har aldrig varit p\u00e5 den h\u00e4r servern.
|
||||
playerNotFound=\u00a7cSpelaren hittades inte.
|
||||
playerUnmuted=\u00a77Du kan nu prata
|
||||
pong=Pong!
|
||||
possibleWorlds=\u00a77M\u00c3\u00b6jliga v\u00c3\u00a4rdar \u00c3\u00a4r nummer mellan 0 och {0}.
|
||||
possibleWorlds=\u00a77M\u00f6jliga v\u00e4rdar \u00e4r nummer mellan 0 och {0}.
|
||||
powerToolAir=Kommandot kan inte tilldelas luft.
|
||||
powerToolAlreadySet=Kommandot \u00a7c{0}\u00a7f \u00c3\u00a4r redan tilldelat {1}.
|
||||
powerToolAlreadySet=Kommandot \u00a7c{0}\u00a7f \u00e4r redan tilldelat {1}.
|
||||
powerToolAttach=\u00a7c{0}\u00a7f kommandot tilldelat {1}.
|
||||
powerToolClearAll=Alla powertool-kommandon har blivit rensade.
|
||||
powerToolList={1} har f\u00c3\u00b6ljane kommandon: \u00a7c{0}\u00a7f.
|
||||
powerToolList={1} har f\u00f6ljane kommandon: \u00a7c{0}\u00a7f.
|
||||
powerToolListEmpty={0} har inga kommandon tilldelade.
|
||||
powerToolNoSuchCommandAssigned=Kommandot \u00a7c{0}\u00a7f har inte blivit tilldelat {1}.
|
||||
powerToolRemove=Kommandot \u00a7c{0}\u00a7f \u00c3\u00a4r borttaget fr\u00c3\u00a5n {1}.
|
||||
powerToolRemoveAll=Alla kommandon \u00c3\u00a4r borttagna fr\u00c3\u00a5n {0}.
|
||||
powerToolRemove=Kommandot \u00a7c{0}\u00a7f \u00e4r borttaget fr\u00e5n {1}.
|
||||
powerToolRemoveAll=Alla kommandon \u00e4r borttagna fr\u00e5n {0}.
|
||||
powerToolsDisabled=Alla dina powertools har blivit inaktiverade.
|
||||
powerToolsEnabled=Alla dina powertools har blivit aktiverade.
|
||||
protectionOwner=\u00a76[EssentialsProtect] Skydds\u00c3\u00a4gare: {0}
|
||||
questionFormat=\u00a77[Fr\u00c3\u00a5ga]\u00a7f {0}
|
||||
readNextPage=Skriv /{0} {1} f\u00c3\u00b6r att l\u00c3\u00a4sa n\u00c3\u00a4sta sida
|
||||
protectionOwner=\u00a76[EssentialsProtect] Skydds\u00e4gare: {0}
|
||||
questionFormat=\u00a77[Fr\u00e5ga]\u00a7f {0}
|
||||
readNextPage=Skriv /{0} {1} f\u00f6r att l\u00e4sa n\u00e4sta sida
|
||||
reloadAllPlugins=\u00a77Laddade om alla insticksprogram.
|
||||
removed=\u00a77Tog bort {0} enheter.
|
||||
repair=Du har reparerat din: \u00a7e{0}.
|
||||
repairAlreadyFixed=\u00a77Den h\u00c3\u00a4r saken beh\u00c3\u00b6ver inte repareras.
|
||||
repairEnchanted=\u00a77Du har inte beh\u00c3\u00b6righet att reparera f\u00c3\u00b6rtrollade saker.
|
||||
repairInvalidType=\u00a7cDen h\u00c3\u00a4r saken kan inte bli reparerad.
|
||||
repairNone=Det var inga saker som beh\u00c3\u00b6ver repareras.
|
||||
requestAccepted=\u00a77Teleporterings-f\u00c3\u00b6rfr\u00c3\u00a5gan accepterad.
|
||||
requestAcceptedFrom=\u00a77{0} accepterade din teleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan.
|
||||
requestDenied=\u00a77Teleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan nekad.
|
||||
requestDeniedFrom=\u00a77{0} nekade din teleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan.
|
||||
requestSent=\u00a77F\u00c3\u00b6rfr\u00c3\u00a5gan skickad till {0}\u00a77.
|
||||
requestTimedOut=\u00a7cTeleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan har g\u00c3\u00a5tt ut
|
||||
requiredBukkit= * ! * Du beh\u00c3\u00b6ver minst bygge {0} av CraftBukkit, ladda ner den fr\u00c3\u00a5n http://dl.bukkit.org/downloads/craftbukkit/
|
||||
returnPlayerToJailError=Ett fel uppstod n\u00c3\u00a4r spelaren {0} skulle \u00c3\u00a5terv\u00c3\u00a4nda till f\u00c3\u00a4ngelset: {1}
|
||||
repairAlreadyFixed=\u00a77Den h\u00e4r saken beh\u00f6ver inte repareras.
|
||||
repairEnchanted=\u00a77Du har inte beh\u00f6righet att reparera f\u00f6rtrollade saker.
|
||||
repairInvalidType=\u00a7cDen h\u00e4r saken kan inte bli reparerad.
|
||||
repairNone=Det var inga saker som beh\u00f6ver repareras.
|
||||
requestAccepted=\u00a77Teleporterings-f\u00f6rfr\u00e5gan accepterad.
|
||||
requestAcceptedFrom=\u00a77{0} accepterade din teleportations-f\u00f6rfr\u00e5gan.
|
||||
requestDenied=\u00a77Teleportations-f\u00f6rfr\u00e5gan nekad.
|
||||
requestDeniedFrom=\u00a77{0} nekade din teleportations-f\u00f6rfr\u00e5gan.
|
||||
requestSent=\u00a77F\u00f6rfr\u00e5gan skickad till {0}\u00a77.
|
||||
requestTimedOut=\u00a7cTeleportations-f\u00f6rfr\u00e5gan har g\u00e5tt ut
|
||||
requiredBukkit= * ! * Du beh\u00f6ver minst bygge {0} av CraftBukkit, ladda ner den fr\u00e5n http://dl.bukkit.org/downloads/craftbukkit/
|
||||
returnPlayerToJailError=Ett fel uppstod n\u00e4r spelaren {0} skulle \u00e5terv\u00e4nda till f\u00e4ngelset: {1}
|
||||
second=sekund
|
||||
seconds=sekunder
|
||||
seenOffline=Spelaren {0} \u00c3\u00a4r offline sedan {1}
|
||||
seenOnline=Spelaren {0} \u00c3\u00a4r online sedan {1}
|
||||
serverFull=Servern \u00c3\u00a4r full
|
||||
serverTotal=Totalt p\u00c3\u00a5 servern: {0}
|
||||
seenOffline=Spelaren {0} \u00e4r offline sedan {1}
|
||||
seenOnline=Spelaren {0} \u00e4r online sedan {1}
|
||||
serverFull=Servern \u00e4r full
|
||||
serverTotal=Totalt p\u00e5 servern: {0}
|
||||
setSpawner=Bytte typen av spawnare till {0}
|
||||
sheepMalformedColor=Felformulerad f\u00c3\u00a4rg.
|
||||
sheepMalformedColor=Felformulerad f\u00e4rg.
|
||||
shoutFormat=\u00a77[Hojtning]\u00a7f {0}
|
||||
signFormatFail=\u00a74[{0}]
|
||||
signFormatSuccess=\u00a71[{0}]
|
||||
signFormatTemplate=[{0}]
|
||||
signProtectInvalidLocation=\u00a74Du har inte till\u00c3\u00a5telse att g\u00c3\u00b6ra skyltar h\u00c3\u00a4r.
|
||||
signProtectInvalidLocation=\u00a74Du har inte till\u00e5telse att g\u00f6ra skyltar h\u00e4r.
|
||||
similarWarpExist=En warp med ett liknande namn finns redan.
|
||||
slimeMalformedSize=Felformulerad storlek.
|
||||
soloMob=Det h\u00c3\u00a4r monstret gillar att vara ensam
|
||||
spawnSet=\u00a77Spawnpunkten inst\u00c3\u00a4lld f\u00c3\u00b6r gruppen {0}.
|
||||
soloMob=Det h\u00e4r monstret gillar att vara ensam
|
||||
spawnSet=\u00a77Spawnpunkten inst\u00e4lld f\u00f6r gruppen {0}.
|
||||
spawned=spawnade
|
||||
sudoExempt=Du kan inte g\u00c3\u00b6ra en sudo p\u00c3\u00a5 den h\u00c3\u00a4r anv\u00c3\u00a4ndaren
|
||||
sudoExempt=Du kan inte g\u00f6ra en sudo p\u00e5 den h\u00e4r anv\u00e4ndaren
|
||||
sudoRun=Tvingar {0} att springa: /{1} {2}
|
||||
suicideMessage=\u00a77Adj\u00c3\u00b6 grymma v\u00c3\u00a4rld...
|
||||
suicideMessage=\u00a77Adj\u00f6 grymma v\u00e4rld...
|
||||
suicideSuccess= \u00a77{0} tog sitt eget liv
|
||||
survival=\u00c3\u00b6verlevnad
|
||||
takenFromAccount=\u00a7c{0} har tagits fr\u00c3\u00a5n ditt konto.
|
||||
takenFromOthersAccount=\u00a7c{0} taget fr\u00c3\u00a5n {1}\u00a7c konto. Ny balans: {2}
|
||||
teleportAAll=\u00a77Teleportations-f\u00c3\u00b6rfr\u00c3\u00a5gan skickad till alla spelare...
|
||||
survival=\u00f6verlevnad
|
||||
takenFromAccount=\u00a7c{0} har tagits fr\u00e5n ditt konto.
|
||||
takenFromOthersAccount=\u00a7c{0} taget fr\u00e5n {1}\u00a7c konto. Ny balans: {2}
|
||||
teleportAAll=\u00a77Teleportations-f\u00f6rfr\u00e5gan skickad till alla spelare...
|
||||
teleportAll=\u00a77Teleporterar alla spelare...
|
||||
teleportAtoB=\u00a77{0}\u00a77 teleporterade dig till {1}\u00a77.
|
||||
teleportDisabled={0} har teleportering inaktiverat.
|
||||
teleportHereRequest=\u00a7c{0}\u00a7c har fr\u00c3\u00a5gat dig om du vill teleportera till dem.
|
||||
teleportHereRequest=\u00a7c{0}\u00a7c har fr\u00e5gat dig om du vill teleportera till dem.
|
||||
teleportNewPlayerError=Messlyckades med att teleportera ny spelare
|
||||
teleportRequest=\u00a7c{0}\u00a7c har beg\u00c3\u00a4rt att f\u00c3\u00a5 teleportera sig till dig.
|
||||
teleportRequestTimeoutInfo=\u00a77Den h\u00c3\u00a4r beg\u00c3\u00a4ran kommer att g\u00c3\u00a5 ut efter {0} sekunder.
|
||||
teleportRequest=\u00a7c{0}\u00a7c har beg\u00e4rt att f\u00e5 teleportera sig till dig.
|
||||
teleportRequestTimeoutInfo=\u00a77Den h\u00e4r beg\u00e4ran kommer att g\u00e5 ut efter {0} sekunder.
|
||||
teleportTop=\u00a77Teleporterar till toppen.
|
||||
teleportationCommencing=\u00a77Teleporteringen p\u00c3\u00a5b\u00c3\u00b6rjas...
|
||||
teleportationCommencing=\u00a77Teleporteringen p\u00e5b\u00f6rjas...
|
||||
teleportationDisabled=\u00a77Teleportering inaktiverat.
|
||||
teleportationEnabled=\u00a77Teleportering aktiverat.
|
||||
teleporting=\u00a77Teleporterar...
|
||||
teleportingPortal=\u00a77Teleporterar via portal.
|
||||
tempBanned=Tempor\u00c3\u00a4rt bannad fr\u00c3\u00a5n servern f\u00c3\u00b6r {0}
|
||||
tempbanExempt=\u00a77Du kan inte tempor\u00c3\u00a4rt banna den spelaren
|
||||
thunder= Du {0} \u00c3\u00a5ska i din v\u00c3\u00a4rld
|
||||
thunderDuration=Du {0} i din v\u00c3\u00a4rld i {1} sekunder.
|
||||
timeBeforeHeal=Tid f\u00c3\u00b6re n\u00c3\u00a4ste l\u00c3\u00a4kning: {0}
|
||||
timeBeforeTeleport=Tid f\u00c3\u00b6re n\u00c3\u00a4sta teleportering: {0}
|
||||
tempBanned=Tempor\u00e4rt bannad fr\u00e5n servern f\u00f6r {0}
|
||||
tempbanExempt=\u00a77Du kan inte tempor\u00e4rt banna den spelaren
|
||||
thunder= Du {0} \u00e5ska i din v\u00e4rld
|
||||
thunderDuration=Du {0} i din v\u00e4rld i {1} sekunder.
|
||||
timeBeforeHeal=Tid f\u00f6re n\u00e4ste l\u00e4kning: {0}
|
||||
timeBeforeTeleport=Tid f\u00f6re n\u00e4sta teleportering: {0}
|
||||
timeFormat=\u00a73{0}\u00a7f eller \u00a73{1}\u00a7f eller \u00a73{2}\u00a7f
|
||||
timePattern=(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?(?:([0-9]+)\\s*(?:s[a-z]*)?)?
|
||||
timeSet=Tid inst\u00c3\u00a4lld i alla v\u00c3\u00a4rldar.
|
||||
timeSetPermission=\u00a7cDu har inte tillst\u00c3\u00a5nd att st\u00c3\u00a4lla in tiden.
|
||||
timeWorldCurrent=Den nuvarande tiden i {0} \u00c3\u00a4r \u00a73{1}
|
||||
timeWorldSet=Tiden \u00c3\u00a4r nu {0} i: \u00a7c{1}
|
||||
timeSet=Tid inst\u00e4lld i alla v\u00e4rldar.
|
||||
timeSetPermission=\u00a7cDu har inte tillst\u00e5nd att st\u00e4lla in tiden.
|
||||
timeWorldCurrent=Den nuvarande tiden i {0} \u00e4r \u00a73{1}
|
||||
timeWorldSet=Tiden \u00e4r nu {0} i: \u00a7c{1}
|
||||
tps=Nuvarande TPS = {0}
|
||||
tradeCompleted=\u00a77K\u00c3\u00b6p avslutat.
|
||||
tradeSignEmpty=K\u00c3\u00b6pskylten har inget tillg\u00c3\u00a4ngligt f\u00c3\u00b6r dig.
|
||||
tradeSignEmptyOwner=Det finns inget att fr\u00c3\u00a5n den h\u00c3\u00a4r k\u00c3\u00b6pskylten.
|
||||
treeFailure=\u00a7cTr\u00c3\u00a4dgenereringn misslyckades. Prova igen p\u00c3\u00a5 gr\u00c3\u00a4s eller jord.
|
||||
treeSpawned=\u00a77Tr\u00c3\u00a4d genererat.
|
||||
tradeCompleted=\u00a77K\u00f6p avslutat.
|
||||
tradeSignEmpty=K\u00f6pskylten har inget tillg\u00e4ngligt f\u00f6r dig.
|
||||
tradeSignEmptyOwner=Det finns inget att fr\u00e5n den h\u00e4r k\u00f6pskylten.
|
||||
treeFailure=\u00a7cTr\u00e4dgenereringn misslyckades. Prova igen p\u00e5 gr\u00e4s eller jord.
|
||||
treeSpawned=\u00a77Tr\u00e4d genererat.
|
||||
true=sant
|
||||
typeTpaccept=\u00a77F\u00c3\u00b6r att teleportera, skriv \u00a7c/tpaccept\u00a77.
|
||||
typeTpdeny=\u00a77F\u00c3\u00b6r att neka denna f\u00c3\u00b6rfr\u00c3\u00a5gan, skriv \u00a7c/tpdeny\u00a77.
|
||||
typeWorldName=\u00a77Du kan ocks\u00c3\u00a5 skriva namnet av en specifik v\u00c3\u00a4rld.
|
||||
typeTpaccept=\u00a77F\u00f6r att teleportera, skriv \u00a7c/tpaccept\u00a77.
|
||||
typeTpdeny=\u00a77F\u00f6r att neka denna f\u00f6rfr\u00e5gan, skriv \u00a7c/tpdeny\u00a77.
|
||||
typeWorldName=\u00a77Du kan ocks\u00e5 skriva namnet av en specifik v\u00e4rld.
|
||||
unableToSpawnMob=Kunde inte spawna moben.
|
||||
unbannedIP=Tog bort bannlysningen fr\u00c3\u00a5n IP-adress.
|
||||
unbannedPlayer=Tog bort bannlysningen fr\u00c3\u00a5n spelaren.
|
||||
unignorePlayer=Du ignorerar inte spelaren {0} l\u00c3\u00a4ngre.
|
||||
unknownItemId=Ok\u00c3\u00a4nt objekt-ID: {0}
|
||||
unknownItemInList=Ok\u00c3\u00a4nt objekt {0} i listan {1}.
|
||||
unknownItemName=Ok\u00c3\u00a4nt objektnamn: {0}
|
||||
unlimitedItemPermission=\u00a7cInget tillst\u00c3\u00a5nd f\u00c3\u00b6r obegr\u00c3\u00a4nsad tillg\u00c3\u00a5ng av {0}.
|
||||
unlimitedItems=Obegr\u00c3\u00a4nsade objekt:
|
||||
unmutedPlayer=Spelaren {0} \u00c3\u00a4r inte bannlyst l\u00c3\u00a4ngre.
|
||||
unvanished=\u00a7aDu \u00c3\u00a4r synlig igen.
|
||||
unbannedIP=Tog bort bannlysningen fr\u00e5n IP-adress.
|
||||
unbannedPlayer=Tog bort bannlysningen fr\u00e5n spelaren.
|
||||
unignorePlayer=Du ignorerar inte spelaren {0} l\u00e4ngre.
|
||||
unknownItemId=Ok\u00e4nt objekt-ID: {0}
|
||||
unknownItemInList=Ok\u00e4nt objekt {0} i listan {1}.
|
||||
unknownItemName=Ok\u00e4nt objektnamn: {0}
|
||||
unlimitedItemPermission=\u00a7cInget tillst\u00e5nd f\u00f6r obegr\u00e4nsad tillg\u00e5ng av {0}.
|
||||
unlimitedItems=Obegr\u00e4nsade objekt:
|
||||
unmutedPlayer=Spelaren {0} \u00e4r inte bannlyst l\u00e4ngre.
|
||||
unvanished=\u00a7aDu \u00e4r synlig igen.
|
||||
unvanishedReload=\u00a7cEn omladdning har tvingat dig att bli synlig.
|
||||
upgradingFilesError=Fel vid uppgradering av filerna
|
||||
userDoesNotExist=Anv\u00c3\u00a4ndaren {0} existerar inte.
|
||||
userIsAway={0} \u00c3\u00a4r nu AFK
|
||||
userIsNotAway={0} \u00c3\u00a4r inte l\u00c3\u00a4ngre AFK
|
||||
userJailed=\u00a77Du har blivit f\u00c3\u00a4ngslad
|
||||
userUsedPortal={0} anv\u00c3\u00a4nde en existerande utg\u00c3\u00a5ngsportal.
|
||||
userDoesNotExist=Anv\u00e4ndaren {0} existerar inte.
|
||||
userIsAway={0} \u00e4r nu AFK
|
||||
userIsNotAway={0} \u00e4r inte l\u00e4ngre AFK
|
||||
userJailed=\u00a77Du har blivit f\u00e4ngslad
|
||||
userUsedPortal={0} anv\u00e4nde en existerande utg\u00e5ngsportal.
|
||||
userdataMoveBackError=Kunde inte flytta userdata/{0}.tmp till userdata/{1}
|
||||
userdataMoveError=Kunde inte flytta userdata/{0} till userdata/{1}.tmp
|
||||
usingTempFolderForTesting=Anv\u00c3\u00a4nder tempor\u00c3\u00a4r mapp mapp f\u00c3\u00b6r testning:
|
||||
vanished=\u00a7aDu \u00c3\u00a4r nu osynlig.
|
||||
versionMismatch=Versionerna matchar inte! V\u00c3\u00a4nligen uppgradera {0} till samma version.
|
||||
versionMismatchAll=Versionerna matchar inte! V\u00c3\u00a4nligen uppgradera alla Essentials jars till samma version.
|
||||
voiceSilenced=\u00a77Din r\u00c3\u00b6st har tystats
|
||||
usingTempFolderForTesting=Anv\u00e4nder tempor\u00e4r mapp mapp f\u00f6r testning:
|
||||
vanished=\u00a7aDu \u00e4r nu osynlig.
|
||||
versionMismatch=Versionerna matchar inte! V\u00e4nligen uppgradera {0} till samma version.
|
||||
versionMismatchAll=Versionerna matchar inte! V\u00e4nligen uppgradera alla Essentials jars till samma version.
|
||||
voiceSilenced=\u00a77Din r\u00f6st har tystats
|
||||
warpDeleteError=Problem med att ta bort warp-filen.
|
||||
warpListPermission=\u00a7cDu har inte tillst\u00c3\u00a5nd att lista warparna.
|
||||
warpListPermission=\u00a7cDu har inte tillst\u00e5nd att lista warparna.
|
||||
warpNotExist=Den warpen finns inte.
|
||||
warpOverwrite=\u00a7cDu kan inte skriva \u00c3\u00b6ver den warpen.
|
||||
warpSet=\u00a77Warpen {0} inst\u00c3\u00a4lld.
|
||||
warpUsePermission=\u00a7cDU har inte tillst\u00c3\u00a5nd att anv\u00c3\u00a4nda den warpen.
|
||||
warpOverwrite=\u00a7cDu kan inte skriva \u00f6ver den warpen.
|
||||
warpSet=\u00a77Warpen {0} inst\u00e4lld.
|
||||
warpUsePermission=\u00a7cDU har inte tillst\u00e5nd att anv\u00e4nda den warpen.
|
||||
warpingTo=\u00a77Warpar till {0}.
|
||||
warps=Warpar: {0}
|
||||
warpsCount=\u00a77Det finns {0} warpar. Visar sida {1} av {2}.
|
||||
weatherStorm=\u00a77Du har st\u00c3\u00a4llt in v\u00c3\u00a4dret till storm i {0}
|
||||
weatherStormFor=\u00a77Du har st\u00c3\u00a4llt in v\u00c3\u00a4dret till storm i {0} f\u00c3\u00b6r {1} sekunder
|
||||
weatherSun=\u00a77Du har st\u00c3\u00a4llt in v\u00c3\u00a4dret till sol i {0}
|
||||
weatherSunFor=\u00a77Du har st\u00c3\u00a4llt in v\u00c3\u00a4dret till sol i {0} f\u00c3\u00b6r {1} sekunder
|
||||
weatherStorm=\u00a77Du har st\u00e4llt in v\u00e4dret till storm i {0}
|
||||
weatherStormFor=\u00a77Du har st\u00e4llt in v\u00e4dret till storm i {0} f\u00f6r {1} sekunder
|
||||
weatherSun=\u00a77Du har st\u00e4llt in v\u00e4dret till sol i {0}
|
||||
weatherSunFor=\u00a77Du har st\u00e4llt in v\u00e4dret till sol i {0} f\u00f6r {1} sekunder
|
||||
whoisBanned=\u00a79 - Bannade spelare: {0}
|
||||
whoisExp=\u00a79 - Erfarenhet: {0} (Niv\u00c3\u00a5 {1})
|
||||
whoisGamemode=\u00a79 - Spell\u00c3\u00a4ge: {0}
|
||||
whoisExp=\u00a79 - Erfarenhet: {0} (Niv\u00e5 {1})
|
||||
whoisGamemode=\u00a79 - Spell\u00e4ge: {0}
|
||||
whoisGeoLocation=\u00a79 - Plats: {0}
|
||||
whoisGod=\u00a79 - Od\u00c3\u00b6dlighet: {0}
|
||||
whoisHealth=\u00a79 - H\u00c3\u00a4lsa: {0}/20
|
||||
whoisGod=\u00a79 - Od\u00f6dlighet: {0}
|
||||
whoisHealth=\u00a79 - H\u00e4lsa: {0}/20
|
||||
whoisIPAddress=\u00a79 - IP-Adress: {0}
|
||||
whoisIs={0} \u00c3\u00a4r {1}
|
||||
whoisJail=\u00a79 - F\u00c3\u00a4ngelse: {0}
|
||||
whoisIs={0} \u00e4r {1}
|
||||
whoisJail=\u00a79 - F\u00e4ngelse: {0}
|
||||
whoisLocation=\u00a79 - Plats: ({0}, {1}, {2}, {3})
|
||||
whoisMoney=\u00a79 - Pengar: {0}
|
||||
whoisOP=\u00a79 - Operat\u00c3\u00b6rer: {0}
|
||||
whoisStatusAvailable=\u00a79 - Status: Tillg\u00c3\u00a4nglig
|
||||
whoisOP=\u00a79 - Operat\u00f6rer: {0}
|
||||
whoisStatusAvailable=\u00a79 - Status: Tillg\u00e4nglig
|
||||
whoisStatusAway=\u00a79 - Status: \u00a7cBorta\u00a7f
|
||||
worth=\u00a77Stapeln med {0} ({2} objekt) \u00c3\u00a4r v\u00c3\u00a4rd \u00a7c{1}\u00a77 ({3} styck)
|
||||
worthMeta=\u00a77Stapeln med {0} av typ {1} ({3} objekt) \u00c3\u00a4r v\u00c3\u00a4rd \u00a7c{2}\u00a77 ({4} styck)
|
||||
worthSet=V\u00c3\u00a4rdet inst\u00c3\u00a4llt
|
||||
year=\u00c3\u00a5r
|
||||
years=\u00c3\u00a5r
|
||||
youAreHealed=\u00a77Du har blivit l\u00c3\u00a4kt.
|
||||
youHaveNewMail=\u00a7cDu har {0} meddelanden!\u00a7f Skriv \u00a77/mail read\u00a7f f\u00c3\u00b6r att l\u00c3\u00a4sa dina meddelanden.
|
||||
worth=\u00a77Stapeln med {0} ({2} objekt) \u00e4r v\u00e4rd \u00a7c{1}\u00a77 ({3} styck)
|
||||
worthMeta=\u00a77Stapeln med {0} av typ {1} ({3} objekt) \u00e4r v\u00e4rd \u00a7c{2}\u00a77 ({4} styck)
|
||||
worthSet=V\u00e4rdet inst\u00e4llt
|
||||
year=\u00e5r
|
||||
years=\u00e5r
|
||||
youAreHealed=\u00a77Du har blivit l\u00e4kt.
|
||||
youHaveNewMail=\u00a7cDu har {0} meddelanden!\u00a7f Skriv \u00a77/mail read\u00a7f f\u00f6r att l\u00e4sa dina meddelanden.
|
@ -118,7 +118,7 @@ commands:
|
||||
gamemode:
|
||||
description: Change player gamemode.
|
||||
usage: /<command> <survival|creative|adventure> [player]
|
||||
aliases: [gm,creative,creativemode,egamemode,ecreative,ecreativemode,egm]
|
||||
aliases: [gm,creative,creativemode,survival,survivalmode,adventure,adventuremode,gmc,gma,gms,egamemod,eecreative,ecreativemode,esurvival,esurvivalmode,eadventure,eadventuremode,egmc,egma,egms,egm]
|
||||
getpos:
|
||||
description: Get your current coordinates or those of a player.
|
||||
usage: /<command> [player]
|
||||
@ -423,7 +423,7 @@ commands:
|
||||
usage: /<command> <pagenumber|warp> [player]
|
||||
aliases: [ewarp,warps,ewarps]
|
||||
weather:
|
||||
description: Setting the weather.
|
||||
description: Sets the weather.
|
||||
usage: /<command> <storm/sun> [duration]
|
||||
aliases: [sky,sun,storm,eweather,rain,erain,esky,esun,estorm]
|
||||
whois:
|
||||
|
@ -1,199 +1,167 @@
|
||||
worth:
|
||||
stonebutton:
|
||||
'0': 7.0
|
||||
wood: 1.0
|
||||
arrow: 10.0
|
||||
diamondpickaxe: 1000.0
|
||||
rawfish: 5.0
|
||||
minecart: 20.0
|
||||
leatherchestplate: 40.0
|
||||
storageminecart: 35.0
|
||||
leaves:
|
||||
'0': 0.0
|
||||
feather: 3.0
|
||||
goldchestplate: 600.0
|
||||
mushroomsoup: 30.0
|
||||
bread: 20.0
|
||||
stationarywater:
|
||||
'0': 1.0
|
||||
workbench: 20.0
|
||||
stonehoe: 40.0
|
||||
brownmushroom: 2.0
|
||||
wool:
|
||||
'0': 8.0
|
||||
mossycobblestone: 90.0
|
||||
diamondhoe: 600.0
|
||||
woodsword: 10.0
|
||||
torch:
|
||||
'0': 1.0
|
||||
grass: 1.0
|
||||
poweredminecart: 30.0
|
||||
snowball: 1.0
|
||||
goldenapple: 500.0
|
||||
leatherleggings: 20.0
|
||||
log:
|
||||
'0': 2.0
|
||||
diamondaxe: 1000.0
|
||||
slimeball: 50.0
|
||||
fence: 10.0
|
||||
stonespade: 40.0
|
||||
claybrick: 10.0
|
||||
noteblock: 40.0
|
||||
ironaxe: 60.0
|
||||
coalore: 15.0
|
||||
clayball: 8.0
|
||||
fishingrod: 25.0
|
||||
ironhoe: 60.0
|
||||
goldrecord: 950.0
|
||||
ironpickaxe: 80.0
|
||||
irondoor: 35.0
|
||||
bucket: 10.0
|
||||
redrose: 2.0
|
||||
grilledpork: 6.0
|
||||
gravel: 1.0
|
||||
wooddoor: 30.0
|
||||
chainmailhelmet: 40.0
|
||||
ironchestplate: 300.0
|
||||
diamondblock: 1500.0
|
||||
diamondhelmet: 1500.0
|
||||
goldhelmet: 300.0
|
||||
redstonetorchon:
|
||||
'0': 10.0
|
||||
ironspade: 40.0
|
||||
furnace:
|
||||
'0': 10.0
|
||||
ironsword: 60.0
|
||||
dispenser:
|
||||
'0': 9.0
|
||||
woodaxe: 10.0
|
||||
seeds: 5.0
|
||||
painting: 50.0
|
||||
woodplate:
|
||||
'0': 10.0
|
||||
redstoneore: 30.0
|
||||
diamondspade: 350.0
|
||||
waterbucket: 10.0
|
||||
water:
|
||||
'0': 1.0
|
||||
bedrock: 1000.0
|
||||
irondoorblock:
|
||||
'0': 15.0
|
||||
goldhoe: 200.0
|
||||
sand: 1.0
|
||||
goldsword: 200.0
|
||||
stoneaxe: 40.0
|
||||
bookshelf: 20.0
|
||||
ironblock: 160.0
|
||||
jackolantern:
|
||||
'0': 60.0
|
||||
boat: 5.0
|
||||
diamondchestplate: 3000.0
|
||||
redstonewire:
|
||||
'0': 7.0
|
||||
redmushroom: 2.0
|
||||
string: 5.0
|
||||
stoneplate:
|
||||
'0': 10.0
|
||||
wallsign:
|
||||
'0': 1.0
|
||||
cactus:
|
||||
'0': 10.0
|
||||
sulphur: 19.0
|
||||
rails:
|
||||
'0': 40.0
|
||||
ironore: 18.0
|
||||
leatherhelmet: 20.0
|
||||
stone: 2.0
|
||||
egg: 1.0
|
||||
diamondore: 200.0
|
||||
woodhoe: 10.0
|
||||
goldleggings: 400.0
|
||||
chainmailleggings: 50.0
|
||||
yellowflower: 2.0
|
||||
ironhelmet: 120.0
|
||||
obsidian: 130.0
|
||||
dirt: 1.0
|
||||
leather: 10.0
|
||||
leatherboots: 17.0
|
||||
lever:
|
||||
'0': 7.0
|
||||
cobblestone: 1.0
|
||||
cake: 100.0
|
||||
woodstairs:
|
||||
'0': 8.0
|
||||
ironingot: 20.0
|
||||
goldore: 45.0
|
||||
pumpkin:
|
||||
'0': 50.0
|
||||
bed: 25.0
|
||||
watch: 100.0
|
||||
ironleggings: 250.0
|
||||
sign: 10.0
|
||||
doublestep:
|
||||
'0': 3.0
|
||||
woodpickaxe: 10.0
|
||||
stonepickaxe: 40.0
|
||||
chainmailboots: 30.0
|
||||
diamondleggings: 2200.0
|
||||
cookedfish: 20.0
|
||||
saddle: 100.0
|
||||
cobblestonestairs:
|
||||
'0': 22.0
|
||||
tnt: 10000.0
|
||||
glowingredstoneore: 30.0
|
||||
apple: 10.0
|
||||
woodspade: 10.0
|
||||
goldingot: 50.0
|
||||
diode: 10.0
|
||||
soil:
|
||||
'0': 3.0
|
||||
clay: 3.0
|
||||
goldblock: 400.0
|
||||
stick: 1.0
|
||||
paper: 30.0
|
||||
brick: 40.0
|
||||
stationarylava:
|
||||
'0': 1.0
|
||||
chest: 15.0
|
||||
sandstone: 5.0
|
||||
goldpickaxe: 300.0
|
||||
compass: 50.0
|
||||
sugarcane: 10.0
|
||||
diamondsword: 700.0
|
||||
goldboots: 250.0
|
||||
sponge: 80.0
|
||||
stonesword: 40.0
|
||||
coal:
|
||||
'0': 3.0
|
||||
goldaxe: 300.0
|
||||
bone: 10.0
|
||||
diamond: 230.0
|
||||
glass: 10.0
|
||||
goldspade: 220.0
|
||||
lapisblock: 500.0
|
||||
lavabucket: 30.0
|
||||
wheat: 9.0
|
||||
ladder:
|
||||
'0': 10.0
|
||||
sugarcaneblock:
|
||||
'0': 15.0
|
||||
bowl: 6.0
|
||||
chainmailchestplate: 40.0
|
||||
sapling:
|
||||
'0': 2.0
|
||||
diamondboots: 1500.0
|
||||
lapisore: 100.0
|
||||
lava:
|
||||
'0': 1.0
|
||||
milkbucket: 15.0
|
||||
redstone: 1.0
|
||||
greenrecord: 1000.0
|
||||
inksack:
|
||||
'0': 10.0
|
||||
glowstonedust: 11.0
|
||||
book: 35.0
|
||||
bow: 75.0
|
||||
ironboots: 50.0
|
||||
step:
|
||||
'0': 3.0
|
||||
sugar: 5.0
|
||||
stonebutton: 6.0
|
||||
wood: 0.50
|
||||
arrow: 3.50
|
||||
diamondpickaxe: 650.0
|
||||
rawfish: 5.0
|
||||
minecart: 23.0
|
||||
leatherchestplate: 85.0
|
||||
storageminecart: 30.0
|
||||
leaves: 1.0
|
||||
feather: 3.0
|
||||
goldchestplate: 6.5
|
||||
mushroomsoup: 4.5
|
||||
bread: 30.0
|
||||
stationarywater: 1.0
|
||||
workbench: 2.5
|
||||
stonehoe: 2.5
|
||||
brownmushroom: 2.0
|
||||
wool: 20.0
|
||||
mossycobblestone: 90.0
|
||||
diamondhoe: 400.0
|
||||
woodsword: 1.0
|
||||
torch: 4.0
|
||||
grass: 1.0
|
||||
poweredminecart: 32.0
|
||||
snowball: 1.0
|
||||
goldenapple: 100.0
|
||||
leatherleggings: 75.0
|
||||
log: 2.0
|
||||
diamondaxe: 650.0
|
||||
slimeball: 50.0
|
||||
fence: 1.0
|
||||
stonespade: 1.5
|
||||
claybrick: 5.0
|
||||
noteblock: 36.0
|
||||
ironaxe: 22.0
|
||||
coalore: 15.0
|
||||
clayball: 3.0
|
||||
fishingrod: 10.0
|
||||
ironhoe: 22.0
|
||||
goldrecord: 100.0
|
||||
ironpickaxe: 22.0
|
||||
irondoor: 22.0
|
||||
bucket: 22.0
|
||||
redrose: 2.0
|
||||
grilledpork: 7.0
|
||||
gravel: 1.0
|
||||
wooddoor: 3.0
|
||||
chainmailhelmet: 40.0
|
||||
ironchestplate: 22.0
|
||||
diamondblock: 2000.0
|
||||
diamondhelmet: 1000.0
|
||||
goldhelmet: 6.0
|
||||
redstonetorchon: 32.0
|
||||
ironspade: 22.0
|
||||
furnace: 8.5
|
||||
ironsword: 22.0
|
||||
dispenser: 58.0
|
||||
woodaxe: 2.0
|
||||
seeds: 2.0
|
||||
painting: 25.0
|
||||
woodplate: 1.0
|
||||
redstoneore: 30.0
|
||||
diamondspade: 210.0
|
||||
waterbucket: 40.0
|
||||
water: 1.0
|
||||
bedrock: 100.0
|
||||
irondoorblock: 15.0
|
||||
goldhoe: 6.0
|
||||
sand: 1.0
|
||||
goldsword: 6.0
|
||||
stoneaxe: 3.0
|
||||
bookshelf: 140.0
|
||||
ironblock: 190.0
|
||||
jackolantern: 56.0
|
||||
boat: 3.0
|
||||
diamondchestplate: 1750.0
|
||||
redstonewire: 30.0
|
||||
redmushroom: 2.0
|
||||
string: 5.0
|
||||
stoneplate: 6.0
|
||||
wallsign: 1.0
|
||||
cactus: 10.0
|
||||
sulphur: 20.0
|
||||
rails: 22.0
|
||||
ironore: 18.0
|
||||
leatherhelmet: 52.0
|
||||
stone: 3.00
|
||||
egg: 1.0
|
||||
diamondore: 200.0
|
||||
woodhoe: 2.0
|
||||
goldleggings: 6.0
|
||||
chainmailleggings: 50.0
|
||||
yellowflower: 2.0
|
||||
ironhelmet: 22.0
|
||||
obsidian: 130.0
|
||||
dirt: 1.0
|
||||
leather: 10.0
|
||||
leatherboots: 42.0
|
||||
lever: 1.0
|
||||
cobblestone: 1.0
|
||||
cake: 180.0
|
||||
woodstairs: 1.0
|
||||
ironingot: 22.0
|
||||
goldore: 45.0
|
||||
pumpkin: 50.0
|
||||
bed: 68.0
|
||||
watch: 6.0
|
||||
ironleggings: 22.0
|
||||
sign: 1.5
|
||||
doublestep: 1.0
|
||||
woodpickaxe: 2.0
|
||||
stonepickaxe: 4.0
|
||||
chainmailboots: 30.0
|
||||
diamondleggings: 1500.0
|
||||
cookedfish: 7.0
|
||||
saddle: 100.0
|
||||
cobblestonestairs: 1.5
|
||||
tnt: 100.0
|
||||
glowingredstoneore: 30.0
|
||||
apple: 10.0
|
||||
woodspade: 1.0
|
||||
goldingot: 105.0
|
||||
diode: 110.0
|
||||
soil: 1.0
|
||||
clay: 12.0
|
||||
goldblock: 450.0
|
||||
stick: 0.25
|
||||
paper: 10.0
|
||||
brick: 21.0
|
||||
stationarylava: 1.0
|
||||
chest: 4.0
|
||||
sandstone: 3.0
|
||||
goldpickaxe: 6.0
|
||||
compass: 22.0
|
||||
sugarcane: 10.0
|
||||
diamondsword: 420.0
|
||||
goldboots: 6.0
|
||||
sponge: 80.0
|
||||
stonesword: 2.5
|
||||
coal: 15.0
|
||||
goldaxe: 6.0
|
||||
bone: 2.0
|
||||
diamond: 200.0
|
||||
glass: 3.00
|
||||
goldspade: 6.0
|
||||
lapisblock: 950.0
|
||||
lavabucket: 40.0
|
||||
wheat: 9.0
|
||||
ladder: 0.5
|
||||
sugarcaneblock: 15.0
|
||||
bowl: 0.50
|
||||
chainmailchestplate: 40.0
|
||||
sapling: 2.0
|
||||
diamondboots: 850.0
|
||||
lapisore: 100.0
|
||||
lava: 25.0
|
||||
milkbucket: 40.0
|
||||
redstone: 32.0
|
||||
greenrecord: 100.0
|
||||
inksack: 10.0
|
||||
glowstonedust: 10.0
|
||||
book: 45.0
|
||||
bow: 15.0
|
||||
ironboots: 22.0
|
||||
step: 1.5
|
||||
sugar: 10.0
|
||||
|
@ -1,10 +1,5 @@
|
||||
package com.earth2me.essentials;
|
||||
|
||||
import com.earth2me.essentials.settings.Settings;
|
||||
import com.earth2me.essentials.storage.ObjectLoadException;
|
||||
import com.earth2me.essentials.storage.StorageObject;
|
||||
import com.earth2me.essentials.storage.YamlStorageReader;
|
||||
import com.earth2me.essentials.storage.YamlStorageWriter;
|
||||
import java.io.*;
|
||||
import junit.framework.TestCase;
|
||||
import org.bukkit.Location;
|
||||
@ -39,100 +34,6 @@ public class StorageTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSettings()
|
||||
{
|
||||
try
|
||||
{
|
||||
assertTrue(StorageObject.class.isAssignableFrom(Settings.class));
|
||||
ExecuteTimer ext = new ExecuteTimer();
|
||||
ext.start();
|
||||
final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);
|
||||
final Reader reader = new InputStreamReader(bais);
|
||||
final Settings settings = new YamlStorageReader(reader, null).load(Settings.class);
|
||||
ext.mark("load empty settings");
|
||||
final ByteArrayInputStream bais3 = new ByteArrayInputStream(new byte[0]);
|
||||
final Reader reader3 = new InputStreamReader(bais3);
|
||||
final Settings settings3 = new YamlStorageReader(reader3, null).load(Settings.class);
|
||||
ext.mark("load empty settings (class cached)");
|
||||
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
final PrintWriter writer = new PrintWriter(baos);
|
||||
new YamlStorageWriter(writer).save(settings);
|
||||
writer.close();
|
||||
ext.mark("write settings");
|
||||
byte[] written = baos.toByteArray();
|
||||
System.out.println(new String(written));
|
||||
final ByteArrayInputStream bais2 = new ByteArrayInputStream(written);
|
||||
final Reader reader2 = new InputStreamReader(bais2);
|
||||
final Settings settings2 = new YamlStorageReader(reader2, null).load(Settings.class);
|
||||
System.out.println(settings.toString());
|
||||
System.out.println(settings2.toString());
|
||||
ext.mark("reload settings");
|
||||
System.out.println(ext.end());
|
||||
//assertEquals("Default and rewritten config should be equal", settings, settings2);
|
||||
//that assertion fails, because empty list and maps return as null
|
||||
}
|
||||
catch (ObjectLoadException ex)
|
||||
{
|
||||
fail(ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserdata()
|
||||
{
|
||||
try
|
||||
{
|
||||
FakeServer server = new FakeServer();
|
||||
World world = server.createWorld("testWorld", Environment.NORMAL);
|
||||
ExecuteTimer ext = new ExecuteTimer();
|
||||
ext.start();
|
||||
final ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);
|
||||
final Reader reader = new InputStreamReader(bais);
|
||||
final com.earth2me.essentials.user.UserData userdata = new YamlStorageReader(reader, null).load(com.earth2me.essentials.user.UserData.class);
|
||||
ext.mark("load empty user");
|
||||
final ByteArrayInputStream bais3 = new ByteArrayInputStream(new byte[0]);
|
||||
final Reader reader3 = new InputStreamReader(bais3);
|
||||
final com.earth2me.essentials.user.UserData userdata3 = new YamlStorageReader(reader3, null).load(com.earth2me.essentials.user.UserData.class);
|
||||
ext.mark("load empty user (class cached)");
|
||||
|
||||
for (int j = 0; j < 10000; j++)
|
||||
{
|
||||
userdata.getHomes().put("home", new Location(world, j, j, j));
|
||||
}
|
||||
ext.mark("change home 10000 times");
|
||||
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
final PrintWriter writer = new PrintWriter(baos);
|
||||
new YamlStorageWriter(writer).save(userdata);
|
||||
writer.close();
|
||||
ext.mark("write user");
|
||||
final ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
|
||||
final PrintWriter writer2 = new PrintWriter(baos2);
|
||||
new YamlStorageWriter(writer2).save(userdata);
|
||||
writer2.close();
|
||||
ext.mark("write user (cached)");
|
||||
byte[] written = baos.toByteArray();
|
||||
System.out.println(new String(written));
|
||||
ext.mark("debug output");
|
||||
final ByteArrayInputStream bais2 = new ByteArrayInputStream(written);
|
||||
final Reader reader2 = new InputStreamReader(bais2);
|
||||
final com.earth2me.essentials.user.UserData userdata2 = new YamlStorageReader(reader2, null).load(com.earth2me.essentials.user.UserData.class);
|
||||
ext.mark("reload file");
|
||||
final ByteArrayInputStream bais4 = new ByteArrayInputStream(written);
|
||||
final Reader reader4 = new InputStreamReader(bais4);
|
||||
final com.earth2me.essentials.user.UserData userdata4 = new YamlStorageReader(reader4, null).load(com.earth2me.essentials.user.UserData.class);
|
||||
ext.mark("reload file (cached)");
|
||||
System.out.println(userdata.toString());
|
||||
System.out.println(userdata2.toString());
|
||||
System.out.println(ext.end());
|
||||
}
|
||||
catch (ObjectLoadException ex)
|
||||
{
|
||||
fail(ex.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOldUserdata()
|
||||
{
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE project [ <!ENTITY buildinc SYSTEM "../build.inc.xml"> ]>
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
@ -7,9 +8,9 @@
|
||||
<!-- the Compile on Save feature is turned off for the project. -->
|
||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
|
||||
<!-- in the project's Project Properties dialog box.-->
|
||||
<project name="EssentialsUpdate" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project EssentialsUpdate.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<project name="EssentialsAntiBuild" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project EssentialsAntiBuild.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
||||
There exist several targets which are by default empty and which can be
|
||||
@ -59,7 +60,7 @@
|
||||
|
||||
An example of overriding the target for project execution could look like this:
|
||||
|
||||
<target name="run" depends="EssentialsUpdate-impl.jar">
|
||||
<target name="run" depends="EssentialsProtect-impl.jar">
|
||||
<exec dir="bin" executable="launcher.exe">
|
||||
<arg file="${dist.jar}"/>
|
||||
</exec>
|
||||
@ -71,4 +72,12 @@
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
-->
|
||||
<target name="-post-jar">
|
||||
<jar jarfile="${dist.dir}/EssentialsAntiBuild.jar">
|
||||
<zipfileset src="${dist.jar}" excludes="META-INF/*" />
|
||||
<manifest>
|
||||
<attribute name="Classpath" value="EssentialsAntiBuild.jar"/>
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
</project>
|
@ -12,14 +12,14 @@ is divided into following sections:
|
||||
- execution
|
||||
- debugging
|
||||
- javadoc
|
||||
- test compilation
|
||||
- test execution
|
||||
- test debugging
|
||||
- junit compilation
|
||||
- junit execution
|
||||
- junit debugging
|
||||
- applet
|
||||
- cleanup
|
||||
|
||||
-->
|
||||
<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="EssentialsUpdate-impl">
|
||||
<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="EssentialsAntiBuild-impl">
|
||||
<fail message="Please build using Ant 1.8.0 or higher.">
|
||||
<condition>
|
||||
<not>
|
||||
@ -181,7 +181,6 @@ is divided into following sections:
|
||||
</and>
|
||||
</condition>
|
||||
<property name="run.jvmargs" value=""/>
|
||||
<property name="run.jvmargs.ide" value=""/>
|
||||
<property name="javac.compilerargs" value=""/>
|
||||
<property name="work.dir" value="${basedir}"/>
|
||||
<condition property="no.deps">
|
||||
@ -226,27 +225,6 @@ is divided into following sections:
|
||||
<property name="jar.index.metainf" value="${jar.index}"/>
|
||||
<property name="copylibs.rebase" value="true"/>
|
||||
<available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
|
||||
<condition property="junit.available">
|
||||
<or>
|
||||
<available classname="org.junit.Test" classpath="${run.test.classpath}"/>
|
||||
<available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
|
||||
</or>
|
||||
</condition>
|
||||
<condition property="testng.available">
|
||||
<available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
|
||||
</condition>
|
||||
<condition property="junit+testng.available">
|
||||
<and>
|
||||
<istrue value="${junit.available}"/>
|
||||
<istrue value="${testng.available}"/>
|
||||
</and>
|
||||
</condition>
|
||||
<condition else="testng" property="testng.mode" value="mixed">
|
||||
<istrue value="${junit+testng.available}"/>
|
||||
</condition>
|
||||
<condition else="" property="testng.debug.mode" value="-mixed">
|
||||
<istrue value="${junit+testng.available}"/>
|
||||
</condition>
|
||||
</target>
|
||||
<target name="-post-init">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
@ -379,52 +357,11 @@ is divided into following sections:
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${junit.available}" name="-init-macrodef-junit-init">
|
||||
<condition else="false" property="nb.junit.batch" value="true">
|
||||
<and>
|
||||
<istrue value="${junit.available}"/>
|
||||
<not>
|
||||
<isset property="test.method"/>
|
||||
</not>
|
||||
</and>
|
||||
</condition>
|
||||
<condition else="false" property="nb.junit.single" value="true">
|
||||
<and>
|
||||
<istrue value="${junit.available}"/>
|
||||
<isset property="test.method"/>
|
||||
</and>
|
||||
</condition>
|
||||
</target>
|
||||
<target if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
|
||||
<target name="-init-macrodef-junit">
|
||||
<macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<property name="junit.forkmode" value="perTest"/>
|
||||
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||||
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg value="-ea"/>
|
||||
<customize/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
|
||||
<macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<property name="junit.forkmode" value="perTest"/>
|
||||
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||||
@ -433,270 +370,32 @@ is divided into following sections:
|
||||
<filename name="@{testincludes}"/>
|
||||
</fileset>
|
||||
</batchtest>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
</classpath>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
|
||||
<jvmarg value="-ea"/>
|
||||
<customize/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
|
||||
<target if="${testng.available}" name="-init-macrodef-testng">
|
||||
<macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
|
||||
<isset property="test.method"/>
|
||||
</condition>
|
||||
<union id="test.set">
|
||||
<fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
|
||||
<filename name="@{testincludes}"/>
|
||||
</fileset>
|
||||
</union>
|
||||
<taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
|
||||
<testng classfilesetref="test.set" failureProperty="tests.failed" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="EssentialsUpdate" testname="TestNG tests" workingDir="${work.dir}">
|
||||
<xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
|
||||
<propertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</propertyset>
|
||||
<customize/>
|
||||
</testng>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-macrodef-test-impl">
|
||||
<macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element implicit="true" name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<echo>No tests executed.</echo>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
|
||||
<macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element implicit="true" name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize/>
|
||||
</j2seproject3:junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
|
||||
<macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element implicit="true" name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize/>
|
||||
</j2seproject3:testng>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
|
||||
<macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<sequential>
|
||||
<j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
</classpath>
|
||||
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<jvmarg line="${run.jvmargs.ide}"/>
|
||||
</customize>
|
||||
</j2seproject3:test-impl>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${junit.available}" name="-init-macrodef-junit-debug" unless="${nb.junit.batch}">
|
||||
<macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<property name="junit.forkmode" value="perTest"/>
|
||||
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||||
<test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg value="-ea"/>
|
||||
<jvmarg line="${debug-args-line}"/>
|
||||
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
|
||||
<customize/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${nb.junit.batch}" name="-init-macrodef-junit-debug-batch">
|
||||
<macrodef name="junit-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<property name="junit.forkmode" value="perTest"/>
|
||||
<junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
|
||||
<batchtest todir="${build.test.results.dir}">
|
||||
<fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
|
||||
<filename name="@{testincludes}"/>
|
||||
</fileset>
|
||||
</batchtest>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg value="-ea"/>
|
||||
<jvmarg line="${debug-args-line}"/>
|
||||
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
|
||||
<customize/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-junit-debug,-init-macrodef-junit-debug-batch" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
|
||||
<macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<element implicit="true" name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<j2seproject3:junit-debug excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize/>
|
||||
</j2seproject3:junit-debug>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target if="${testng.available}" name="-init-macrodef-testng-debug">
|
||||
<macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${main.class}" name="testClass"/>
|
||||
<attribute default="" name="testMethod"/>
|
||||
<element name="customize2" optional="true"/>
|
||||
<sequential>
|
||||
<condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
|
||||
<isset property="test.method"/>
|
||||
</condition>
|
||||
<condition else="-suitename EssentialsUpdate -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
|
||||
<matches pattern=".*\.xml" string="@{testClass}"/>
|
||||
</condition>
|
||||
<delete dir="${build.test.results.dir}" quiet="true"/>
|
||||
<mkdir dir="${build.test.results.dir}"/>
|
||||
<j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
|
||||
<customize>
|
||||
<customize2/>
|
||||
<jvmarg value="-ea"/>
|
||||
<arg line="${testng.debug.mode}"/>
|
||||
<arg line="-d ${build.test.results.dir}"/>
|
||||
<arg line="-listener org.testng.reporters.VerboseReporter"/>
|
||||
<arg line="${testng.cmd.args}"/>
|
||||
</customize>
|
||||
</j2seproject3:debug>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
|
||||
<macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${main.class}" name="testClass"/>
|
||||
<attribute default="" name="testMethod"/>
|
||||
<element implicit="true" name="customize2" optional="true"/>
|
||||
<sequential>
|
||||
<j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
|
||||
<customize2/>
|
||||
</j2seproject3:testng-debug>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
|
||||
<macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<attribute default="${main.class}" name="testClass"/>
|
||||
<attribute default="" name="testMethod"/>
|
||||
<sequential>
|
||||
<j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
|
||||
<customize>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
</classpath>
|
||||
<jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<jvmarg line="${run.jvmargs.ide}"/>
|
||||
</customize>
|
||||
</j2seproject3:test-debug-impl>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
|
||||
<macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${includes}" name="includes"/>
|
||||
<attribute default="${excludes}" name="excludes"/>
|
||||
<attribute default="**" name="testincludes"/>
|
||||
<attribute default="" name="testmethods"/>
|
||||
<attribute default="${main.class}" name="testClass"/>
|
||||
<attribute default="" name="testMethod"/>
|
||||
<sequential>
|
||||
<j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
|
||||
<customize2>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
</customize2>
|
||||
</j2seproject3:testng-debug-impl>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
|
||||
<!--
|
||||
pre NB7.2 profiling section; consider it deprecated
|
||||
-->
|
||||
<target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
|
||||
<target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
|
||||
<target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" name="profile-init"/>
|
||||
<target name="-profile-pre-init">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target if="profiler.info.jvmargs.agent" name="-profile-post-init">
|
||||
<target name="-profile-post-init">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">
|
||||
<target name="-profile-init-macrodef-profile">
|
||||
<macrodef name="resolve">
|
||||
<attribute name="name"/>
|
||||
<attribute name="value"/>
|
||||
@ -728,13 +427,10 @@ is divided into following sections:
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">
|
||||
<target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" name="-profile-init-check">
|
||||
<fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
|
||||
<fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
|
||||
</target>
|
||||
<!--
|
||||
end of pre NB7.2 profiling section
|
||||
-->
|
||||
<target depends="-init-debug-args" name="-init-macrodef-nbjpda">
|
||||
<macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute default="${main.class}" name="name"/>
|
||||
@ -792,7 +488,6 @@ is divided into following sections:
|
||||
<jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
|
||||
<redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<jvmarg line="${run.jvmargs.ide}"/>
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
@ -809,7 +504,6 @@ is divided into following sections:
|
||||
<macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute default="${main.class}" name="classname"/>
|
||||
<attribute default="${run.classpath}" name="classpath"/>
|
||||
<attribute default="jvm" name="jvm"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<java classname="@{classname}" dir="${work.dir}" fork="true">
|
||||
@ -817,7 +511,6 @@ is divided into following sections:
|
||||
<jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
|
||||
<redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<jvmarg line="${run.jvmargs.ide}"/>
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
@ -844,9 +537,6 @@ is divided into following sections:
|
||||
<path path="${run.classpath.without.build.classes.dir}"/>
|
||||
<chainedmapper>
|
||||
<flattenmapper/>
|
||||
<filtermapper>
|
||||
<replacestring from=" " to="%20"/>
|
||||
</filtermapper>
|
||||
<globmapper from="*" to="lib/*"/>
|
||||
</chainedmapper>
|
||||
</pathconvert>
|
||||
@ -892,7 +582,7 @@ is divided into following sections:
|
||||
<target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
|
||||
<property name="ap.cmd.line.internal" value=""/>
|
||||
</target>
|
||||
<target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
|
||||
<target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
|
||||
<!--
|
||||
===================
|
||||
COMPILATION SECTION
|
||||
@ -903,7 +593,7 @@ is divided into following sections:
|
||||
<delete file="${built-jar.properties}" quiet="true"/>
|
||||
</target>
|
||||
<target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
|
||||
<echo level="warn" message="Cycle detected: EssentialsUpdate was already built"/>
|
||||
<echo level="warn" message="Cycle detected: EssentialsAntiBuild was already built"/>
|
||||
</target>
|
||||
<target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
|
||||
<mkdir dir="${build.dir}"/>
|
||||
@ -913,6 +603,13 @@ is divided into following sections:
|
||||
<propertyfile file="${built-jar.properties}">
|
||||
<entry key="${basedir}" value=""/>
|
||||
</propertyfile>
|
||||
<antcall target="-maybe-call-dep">
|
||||
<param name="call.built.properties" value="${built-jar.properties}"/>
|
||||
<param location="${project.Essentials}" name="call.subproject"/>
|
||||
<param location="${project.Essentials}/build.xml" name="call.script"/>
|
||||
<param name="call.target" value="jar"/>
|
||||
<param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
|
||||
</antcall>
|
||||
</target>
|
||||
<target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
|
||||
<target depends="init" name="-check-automatic-build">
|
||||
@ -1108,11 +805,7 @@ is divided into following sections:
|
||||
PROFILING SECTION
|
||||
=================
|
||||
-->
|
||||
<!--
|
||||
pre NB7.2 profiler integration
|
||||
-->
|
||||
<target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
|
||||
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
|
||||
<target depends="profile-init,compile" description="Profile a project in the IDE." if="netbeans.home" name="profile">
|
||||
<nbprofiledirect>
|
||||
<classpath>
|
||||
<path path="${run.classpath}"/>
|
||||
@ -1120,9 +813,8 @@ is divided into following sections:
|
||||
</nbprofiledirect>
|
||||
<profile/>
|
||||
</target>
|
||||
<target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
|
||||
<target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="netbeans.home" name="profile-single">
|
||||
<fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
|
||||
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
|
||||
<nbprofiledirect>
|
||||
<classpath>
|
||||
<path path="${run.classpath}"/>
|
||||
@ -1130,8 +822,12 @@ is divided into following sections:
|
||||
</nbprofiledirect>
|
||||
<profile classname="${profile.class}"/>
|
||||
</target>
|
||||
<target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
|
||||
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
|
||||
<!--
|
||||
=========================
|
||||
APPLET PROFILING SECTION
|
||||
=========================
|
||||
-->
|
||||
<target depends="profile-init,compile-single" if="netbeans.home" name="profile-applet">
|
||||
<nbprofiledirect>
|
||||
<classpath>
|
||||
<path path="${run.classpath}"/>
|
||||
@ -1143,8 +839,12 @@ is divided into following sections:
|
||||
</customize>
|
||||
</profile>
|
||||
</target>
|
||||
<target depends="profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
|
||||
<fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
|
||||
<!--
|
||||
=========================
|
||||
TESTS PROFILING SECTION
|
||||
=========================
|
||||
-->
|
||||
<target depends="profile-init,compile-test-single" if="netbeans.home" name="profile-test-single">
|
||||
<nbprofiledirect>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
@ -1166,42 +866,6 @@ is divided into following sections:
|
||||
<formatter type="xml"/>
|
||||
</junit>
|
||||
</target>
|
||||
<!--
|
||||
end of pre NB72 profiling section
|
||||
-->
|
||||
<target if="netbeans.home" name="-profile-check">
|
||||
<condition property="profiler.configured">
|
||||
<or>
|
||||
<contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
|
||||
<contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
|
||||
</or>
|
||||
</condition>
|
||||
</target>
|
||||
<target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
|
||||
<startprofiler/>
|
||||
<antcall target="run"/>
|
||||
</target>
|
||||
<target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
|
||||
<fail unless="run.class">Must select one file in the IDE or set run.class</fail>
|
||||
<startprofiler/>
|
||||
<antcall target="run-single"/>
|
||||
</target>
|
||||
<target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
|
||||
<target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
|
||||
<fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
|
||||
<startprofiler/>
|
||||
<antcall target="test-single"/>
|
||||
</target>
|
||||
<target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
|
||||
<fail unless="run.class">Must select one file in the IDE or set run.class</fail>
|
||||
<startprofiler/>
|
||||
<antcal target="run-test-with-main"/>
|
||||
</target>
|
||||
<target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
|
||||
<fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
|
||||
<startprofiler/>
|
||||
<antcall target="run-applet"/>
|
||||
</target>
|
||||
<!--
|
||||
===============
|
||||
JAVADOC SECTION
|
||||
@ -1245,7 +909,7 @@ is divided into following sections:
|
||||
<target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
|
||||
<!--
|
||||
=========================
|
||||
TEST COMPILATION SECTION
|
||||
JUNIT COMPILATION SECTION
|
||||
=========================
|
||||
-->
|
||||
<target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
|
||||
@ -1288,14 +952,14 @@ is divided into following sections:
|
||||
<target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
|
||||
<!--
|
||||
=======================
|
||||
TEST EXECUTION SECTION
|
||||
JUNIT EXECUTION SECTION
|
||||
=======================
|
||||
-->
|
||||
<target depends="init" if="have.tests" name="-pre-test-run">
|
||||
<mkdir dir="${build.test.results.dir}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
|
||||
<j2seproject3:test testincludes="**/*Test.java"/>
|
||||
<j2seproject3:junit testincludes="**/*Test.java"/>
|
||||
</target>
|
||||
<target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
|
||||
<fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
|
||||
@ -1308,40 +972,39 @@ is divided into following sections:
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
|
||||
<fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
|
||||
<j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
|
||||
<j2seproject3:junit excludes="" includes="${test.includes}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
|
||||
<fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
|
||||
<fail unless="test.class">Must select some files in the IDE or set test.class</fail>
|
||||
<fail unless="test.method">Must select some method in the IDE or set test.method</fail>
|
||||
<j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
|
||||
<fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
|
||||
<!--
|
||||
=======================
|
||||
TEST DEBUGGING SECTION
|
||||
JUNIT DEBUGGING SECTION
|
||||
=======================
|
||||
-->
|
||||
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
|
||||
<target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test">
|
||||
<fail unless="test.class">Must select one file in the IDE or set test.class</fail>
|
||||
<j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
|
||||
<fail unless="test.class">Must select one file in the IDE or set test.class</fail>
|
||||
<fail unless="test.method">Must select some method in the IDE or set test.method</fail>
|
||||
<j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
|
||||
<property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/>
|
||||
<delete file="${test.report.file}"/>
|
||||
<mkdir dir="${build.test.results.dir}"/>
|
||||
<j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}">
|
||||
<customize>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper from="test-sys-prop.*" to="*" type="glob"/>
|
||||
</syspropertyset>
|
||||
<arg value="${test.class}"/>
|
||||
<arg value="showoutput=true"/>
|
||||
<arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>
|
||||
<arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>
|
||||
</customize>
|
||||
</j2seproject3:debug>
|
||||
</target>
|
||||
<target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
|
||||
<j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
|
||||
</target>
|
||||
<target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
|
||||
<target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
|
||||
<target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
|
||||
<j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
|
||||
</target>
|
||||
@ -1383,7 +1046,7 @@ is divided into following sections:
|
||||
<delete file="${built-clean.properties}" quiet="true"/>
|
||||
</target>
|
||||
<target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
|
||||
<echo level="warn" message="Cycle detected: EssentialsUpdate was already built"/>
|
||||
<echo level="warn" message="Cycle detected: EssentialsAntiBuild was already built"/>
|
||||
</target>
|
||||
<target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
|
||||
<mkdir dir="${build.dir}"/>
|
||||
@ -1393,6 +1056,13 @@ is divided into following sections:
|
||||
<propertyfile file="${built-clean.properties}">
|
||||
<entry key="${basedir}" value=""/>
|
||||
</propertyfile>
|
||||
<antcall target="-maybe-call-dep">
|
||||
<param name="call.built.properties" value="${built-clean.properties}"/>
|
||||
<param location="${project.Essentials}" name="call.subproject"/>
|
||||
<param location="${project.Essentials}/build.xml" name="call.script"/>
|
||||
<param name="call.target" value="clean"/>
|
||||
<param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
|
||||
</antcall>
|
||||
</target>
|
||||
<target depends="init" name="-do-clean">
|
||||
<delete dir="${build.dir}"/>
|
||||
@ -1406,12 +1076,9 @@ is divided into following sections:
|
||||
<target name="-check-call-dep">
|
||||
<property file="${call.built.properties}" prefix="already.built."/>
|
||||
<condition property="should.call.dep">
|
||||
<and>
|
||||
<not>
|
||||
<isset property="already.built.${call.subproject}"/>
|
||||
</not>
|
||||
<available file="${call.script}"/>
|
||||
</and>
|
||||
<not>
|
||||
<isset property="already.built.${call.subproject}"/>
|
||||
</not>
|
||||
</condition>
|
||||
</target>
|
||||
<target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
|
8
EssentialsAntiBuild/nbproject/genfiles.properties
Normal file
8
EssentialsAntiBuild/nbproject/genfiles.properties
Normal file
@ -0,0 +1,8 @@
|
||||
build.xml.data.CRC32=ff207988
|
||||
build.xml.script.CRC32=1ed11cc3
|
||||
build.xml.stylesheet.CRC32=28e38971@1.38.3.45
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=ddb4519c
|
||||
nbproject/build-impl.xml.script.CRC32=cfb9443d
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.3.46
|
@ -1,9 +1,10 @@
|
||||
annotation.processing.enabled=true
|
||||
annotation.processing.enabled.in.editor=false
|
||||
annotation.processing.processors.list=
|
||||
annotation.processing.run.all.processors=true
|
||||
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
|
||||
application.title=EssentialsUpdate
|
||||
application.vendor=essentialsteam
|
||||
application.title=EssentialsAntiBuild
|
||||
application.vendor=
|
||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
|
||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=2
|
||||
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=2
|
||||
@ -59,14 +60,17 @@ debug.test.classpath=\
|
||||
${run.test.classpath}
|
||||
# This directory is removed when the project is cleaned:
|
||||
dist.dir=dist
|
||||
dist.jar=${dist.dir}/EssentialsUpdate.jar
|
||||
dist.jar=${dist.dir}/original-EssentialsAntiBuild.jar
|
||||
dist.javadoc.dir=${dist.dir}/javadoc
|
||||
endorsed.classpath=
|
||||
excludes=
|
||||
file.reference.bukkit.jar=../lib/bukkit.jar
|
||||
includes=**
|
||||
jar.archive.disabled=${jnlp.enabled}
|
||||
jar.compress=true
|
||||
jar.index=${jnlp.enabled}
|
||||
javac.classpath=\
|
||||
${reference.Essentials.jar}:\
|
||||
${file.reference.bukkit.jar}
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
@ -92,11 +96,18 @@ javadoc.splitindex=true
|
||||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
javadoc.windowtitle=
|
||||
main.class=
|
||||
jnlp.codebase.type=no.codebase
|
||||
jnlp.descriptor=application
|
||||
jnlp.enabled=false
|
||||
jnlp.mixed.code=defaut
|
||||
jnlp.offline-allowed=false
|
||||
jnlp.signed=false
|
||||
manifest.file=manifest.mf
|
||||
meta.inf.dir=${src.dir}/META-INF
|
||||
mkdist.disabled=false
|
||||
mkdist.disabled=true
|
||||
platform.active=default_platform
|
||||
project.Essentials=../Essentials
|
||||
reference.Essentials.jar=${project.Essentials}/dist/Essentials.jar
|
||||
run.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
@ -3,7 +3,7 @@
|
||||
<type>org.netbeans.modules.java.j2seproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<name>EssentialsUpdate</name>
|
||||
<name>EssentialsAntiBuild</name>
|
||||
<source-roots>
|
||||
<root id="src.dir"/>
|
||||
</source-roots>
|
||||
@ -14,5 +14,15 @@
|
||||
<libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
|
||||
<definitions>../lib/nblibraries.properties</definitions>
|
||||
</libraries>
|
||||
<references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
|
||||
<reference>
|
||||
<foreign-project>Essentials</foreign-project>
|
||||
<artifact-type>jar</artifact-type>
|
||||
<script>build.xml</script>
|
||||
<target>jar</target>
|
||||
<clean-target>clean</clean-target>
|
||||
<id>jar</id>
|
||||
</reference>
|
||||
</references>
|
||||
</configuration>
|
||||
</project>
|
@ -0,0 +1,73 @@
|
||||
package com.earth2me.essentials.antibuild;
|
||||
|
||||
|
||||
public enum AntiBuildConfig
|
||||
{
|
||||
disable_build("protect.disable.build", true),
|
||||
disable_use("protect.disable.use", true),
|
||||
alert_on_placement("protect.alert.on-placement"),
|
||||
alert_on_use("protect.alert.on-use"),
|
||||
alert_on_break("protect.alert.on-break"),
|
||||
blacklist_placement("protect.blacklist.placement"),
|
||||
blacklist_usage("protect.blacklist.usage"),
|
||||
blacklist_break("protect.blacklist.break"),
|
||||
blacklist_piston("protect.blacklist.piston");
|
||||
private final String configName;
|
||||
private final String defValueString;
|
||||
private final boolean defValueBoolean;
|
||||
private final boolean isList;
|
||||
private final boolean isString;
|
||||
|
||||
private AntiBuildConfig(final String configName)
|
||||
{
|
||||
this(configName, null, false, true, false);
|
||||
}
|
||||
|
||||
private AntiBuildConfig(final String configName, final boolean defValueBoolean)
|
||||
{
|
||||
this(configName, null, defValueBoolean, false, false);
|
||||
}
|
||||
|
||||
private AntiBuildConfig(final String configName, final String defValueString, final boolean defValueBoolean, final boolean isList, final boolean isString)
|
||||
{
|
||||
this.configName = configName;
|
||||
this.defValueString = defValueString;
|
||||
this.defValueBoolean = defValueBoolean;
|
||||
this.isList = isList;
|
||||
this.isString = isString;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the configName
|
||||
*/
|
||||
public String getConfigName()
|
||||
{
|
||||
return configName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the default value String
|
||||
*/
|
||||
public String getDefaultValueString()
|
||||
{
|
||||
return defValueString;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the default value boolean
|
||||
*/
|
||||
public boolean getDefaultValueBoolean()
|
||||
{
|
||||
return defValueBoolean;
|
||||
}
|
||||
|
||||
public boolean isString()
|
||||
{
|
||||
return isString;
|
||||
}
|
||||
|
||||
public boolean isList()
|
||||
{
|
||||
return isList;
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package com.earth2me.essentials.antibuild;
|
||||
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
||||
public class EssentialsAntiBuild extends JavaPlugin implements IAntiBuild
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger("Minecraft");
|
||||
private final transient Map<AntiBuildConfig, Boolean> settingsBoolean = new EnumMap<AntiBuildConfig, Boolean>(AntiBuildConfig.class);
|
||||
private final transient Map<AntiBuildConfig, List<Integer>> settingsList = new EnumMap<AntiBuildConfig, List<Integer>>(AntiBuildConfig.class);
|
||||
private transient EssentialsConnect ess = null;
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
final PluginManager pm = this.getServer().getPluginManager();
|
||||
final Plugin essPlugin = pm.getPlugin("Essentials");
|
||||
if (essPlugin == null || !essPlugin.isEnabled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
ess = new EssentialsConnect(essPlugin, this);
|
||||
|
||||
final EssentialsAntiBuildListener blockListener = new EssentialsAntiBuildListener(this);
|
||||
pm.registerEvents(blockListener, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkProtectionItems(final AntiBuildConfig list, final int id)
|
||||
{
|
||||
final List<Integer> itemList = settingsList.get(list);
|
||||
return itemList != null && !itemList.isEmpty() && itemList.contains(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EssentialsConnect getEssentialsConnect()
|
||||
{
|
||||
return ess;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<AntiBuildConfig, Boolean> getSettingsBoolean()
|
||||
{
|
||||
return settingsBoolean;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<AntiBuildConfig, List<Integer>> getSettingsList()
|
||||
{
|
||||
return settingsList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getSettingBool(final AntiBuildConfig protectConfig)
|
||||
{
|
||||
final Boolean bool = settingsBoolean.get(protectConfig);
|
||||
return bool == null ? protectConfig.getDefaultValueBoolean() : bool;
|
||||
}
|
||||
}
|
@ -0,0 +1,215 @@
|
||||
package com.earth2me.essentials.antibuild;
|
||||
|
||||
import static com.earth2me.essentials.I18n._;
|
||||
import com.earth2me.essentials.IEssentials;
|
||||
import com.earth2me.essentials.User;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.event.Event.Result;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.*;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
public class EssentialsAntiBuildListener implements Listener
|
||||
{
|
||||
final private transient IAntiBuild prot;
|
||||
final private transient IEssentials ess;
|
||||
|
||||
public EssentialsAntiBuildListener(final IAntiBuild parent)
|
||||
{
|
||||
this.prot = parent;
|
||||
this.ess = prot.getEssentialsConnect().getEssentials();
|
||||
}
|
||||
|
||||
private boolean metaPermCheck(User user, String action, Block block)
|
||||
{
|
||||
if (block == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return metaPermCheck(user, action, block.getTypeId(), block.getData());
|
||||
}
|
||||
|
||||
private boolean metaPermCheck(User user, String action, int blockId, byte data)
|
||||
{
|
||||
final String blockPerm = "essentials.build." + action + "." + blockId;
|
||||
final String dataPerm = blockPerm + ":" + data;
|
||||
|
||||
if (user.isPermissionSet(dataPerm))
|
||||
{
|
||||
return user.isAuthorized(dataPerm);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ess.getSettings().isDebug())
|
||||
{
|
||||
ess.getLogger().log(Level.INFO, "abort checking if " + user.getName() + " has " + dataPerm + " - not directly set");
|
||||
}
|
||||
}
|
||||
|
||||
return user.isAuthorized(blockPerm);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onBlockPlace(final BlockPlaceEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final User user = ess.getUser(event.getPlayer());
|
||||
|
||||
if (prot.getSettingBool(AntiBuildConfig.disable_build) && !user.canBuild() && !user.isAuthorized("essentials.build")
|
||||
&& !metaPermCheck(user, "place", event.getBlock()))
|
||||
{
|
||||
if (ess.getSettings().warnOnBuildDisallow())
|
||||
{
|
||||
user.sendMessage(_("buildAlert"));
|
||||
}
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
final Block blockPlaced = event.getBlockPlaced();
|
||||
final int id = blockPlaced.getTypeId();
|
||||
|
||||
if (prot.checkProtectionItems(AntiBuildConfig.blacklist_placement, id) && !user.isAuthorized("essentials.protect.exemptplacement"))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (prot.checkProtectionItems(AntiBuildConfig.alert_on_placement, id)
|
||||
&& !user.isAuthorized("essentials.protect.alerts.notrigger"))
|
||||
{
|
||||
prot.getEssentialsConnect().alert(user, blockPlaced.getType().toString(), _("alertPlaced"));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onBlockBreak(final BlockBreakEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
final User user = ess.getUser(event.getPlayer());
|
||||
|
||||
if (prot.getSettingBool(AntiBuildConfig.disable_build) && !user.canBuild() && !user.isAuthorized("essentials.build")
|
||||
&& !metaPermCheck(user, "break", event.getBlock()))
|
||||
{
|
||||
if (ess.getSettings().warnOnBuildDisallow())
|
||||
{
|
||||
user.sendMessage(_("buildAlert"));
|
||||
}
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
final Block block = event.getBlock();
|
||||
final int typeId = block.getTypeId();
|
||||
|
||||
if (prot.checkProtectionItems(AntiBuildConfig.blacklist_break, typeId)
|
||||
&& !user.isAuthorized("essentials.protect.exemptbreak"))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
final Material type = block.getType();
|
||||
|
||||
if (prot.checkProtectionItems(AntiBuildConfig.alert_on_break, typeId)
|
||||
&& !user.isAuthorized("essentials.protect.alerts.notrigger"))
|
||||
{
|
||||
prot.getEssentialsConnect().alert(user, type.toString(), _("alertBroke"));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onBlockPistonExtend(BlockPistonExtendEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
for (Block block : event.getBlocks())
|
||||
{
|
||||
if (prot.checkProtectionItems(AntiBuildConfig.blacklist_piston, block.getTypeId()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onBlockPistonRetract(BlockPistonRetractEvent event)
|
||||
{
|
||||
if (event.isCancelled() || !event.isSticky())
|
||||
{
|
||||
return;
|
||||
}
|
||||
final Block block = event.getRetractLocation().getBlock();
|
||||
if (prot.checkProtectionItems(AntiBuildConfig.blacklist_piston, block.getTypeId()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void onPlayerInteract(final PlayerInteractEvent event)
|
||||
{
|
||||
// Do not return if cancelled, because the interact event has 2 cancelled states.
|
||||
final User user = ess.getUser(event.getPlayer());
|
||||
|
||||
if (event.hasItem()
|
||||
&& (event.getItem().getType() == Material.WATER_BUCKET
|
||||
|| event.getItem().getType() == Material.LAVA_BUCKET)
|
||||
&& prot.getSettingBool(AntiBuildConfig.disable_build) && !user.canBuild() && !user.isAuthorized("essentials.build"))
|
||||
{
|
||||
if (ess.getSettings().warnOnBuildDisallow())
|
||||
{
|
||||
user.sendMessage(_("buildAlert"));
|
||||
}
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
final ItemStack item = event.getItem();
|
||||
if (item != null
|
||||
&& prot.checkProtectionItems(AntiBuildConfig.blacklist_usage, item.getTypeId())
|
||||
&& !user.isAuthorized("essentials.protect.exemptusage"))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (item != null
|
||||
&& prot.checkProtectionItems(AntiBuildConfig.alert_on_use, item.getTypeId())
|
||||
&& !user.isAuthorized("essentials.protect.alerts.notrigger"))
|
||||
{
|
||||
prot.getEssentialsConnect().alert(user, item.getType().toString(), _("alertUsed"));
|
||||
}
|
||||
|
||||
if (prot.getSettingBool(AntiBuildConfig.disable_use) && !user.canBuild() && !user.isAuthorized("essentials.interact") && !user.isAuthorized("essentials.build"))
|
||||
{
|
||||
if (!metaPermCheck(user, "interact", event.getClickedBlock()))
|
||||
{
|
||||
event.setUseInteractedBlock(Result.DENY);
|
||||
if (ess.getSettings().warnOnBuildDisallow())
|
||||
{
|
||||
user.sendMessage(_("buildAlert"));
|
||||
}
|
||||
}
|
||||
if (event.hasItem() && !metaPermCheck(user, "use", event.getItem().getTypeId(), event.getItem().getData().getData()))
|
||||
{
|
||||
event.setUseItemInHand(Result.DENY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package com.earth2me.essentials.antibuild;
|
||||
|
||||
import com.earth2me.essentials.IConf;
|
||||
import com.earth2me.essentials.IEssentials;
|
||||
import com.earth2me.essentials.User;
|
||||
import static com.earth2me.essentials.I18n._;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public class EssentialsConnect
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger("Minecraft");
|
||||
private final transient IEssentials ess;
|
||||
private final transient IAntiBuild protect;
|
||||
|
||||
public EssentialsConnect(Plugin essPlugin, Plugin essProtect)
|
||||
{
|
||||
if (!essProtect.getDescription().getVersion().equals(essPlugin.getDescription().getVersion()))
|
||||
{
|
||||
LOGGER.log(Level.WARNING, _("versionMismatchAll"));
|
||||
}
|
||||
ess = (IEssentials)essPlugin;
|
||||
protect = (IAntiBuild)essProtect;
|
||||
AntiBuildReloader pr = new AntiBuildReloader();
|
||||
pr.reloadConfig();
|
||||
ess.addReloadListener(pr);
|
||||
}
|
||||
|
||||
public void onDisable()
|
||||
{
|
||||
}
|
||||
|
||||
public IEssentials getEssentials()
|
||||
{
|
||||
return ess;
|
||||
}
|
||||
|
||||
public void alert(final User user, final String item, final String type)
|
||||
{
|
||||
final Location loc = user.getLocation();
|
||||
final String warnMessage = _("alertFormat", user.getName(), type, item,
|
||||
loc.getWorld().getName() + "," + loc.getBlockX() + ","
|
||||
+ loc.getBlockY() + "," + loc.getBlockZ());
|
||||
LOGGER.log(Level.WARNING, warnMessage);
|
||||
for (Player p : ess.getServer().getOnlinePlayers())
|
||||
{
|
||||
final User alertUser = ess.getUser(p);
|
||||
if (alertUser.isAuthorized("essentials.protect.alerts"))
|
||||
{
|
||||
alertUser.sendMessage(warnMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class AntiBuildReloader implements IConf
|
||||
{
|
||||
@Override
|
||||
public void reloadConfig()
|
||||
{
|
||||
for (AntiBuildConfig protectConfig : AntiBuildConfig.values())
|
||||
{
|
||||
if (protectConfig.isList())
|
||||
{
|
||||
protect.getSettingsList().put(protectConfig, ess.getSettings().getProtectList(protectConfig.getConfigName()));
|
||||
}
|
||||
else
|
||||
{
|
||||
protect.getSettingsBoolean().put(protectConfig, ess.getSettings().getProtectBoolean(protectConfig.getConfigName(), protectConfig.getDefaultValueBoolean()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.earth2me.essentials.antibuild;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public interface IAntiBuild extends Plugin
|
||||
{
|
||||
boolean checkProtectionItems(final AntiBuildConfig list, final int id);
|
||||
|
||||
boolean getSettingBool(final AntiBuildConfig protectConfig);
|
||||
|
||||
EssentialsConnect getEssentialsConnect();
|
||||
|
||||
Map<AntiBuildConfig, Boolean> getSettingsBoolean();
|
||||
|
||||
Map<AntiBuildConfig, List<Integer>> getSettingsList();
|
||||
}
|
9
EssentialsAntiBuild/src/plugin.yml
Normal file
9
EssentialsAntiBuild/src/plugin.yml
Normal file
@ -0,0 +1,9 @@
|
||||
# This determines the command prefix when there are conflicts (/name:home, /name:help, etc.)
|
||||
name: EssentialsAntiBuild
|
||||
main: com.earth2me.essentials.antibuild.EssentialsAntiBuild
|
||||
# Note to developers: This next line cannot change, or the automatic versioning system will break.
|
||||
version: TeamCity
|
||||
website: http://www.earth2me.net:8001/
|
||||
description: Provides build protection.
|
||||
authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits]
|
||||
softdepend: [Essentials]
|
@ -172,7 +172,7 @@ public abstract class EssentialsChatPlayer implements Listener
|
||||
}
|
||||
}
|
||||
|
||||
String message = String.format(event.getFormat(), type.concat(sender.getDisplayName()), event.getMessage());
|
||||
String message = type.concat(String.format(event.getFormat(), sender.getDisplayName(), event.getMessage()));
|
||||
synchronized (listeners)
|
||||
{
|
||||
for (Map.Entry<String, IEssentialsChatListener> listener : listeners.entrySet())
|
||||
|
@ -2,7 +2,6 @@ package com.earth2me.essentials.protect;
|
||||
|
||||
import com.earth2me.essentials.IConf;
|
||||
import com.earth2me.essentials.IEssentials;
|
||||
import com.earth2me.essentials.User;
|
||||
import com.earth2me.essentials.protect.data.ProtectedBlockMemory;
|
||||
import com.earth2me.essentials.protect.data.ProtectedBlockMySQL;
|
||||
import com.earth2me.essentials.protect.data.ProtectedBlockSQLite;
|
||||
@ -10,8 +9,6 @@ import java.beans.PropertyVetoException;
|
||||
import static com.earth2me.essentials.I18n._;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
@ -43,23 +40,6 @@ public class EssentialsConnect
|
||||
return ess;
|
||||
}
|
||||
|
||||
public void alert(final User user, final String item, final String type)
|
||||
{
|
||||
final Location loc = user.getLocation();
|
||||
final String warnMessage = _("alertFormat", user.getName(), type, item,
|
||||
loc.getWorld().getName() + "," + loc.getBlockX() + ","
|
||||
+ loc.getBlockY() + "," + loc.getBlockZ());
|
||||
LOGGER.log(Level.WARNING, warnMessage);
|
||||
for (Player p : ess.getServer().getOnlinePlayers())
|
||||
{
|
||||
final User alertUser = ess.getUser(p);
|
||||
if (alertUser.isAuthorized("essentials.protect.alerts"))
|
||||
{
|
||||
alertUser.sendMessage(warnMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class ProtectReloader implements IConf
|
||||
{
|
||||
|
@ -73,13 +73,6 @@ public class EssentialsProtect extends JavaPlugin implements IProtect
|
||||
LOGGER.log(Level.SEVERE, "Essentials not installed or failed to load. Essenials Protect is in emergency mode now.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkProtectionItems(final ProtectConfig list, final int id)
|
||||
{
|
||||
final List<Integer> itemList = settingsList.get(list);
|
||||
return itemList != null && !itemList.isEmpty() && itemList.contains(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IProtectedBlock getStorage()
|
||||
{
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.earth2me.essentials.protect;
|
||||
|
||||
import static com.earth2me.essentials.I18n._;
|
||||
import com.earth2me.essentials.IEssentials;
|
||||
import com.earth2me.essentials.User;
|
||||
import com.earth2me.essentials.protect.data.IProtectedBlock;
|
||||
@ -36,26 +35,9 @@ public class EssentialsProtectBlockListener implements Listener
|
||||
|
||||
final User user = ess.getUser(event.getPlayer());
|
||||
|
||||
if (prot.getSettingBool(ProtectConfig.disable_build) && !user.canBuild())
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
final Block blockPlaced = event.getBlockPlaced();
|
||||
final int id = blockPlaced.getTypeId();
|
||||
|
||||
if (prot.checkProtectionItems(ProtectConfig.blacklist_placement, id) && !user.isAuthorized("essentials.protect.exemptplacement"))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!user.hasPermission("essentials.protect.alerts.notrigger")
|
||||
&& prot.checkProtectionItems(ProtectConfig.alert_on_placement, id))
|
||||
{
|
||||
prot.getEssentialsConnect().alert(user, blockPlaced.getType().toString(), _("alertPlaced"));
|
||||
}
|
||||
|
||||
final Block below = blockPlaced.getRelative(BlockFace.DOWN);
|
||||
if ((below.getType() == Material.RAILS || below.getType() == Material.POWERED_RAIL || below.getType() == Material.DETECTOR_RAIL)
|
||||
@ -234,27 +216,11 @@ public class EssentialsProtectBlockListener implements Listener
|
||||
}
|
||||
final User user = ess.getUser(event.getPlayer());
|
||||
|
||||
if (prot.getSettingBool(ProtectConfig.disable_build) && !user.canBuild())
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
final Block block = event.getBlock();
|
||||
final int typeId = block.getTypeId();
|
||||
|
||||
if (prot.checkProtectionItems(ProtectConfig.blacklist_break, typeId)
|
||||
&& !user.isAuthorized("essentials.protect.exemptbreak"))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
final Material type = block.getType();
|
||||
|
||||
if (!user.hasPermission("essentials.protect.alerts.notrigger")
|
||||
&& prot.checkProtectionItems(ProtectConfig.alert_on_break, typeId))
|
||||
{
|
||||
prot.getEssentialsConnect().alert(user, type.toString(), _("alertBroke"));
|
||||
}
|
||||
final IProtectedBlock storage = prot.getStorage();
|
||||
|
||||
if (user.isAuthorized("essentials.protect.admin"))
|
||||
@ -333,11 +299,6 @@ public class EssentialsProtectBlockListener implements Listener
|
||||
}
|
||||
for (Block block : event.getBlocks())
|
||||
{
|
||||
if (prot.checkProtectionItems(ProtectConfig.blacklist_piston, block.getTypeId()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS
|
||||
|| block.getType() == Material.RAILS
|
||||
|| block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL
|
||||
@ -385,11 +346,6 @@ public class EssentialsProtectBlockListener implements Listener
|
||||
return;
|
||||
}
|
||||
final Block block = event.getRetractLocation().getBlock();
|
||||
if (prot.checkProtectionItems(ProtectConfig.blacklist_piston, block.getTypeId()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if ((block.getRelative(BlockFace.UP).getType() == Material.RAILS
|
||||
|| block.getType() == Material.RAILS
|
||||
|| block.getRelative(BlockFace.UP).getType() == Material.POWERED_RAIL
|
||||
|
@ -3,14 +3,12 @@ package com.earth2me.essentials.protect;
|
||||
import static com.earth2me.essentials.I18n._;
|
||||
import com.earth2me.essentials.IEssentials;
|
||||
import com.earth2me.essentials.User;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
||||
public class EssentialsProtectPlayerListener implements Listener
|
||||
@ -30,38 +28,6 @@ public class EssentialsProtectPlayerListener implements Listener
|
||||
// Do not return if cancelled, because the interact event has 2 cancelled states.
|
||||
final User user = ess.getUser(event.getPlayer());
|
||||
|
||||
if (event.hasItem()
|
||||
&& (event.getItem().getType() == Material.WATER_BUCKET
|
||||
|| event.getItem().getType() == Material.LAVA_BUCKET)
|
||||
&& prot.getSettingBool(ProtectConfig.disable_build) && !user.canBuild())
|
||||
{
|
||||
if (ess.getSettings().warnOnBuildDisallow())
|
||||
{
|
||||
user.sendMessage(_("buildAlert"));
|
||||
}
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (prot.getSettingBool(ProtectConfig.disable_use) && !user.canBuild())
|
||||
{
|
||||
if (ess.getSettings().warnOnBuildDisallow())
|
||||
{
|
||||
user.sendMessage(_("buildAlert"));
|
||||
}
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
final ItemStack item = event.getItem();
|
||||
if (item != null
|
||||
&& prot.checkProtectionItems(ProtectConfig.blacklist_usage, item.getTypeId())
|
||||
&& !user.isAuthorized("essentials.protect.exemptusage"))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (user.isAuthorized("essentials.protect.ownerinfo") && event.getAction() == Action.RIGHT_CLICK_BLOCK)
|
||||
{
|
||||
final StringBuilder stringBuilder = new StringBuilder();
|
||||
@ -82,11 +48,5 @@ public class EssentialsProtectPlayerListener implements Listener
|
||||
user.sendMessage(_("protectionOwner", ownerNames));
|
||||
}
|
||||
}
|
||||
if (item != null
|
||||
&& !user.hasPermission("essentials.protect.alerts.notrigger")
|
||||
&& prot.checkProtectionItems(ProtectConfig.alert_on_use, item.getTypeId()))
|
||||
{
|
||||
prot.getEssentialsConnect().alert(user, item.getType().toString(), _("alertUsed"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,8 +8,6 @@ import org.bukkit.plugin.Plugin;
|
||||
|
||||
public interface IProtect extends Plugin
|
||||
{
|
||||
boolean checkProtectionItems(final ProtectConfig list, final int id);
|
||||
|
||||
boolean getSettingBool(final ProtectConfig protectConfig);
|
||||
|
||||
String getSettingString(final ProtectConfig protectConfig);
|
||||
|
@ -10,8 +10,6 @@ public enum ProtectConfig
|
||||
memstore("protect.memstore", false),
|
||||
disable_contactdmg("protect.disable.contactdmg", false),
|
||||
disable_lavadmg("protect.disable.lavadmg", false),
|
||||
disable_build("protect.disable.build", true),
|
||||
disable_use("protect.disable.use", true),
|
||||
disable_pvp("protect.disable.pvp", false),
|
||||
disable_projectiles("protect.disable.projectiles", false),
|
||||
disable_fall("protect.disable.fall", false),
|
||||
@ -47,14 +45,7 @@ public enum ProtectConfig
|
||||
protect_below_rails("protect.protect.block-below", true),
|
||||
protect_signs("protect.protect.signs", true),
|
||||
protect_against_signs("protect.protect.block-below", true),
|
||||
enderdragon_fakeexplosions("protect.enderdragon-fakeexplosions", false),
|
||||
alert_on_placement("protect.alert.on-placement"),
|
||||
alert_on_use("protect.alert.on-use"),
|
||||
alert_on_break("protect.alert.on-break"),
|
||||
blacklist_placement("protect.blacklist.placement"),
|
||||
blacklist_usage("protect.blacklist.usage"),
|
||||
blacklist_break("protect.blacklist.break"),
|
||||
blacklist_piston("protect.blacklist.piston");
|
||||
enderdragon_fakeexplosions("protect.enderdragon-fakeexplosions", false);
|
||||
private final String configName;
|
||||
private final String defValueString;
|
||||
private final boolean defValueBoolean;
|
||||
|
@ -1,8 +0,0 @@
|
||||
build.xml.data.CRC32=fd4b98a9
|
||||
build.xml.script.CRC32=334f342d
|
||||
build.xml.stylesheet.CRC32=28e38971@1.44.1.45
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=fd4b98a9
|
||||
nbproject/build-impl.xml.script.CRC32=966cfa4e
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
|
@ -1 +0,0 @@
|
||||
DoNotUseThreads
|
@ -1,39 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public abstract class AbstractWorkListener
|
||||
{
|
||||
public AbstractWorkListener(final Plugin plugin, final VersionInfo newVersionInfo)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
this.newVersionInfo = newVersionInfo;
|
||||
}
|
||||
private final transient Plugin plugin;
|
||||
private final transient VersionInfo newVersionInfo;
|
||||
|
||||
public final void onWorkAbort()
|
||||
{
|
||||
onWorkAbort(null);
|
||||
}
|
||||
|
||||
public abstract void onWorkAbort(String message);
|
||||
|
||||
public final void onWorkDone()
|
||||
{
|
||||
onWorkDone(null);
|
||||
}
|
||||
|
||||
public abstract void onWorkDone(String message);
|
||||
|
||||
public VersionInfo getNewVersionInfo()
|
||||
{
|
||||
return newVersionInfo;
|
||||
}
|
||||
|
||||
public Plugin getPlugin()
|
||||
{
|
||||
return plugin;
|
||||
}
|
||||
}
|
@ -1,171 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import com.earth2me.essentials.update.chat.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
|
||||
public class EssentialsHelp implements Listener
|
||||
{
|
||||
private transient Player chatUser;
|
||||
private final transient Server server;
|
||||
private final transient Plugin plugin;
|
||||
private transient IrcBot ircBot;
|
||||
private final transient Map<String, Command> commands = new HashMap<String, Command>();
|
||||
|
||||
public EssentialsHelp(final Plugin plugin)
|
||||
{
|
||||
super();
|
||||
this.plugin = plugin;
|
||||
this.server = plugin.getServer();
|
||||
commands.put("!help", new HelpCommand());
|
||||
commands.put("!list", new ListCommand());
|
||||
commands.put("!startup", new StartupCommand(plugin));
|
||||
commands.put("!errors", new ErrorsCommand(plugin));
|
||||
commands.put("!config", new ConfigCommand(plugin));
|
||||
}
|
||||
|
||||
public void registerEvents()
|
||||
{
|
||||
final PluginManager pluginManager = server.getPluginManager();
|
||||
pluginManager.registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
public void onCommand(final CommandSender sender)
|
||||
{
|
||||
if (sender instanceof Player && sender.hasPermission("essentials.helpchat"))
|
||||
{
|
||||
if (chatUser == null)
|
||||
{
|
||||
chatUser = (Player)sender;
|
||||
ircBot = null;
|
||||
sender.sendMessage("You will be connected to the Essentials Help Chat.");
|
||||
sender.sendMessage("All your chat messages will be forwarded to the channel. You can't chat with other players on your server while in help chat, but you can use commands.");
|
||||
sender.sendMessage("Please be patient, if noone is available, check back later.");
|
||||
sender.sendMessage("Type !help to get a list of all commands.");
|
||||
sender.sendMessage("Type !quit to leave the channel.");
|
||||
sender.sendMessage("Do you want to join the channel now? (yes/no)");
|
||||
}
|
||||
if (!chatUser.equals(sender))
|
||||
{
|
||||
sender.sendMessage("The player " + chatUser.getDisplayName() + " is already using the essentialshelp.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendMessage("Please run the command as op from in game.");
|
||||
}
|
||||
}
|
||||
|
||||
public void onDisable()
|
||||
{
|
||||
closeConnection();
|
||||
}
|
||||
|
||||
private boolean sendChatMessage(final Player player, final String message)
|
||||
{
|
||||
final String messageCleaned = message.trim();
|
||||
if (messageCleaned.isEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (ircBot == null)
|
||||
{
|
||||
return handleAnswer(messageCleaned, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ircBot.isKicked())
|
||||
{
|
||||
closeConnection();
|
||||
return false;
|
||||
}
|
||||
final String lowMessage = messageCleaned.toLowerCase(Locale.ENGLISH);
|
||||
if (lowMessage.startsWith("!quit"))
|
||||
{
|
||||
closeConnection();
|
||||
player.sendMessage("Connection closed.");
|
||||
return true;
|
||||
}
|
||||
if (!ircBot.isConnected() || ircBot.getChannels().length == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (handleCommands(lowMessage, player))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
ircBot.sendMessage(messageCleaned);
|
||||
chatUser.sendMessage("§6" + ircBot.getNick() + ": §7" + messageCleaned);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private void closeConnection()
|
||||
{
|
||||
chatUser = null;
|
||||
if (ircBot != null)
|
||||
{
|
||||
ircBot.quit();
|
||||
ircBot = null;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean handleAnswer(final String message, final Player player)
|
||||
{
|
||||
if (message.equalsIgnoreCase("yes"))
|
||||
{
|
||||
player.sendMessage("Connecting...");
|
||||
connectToIRC(player);
|
||||
return true;
|
||||
}
|
||||
if (message.equalsIgnoreCase("no") || message.equalsIgnoreCase("!quit"))
|
||||
{
|
||||
chatUser = null;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean handleCommands(final String lowMessage, final Player player)
|
||||
{
|
||||
final String[] parts = lowMessage.split(" ");
|
||||
if (commands.containsKey(parts[0]))
|
||||
{
|
||||
commands.get(parts[0]).run(ircBot, player);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void connectToIRC(final Player player)
|
||||
{
|
||||
ircBot = new IrcBot(player, "Ess_" + player.getName(), UsernameUtil.createUsername(player));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerChat(final AsyncPlayerChatEvent event)
|
||||
{
|
||||
if (event.getPlayer() == chatUser)
|
||||
{
|
||||
final boolean success = sendChatMessage(event.getPlayer(), event.getMessage());
|
||||
event.setCancelled(success);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerQuit(final PlayerQuitEvent event)
|
||||
{
|
||||
closeConnection();
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
|
||||
public class EssentialsUpdate extends JavaPlugin
|
||||
{
|
||||
private transient EssentialsHelp essentialsHelp;
|
||||
private transient UpdateProcess updateProcess;
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
if (!getDataFolder().exists() && !getDataFolder().mkdirs())
|
||||
{
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Could not create data folder: {0}", getDataFolder().getPath());
|
||||
}
|
||||
essentialsHelp = new EssentialsHelp(this);
|
||||
essentialsHelp.registerEvents();
|
||||
|
||||
final UpdateCheck updateCheck = new UpdateCheck(this);
|
||||
updateCheck.checkForUpdates();
|
||||
updateProcess = new UpdateProcess(this, updateCheck);
|
||||
updateProcess.registerEvents();
|
||||
|
||||
Bukkit.getLogger().log(Level.INFO, "EssentialsUpdate {0} loaded.", getDescription().getVersion());
|
||||
|
||||
if (updateCheck.isEssentialsInstalled())
|
||||
{
|
||||
updateCheck.scheduleUpdateTask();
|
||||
}
|
||||
else
|
||||
{
|
||||
Bukkit.getLogger().info("Essentials is ready for installation. Join the game and follow the instructions.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable()
|
||||
{
|
||||
essentialsHelp.onDisable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args)
|
||||
{
|
||||
if (command.getName().equalsIgnoreCase("essentialsupdate"))
|
||||
{
|
||||
updateProcess.onCommand(sender);
|
||||
}
|
||||
if (command.getName().equalsIgnoreCase("essentialshelp"))
|
||||
{
|
||||
essentialsHelp.onCommand(sender);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,113 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.io.*;
|
||||
import java.math.BigInteger;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
|
||||
public class GetFile
|
||||
{
|
||||
private transient URLConnection connection;
|
||||
private transient MessageDigest digest;
|
||||
|
||||
public GetFile(final String urlString) throws MalformedURLException, IOException
|
||||
{
|
||||
this(new URL(urlString));
|
||||
}
|
||||
|
||||
public GetFile(final URL url) throws IOException
|
||||
{
|
||||
this.connection = url.openConnection();
|
||||
this.connection.setConnectTimeout(1000);
|
||||
this.connection.setReadTimeout(5000);
|
||||
this.connection.setUseCaches(false);
|
||||
this.connection.connect();
|
||||
final int respCode = ((HttpURLConnection)this.connection).getResponseCode();
|
||||
if (respCode >= 300 && respCode < 400 && this.connection.getHeaderField("Location") != null)
|
||||
{
|
||||
connection.getInputStream().close();
|
||||
final URL redirect = new URL(this.connection.getHeaderField("Location"));
|
||||
this.connection = redirect.openConnection();
|
||||
this.connection.setConnectTimeout(1000);
|
||||
this.connection.setReadTimeout(5000);
|
||||
this.connection.setUseCaches(false);
|
||||
this.connection.connect();
|
||||
}
|
||||
}
|
||||
|
||||
public void saveTo(final File file) throws IOException
|
||||
{
|
||||
try
|
||||
{
|
||||
saveTo(file, null);
|
||||
}
|
||||
catch (NoSuchAlgorithmException ex)
|
||||
{
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void saveTo(final File file, final String key) throws IOException, NoSuchAlgorithmException
|
||||
{
|
||||
if (key != null)
|
||||
{
|
||||
digest = MessageDigest.getInstance("SHA256");
|
||||
}
|
||||
final byte[] buffer = new byte[1024 * 8];
|
||||
boolean brokenFile = false;
|
||||
final BufferedInputStream input = new BufferedInputStream(connection.getInputStream());
|
||||
try
|
||||
{
|
||||
final BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file));
|
||||
try
|
||||
{
|
||||
int length;
|
||||
do
|
||||
{
|
||||
length = input.read(buffer);
|
||||
if (length >= 0)
|
||||
{
|
||||
if (key != null)
|
||||
{
|
||||
digest.update(buffer, 0, length);
|
||||
}
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
}
|
||||
while (length >= 0);
|
||||
if (key != null)
|
||||
{
|
||||
final byte[] checksum = digest.digest();
|
||||
final String checksumString = new BigInteger(checksum).toString(36);
|
||||
if (!checksumString.equals(key))
|
||||
{
|
||||
brokenFile = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
output.close();
|
||||
}
|
||||
if (brokenFile && !file.delete())
|
||||
{
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Could not delete file {0}", file.getPath());
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
input.close();
|
||||
}
|
||||
if (brokenFile)
|
||||
{
|
||||
throw new IOException("Checksum check failed.");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import org.bukkit.configuration.Configuration;
|
||||
|
||||
|
||||
public class ModuleInfo
|
||||
{
|
||||
private final transient String url;
|
||||
private final transient String version;
|
||||
private final transient String hash;
|
||||
|
||||
public ModuleInfo(final Configuration updateConfig, final String path)
|
||||
{
|
||||
url = updateConfig.getString(path + ".url", null);
|
||||
version = updateConfig.getString(path + ".version", null);
|
||||
hash = updateConfig.getString(path + ".hash", null);
|
||||
}
|
||||
|
||||
public URL getUrl() throws MalformedURLException
|
||||
{
|
||||
return new URL(url);
|
||||
}
|
||||
|
||||
public String getVersion()
|
||||
{
|
||||
return version;
|
||||
}
|
||||
|
||||
public String getHash()
|
||||
{
|
||||
return hash;
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
public class PastieUpload
|
||||
{
|
||||
private final transient PostToUrl connection;
|
||||
|
||||
public PastieUpload() throws MalformedURLException
|
||||
{
|
||||
connection = new PostToUrl(new URL("http://pastie.org/pastes"));
|
||||
}
|
||||
|
||||
public String send(final String data) throws IOException
|
||||
{
|
||||
final Map<String, Object> map = new HashMap<String, Object>();
|
||||
map.put("paste[parser_id]", "19");
|
||||
map.put("paste[authorization]", "burger");
|
||||
map.put("paste[body]", data);
|
||||
map.put("paste[restricted]", "1");
|
||||
final String html = connection.send(map);
|
||||
final Matcher matcher = Pattern.compile("(?s).*\\?key=([a-z0-9]+).*").matcher(html);
|
||||
if (matcher.matches())
|
||||
{
|
||||
final String key = matcher.group(1);
|
||||
return "http://pastie.org/private/" + key;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IOException("Failed to upload to pastie.org");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.math.BigInteger;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
|
||||
public class PostToUrl
|
||||
{
|
||||
private final transient URL url;
|
||||
private final transient String boundary;
|
||||
private final transient Random random = new Random();
|
||||
private final static String CRLF = "\r\n";
|
||||
private final static Charset UTF8 = Charset.forName("utf-8");
|
||||
|
||||
public PostToUrl(final URL url)
|
||||
{
|
||||
this.url = url;
|
||||
final byte[] bytes = new byte[32];
|
||||
random.nextBytes(bytes);
|
||||
this.boundary = "----------" + new BigInteger(bytes).toString(Character.MAX_RADIX) + "_$";
|
||||
}
|
||||
|
||||
public String send(final Map<String, Object> data) throws IOException
|
||||
{
|
||||
final URLConnection connection = url.openConnection();
|
||||
connection.setRequestProperty("content-type", "multipart/form-data; boundary=" + boundary);
|
||||
final StringBuilder dataBuilder = new StringBuilder();
|
||||
for (Map.Entry<String, Object> entry : data.entrySet())
|
||||
{
|
||||
if (entry.getValue() instanceof String)
|
||||
{
|
||||
dataBuilder.append("--").append(boundary).append(CRLF);
|
||||
dataBuilder.append("Content-Disposition: form-data; name=\"").append(entry.getKey()).append('"').append(CRLF);
|
||||
dataBuilder.append(CRLF);
|
||||
dataBuilder.append(entry.getValue()).append(CRLF);
|
||||
}
|
||||
// TODO: Add support for file upload
|
||||
}
|
||||
dataBuilder.append("--").append(boundary).append("--").append(CRLF);
|
||||
dataBuilder.append(CRLF);
|
||||
connection.setDoOutput(true);
|
||||
final byte[] message = dataBuilder.toString().getBytes(UTF8);
|
||||
connection.setRequestProperty("content-length", Integer.toString(message.length));
|
||||
connection.connect();
|
||||
final OutputStream stream = connection.getOutputStream();
|
||||
stream.write(message);
|
||||
stream.close();
|
||||
final BufferedReader page = new BufferedReader(new InputStreamReader(connection.getInputStream(), UTF8));
|
||||
final StringBuilder input = new StringBuilder();
|
||||
String line;
|
||||
while ((line = page.readLine()) != null)
|
||||
{
|
||||
input.append(line).append("\n");
|
||||
}
|
||||
page.close();
|
||||
return input.toString();
|
||||
}
|
||||
}
|
@ -1,202 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
|
||||
public class UpdateCheck
|
||||
{
|
||||
private transient CheckResult result = CheckResult.UNKNOWN;
|
||||
private transient Version currentVersion;
|
||||
private transient Version newVersion = null;
|
||||
private transient int bukkitResult = 0;
|
||||
private transient UpdateFile updateFile;
|
||||
private final static int CHECK_INTERVAL = 20 * 60 * 60 * 6;
|
||||
private final transient Plugin plugin;
|
||||
private transient boolean essentialsInstalled;
|
||||
|
||||
public UpdateCheck(final Plugin plugin)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
updateFile = new UpdateFile(plugin);
|
||||
checkForEssentials();
|
||||
}
|
||||
|
||||
private void checkForEssentials()
|
||||
{
|
||||
final PluginManager pluginManager = plugin.getServer().getPluginManager();
|
||||
final Plugin essentials = pluginManager.getPlugin("Essentials");
|
||||
essentialsInstalled = essentials != null;
|
||||
if (essentialsInstalled)
|
||||
{
|
||||
currentVersion = new Version(essentials.getDescription().getVersion());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (new File(plugin.getDataFolder().getParentFile(), "Essentials.jar").exists())
|
||||
{
|
||||
Bukkit.getLogger().severe("Essentials.jar found, but not recognized by Bukkit. Broken download?");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void scheduleUpdateTask()
|
||||
{
|
||||
plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
updateFile = new UpdateFile(plugin);
|
||||
checkForUpdates();
|
||||
}
|
||||
}, CHECK_INTERVAL, CHECK_INTERVAL);
|
||||
}
|
||||
|
||||
public boolean isEssentialsInstalled()
|
||||
{
|
||||
return essentialsInstalled;
|
||||
}
|
||||
|
||||
public CheckResult getResult()
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
public int getNewBukkitVersion()
|
||||
{
|
||||
return bukkitResult;
|
||||
}
|
||||
|
||||
public VersionInfo getNewVersionInfo()
|
||||
{
|
||||
return updateFile.getVersions().get(newVersion);
|
||||
}
|
||||
|
||||
|
||||
public enum CheckResult
|
||||
{
|
||||
NEW_ESS, NEW_ESS_BUKKIT, NEW_BUKKIT, OK, UNKNOWN
|
||||
}
|
||||
|
||||
public void checkForUpdates()
|
||||
{
|
||||
if (currentVersion == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
final Map<Version, VersionInfo> versions = updateFile.getVersions();
|
||||
final int bukkitVersion = getBukkitVersion();
|
||||
Version higher = null;
|
||||
Version found = null;
|
||||
Version lower = null;
|
||||
int bukkitHigher = 0;
|
||||
int bukkitLower = 0;
|
||||
for (Entry<Version, VersionInfo> entry : versions.entrySet())
|
||||
{
|
||||
final int minBukkit = entry.getValue().getMinBukkit();
|
||||
final int maxBukkit = entry.getValue().getMaxBukkit();
|
||||
if (minBukkit == 0 || maxBukkit == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (bukkitVersion <= maxBukkit)
|
||||
{
|
||||
if (bukkitVersion < minBukkit)
|
||||
{
|
||||
if (higher == null || higher.compareTo(entry.getKey()) < 0)
|
||||
{
|
||||
|
||||
higher = entry.getKey();
|
||||
bukkitHigher = minBukkit;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (found == null || found.compareTo(entry.getKey()) < 0)
|
||||
{
|
||||
found = entry.getKey();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (lower == null || lower.compareTo(entry.getKey()) < 0)
|
||||
{
|
||||
lower = entry.getKey();
|
||||
bukkitLower = minBukkit;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (found != null)
|
||||
{
|
||||
if (found.compareTo(currentVersion) > 0)
|
||||
{
|
||||
result = CheckResult.NEW_ESS;
|
||||
newVersion = found;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = CheckResult.OK;
|
||||
}
|
||||
}
|
||||
else if (higher != null)
|
||||
{
|
||||
if (higher.compareTo(currentVersion) > 0)
|
||||
{
|
||||
newVersion = higher;
|
||||
result = CheckResult.NEW_ESS_BUKKIT;
|
||||
bukkitResult = bukkitHigher;
|
||||
}
|
||||
else if (higher.compareTo(currentVersion) < 0)
|
||||
{
|
||||
result = CheckResult.UNKNOWN;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = CheckResult.NEW_BUKKIT;
|
||||
bukkitResult = bukkitHigher;
|
||||
}
|
||||
}
|
||||
else if (lower != null)
|
||||
{
|
||||
if (lower.compareTo(currentVersion) > 0)
|
||||
{
|
||||
result = CheckResult.NEW_ESS_BUKKIT;
|
||||
newVersion = lower;
|
||||
bukkitResult = bukkitLower;
|
||||
}
|
||||
else if (lower.compareTo(currentVersion) < 0)
|
||||
{
|
||||
result = CheckResult.UNKNOWN;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = CheckResult.NEW_BUKKIT;
|
||||
bukkitResult = bukkitLower;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private int getBukkitVersion()
|
||||
{
|
||||
final Matcher versionMatch = Pattern.compile("git-Bukkit-([0-9]+).([0-9]+).([0-9]+)-[0-9]+-[0-9a-z]+-b([0-9]+)jnks.*").matcher(plugin.getServer().getVersion());
|
||||
if (versionMatch.matches())
|
||||
{
|
||||
return Integer.parseInt(versionMatch.group(4));
|
||||
}
|
||||
throw new NumberFormatException("Bukkit Version changed!");
|
||||
}
|
||||
|
||||
public Version getNewVersion()
|
||||
{
|
||||
return newVersion;
|
||||
}
|
||||
}
|
@ -1,205 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
import java.security.KeyFactory;
|
||||
import java.security.PublicKey;
|
||||
import java.security.Signature;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public class UpdateFile
|
||||
{
|
||||
private final static Logger LOGGER = Bukkit.getLogger();
|
||||
private final static String UPDATE_URL = "http://goo.gl/67jev";
|
||||
private final static BigInteger PUBLIC_KEY = new BigInteger("5ha6a2d4qdy17ttkg8evh74sl5a87djojwenu12k1lvy8ui6003e6l06rntczpoh99mhc3txj8mqlxw111oyy9yl7s7qpyluyzix3j1odxrxx4u52gxvyu6qiteapczkzvi7rxgeqsozz7b19rdx73a7quo9ybwpz1cr82r7x5k0pg2a73pjjsv2j1awr13azo7klrcxp9y5xxwf5qv1s3tw4zqftli18u0ek5qkbzfbgk1v5n2f11pkwwk6p0mibrn26wnjbv11vyiqgu95o7busmt6vf5q7grpcenl637w83mbin56s3asj1131b2mscj9xep3cbj7la9tgsxl5bj87vzy8sk2d34kzwqdqgh9nry43nqqus12l1stmiv184r8r3jcy8w43e8h1u1mzklldb5eytkuhayqik8l3ns04hwt8sgacvw534be8sx26qrn5s1", 36);
|
||||
private final transient File file;
|
||||
private transient YamlConfiguration updateConfig;
|
||||
private final transient Plugin plugin;
|
||||
private final transient TreeMap<Version, VersionInfo> versions = new TreeMap<Version, VersionInfo>();
|
||||
|
||||
public UpdateFile(final Plugin plugin)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
final long lastUpdate = Long.parseLong(plugin.getConfig().getString("lastupdate", "0"));
|
||||
file = new File(plugin.getDataFolder(), "update.yml");
|
||||
if (lastUpdate < System.currentTimeMillis() - 1000 * 60 * 60 * 6 || !file.exists())
|
||||
{
|
||||
if (file.exists() && !file.delete())
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, "Could not delete file update.yml!");
|
||||
return;
|
||||
}
|
||||
if (!downloadFile() || !checkFile())
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, "Could not download and verify file update.yml!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
readVersions();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, "Could not load update.yml!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean downloadFile()
|
||||
{
|
||||
GetFile getFile;
|
||||
try
|
||||
{
|
||||
getFile = new GetFile(UPDATE_URL);
|
||||
getFile.saveTo(file);
|
||||
plugin.getConfig().set("lastupdate", System.currentTimeMillis());
|
||||
plugin.getConfig().save(new File(plugin.getDataFolder(), "config.yml"));
|
||||
return true;
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, "Error while downloading update.yml", ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkFile()
|
||||
{
|
||||
BufferedInputStream bis = null;
|
||||
try
|
||||
{
|
||||
bis = new BufferedInputStream(new FileInputStream(file));
|
||||
if (bis.read() != '#')
|
||||
{
|
||||
throw new IOException("File has to start with #");
|
||||
}
|
||||
final StringBuilder length = new StringBuilder();
|
||||
final StringBuilder signature = new StringBuilder();
|
||||
boolean isSignature = false;
|
||||
do
|
||||
{
|
||||
final int cur = bis.read();
|
||||
if (cur == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (cur == ':')
|
||||
{
|
||||
isSignature = true;
|
||||
}
|
||||
else if (cur == '\n')
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if ((cur >= '0' && cur <= '9')
|
||||
|| (cur >= 'a' && cur <= 'z'))
|
||||
{
|
||||
if (isSignature)
|
||||
{
|
||||
signature.append((char)cur);
|
||||
}
|
||||
else
|
||||
{
|
||||
length.append((char)cur);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IOException("Illegal character in signature!");
|
||||
}
|
||||
}
|
||||
while (true);
|
||||
if (length.length() == 0 || signature.length() == 0)
|
||||
{
|
||||
throw new IOException("Broken signature!");
|
||||
}
|
||||
final int sigLength = new BigInteger(length.toString(), 36).intValue();
|
||||
if (sigLength < 0 || sigLength > 2048)
|
||||
{
|
||||
throw new IOException("Invalid signature length!");
|
||||
}
|
||||
final byte[] sigBytes = new BigInteger(signature.toString(), 36).toByteArray();
|
||||
if (sigLength < sigBytes.length)
|
||||
{
|
||||
throw new IOException("Length is less then available bytes.");
|
||||
}
|
||||
byte[] realBytes;
|
||||
if (sigLength == sigBytes.length)
|
||||
{
|
||||
realBytes = sigBytes;
|
||||
}
|
||||
else
|
||||
{
|
||||
realBytes = new byte[sigLength];
|
||||
System.arraycopy(sigBytes, 0, realBytes, sigLength - sigBytes.length, sigBytes.length);
|
||||
}
|
||||
final X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(PUBLIC_KEY.toByteArray());
|
||||
final KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||
final PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);
|
||||
final Signature rsa = Signature.getInstance("SHA256withRSA");
|
||||
rsa.initVerify(pubKey);
|
||||
final byte[] buffer = new byte[2048];
|
||||
int readLength;
|
||||
do
|
||||
{
|
||||
readLength = bis.read(buffer);
|
||||
if (readLength >= 0)
|
||||
{
|
||||
rsa.update(buffer, 0, readLength);
|
||||
}
|
||||
}
|
||||
while (readLength >= 0);
|
||||
return rsa.verify(realBytes);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, ex.getMessage(), ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if (bis != null)
|
||||
{
|
||||
bis.close();
|
||||
}
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void readVersions() throws Exception
|
||||
{
|
||||
updateConfig = new YamlConfiguration();
|
||||
updateConfig.load(file);
|
||||
versions.clear();
|
||||
for (String versionString : updateConfig.getKeys(false))
|
||||
{
|
||||
final Version version = new Version(versionString);
|
||||
final VersionInfo info = new VersionInfo(updateConfig, versionString);
|
||||
versions.put(version, info);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<Version, VersionInfo> getVersions()
|
||||
{
|
||||
return Collections.unmodifiableMap(versions.descendingMap());
|
||||
}
|
||||
}
|
@ -1,199 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import com.earth2me.essentials.update.states.InstallationFinishedEvent;
|
||||
import com.earth2me.essentials.update.states.StateMachine;
|
||||
import com.earth2me.essentials.update.tasks.SelfUpdate;
|
||||
import java.util.logging.Level;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public class UpdateProcess implements Listener
|
||||
{
|
||||
private transient Player currentPlayer;
|
||||
private final transient Plugin plugin;
|
||||
private final transient UpdateCheck updateCheck;
|
||||
private transient StateMachine stateMachine;
|
||||
|
||||
public UpdateProcess(final Plugin plugin, final UpdateCheck updateCheck)
|
||||
{
|
||||
super();
|
||||
this.plugin = plugin;
|
||||
this.updateCheck = updateCheck;
|
||||
}
|
||||
|
||||
public void registerEvents()
|
||||
{
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
public boolean selfUpdate()
|
||||
{
|
||||
if (new Version(plugin.getDescription().getVersion()).compareTo(updateCheck.getNewVersion()) < 0)
|
||||
{
|
||||
if (currentPlayer != null)
|
||||
{
|
||||
currentPlayer.sendMessage("A newer version of EssentialsUpdate is found. Downloading new file and reloading server.");
|
||||
}
|
||||
Bukkit.getLogger().log(Level.INFO, "A newer version of EssentialsUpdate is found. Downloading new file and reloading server.");
|
||||
new SelfUpdate(new AbstractWorkListener(plugin, updateCheck.getNewVersionInfo())
|
||||
{
|
||||
@Override
|
||||
public void onWorkAbort(final String message)
|
||||
{
|
||||
if (message != null && !message.isEmpty()
|
||||
&& UpdateProcess.this.currentPlayer != null
|
||||
&& UpdateProcess.this.currentPlayer.isOnline())
|
||||
{
|
||||
UpdateProcess.this.currentPlayer.sendMessage(message);
|
||||
}
|
||||
if (message != null && !message.isEmpty())
|
||||
{
|
||||
Bukkit.getLogger().log(Level.SEVERE, message);
|
||||
}
|
||||
UpdateProcess.this.currentPlayer = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWorkDone(final String message)
|
||||
{
|
||||
if (message != null && !message.isEmpty()
|
||||
&& UpdateProcess.this.currentPlayer != null
|
||||
&& UpdateProcess.this.currentPlayer.isOnline())
|
||||
{
|
||||
UpdateProcess.this.currentPlayer.sendMessage(message);
|
||||
}
|
||||
if (message != null && !message.isEmpty())
|
||||
{
|
||||
Bukkit.getLogger().log(Level.INFO, message);
|
||||
}
|
||||
UpdateProcess.this.currentPlayer = null;
|
||||
}
|
||||
}).start();
|
||||
return true;
|
||||
}
|
||||
if (updateCheck.getResult() == UpdateCheck.CheckResult.NEW_ESS_BUKKIT)
|
||||
{
|
||||
final String message = "Please update bukkit to version " + updateCheck.getNewBukkitVersion() + " before updating Essentials.";
|
||||
if (currentPlayer != null)
|
||||
{
|
||||
currentPlayer.sendMessage(message);
|
||||
}
|
||||
Bukkit.getLogger().log(Level.INFO, message);
|
||||
currentPlayer = null;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInstallationFinished(final InstallationFinishedEvent event)
|
||||
{
|
||||
UpdateProcess.this.currentPlayer = null;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onPlayerChat(final AsyncPlayerChatEvent event)
|
||||
{
|
||||
if (event.getPlayer() == currentPlayer)
|
||||
{
|
||||
final StateMachine.MachineResult result = stateMachine.reactOnMessage(event.getMessage());
|
||||
if (result == StateMachine.MachineResult.ABORT)
|
||||
{
|
||||
currentPlayer.sendMessage("Installation wizard aborted. You can restart it using /essentialsupdate.");
|
||||
currentPlayer = null;
|
||||
}
|
||||
if (result == StateMachine.MachineResult.DONE)
|
||||
{
|
||||
startWork();
|
||||
}
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerJoin(final PlayerJoinEvent event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (currentPlayer.getName().equals(player.getName()))
|
||||
{
|
||||
currentPlayer = player;
|
||||
player.sendMessage("You quit the game, while the installation wizard was running.");
|
||||
player.sendMessage("The installation wizard will now resume.");
|
||||
player.sendMessage("You can exit the wizard by typing quit into the chat.");
|
||||
stateMachine.resumeInstallation(player);
|
||||
}
|
||||
if (player.hasPermission("essentials.update") && !updateCheck.isEssentialsInstalled())
|
||||
{
|
||||
player.sendMessage("Hello " + player.getDisplayName());
|
||||
player.sendMessage("Please type /essentialsupdate into the chat to start the installation of Essentials.");
|
||||
}
|
||||
if (player.hasPermission("essentials.update"))
|
||||
{
|
||||
final UpdateCheck.CheckResult result = updateCheck.getResult();
|
||||
switch (result)
|
||||
{
|
||||
case NEW_ESS:
|
||||
player.sendMessage("The new version " + updateCheck.getNewVersion().toString() + " for Essentials is available. Please type /essentialsupdate to update.");
|
||||
break;
|
||||
case NEW_BUKKIT:
|
||||
player.sendMessage("Your bukkit version is not the recommended build for Essentials, please update to version " + updateCheck.getNewBukkitVersion() + ".");
|
||||
break;
|
||||
case NEW_ESS_BUKKIT:
|
||||
player.sendMessage("There is a new version " + updateCheck.getNewVersion().toString() + " of Essentials for Bukkit " + updateCheck.getNewBukkitVersion());
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onCommand(final CommandSender sender)
|
||||
{
|
||||
if (sender instanceof Player && sender.hasPermission("essentials.update"))
|
||||
{
|
||||
if (currentPlayer == null)
|
||||
{
|
||||
currentPlayer = (Player)sender;
|
||||
if (selfUpdate())
|
||||
{
|
||||
return;
|
||||
}
|
||||
stateMachine = new StateMachine(plugin, currentPlayer, updateCheck);
|
||||
final StateMachine.MachineResult result = stateMachine.askQuestion();
|
||||
if (result == StateMachine.MachineResult.DONE)
|
||||
{
|
||||
startWork();
|
||||
}
|
||||
}
|
||||
if (!currentPlayer.equals(sender))
|
||||
{
|
||||
sender.sendMessage("The player " + currentPlayer.getDisplayName() + " is already using the wizard.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendMessage("Please run the command as op from in game.");
|
||||
}
|
||||
}
|
||||
|
||||
private void startWork()
|
||||
{
|
||||
currentPlayer.sendMessage("Installation wizard done. Starting installation.");
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
stateMachine.startWork();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -1,173 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
public class Version implements Comparable<Version>
|
||||
{
|
||||
public enum Type
|
||||
{
|
||||
STABLE, PREVIEW, DEVELOPER
|
||||
}
|
||||
|
||||
public int getMajor()
|
||||
{
|
||||
return major;
|
||||
}
|
||||
|
||||
public int getMinor()
|
||||
{
|
||||
return minor;
|
||||
}
|
||||
|
||||
public int getBuild()
|
||||
{
|
||||
return build;
|
||||
}
|
||||
|
||||
public Type getType()
|
||||
{
|
||||
return type;
|
||||
}
|
||||
private final transient int major;
|
||||
private final transient int minor;
|
||||
private final transient int build;
|
||||
private final transient Type type;
|
||||
|
||||
public Version(final String versionString)
|
||||
{
|
||||
final Matcher matcher = Pattern.compile("(Pre|Dev)?([0-9]+)[_\\.]([0-9]+)[_\\.]([0-9]+).*").matcher(versionString);
|
||||
if (!matcher.matches() || matcher.groupCount() < 4)
|
||||
{
|
||||
type = Type.DEVELOPER;
|
||||
major = 99;
|
||||
minor = build = 0;
|
||||
return;
|
||||
}
|
||||
if (versionString.startsWith("Pre"))
|
||||
{
|
||||
type = Type.PREVIEW;
|
||||
}
|
||||
else if (versionString.startsWith("Dev"))
|
||||
{
|
||||
type = Type.DEVELOPER;
|
||||
}
|
||||
else
|
||||
{
|
||||
type = Type.STABLE;
|
||||
}
|
||||
major = Integer.parseInt(matcher.group(2));
|
||||
minor = Integer.parseInt(matcher.group(3));
|
||||
build = Integer.parseInt(matcher.group(4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(final Version other)
|
||||
{
|
||||
int ret = 0;
|
||||
if (other.getType() == Type.DEVELOPER && getType() != Type.DEVELOPER)
|
||||
{
|
||||
ret = -1;
|
||||
}
|
||||
else if (getType() == Type.DEVELOPER && other.getType() != Type.DEVELOPER)
|
||||
{
|
||||
ret = 1;
|
||||
}
|
||||
else if (other.getMajor() > getMajor())
|
||||
{
|
||||
ret = -1;
|
||||
}
|
||||
else if (getMajor() > other.getMajor())
|
||||
{
|
||||
ret = 1;
|
||||
}
|
||||
else if (other.getMinor() > getMinor())
|
||||
{
|
||||
ret = -1;
|
||||
}
|
||||
else if (getMinor() > other.getMinor())
|
||||
{
|
||||
ret = 1;
|
||||
}
|
||||
else if (other.getBuild() > getBuild())
|
||||
{
|
||||
ret = -1;
|
||||
}
|
||||
else if (getBuild() > other.getBuild())
|
||||
{
|
||||
ret = 1;
|
||||
}
|
||||
else if (other.getType() == Type.STABLE && getType() == Type.PREVIEW)
|
||||
{
|
||||
ret = -1;
|
||||
}
|
||||
else if (getType() == Type.STABLE && other.getType() == Type.PREVIEW)
|
||||
{
|
||||
ret = 1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
final Version other = (Version)obj;
|
||||
if (this.major != other.major)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (this.minor != other.minor)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (this.build != other.build)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (this.type != other.type)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int hash = 5;
|
||||
hash = 71 * hash + this.major;
|
||||
hash = 71 * hash + this.minor;
|
||||
hash = 71 * hash + this.build;
|
||||
hash = 71 * hash + (this.type == null ? 0 : this.type.hashCode());
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
if (type == Type.DEVELOPER)
|
||||
{
|
||||
builder.append("Dev");
|
||||
}
|
||||
if (type == Type.PREVIEW)
|
||||
{
|
||||
builder.append("Pre");
|
||||
}
|
||||
builder.append(major);
|
||||
builder.append('.');
|
||||
builder.append(minor);
|
||||
builder.append('.');
|
||||
builder.append(build);
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
package com.earth2me.essentials.update;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.bukkit.configuration.Configuration;
|
||||
|
||||
|
||||
public class VersionInfo
|
||||
{
|
||||
private final transient List<String> changelog;
|
||||
private final transient int minBukkit;
|
||||
private final transient int maxBukkit;
|
||||
private final transient Map<String, ModuleInfo> modules;
|
||||
|
||||
public VersionInfo(final Configuration updateConfig, final String path)
|
||||
{
|
||||
changelog = updateConfig.getStringList(path + ".changelog");
|
||||
minBukkit = updateConfig.getInt(path + ".min-bukkit", 0);
|
||||
maxBukkit = updateConfig.getInt(path + ".max-bukkit", 0);
|
||||
modules = new HashMap<String, ModuleInfo>();
|
||||
final String modulesPath = path + ".modules";
|
||||
for (String module : updateConfig.getKeys(false))
|
||||
{
|
||||
modules.put(module, new ModuleInfo(updateConfig, modulesPath + module));
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> getChangelog()
|
||||
{
|
||||
return Collections.unmodifiableList(changelog);
|
||||
}
|
||||
|
||||
public int getMinBukkit()
|
||||
{
|
||||
return minBukkit;
|
||||
}
|
||||
|
||||
public int getMaxBukkit()
|
||||
{
|
||||
return maxBukkit;
|
||||
}
|
||||
|
||||
public Map<String, ModuleInfo> getModules()
|
||||
{
|
||||
return Collections.unmodifiableMap(modules);
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
package com.earth2me.essentials.update.chat;
|
||||
|
||||
import com.earth2me.essentials.update.PastieUpload;
|
||||
import java.io.*;
|
||||
import java.nio.charset.Charset;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
||||
public abstract class AbstractFileCommand implements Command
|
||||
{
|
||||
private final transient Plugin plugin;
|
||||
private final static Charset UTF8 = Charset.forName("utf-8");
|
||||
|
||||
public AbstractFileCommand(final Plugin plugin)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
protected BufferedReader getServerLogReader() throws IOException
|
||||
{
|
||||
final File bukkitFolder = plugin.getDataFolder().getAbsoluteFile().getParentFile().getParentFile();
|
||||
if (bukkitFolder == null || !bukkitFolder.exists())
|
||||
{
|
||||
throw new IOException("Bukkit folder not found.");
|
||||
}
|
||||
final File logFile = new File(bukkitFolder, "server.log");
|
||||
if (!logFile.exists())
|
||||
{
|
||||
throw new IOException("Server log not found.");
|
||||
}
|
||||
final FileInputStream fis = new FileInputStream(logFile);
|
||||
try
|
||||
{
|
||||
if (logFile.length() > 1000000)
|
||||
{
|
||||
fis.skip(logFile.length() - 1000000);
|
||||
}
|
||||
return new BufferedReader(new InputStreamReader(fis));
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
fis.close();
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
|
||||
protected BufferedReader getPluginConfig(final String pluginName, final String fileName) throws IOException
|
||||
{
|
||||
final File configFolder = new File(plugin.getDataFolder().getAbsoluteFile().getParentFile(), pluginName);
|
||||
if (!configFolder.exists())
|
||||
{
|
||||
throw new IOException(pluginName + " plugin folder not found.");
|
||||
}
|
||||
final File configFile = new File(configFolder, fileName);
|
||||
if (!configFile.exists())
|
||||
{
|
||||
throw new IOException(pluginName + " plugin file " + fileName + " not found.");
|
||||
}
|
||||
return new BufferedReader(new InputStreamReader(new FileInputStream(configFile), UTF8));
|
||||
|
||||
}
|
||||
|
||||
protected String uploadToPastie(final StringBuilder input) throws IOException
|
||||
{
|
||||
if (input.length() > 15000)
|
||||
{
|
||||
input.delete(0, input.length() - 15000);
|
||||
input.append("## Cropped after 15000 bytes");
|
||||
}
|
||||
final PastieUpload pastie = new PastieUpload();
|
||||
return pastie.send(input.toString());
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user