Skip to content

Commit 5833960

Browse files
committed
wire up the whitelist/blacklist stuff for dimensions - hopefully all the wiring is correct
1 parent b6fb488 commit 5833960

File tree

7 files changed

+143
-96
lines changed

7 files changed

+143
-96
lines changed

src/main/java/com/mcmoddev/orespawn/api/os3/SpawnBuilder.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import javax.annotation.Nullable;
88

99
import com.google.common.collect.ImmutableList;
10+
import com.google.gson.JsonObject;
1011
import com.mcmoddev.orespawn.api.BiomeLocation;
1112
import com.mcmoddev.orespawn.util.OreList;
1213

@@ -18,7 +19,10 @@ public interface SpawnBuilder {
1819
OreBuilder newOreBuilder();
1920
SpawnBuilder create( @Nonnull BiomeBuilder biomes, @Nonnull FeatureBuilder feature,
2021
@Nonnull List<IBlockState> replacements, @Nonnull OreBuilder... ores );
21-
22+
SpawnBuilder create( @Nonnull BiomeBuilder biomes, @Nonnull FeatureBuilder feature,
23+
@Nonnull List<IBlockState> replacements, JsonObject exDim,
24+
@Nonnull OreBuilder... ores );
25+
2226
BiomeLocation getBiomes();
2327
ImmutableList<OreBuilder> getOres();
2428
ImmutableList<IBlockState> getReplacementBlocks();
@@ -31,4 +35,6 @@ SpawnBuilder create( @Nonnull BiomeBuilder biomes, @Nonnull FeatureBuilder featu
3135
void enabled(boolean enabled);
3236
boolean retrogen();
3337
void retrogen(boolean enabled);
38+
boolean hasExtendedDimensions();
39+
boolean extendedDimensionsMatch( int dimension );
3440
}

src/main/java/com/mcmoddev/orespawn/data/Constants.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,10 @@ private DefaultFeatureProperties() {}
9696
public static final String MAXHEIGHT = "maxHeight";
9797
public static final String MINHEIGHT = "minHeight";
9898
}
99+
public final class DimensionStuff {
100+
private DimensionStuff() {}
101+
public static final String INCLUDE = "include";
102+
public static final String EXCLUDE = "exclude";
103+
}
99104
}
100105
}

src/main/java/com/mcmoddev/orespawn/impl/os3/OS3APIImpl.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,11 @@ public void registerLogic(BuilderLogic logic) {
7575

7676
@Override
7777
public int dimensionWildcard() {
78-
return "DIMENSION_WILDCARD".hashCode();
78+
return 0xCAFEBABE;
7979
}
8080

8181
@Override
82-
public int biomeWildcard() {
83-
return "BIOME_WILDCARD".hashCode();
84-
}
82+
public int biomeWildcard() { return 0xF00DF00D; }
8583

8684
@Override
8785
public ImmutableMap<String, BuilderLogic> getSpawns() {

src/main/java/com/mcmoddev/orespawn/impl/os3/SpawnBuilderImpl.java

Lines changed: 56 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
package com.mcmoddev.orespawn.impl.os3;
22

3-
import java.util.ArrayList;
4-
import java.util.Collections;
5-
import java.util.List;
6-
import java.util.Random;
7-
8-
import javax.annotation.Nullable;
9-
103
import com.google.common.collect.ImmutableList;
4+
import com.google.gson.JsonArray;
5+
import com.google.gson.JsonObject;
116
import com.mcmoddev.orespawn.OreSpawn;
127
import com.mcmoddev.orespawn.api.BiomeLocation;
13-
import com.mcmoddev.orespawn.api.os3.SpawnBuilder;
8+
import com.mcmoddev.orespawn.api.os3.*;
9+
import com.mcmoddev.orespawn.data.Constants;
1410
import com.mcmoddev.orespawn.util.OreList;
15-
1611
import net.minecraft.block.state.IBlockState;
12+
import org.apache.commons.lang3.ArrayUtils;
1713

18-
import com.mcmoddev.orespawn.api.os3.FeatureBuilder;
19-
import com.mcmoddev.orespawn.api.os3.BiomeBuilder;
20-
import com.mcmoddev.orespawn.api.os3.OreBuilder;
14+
import javax.annotation.Nonnull;
15+
import javax.annotation.Nullable;
16+
import java.util.*;
2117

2218
public class SpawnBuilderImpl implements SpawnBuilder {
2319
private BiomeLocation biomeLocs;
@@ -27,8 +23,10 @@ public class SpawnBuilderImpl implements SpawnBuilder {
2723
private OreList oreList;
2824
private boolean enabled = true;
2925
private boolean retrogen = false;
30-
31-
public SpawnBuilderImpl() {
26+
private boolean extendedDimensionsBool = false;
27+
private DimensionList extendedDimensions;
28+
29+
SpawnBuilderImpl () {
3230
this.biomeLocs = null;
3331
this.featureGen = null;
3432
this.replacementBlocks = new ArrayList<>();
@@ -58,37 +56,63 @@ public BiomeBuilder newBiomeBuilder() {
5856
public OreBuilder newOreBuilder() {
5957
return new OreBuilderImpl();
6058
}
61-
59+
6260
@Override
63-
public SpawnBuilder create(BiomeBuilder biomes, FeatureBuilder feature,
64-
List<IBlockState> replacements, OreBuilder... ores) {
61+
public SpawnBuilder create(@Nonnull BiomeBuilder biomes, @Nonnull FeatureBuilder feature,
62+
@Nonnull List<IBlockState> replacements, @Nonnull OreBuilder... ores) {
6563
this.biomeLocs = biomes.getBiomes();
6664
this.featureGen = feature;
6765
this.replacementBlocks.addAll(replacements);
6866

6967
if( ores.length > 1 ) {
70-
for(int i = 0; i < ores.length; i++) {
71-
this.myOres.add(ores[i]);
72-
}
68+
this.myOres.addAll ( Arrays.asList ( ores ) );
7369
} else {
7470
this.myOres.add(ores[0]);
7571
}
7672
return this;
7773
}
7874

75+
@Override
76+
public SpawnBuilder create ( @Nonnull BiomeBuilder biomes, @Nonnull FeatureBuilder feature,
77+
@Nonnull List<IBlockState> replacements, JsonObject exDim,
78+
@Nonnull OreBuilder... ores ) {
79+
this.create(biomes, feature, replacements, ores);
80+
81+
this.setupDimensionWhitelist(exDim);
82+
return this;
83+
}
84+
85+
private void setupDimensionWhitelist ( JsonObject exDim ) {
86+
JsonArray whitelist = exDim.getAsJsonArray( Constants.ConfigNames.DimensionStuff.INCLUDE);
87+
JsonArray blacklist = exDim.getAsJsonArray ( Constants.ConfigNames.DimensionStuff.EXCLUDE );
88+
List<Integer> tempW = new ArrayList<> ();
89+
List<Integer> tempB = new ArrayList<> ();
90+
91+
if( whitelist != null )
92+
whitelist.forEach( it -> tempW.add(it.getAsInt()) );
93+
94+
if( blacklist != null )
95+
blacklist.forEach( it -> tempB.add(it.getAsInt()) );
96+
97+
this.extendedDimensionsBool = true;
98+
this.extendedDimensions = new DimensionListImpl();
99+
this.extendedDimensions.create( ArrayUtils.toPrimitive( tempW.toArray ( new Integer[0] ) ),
100+
ArrayUtils.toPrimitive( tempB.toArray ( new Integer[0] ) ) );
101+
}
102+
79103
@Override
80104
public BiomeLocation getBiomes() {
81105
return this.biomeLocs;
82106
}
83107

84108
@Override
85109
public ImmutableList<OreBuilder> getOres() {
86-
return ImmutableList.<OreBuilder>copyOf(this.myOres);
110+
return ImmutableList.copyOf(this.myOres);
87111
}
88112

89113
@Override
90114
public ImmutableList<IBlockState> getReplacementBlocks() {
91-
return ImmutableList.<IBlockState>copyOf(this.replacementBlocks);
115+
return ImmutableList.copyOf(this.replacementBlocks);
92116
}
93117

94118
@Override
@@ -124,6 +148,16 @@ public void retrogen(boolean enabled) {
124148
this.retrogen = enabled;
125149
}
126150

151+
@Override
152+
public boolean hasExtendedDimensions () {
153+
return this.extendedDimensionsBool;
154+
}
155+
156+
@Override
157+
public boolean extendedDimensionsMatch ( int dimension ) {
158+
return !this.extendedDimensionsBool || this.extendedDimensions.match ( dimension );
159+
}
160+
127161
@Override
128162
public OreBuilder getRandomOre(Random rand) {
129163
if( this.oreList == null )

src/main/java/com/mcmoddev/orespawn/json/OS3Reader.java

Lines changed: 23 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -87,27 +87,10 @@ public static void loadEntries() {
8787
JsonElement full = parser.parse(rawData);
8888
JsonObject parsed = full.getAsJsonObject();
8989

90-
IOS3Reader reader = null;
9190
String version = parsed.get("version").getAsString();
92-
switch( version ) {
93-
case "1":
94-
reader = new OS3V1Reader();
95-
break;
96-
case "1.1":
97-
reader = new OS3V11Reader();
98-
break;
99-
case "1.2":
100-
reader = new OS3V12Reader();
101-
break;
102-
case "2.0":
103-
reader = new OS3V2Reader();
104-
break;
105-
default:
106-
OreSpawn.LOGGER.error("Unknown version %s", version);
107-
return;
108-
}
109-
110-
finallyParse(reader.parseJson(parsed, FilenameUtils.getBaseName(file.getName())), FilenameUtils.getBaseName(file.getName()));
91+
IOS3Reader reader = getReader( version );
92+
if( reader != null )
93+
finallyParse(reader.parseJson(parsed, FilenameUtils.getBaseName(file.getName())), FilenameUtils.getBaseName(file.getName()));
11194
} catch (Exception e) {
11295
CrashReport report = CrashReport.makeCrashReport(e, "Failed reading config " + file.getName());
11396
report.getCategory().addCrashSection(Constants.ORESPAWN_VERSION_CRASH_MESSAGE, Constants.VERSION);
@@ -123,10 +106,10 @@ private static void loadPresets(Path presets) {
123106
JsonParser parser = new JsonParser();
124107
String rawJson = FileUtils.readFileToString(presets.toFile(), Charsets.UTF_8);
125108
JsonObject top = parser.parse(rawJson).getAsJsonObject();
126-
top.entrySet().stream()
109+
top.entrySet()
127110
.forEach( entry -> {
128111
String section = entry.getKey();
129-
entry.getValue().getAsJsonObject().entrySet().stream()
112+
entry.getValue().getAsJsonObject().entrySet()
130113
.forEach( pres -> OreSpawn.API.getPresets().setSymbolSection(section, pres.getKey(), pres.getValue()) );
131114
});
132115
} catch( IOException exc ) {
@@ -172,7 +155,12 @@ private static void finallyParse(JsonObject parseJson, String filename) {
172155
gen.setParameters(nw.getAsJsonObject(ConfigNames.PARAMETERS));
173156
spawn.enabled( nw.get(ConfigNames.V2.ENABLED).getAsBoolean());
174157
spawn.retrogen( nw.get(ConfigNames.V2.RETROGEN).getAsBoolean());
175-
spawn.create(biomes, gen, replacements, blocks.stream().toArray(OreBuilder[]::new));
158+
159+
if( nw.has( ConfigNames.DIMENSION) )
160+
spawn.create( biomes, gen, replacements, nw.getAsJsonObject( ConfigNames.DIMENSION ), blocks.toArray( new OreBuilder[0]) );
161+
else
162+
spawn.create(biomes, gen, replacements, blocks.toArray( new OreBuilder[0] ) );
163+
176164
builder.create(spawn);
177165
} catch( JsonParseException ex ) {
178166
OreSpawn.LOGGER.error("Error parsing entry %s : %s", ore.getAsJsonObject().get("name").getAsString(), ex);
@@ -201,28 +189,19 @@ private static List<IBlockState> getReplacements(String configField, int dimensi
201189
}
202190
}
203191

204-
public static void loadFromJson(String modName, JsonObject json) {
205-
String version = json.get("version").getAsString();
206-
IOS3Reader reader = null;
207-
192+
private static IOS3Reader getReader(String version) {
208193
switch( version ) {
209-
case "1":
210-
reader = new OS3V1Reader();
211-
break;
212-
case "1.1":
213-
reader = new OS3V11Reader();
214-
break;
215-
case "1.2":
216-
reader = new OS3V12Reader();
217-
break;
218-
case "2.0":
219-
reader = new OS3V2Reader();
220-
break;
221-
default:
222-
OreSpawn.LOGGER.error("Unknown version %s", version);
223-
return;
194+
case "1":
195+
return new OS3V1Reader();
196+
case "1.1":
197+
return new OS3V11Reader();
198+
case "1.2":
199+
return new OS3V12Reader();
200+
case "2.0":
201+
return new OS3V2Reader();
202+
default:
203+
OreSpawn.LOGGER.error("Unknown version %s", version);
204+
return null;
224205
}
225-
226-
reader.parseJson(json, modName);
227206
}
228207
}

src/main/java/com/mcmoddev/orespawn/json/os3/readers/OS3V2Reader.java

Lines changed: 49 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,50 +21,35 @@ public OS3V2PresetStorage getStorage() {
2121
@Override
2222
public JsonObject parseJson(JsonObject entries, String fileName) {
2323
// do we have any presets ?
24-
boolean hasPresets = entries.has("presets");
2524
JsonObject spawns = entries.getAsJsonObject("spawns");
2625
JsonObject retVal = new JsonObject();
2726

2827
storage.clear();
2928
OreSpawn.API.getPresets().copy(storage);
30-
31-
if( hasPresets ) {
32-
for( Entry<String, JsonElement> preset : entries.get("presets").getAsJsonObject().entrySet() ) {
33-
String sectionName = preset.getKey();
34-
JsonObject entry = preset.getValue().getAsJsonObject();
35-
36-
for( Entry<String, JsonElement> variables : entry.entrySet() ) {
37-
String itemName = variables.getKey();
38-
JsonElement varValue = variables.getValue();
39-
storage.setSymbolSection(sectionName, itemName, varValue);
40-
}
41-
}
42-
}
43-
29+
30+
loadLocalPresets( entries );
31+
4432
// 'work' contains the reduced, no-variables-here data
4533
JsonObject work = new JsonObject();
4634
spawns.entrySet().forEach( entry -> work.add( entry.getKey(), replaceVariables(entry.getValue().getAsJsonObject())));
4735

4836
work.entrySet().forEach( entry -> {
49-
JsonObject lw = entry.getValue().getAsJsonObject();
50-
51-
if( lw.getAsJsonArray(ConfigNames.DIMENSIONS).size() <1 ) {
52-
JsonArray temp = lw.getAsJsonArray(ConfigNames.DIMENSIONS);
53-
temp.add(OreSpawn.API.dimensionWildcard());
54-
lw.remove(ConfigNames.DIMENSIONS);
55-
lw.add(ConfigNames.DIMENSIONS, temp);
56-
}
57-
37+
JsonObject lw = setHandleDimensions(entry.getValue().getAsJsonObject());
38+
5839
lw.getAsJsonArray(ConfigNames.DIMENSIONS).getAsJsonArray().forEach(
5940
dim -> {
6041
JsonObject nw = new JsonObject();
6142
nw.addProperty("name", entry.getKey());
43+
44+
if ( lw.has( ConfigNames.DIMENSION ) )
45+
nw.add( ConfigNames.DIMENSION, lw.getAsJsonObject( ConfigNames.DIMENSION ) );
46+
6247
entry.getValue().getAsJsonObject().entrySet().stream()
6348
.filter( e -> !e.getKey().equals(ConfigNames.DIMENSIONS) )
6449
.forEach( ent -> nw.add( ent.getKey(), ent.getValue()));
6550
JsonArray thisDim = getDimensionData(retVal, dim.getAsInt());
6651
thisDim.add(nw);
67-
52+
6853
JsonObject dimStore;
6954
if( retVal.has(ConfigNames.DIMENSIONS) ) {
7055
dimStore = retVal.getAsJsonObject(ConfigNames.DIMENSIONS);
@@ -78,4 +63,43 @@ public JsonObject parseJson(JsonObject entries, String fileName) {
7863

7964
return retVal;
8065
}
66+
67+
private JsonObject setHandleDimensions ( JsonObject spawnEntry ) {
68+
JsonObject lw = spawnEntry;
69+
70+
if( lw.get(ConfigNames.DIMENSIONS).isJsonArray () ) {
71+
if ( lw.getAsJsonArray ( ConfigNames.DIMENSIONS ).size () < 1 ) {
72+
JsonArray temp = lw.getAsJsonArray ( ConfigNames.DIMENSIONS );
73+
temp.add ( OreSpawn.API.dimensionWildcard () );
74+
lw.remove ( ConfigNames.DIMENSIONS );
75+
lw.add ( ConfigNames.DIMENSIONS, temp );
76+
}
77+
} else {
78+
JsonObject dimSet = lw.getAsJsonObject( ConfigNames.DIMENSIONS );
79+
lw.add( ConfigNames.DIMENSION, dimSet );
80+
lw.remove( ConfigNames.DIMENSIONS );
81+
JsonArray temp = new JsonArray();
82+
temp.add( OreSpawn.API.dimensionWildcard () );
83+
lw.add( ConfigNames.DIMENSIONS, temp );
84+
}
85+
86+
return lw;
87+
}
88+
89+
private void loadLocalPresets ( JsonObject entries ) {
90+
boolean hasPresets = entries.has("presets");
91+
92+
if( hasPresets ) {
93+
for( Entry<String, JsonElement> preset : entries.get("presets").getAsJsonObject().entrySet() ) {
94+
String sectionName = preset.getKey();
95+
JsonObject entry = preset.getValue().getAsJsonObject();
96+
97+
for( Entry<String, JsonElement> variables : entry.entrySet() ) {
98+
String itemName = variables.getKey();
99+
JsonElement varValue = variables.getValue();
100+
storage.setSymbolSection(sectionName, itemName, varValue);
101+
}
102+
}
103+
}
104+
}
81105
}

src/main/java/com/mcmoddev/orespawn/worldgen/OreSpawnWorldGen.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public void generate(Random random, int chunkX, int chunkZ, World world, IChunkG
6969
!Config.getBoolean(Constants.RETROGEN_KEY))
7070
.filter( ent -> ent.getBiomes().matches(world.getBiomeProvider().getBiome(new BlockPos(chunkX*16, 64,chunkZ*16))) ||
7171
ent.getBiomes().getBiomes().isEmpty() )
72+
.filter( ent -> ent.hasExtendedDimensions() || ent.extendedDimensionsMatch(thisDim) )
7273
.forEach( sE -> {
7374
IFeature currentFeatureGen = sE.getFeatureGen().getGenerator();
7475
List<IBlockState> replacement = sE.getReplacementBlocks();

0 commit comments

Comments
 (0)