diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4a84579..0000000 --- a/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/build/ -/dist/ -/nbproject/private/ -*.swp diff --git a/README b/README deleted file mode 100644 index 5e1c309..0000000 --- a/README +++ /dev/null @@ -1 +0,0 @@ -Hello World \ No newline at end of file diff --git a/Vault.jar b/Vault.jar deleted file mode 100644 index 44224f2..0000000 Binary files a/Vault.jar and /dev/null differ diff --git a/build.xml b/build.xml deleted file mode 100644 index 3ccb77e..0000000 --- a/build.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - Builds, tests, and runs the project Catacombs. - - - diff --git a/craftbukkit-1.2.5-R1.2.jar b/craftbukkit-1.2.5-R1.2.jar deleted file mode 100644 index 22531ec..0000000 Binary files a/craftbukkit-1.2.5-R1.2.jar and /dev/null differ diff --git a/craftbukkit-1.2.5-R4.0.jar b/craftbukkit-1.2.5-R4.0.jar deleted file mode 100644 index 39c783f..0000000 Binary files a/craftbukkit-1.2.5-R4.0.jar and /dev/null differ diff --git a/craftbukkit-1.3.1-R1.0.jar b/craftbukkit-1.3.1-R1.0.jar deleted file mode 100644 index bfde887..0000000 Binary files a/craftbukkit-1.3.1-R1.0.jar and /dev/null differ diff --git a/craftbukkit-1.4.5-R1.0.jar b/craftbukkit-1.4.5-R1.0.jar deleted file mode 100644 index 6f375cc..0000000 Binary files a/craftbukkit-1.4.5-R1.0.jar and /dev/null differ diff --git a/craftbukkit-1.4.6-R0.1.jar b/craftbukkit-1.4.6-R0.1.jar deleted file mode 100644 index e7b6ea1..0000000 Binary files a/craftbukkit-1.4.6-R0.1.jar and /dev/null differ diff --git a/desktop.ini b/desktop.ini deleted file mode 100644 index 8a96fbb..0000000 --- a/desktop.ini +++ /dev/null @@ -1,4 +0,0 @@ -[ViewState] -Mode= -Vid= -FolderType=NotSpecified diff --git a/manifest.mf b/manifest.mf deleted file mode 100644 index 1574df4..0000000 --- a/manifest.mf +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -X-COMMENT: Main-Class will be added automatically by build - diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml deleted file mode 100644 index 210c5c4..0000000 --- a/nbproject/build-impl.xml +++ /dev/null @@ -1,1042 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set src.dir - Must set test.src.dir - Must set build.dir - Must set dist.dir - Must set build.classes.dir - Must set dist.javadoc.dir - Must set build.test.classes.dir - Must set build.test.results.dir - Must set build.classes.excludes - Must set dist.jar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must set JVM to use for profiling in profiler.info.jvm - Must set profiler agent JVM arguments in profiler.info.jvmargs.agent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - - - - - - java -cp "${run.classpath.with.dist.jar}" ${main.class} - - - - - - - - - - - - - - - - - - - - - - - - - To run this application from the command line without Ant, try: - - java -jar "${dist.jar.resolved}" - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set run.class - - - - Must select one file in the IDE or set run.class - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set debug.class - - - - - Must select one file in the IDE or set debug.class - - - - - Must set fix.includes - - - - - - - - - - - - - - - - - Must select one file in the IDE or set profile.class - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select some files in the IDE or set javac.includes - - - - - - - - - - - - - - - - - - - - Some tests failed; see details above. - - - - - - - - - Must select some files in the IDE or set test.includes - - - - Some tests failed; see details above. - - - - - Must select one file in the IDE or set test.class - - - - - - - - - - - - - - - - - - - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - Must select one file in the IDE or set applet.url - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties deleted file mode 100644 index 3d4ba2d..0000000 --- a/nbproject/genfiles.properties +++ /dev/null @@ -1,11 +0,0 @@ -build.xml.data.CRC32=aca13d02 -build.xml.script.CRC32=9f798776 -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=aca13d02 -nbproject/build-impl.xml.script.CRC32=b82b94db -nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 -nbproject/profiler-build-impl.xml.data.CRC32=aca13d02 -nbproject/profiler-build-impl.xml.script.CRC32=abda56ed -nbproject/profiler-build-impl.xml.stylesheet.CRC32=f10cf54c@1.11.1 diff --git a/nbproject/project.properties b/nbproject/project.properties deleted file mode 100644 index c3afe9b..0000000 --- a/nbproject/project.properties +++ /dev/null @@ -1,84 +0,0 @@ -annotation.processing.enabled=true -annotation.processing.enabled.in.editor=false -annotation.processing.run.all.processors=true -annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output -application.title=Catacombs -application.vendor=User -build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form -# This directory is removed when the project is cleaned: -build.dir=build -build.generated.dir=${build.dir}/generated -build.generated.sources.dir=${build.dir}/generated-sources -# Only compile against the classpath explicitly listed here: -build.sysclasspath=ignore -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -# Uncomment to specify the preferred debugger connection transport: -#debug.transport=dt_socket -debug.classpath=\ - ${run.classpath} -debug.test.classpath=\ - ${run.test.classpath} -# This directory is removed when the project is cleaned: -dist.dir=dist -dist.jar=${dist.dir}/Catacombs.jar -dist.javadoc.dir=${dist.dir}/javadoc -endorsed.classpath= -excludes= -file.reference.craftbukkit-1.4.6-R0.1.jar=craftbukkit-1.4.6-R0.1.jar -file.reference.mysql-connector-java-5.1.17-bin.jar=../../../../Users/User/Downloads/mysql-connector-java-5.1.17-bin.jar -file.reference.Vault.jar=C:\\Projects\\Minecraft\\Plugin\\Achieve\\Vault.jar -includes=** -jar.archive.disabled=${jnlp.enabled} -jar.compress=false -jar.index=${jnlp.enabled} -javac.classpath=\ - ${file.reference.mysql-connector-java-5.1.17-bin.jar}:\ - ${file.reference.Vault.jar}:\ - ${file.reference.craftbukkit-1.4.6-R0.1.jar} -# Space-separated list of extra javac options -javac.compilerargs=-Xlint:unchecked -Xlint:deprecation -javac.deprecation=false -javac.processorpath=\ - ${javac.classpath} -javac.source=1.5 -javac.target=1.5 -javac.test.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir}:\ - ${libs.junit.classpath}:\ - ${libs.junit_4.classpath} -javac.test.processorpath=\ - ${javac.test.classpath} -javadoc.additionalparam= -javadoc.author=false -javadoc.encoding=${source.encoding} -javadoc.noindex=false -javadoc.nonavbar=false -javadoc.notree=false -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -jnlp.codebase.type=no.codebase -jnlp.descriptor=application -jnlp.enabled=false -jnlp.mixed.code=defaut -jnlp.offline-allowed=false -jnlp.signed=false -main.class=Test.QuickTest -manifest.file=manifest.mf -meta.inf.dir=${src.dir}/META-INF -mkdist.disabled=false -platform.active=default_platform -run.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -run.test.classpath=\ - ${javac.test.classpath}:\ - ${build.test.classes.dir} -source.encoding=UTF-8 -src.dir=src -test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml deleted file mode 100644 index b7dae05..0000000 --- a/nbproject/project.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - org.netbeans.modules.java.j2seproject - - - Catacombs - - - - - - - - - diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6d3d1b3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + net.steeleyes.catacombs + Catacombs + 3.45 + Catacombs + + + bukkit-repo + http://repo.bukkit.org/content/groups/public/ + + + vault-repo + http://nexus.theyeticave.net/content/repositories/pub_releases/ + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.5 + 1.5 + + + + + + + org.bukkit + bukkit + 1.7.2-R0.4-SNAPSHOT + jar + compile + + + org.bukkit + craftbukkit + 1.7.2-R0.4-SNAPSHOT + jar + compile + + + net.milkbowl.vault + Vault + 1.2.32 + jar + compile + + + \ No newline at end of file diff --git a/sqlitejdbc-v056.jar b/sqlitejdbc-v056.jar deleted file mode 100644 index f95d90e..0000000 Binary files a/sqlitejdbc-v056.jar and /dev/null differ diff --git a/src/net/steeleyes/catacombs/BlockChange.java b/src/main/java/net/steeleyes/catacombs/BlockChange.java similarity index 100% rename from src/net/steeleyes/catacombs/BlockChange.java rename to src/main/java/net/steeleyes/catacombs/BlockChange.java diff --git a/src/net/steeleyes/catacombs/BlockChangeHandler.java b/src/main/java/net/steeleyes/catacombs/BlockChangeHandler.java similarity index 99% rename from src/net/steeleyes/catacombs/BlockChangeHandler.java rename to src/main/java/net/steeleyes/catacombs/BlockChangeHandler.java index baa00ee..38e7e71 100644 --- a/src/net/steeleyes/catacombs/BlockChangeHandler.java +++ b/src/main/java/net/steeleyes/catacombs/BlockChangeHandler.java @@ -87,7 +87,6 @@ private void setBlock(BlockChange x) { } } - @Override public void run() { while(!delay.isEmpty()) { diff --git a/src/net/steeleyes/catacombs/CatAbility.java b/src/main/java/net/steeleyes/catacombs/CatAbility.java similarity index 100% rename from src/net/steeleyes/catacombs/CatAbility.java rename to src/main/java/net/steeleyes/catacombs/CatAbility.java diff --git a/src/net/steeleyes/catacombs/CatConfig.java b/src/main/java/net/steeleyes/catacombs/CatConfig.java similarity index 100% rename from src/net/steeleyes/catacombs/CatConfig.java rename to src/main/java/net/steeleyes/catacombs/CatConfig.java diff --git a/src/net/steeleyes/catacombs/CatCreature.java b/src/main/java/net/steeleyes/catacombs/CatCreature.java similarity index 100% rename from src/net/steeleyes/catacombs/CatCreature.java rename to src/main/java/net/steeleyes/catacombs/CatCreature.java diff --git a/src/main/java/net/steeleyes/catacombs/CatCuboid.java b/src/main/java/net/steeleyes/catacombs/CatCuboid.java new file mode 100644 index 0000000..fc3d69b --- /dev/null +++ b/src/main/java/net/steeleyes/catacombs/CatCuboid.java @@ -0,0 +1,815 @@ +/* This file is part of Catacombs. + + Catacombs is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Catacombs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Catacombs. If not, see . + * + * @author John Keay <>(@Steeleyes, @Blockhead2) + * @copyright Copyright (C) 2011 + * @license GNU GPL + */ +package net.steeleyes.catacombs; + +import org.bukkit.World; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.Dispenser; +import org.bukkit.block.Chest; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Creature; +import org.bukkit.Location; + +import java.util.List; +import java.util.ArrayList; +import java.util.Arrays; +import net.minecraft.server.v1_7_R1.EnumSkyBlock; +import org.bukkit.craftbukkit.v1_7_R1.CraftWorld; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.material.Bed; +import org.bukkit.material.MaterialData; + +public class CatCuboid extends Cuboid { + private Type type = Type.LEVEL; + private World world = null; + + public enum Type { + LEVEL, HUT + } + + public CatCuboid(World world, int xl, int yl, int zl, int xh, int yh, + int zh, Type type) { + super(xl, yl, zl, xh, yh, zh); + this.type = type; + this.world = world; + } + + public CatCuboid(World world, int xl, int yl, int zl, int xh, int yh, int zh) { + super(xl, yl, zl, xh, yh, zh); + this.world = world; + } + + @Override + public String toString() { + return super.toString() + " world=" + world.getName() + " type=" + type; + } + + public List dump(Vector top) { + List info = map(); + info.add(" "); + for (int y = yl; y <= yh; y++) { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + Block blk = world.getBlockAt(x, y, z); + info.add((x - top.x) + "," + (y - top.y) + "," + + (z - top.z) + "," + blk.getTypeId() + "," + + blk.getData()); + } + } + } + return info; + } + + public void setType(Type t) { + type = t; + } + + public Type getType() { + return type; + } + + // Add 3 horrible routine to guess key facts that I didn't save in the .db + // TODO: need to figure out how to expand the table without loosing + // backwards compatibility, + public int guessRoofSize() { + int depth = 256; + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yh, i = 0; y >= yl; y--, i++) { + Block blk = world.getBlockAt(x, y, z); + Material mat = blk.getType(); + if (mat == Material.AIR) { + if (i == 0) + break; // Stop if top is AIR + if (i < depth) + depth = i; + } + } + } + } + if (depth == 256) + depth = 1; + return depth; + } + + public int guessRoomSize() { + int max_depth = 0; + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + int depth = 0; + for (int y = yh, i = 0; y >= yl; y--, i++) { + Block blk = world.getBlockAt(x, y, z); + Material mat = blk.getType(); + if (mat == Material.AIR) { + if (i == 0) + break; // Stop if top is AIR + depth++; + } else { + if (depth > 0) { + if (depth > max_depth) + max_depth = depth; + break; // Stop on first solid after air. + } + } + } + } + } + if (max_depth < 3) + max_depth = 3; + return max_depth; + } + + public Vector guessEndLocation() { + // Look for a ladder down first + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + int y = yl; + Block blk = world.getBlockAt(x, y, z); + if (blk.getType() == Material.LADDER) { + return new Vector(x, y - 1, z); + } + } + } + // If no ladder down then look for the end chest + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + if (isBigChest(blk)) { + return new Vector(x, yl - 1, z); + } + } + } + } + return null; + } + + static int debug = 0; + + // TODO: Badly need to make the major/minor block names persist!! + // Hunt for a frequent soild block just below the roof level that's + // next to air/web/torch. Call that the major material + public CatMat guessMajorMat(int roofDepth) { + List dirs = new ArrayList(Arrays.asList( + BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, + BlockFace.WEST)); + + final CatMat last = new CatMat(Material.AIR); + final CatMat best_mat = new CatMat(Material.AIR); + final CatMat mat = new CatMat(Material.AIR); + int best = 0; + int cnt = 0; + if (debug == 1) + System.out.println("[Catacombs] roofDepth=" + roofDepth); + + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + int y = yh - roofDepth; + Block blk = world.getBlockAt(x, y, z); + mat.getBlock(blk); + if (debug == 1) + System.out.println("[Catacombs] Block mat=" + mat + " blk=" + + blk.getType()); + + if (!mat.is(Material.AIR) && !mat.is(Material.TORCH)) { + if (debug == 1) + System.out + .println("[Catacombs] soid block Block mat=" + + mat + " blk=" + blk.getType()); + Boolean near_air = false; + for (BlockFace dir : dirs) { + Material near = blk.getRelative(dir).getType(); + if (near == Material.AIR || near == Material.TORCH + || near == Material.WEB) { + near_air = true; + break; + } + } + if (near_air) { + if (debug == 1) + System.out + .println("[Catacombs] near air Block mat=" + + mat + " blk=" + blk.getType()); + if (!mat.equals(last)) { + if (cnt > best) { + best_mat.get(last); + best = cnt; + } + last.get(mat); + cnt = 1; + } else { + cnt++; + } + } + } + } + } + if (cnt > best) { + best_mat.get(last); + best = cnt; + } + if (debug == 1) + System.out.println("[Catacombs] final guess mat = " + best_mat + + " best=" + best); + // debug++; + return best_mat; + } + + public Boolean isLevel() { + return type == Type.LEVEL; + } + + public Boolean isHut() { + return type == Type.HUT; + } + + public Boolean overlaps(CatCuboid that) { + // higher levels check the worlds match so no need to check again + assert (world.equals(that.world)); + return intersects(that); + } + + public Boolean isInRaw(Block blk) { + // higher levels check the worlds match so no need to check again + assert (world.equals(blk.getWorld())); + return super.isIn(blk.getX(), blk.getY(), blk.getZ()); + } + + public void unrender(BlockChangeHandler handler, Boolean emptyChest, + int num_air) { + if (type == Type.LEVEL) + setCube(handler, Material.STONE, true); + else { + CatCuboid floor = new CatCuboid(world, xl, yl, zl, xh, + yh - num_air, zh); + // Go one higher to cover anything (torches typically) on the hut + // roof. + CatCuboid upper = new CatCuboid(world, xl, yh - num_air + 1, zl, + xh, yh + 1, zh); + upper.setCube(handler, Material.AIR, emptyChest); + floor.setCube(handler, Material.STONE, true); + } + } + + @Deprecated + public void clearBlock(Material mat) { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + if (blk.getType() == mat) { + if (mat == Material.CHEST) { + Object o = blk.getState(); + if (o != null && o instanceof InventoryHolder) { + InventoryHolder cont = (InventoryHolder) o; + cont.getInventory().clear(); + } + } + blk.setType(Material.AIR); + } + } + } + } + } + + public void removeTorch() { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + if (blk.getType() == Material.TORCH) { + blk.setTypeId(Material.AIR.getId()); + } + } + } + } + forceLightLevel(0); + } + + public void forceLightLevel(int level) { + net.minecraft.server.v1_7_R1.World w = ((CraftWorld) world).getHandle(); + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + w.b(EnumSkyBlock.BLOCK, x, y, z, level); + } + } + } + } + + public void restoreCake() { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + Block above = blk.getRelative(BlockFace.UP); + if (blk.getType() == Material.FENCE) { + if (above.getType() == Material.AIR) { + above.setType(Material.CAKE_BLOCK); + } else if (above.getType() == Material.CAKE_BLOCK) { + if (above.getData() != (byte) 0) { + above.setData((byte) 0); + } + } + } + } + } + } + } + + public void addGlow(CatMat mat, int roofDepth) { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + int y = yh - roofDepth + 1; + Block blk = world.getBlockAt(x, y, z); + Block other = blk.getRelative(BlockFace.DOWN, 1); + if (mat.equals(blk) && other.getType() == Material.AIR) { + blk.setType(Material.GLOWSTONE); + } + } + } + } + + public void removeGlow(CatMat mat, int roofDepth) { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + int y = yh - roofDepth + 1; + Block blk = world.getBlockAt(x, y, z); + Block other = blk.getRelative(BlockFace.DOWN, 1); + if (blk.getType() == Material.GLOWSTONE + && other.getType() == Material.AIR) { + mat.setBlock(blk); + } + } + } + } + + public void buildWindows(CatMat mat, int height) { + if (type == Type.HUT) + return; + + int x, z; + int y = yl + height; + + x = xl; + for (z = zl + 1; z <= zh - 1; z++) { + Block blk = world.getBlockAt(x, y, z); + if (world.getBlockAt(x - 1, y, z).getType() == Material.AIR + && world.getBlockAt(x + 1, y, z).getType() == Material.AIR) { + mat.setBlock(blk); + } + } + x = xh; + for (z = zl + 1; z <= zh - 1; z++) { + Block blk = world.getBlockAt(x, y, z); + if (world.getBlockAt(x - 1, y, z).getType() == Material.AIR + && world.getBlockAt(x + 1, y, z).getType() == Material.AIR) { + mat.setBlock(blk); + } + } + z = zl; + for (x = xl + 1; x <= xh - 1; x++) { + Block blk = world.getBlockAt(x, y, z); + if (world.getBlockAt(x, y, z - 1).getType() == Material.AIR + && world.getBlockAt(x, y, z + 1).getType() == Material.AIR) { + mat.setBlock(blk); + } + } + z = zh; + for (x = xl + 1; x <= xh - 1; x++) { + Block blk = world.getBlockAt(x, y, z); + if (world.getBlockAt(x, y, z - 1).getType() == Material.AIR + && world.getBlockAt(x, y, z + 1).getType() == Material.AIR) { + mat.setBlock(blk); + } + } + } + + public void closeDoors(Catacombs plugin) { + // Boolean secretOn = !plugin.cnf.SecretDoorOff(); + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + if (blk.getType() == Material.WOODEN_DOOR + || blk.getType() == Material.IRON_DOOR_BLOCK) { + byte data = blk.getData(); + if (data >= 4 && data < 8) { + data = (byte) (data ^ 4); + blk.setData(data); + } + } else if (blk.getType() == Material.TRAP_DOOR) { + blk.setData((byte) (blk.getData() & ~4)); + } else if (blk.getType() == Material.LEVER) { + blk.setData((byte) (blk.getData() & ~8)); + } else if (blk.getType() == Material.PISTON_STICKY_BASE) { + Block power = blk.getRelative(BlockFace.DOWN, 1); + if (power.getType() != Material.REDSTONE_TORCH_ON) { + Block upper_door = blk.getRelative(BlockFace.UP, 3); + Material m = power.getType(); + byte code = power.getData(); + power.setType(Material.REDSTONE_TORCH_ON); + upper_door.setTypeIdAndData(m.getId(), code, false); + } + } + } + } + } + } + + public void refillChests(CatConfig config) { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + if (blk.getType() == Material.CHEST) { + if (type == Type.LEVEL) { // Leave chests in the hut + Chest chest = (Chest) blk.getState(); + chest.getInventory().clear(); // Clear and refill + // chests inside + if (isBigChest(blk)) { + CatLoot.bigChest(config, chest.getInventory()); + } else if (isMidChest(blk)) { + CatLoot.midChest(config, chest.getInventory()); + } else { + CatLoot.smallChest(config, chest.getInventory()); + } + } + } else if (blk.getType() == Material.DISPENSER) { + Dispenser cont = (Dispenser) blk.getState(); + cont.getInventory().clear(); // Clear and refill chests + // inside + CatLoot.fillChest(config, cont.getInventory(), + config.TrapList()); + } + } + } + } + } + + public void clearMonsters(Catacombs plugin) { + for (Entity ent : world.getEntities()) { + if (ent instanceof Creature) { + Location loc = ent.getLocation(); + Block blk = loc.getBlock(); + if (isIn(blk.getX(), blk.getY(), blk.getZ())) { + // if(plugin.monsters != null) + // plugin.monsters.remove((LivingEntity)ent); + ent.remove(); + } + } + } + } + + // Issues with the secret door piston creation in earlier versions of + // Catacombs + // left some secret doors broken (only opening by 1 block rather than 2). + // This code finds any problem locations by inspection of nearby blocks + // and fixes them. + public int fixSecretDoors() { + int cnt = 0; + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + Material mat = blk.getType(); + Block above = blk.getRelative(BlockFace.UP); + Block above2 = above.getRelative(BlockFace.UP); + Block below = blk.getRelative(BlockFace.DOWN); + if (blk.getType() == Material.PISTON_STICKY_BASE + && below.getType() == Material.REDSTONE_TORCH_ON + && above.getType() != Material.PISTON_EXTENSION) { + // System.out.println("[Catacombs] Fixing closed secret door "+blk+" "+mat+" "+above.getType()+" "+below.getType()); + above.setTypeIdAndData( + Material.PISTON_EXTENSION.getId(), (byte) 9, + false); + blk.setTypeIdAndData( + Material.PISTON_STICKY_BASE.getId(), (byte) 9, + false); + cnt++; + } else if (blk.getType() == Material.PISTON_STICKY_BASE + && below.getType() != Material.REDSTONE_TORCH_ON + && above2.getType() != Material.AIR) { + // System.out.println("[Catacombs] fixing open secret door "+blk+" "+mat+" "+above.getType()+" "+below.getType()); + above.setTypeIdAndData(above2.getType().getId(), + above2.getData(), false); + above2.setType(Material.AIR); + blk.setTypeIdAndData( + Material.PISTON_STICKY_BASE.getId(), (byte) 1, + false); + cnt++; + } + } + } + } + return cnt; + } + + // Minecraft v1.2.3 Changed the way door hinges are positioned + // This code will fix up the old dungeons by inspection of nearby + // blocks. It will also close all the doors. + public int fixDoors() { + int cnt = 0; + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + Material mat = blk.getType(); + Block above = blk.getRelative(BlockFace.UP); + if ((mat == Material.WOODEN_DOOR && above.getType() == Material.WOODEN_DOOR) + || (mat == Material.IRON_DOOR_BLOCK && above + .getType() == Material.IRON_DOOR_BLOCK)) { + byte a = above.getData(); + byte b = blk.getData(); + byte new_a = getDoorUpperCode(blk); + byte new_b = getDoorLowerCode(blk); + if (a != new_a || b != new_b) { + blk.setData(new_b); + above.setData(new_a); + cnt++; + } + } + } + } + } + return cnt; + } + + public int changeDoorsToIron() { + int cnt = 0; + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + Material mat = blk.getType(); + Block above = blk.getRelative(BlockFace.UP); + if (mat == Material.WOODEN_DOOR + && above.getType() == Material.WOODEN_DOOR) { + byte blk_b = blk.getData(); + byte above_b = above.getData(); + blk.setTypeIdAndData(Material.IRON_DOOR_BLOCK.getId(), + blk_b, false); + above.setTypeIdAndData( + Material.IRON_DOOR_BLOCK.getId(), above_b, + false); + cnt++; + } + } + } + } + return cnt; + } + + private byte getDoorLowerCode(Block blk) { + Block e = blk.getRelative(BlockFace.EAST); + Block w = blk.getRelative(BlockFace.WEST); + if (CatUtils.isSolid(e) && CatUtils.isSolid(w)) + return 0; + + Block n = blk.getRelative(BlockFace.NORTH); + Block s = blk.getRelative(BlockFace.SOUTH); + if (CatUtils.isSolid(n) && CatUtils.isSolid(s)) + return 1; + + if (CatUtils.isSolid(e)) + return 0; + if (CatUtils.isSolid(w)) + return 0; + if (CatUtils.isSolid(s)) + return 1; + if (CatUtils.isSolid(n)) + return 1; + return 0; + } + + private byte getDoorUpperCode(Block blk) { + Block e = blk.getRelative(BlockFace.EAST); + Block w = blk.getRelative(BlockFace.WEST); + if (CatUtils.isSolid(e) && CatUtils.isSolid(w)) + return 8; + + Block n = blk.getRelative(BlockFace.NORTH); + Block s = blk.getRelative(BlockFace.SOUTH); + if (CatUtils.isSolid(n) && CatUtils.isSolid(s)) + return 8; + + if (CatUtils.isSolid(e)) + return 8; + if (CatUtils.isSolid(w)) + return 9; + if (CatUtils.isSolid(s)) + return 8; + if (CatUtils.isSolid(n)) + return 9; + return 0; + } + + public Boolean isBigChest(Block blk) { + if (blk.getType() != Material.CHEST) + return false; + + int cnt = 0; + Material major = Material.COBBLESTONE; + Material minor = Material.MOSSY_COBBLESTONE; + + Material below = blk.getRelative(BlockFace.DOWN, 1).getType(); + + for (BlockFace dir : Arrays.asList(BlockFace.NORTH, BlockFace.EAST, + BlockFace.SOUTH, BlockFace.WEST)) { + Block b = blk.getRelative(dir, 1); + if (b.getType() == major || b.getType() == minor) { + cnt++; + } + } + + return below == Material.GRASS || cnt == 3; + } + + public Boolean isMidChest(Block blk) { + int cnt = 0; + + Block b; + b = blk.getRelative(BlockFace.EAST, 1); + if (b.getType() == Material.CHEST) { + cnt++; + } + b = blk.getRelative(BlockFace.NORTH, 1); + if (b.getType() == Material.CHEST) { + cnt++; + } + return cnt == 1; + } + + public void setCube(BlockChangeHandler handler, Material mat, + Boolean emptyChest) { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + for (int y = yl; y <= yh; y++) { + Block blk = world.getBlockAt(x, y, z); + Object o = blk.getState(); + if (emptyChest) { + if (o != null && o instanceof InventoryHolder) { + InventoryHolder cont = (InventoryHolder) o; + cont.getInventory().clear(); + } + } + Material before = blk.getType(); + if (before == Material.LADDER || before == Material.TORCH + || before == Material.TRAP_DOOR + || before == Material.WATER + || before == Material.LAVA + || before == Material.RED_MUSHROOM + || before == Material.BROWN_MUSHROOM + || before == Material.REDSTONE_TORCH_ON + || before == Material.IRON_DOOR_BLOCK + || before == Material.WALL_SIGN + || before == Material.SIGN_POST + || before == Material.VINE + || before == Material.WOODEN_DOOR) { + handler.addHigh(blk, mat); + } else if (before == Material.BED_BLOCK) { + MaterialData md = blk.getState().getData(); + if (md instanceof Bed) { + Bed bed = (Bed) md; + if (bed.isHeadOfBed()) { + Block foot = blk.getRelative(bed.getFacing() + .getOppositeFace()); + foot.setType(Material.AIR); + blk.setType(Material.AIR); + handler.addLow(blk, mat); + handler.addLow(blk, mat); + } + } + } else if (o != null && o instanceof InventoryHolder) { + blk.setType(Material.AIR); + blk.breakNaturally(); + handler.addLow(blk, mat); + } else { + handler.addLow(blk, mat); + } + } + } + } + } + + public Boolean isNatural(CatConfig cnf) { + for (int x = xl; x <= xh; x++) { + for (int y = yl; y <= yh; y++) { + for (int z = zl; z <= zh; z++) { + Block blk = world.getBlockAt(x, y, z); + if (!cnf.isNatural(blk)) { + return false; + } + } + } + } + return true; + } + + public Boolean isCubeAir() { + for (int x = xl; x <= xh; x++) { + for (int y = yl; y <= yh; y++) { + for (int z = zl; z <= zh; z++) { + Block blk = world.getBlockAt(x, y, z); + if (blk.getType() != Material.AIR) { + return false; + } + } + } + } + return true; + } + + // Try and figure out an approximate map from the world blocks + public List map() { + List info = new ArrayList(); + char[][] grid = new char[xh - xl + 1][zh - zl + 1]; + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + grid[x - xl][z - zl] = ' '; + } + } + for (int y = yl; y <= yh; y++) { + for (int x = xl; x <= xh; x++) { + for (int z = zl; z <= zh; z++) { + Block blk = world.getBlockAt(x, y, z); + int id = blk.getTypeId(); + char was = grid[x - xl][z - zl]; + if (id == 29) + grid[x - xl][z - zl] = '$'; + if ((was == ' ' || was == ',') + && (id == 4 || id == 48 || id == 98 || id == 24)) + grid[x - xl][z - zl] = '#'; + if ((was == '#' || was == ' ') && (id == 0)) + grid[x - xl][z - zl] = ','; + if ((was == ',') && (id == 0)) + grid[x - xl][z - zl] = '.'; + if (id == 20 || id == 102) + grid[x - xl][z - zl] = 'G'; + if (id == 9 || id == 8) + grid[x - xl][z - zl] = 'W'; + if (id == 11 || id == 10) + grid[x - xl][z - zl] = 'L'; + if (id == 26) + grid[x - xl][z - zl] = 'z'; + if (id == 30) + grid[x - xl][z - zl] = 'w'; + if (id == 42) + grid[x - xl][z - zl] = 'A'; + if (id == 50) + grid[x - xl][z - zl] = 't'; + if (id == 52) + grid[x - xl][z - zl] = 'M'; + if (id == 54) + grid[x - xl][z - zl] = 'c'; + if (id == 58) + grid[x - xl][z - zl] = 'T'; + if (id == 61) + grid[x - xl][z - zl] = 'f'; + if (id == 64) + grid[x - xl][z - zl] = '+'; + if (id == 65) + grid[x - xl][z - zl] = '^'; + if (id == 70) + grid[x - xl][z - zl] = 'x'; + if (id == 88) + grid[x - xl][z - zl] = 's'; + if (id == 92) + grid[x - xl][z - zl] = '='; + if (id == 96) + grid[x - xl][z - zl] = 'v'; + } + } + } + for (int z = zl; z <= zh; z++) { + String s = "# "; + for (int x = xl; x <= xh; x++) { + char ch = grid[x - xl][z - zl]; + s += (ch == ',') ? '#' : ch; + } + info.add(s); + } + info.add(" "); + return info; + } +} diff --git a/src/net/steeleyes/catacombs/CatEntityListener.java b/src/main/java/net/steeleyes/catacombs/CatEntityListener.java similarity index 100% rename from src/net/steeleyes/catacombs/CatEntityListener.java rename to src/main/java/net/steeleyes/catacombs/CatEntityListener.java diff --git a/src/net/steeleyes/catacombs/CatFlag.java b/src/main/java/net/steeleyes/catacombs/CatFlag.java similarity index 100% rename from src/net/steeleyes/catacombs/CatFlag.java rename to src/main/java/net/steeleyes/catacombs/CatFlag.java diff --git a/src/net/steeleyes/catacombs/CatGear.java b/src/main/java/net/steeleyes/catacombs/CatGear.java similarity index 100% rename from src/net/steeleyes/catacombs/CatGear.java rename to src/main/java/net/steeleyes/catacombs/CatGear.java diff --git a/src/net/steeleyes/catacombs/CatLevel.java b/src/main/java/net/steeleyes/catacombs/CatLevel.java similarity index 100% rename from src/net/steeleyes/catacombs/CatLevel.java rename to src/main/java/net/steeleyes/catacombs/CatLevel.java diff --git a/src/net/steeleyes/catacombs/CatListener.java b/src/main/java/net/steeleyes/catacombs/CatListener.java similarity index 100% rename from src/net/steeleyes/catacombs/CatListener.java rename to src/main/java/net/steeleyes/catacombs/CatListener.java diff --git a/src/net/steeleyes/catacombs/CatLocation.java b/src/main/java/net/steeleyes/catacombs/CatLocation.java similarity index 100% rename from src/net/steeleyes/catacombs/CatLocation.java rename to src/main/java/net/steeleyes/catacombs/CatLocation.java diff --git a/src/net/steeleyes/catacombs/CatLoot.java b/src/main/java/net/steeleyes/catacombs/CatLoot.java similarity index 100% rename from src/net/steeleyes/catacombs/CatLoot.java rename to src/main/java/net/steeleyes/catacombs/CatLoot.java diff --git a/src/net/steeleyes/catacombs/CatLootList.java b/src/main/java/net/steeleyes/catacombs/CatLootList.java similarity index 100% rename from src/net/steeleyes/catacombs/CatLootList.java rename to src/main/java/net/steeleyes/catacombs/CatLootList.java diff --git a/src/net/steeleyes/catacombs/CatMat.java b/src/main/java/net/steeleyes/catacombs/CatMat.java similarity index 100% rename from src/net/steeleyes/catacombs/CatMat.java rename to src/main/java/net/steeleyes/catacombs/CatMat.java diff --git a/src/net/steeleyes/catacombs/CatMob.java b/src/main/java/net/steeleyes/catacombs/CatMob.java similarity index 97% rename from src/net/steeleyes/catacombs/CatMob.java rename to src/main/java/net/steeleyes/catacombs/CatMob.java index 5c515b4..15b61dc 100644 --- a/src/net/steeleyes/catacombs/CatMob.java +++ b/src/main/java/net/steeleyes/catacombs/CatMob.java @@ -30,6 +30,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.entity.Damageable; public class CatMob { private Catacombs plugin; @@ -38,7 +39,7 @@ public class CatMob { private String name; private HateTable hate; private int max_hps; - private int hps; + private double hps; private int exp; private int cash; private int level; @@ -138,7 +139,7 @@ public void setFocus(Object focus) { // this.targets = targets; // } - public Boolean hit(LivingEntity attacker,int dmg,int threat) { + public Boolean hit(LivingEntity attacker,double dmg,double threat) { if(attacker instanceof Player) { hate.addThreat(attacker, threat); ((Creature)ent).setTarget((LivingEntity)hate.target()); @@ -150,7 +151,7 @@ public void canHit() { didHit = Calendar.getInstance().getTimeInMillis(); } - public Boolean hit(int dmg) { + public Boolean hit(double dmg) { gotHit = Calendar.getInstance().getTimeInMillis(); hps = hps - dmg; if(hps<=0) { @@ -179,7 +180,7 @@ public void heal() { hps = max_hps; } - public int getHealth() { + public double getHealth() { return 100*hps/max_hps; } diff --git a/src/net/steeleyes/catacombs/CatPlayer.java b/src/main/java/net/steeleyes/catacombs/CatPlayer.java similarity index 100% rename from src/net/steeleyes/catacombs/CatPlayer.java rename to src/main/java/net/steeleyes/catacombs/CatPlayer.java diff --git a/src/net/steeleyes/catacombs/CatPlayerListener.java b/src/main/java/net/steeleyes/catacombs/CatPlayerListener.java similarity index 100% rename from src/net/steeleyes/catacombs/CatPlayerListener.java rename to src/main/java/net/steeleyes/catacombs/CatPlayerListener.java diff --git a/src/net/steeleyes/catacombs/CatProtection.java b/src/main/java/net/steeleyes/catacombs/CatProtection.java similarity index 100% rename from src/net/steeleyes/catacombs/CatProtection.java rename to src/main/java/net/steeleyes/catacombs/CatProtection.java diff --git a/src/net/steeleyes/catacombs/CatSQL.java b/src/main/java/net/steeleyes/catacombs/CatSQL.java similarity index 100% rename from src/net/steeleyes/catacombs/CatSQL.java rename to src/main/java/net/steeleyes/catacombs/CatSQL.java diff --git a/src/net/steeleyes/catacombs/CatUtils.java b/src/main/java/net/steeleyes/catacombs/CatUtils.java similarity index 98% rename from src/net/steeleyes/catacombs/CatUtils.java rename to src/main/java/net/steeleyes/catacombs/CatUtils.java index 8e3406c..7355ff3 100644 --- a/src/net/steeleyes/catacombs/CatUtils.java +++ b/src/main/java/net/steeleyes/catacombs/CatUtils.java @@ -283,7 +283,7 @@ public static LivingEntity getDamager(EntityDamageEvent evt) { EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) evt; damager = e.getDamager(); if (damager instanceof Projectile) { - damager = ((Projectile) damager).getShooter(); + damager = (Entity) ((Projectile) damager).getShooter(); } } if(damager instanceof LivingEntity) { @@ -331,9 +331,9 @@ public static void improveDurability(Player player, int amt) { } } - public static int getThreatFixDurability(Player player, int dmg) { + public static double getThreatFixDurability(Player player, double dmg) { ItemStack stk = player.getItemInHand(); - int threat = dmg; + double threat = dmg; if(stk==null) return threat; diff --git a/src/net/steeleyes/catacombs/Catacombs.java b/src/main/java/net/steeleyes/catacombs/Catacombs.java similarity index 98% rename from src/net/steeleyes/catacombs/Catacombs.java rename to src/main/java/net/steeleyes/catacombs/Catacombs.java index 12a5710..c910a02 100644 --- a/src/net/steeleyes/catacombs/Catacombs.java +++ b/src/main/java/net/steeleyes/catacombs/Catacombs.java @@ -43,6 +43,24 @@ /** * * +Release v3.3 +* Fixed force light level code for Bukkit 1.5.2-R1.0, to avoid a crash during dungeon resets and startup + +Release v3.2 +* Fixed force light level code for Bukkit 1.5.2-R0.1, to avoid a crash during dungeon resets and startup + +Release v3.1 +* Fixed force light level code for Bukkit 1.5.1-R0.1, to avoid a crash during dungeon resets and startup + +Release v3.0 +* Fixed force light level code for Bukkit 1.5-R0.1, to avoid a crash during dungeon resets and startup + +Release v2.9 +* Fixed force light level code for Bukkit 1.4.7-R1.0, to avoid a crash during dungeon resets and startup + +Release v2.8 +* Fixed force light level code for Bukkit 1.4.6-R0.1, to avoid a crash during dungeon resets and startup + Release v2.7 * Changed spawn logic so that creatures in The_End spawn naturally and are not effected by the world wide Catacomb settings. diff --git a/src/net/steeleyes/catacombs/Clan.java b/src/main/java/net/steeleyes/catacombs/Clan.java similarity index 100% rename from src/net/steeleyes/catacombs/Clan.java rename to src/main/java/net/steeleyes/catacombs/Clan.java diff --git a/src/net/steeleyes/catacombs/Cuboid.java b/src/main/java/net/steeleyes/catacombs/Cuboid.java similarity index 100% rename from src/net/steeleyes/catacombs/Cuboid.java rename to src/main/java/net/steeleyes/catacombs/Cuboid.java diff --git a/src/net/steeleyes/catacombs/Dungeon.java b/src/main/java/net/steeleyes/catacombs/Dungeon.java similarity index 100% rename from src/net/steeleyes/catacombs/Dungeon.java rename to src/main/java/net/steeleyes/catacombs/Dungeon.java diff --git a/src/net/steeleyes/catacombs/DungeonHandler.java b/src/main/java/net/steeleyes/catacombs/DungeonHandler.java similarity index 98% rename from src/net/steeleyes/catacombs/DungeonHandler.java rename to src/main/java/net/steeleyes/catacombs/DungeonHandler.java index 38b607c..d344944 100644 --- a/src/net/steeleyes/catacombs/DungeonHandler.java +++ b/src/main/java/net/steeleyes/catacombs/DungeonHandler.java @@ -26,7 +26,6 @@ public DungeonHandler(Catacombs plugin) { this.plugin = plugin; } - @Override public void run() { for(Dungeon dung: plugin.getDungeons().all()) { dung.maintain(); diff --git a/src/net/steeleyes/catacombs/Dungeons.java b/src/main/java/net/steeleyes/catacombs/Dungeons.java similarity index 100% rename from src/net/steeleyes/catacombs/Dungeons.java rename to src/main/java/net/steeleyes/catacombs/Dungeons.java diff --git a/src/net/steeleyes/catacombs/ECatConfig.java b/src/main/java/net/steeleyes/catacombs/ECatConfig.java similarity index 100% rename from src/net/steeleyes/catacombs/ECatConfig.java rename to src/main/java/net/steeleyes/catacombs/ECatConfig.java diff --git a/src/net/steeleyes/catacombs/HateTable.java b/src/main/java/net/steeleyes/catacombs/HateTable.java similarity index 85% rename from src/net/steeleyes/catacombs/HateTable.java rename to src/main/java/net/steeleyes/catacombs/HateTable.java index 9e3bec5..d786e46 100644 --- a/src/net/steeleyes/catacombs/HateTable.java +++ b/src/main/java/net/steeleyes/catacombs/HateTable.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; + import org.bukkit.Location; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; @@ -40,7 +41,7 @@ public class HateTable { private LivingEntity self; // Needed for distance checks private LivingEntity aggro = null; - private final Map threats = new HashMap(); + private final Map threats = new HashMap(); private String name; public HateTable(CatConfig cnf,LivingEntity self,String name) { @@ -52,8 +53,8 @@ public HateTable(CatConfig cnf,LivingEntity self,String name) { @Override public String toString() { String str = "HateTable:"; - for(Entry e : CatUtils.sortByValue(threats)) { - int threat = e.getValue(); + for(Entry e : CatUtils.sortByValue(threats)) { + Double threat = e.getValue(); LivingEntity ent = e.getKey(); String x = (ent instanceof Player)?((Player)ent).getName():ent.toString(); str += x+"("+threat+") "; @@ -62,8 +63,8 @@ public String toString() { } // Player hits this target and causes a given threat - public void addThreat(LivingEntity ent, int val) { - int threat = (threats.containsKey(ent)) ? threats.get(ent) + val : val; + public void addThreat(LivingEntity ent, double threat2) { + double threat = (threats.containsKey(ent)) ? threats.get(ent) + threat2 : threat2; threats.put(ent, threat); updateThreat(); } @@ -71,7 +72,7 @@ public void addThreat(LivingEntity ent, int val) { // Player does a drop aggro operation public Boolean zeroThreat(LivingEntity ent) { if (threats.containsKey(ent)) { - threats.put(ent, 0); + threats.put(ent, 0.0); if (aggro != null && ent.equals(aggro)) { updateTarget(); } @@ -97,9 +98,9 @@ public Boolean taunt(LivingEntity ent) { if(ent == null || aggro == null || aggro.equals(ent)) return false; - Integer curr = threats.get(aggro); + Double curr = threats.get(aggro); if(curr==null) { - curr = -1; + curr = -1.0; } threats.put(ent, curr); aggro = ent; @@ -129,15 +130,15 @@ public Set attackers() { return threats.keySet(); } - private Entry highest() { - Entry hi = null; + private Entry highest() { + Entry hi = null; if (!threats.isEmpty()) { Location sloc = self.getLocation(); - int max = -1; + double max = -1; - Iterator> it = threats.entrySet().iterator(); + Iterator> it = threats.entrySet().iterator(); while (it.hasNext()) { - Entry e = it.next(); + Entry e = it.next(); Entity ent = e.getKey(); Location eloc = ent.getLocation(); @@ -150,7 +151,7 @@ private Entry highest() { } it.remove(); // attacker is out of range (no exp/loot for them) } else { - int threat = e.getValue(); + double threat = e.getValue(); if (threat > max) { max = threat; hi = e; @@ -162,7 +163,7 @@ private Entry highest() { } private void updateThreat() { - Entry hi = highest(); + Entry hi = highest(); if (hi == null) { // Target dropped and nobody to switch to aggro = null; @@ -188,8 +189,8 @@ private void updateThreat() { if(aggro == null) { System.err.println("[Catacombs] aggro is null "+this); } - int max = hi.getValue(); - int curr = (threats.containsKey(aggro))?threats.get(aggro):-1; + Double max = hi.getValue(); + double curr = (threats.containsKey(aggro))?threats.get(aggro):-1; if (curr == -1 || (double)max > ((double)curr) * PULL_THREAT) { // Pull aggro aggro = max_who; if(aggro instanceof Player) { diff --git a/src/net/steeleyes/catacombs/ICatConfig.java b/src/main/java/net/steeleyes/catacombs/ICatConfig.java similarity index 100% rename from src/net/steeleyes/catacombs/ICatConfig.java rename to src/main/java/net/steeleyes/catacombs/ICatConfig.java diff --git a/src/net/steeleyes/catacombs/Mob.java b/src/main/java/net/steeleyes/catacombs/Mob.java similarity index 98% rename from src/net/steeleyes/catacombs/Mob.java rename to src/main/java/net/steeleyes/catacombs/Mob.java index 66cf77a..cfe2067 100644 --- a/src/net/steeleyes/catacombs/Mob.java +++ b/src/main/java/net/steeleyes/catacombs/Mob.java @@ -27,7 +27,7 @@ public class Mob { private LivingEntity ent; private MobType type=null; - private int hps; + private double hps; Boolean notify = false; private long gotHit=0; diff --git a/src/net/steeleyes/catacombs/MobShape.java b/src/main/java/net/steeleyes/catacombs/MobShape.java similarity index 100% rename from src/net/steeleyes/catacombs/MobShape.java rename to src/main/java/net/steeleyes/catacombs/MobShape.java diff --git a/src/net/steeleyes/catacombs/MobType.java b/src/main/java/net/steeleyes/catacombs/MobType.java similarity index 100% rename from src/net/steeleyes/catacombs/MobType.java rename to src/main/java/net/steeleyes/catacombs/MobType.java diff --git a/src/net/steeleyes/catacombs/MobTypes.java b/src/main/java/net/steeleyes/catacombs/MobTypes.java similarity index 100% rename from src/net/steeleyes/catacombs/MobTypes.java rename to src/main/java/net/steeleyes/catacombs/MobTypes.java diff --git a/src/net/steeleyes/catacombs/Monsters.java b/src/main/java/net/steeleyes/catacombs/Monsters.java similarity index 96% rename from src/net/steeleyes/catacombs/Monsters.java rename to src/main/java/net/steeleyes/catacombs/Monsters.java index 1682b5d..475d777 100644 --- a/src/net/steeleyes/catacombs/Monsters.java +++ b/src/main/java/net/steeleyes/catacombs/Monsters.java @@ -83,7 +83,7 @@ public WildResp(Boolean wild, long delta) { } public WildResp isWild(LivingEntity damager, long swing,CatMob mob) { - int pct = (mob==null)?0:mob.getHealth(); + double pct = (mob==null)?0:mob.getHealth(); Boolean wild = false; long delta = 0; long now = Calendar.getInstance().getTimeInMillis(); @@ -113,7 +113,7 @@ public void playerHeals(CatConfig cnf,Player healer, Player healee) { if(!healee.isDead()){ WildResp resp = isWild(healer,HEAL_PLAYER,null); if(!resp.wild) { - int health = healee.getHealth(); + double health = healee.getHealth(); if(health<20) { CatUtils.improveDurability(healer,2); healee.setHealth(Math.min(20, health+2)); @@ -163,10 +163,10 @@ public void monsterHits(CatConfig cnf, EntityDamageEvent evt) { final int dmg = 10; //evt.getDamage(); evt.setDamage(dmg); pp.setHealth(pp.getMaxHealth()); - final int before = pp.getHealth(); + final double before = pp.getHealth(); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin,new Runnable() { public void run() { - int actual_dmg = before-pp.getHealth(); + double actual_dmg = before-pp.getHealth(); System.out.println("[Catacombs] delayed ac="+num+" dmg="+dmg+" actual="+actual_dmg); } }, 1); @@ -177,7 +177,7 @@ public void playerHits(CatConfig cnf,EntityDamageEvent evt) { LivingEntity damagee = (LivingEntity) evt.getEntity(); CatMob mob = monsters.get(damagee); LivingEntity damager = (LivingEntity) CatUtils.getDamager(evt); - int dmg = evt.getDamage(); + double dmg = evt.getDamage(); evt.setDamage(1); if(damager instanceof Player) { @@ -208,7 +208,7 @@ public void playerHits(CatConfig cnf,EntityDamageEvent evt) { player.sendMessage("You feed "+mob+" "+mat); } } - int threat = CatUtils.getThreatFixDurability(player,dmg); + double threat = CatUtils.getThreatFixDurability(player,dmg); dmg += adjust; if(dmg<1) dmg = 1; if(mob.hit(damager, dmg, threat)) { diff --git a/src/net/steeleyes/catacombs/Players.java b/src/main/java/net/steeleyes/catacombs/Players.java similarity index 100% rename from src/net/steeleyes/catacombs/Players.java rename to src/main/java/net/steeleyes/catacombs/Players.java diff --git a/src/net/steeleyes/catacombs/Region.java b/src/main/java/net/steeleyes/catacombs/Region.java similarity index 100% rename from src/net/steeleyes/catacombs/Region.java rename to src/main/java/net/steeleyes/catacombs/Region.java diff --git a/src/net/steeleyes/catacombs/Vector.java b/src/main/java/net/steeleyes/catacombs/Vector.java similarity index 100% rename from src/net/steeleyes/catacombs/Vector.java rename to src/main/java/net/steeleyes/catacombs/Vector.java diff --git a/src/net/steeleyes/maps/Config.java b/src/main/java/net/steeleyes/maps/Config.java similarity index 100% rename from src/net/steeleyes/maps/Config.java rename to src/main/java/net/steeleyes/maps/Config.java diff --git a/src/net/steeleyes/maps/Direction.java b/src/main/java/net/steeleyes/maps/Direction.java similarity index 100% rename from src/net/steeleyes/maps/Direction.java rename to src/main/java/net/steeleyes/maps/Direction.java diff --git a/src/net/steeleyes/maps/EConfig.java b/src/main/java/net/steeleyes/maps/EConfig.java similarity index 100% rename from src/net/steeleyes/maps/EConfig.java rename to src/main/java/net/steeleyes/maps/EConfig.java diff --git a/src/net/steeleyes/maps/Grid.java b/src/main/java/net/steeleyes/maps/Grid.java similarity index 100% rename from src/net/steeleyes/maps/Grid.java rename to src/main/java/net/steeleyes/maps/Grid.java diff --git a/src/net/steeleyes/maps/IConfig.java b/src/main/java/net/steeleyes/maps/IConfig.java similarity index 100% rename from src/net/steeleyes/maps/IConfig.java rename to src/main/java/net/steeleyes/maps/IConfig.java diff --git a/src/net/steeleyes/maps/Level.java b/src/main/java/net/steeleyes/maps/Level.java similarity index 100% rename from src/net/steeleyes/maps/Level.java rename to src/main/java/net/steeleyes/maps/Level.java diff --git a/src/net/steeleyes/maps/PrePlanned.java b/src/main/java/net/steeleyes/maps/PrePlanned.java similarity index 100% rename from src/net/steeleyes/maps/PrePlanned.java rename to src/main/java/net/steeleyes/maps/PrePlanned.java diff --git a/src/net/steeleyes/maps/Room.java b/src/main/java/net/steeleyes/maps/Room.java similarity index 100% rename from src/net/steeleyes/maps/Room.java rename to src/main/java/net/steeleyes/maps/Room.java diff --git a/src/net/steeleyes/maps/Square.java b/src/main/java/net/steeleyes/maps/Square.java similarity index 100% rename from src/net/steeleyes/maps/Square.java rename to src/main/java/net/steeleyes/maps/Square.java diff --git a/src/net/steeleyes/maps/Vector2D.java b/src/main/java/net/steeleyes/maps/Vector2D.java similarity index 100% rename from src/net/steeleyes/maps/Vector2D.java rename to src/main/java/net/steeleyes/maps/Vector2D.java diff --git a/src/COPYING b/src/main/resources/COPYING similarity index 98% rename from src/COPYING rename to src/main/resources/COPYING index 3d90694..20d40b6 100644 --- a/src/COPYING +++ b/src/main/resources/COPYING @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read . \ No newline at end of file diff --git a/src/plugin.yml b/src/main/resources/plugin.yml similarity index 89% rename from src/plugin.yml rename to src/main/resources/plugin.yml index e2fbd8d..7aa6527 100644 --- a/src/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,9 +1,9 @@ -name: Catacombs -main: net.steeleyes.catacombs.Catacombs -version: 2.8 -depend: -softdepend: [Vault Multiverse] -commands: - catacombs: - description: Build catacombs +name: Catacombs +main: net.steeleyes.catacombs.Catacombs +version: 3.45 +depend: +softdepend: [Vault Multiverse] +commands: + catacombs: + description: Build catacombs aliases: ['cat'] \ No newline at end of file diff --git a/src/net/.DS_Store b/src/net/.DS_Store deleted file mode 100644 index 2d49d5c..0000000 Binary files a/src/net/.DS_Store and /dev/null differ diff --git a/src/net/._.DS_Store b/src/net/._.DS_Store deleted file mode 100644 index 338bd7b..0000000 Binary files a/src/net/._.DS_Store and /dev/null differ diff --git a/src/net/steeleyes/.DS_Store b/src/net/steeleyes/.DS_Store deleted file mode 100644 index e67f9b5..0000000 Binary files a/src/net/steeleyes/.DS_Store and /dev/null differ diff --git a/src/net/steeleyes/._.DS_Store b/src/net/steeleyes/._.DS_Store deleted file mode 100644 index 338bd7b..0000000 Binary files a/src/net/steeleyes/._.DS_Store and /dev/null differ diff --git a/src/net/steeleyes/catacombs/CatCuboid.java b/src/net/steeleyes/catacombs/CatCuboid.java deleted file mode 100644 index 777d810..0000000 --- a/src/net/steeleyes/catacombs/CatCuboid.java +++ /dev/null @@ -1,745 +0,0 @@ -/* This file is part of Catacombs. - - Catacombs is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Catacombs is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Catacombs. If not, see . - * - * @author John Keay <>(@Steeleyes, @Blockhead2) - * @copyright Copyright (C) 2011 - * @license GNU GPL -*/ -package net.steeleyes.catacombs; - -import org.bukkit.World; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.Dispenser; -import org.bukkit.block.Chest; - -import org.bukkit.entity.Entity; -import org.bukkit.entity.Creature; -import org.bukkit.Location; - -import java.util.List; -import java.util.ArrayList; -import java.util.Arrays; -import net.minecraft.server.v1_4_6.EnumSkyBlock; -import org.bukkit.craftbukkit.v1_4_6.CraftWorld; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.material.Bed; -import org.bukkit.material.MaterialData; - - -public class CatCuboid extends Cuboid { - private Type type = Type.LEVEL; - private World world = null; - public enum Type { LEVEL, HUT } - - public CatCuboid(World world,int xl,int yl,int zl,int xh,int yh, int zh, Type type) { - super(xl,yl,zl,xh,yh,zh); - this.type = type; - this.world = world; - } - - public CatCuboid(World world,int xl,int yl,int zl,int xh,int yh, int zh) { - super(xl,yl,zl,xh,yh,zh); - this.world = world; - } - - @Override - public String toString() { - return super.toString()+" world="+world.getName()+" type="+type; - } - - - public List dump(Vector top) { - List info = map(); - info.add(" "); - for(int y=yl;y<=yh;y++) { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - Block blk = world.getBlockAt(x,y,z); - info.add((x-top.x)+","+(y-top.y)+","+(z-top.z)+","+blk.getTypeId()+","+blk.getData()); - } - } - } - return info; - } - - public void setType(Type t) { - type = t; - } - - public Type getType() { - return type; - } - - // Add 3 horrible routine to guess key facts that I didn't save in the .db - // TODO: need to figure out how to expand the table without loosing backwards compatibility, - public int guessRoofSize() { - int depth = 256; - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yh,i=0;y>=yl;y--,i++) { - Block blk = world.getBlockAt(x,y,z); - Material mat = blk.getType(); - if(mat == Material.AIR) { - if(i==0) break; // Stop if top is AIR - if(i=yl;y--,i++) { - Block blk = world.getBlockAt(x,y,z); - Material mat = blk.getType(); - if(mat == Material.AIR) { - if(i==0) - break; // Stop if top is AIR - depth++; - } else { - if(depth>0) { - if(depth>max_depth) - max_depth = depth; - break; // Stop on first solid after air. - } - } - } - } - } - if(max_depth<3) - max_depth = 3; - return max_depth; - } - - public Vector guessEndLocation() { - // Look for a ladder down first - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - int y = yl; - Block blk = world.getBlockAt(x,y,z); - if(blk.getType()==Material.LADDER) { - return new Vector(x,y-1,z); - } - } - } - // If no ladder down then look for the end chest - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - if(isBigChest(blk)) { - return new Vector(x,yl-1,z); - } - } - } - } - return null; - } - - static int debug = 0; - - // TODO: Badly need to make the major/minor block names persist!! - // Hunt for a frequent soild block just below the roof level that's - // next to air/web/torch. Call that the major material - public CatMat guessMajorMat(int roofDepth) { - List dirs = new ArrayList(Arrays.asList( - BlockFace.NORTH,BlockFace.EAST, - BlockFace.SOUTH,BlockFace.WEST - )); - - final CatMat last = new CatMat(Material.AIR); - final CatMat best_mat = new CatMat(Material.AIR); - final CatMat mat = new CatMat(Material.AIR); - int best=0; - int cnt=0; - if(debug==1) System.out.println("[Catacombs] roofDepth="+roofDepth); - - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - int y=yh-roofDepth; - Block blk = world.getBlockAt(x,y,z); - mat.getBlock(blk); - if(debug==1) System.out.println("[Catacombs] Block mat="+mat+" blk="+blk.getType()); - - if(!mat.is(Material.AIR) && !mat.is(Material.TORCH)) { - if(debug==1) System.out.println("[Catacombs] soid block Block mat="+mat+" blk="+blk.getType()); - Boolean near_air = false; - for(BlockFace dir : dirs) { - Material near = blk.getRelative(dir).getType(); - if(near==Material.AIR || near==Material.TORCH || near==Material.WEB) { - near_air=true; - break; - } - } - if(near_air) { - if(debug==1) System.out.println("[Catacombs] near air Block mat="+mat+" blk="+blk.getType()); - if(!mat.equals(last)) { - if(cnt>best) { - best_mat.get(last); - best = cnt; - } - last.get(mat); - cnt=1; - } else { - cnt++; - } - } - } - } - } - if(cnt>best) { - best_mat.get(last); - best = cnt; - } - if(debug==1) System.out.println("[Catacombs] final guess mat = "+best_mat+" best="+best); - //debug++; - return best_mat; - } - - public Boolean isLevel() { - return type == Type.LEVEL; - } - - public Boolean isHut() { - return type == Type.HUT; - } - - public Boolean overlaps(CatCuboid that) { - // higher levels check the worlds match so no need to check again - assert(world.equals(that.world)); - return intersects(that); - } - - public Boolean isInRaw(Block blk) { - // higher levels check the worlds match so no need to check again - assert(world.equals(blk.getWorld())); - return super.isIn(blk.getX(),blk.getY(),blk.getZ()); - } - - public void unrender(BlockChangeHandler handler,Boolean emptyChest,int num_air) { - if(type==Type.LEVEL) - setCube(handler,Material.STONE,true); - else { - CatCuboid floor = new CatCuboid(world,xl,yl,zl,xh,yh-num_air,zh); - // Go one higher to cover anything (torches typically) on the hut roof. - CatCuboid upper = new CatCuboid(world,xl,yh-num_air+1,zl,xh,yh+1,zh); - upper.setCube(handler,Material.AIR,emptyChest); - floor.setCube(handler,Material.STONE,true); - } - } - - @Deprecated - public void clearBlock(Material mat) { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - if(blk.getType() == mat) { - if(mat == Material.CHEST) { - Object o = blk.getState(); - if(o != null && o instanceof InventoryHolder) { - InventoryHolder cont = (InventoryHolder) o; - cont.getInventory().clear(); - } - } - blk.setType(Material.AIR); - } - } - } - } - } - - public void removeTorch() { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - if(blk.getType() == Material.TORCH) { - blk.setTypeId(Material.AIR.getId()); - } - } - } - } - forceLightLevel(0); - } - - public void forceLightLevel(int level) { - net.minecraft.server.v1_4_6.World w = ((CraftWorld) world).getHandle(); - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - w.b(EnumSkyBlock.BLOCK, x, y, z, level); - } - } - } - } - - public void restoreCake() { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - Block above = blk.getRelative(BlockFace.UP); - if(blk.getType() == Material.FENCE) { - if(above.getType() == Material.AIR) { - above.setType(Material.CAKE_BLOCK); - } else if(above.getType() == Material.CAKE_BLOCK) { - if(above.getData() != (byte)0) { - above.setData((byte)0); - } - } - } - } - } - } - } - - public void addGlow(CatMat mat,int roofDepth) { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - int y = yh-roofDepth+1; - Block blk = world.getBlockAt(x,y,z); - Block other = blk.getRelative(BlockFace.DOWN,1); - if(mat.equals(blk) && other.getType() == Material.AIR) { - blk.setType(Material.GLOWSTONE); - } - } - } - } - - public void removeGlow(CatMat mat,int roofDepth) { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - int y = yh-roofDepth+1; - Block blk = world.getBlockAt(x,y,z); - Block other = blk.getRelative(BlockFace.DOWN,1); - if(blk.getType() == Material.GLOWSTONE && other.getType() == Material.AIR) { - mat.setBlock(blk); - } - } - } - } - - public void buildWindows(CatMat mat,int height) { - if(type == Type.HUT) - return; - - int x,z; - int y = yl+height; - - x = xl; - for(z=zl+1;z<=zh-1;z++) { - Block blk = world.getBlockAt(x,y,z); - if(world.getBlockAt(x-1,y,z).getType() == Material.AIR && - world.getBlockAt(x+1,y,z).getType() == Material.AIR ) { - mat.setBlock(blk); - } - } - x = xh; - for(z=zl+1;z<=zh-1;z++) { - Block blk = world.getBlockAt(x,y,z); - if(world.getBlockAt(x-1,y,z).getType() == Material.AIR && - world.getBlockAt(x+1,y,z).getType() == Material.AIR ) { - mat.setBlock(blk); - } - } - z = zl; - for(x=xl+1;x<=xh-1;x++) { - Block blk = world.getBlockAt(x,y,z); - if(world.getBlockAt(x,y,z-1).getType() == Material.AIR && - world.getBlockAt(x,y,z+1).getType() == Material.AIR ) { - mat.setBlock(blk); - } - } - z = zh; - for(x=xl+1;x<=xh-1;x++) { - Block blk = world.getBlockAt(x,y,z); - if(world.getBlockAt(x,y,z-1).getType() == Material.AIR && - world.getBlockAt(x,y,z+1).getType() == Material.AIR ) { - mat.setBlock(blk); - } - } - } - - public void closeDoors(Catacombs plugin) { - //Boolean secretOn = !plugin.cnf.SecretDoorOff(); - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - if(blk.getType() == Material.WOODEN_DOOR || blk.getType() == Material.IRON_DOOR_BLOCK) { - byte data = blk.getData(); - if(data >= 4 && data < 8) { - data = (byte)(data ^ 4); - blk.setData(data); - } - } else if(blk.getType() == Material.TRAP_DOOR) { - blk.setData((byte)(blk.getData() & ~4)); - } else if(blk.getType() == Material.LEVER) { - blk.setData((byte)(blk.getData() & ~8)); - } else if(blk.getType() == Material.PISTON_STICKY_BASE) { - Block power = blk.getRelative(BlockFace.DOWN,1); - if(power.getType() != Material.REDSTONE_TORCH_ON) { - Block upper_door = blk.getRelative(BlockFace.UP,3); - Material m = power.getType(); - byte code = power.getData(); - power.setType(Material.REDSTONE_TORCH_ON); - upper_door.setTypeIdAndData(m.getId(),code,false); - } - } - } - } - } - } - - public void refillChests(CatConfig config) { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - if(blk.getType() == Material.CHEST) { - if(type == Type.LEVEL) { // Leave chests in the hut - Chest chest = (Chest) blk.getState(); - chest.getInventory().clear(); // Clear and refill chests inside - if(isBigChest(blk)) { - CatLoot.bigChest(config,chest.getInventory()); - } else if (isMidChest(blk)) { - CatLoot.midChest(config,chest.getInventory()); - } else { - CatLoot.smallChest(config,chest.getInventory()); - } - } - } else if(blk.getType() == Material.DISPENSER) { - Dispenser cont = (Dispenser) blk.getState(); - cont.getInventory().clear(); // Clear and refill chests inside - CatLoot.fillChest(config,cont.getInventory(),config.TrapList()); - } - } - } - } - } - - public void clearMonsters(Catacombs plugin) { - for(Entity ent : world.getEntities()) { - if(ent instanceof Creature) { - Location loc = ent.getLocation(); - Block blk = loc.getBlock(); - if(isIn(blk.getX(),blk.getY(),blk.getZ())) { - //if(plugin.monsters != null) - // plugin.monsters.remove((LivingEntity)ent); - ent.remove(); - } - } - } - } - - // Issues with the secret door piston creation in earlier versions of Catacombs - // left some secret doors broken (only opening by 1 block rather than 2). - // This code finds any problem locations by inspection of nearby blocks - // and fixes them. - public int fixSecretDoors() { - int cnt = 0; - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - Material mat = blk.getType(); - Block above = blk.getRelative(BlockFace.UP); - Block above2 = above.getRelative(BlockFace.UP); - Block below = blk.getRelative(BlockFace.DOWN); - if(blk.getType() == Material.PISTON_STICKY_BASE && - below.getType() == Material.REDSTONE_TORCH_ON && - above.getType() != Material.PISTON_EXTENSION) { - //System.out.println("[Catacombs] Fixing closed secret door "+blk+" "+mat+" "+above.getType()+" "+below.getType()); - above.setTypeIdAndData(Material.PISTON_EXTENSION.getId(),(byte)9,false); - blk.setTypeIdAndData(Material.PISTON_STICKY_BASE.getId(),(byte)9,false); - cnt++; - } else if (blk.getType() == Material.PISTON_STICKY_BASE && - below.getType() != Material.REDSTONE_TORCH_ON && above2.getType() != Material.AIR) { - //System.out.println("[Catacombs] fixing open secret door "+blk+" "+mat+" "+above.getType()+" "+below.getType()); - above.setTypeIdAndData(above2.getType().getId(),above2.getData(),false); - above2.setType(Material.AIR); - blk.setTypeIdAndData(Material.PISTON_STICKY_BASE.getId(),(byte)1,false); - cnt++; - } - } - } - } - return cnt; - } - - // Minecraft v1.2.3 Changed the way door hinges are positioned - // This code will fix up the old dungeons by inspection of nearby - // blocks. It will also close all the doors. - public int fixDoors() { - int cnt = 0; - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - Material mat = blk.getType(); - Block above = blk.getRelative(BlockFace.UP); - if((mat == Material.WOODEN_DOOR && above.getType() == Material.WOODEN_DOOR) || - (mat == Material.IRON_DOOR_BLOCK && above.getType() == Material.IRON_DOOR_BLOCK) ) { - byte a = above.getData(); - byte b = blk.getData(); - byte new_a = getDoorUpperCode(blk); - byte new_b = getDoorLowerCode(blk); - if(a!=new_a || b!=new_b) { - blk.setData(new_b); - above.setData(new_a); - cnt++; - } - } - } - } - } - return cnt; - } - - public int changeDoorsToIron() { - int cnt = 0; - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - Material mat = blk.getType(); - Block above = blk.getRelative(BlockFace.UP); - if(mat == Material.WOODEN_DOOR && above.getType() == Material.WOODEN_DOOR) { - byte blk_b = blk.getData(); - byte above_b = above.getData(); - blk.setTypeIdAndData(Material.IRON_DOOR_BLOCK.getId(), blk_b, false); - above.setTypeIdAndData(Material.IRON_DOOR_BLOCK.getId(), above_b, false); - cnt++; - } - } - } - } - return cnt; - } - - private byte getDoorLowerCode(Block blk) { - Block e = blk.getRelative(BlockFace.EAST); - Block w = blk.getRelative(BlockFace.WEST); - if(CatUtils.isSolid(e) && CatUtils.isSolid(w)) - return 0; - - Block n = blk.getRelative(BlockFace.NORTH); - Block s = blk.getRelative(BlockFace.SOUTH); - if(CatUtils.isSolid(n) && CatUtils.isSolid(s)) - return 1; - - if(CatUtils.isSolid(e)) return 0; - if(CatUtils.isSolid(w)) return 0; - if(CatUtils.isSolid(s)) return 1; - if(CatUtils.isSolid(n)) return 1; - return 0; - } - - private byte getDoorUpperCode(Block blk) { - Block e = blk.getRelative(BlockFace.EAST); - Block w = blk.getRelative(BlockFace.WEST); - if(CatUtils.isSolid(e) && CatUtils.isSolid(w)) - return 8; - - Block n = blk.getRelative(BlockFace.NORTH); - Block s = blk.getRelative(BlockFace.SOUTH); - if(CatUtils.isSolid(n) && CatUtils.isSolid(s)) - return 8; - - if(CatUtils.isSolid(e)) return 8; - if(CatUtils.isSolid(w)) return 9; - if(CatUtils.isSolid(s)) return 8; - if(CatUtils.isSolid(n)) return 9; - return 0; - } - - public Boolean isBigChest(Block blk) { - if(blk.getType() != Material.CHEST) - return false; - - int cnt = 0; - Material major = Material.COBBLESTONE; - Material minor = Material.MOSSY_COBBLESTONE; - - Material below = blk.getRelative(BlockFace.DOWN,1).getType(); - - for(BlockFace dir : Arrays.asList( - BlockFace.NORTH,BlockFace.EAST, - BlockFace.SOUTH,BlockFace.WEST)) { - Block b = blk.getRelative(dir,1); - if(b.getType() == major || b.getType() == minor) { - cnt++; - } - } - - return below == Material.GRASS || cnt == 3; - } - - public Boolean isMidChest(Block blk) { - int cnt = 0; - - Block b; - b = blk.getRelative(BlockFace.EAST,1); - if(b.getType() == Material.CHEST) { - cnt++; - } - b = blk.getRelative(BlockFace.NORTH,1); - if(b.getType() == Material.CHEST) { - cnt++; - } - return cnt==1; - } - - public void setCube(BlockChangeHandler handler, Material mat,Boolean emptyChest) { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - for(int y=yl;y<=yh;y++) { - Block blk = world.getBlockAt(x,y,z); - Object o = blk.getState(); - if(emptyChest) { - if(o != null && o instanceof InventoryHolder) { - InventoryHolder cont = (InventoryHolder) o; - cont.getInventory().clear(); - } - } - Material before = blk.getType(); - if(before == Material.LADDER || - before == Material.TORCH || - before == Material.TRAP_DOOR || - before == Material.WATER || - before == Material.LAVA || - before == Material.RED_MUSHROOM || - before == Material.BROWN_MUSHROOM || - before == Material.REDSTONE_TORCH_ON || - before == Material.IRON_DOOR_BLOCK || - before == Material.WALL_SIGN || - before == Material.SIGN_POST || - before == Material.VINE || - before == Material.WOODEN_DOOR - ) { - handler.addHigh(blk,mat); - } else if(before == Material.BED_BLOCK) { - MaterialData md = blk.getState().getData(); - if(md instanceof Bed) { - Bed bed = (Bed) md; - if(bed.isHeadOfBed()) { - Block foot = blk.getRelative(bed.getFacing().getOppositeFace()); - foot.setType(Material.AIR); - blk.setType(Material.AIR); - handler.addLow(blk,mat); - handler.addLow(blk,mat); - } - } - } else if(o != null && o instanceof InventoryHolder) { - blk.setType(Material.AIR); - blk.breakNaturally(); - handler.addLow(blk,mat); - } else { - handler.addLow(blk,mat); - } - } - } - } - } - - public Boolean isNatural(CatConfig cnf) { - for(int x=xl;x<=xh;x++) { - for(int y=yl;y<=yh;y++) { - for(int z=zl;z<=zh;z++) { - Block blk = world.getBlockAt(x,y,z); - if(!cnf.isNatural(blk)) { - return false; - } - } - } - } - return true; - } - - public Boolean isCubeAir() { - for(int x=xl;x<=xh;x++) { - for(int y=yl;y<=yh;y++) { - for(int z=zl;z<=zh;z++) { - Block blk = world.getBlockAt(x,y,z); - if(blk.getType() != Material.AIR) { - return false; - } - } - } - } - return true; - } - - // Try and figure out an approximate map from the world blocks - public List map() { - List info = new ArrayList(); - char [][] grid = new char[xh-xl+1][zh-zl+1]; - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - grid[x-xl][z-zl] = ' '; - } - } - for(int y=yl;y<=yh;y++) { - for(int x=xl;x<=xh;x++) { - for(int z=zl;z<=zh;z++) { - Block blk = world.getBlockAt(x,y,z); - int id = blk.getTypeId(); - char was = grid[x-xl][z-zl]; - if (id == 29) grid[x-xl][z-zl]='$'; - if ((was == ' ' || was==',') && (id==4 || id==48 || id==98 || id==24)) grid[x-xl][z-zl]='#'; - if ((was == '#' || was==' ') && (id==0)) grid[x-xl][z-zl]=','; - if ((was == ',') && (id==0)) grid[x-xl][z-zl]='.'; - if (id==20 || id==102) grid[x-xl][z-zl]='G'; - if (id==9 || id ==8) grid[x-xl][z-zl]='W'; - if (id==11 || id == 10) grid[x-xl][z-zl]='L'; - if (id==26) grid[x-xl][z-zl]='z'; - if (id==30) grid[x-xl][z-zl]='w'; - if (id==42) grid[x-xl][z-zl]='A'; - if (id==50) grid[x-xl][z-zl]='t'; - if (id==52) grid[x-xl][z-zl]='M'; - if (id==54) grid[x-xl][z-zl]='c'; - if (id==58) grid[x-xl][z-zl]='T'; - if (id==61) grid[x-xl][z-zl]='f'; - if (id==64) grid[x-xl][z-zl]='+'; - if (id==65) grid[x-xl][z-zl]='^'; - if (id==70) grid[x-xl][z-zl]='x'; - if (id==88) grid[x-xl][z-zl]='s'; - if (id==92) grid[x-xl][z-zl]='='; - if (id==96) grid[x-xl][z-zl]='v'; - } - } - } - for(int z=zl;z<=zh;z++) { - String s = "# "; - for(int x=xl;x<=xh;x++) { - char ch = grid[x-xl][z-zl]; - s += (ch==',')?'#':ch; - } - info.add(s); - } - info.add(" "); - return info; - } -}