Starting v2.6

Updated cleanroom generator.
Dont need to define server in some listeners, never use it.
This commit is contained in:
Steven Lawson 2012-09-13 19:30:55 -04:00
parent 5838eb23ff
commit 614d502bb6
10 changed files with 240 additions and 125 deletions

View File

@ -1,5 +1,5 @@
#Sat, 28 Jul 2012 15:17:23 -0400
#Thu, 13 Sep 2012 19:16:42 -0400
program.VERSION=2.5
program.BUILDNUM=77
program.BUILDDATE=07/28/2012 03\:17 PM
program.VERSION=2.6
program.BUILDNUM=20
program.BUILDDATE=09/13/2012 07\:16 PM

View File

@ -74,7 +74,7 @@
<target name="-pre-jar">
<buildnumber file="buildnumber.properties" />
<propertyfile file="appinfo.properties">
<entry key="program.VERSION" default="2.5" />
<entry key="program.VERSION" default="0.0" />
<entry key="program.BUILDNUM" value="${build.number}" />
<entry key="program.BUILDDATE" type="date" value="now" pattern="MM/dd/yyyy hh:mm aa" />
</propertyfile>

View File

@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit!
#Sat Jul 28 15:17:23 EDT 2012
build.number=78
#Thu Sep 13 19:16:42 EDT 2012
build.number=21

View File

@ -1,73 +1,73 @@
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=TotalFreedomMod
application.vendor=Michael
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}/TotalFreedomMod.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
includes=**
jar.compress=false
javac.classpath=\
${libs.Bukkit.classpath}
# Space-separated list of extra javac options
javac.compilerargs=-Xlint:unchecked -Xlint:deprecation
javac.deprecation=false
javac.processorpath=\
${javac.classpath}
javac.source=1.6
javac.target=1.6
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}
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=
main.class=totalfreedommod.TotalFreedomMod
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}
# Space-separated list of JVM arguments used when running the project
# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
# or test-sys-prop.name=value to set system properties for unit tests):
run.jvmargs=
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
source.encoding=UTF-8
src.dir=src
test.src.dir=test
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=TotalFreedomMod
application.vendor=Michael
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}/TotalFreedomMod.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
includes=**
jar.compress=false
javac.classpath=\
${libs.CraftBukkit.classpath}
# Space-separated list of extra javac options
javac.compilerargs=-Xlint:unchecked -Xlint:deprecation
javac.deprecation=false
javac.processorpath=\
${javac.classpath}
javac.source=1.6
javac.target=1.6
javac.test.classpath=\
${javac.classpath}:\
${build.classes.dir}
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=
main.class=totalfreedommod.TotalFreedomMod
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}
# Space-separated list of JVM arguments used when running the project
# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
# or test-sys-prop.name=value to set system properties for unit tests):
run.jvmargs=
run.test.classpath=\
${javac.test.classpath}:\
${build.test.classes.dir}
source.encoding=UTF-8
src.dir=src
test.src.dir=test

View File

@ -0,0 +1,55 @@
/*
* Cleanroom Generator
* Copyright (C) 2011-2012 nvx
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package me.StevenLawson.TotalFreedomMod;
import java.util.Random;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
public class CleanroomBlockPopulator extends BlockPopulator
{
byte[] layerDataValues;
protected CleanroomBlockPopulator(byte[] layerDataValues)
{
this.layerDataValues = layerDataValues;
}
public void populate(World world, Random random, Chunk chunk)
{
if (layerDataValues != null)
{
int x = chunk.getX() << 4;
int z = chunk.getZ() << 4;
for (int y = 0; y < layerDataValues.length ; y++)
{
byte dataValue = layerDataValues[y];
if (dataValue == 0) continue;
for (int xx = 0; xx < 16; xx++)
{
for (int zz = 0; zz < 16; zz++)
{
world.getBlockAt(x + xx, y, z + zz).setData(dataValue);
}
}
}
}
}
}

View File

@ -1,6 +1,6 @@
/*
* Cleanroom Generator
* Copyright (C) 2011 nvx
* Copyright (C) 2011-2012 nvx
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
@ -18,22 +18,23 @@
package me.StevenLawson.TotalFreedomMod;
import static java.lang.System.arraycopy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import static java.lang.System.arraycopy;
public class CleanroomChunkGenerator extends ChunkGenerator
{
private byte[] chunk = new byte[32768];
private Logger log = Logger.getLogger("Minecraft");
private short[] layer;
private byte[] layerDataValues;
public CleanroomChunkGenerator()
{
@ -42,19 +43,21 @@ public class CleanroomChunkGenerator extends ChunkGenerator
public CleanroomChunkGenerator(String id)
{
byte[] layer = new byte[128];
if (id != null)
{
try
{
int y = 0;
layer = new short[128]; // Default to 128, will be resized later if required
layerDataValues = null;
if ((id.length() > 0) && (id.charAt(0) == '.')) // Is the first character a '.'? If so, skip bedrock generation.
{
id = id.substring(1); // Skip bedrock then and remove the .
} else // Guess not, bedrock at layer0 it is then.
{
layer[y++] = (byte)Material.BEDROCK.getId();
layer[y++] = (short)Material.BEDROCK.getId();
}
if (id.length() > 0)
@ -66,25 +69,33 @@ public class CleanroomChunkGenerator extends ChunkGenerator
for (int i = 0; i < tokens.length; i += 2)
{
int height = Integer.parseInt(tokens[i]);
if ((height <= 0) || (height > 127))
if (height <= 0)
{
System.out.println("Invalid height '" + tokens[i] + "'. Using 64 instead.");
log.warning("[CleanroomGenerator] Invalid height '" + tokens[i] + "'. Using 64 instead.");
height = 64;
}
if ((height + y) > 127)
String materialTokens[] = tokens[i + 1].split("[:]", 2);
byte dataValue = 0;
if (materialTokens.length == 2)
{
System.out.println("Maximum height reached, ignoring additional layers.");
break;
try
{
// Lets try to read the data value
dataValue = Byte.parseByte(materialTokens[1]);
} catch (Exception e)
{
log.warning("[CleanroomGenerator] Invalid Data Value '" + materialTokens[1] + "'. Defaulting to 0.");
dataValue = 0;
}
}
Material mat = Material.matchMaterial(tokens[i + 1]);
Material mat = Material.matchMaterial(materialTokens[0]);
if (mat == null)
{
try
{
// Mabe it's an integer?
mat = Material.getMaterial(Integer.parseInt(tokens[i + 1]));
mat = Material.getMaterial(Integer.parseInt(materialTokens[0]));
} catch (Exception e)
{
// Well, I guess it wasn't an integer after all... Awkward...
@ -92,51 +103,109 @@ public class CleanroomChunkGenerator extends ChunkGenerator
if (mat == null)
{
System.out.println("Invalid Block ID '" + tokens[i + 1] + "'. Defaulting to stone.");
log.warning("[CleanroomGenerator] Invalid Block ID '" + materialTokens[0] + "'. Defaulting to stone.");
mat = Material.STONE;
}
}
if (!mat.isBlock())
{
System.out.println("Error, '" + tokens[i + 1] + "' is not a block. Defaulting to stone.");
log.warning("[CleanroomGenerator] Error, '" + materialTokens[0] + "' is not a block. Defaulting to stone.");
mat = Material.STONE;
}
Arrays.fill(layer, y, y + height, (byte)mat.getId());
if (y + height > layer.length)
{
short[] newLayer = new short[Math.max(y + height, layer.length * 2)];
arraycopy(layer, 0, newLayer, 0, y);
layer = newLayer;
if (layerDataValues != null)
{
byte[] newLayerDataValues = new byte[Math.max(y + height, layerDataValues.length * 2)];
arraycopy(layerDataValues, 0, newLayerDataValues, 0, y);
layerDataValues = newLayerDataValues;
}
}
Arrays.fill(layer, y, y + height, (short)mat.getId());
if (dataValue != 0)
{
if (layerDataValues == null)
{
layerDataValues = new byte[layer.length];
}
Arrays.fill(layerDataValues, y, y + height, dataValue);
}
y += height;
}
}
} catch(Exception e)
// Trim to size
if (layer.length > y)
{
short[] newLayer = new short[y];
arraycopy(layer, 0, newLayer, 0, y);
layer = newLayer;
}
if (layerDataValues != null && layerDataValues.length > y)
{
byte[] newLayerDataValues = new byte[y];
arraycopy(layerDataValues, 0, newLayerDataValues, 0, y);
layerDataValues = newLayerDataValues;
}
} catch (Exception e)
{
System.out.println("Error parsing CleanroomGenerator ID '" + id + "'. using defaults '64,1': " + e.toString());
log.severe("[CleanroomGenerator] Error parsing CleanroomGenerator ID '" + id + "'. using defaults '64,1': " + e.toString());
e.printStackTrace();
layer[0] = (byte)Material.BEDROCK.getId();
Arrays.fill(layer, 1, 65, (byte)Material.STONE.getId());
Arrays.fill(layer, 65, 128, (byte)Material.AIR.getId()); // Just in case...
layerDataValues = null;
layer = new short[65];
layer[0] = (short)Material.BEDROCK.getId();
Arrays.fill(layer, 1, 65, (short)Material.STONE.getId());
}
} else
{
layer[0] = (byte)Material.BEDROCK.getId();
Arrays.fill(layer, 1, 65, (byte)Material.STONE.getId());
}
for (int xz = 0; xz < 256; xz++)
{
arraycopy(layer, 0, chunk, xz * 128, layer.length);
layerDataValues = null;
layer = new short[65];
layer[0] = (short)Material.BEDROCK.getId();
Arrays.fill(layer, 1, 65, (short)Material.STONE.getId());
}
}
public byte[] generate(World world, Random random, int cx, int cz)
@Override
public short[][] generateExtBlockSections(World world, Random random, int x, int z, BiomeGrid biomes)
{
return chunk.clone(); // Can't get more efficient than that...
int maxHeight = world.getMaxHeight();
if (layer.length > maxHeight)
{
log.warning("[CleanroomGenerator] Error, chunk height " + layer.length + " is greater than the world max height (" + maxHeight + "). Trimming to world max height.");
short[] newLayer = new short[maxHeight];
arraycopy(layer, 0, newLayer, 0, maxHeight);
layer = newLayer;
}
short[][] result = new short[maxHeight / 16][]; // 16x16x16 chunks
for (int i = 0; i < layer.length; i += 16)
{
result[i >> 4] = new short[4096];
for (int y = 0; y < Math.min(16, layer.length - i); y++)
{
Arrays.fill(result[i >> 4], y * 16 * 16, (y + 1) * 16 * 16, layer[i + y]);
}
}
return result;
}
@Override
public List<BlockPopulator> getDefaultPopulators(World world)
{
// This is the default, but just in case default populators change to stock minecraft populators by default...
return new ArrayList<BlockPopulator>();
if (layerDataValues != null)
{
return Arrays.asList((BlockPopulator)new CleanroomBlockPopulator(layerDataValues));
} else
{
// This is the default, but just in case default populators change to stock minecraft populators by default...
return new ArrayList<BlockPopulator>();
}
}
@Override
@ -154,4 +223,4 @@ public class CleanroomChunkGenerator extends ChunkGenerator
return new Location(world, 0, world.getHighestBlockYAt(0, 0), 0);
}
}
}

View File

@ -7,7 +7,6 @@ import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -18,13 +17,11 @@ import org.bukkit.inventory.ItemStack;
public class TFM_BlockListener implements Listener
{
private final TotalFreedomMod plugin;
private final Server server;
private static final Logger log = Logger.getLogger("Minecraft");
public TFM_BlockListener(TotalFreedomMod instance)
{
this.plugin = instance;
this.server = plugin.getServer();
}
@EventHandler(priority = EventPriority.HIGH)

View File

@ -1,7 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Listener;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.Server;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -11,12 +10,10 @@ import org.bukkit.event.entity.*;
public class TFM_EntityListener implements Listener
{
private final TotalFreedomMod plugin;
private final Server server;
public TFM_EntityListener(TotalFreedomMod instance)
{
this.plugin = instance;
this.server = plugin.getServer();
}
@EventHandler(priority = EventPriority.HIGH)

View File

@ -1,7 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Listener;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.Server;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@ -11,12 +10,10 @@ import org.bukkit.event.weather.WeatherChangeEvent;
public class TFM_WeatherListener implements Listener
{
private final TotalFreedomMod plugin;
private final Server server;
public TFM_WeatherListener(TotalFreedomMod instance)
{
this.plugin = instance;
this.server = plugin.getServer();
}
@EventHandler(priority = EventPriority.HIGH)

View File

@ -1,6 +1,6 @@
name: TotalFreedomMod
main: me.StevenLawson.TotalFreedomMod.TotalFreedomMod
version: 2.5
version: 2.6
description: Plugin for the Total Freedom server.
author: StevenLawson / Madgeek1450
commands: