Repaired loading and placement of old DimDoors Pockets

-Added separate Block class for Chaos Door
-Set up Personal DimDoor to create its own type of tile-entity
-Added flag "2" to update blocks upon PocketTemplate placement to
prevent non-defaultstate doors from breaking upon placement.
-Used write- and read- Compressed instead of GZIP Streams
-Closed the output stream
-Added canRiftBePaired field to Rift tile entities
-Added Chaos- and Personal- Door Rift Tile Entities
-Removed statement where I falsely assumed that a meta of 0 meant that
the blockstate was the default.
-Corrected several other mistakes in Schematic.java
-Had to make sure that the blockstate of ancient fabric didn't get
turned into fabric of reality again...
This commit is contained in:
Mathijs Riezebos 2017-02-16 14:28:28 +01:00
parent d0af9178f0
commit 86eb14c408
11 changed files with 120 additions and 51 deletions

View file

@ -95,7 +95,7 @@ public class PocketTemplate { //there is exactly one pocket placer for each diff
for (int x = 0; x < schematic.getWidth(); x++) { for (int x = 0; x < schematic.getWidth(); x++) {
for (int y = 0; y < schematic.getHeight(); y++) { for (int y = 0; y < schematic.getHeight(); y++) {
for (int z = 0; z < schematic.getWidth(); z++) { for (int z = 0; z < schematic.getWidth(); z++) {
world.setBlockState(new BlockPos(xBase + x, yBase + y, zBase + z), schematic.getPallette().get(schematic.getBlockData()[x][y][z])); world.setBlockState(new BlockPos(xBase + x, yBase + y, zBase + z), schematic.getPallette().get(schematic.getBlockData()[x][y][z]), 2); //the "2" is to make non-default door-halves not break upon placement
} }
} }
} }

View file

@ -28,8 +28,6 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.CompressedStreamTools;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
@ -140,42 +138,50 @@ public class SchematicHandler {
File oldVersionSchematicFile = new File(schematicFolder, "/" + template.getName() + ".schematic"); File oldVersionSchematicFile = new File(schematicFolder, "/" + template.getName() + ".schematic");
NBTTagCompound schematicNBT; NBTTagCompound schematicNBT;
//@todo make the following block less repetitious.
//try to load the schematic from 4 different locations/formats
Schematic schematic = null; Schematic schematic = null;
if (schematicStream != null) { if (schematicStream != null) {
try { try {
GZIPInputStream schematicZipStream = new GZIPInputStream(schematicStream); try (DataInputStream schematicDataStream = new DataInputStream(schematicStream)) {
schematicNBT = CompressedStreamTools.read(new DataInputStream(schematicZipStream)); schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream);
schematic = Schematic.loadFromNBT(schematicNBT); schematic = Schematic.loadFromNBT(schematicNBT);
}
} catch (IOException ex) { } catch (IOException ex) {
Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file " + template.getName() + ".schem did not load correctly from jar.", ex); Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file " + template.getName() + ".schem did not load correctly from jar.", ex);
} finally {
} }
} else if (oldVersionSchematicStream != null) { } else if (oldVersionSchematicStream != null) {
try { try {
GZIPInputStream schematicZipStream = new GZIPInputStream(oldVersionSchematicStream); try (DataInputStream schematicDataStream = new DataInputStream(oldVersionSchematicStream)) {
schematicNBT = CompressedStreamTools.read(new DataInputStream(schematicZipStream)); schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream);
schematic = Schematic.loadFromNBT(schematicNBT); schematic = Schematic.loadFromNBT(schematicNBT);
}
} catch (IOException ex) { } catch (IOException ex) {
Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file " + template.getName() + ".schematic did not load correctly from jar.", ex); Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file " + template.getName() + ".schematic did not load correctly from jar.", ex);
} }
} else if (schematicFile.exists()) { } else if (schematicFile.exists()) {
try { try {
GZIPInputStream schematicZipStream = new GZIPInputStream(new FileInputStream(schematicFile)); try (DataInputStream schematicDataStream = new DataInputStream(new FileInputStream(schematicFile))) {
schematicNBT = CompressedStreamTools.read(new DataInputStream(schematicZipStream)); schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream);
schematic = Schematic.loadFromNBT(schematicNBT); schematic = Schematic.loadFromNBT(schematicNBT);
}
} catch (IOException ex) { } catch (IOException ex) {
Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file " + template.getName() + ".schem did not load correctly from config folder.", ex); Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file " + template.getName() + ".schem did not load correctly from config folder.", ex);
} }
} else if (oldVersionSchematicFile.exists()) { } else if (oldVersionSchematicFile.exists()) {
try { try {
GZIPInputStream schematicZipStream = new GZIPInputStream(new FileInputStream(oldVersionSchematicFile)); try (DataInputStream schematicDataStream = new DataInputStream(new FileInputStream(oldVersionSchematicFile))) {
schematicNBT = CompressedStreamTools.read(new DataInputStream(schematicZipStream)); schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream);
schematic = Schematic.loadFromNBT(schematicNBT); schematic = Schematic.loadFromNBT(schematicNBT);
}
} catch (IOException ex) { } catch (IOException ex) {
Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file " + template.getName() + ".schematic did not load correctly from config folder.", ex); Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, "Schematic file " + template.getName() + ".schematic did not load correctly from config folder.", ex);
} }
} else { } else {
DimDoors.warn(SchematicHandler.class, "Schematic '" + template.getName() + "' was not found in the jar or config directory, neither with the .schem extension, nor with the .schematic extension."); DimDoors.warn(SchematicHandler.class, "Schematic '" + template.getName() + "' was not found in the jar or config directory, neither with the .schem extension, nor with the .schematic extension.");
} }
if (schematic != null if (schematic != null
&& (schematic.getWidth() > (template.getSize()) * 16 || schematic.getLength() > (template.getSize()) * 16)) { && (schematic.getWidth() > (template.getSize()) * 16 || schematic.getLength() > (template.getSize()) * 16)) {
schematic = null; schematic = null;
@ -277,10 +283,10 @@ public class SchematicHandler {
File saveFile = new File(saveFolder.getAbsolutePath() + "/" + name + ".schem"); File saveFile = new File(saveFolder.getAbsolutePath() + "/" + name + ".schem");
try { try {
saveFile.createNewFile(); saveFile.createNewFile();
GZIPOutputStream schematicZipStream = new GZIPOutputStream(new FileOutputStream(saveFile)); DataOutputStream schematicDataStream = new DataOutputStream(new FileOutputStream(saveFile));
CompressedStreamTools.write(schematicNBT, new DataOutputStream(schematicZipStream)); CompressedStreamTools.writeCompressed(schematicNBT, schematicDataStream);
schematicZipStream.flush(); schematicDataStream.flush();
schematicZipStream.close(); schematicDataStream.close();
} catch (IOException ex) { } catch (IOException ex) {
Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(SchematicHandler.class.getName()).log(Level.SEVERE, null, ex);
} }

View file

@ -1,17 +1,20 @@
package com.zixiken.dimdoors.shared.blocks; package com.zixiken.dimdoors.shared.blocks;
import com.zixiken.dimdoors.shared.items.ModItems; import com.zixiken.dimdoors.shared.items.ModItems;
import com.zixiken.dimdoors.shared.tileentities.TileEntityDimDoorChaos;
import java.util.Random; import java.util.Random;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Items; import net.minecraft.init.Items;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockDimDoorUnstable extends BlockDimDoorBase { public class BlockDimDoorChaos extends BlockDimDoorBase {
public static final String ID = "blockDimDoorChaos"; public static final String ID = "blockDimDoorChaos";
public BlockDimDoorUnstable() { public BlockDimDoorChaos() {
super(Material.IRON); super(Material.IRON);
setHardness(.2F); setHardness(.2F);
setUnlocalizedName(ID); setUnlocalizedName(ID);
@ -28,4 +31,9 @@ public class BlockDimDoorUnstable extends BlockDimDoorBase {
public Item getItemDropped(IBlockState state, Random random, int fortune) { public Item getItemDropped(IBlockState state, Random random, int fortune) {
return Items.IRON_DOOR; return Items.IRON_DOOR;
} }
@Override
public TileEntity createNewTileEntity(World world, int metadata) {
return new TileEntityDimDoorChaos();
}
} }

View file

@ -1,8 +1,11 @@
package com.zixiken.dimdoors.shared.blocks; package com.zixiken.dimdoors.shared.blocks;
import com.zixiken.dimdoors.shared.items.ModItems; import com.zixiken.dimdoors.shared.items.ModItems;
import com.zixiken.dimdoors.shared.tileentities.TileEntityDimDoorPersonal;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockDimDoorPersonal extends BlockDimDoorBase { public class BlockDimDoorPersonal extends BlockDimDoorBase {
@ -19,5 +22,10 @@ public class BlockDimDoorPersonal extends BlockDimDoorBase {
public Item getItemDoor() { public Item getItemDoor() {
return ModItems.itemDimDoorPersonal; return ModItems.itemDimDoorPersonal;
} }
@Override
public TileEntity createNewTileEntity(World world, int metadata) {
return new TileEntityDimDoorPersonal();
}
} }

View file

@ -10,7 +10,7 @@ public class ModBlocks {
public static BlockDimDoorTransient blockDimDoorTransient; public static BlockDimDoorTransient blockDimDoorTransient;
public static BlockDimDoorWarp blockDimDoorWarp; public static BlockDimDoorWarp blockDimDoorWarp;
public static BlockDimDoorGold blockDimDoorGold; public static BlockDimDoorGold blockDimDoorGold;
public static BlockDimDoorUnstable blockDimDoorChaos; public static BlockDimDoorChaos blockDimDoorChaos;
public static BlockDimDoor blockDimDoor; public static BlockDimDoor blockDimDoor;
public static BlockTransTrapdoor blockDimHatch; public static BlockTransTrapdoor blockDimHatch;
public static BlockDimWall blockDimWall; public static BlockDimWall blockDimWall;
@ -22,7 +22,7 @@ public class ModBlocks {
GameRegistry.register(blockDimDoorPersonal = new BlockDimDoorPersonal()); GameRegistry.register(blockDimDoorPersonal = new BlockDimDoorPersonal());
GameRegistry.register(blockDoorGold = new BlockDoorGold()); GameRegistry.register(blockDoorGold = new BlockDoorGold());
GameRegistry.register(blockDimDoorGold = new BlockDimDoorGold()); GameRegistry.register(blockDimDoorGold = new BlockDimDoorGold());
GameRegistry.register(blockDimDoorChaos = new BlockDimDoorUnstable()); GameRegistry.register(blockDimDoorChaos = new BlockDimDoorChaos());
GameRegistry.register(blockDimDoorWarp = new BlockDimDoorWarp()); GameRegistry.register(blockDimDoorWarp = new BlockDimDoorWarp());
GameRegistry.register(blockDimDoor = new BlockDimDoor()); GameRegistry.register(blockDimDoor = new BlockDimDoor());
GameRegistry.register(blockDimHatch = new BlockTransTrapdoor()); GameRegistry.register(blockDimHatch = new BlockTransTrapdoor());

View file

@ -50,6 +50,7 @@ public class ItemRiftBlade extends ItemSword {
if (world.isRemote) { if (world.isRemote) {
return new ActionResult(EnumActionResult.FAIL, stack); return new ActionResult(EnumActionResult.FAIL, stack);
} }
//SchematicHandler.Instance.getPersonalPocketTemplate().place(0, 20, 0, 20, 0, 0, 1, EnumPocketType.DUNGEON); //this line can be activated for testing purposes
RayTraceResult hit = rayTrace(world, player, true); RayTraceResult hit = rayTrace(world, player, true);
if (RayTraceHelper.isRift(hit, world)) { if (RayTraceHelper.isRift(hit, world)) {
EnumActionResult canDoorBePlacedOnGroundBelowRift EnumActionResult canDoorBePlacedOnGroundBelowRift
@ -59,7 +60,7 @@ public class ItemRiftBlade extends ItemSword {
stack.damageItem(1, player); stack.damageItem(1, player);
} }
return new ActionResult(canDoorBePlacedOnGroundBelowRift, stack); return new ActionResult(canDoorBePlacedOnGroundBelowRift, stack);
} else if (RayTraceHelper.isLivingEntity(hit)) { } else if (RayTraceHelper.isLivingEntity(hit)) {
TeleportHelper.teleport(player, new Location(world, hit.getBlockPos())); //@todo teleport to a location 1 or 2 blocks distance from the entity TeleportHelper.teleport(player, new Location(world, hit.getBlockPos())); //@todo teleport to a location 1 or 2 blocks distance from the entity
return new ActionResult(EnumActionResult.PASS, stack); return new ActionResult(EnumActionResult.PASS, stack);

View file

@ -12,6 +12,7 @@ import net.minecraft.world.World;
public abstract class DDTileEntityBase extends TileEntity { public abstract class DDTileEntityBase extends TileEntity {
public boolean canRiftBePaired = true;
private boolean isPaired = false; private boolean isPaired = false;
private int riftID = -1; //should not start at 0 private int riftID = -1; //should not start at 0
private int pairedRiftID = -1; private int pairedRiftID = -1;

View file

@ -0,0 +1,18 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.zixiken.dimdoors.shared.tileentities;
/**
*
* @author Robijnvogel
*/
public class TileEntityDimDoorChaos extends TileEntityDimDoor {
public TileEntityDimDoorChaos() {
canRiftBePaired = true;
}
}

View file

@ -0,0 +1,18 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.zixiken.dimdoors.shared.tileentities;
/**
*
* @author Robijnvogel
*/
public class TileEntityDimDoorPersonal extends TileEntityDimDoor {
public TileEntityDimDoorPersonal() {
canRiftBePaired = true;
}
}

View file

@ -35,9 +35,9 @@ public class Schematic {
private static final String[] NEWDIMDOORBLOCKNAMES = new String[]{ private static final String[] NEWDIMDOORBLOCKNAMES = new String[]{
"blockDimDoor", "blockDimDoor",
"blockDimWall", //I think [type=fabric] is the default blockstate "blockDimWall", //[type=fabric] is the default blockstate
"blockDimDoorTransient", "blockDimDoorTransient",
"blockDimDoorWarp"}; //@todo make these lists complete, possibly with specific blockstate as well? "blockDimDoorWarp"};
int version = Integer.parseInt("1"); //@todo set in build.gradle ${spongeSchematicVersion} int version = Integer.parseInt("1"); //@todo set in build.gradle ${spongeSchematicVersion}
String author = "DimDoors"; //@todo set in build.gradle ${modID} String author = "DimDoors"; //@todo set in build.gradle ${modID}
@ -121,7 +121,7 @@ public class Schematic {
blockstate = getBlockStateWithProperties(block, properties); blockstate = getBlockStateWithProperties(block, properties);
} else { } else {
} }
schematic.pallette.add(blockstate); schematic.pallette.add(blockstate); //@todo, can we assume that a schematic file always has all palette integers used from 0 to pallettemax-1?
} }
if (nbt.hasKey("PaletteMax")) { //PaletteMax is not required if (nbt.hasKey("PaletteMax")) { //PaletteMax is not required
schematic.paletteMax = nbt.getInteger("PaletteMax"); schematic.paletteMax = nbt.getInteger("PaletteMax");
@ -175,6 +175,7 @@ public class Schematic {
Map<Integer, String> paletteMap = new HashMap(); Map<Integer, String> paletteMap = new HashMap();
for (int i = 0; i < schematic.pallette.size(); i++) { for (int i = 0; i < schematic.pallette.size(); i++) {
IBlockState state = schematic.pallette.get(i); IBlockState state = schematic.pallette.get(i);
DimDoors.log(Schematic.class, "Saving BlockState: " + state.toString());
String blockStateString = getBlockStateStringFromState(state); String blockStateString = getBlockStateStringFromState(state);
paletteNBT.setInteger(blockStateString, i); paletteNBT.setInteger(blockStateString, i);
} }
@ -214,7 +215,7 @@ public class Schematic {
if (property != null) { if (property != null) {
Comparable<?> value = null; Comparable<?> value = null;
for (Comparable<?> object : property.getAllowedValues()) { for (Comparable<?> object : property.getAllowedValues()) {
if (object.equals(entry.getValue())) { if (object.toString().equals(entry.getValue())) {
value = object; value = object;
break; break;
} }
@ -228,19 +229,26 @@ public class Schematic {
} }
private static String getBlockStateStringFromState(IBlockState state) { private static String getBlockStateStringFromState(IBlockState state) {
String blockNameString = state.getBlock().getLocalizedName(); //@todo, check if this is the correct method Block block = state.getBlock();
String blockNameString = "" + Block.REGISTRY.getNameForObject(block);
String blockStateString = ""; String blockStateString = "";
String totalString; String totalString;
if (state.equals(state.getBlock().getDefaultState())) { IBlockState defaultState = block.getDefaultState();
if (state == defaultState) {
totalString = blockNameString; totalString = blockNameString;
} else { } else { //there is at least one property not equal to the default state's property
BlockStateContainer container = state.getBlock().getBlockState(); BlockStateContainer container = block.getBlockState();
container.getProperties(); for (IProperty property : container.getProperties()) { //for every property that is valid for this type of Block
for (IProperty property : container.getProperties()) { String defaultPropertyValue = defaultState.getProperties().get(property).toString();
String firstHalf = property.getName(); String thisPropertyValue = state.getProperties().get(property).toString();
String secondHalf = state.getProperties().get(property).toString(); if (defaultPropertyValue.equals(thisPropertyValue)) {
String propertyString = firstHalf + "=" + secondHalf; //do nothing
blockStateString += propertyString + ","; } else {
String firstHalf = property.getName();
String secondHalf = state.getProperties().get(property).toString();
String propertyString = firstHalf + "=" + secondHalf;
blockStateString += propertyString + ",";
}
} }
blockStateString = blockStateString.substring(0, blockStateString.length() - 1); //removes the last comma blockStateString = blockStateString.substring(0, blockStateString.length() - 1); //removes the last comma
totalString = blockNameString + "[" + blockStateString + "]"; totalString = blockNameString + "[" + blockStateString + "]";
@ -300,7 +308,7 @@ public class Schematic {
return tileEntities; return tileEntities;
} }
public static Schematic loadOldDimDoorSchematicFromNBT(NBTTagCompound nbt) { //@todo, maybe make this a separate class, so values can be final so they HAVE TO be set in a newly designed constructor public static Schematic loadOldDimDoorSchematicFromNBT(NBTTagCompound nbt) { //@todo, maybe make this a separate class, so values can be final so they HAVE TO be set in a newly designed constructor?
Schematic schematic = new Schematic(); Schematic schematic = new Schematic();
//schematic.version = 1; //already the default value //schematic.version = 1; //already the default value
@ -315,7 +323,8 @@ public class Schematic {
//schematic.offset = new int[]{0, 0, 0}; //already the default value //schematic.offset = new int[]{0, 0, 0}; //already the default value
NBTTagList paletteNBT = (NBTTagList) nbt.getTag("Palette"); NBTTagList paletteNBT = (NBTTagList) nbt.getTag("Palette");
for (int i = 0; i <= paletteNBT.tagCount(); i++) { for (int i = 0; i < paletteNBT.tagCount(); i++) {
DimDoors.log(Schematic.class, "reading pallete from schematic... i = " + i);
String blockString = paletteNBT.getStringTagAt(i); String blockString = paletteNBT.getStringTagAt(i);
boolean isAncientFabric = false; boolean isAncientFabric = false;
if (blockString.startsWith("dimdoors")) { if (blockString.startsWith("dimdoors")) {
@ -332,13 +341,12 @@ public class Schematic {
Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockString)); Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockString));
blockstate = block.getDefaultState(); blockstate = block.getDefaultState();
} else { } else {
Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation("blockDimWall")); Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation("dimdoors:blockDimWall"));
blockstate = getBlockStateWithProperties(block, new String[]{"type=ancient"}); blockstate = getBlockStateWithProperties(block, new String[]{"type=ancient"});
} }
schematic.pallette.add(blockstate); schematic.pallette.add(blockstate);
} }
//check whether or not this blockstate is already in the list
byte[] blockIntArray = nbt.getByteArray("Blocks"); byte[] blockIntArray = nbt.getByteArray("Blocks");
byte[] dataIntArray = nbt.getByteArray("Data"); byte[] dataIntArray = nbt.getByteArray("Data");
schematic.blockData = new int[schematic.width][schematic.height][schematic.length]; schematic.blockData = new int[schematic.width][schematic.height][schematic.length];
@ -347,19 +355,20 @@ public class Schematic {
for (int z = 0; z < schematic.length; z++) { for (int z = 0; z < schematic.length; z++) {
int blockInt = blockIntArray[x + z * schematic.width + y * schematic.width * schematic.length]; //according to the documentation on https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-1.md int blockInt = blockIntArray[x + z * schematic.width + y * schematic.width * schematic.length]; //according to the documentation on https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-1.md
int metadata = dataIntArray[x + z * schematic.width + y * schematic.width * schematic.length]; //according to the documentation on https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-1.md int metadata = dataIntArray[x + z * schematic.width + y * schematic.width * schematic.length]; //according to the documentation on https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-1.md
if (metadata != 0) {
IBlockState basesState = schematic.pallette.get(blockInt); //this is needed for the various "types" that a block can have IBlockState baseState = schematic.pallette.get(blockInt); //this is the default blockstate except for ancient fabric
IBlockState additionalState = basesState.getBlock().getStateFromMeta(metadata); if (baseState == baseState.getBlock().getDefaultState()) { //should only be false if {@code baseState} is ancient fabric
for (IProperty property : basesState.getProperties().keySet()) { IBlockState additionalState = baseState.getBlock().getStateFromMeta(metadata);
Comparable value = basesState.getProperties().get(property); if (schematic.pallette.contains(additionalState)) { //check whether or not this blockstate is already in the list
additionalState = additionalState.withProperty(property, value);
}
if (schematic.pallette.contains(additionalState)) {
blockInt = schematic.pallette.indexOf(additionalState); blockInt = schematic.pallette.indexOf(additionalState);
} else { } else {
schematic.pallette.add(additionalState); schematic.pallette.add(additionalState);
DimDoors.log(Schematic.class, "New blockstate detected. Original blockInt = " + blockInt + " and baseState is " + baseState.toString());
blockInt = schematic.pallette.size() - 1; blockInt = schematic.pallette.size() - 1;
} }
} else { //if this is ancient fabric
//DimDoors.log(Schematic.class, "Non-default blockstate in palette detected. Original blockInt = " + blockInt + " and baseState is " + baseState.toString()); //@todo should only print a line on load of ancient fabric
blockInt = schematic.pallette.indexOf(baseState);
} }
schematic.blockData[x][y][z] = blockInt; schematic.blockData[x][y][z] = blockInt;
} }
@ -378,7 +387,7 @@ public class Schematic {
private static String convertOldDimDoorsBlockNameToNewDimDoorsBlockName(String dimdoorsBlockName) { private static String convertOldDimDoorsBlockNameToNewDimDoorsBlockName(String dimdoorsBlockName) {
if (OLDDIMDOORBLOCKNAMES.length != NEWDIMDOORBLOCKNAMES.length) { if (OLDDIMDOORBLOCKNAMES.length != NEWDIMDOORBLOCKNAMES.length) {
DimDoors.warn(Schematic.class, "The array of old dimdoors block names, somehow isn't the same length as the array of new names, therefore the dimdoors blocks in this schematic will not be loaded."); DimDoors.warn(Schematic.class, "The array of old dimdoors block names somehow isn't the same length as the array of new names, therefore the dimdoors blocks in this schematic will not be loaded. This is a bug in the DimDoors mod itself.");
return null; return null;
} }