mirror of
https://github.com/encounter/dynmap.git
synced 2026-03-30 11:08:39 -07:00
Compare commits
48 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c8469d7aba | |||
| e7c92096b2 | |||
| 0c9d397144 | |||
| b4a3b61c11 | |||
| 564c38b44a | |||
| 664e7da659 | |||
| 9046212a47 | |||
| b6ee68c9b0 | |||
| 7854568d88 | |||
| f1c9417237 | |||
| 336f8302c4 | |||
| d8ccc26109 | |||
| d396046249 | |||
| 1793d910d4 | |||
| f0f881d126 | |||
| 5482ddaa89 | |||
| 47455eb912 | |||
| 32a1c20fd0 | |||
| b85c38e3a7 | |||
| 5bc4de6a8b | |||
| 2d20fd11f7 | |||
| 6a4bb59d60 | |||
| ab45edb82c | |||
| 4f6bc05180 | |||
| 076681e188 | |||
| b7abfe7c06 | |||
| 3a88ac66a6 | |||
| d3b9367794 | |||
| 666840fc8b | |||
| 62f4c12147 | |||
| 4b3f2280b6 | |||
| df55606023 | |||
| 6fc5fddd44 | |||
| dea285c160 | |||
| 204641a4b0 | |||
| d4aaa1d1fd | |||
| fe83a7d1cc | |||
| d4e24e9d26 | |||
| 734937884a | |||
| 3efe3c3d3d | |||
| 46ab344197 | |||
| 9270ce853d | |||
| 04a2019e9d | |||
| 8daf95891d | |||
| 5396d0b823 | |||
| a2ab8c4f2f | |||
| e7efbe193a | |||
| 99ea38d02a |
@@ -4,8 +4,10 @@
|
||||
<artifactId>dynmap</artifactId>
|
||||
<name>dynmap</name>
|
||||
<properties>
|
||||
<timestamp>${maven.build.timestamp}</timestamp>
|
||||
<maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<BUILD_NUMBER>Dev</BUILD_NUMBER>
|
||||
<BUILD_NUMBER>Dev${timestamp}</BUILD_NUMBER>
|
||||
</properties>
|
||||
<url>http://github.com/webbukkit/dynmap/</url>
|
||||
<issueManagement>
|
||||
@@ -41,31 +43,6 @@
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>unpack</id>
|
||||
<phase>package</phase>
|
||||
<goals><goal>unpack</goal></goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.dynmap</groupId>
|
||||
<artifactId>DynmapCore</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<classifier>bin</classifier>
|
||||
<type>zip</type>
|
||||
<outputDirectory>${project.build.directory}/core</outputDirectory>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
@@ -88,29 +65,6 @@
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/package.xml</descriptor>
|
||||
</descriptors>
|
||||
<!-- Hack for bug in maven-assembly: http://jira.codehaus.org/browse/MASSEMBLY-449 -->
|
||||
<archiverConfig>
|
||||
<fileMode>420</fileMode> <!-- 420(dec) = 644(oct) -->
|
||||
<directoryMode>493</directoryMode> <!-- 493(dec) = 755(oct) -->
|
||||
<defaultDirectoryMode>493</defaultDirectoryMode>
|
||||
</archiverConfig>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<repositories>
|
||||
@@ -140,7 +94,7 @@
|
||||
<dependency>
|
||||
<groupId>org.bukkit</groupId>
|
||||
<artifactId>bukkit</artifactId>
|
||||
<version>1.3.2-R3.0</version>
|
||||
<version>1.4.7-R1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dynmap</groupId>
|
||||
@@ -178,6 +132,11 @@
|
||||
<artifactId>PermissionsBukkit</artifactId>
|
||||
<version>1.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.anjocaido</groupId>
|
||||
<artifactId>EssentialsGroupManager</artifactId>
|
||||
<version>2.10.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<version>1.7</version>
|
||||
<version>1.9.1</version>
|
||||
</project>
|
||||
|
||||
@@ -124,4 +124,8 @@ public abstract class BukkitVersionHelper {
|
||||
* Get biome name list
|
||||
*/
|
||||
public abstract String[] getBiomeNames();
|
||||
/**
|
||||
* Get block material index list
|
||||
*/
|
||||
public abstract int[] getBlockMaterialMap();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package org.dynmap.bukkit;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@@ -16,8 +18,11 @@ import org.dynmap.common.BiomeMap;
|
||||
public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
private Class<?> nmsblock;
|
||||
private Class<?> nmsblockarray;
|
||||
private Class<?> nmsmaterial;
|
||||
private Field blockbyid;
|
||||
private Field blockname;
|
||||
private Field material;
|
||||
private Method blockbyidfunc; // 1.7+ method for getting block by id
|
||||
|
||||
BukkitVersionHelperCB() {
|
||||
}
|
||||
@@ -39,16 +44,21 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
// Get block fields
|
||||
nmsblock = getNMSClass("net.minecraft.server.Block");
|
||||
nmsblockarray = getNMSClass("[Lnet.minecraft.server.Block;");
|
||||
blockbyid = getField(nmsblock, new String[] { "byId" }, nmsblockarray);
|
||||
blockname = getPrivateField(nmsblock, new String[] { "name" }, String.class);
|
||||
nmsmaterial = getNMSClass("net.minecraft.server.Material");
|
||||
blockbyid = getFieldNoFail(nmsblock, new String[] { "byId" }, nmsblockarray);
|
||||
if (blockbyid == null) {
|
||||
blockbyidfunc = getMethod(nmsblock, new String[] { "e" }, new Class[] { int.class });
|
||||
}
|
||||
blockname = getPrivateField(nmsblock, new String[] { "name", "b" }, String.class);
|
||||
material = getPrivateField(nmsblock, new String[] { "material" }, nmsmaterial);
|
||||
|
||||
/* Set up biomebase fields */
|
||||
biomebase = getNMSClass("net.minecraft.server.BiomeBase");
|
||||
biomebasearray = getNMSClass("[Lnet.minecraft.server.BiomeBase;");
|
||||
biomebaselist = getField(biomebase, new String[] { "biomes" }, biomebasearray);
|
||||
biomebaselist = getPrivateField(biomebase, new String[] { "biomes" }, biomebasearray);
|
||||
biomebasetemp = getField(biomebase, new String[] { "temperature", "F" }, float.class);
|
||||
biomebasehumi = getField(biomebase, new String[] { "humidity", "G" }, float.class);
|
||||
biomebaseidstring = getField(biomebase, new String[] { "y" }, String.class);
|
||||
biomebaseidstring = getField(biomebase, new String[] { "y", "af" }, String.class);
|
||||
biomebaseid = getField(biomebase, new String[] { "id" }, int.class);
|
||||
/* n.m.s.World */
|
||||
nmsworld = getNMSClass("net.minecraft.server.WorldServer");
|
||||
@@ -84,15 +94,15 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
nbttagstring = getNMSClass("net.minecraft.server.NBTTagString");
|
||||
nbttagintarray = getNMSClass("net.minecraft.server.NBTTagIntArray");
|
||||
compound_get = getMethod(nbttagcompound, new String[] { "get" }, new Class[] { String.class });
|
||||
nbttagbyte_val = getField(nbttagbyte, new String[] { "data" }, byte.class);
|
||||
nbttagshort_val = getField(nbttagshort, new String[] { "data" }, short.class);
|
||||
nbttagint_val = getField(nbttagint, new String[] { "data" }, int.class);
|
||||
nbttaglong_val = getField(nbttaglong, new String[] { "data" }, long.class);
|
||||
nbttagfloat_val = getField(nbttagfloat, new String[] { "data" }, float.class);
|
||||
nbttagdouble_val = getField(nbttagdouble, new String[] { "data" }, double.class);
|
||||
nbttagbytearray_val = getField(nbttagbytearray, new String[] { "data" }, byte[].class);
|
||||
nbttagstring_val = getField(nbttagstring, new String[] { "data" }, String.class);
|
||||
nbttagintarray_val = getField(nbttagintarray, new String[] { "data" }, int[].class);
|
||||
nbttagbyte_val = getPrivateField(nbttagbyte, new String[] { "data" }, byte.class);
|
||||
nbttagshort_val = getPrivateField(nbttagshort, new String[] { "data" }, short.class);
|
||||
nbttagint_val = getPrivateField(nbttagint, new String[] { "data" }, int.class);
|
||||
nbttaglong_val = getPrivateField(nbttaglong, new String[] { "data" }, long.class);
|
||||
nbttagfloat_val = getPrivateField(nbttagfloat, new String[] { "data" }, float.class);
|
||||
nbttagdouble_val = getPrivateField(nbttagdouble, new String[] { "data" }, double.class);
|
||||
nbttagbytearray_val = getPrivateField(nbttagbytearray, new String[] { "data" }, byte[].class);
|
||||
nbttagstring_val = getPrivateField(nbttagstring, new String[] { "data" }, String.class);
|
||||
nbttagintarray_val = getPrivateField(nbttagintarray, new String[] { "data" }, int[].class);
|
||||
|
||||
/** Tile entity */
|
||||
nms_tileentity = getNMSClass("net.minecraft.server.TileEntity");
|
||||
@@ -112,16 +122,27 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
@Override
|
||||
public String[] getBlockShortNames() {
|
||||
try {
|
||||
Object[] byid = (Object[])blockbyid.get(nmsblock);
|
||||
String[] names = new String[byid.length];
|
||||
for (int i = 0; i < names.length; i++) {
|
||||
if (byid[i] != null) {
|
||||
names[i] = (String)blockname.get(byid[i]);
|
||||
String[] names = new String[4096];
|
||||
if (blockbyid != null) {
|
||||
Object[] byid = (Object[])blockbyid.get(nmsblock);
|
||||
for (int i = 0; i < names.length; i++) {
|
||||
if (byid[i] != null) {
|
||||
names[i] = (String)blockname.get(byid[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (int i = 0; i < names.length; i++) {
|
||||
Object blk = blockbyidfunc.invoke(nmsblock, i);
|
||||
if (blk != null) {
|
||||
names[i] = (String)blockname.get(blk);
|
||||
}
|
||||
}
|
||||
}
|
||||
return names;
|
||||
} catch (IllegalArgumentException e) {
|
||||
} catch (IllegalAccessException e) {
|
||||
} catch (InvocationTargetException e) {
|
||||
}
|
||||
return new String[0];
|
||||
}
|
||||
@@ -143,4 +164,55 @@ public class BukkitVersionHelperCB extends BukkitVersionHelperGeneric {
|
||||
}
|
||||
return names;
|
||||
}
|
||||
/**
|
||||
* Get block material index list
|
||||
*/
|
||||
public int[] getBlockMaterialMap() {
|
||||
try {
|
||||
int[] map = new int[4096];
|
||||
if (blockbyid != null) {
|
||||
Object[] byid = (Object[])blockbyid.get(nmsblock);
|
||||
ArrayList<Object> mats = new ArrayList<Object>();
|
||||
for (int i = 0; i < map.length; i++) {
|
||||
if (byid[i] != null) {
|
||||
Object mat = (Object)material.get(byid[i]);
|
||||
if (mat != null) {
|
||||
map[i] = mats.indexOf(mat);
|
||||
if (map[i] < 0) {
|
||||
map[i] = mats.size();
|
||||
mats.add(mat);
|
||||
}
|
||||
}
|
||||
else {
|
||||
map[i] = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
ArrayList<Object> mats = new ArrayList<Object>();
|
||||
for (int i = 0; i < map.length; i++) {
|
||||
Object blk = blockbyidfunc.invoke(nmsblock, i);
|
||||
if (blk != null) {
|
||||
Object mat = (Object)material.get(blk);
|
||||
if (mat != null) {
|
||||
map[i] = mats.indexOf(mat);
|
||||
if (map[i] < 0) {
|
||||
map[i] = mats.size();
|
||||
mats.add(mat);
|
||||
}
|
||||
}
|
||||
else {
|
||||
map[i] = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
} catch (IllegalArgumentException e) {
|
||||
} catch (IllegalAccessException e) {
|
||||
} catch (InvocationTargetException e) {
|
||||
}
|
||||
return new int[0];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,13 @@ package org.dynmap.bukkit;
|
||||
/**
|
||||
* Bukkit specific implementation of DynmapWorld
|
||||
*/
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.permissions.Permission;
|
||||
@@ -12,6 +17,7 @@ import org.dynmap.DynmapChunk;
|
||||
import org.dynmap.DynmapLocation;
|
||||
import org.dynmap.DynmapWorld;
|
||||
import org.dynmap.utils.MapChunkCache;
|
||||
import org.dynmap.utils.TileFlags;
|
||||
|
||||
public class BukkitWorld extends DynmapWorld {
|
||||
private World world;
|
||||
@@ -160,4 +166,58 @@ public class BukkitWorld extends DynmapWorld {
|
||||
public World getWorld() {
|
||||
return world;
|
||||
}
|
||||
|
||||
// Return false if unimplemented
|
||||
@Override
|
||||
public int getChunkMap(TileFlags map) {
|
||||
map.clear();
|
||||
if (world == null) return -1;
|
||||
int cnt = 0;
|
||||
// Mark loaded chunks
|
||||
for(Chunk c : world.getLoadedChunks()) {
|
||||
map.setFlag(c.getX(), c.getZ(), true);
|
||||
cnt++;
|
||||
}
|
||||
File f = world.getWorldFolder();
|
||||
File regiondir = new File(f, "region");
|
||||
File[] lst = regiondir.listFiles();
|
||||
if(lst != null) {
|
||||
byte[] hdr = new byte[4096];
|
||||
for(File rf : lst) {
|
||||
if(!rf.getName().endsWith(".mca")) {
|
||||
continue;
|
||||
}
|
||||
String[] parts = rf.getName().split("\\.");
|
||||
if((!parts[0].equals("r")) && (parts.length != 4)) continue;
|
||||
|
||||
RandomAccessFile rfile = null;
|
||||
int x = 0, z = 0;
|
||||
try {
|
||||
x = Integer.parseInt(parts[1]);
|
||||
z = Integer.parseInt(parts[2]);
|
||||
rfile = new RandomAccessFile(rf, "r");
|
||||
rfile.read(hdr, 0, hdr.length);
|
||||
} catch (IOException iox) {
|
||||
Arrays.fill(hdr, (byte)0);
|
||||
} catch (NumberFormatException nfx) {
|
||||
Arrays.fill(hdr, (byte)0);
|
||||
} finally {
|
||||
if(rfile != null) {
|
||||
try { rfile.close(); } catch (IOException iox) {}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 1024; i++) {
|
||||
int v = hdr[4*i] | hdr[4*i + 1] | hdr[4*i + 2] | hdr[4*i + 3];
|
||||
if (v == 0) continue;
|
||||
int xx = (x << 5) | (i & 0x1F);
|
||||
int zz = (z << 5) | ((i >> 5) & 0x1F);
|
||||
if (!map.setFlag(xx, zz, true)) {
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -43,6 +43,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
private List<VisibilityLimit> visible_limits = null;
|
||||
private List<VisibilityLimit> hidden_limits = null;
|
||||
private boolean isempty = true;
|
||||
private int snapcnt;
|
||||
private ChunkSnapshot[] snaparray; /* Index = (x-x_min) + ((z-z_min)*x_dim) */
|
||||
private DynIntHashMap[] snaptile;
|
||||
private byte[][] sameneighborbiomecnt;
|
||||
@@ -88,6 +89,8 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
initialize(x0, y0, z0);
|
||||
worldheight = w.getMaxHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void initialize(int x0, int y0, int z0) {
|
||||
this.x = x0;
|
||||
this.y = y0;
|
||||
@@ -96,11 +99,11 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
this.bx = x & 0xF;
|
||||
this.bz = z & 0xF;
|
||||
this.off = bx + (bz << 4);
|
||||
try {
|
||||
snap = snaparray[chunkindex];
|
||||
} catch (ArrayIndexOutOfBoundsException aioobx) {
|
||||
if ((chunkindex >= snapcnt) || (chunkindex < 0)) {
|
||||
snap = EMPTY;
|
||||
exceptions++;
|
||||
}
|
||||
else {
|
||||
snap = snaparray[chunkindex];
|
||||
}
|
||||
laststep = BlockStep.Y_MINUS;
|
||||
if((y >= 0) && (y < worldheight))
|
||||
@@ -108,18 +111,21 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
else
|
||||
typeid = blkdata = 0;
|
||||
}
|
||||
@Override
|
||||
public final int getBlockTypeID() {
|
||||
if(typeid < 0) {
|
||||
typeid = snap.getBlockTypeId(bx, y, bz);
|
||||
}
|
||||
return typeid;
|
||||
}
|
||||
@Override
|
||||
public final int getBlockData() {
|
||||
if(blkdata < 0) {
|
||||
blkdata = snap.getBlockData(bx, y, bz);
|
||||
}
|
||||
return blkdata;
|
||||
}
|
||||
@Override
|
||||
public int getBlockSkyLight() {
|
||||
try {
|
||||
return snap.getBlockSkyLight(bx, y, bz);
|
||||
@@ -127,6 +133,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
return 15;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public final int getBlockEmittedLight() {
|
||||
try {
|
||||
return snap.getBlockEmittedLight(bx, y, bz);
|
||||
@@ -148,10 +155,14 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
Object[] biomebase = null;
|
||||
ChunkSnapshot biome_css = null;
|
||||
for(int i = 0; i < x_size; i++) {
|
||||
initialize(i + x_base, 64, z_base);
|
||||
for(int j = 0; j < z_size; j++) {
|
||||
BiomeMap bm;
|
||||
|
||||
if (j == 0) {
|
||||
initialize(i + x_base, 64, z_base);
|
||||
}
|
||||
else {
|
||||
stepPosition(BlockStep.Z_PLUS);
|
||||
}
|
||||
if(snap != biome_css) {
|
||||
biomebase = null;
|
||||
biome_css = snap;
|
||||
@@ -191,12 +202,10 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
sameneighborbiomecnt[i][j-1]++;
|
||||
}
|
||||
sameneighborbiomecnt[i][j] = (byte)cnt;
|
||||
|
||||
stepPosition(BlockStep.Z_PLUS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final BiomeMap getBiome() {
|
||||
try {
|
||||
return biomemap[x - x_base][z - z_base];
|
||||
@@ -205,15 +214,15 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
return BiomeMap.NULL;
|
||||
}
|
||||
}
|
||||
|
||||
public final int getSmoothGrassColorMultiplier(int[] colormap, int width) {
|
||||
@Override
|
||||
public final int getSmoothGrassColorMultiplier(int[] colormap) {
|
||||
int mult = 0xFFFFFF;
|
||||
try {
|
||||
int rx = x - x_base;
|
||||
int rz = z - z_base;
|
||||
BiomeMap bm = biomemap[rx][rz];
|
||||
if(sameneighborbiomecnt[rx][rz] >= (byte)8) { /* All neighbors same? */
|
||||
mult = bm.getModifiedGrassMultiplier(colormap[bm.biomeLookup(width)]);
|
||||
mult = bm.getModifiedGrassMultiplier(colormap[bm.biomeLookup()]);
|
||||
}
|
||||
else {
|
||||
int raccum = 0;
|
||||
@@ -222,7 +231,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
for(int xoff = -1; xoff < 2; xoff++) {
|
||||
for(int zoff = -1; zoff < 2; zoff++) {
|
||||
bm = biomemap[rx+xoff][rz+zoff];
|
||||
int rmult = bm.getModifiedGrassMultiplier(colormap[bm.biomeLookup(width)]);
|
||||
int rmult = bm.getModifiedGrassMultiplier(colormap[bm.biomeLookup()]);
|
||||
raccum += (rmult >> 16) & 0xFF;
|
||||
gaccum += (rmult >> 8) & 0xFF;
|
||||
baccum += rmult & 0xFF;
|
||||
@@ -236,14 +245,15 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
}
|
||||
return mult;
|
||||
}
|
||||
public final int getSmoothFoliageColorMultiplier(int[] colormap, int width) {
|
||||
@Override
|
||||
public final int getSmoothFoliageColorMultiplier(int[] colormap) {
|
||||
int mult = 0xFFFFFF;
|
||||
try {
|
||||
int rx = x - x_base;
|
||||
int rz = z - z_base;
|
||||
BiomeMap bm = biomemap[rx][rz];
|
||||
if(sameneighborbiomecnt[rx][rz] >= (byte)8) { /* All neighbors same? */
|
||||
mult = bm.getModifiedFoliageMultiplier(colormap[bm.biomeLookup(width)]);
|
||||
mult = bm.getModifiedFoliageMultiplier(colormap[bm.biomeLookup()]);
|
||||
}
|
||||
else {
|
||||
int raccum = 0;
|
||||
@@ -252,7 +262,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
for(int xoff = -1; xoff < 2; xoff++) {
|
||||
for(int zoff = -1; zoff < 2; zoff++) {
|
||||
bm = biomemap[rx+xoff][rz+zoff];
|
||||
int rmult = bm.getModifiedFoliageMultiplier(colormap[bm.biomeLookup(width)]);
|
||||
int rmult = bm.getModifiedFoliageMultiplier(colormap[bm.biomeLookup()]);
|
||||
raccum += (rmult >> 16) & 0xFF;
|
||||
gaccum += (rmult >> 8) & 0xFF;
|
||||
baccum += rmult & 0xFF;
|
||||
@@ -266,7 +276,8 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
}
|
||||
return mult;
|
||||
}
|
||||
public final int getSmoothColorMultiplier(int[] colormap, int width, int[] swampmap, int swampwidth) {
|
||||
@Override
|
||||
public final int getSmoothColorMultiplier(int[] colormap, int[] swampmap) {
|
||||
int mult = 0xFFFFFF;
|
||||
try {
|
||||
int rx = x - x_base;
|
||||
@@ -274,10 +285,10 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
BiomeMap bm = biomemap[rx][rz];
|
||||
if(sameneighborbiomecnt[rx][rz] >= (byte)8) { /* All neighbors same? */
|
||||
if(bm == BiomeMap.SWAMPLAND) {
|
||||
mult = swampmap[bm.biomeLookup(swampwidth)];
|
||||
mult = swampmap[bm.biomeLookup()];
|
||||
}
|
||||
else {
|
||||
mult = colormap[bm.biomeLookup(width)];
|
||||
mult = colormap[bm.biomeLookup()];
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -289,10 +300,10 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
bm = biomemap[rx+xoff][rz+zoff];
|
||||
int rmult;
|
||||
if(bm == BiomeMap.SWAMPLAND) {
|
||||
rmult = swampmap[bm.biomeLookup(swampwidth)];
|
||||
rmult = swampmap[bm.biomeLookup()];
|
||||
}
|
||||
else {
|
||||
rmult = colormap[bm.biomeLookup(width)];
|
||||
rmult = colormap[bm.biomeLookup()];
|
||||
}
|
||||
raccum += (rmult >> 16) & 0xFF;
|
||||
gaccum += (rmult >> 8) & 0xFF;
|
||||
@@ -307,7 +318,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
}
|
||||
return mult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int getSmoothWaterColorMultiplier() {
|
||||
try {
|
||||
int rx = x - x_base;
|
||||
@@ -334,15 +345,15 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
return 0xFFFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
public final int getSmoothWaterColorMultiplier(int[] colormap, int width) {
|
||||
@Override
|
||||
public final int getSmoothWaterColorMultiplier(int[] colormap) {
|
||||
int mult = 0xFFFFFF;
|
||||
try {
|
||||
int rx = x - x_base;
|
||||
int rz = z - z_base;
|
||||
BiomeMap bm = biomemap[rx][rz];
|
||||
if(sameneighborbiomecnt[rx][rz] >= (byte)8) { /* All neighbors same? */
|
||||
mult = colormap[bm.biomeLookup(width)];
|
||||
mult = colormap[bm.biomeLookup()];
|
||||
}
|
||||
else {
|
||||
int raccum = 0;
|
||||
@@ -351,7 +362,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
for(int xoff = -1; xoff < 2; xoff++) {
|
||||
for(int zoff = -1; zoff < 2; zoff++) {
|
||||
bm = biomemap[rx+xoff][rz+zoff];
|
||||
int rmult = colormap[bm.biomeLookup(width)];
|
||||
int rmult = colormap[bm.biomeLookup()];
|
||||
raccum += (rmult >> 16) & 0xFF;
|
||||
gaccum += (rmult >> 8) & 0xFF;
|
||||
baccum += rmult & 0xFF;
|
||||
@@ -365,16 +376,10 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
}
|
||||
return mult;
|
||||
}
|
||||
|
||||
public final double getRawBiomeTemperature() {
|
||||
return snap.getRawBiomeTemperature(bx, bz);
|
||||
}
|
||||
public final double getRawBiomeRainfall() {
|
||||
return snap.getRawBiomeRainfall(bx, bz);
|
||||
}
|
||||
/**
|
||||
* Step current position in given direction
|
||||
*/
|
||||
@Override
|
||||
public final void stepPosition(BlockStep step) {
|
||||
typeid = -1;
|
||||
blkdata = -1;
|
||||
@@ -384,14 +389,14 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
bx++;
|
||||
off++;
|
||||
if(bx == 16) { /* Next chunk? */
|
||||
try {
|
||||
bx = 0;
|
||||
off -= 16;
|
||||
chunkindex++;
|
||||
snap = snaparray[chunkindex];
|
||||
} catch (ArrayIndexOutOfBoundsException aioobx) {
|
||||
bx = 0;
|
||||
off -= 16;
|
||||
chunkindex++;
|
||||
if ((chunkindex >= snapcnt) || (chunkindex < 0)) {
|
||||
snap = EMPTY;
|
||||
exceptions++;
|
||||
}
|
||||
else {
|
||||
snap = snaparray[chunkindex];
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -406,14 +411,14 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
bz++;
|
||||
off+=16;
|
||||
if(bz == 16) { /* Next chunk? */
|
||||
try {
|
||||
bz = 0;
|
||||
off -= 256;
|
||||
chunkindex += x_dim;
|
||||
snap = snaparray[chunkindex];
|
||||
} catch (ArrayIndexOutOfBoundsException aioobx) {
|
||||
bz = 0;
|
||||
off -= 256;
|
||||
chunkindex += x_dim;
|
||||
if ((chunkindex >= snapcnt) || (chunkindex < 0)) {
|
||||
snap = EMPTY;
|
||||
exceptions++;
|
||||
}
|
||||
else {
|
||||
snap = snaparray[chunkindex];
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -422,14 +427,14 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
bx--;
|
||||
off--;
|
||||
if(bx == -1) { /* Next chunk? */
|
||||
try {
|
||||
bx = 15;
|
||||
off += 16;
|
||||
chunkindex--;
|
||||
snap = snaparray[chunkindex];
|
||||
} catch (ArrayIndexOutOfBoundsException aioobx) {
|
||||
bx = 15;
|
||||
off += 16;
|
||||
chunkindex--;
|
||||
if ((chunkindex >= snapcnt) || (chunkindex < 0)) {
|
||||
snap = EMPTY;
|
||||
exceptions++;
|
||||
}
|
||||
else {
|
||||
snap = snaparray[chunkindex];
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -444,14 +449,14 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
bz--;
|
||||
off-=16;
|
||||
if(bz == -1) { /* Next chunk? */
|
||||
try {
|
||||
bz = 15;
|
||||
off += 256;
|
||||
chunkindex -= x_dim;
|
||||
snap = snaparray[chunkindex];
|
||||
} catch (ArrayIndexOutOfBoundsException aioobx) {
|
||||
bz = 15;
|
||||
off += 256;
|
||||
chunkindex -= x_dim;
|
||||
if ((chunkindex >= snapcnt) || (chunkindex < 0)) {
|
||||
snap = EMPTY;
|
||||
exceptions++;
|
||||
}
|
||||
else {
|
||||
snap = snaparray[chunkindex];
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -461,6 +466,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
/**
|
||||
* Unstep current position to previous position
|
||||
*/
|
||||
@Override
|
||||
public BlockStep unstepPosition() {
|
||||
BlockStep ls = laststep;
|
||||
stepPosition(unstep[ls.ordinal()]);
|
||||
@@ -469,9 +475,11 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
/**
|
||||
* Unstep current position in oppisite director of given step
|
||||
*/
|
||||
@Override
|
||||
public void unstepPosition(BlockStep s) {
|
||||
stepPosition(unstep[s.ordinal()]);
|
||||
}
|
||||
@Override
|
||||
public final void setY(int y) {
|
||||
if(y > this.y)
|
||||
laststep = BlockStep.Y_PLUS;
|
||||
@@ -485,15 +493,19 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
typeid = blkdata = -1;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public final int getX() {
|
||||
return x;
|
||||
}
|
||||
@Override
|
||||
public final int getY() {
|
||||
return y;
|
||||
}
|
||||
@Override
|
||||
public final int getZ() {
|
||||
return z;
|
||||
}
|
||||
@Override
|
||||
public final int getBlockTypeIDAt(BlockStep s) {
|
||||
if(s == BlockStep.Y_MINUS) {
|
||||
if(y > 0)
|
||||
@@ -513,6 +525,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@Override
|
||||
public BlockStep getLastStep() {
|
||||
return laststep;
|
||||
}
|
||||
@@ -764,7 +777,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
x_dim = x_max - x_min + 1;
|
||||
}
|
||||
|
||||
int snapcnt = x_dim * (z_max-z_min+1);
|
||||
snapcnt = x_dim * (z_max-z_min+1);
|
||||
snaparray = new ChunkSnapshot[snapcnt];
|
||||
snaptile = new DynIntHashMap[snapcnt];
|
||||
isSectionNotEmpty = new boolean[snapcnt][];
|
||||
@@ -845,34 +858,18 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
wasLoaded = true;
|
||||
}
|
||||
try {
|
||||
if (!wasLoaded) {
|
||||
didload = w.loadChunk(chunk.x, chunk.z, false);
|
||||
}
|
||||
else { /* If already was loaded, no need to load */
|
||||
didload = true;
|
||||
}
|
||||
didload = w.loadChunk(chunk.x, chunk.z, false);
|
||||
} catch (Throwable t) { /* Catch chunk error from Bukkit */
|
||||
Log.warning("Bukkit error loading chunk " + chunk.x + "," + chunk.z + " on " + w.getName());
|
||||
if(!wasLoaded) { /* If wasn't loaded, we loaded it if it now is */
|
||||
didload = w.isChunkLoaded(chunk.x, chunk.z);
|
||||
}
|
||||
}
|
||||
boolean didgenerate = false;
|
||||
/* If it did load, make cache of it */
|
||||
if(didload) {
|
||||
tileData = new DynIntHashMap();
|
||||
|
||||
Chunk c = w.getChunkAt(chunk.x, chunk.z); /* Get the chunk */
|
||||
/* Test if chunk isn't populated */
|
||||
boolean populated = true;
|
||||
//TODO: figure out why this doesn't appear to be reliable in Bukkit
|
||||
//if((nmschunk != null) && (doneflag != null)) {
|
||||
// try {
|
||||
// populated = doneflag.getBoolean(nmschunk);
|
||||
// } catch (IllegalArgumentException e) {
|
||||
// } catch (IllegalAccessException e) {
|
||||
// }
|
||||
//}
|
||||
if(!vis) {
|
||||
if(hidestyle == HiddenChunkStyle.FILL_STONE_PLAIN)
|
||||
ss = STONE;
|
||||
@@ -881,9 +878,6 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
else
|
||||
ss = EMPTY;
|
||||
}
|
||||
else if(!populated) { /* If not populated, treat as empty */
|
||||
ss = EMPTY;
|
||||
}
|
||||
else {
|
||||
if(blockdata || highesty) {
|
||||
ss = c.getChunkSnapshot(highesty, biome, biomeraw);
|
||||
@@ -892,7 +886,7 @@ public class NewMapChunkCache implements MapChunkCache {
|
||||
}
|
||||
/* Get tile entity data */
|
||||
List<Object> vals = new ArrayList<Object>();
|
||||
Map tileents = helper.getTileEntitiesForChunk(c);
|
||||
Map<?,?> tileents = helper.getTileEntitiesForChunk(c);
|
||||
for(Object t : tileents.values()) {
|
||||
int te_x = helper.getTileEntityX(t);
|
||||
int te_y = helper.getTileEntityY(t);
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.dynmap.bukkit;
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.util.IdentityHashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
@@ -20,9 +21,10 @@ public class SnapshotCache {
|
||||
private ReferenceQueue<SnapshotRec> refqueue;
|
||||
private long cache_attempts;
|
||||
private long cache_success;
|
||||
|
||||
private boolean softref;
|
||||
|
||||
private static class CacheRec {
|
||||
WeakReference<SnapshotRec> ref;
|
||||
Reference<SnapshotRec> ref;
|
||||
boolean hasbiome;
|
||||
boolean hasrawbiome;
|
||||
boolean hasblockdata;
|
||||
@@ -32,12 +34,12 @@ public class SnapshotCache {
|
||||
@SuppressWarnings("serial")
|
||||
public class CacheHashMap extends LinkedHashMap<String, CacheRec> {
|
||||
private int limit;
|
||||
private IdentityHashMap<WeakReference<SnapshotRec>, String> reverselookup;
|
||||
private IdentityHashMap<Reference<SnapshotRec>, String> reverselookup;
|
||||
|
||||
public CacheHashMap(int lim) {
|
||||
super(16, (float)0.75, true);
|
||||
limit = lim;
|
||||
reverselookup = new IdentityHashMap<WeakReference<SnapshotRec>, String>();
|
||||
reverselookup = new IdentityHashMap<Reference<SnapshotRec>, String>();
|
||||
}
|
||||
protected boolean removeEldestEntry(Map.Entry<String, CacheRec> last) {
|
||||
boolean remove = (size() >= limit);
|
||||
@@ -51,9 +53,10 @@ public class SnapshotCache {
|
||||
/**
|
||||
* Create snapshot cache
|
||||
*/
|
||||
public SnapshotCache(int max_size) {
|
||||
public SnapshotCache(int max_size, boolean softref) {
|
||||
snapcache = new CacheHashMap(max_size);
|
||||
refqueue = new ReferenceQueue<SnapshotRec>();
|
||||
this.softref = softref;
|
||||
}
|
||||
private String getKey(String w, int cx, int cz) {
|
||||
return w + ":" + cx + ":" + cz;
|
||||
@@ -127,7 +130,10 @@ public class SnapshotCache {
|
||||
rec.hasbiome = biome;
|
||||
rec.hasrawbiome = biomeraw;
|
||||
rec.hashighesty = highesty;
|
||||
rec.ref = new WeakReference<SnapshotRec>(ss, refqueue);
|
||||
if (softref)
|
||||
rec.ref = new SoftReference<SnapshotRec>(ss, refqueue);
|
||||
else
|
||||
rec.ref = new WeakReference<SnapshotRec>(ss, refqueue);
|
||||
CacheRec prevrec = snapcache.put(key, rec);
|
||||
if(prevrec != null) {
|
||||
snapcache.reverselookup.remove(prevrec.ref);
|
||||
|
||||
@@ -228,7 +228,10 @@ public class SpoutPluginBlocks {
|
||||
}
|
||||
String rslt = sb.toString();
|
||||
/* Now, generate spout texture file - see if changed */
|
||||
File st = new File(datadir, "renderdata/spout-texture.txt");
|
||||
File renderdata = new File(datadir, "renderdata");
|
||||
if (renderdata.exists() == false)
|
||||
renderdata.mkdirs();
|
||||
File st = new File(renderdata, "spout-texture.txt");
|
||||
if(st.exists()) {
|
||||
FileReader fr = null;
|
||||
StringBuilder sbold = new StringBuilder();
|
||||
|
||||
@@ -39,7 +39,7 @@ public class BukkitPermissions implements PermissionProvider {
|
||||
}
|
||||
@Override
|
||||
public Set<String> hasOfflinePermissions(String player, Set<String> perms) {
|
||||
Player p = Bukkit.getPlayerExact(name);
|
||||
Player p = Bukkit.getPlayerExact(player);
|
||||
HashSet<String> hasperms = null;
|
||||
if (p != null) {
|
||||
hasperms = new HashSet<String>();
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package org.dynmap.bukkit.permissions;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.dynmap.Log;
|
||||
import org.anjocaido.groupmanager.GroupManager;
|
||||
import org.anjocaido.groupmanager.dataholder.worlds.WorldsHolder;
|
||||
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
|
||||
|
||||
public class GroupManagerPermissions implements PermissionProvider {
|
||||
String name;
|
||||
GroupManager gm;
|
||||
WorldsHolder wh;
|
||||
|
||||
public static GroupManagerPermissions create(Server server, String name) {
|
||||
Plugin permissionsPlugin = server.getPluginManager().getPlugin("GroupManager");
|
||||
if (permissionsPlugin == null)
|
||||
return null;
|
||||
server.getPluginManager().enablePlugin(permissionsPlugin);
|
||||
if(permissionsPlugin.isEnabled() == false)
|
||||
return null;
|
||||
Log.info("Using GroupManager " + permissionsPlugin.getDescription().getVersion() + " for access control");
|
||||
return new GroupManagerPermissions(name, permissionsPlugin);
|
||||
}
|
||||
|
||||
public GroupManagerPermissions(String name, Plugin permissionsPlugin) {
|
||||
this.name = name;
|
||||
gm = (GroupManager)permissionsPlugin;
|
||||
wh = gm.getWorldsHolder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(CommandSender sender, String permission) {
|
||||
Player player = sender instanceof Player ? (Player) sender : null;
|
||||
boolean rslt = (player != null) ? gm.getWorldsHolder().getDefaultWorld().getPermissionsHandler().permission(player, name + "." + permission) : true;
|
||||
return rslt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> hasOfflinePermissions(String player, Set<String> perms) {
|
||||
HashSet<String> hasperms = new HashSet<String>();
|
||||
AnjoPermissionsHandler apm = gm.getWorldsHolder().getDefaultWorld().getPermissionsHandler();
|
||||
if (apm != null) {
|
||||
for (String pp : perms) {
|
||||
if (apm.permission(player, name + "." + pp)) {
|
||||
hasperms.add(pp);
|
||||
}
|
||||
}
|
||||
}
|
||||
return hasperms;
|
||||
}
|
||||
@Override
|
||||
public boolean hasOfflinePermission(String player, String perm) {
|
||||
AnjoPermissionsHandler apm = gm.getWorldsHolder().getDefaultWorld().getPermissionsHandler();
|
||||
boolean rslt = false;
|
||||
if(apm != null) {
|
||||
rslt = apm.permission(player, name + "." + perm);
|
||||
}
|
||||
return rslt;
|
||||
}
|
||||
}
|
||||
@@ -24,8 +24,9 @@ public class PEXPermissions implements PermissionProvider {
|
||||
server.getPluginManager().enablePlugin(permissionsPlugin);
|
||||
if(permissionsPlugin.isEnabled() == false)
|
||||
return null;
|
||||
if(PermissionsEx.isAvailable() == false)
|
||||
return null;
|
||||
//Broken in new dev builds, apparently
|
||||
//if(PermissionsEx.isAvailable() == false)
|
||||
// return null;
|
||||
Log.info("Using PermissionsEx " + permissionsPlugin.getDescription().getVersion() + " for access control");
|
||||
return new PEXPermissions(name);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
# All paths in this configuration file are relative to Dynmap's data-folder: minecraft_server/plugins/dynmap/
|
||||
|
||||
# All map templates are defined in the templates directory
|
||||
# The 'classic' FlatMap and KzedMap templates are used, which can be found in normal.txt, nether.txt, and skylands.txt
|
||||
# To use these, do not set deftemplatesuffix (make sure deftemplatesuffix is commented, below)
|
||||
# To use the HDMap very-low-res map templates as world defaults (normal-vlowres, nether-vlowres and skylands-vlowres), set value to vlowres
|
||||
# The definitions of these templates are in normal-vlowres.txt, nether-vlowres.txt, and skylands-vlowres.txt
|
||||
# To use the HDMap low-res map templates as world defaults (normal-lowres, nether-lowres and skylands-lowres), set value to lowres
|
||||
# The definitions of these templates are in normal-lowres.txt, nether-lowres.txt, and skylands-lowres.txt
|
||||
# To use the HDMap hi-res map templates (these can take a VERY long time for initial fullrender), set value to hires
|
||||
# The definitions of these templates are in normal-hires.txt, nether-hires.txt, and skylands-hires.txt
|
||||
# To use the HDMap very-low-res (2 ppb) map templates as world defaults, set value to vlowres
|
||||
# The definitions of these templates are in normal-vlowres.txt, nether-vlowres.txt, and the_end-vlowres.txt
|
||||
# To use the HDMap low-res (4 ppb) map templates as world defaults, set value to lowres
|
||||
# The definitions of these templates are in normal-lowres.txt, nether-lowres.txt, and the_end-lowres.txt
|
||||
# To use the HDMap hi-res (16 ppb) map templates (these can take a VERY long time for initial fullrender), set value to hires
|
||||
# The definitions of these templates are in normal-hires.txt, nether-hires.txt, and the_end-hires.txt
|
||||
# To use the HDMap low-res (4 ppb) map templates, with support for boosting resolution selectively to hi-res (16 ppb), set value to low_boost_hi
|
||||
# The definitions of these templates are in normal-low_boost_hi.txt, nether-low_boost_hi.txt, and the_end-low_boost_hi.txt
|
||||
# To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to vhi-res (32 ppb), set value to hi_boost_vhi
|
||||
# The definitions of these templates are in normal-hi_boost_vhi.txt, nether-hi_boost_vhi.txt, and the_end-hi_boost_vhi.txt
|
||||
# To use the HDMap hi-res (16 ppb) map templates, with support for boosting resolution selectively to xhi-res (64 ppb), set value to hi_boost_xhi
|
||||
# The definitions of these templates are in normal-hi_boost_xhi.txt, nether-hi_boost_xhi.txt, and the_end-hi_boost_xhi.txt
|
||||
deftemplatesuffix: vlowres
|
||||
|
||||
components:
|
||||
@@ -22,6 +26,8 @@ components:
|
||||
hidewebchatip: false
|
||||
trustclientname: false
|
||||
includehiddenplayers: false
|
||||
# (optional) if true, color codes in player display names are used
|
||||
use-name-colors: false
|
||||
# (optional) if true, player login IDs will be used for web chat when their IPs match
|
||||
use-player-login-ip: true
|
||||
# (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
|
||||
@@ -44,6 +50,8 @@ components:
|
||||
protected-player-info: false
|
||||
# If true, hide players with invisibility potion effects active
|
||||
hide-if-invisiblity-potion: true
|
||||
# If true, player names are not shown on map, chat, list
|
||||
hidenames: false
|
||||
#- class: org.dynmap.JsonFileClientUpdateComponent
|
||||
# writeinterval: 1
|
||||
# sendhealth: true
|
||||
@@ -52,6 +60,7 @@ components:
|
||||
# webchat-interval: 5
|
||||
# hidewebchatip: false
|
||||
# includehiddenplayers: false
|
||||
# use-name-colors: false
|
||||
# use-player-login-ip: false
|
||||
# require-player-login-ip: false
|
||||
# block-banned-player-chat: true
|
||||
@@ -65,6 +74,7 @@ components:
|
||||
# # Limit length of single chat messages
|
||||
# chatlengthlimit: 256
|
||||
# hide-if-invisiblity-potion: true
|
||||
# hidenames: false
|
||||
|
||||
- class: org.dynmap.SimpleWebChatComponent
|
||||
allowchat: true
|
||||
@@ -204,8 +214,15 @@ enabletilehash: true
|
||||
#better-grass: true
|
||||
|
||||
# Optional - enable smooth lighting by default on all maps supporting it (can be set per map as lighting option)
|
||||
smooth-lighting: false
|
||||
smooth-lighting: true
|
||||
|
||||
# Optional - render specific block IDs using the texures and models of another block ID: can be used to hide/disguise specific
|
||||
# blocks (e.g. make ores look like stone, hide chests) or to provide simple support for rendering unsupported custom blocks
|
||||
block-id-alias:
|
||||
# "14": 1
|
||||
# "15": 1
|
||||
# "16": 1
|
||||
|
||||
# Default image format for HDMaps (png, jpg, jpg-q75, jpg-q80, jpg-q85, jpg-q90, jpg-q95, jpg-q100)
|
||||
# Has no effect on maps with explicit format settings
|
||||
image-format: png
|
||||
@@ -217,6 +234,11 @@ use-generated-textures: true
|
||||
correct-water-lighting: true
|
||||
transparent-leaves: true
|
||||
|
||||
# ctm-support: if true, Connected Texture Mod (CTM) in texture packs is enabled (default)
|
||||
ctm-support: true
|
||||
# custom-colors-support: if true, Custom Colors in texture packs is enabled (default)
|
||||
custom-colors-support: true
|
||||
|
||||
# Control loading of player faces (if set to false, skins are never fetched)
|
||||
#fetchskins: false
|
||||
|
||||
@@ -260,7 +282,8 @@ tilespath: web/tiles
|
||||
webpath: web
|
||||
|
||||
# The network-interface the webserver will bind to (0.0.0.0 for all interfaces, 127.0.0.1 for only local access).
|
||||
webserver-bindaddress: 0.0.0.0
|
||||
# If not set, uses same setting as server in server.properties (or 0.0.0.0 if not specified)
|
||||
#webserver-bindaddress: 0.0.0.0
|
||||
|
||||
# The TCP-port the webserver will listen on.
|
||||
webserver-port: 8123
|
||||
@@ -296,14 +319,29 @@ progressloginterval: 100
|
||||
# Interval the browser should poll for updates.
|
||||
updaterate: 2000
|
||||
|
||||
# If nonzero, server will pause fullrender/radiusrender processing when 'fullrenderplayerlimit' or more user's are logged in
|
||||
# If nonzero, server will pause fullrender/radiusrender processing when 'fullrenderplayerlimit' or more users are logged in
|
||||
fullrenderplayerlimit: 0
|
||||
# If nonzero, server will pause update render processing when 'updateplayerlimit' or more users are logged in
|
||||
updateplayerlimit: 0
|
||||
# Target limit on server thread use - msec per tick
|
||||
per-tick-time-limit: 50
|
||||
# If TPS of server is below this setting, update renders processing is paused
|
||||
update-min-tps: 18.0
|
||||
# If TPS of server is below this setting, full/radius renders processing is paused
|
||||
fullrender-min-tps: 18.0
|
||||
# If TPS of server is below this setting, zoom out processing is paused
|
||||
zoomout-min-tps: 18.0
|
||||
|
||||
showplayerfacesinmenu: true
|
||||
|
||||
# Control whether players that are hidden or not on current map are grayed out (true=yes)
|
||||
grayplayerswhenhidden: true
|
||||
|
||||
# Use player permissions to order player list: first to last, players are ordered by first permission listed that they have
|
||||
# That is, anyone with first listed permission goes before anyone with second, etc, with users with none of the nodes going last
|
||||
player-sort-permission-nodes:
|
||||
- bukkit.command.op
|
||||
|
||||
# Set sidebaropened: 'true' to pin menu sidebar opened permanently, 'pinned' to default the sidebar to pinned, but allow it to unpin
|
||||
#sidebaropened: true
|
||||
|
||||
@@ -317,8 +355,10 @@ trusted-proxies:
|
||||
- "127.0.0.1"
|
||||
- "0:0:0:0:0:0:0:1"
|
||||
|
||||
# Join/quit message format for web chat: set to "" to disable notice on web UI
|
||||
joinmessage: "%playername% joined"
|
||||
quitmessage: "%playername% quit"
|
||||
|
||||
spammessage: "You may only chat once every %interval% seconds."
|
||||
# format for messages from web: %playername% substitutes sender ID (typically IP), %message% includes text
|
||||
webmsgformat: "&color;2[WEB] %playername%: &color;f%message%"
|
||||
@@ -349,6 +389,8 @@ msg:
|
||||
players: "Players"
|
||||
chatrequireslogin: "Chat Requires Login"
|
||||
chatnotallowed: "You are not permitted to send chat messages"
|
||||
hiddennamejoin: "Player joined"
|
||||
hiddennamequit: "Player quit"
|
||||
|
||||
# URL for client configuration (only need to be tailored for proxies or other non-standard configurations)
|
||||
url:
|
||||
@@ -383,6 +425,11 @@ custom-commands:
|
||||
preupdatecommand: ""
|
||||
# Command run just after any image file is written or updated: run with single parameter with fully qualified file name
|
||||
postupdatecommand: ""
|
||||
|
||||
# Snapshot cache size, in chunks
|
||||
snapshotcachesize: 500
|
||||
# Snapshot cache uses soft references (true), else weak references (false)
|
||||
soft-ref-cache: true
|
||||
|
||||
# Set to true to enable verbose startup messages - can help with debugging map configuration problems
|
||||
# Set to false for a much quieter startup log
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
name: dynmap
|
||||
main: org.dynmap.bukkit.DynmapPlugin
|
||||
version: "${project.version}-${BUILD_NUMBER}"
|
||||
authors: [FrozenCow, mikeprimm]
|
||||
softdepend: [ Permissions, PermissionEx, bPermissions, PermissionsBukkit ]
|
||||
authors: [mikeprimm]
|
||||
website: "http://www.minecraftforum.net/topic/1543523-dynmap-dynamic-web-based-maps-for-minecraft/"
|
||||
softdepend: [ Permissions, PermissionEx, bPermissions, PermissionsBukkit, GroupManager ]
|
||||
commands:
|
||||
dynmap:
|
||||
description: Controls Dynmap.
|
||||
@@ -29,6 +30,9 @@ commands:
|
||||
/<command> resetstats - Reset render statistics.
|
||||
/<command> sendtoweb msg - Send message to web users
|
||||
/<command> purgequeue - Set tile update queue to empty
|
||||
/<command> purgequeue worldname - Set tile update queue to empty for world 'worldname'
|
||||
/<command> purgemap worldname mapname - Delete all the tiles for map 'mapname' of world 'worldname'
|
||||
/<command> purgeworld worldname - Delete all the files for world 'worldname'
|
||||
/<command> pause - Show render pause state
|
||||
/<command> pause <all|none|full|update> - Set render pause state
|
||||
/<command> ids-for-ip <ipaddress> - Show player IDs that have logged in from given IP address
|
||||
@@ -86,6 +90,17 @@ commands:
|
||||
/<command> listcircles - list details of all circles
|
||||
/<command> updatecircle <label> <arg>:<value> ... - update attributes of circle with given label
|
||||
/<command> updatecircle id:<id> <arg>:<value> ... - update attributes of circle with given ID
|
||||
/<command> getdesc id:<id> type:<icon|area|circle|line> - get description for marker with given ID
|
||||
/<command> getdesc <label> type:<icon|area|circle|line> - get description for marker with given label
|
||||
/<command> resetdesc id:<id> type:<icon|area|circle|line> - clear description for marker with given ID
|
||||
/<command> resetdesc <label> type:<icon|area|circle|line> - clear description for marker with given label
|
||||
/<command> appenddesc id:<id> type:<icon|area|circle|line> desc:"text" - append text line to description for marker with given ID
|
||||
/<command> appenddesc <label> type:<icon|area|circle|line> desc:"text" - append text line to description for marker with given label
|
||||
/<command> importdesc id:<id> type:<icon|area|circle|line> file:<filename> - import description from given file for marker with given ID
|
||||
/<command> importdesc <label> type:<icon|area|circle|line> file:<filename> - import description from given file for marker with given label
|
||||
/<command> importlabel id:<id> type:<icon|area|circle|line> file:<filename> - import label with markup from given file for marker with given ID
|
||||
/<command> importlabel <label> type:<icon|area|circle|line> file:<filename> - import label with markup from given file for marker with given label
|
||||
/<command> getlabel id:<id> type:<icon|area|circle|line> - get label for marker with given ID
|
||||
|
||||
dmap:
|
||||
description: List and modify dynmap configuration
|
||||
@@ -119,6 +134,8 @@ permissions:
|
||||
dynmap.resetstats: true
|
||||
dynmap.sendtoweb: true
|
||||
dynmap.purgequeue: true
|
||||
dynmap.purgemap: true
|
||||
dynmap.purgeworld: true
|
||||
dynmap.ids-for-ip: true
|
||||
dynmap.ips-for-id: true
|
||||
dynmap.webregister: true
|
||||
@@ -146,6 +163,12 @@ permissions:
|
||||
dynmap.marker.updatecircle: true
|
||||
dynmap.marker.listcircles: true
|
||||
dynmap.marker.deletecircle: true
|
||||
dynmap.marker.getdesc: true
|
||||
dynmap.marker.resetdesc: true
|
||||
dynmap.marker.appenddesc: true
|
||||
dynmap.marker.importdesc: true
|
||||
dynmap.marker.getlabel: true
|
||||
dynmap.marker.importlabel: true
|
||||
dynmap.dmap.worldlist: true
|
||||
dynmap.dmap.worldset: true
|
||||
dynmap.dmap.worldreset: true
|
||||
@@ -198,6 +221,12 @@ permissions:
|
||||
dynmap.purgequeue:
|
||||
description: Allows /dynmap purgequeue
|
||||
default: op
|
||||
dynmap.purgemap:
|
||||
description: Allows /dynmap purgemap
|
||||
default: op
|
||||
dynmap.purgeworld:
|
||||
description: Allows /dynmap purgeworld
|
||||
default: op
|
||||
dynmap.pause:
|
||||
description: Allows /dynmap pause
|
||||
default: op
|
||||
@@ -210,7 +239,7 @@ permissions:
|
||||
dynmap.webregister:
|
||||
description: Allows /dynmap webregister
|
||||
default: true
|
||||
dynmao,webregister.other:
|
||||
dynmap.webregister.other:
|
||||
description: Allows /dynmap webregister userid
|
||||
default: op
|
||||
dynmap.marker.add:
|
||||
@@ -291,6 +320,24 @@ permissions:
|
||||
dynmap.marker.deletecircle:
|
||||
description: Allows /dmarker deletecircle
|
||||
default: op
|
||||
dynmap.marker.getdesc:
|
||||
description: Allows /dmarker getdesc
|
||||
default: op
|
||||
dynmap.marker.resetdesc:
|
||||
description: Allows /dmarker resetdesc
|
||||
default: op
|
||||
dynmap.marker.appenddesc:
|
||||
description: Allows /dmarker appenddesc
|
||||
default: op
|
||||
dynmap.marker.importdesc:
|
||||
description: Allows /dmarker importdesc
|
||||
default: op
|
||||
dynmap.marker.getlabel:
|
||||
description: Allows /dmarker getlabel
|
||||
default: op
|
||||
dynmap.marker.importlabel:
|
||||
description: Allows /dmarker importlabel
|
||||
default: op
|
||||
dynmap.dmap.worldlist:
|
||||
description: Allows /dmap worldlist
|
||||
default: op
|
||||
|
||||
Reference in New Issue
Block a user