This commit is contained in:
JurgenKuyper 2024-04-07 14:31:13 +00:00 committed by GitHub
commit 438d373371
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 145 additions and 115 deletions

View File

@ -31,6 +31,7 @@ public class MarkersComponent extends ClientComponent {
private MarkerSet spawnbedset;
private MarkerIcon spawnbedicon;
private String spawnbedformat;
private boolean removebedonplayerleave;
private long maxofflineage;
private boolean showSpawn;
private boolean showBorder;
@ -180,7 +181,7 @@ public class MarkersComponent extends ClientComponent {
spawnbedicon = api.getMarkerIcon(configuration.getString("spawnbedicon", "bed"));
spawnbedformat = configuration.getString("spawnbedformat", "%name%'s bed");
removebedonplayerleave = configuration.getBoolean("spawnbedremoveonplayerleave", true);
/* Add listener for players coming and going */
core.listenerManager.addListener(EventType.PLAYER_JOIN, new PlayerEventListener() {
@Override
@ -188,15 +189,17 @@ public class MarkersComponent extends ClientComponent {
updatePlayer(p);
}
});
core.listenerManager.addListener(EventType.PLAYER_QUIT, new PlayerEventListener() {
@Override
public void playerEvent(DynmapPlayer p) {
Marker m = spawnbedset.findMarker(p.getName()+"_bed");
if(m != null) {
m.deleteMarker();
if (removebedonplayerleave) {
core.listenerManager.addListener(EventType.PLAYER_QUIT, new PlayerEventListener() {
@Override
public void playerEvent(DynmapPlayer p) {
Marker m = spawnbedset.findMarker(p.getName() + "_bed");
if (m != null) {
m.deleteMarker();
}
}
}
});
});
}
core.listenerManager.addListener(EventType.PLAYER_BED_LEAVE, new PlayerEventListener() {
@Override
public void playerEvent(final DynmapPlayer p) {

View File

@ -364,7 +364,7 @@ public class HDBlockModels {
if ((line.length() > 0) && (line.charAt(0) == '[')) { // If version constrained like
int end = line.indexOf(']'); // Find end
if (end < 0) {
Log.severe("Format error - line " + lineNum + " of " + fname + ": bad version limit");
Log.severe("Format error - line " + lineNum + " of " + fname + ": bad version limit of file: " + fname);
return;
}
String vertst = line.substring(1, end);
@ -414,12 +414,12 @@ public class HDBlockModels {
cnt++;
}
else {
Log.severe("Invalid model block name " + bblk.blockName + " at line " + lineNum);
Log.severe("Invalid model block name " + bblk.blockName + " at line " + lineNum + " of file: " + fname);
}
}
}
else {
Log.severe("Block model missing required parameters = line " + lineNum + " of " + fname);
Log.severe("Block model missing required parameters = line " + lineNum + " of file: " + fname);
}
layerbits = 0;
}
@ -444,7 +444,7 @@ public class HDBlockModels {
}
bsprslt = bsp.getMatchingStates();
if (bsprslt.size() != 1) {
Log.severe("Missing rotate source on line " + lineNum);
Log.severe("Missing rotate source on line " + lineNum + " of file: " + fname);
continue;
}
DynmapBlockState basebs = bsprslt.keySet().iterator().next();
@ -452,7 +452,7 @@ public class HDBlockModels {
/* get old model to be rotated */
DynmapBlockState bs = basebs.getState(bits.nextSetBit(0));
if (bs.isAir()) {
Log.severe("Invalid rotate ID: " + bs + " on line " + lineNum);
Log.severe("Invalid rotate ID: " + bs + " on line " + lineNum + " of file: " + fname);
continue;
}
HDBlockModel mod = models_by_id_data.get(bs.globalStateIndex);
@ -491,7 +491,7 @@ public class HDBlockModels {
}
}
else {
Log.severe("Invalid rotate error - line " + lineNum + " of " + fname);
Log.severe("Invalid rotate error - line " + lineNum + " of file: " + fname);
continue;
}
}
@ -513,7 +513,7 @@ public class HDBlockModels {
}
bsprslt = bsp.getMatchingStates();
if (bsprslt.size() != 1) {
Log.severe("Missing rotate source on line " + lineNum);
Log.severe("Missing rotate source on line " + lineNum + " of file: " + fname);
continue;
}
DynmapBlockState basebs = bsprslt.keySet().iterator().next();
@ -521,7 +521,7 @@ public class HDBlockModels {
/* get old model to be rotated */
DynmapBlockState bs = basebs.getState(bits.nextSetBit(0));
if (bs.isAir()) {
Log.severe("Invalid patchrotate ID: " + bs + " on line " + lineNum);
Log.severe("Invalid patchrotate ID: " + bs + " on line " + lineNum + "of file: " + fname);
continue;
}
HDBlockModel mod = models_by_id_data.get(bs.globalStateIndex);
@ -541,7 +541,7 @@ public class HDBlockModels {
}
}
else {
Log.severe("Invalid rotate error - line " + lineNum + " of " + fname);
Log.severe("Invalid rotate error - line " + lineNum + " of file: " + fname);
return;
}
}
@ -560,7 +560,7 @@ public class HDBlockModels {
}
}
else {
Log.severe("Invalid update ignore block name " + bbs + " at line " + lineNum);
Log.severe("Invalid update ignore block name " + bbs + " at line " + lineNum + " of file: " + fname);
}
}
}
@ -584,7 +584,7 @@ public class HDBlockModels {
for(int i = 0; i < args.length; i++) {
String[] v = args[i].split("=");
if(v.length < 2) {
Log.severe("Format error - line " + lineNum + " of " + fname);
Log.severe("Format error - line " + lineNum + " of file: " + fname);
return;
}
try {
@ -592,7 +592,7 @@ public class HDBlockModels {
int parmval = config.getInteger(v[0], val); /* Read value, with applied default */
varvals.put(v[0], parmval); /* And save value */
} catch (NumberFormatException nfx) {
Log.severe("Format error - line " + lineNum + " of " + fname);
Log.severe("Format error - line " + lineNum + " of file: " + fname);
return;
}
}
@ -668,7 +668,7 @@ public class HDBlockModels {
p_vmax = Double.parseDouble(av[1]);
}
else if(av[0].equals("UplusVmax")) {
Log.warning("UplusVmax deprecated - use VmaxAtUMax - line " + lineNum + " of " + fname);
Log.warning("UplusVmax deprecated - use VmaxAtUMax - line " + lineNum + " of file: " + fname);
p_uplusvmax = Double.parseDouble(av[1]);
}
else if(av[0].equals("VmaxAtUMax")) {
@ -737,11 +737,11 @@ public class HDBlockModels {
patchnum1 = Integer.parseInt(ids2[1]);
}
if (patchnum0 < 0) {
Log.severe("Invalid patch index " + patchnum0 + " - line " + lineNum + " of " + fname);
Log.severe("Invalid patch index " + patchnum0 + " - line " + lineNum + " of file: " + fname);
return;
}
if (patchnum1 < patchnum0) {
Log.severe("Invalid patch index " + patchnum1 + " - line " + lineNum + " of " + fname);
Log.severe("Invalid patch index " + patchnum1 + " - line " + lineNum + " of file: " + fname);
return;
}
String patchid = av[1];
@ -749,7 +749,7 @@ public class HDBlockModels {
for (int i = patchnum0; i <= patchnum1; i++) {
PatchDefinition pd = pdf.getPatchByName(patchid, i);
if (pd == null) {
Log.severe("Invalid patch ID " + patchid + " - line " + lineNum + " of " + fname);
Log.severe("Invalid patch ID " + patchid + " - line " + lineNum + " of file: " + fname);
return;
}
patches.add(i, pd);
@ -769,12 +769,12 @@ public class HDBlockModels {
cnt++;
}
else {
Log.severe("Invalid patchmodel block name " + bs + " at line " + lineNum);
Log.severe("Invalid patchmodel block name " + bs + " at line " + lineNum + " of file: " + fname);
}
}
}
else {
Log.severe("Patch block model missing required parameters = line " + lineNum + " of " + fname);
Log.severe("Patch block model missing required parameters = line " + lineNum + " of file: " + fname);
}
}
// Shortcut for defining a patchblock that is a simple rectangular prism, with sidex corresponding to full block sides
@ -832,12 +832,12 @@ public class HDBlockModels {
cnt++;
}
else {
Log.severe("Invalid boxmodel block name " + bs + " at line " + lineNum);
Log.severe("Invalid boxmodel block name " + bs + " at line " + lineNum + " of file: " + fname);
}
}
}
else {
Log.severe("Box block model missing required parameters = line " + lineNum + " of " + fname);
Log.severe("Box block model missing required parameters = line " + lineNum + " of file: " + fname);
}
}
// Shortcut for defining a patchblock that is a simple rectangular prism, with sidex corresponding to full block sides
@ -898,12 +898,12 @@ public class HDBlockModels {
cnt++;
}
else {
Log.severe("Invalid boxlist block name " + bs + " at line " + lineNum);
Log.severe("Invalid boxlist block name " + bs + " at line " + lineNum + " of file: " + fname);
}
}
}
else {
Log.severe("Box list block model missing required parameters = line " + lineNum + " of " + fname);
Log.severe("Box list block model missing required parameters = line " + lineNum + " of file: " + fname);
}
}
// Shortcur for building JSON model style
@ -932,7 +932,7 @@ public class HDBlockModels {
}
}
else {
Log.severe("Invalid modellist FROM value (" + prms[0] + " at line " + lineNum);
Log.severe("Invalid modellist FROM value (" + prms[0] + " at line " + lineNum + " of file: " + fname);
}
}
if (prms.length > 1) { // Handle to (to-x/y/z or to-x/y/z/rotx/roty/rotz) or to-x/y/z/rotx/roty/rotz/rorigx/rorigy/rorigz
@ -953,7 +953,7 @@ public class HDBlockModels {
}
}
else {
Log.severe("Invalid modellist TO value (" + prms[1] + " at line " + lineNum);
Log.severe("Invalid modellist TO value (" + prms[1] + " at line " + lineNum + " of file: " + fname);
}
}
// Rest are faces (<side - upnsew>/<txtidx>/umin/vmin/umax/vmax> or <<side - upnsew>/<txtidx>)
@ -971,14 +971,14 @@ public class HDBlockModels {
ModelBoxSide side = new ModelBoxSide();
side.rot = null;
if ((flds.length != 2) && (flds.length != 6)) {
Log.severe("Invalid modellist face '" + v + "' at line " + lineNum);
Log.severe("Invalid modellist face '" + v + "' at line " + lineNum + " of file: " + fname);
continue;
}
if (flds.length > 0) {
String face = flds[0];
side.side = toBlockSide.get(face.substring(0, 1));
if (side.side == null) {
Log.severe("Invalid modellist side value (" + face + ") in '" + v + "' at line " + lineNum);
Log.severe("Invalid modellist side value (" + face + ") in '" + v + "' at line " + lineNum + " of file: " + fname);
continue;
}
if (flds[0].length() > 1) {
@ -1037,7 +1037,7 @@ public class HDBlockModels {
pd.add(patch);
}
else {
Log.severe(String.format("Invalid modellist patch for box %.02f/%.02f/%.02f:%.02f/%.02f/%.02f side %s at line %d", bl.from[0], bl.from[1], bl.from[2], bl.to[0], bl.to[1], bl.to[2], side.side, lineNum));
Log.severe(String.format("Invalid modellist patch for box %.02f/%.02f/%.02f:%.02f/%.02f/%.02f side %s at line %d of file: %s", bl.from[0], bl.from[1], bl.from[2], bl.to[0], bl.to[1], bl.to[2], side.side, lineNum, fname));
Log.verboseinfo(String.format("line = %s:%s", typeid, line));
}
}
@ -1054,12 +1054,12 @@ public class HDBlockModels {
cnt++;
}
else {
Log.severe("Invalid modellist block name " + bs + " at line " + lineNum);
Log.severe("Invalid modellist block name " + bs + " at line " + lineNum + " of file: " + fname);
}
}
}
else {
Log.severe("Model list block model missing required parameters = line " + lineNum + " of " + fname);
Log.severe("Model list block model missing required parameters = line " + lineNum + " of " + fname + " of file: " + fname);
}
}
else if (typeid.equals("customblock")) {
@ -1094,7 +1094,7 @@ public class HDBlockModels {
if (bs.isNotAir()) {
CustomBlockModel cbm = new CustomBlockModel(bs, bsprslt.get(bs), cls, custargs, blockset);
if(cbm.render == null) {
Log.severe("Custom block model failed to initialize = line " + lineNum + " of " + fname);
Log.severe("Custom block model failed to initialize = line " + lineNum + " of file: " + fname);
}
else {
/* Update maximum texture count */
@ -1106,12 +1106,12 @@ public class HDBlockModels {
cnt++;
}
else {
Log.severe("Invalid custommodel block name " + bs + " at line " + lineNum);
Log.severe("Invalid custommodel block name " + bs + " at line " + lineNum + " of file: " + fname);
}
}
}
else {
Log.severe("Custom block model missing required parameters = line " + lineNum + " of " + fname);
Log.severe("Custom block model missing required parameters = line " + lineNum + " of file: " + fname);
}
}
else if (typeid.equals("modname")) {
@ -1173,11 +1173,11 @@ public class HDBlockModels {
if (need_mod_cfg) {
Log.severe("Error loading configuration file for " + modname);
}
Log.verboseinfo("Loaded " + cnt + " block models from " + fname);
Log.verboseinfo("Loaded " + cnt + " block models from " + fname + " of file: " + fname);
} catch (IOException iox) {
Log.severe("Error reading models.txt - " + iox.toString());
} catch (NumberFormatException nfx) {
Log.severe("Format error - line " + rdr.getLineNumber() + " of " + fname + ": " + nfx.getMessage());
Log.severe("Format error - line " + rdr.getLineNumber() + " of file: " + fname + ": " + nfx.getMessage());
} finally {
if(rdr != null) {
try {

View File

@ -6,10 +6,7 @@ import java.io.IOException;
import java.util.BitSet;
import java.util.List;
import org.dynmap.Color;
import org.dynmap.ConfigurationNode;
import org.dynmap.DynmapCore;
import org.dynmap.MapManager;
import org.dynmap.*;
import org.dynmap.common.DynmapCommandSender;
import org.dynmap.exporter.OBJExport;
import org.dynmap.renderer.DynmapBlockState;
@ -26,15 +23,26 @@ public class TopoHDShader implements HDShader {
private final Color watercolor;
private BitSet hiddenids;
private final int linespacing;
private int worldheight = 384;
public TopoHDShader(DynmapCore core, ConfigurationNode configuration) {
name = (String) configuration.get("name");
fillcolor = new Color[256]; /* Color by Y */
/* Load defined colors from parameters */
for(int i = 0; i < 256; i++) {
fillcolor[i] = configuration.getColor("color" + i, null);
if (HDBlockModels.checkVersionRange(core.getDynmapPluginPlatformVersion(), "-1.17.0")){
worldheight = 256;
fillcolor = new Color[worldheight]; /* Color by Y, must be range of total world height, offset by +64*/
/* Load defined colors from parameters */
for(int i = 0; i < worldheight; i++) {
fillcolor[i] = configuration.getColor("color" + (i - 64), null); /* need to substract by 64 because Color does not accept <0 indexes*/
}
}
else{
fillcolor = new Color[worldheight]; /* Color by Y, must be range of total world height, offset by +64*/
/* Load defined colors from parameters */
for(int i = 0; i < worldheight; i++) {
fillcolor[i] = configuration.getColor("color" + (i - 64), null); /* need to substract by 64 because Color does not accept <0 indexes*/
}
}
linecolor = configuration.getColor("linecolor", null);
watercolor = configuration.getColor("watercolor", null);
float wateralpha = configuration.getFloat("wateralpha", 1.0F);
@ -45,11 +53,11 @@ public class TopoHDShader implements HDShader {
if(fillcolor[0] == null) {
fillcolor[0] = new Color(0, 0, 0);
}
if(fillcolor[255] == null) {
fillcolor[255] = new Color(255, 255, 255);
if(fillcolor[worldheight-1] == null) {
fillcolor[worldheight-1] = new Color(255, 255, 255);
}
int starty = 0;
for(int i = 1; i < 256; i++) {
for(int i = 0; i < worldheight; i++) {
if(fillcolor[i] != null) { /* Found color? */
int delta = i - starty;
Color c0 = fillcolor[starty];
@ -73,7 +81,7 @@ public class TopoHDShader implements HDShader {
}
linespacing = configuration.getInteger("linespacing", 1);
}
private void setHidden(String bn) {
DynmapBlockState bs = DynmapBlockState.getBaseStateByName(bn);
for (int i = 0; i < bs.getStateCount(); i++) {
@ -81,17 +89,17 @@ public class TopoHDShader implements HDShader {
hiddenids.set(b.globalStateIndex);
}
}
@Override
public boolean isBiomeDataNeeded() {
return false;
public boolean isBiomeDataNeeded() {
return false;
}
@Override
public boolean isRawBiomeDataNeeded() {
return false;
public boolean isRawBiomeDataNeeded() {
return false;
}
@Override
public boolean isHightestBlockYDataNeeded() {
return false;
@ -116,7 +124,7 @@ public class TopoHDShader implements HDShader {
public String getName() {
return name;
}
private class OurShaderState implements HDShaderState {
private Color color[];
private Color tmpcolor[];
@ -128,7 +136,7 @@ public class TopoHDShader implements HDShader {
private int heightshift; /* Divide to keep in 0-127 range of colors */
private boolean inWater;
final int[] lightingTable;
private OurShaderState(MapIterator mapiter, HDMap map, MapChunkCache cache, int scale) {
this.mapiter = mapiter;
this.map = map;
@ -171,14 +179,14 @@ public class TopoHDShader implements HDShader {
public HDMap getMap() {
return map;
}
/**
* Get our lighting
*/
public HDLighting getLighting() {
return lighting;
}
/**
* Reset renderer state for new ray
*/
@ -187,18 +195,18 @@ public class TopoHDShader implements HDShader {
color[i].setTransparent();
inWater = false;
}
private final boolean isHidden(DynmapBlockState blk) {
return hiddenids.get(blk.globalStateIndex);
}
/**
* Process next ray step - called for each block on route
* @return true if ray is done, false if ray needs to continue
*/
public boolean processBlock(HDPerspectiveState ps) {
DynmapBlockState blocktype = ps.getBlockState();
if (isHidden(blocktype)) {
return false;
}
@ -208,56 +216,56 @@ public class TopoHDShader implements HDShader {
int[] xyz = ps.getSubblockCoord();
// Only color lines when spacing is matched
Color lcolor = ((y % linespacing) == 0)?linecolor:null;
/* See which face we're on (only do lines on top face) */
switch(ps.getLastBlockStep()) {
case Y_MINUS:
case Y_PLUS:
if((lcolor != null) &&
(((xyz[0] == 0) && (isHidden(mapiter.getBlockTypeAt(BlockStep.X_MINUS)))) ||
((xyz[0] == (scale-1)) && (isHidden(mapiter.getBlockTypeAt(BlockStep.X_PLUS)))) ||
((xyz[2] == 0) && (isHidden(mapiter.getBlockTypeAt(BlockStep.Z_MINUS)))) ||
((xyz[2] == (scale-1)) && (isHidden(mapiter.getBlockTypeAt(BlockStep.Z_PLUS)))))) {
c.setColor(lcolor);
inWater = false;
}
else if ((watercolor != null) && blocktype.isWater()) {
if (!inWater) {
c.setColor(watercolor);
inWater = true;
case Y_MINUS:
case Y_PLUS:
if((lcolor != null) &&
(((xyz[0] == 0) && (isHidden(mapiter.getBlockTypeAt(BlockStep.X_MINUS)))) ||
((xyz[0] == (scale-1)) && (isHidden(mapiter.getBlockTypeAt(BlockStep.X_PLUS)))) ||
((xyz[2] == 0) && (isHidden(mapiter.getBlockTypeAt(BlockStep.Z_MINUS)))) ||
((xyz[2] == (scale-1)) && (isHidden(mapiter.getBlockTypeAt(BlockStep.Z_PLUS)))))) {
c.setColor(lcolor);
inWater = false;
}
else if ((watercolor != null) && blocktype.isWater()) {
if (!inWater) {
c.setColor(watercolor);
inWater = true;
}
else {
return false;
}
}
else {
return false;
c.setColor(fillcolor[y >> heightshift]);
inWater = false;
}
}
else {
c.setColor(fillcolor[y >> heightshift]);
inWater = false;
}
break;
default:
if((lcolor != null) && (xyz[1] == (scale-1))) {
c.setColor(lcolor);
inWater = false;
}
else if ((watercolor != null) && blocktype.isWater()) {
if (!inWater) {
c.setColor(watercolor);
inWater = true;
break;
default:
if((lcolor != null) && (xyz[1] == (scale-1))) {
c.setColor(lcolor);
inWater = false;
}
else if ((watercolor != null) && blocktype.isWater()) {
if (!inWater) {
c.setColor(watercolor);
inWater = true;
}
else {
return false;
}
}
else {
return false;
c.setColor(fillcolor[y >> heightshift]);
inWater = false;
}
}
else {
c.setColor(fillcolor[y >> heightshift]);
inWater = false;
}
break;
break;
}
/* Handle light level, if needed */
lighting.applyLighting(ps, this, c, tmpcolor);
/* If no previous color contribution, use new color */
if(color[0].isTransparent()) {
for(int i = 0; i < color.length; i++)
@ -272,15 +280,15 @@ public class TopoHDShader implements HDShader {
if(talpha > 0)
for(int i = 0; i < color.length; i++)
color[i].setRGBA((tmpcolor[i].getRed()*alpha2 + color[i].getRed()*alpha) / talpha,
(tmpcolor[i].getGreen()*alpha2 + color[i].getGreen()*alpha) / talpha,
(tmpcolor[i].getBlue()*alpha2 + color[i].getBlue()*alpha) / talpha, talpha);
(tmpcolor[i].getGreen()*alpha2 + color[i].getGreen()*alpha) / talpha,
(tmpcolor[i].getBlue()*alpha2 + color[i].getBlue()*alpha) / talpha, talpha);
else
for(int i = 0; i < color.length; i++)
color[i].setTransparent();
return (talpha >= 254); /* If only one short, no meaningful contribution left */
}
}
}
/**
* Ray ended - used to report that ray has exited map (called if renderer has not reported complete)
*/
@ -324,7 +332,7 @@ public class TopoHDShader implements HDShader {
public HDShaderState getStateInstance(HDMap map, MapChunkCache cache, MapIterator mapiter, int scale) {
return new OurShaderState(mapiter, map, cache, scale);
}
/* Add shader's contributions to JSON for map object */
public void addClientConfiguration(JSONObject mapObject) {
s(mapObject, "shader", name);

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -130,6 +130,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) Show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"

View File

@ -143,6 +143,7 @@ components:
spawnbedhidebydefault: true
spawnbedminzoom: 0
spawnbedformat: "%name%'s bed"
spawnbedremoveonplayerleave: true
# (optional) show world border (vanilla 1.8+)
showworldborder: true
worldborderlabel: "Border"