diff --git a/pom.xml b/pom.xml
index 7619118bd..1591a0d04 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,10 +25,6 @@
3.2.4
-
- org.polydev.gaea
- com.dfsek.terra.lib.gaea
-
org.apache.commons
com.dfsek.terra.lib.commons
@@ -96,6 +92,7 @@
org.polydev
gaea
1.10.93
+ provided
org.apache.commons
@@ -120,6 +117,12 @@
1.7
compile
+
+ com.googlecode.json-simple
+ json-simple
+ 1.1
+ provided
+
\ No newline at end of file
diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java
index f51e040cd..d657736c1 100644
--- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java
+++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java
@@ -1,20 +1,16 @@
package com.dfsek.terra.async;
import com.dfsek.terra.Terra;
-import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.genconfig.StructureConfig;
-import com.dfsek.terra.structure.GaeaStructure;
-import com.dfsek.terra.structure.StructureSpawnRequirement;
+import com.dfsek.terra.structure.Structure;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
-import org.polydev.gaea.generation.GenerationPhase;
-import org.polydev.gaea.profiler.ProfileFuture;
import java.util.Random;
@@ -91,8 +87,8 @@ public class AsyncStructureFinder implements Runnable {
Location spawn = target.getSpawn().getNearestSpawn(x, z, world.getSeed()).toLocation(world);
if(! TerraWorld.getWorld(world).getConfig().getBiome((UserDefinedBiome) grid.getBiome(spawn)).getStructures().contains(target)) return false;
Random r2 = new Random(spawn.hashCode());
- GaeaStructure struc = target.getStructure(r2);
- GaeaStructure.Rotation rotation = GaeaStructure.Rotation.fromDegrees(r2.nextInt(4) * 90);
+ Structure struc = target.getStructure(r2);
+ Structure.Rotation rotation = Structure.Rotation.fromDegrees(r2.nextInt(4) * 90);
for(int y = target.getSearchStart().get(r2); y > 0; y--) {
if(!target.getBound().isInRange(y)) return false;
spawn.setY(y);
diff --git a/src/main/java/com/dfsek/terra/command/structure/ExportCommand.java b/src/main/java/com/dfsek/terra/command/structure/ExportCommand.java
index 5cbc847d4..fa9b9320a 100644
--- a/src/main/java/com/dfsek/terra/command/structure/ExportCommand.java
+++ b/src/main/java/com/dfsek/terra/command/structure/ExportCommand.java
@@ -4,7 +4,7 @@ import com.dfsek.terra.Terra;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.util.structure.WorldEditUtil;
import com.dfsek.terra.command.type.PlayerCommand;
-import com.dfsek.terra.structure.GaeaStructure;
+import com.dfsek.terra.structure.Structure;
import com.dfsek.terra.structure.InitializationException;
import org.bukkit.Location;
import org.bukkit.command.Command;
@@ -24,9 +24,9 @@ public class ExportCommand extends PlayerCommand {
if(l == null) return true;
Location l1 = l[0];
Location l2 = l[1];
- GaeaStructure structure;
+ Structure structure;
try {
- structure = new GaeaStructure(l1, l2, args[0]);
+ structure = new Structure(l1, l2, args[0]);
} catch(InitializationException e) {
sender.sendMessage(e.getMessage());
return true;
diff --git a/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java b/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java
index 3b50c9526..071d0f148 100644
--- a/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java
+++ b/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java
@@ -4,7 +4,7 @@ import com.dfsek.terra.Terra;
import com.dfsek.terra.command.type.DebugCommand;
import com.dfsek.terra.command.type.PlayerCommand;
import com.dfsek.terra.config.lang.LangUtil;
-import com.dfsek.terra.structure.GaeaStructure;
+import com.dfsek.terra.structure.Structure;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -19,14 +19,14 @@ public class LoadCommand extends PlayerCommand implements DebugCommand {
@Override
public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
try {
- GaeaStructure.Rotation r;
+ Structure.Rotation r;
try {
- r =GaeaStructure.Rotation.fromDegrees(Integer.parseInt(args[1]));
+ r = Structure.Rotation.fromDegrees(Integer.parseInt(args[1]));
} catch(NumberFormatException e) {
LangUtil.send("command.structure.invalid-rotation", sender, args[1]);
return true;
}
- GaeaStructure struc = GaeaStructure.load(new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", args[0] + ".tstructure"));
+ Structure struc = Structure.load(new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", args[0] + ".tstructure"));
if("true".equals(args[2])) struc.paste(sender.getLocation(), r);
else struc.paste(sender.getLocation(), sender.getLocation().getChunk(), r);
//sender.sendMessage(String.valueOf(struc.checkSpawns(sender.getLocation(), r)));
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
index aaa792f98..2065200b9 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
@@ -8,24 +8,29 @@ import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException;
import com.dfsek.terra.population.StructurePopulator;
import com.dfsek.terra.procgen.GridSpawn;
-import com.dfsek.terra.structure.GaeaStructure;
+import com.dfsek.terra.structure.Structure;
+import org.apache.commons.io.FileUtils;
import org.bukkit.configuration.InvalidConfigurationException;
+import org.json.simple.parser.ParseException;
import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.math.Range;
+import org.polydev.gaea.structures.loot.LootTable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
public class StructureConfig extends TerraConfig {
- private final ProbabilityCollection structure = new ProbabilityCollection<>();
+ private final ProbabilityCollection structure = new ProbabilityCollection<>();
private final GridSpawn spawn;
private final String id;
private final Range searchStart;
private final Range bound;
+ private final Map loot = new HashMap<>();
StructurePopulator.SearchType type;
public StructureConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
@@ -36,7 +41,7 @@ public class StructureConfig extends TerraConfig {
for(Map.Entry e : Objects.requireNonNull(getConfigurationSection("files")).getValues(false).entrySet()) {
try {
File structureFile = new File(config.getDataFolder() + File.separator + "structures" + File.separator + "data", e.getKey() + ".tstructure");
- structure.add(GaeaStructure.load(structureFile), (Integer) e.getValue());
+ structure.add(Structure.load(structureFile), (Integer) e.getValue());
} catch(FileNotFoundException ex) {
Debug.stack(ex);
throw new NotFoundException("Structure File", e.getKey(), getID());
@@ -51,6 +56,24 @@ public class StructureConfig extends TerraConfig {
}
throw new NotFoundException("Structure", getString("file"), getID());
}
+ if(contains("loot")) {
+ for(Map.Entry e : Objects.requireNonNull(getConfigurationSection("loot")).getValues(false).entrySet()) {
+ File lootFile = new File(config.getDataFolder() + File.separator + "structures" + File.separator + "loot", e.getValue().toString() + ".json");
+ try {
+ loot.put(Integer.valueOf(e.getKey()), new LootTable(FileUtils.readFileToString(lootFile)));
+ Debug.info("Loaded loot table from " + lootFile.getAbsolutePath() + " with ID " + e.getKey());
+ } catch(FileNotFoundException ex) {
+ Debug.stack(ex);
+ throw new NotFoundException("Loot Table File", e.getKey(), getID());
+ } catch(ClassCastException | NumberFormatException ex) {
+ Debug.stack(ex);
+ throw new ConfigException("Unable to parse Structure Loot configuration! Check YAML syntax.", getID());
+ } catch(ParseException parseException) {
+ Debug.stack(parseException);
+ throw new ConfigException("Invalid loot table data in file: " + lootFile.getAbsolutePath(), getID());
+ }
+ }
+ }
spawn = new GridSpawn(getInt("spawn.width", 500), getInt("spawn.padding", 100));
searchStart = new Range(getInt("spawn.start.min", 72), getInt("spawn.start.max", 72));
@@ -67,7 +90,7 @@ public class StructureConfig extends TerraConfig {
return id;
}
- public GaeaStructure getStructure(Random r) {
+ public Structure getStructure(Random r) {
return structure.get(r);
}
@@ -82,4 +105,8 @@ public class StructureConfig extends TerraConfig {
public Range getSearchStart() {
return searchStart;
}
+
+ public LootTable getLoot(int id) {
+ return loot.get(id);
+ }
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java
index 5c823e899..3be8b3985 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/TreeConfig.java
@@ -6,7 +6,7 @@ import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException;
-import com.dfsek.terra.structure.GaeaStructure;
+import com.dfsek.terra.structure.Structure;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.configuration.InvalidConfigurationException;
@@ -17,7 +17,6 @@ import org.polydev.gaea.tree.Tree;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
-import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
@@ -27,7 +26,7 @@ public class TreeConfig extends TerraConfig implements Tree {
private final Set spawnable;
private final String id;
private final int yOffset;
- private final ProbabilityCollection structure = new ProbabilityCollection<>();
+ private final ProbabilityCollection structure = new ProbabilityCollection<>();
public TreeConfig(File file, ConfigPack config) throws IOException, InvalidConfigurationException {
super(file, config);
spawnable = ConfigUtil.toBlockData(getStringList("spawnable"), "spawnable", getID());
@@ -39,7 +38,7 @@ public class TreeConfig extends TerraConfig implements Tree {
for(Map.Entry e : Objects.requireNonNull(getConfigurationSection("files")).getValues(false).entrySet()) {
try {
File structureFile = new File(config.getDataFolder() + File.separator + "trees" + File.separator + "data", e.getKey() + ".tstructure");
- structure.add(GaeaStructure.load(structureFile), (Integer) e.getValue());
+ structure.add(Structure.load(structureFile), (Integer) e.getValue());
} catch(FileNotFoundException ex) {
Debug.stack(ex);
throw new NotFoundException("Tree Structure File", e.getKey(), getID());
@@ -65,8 +64,8 @@ public class TreeConfig extends TerraConfig implements Tree {
public boolean plant(Location location, Random random, boolean b, JavaPlugin javaPlugin) {
Location mut = location.clone().subtract(0, yOffset, 0);
if(!spawnable.contains(location.getBlock().getType())) return false;
- GaeaStructure struc = structure.get(random);
- GaeaStructure.Rotation rotation = GaeaStructure.Rotation.fromDegrees(random.nextInt(4) * 90);
+ Structure struc = structure.get(random);
+ Structure.Rotation rotation = Structure.Rotation.fromDegrees(random.nextInt(4) * 90);
if(!struc.checkSpawns(mut, rotation)) return false;
struc.paste(mut, rotation);
return true;
diff --git a/src/main/java/com/dfsek/terra/population/StructurePopulator.java b/src/main/java/com/dfsek/terra/population/StructurePopulator.java
index 4e8655aaa..ea5d8c4df 100644
--- a/src/main/java/com/dfsek/terra/population/StructurePopulator.java
+++ b/src/main/java/com/dfsek/terra/population/StructurePopulator.java
@@ -1,22 +1,25 @@
package com.dfsek.terra.population;
+import com.dfsek.terra.Debug;
import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.genconfig.StructureConfig;
-import com.dfsek.terra.structure.GaeaStructure;
-import com.dfsek.terra.structure.StructureSpawnRequirement;
+import com.dfsek.terra.procgen.math.Vector2;
+import com.dfsek.terra.structure.Structure;
+import com.dfsek.terra.structure.StructureContainedInventory;
+import com.dfsek.terra.util.structure.RotationUtil;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
+import org.bukkit.inventory.BlockInventoryHolder;
import org.jetbrains.annotations.NotNull;
-import org.polydev.gaea.generation.GenerationPhase;
import org.polydev.gaea.profiler.ProfileFuture;
+import org.polydev.gaea.structures.loot.LootTable;
-import java.util.Collections;
import java.util.Random;
public class StructurePopulator extends BlockPopulator {
@@ -34,8 +37,8 @@ public class StructurePopulator extends BlockPopulator {
Location spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()).toLocation(world);
if(!config.getBiome((UserDefinedBiome) grid.getBiome(spawn)).getStructures().contains(conf)) continue;
Random r2 = new Random(spawn.hashCode());
- GaeaStructure struc = conf.getStructure(r2);
- GaeaStructure.Rotation rotation = GaeaStructure.Rotation.fromDegrees(r2.nextInt(4) * 90);
+ Structure struc = conf.getStructure(r2);
+ Structure.Rotation rotation = Structure.Rotation.fromDegrees(r2.nextInt(4) * 90);
for(int y = conf.getSearchStart().get(r2); y > 0; y--) {
if(!conf.getBound().isInRange(y)) continue structure;
spawn.setY(y);
@@ -44,6 +47,19 @@ public class StructurePopulator extends BlockPopulator {
if(Math.abs((cx + 8) - spawn.getBlockX()) <= horizontal && Math.abs((cz + 8) - spawn.getBlockZ()) <= horizontal) {
try(ProfileFuture ignore = TerraProfiler.fromWorld(world).measure("StructurePasteTime")) {
struc.paste(spawn, chunk, rotation);
+ for(StructureContainedInventory i : struc.getInventories()) {
+ Debug.info("Attempting to populate loot: " + i.getUid());
+ Vector2 lootCoords = RotationUtil.getRotatedCoords(new Vector2(i.getX()-struc.getStructureInfo().getCenterX(), i.getZ()-struc.getStructureInfo().getCenterZ()), rotation);
+ Location inv = spawn.clone().add(lootCoords.getX(), 0, lootCoords.getZ());
+ Debug.info(spawn.toString() + " became: " + inv.toString());
+ Debug.info(Math.floorDiv(inv.getBlockX(), 16) + ":" + chunk.getX() + ", " + Math.floorDiv(inv.getBlockZ(), 16) + ":" + chunk.getZ() );
+ if(Math.floorDiv(inv.getBlockX(), 16) != chunk.getX() || Math.floorDiv(inv.getBlockZ(), 16) != chunk.getZ()) continue;
+ Debug.info("Target is in chunk.");
+ LootTable table = conf.getLoot(i.getUid());
+ if(table == null) continue;
+ Debug.info("Target has table assigned.");
+ table.fillInventory(((BlockInventoryHolder) inv.getBlock().getState()).getInventory(), random);
+ }
break;
}
}
diff --git a/src/main/java/com/dfsek/terra/structure/GaeaStructure.java b/src/main/java/com/dfsek/terra/structure/Structure.java
similarity index 88%
rename from src/main/java/com/dfsek/terra/structure/GaeaStructure.java
rename to src/main/java/com/dfsek/terra/structure/Structure.java
index 4ead74f01..0502cfc7b 100644
--- a/src/main/java/com/dfsek/terra/structure/GaeaStructure.java
+++ b/src/main/java/com/dfsek/terra/structure/Structure.java
@@ -2,7 +2,6 @@ package com.dfsek.terra.structure;
import com.dfsek.terra.Debug;
import com.dfsek.terra.procgen.math.Vector2;
-import com.dfsek.terra.util.structure.RotationUtil;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
@@ -10,6 +9,7 @@ import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
+import org.bukkit.block.Container;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Directional;
@@ -17,7 +17,8 @@ import org.bukkit.block.data.MultipleFacing;
import org.bukkit.block.data.Orientable;
import org.bukkit.block.data.Rail;
import org.bukkit.block.data.Rotatable;
-import org.bukkit.util.Vector;
+import org.bukkit.block.data.type.RedstoneWire;
+import org.bukkit.inventory.BlockInventoryHolder;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.math.Range;
@@ -30,26 +31,25 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
-import java.util.Set;
import java.util.UUID;
import java.util.function.Consumer;
import static com.dfsek.terra.util.structure.RotationUtil.*;
-public class GaeaStructure implements Serializable {
+public class Structure implements Serializable {
public static final long serialVersionUID = -6664585217063842035L;
private final StructureContainedBlock[][][] structure;
- private final GaeaStructureInfo structureInfo;
+ private final StructureInfo structureInfo;
private final String id;
private final UUID uuid;
private final HashSet spawns;
+ private final HashSet inventories;
@NotNull
- public static GaeaStructure load(@NotNull File f) throws IOException {
+ public static Structure load(@NotNull File f) throws IOException {
try {
return fromFile(f);
} catch(ClassNotFoundException e) {
@@ -57,11 +57,12 @@ public class GaeaStructure implements Serializable {
}
}
- public GaeaStructure(@NotNull Location l1, @NotNull Location l2, @NotNull String id) throws InitializationException {
+ public Structure(@NotNull Location l1, @NotNull Location l2, @NotNull String id) throws InitializationException {
int centerX = -1, centerZ = -1;
this.id = id;
this.uuid = UUID.randomUUID();
this.spawns = new HashSet<>();
+ this.inventories = new HashSet<>();
if(l1.getX() > l2.getX() || l1.getY() > l2.getY() || l1.getZ() > l2.getZ()) throw new IllegalArgumentException("Invalid locations provided!");
structure = new StructureContainedBlock[l2.getBlockX()-l1.getBlockX()+1][l2.getBlockZ()-l1.getBlockZ()+1][l2.getBlockY()-l1.getBlockY()+1];
for(int x = 0; x <= l2.getBlockX()-l1.getBlockX(); x++) {
@@ -96,13 +97,16 @@ public class GaeaStructure implements Serializable {
}
}
StructureContainedBlock block = new StructureContainedBlock(x, y, z, useState ? state : null, d, requirement);
+ if(state instanceof BlockInventoryHolder) {
+ inventories.add(new StructureContainedInventory(((BlockInventoryHolder) state).getInventory(), block));
+ }
if(!requirement.equals(StructureSpawnRequirement.BLANK)) spawns.add(block);
structure[x][z][y] = block;
}
}
}
if(centerX < 0 || centerZ < 0) throw new InitializationException("No structure center specified.");
- structureInfo = new GaeaStructureInfo(l2.getBlockX()-l1.getBlockX()+1, l2.getBlockY()-l1.getBlockY()+1, l2.getBlockZ()-l1.getBlockZ()+1, new Vector2(centerX, centerZ));
+ structureInfo = new StructureInfo(l2.getBlockX()-l1.getBlockX()+1, l2.getBlockY()-l1.getBlockY()+1, l2.getBlockZ()-l1.getBlockZ()+1, new Vector2(centerX, centerZ));
}
/**
@@ -110,7 +114,7 @@ public class GaeaStructure implements Serializable {
* @return Structure Info
*/
@NotNull
- public GaeaStructureInfo getStructureInfo() {
+ public StructureInfo getStructureInfo() {
return structureInfo;
}
@@ -131,7 +135,9 @@ public class GaeaStructure implements Serializable {
return true;
}
-
+ public HashSet getInventories() {
+ return inventories;
+ }
/**
* Paste structure at an origin location, confined to a single chunk.
@@ -181,10 +187,15 @@ public class GaeaStructure implements Serializable {
} else if(data instanceof Orientable) {
org.bukkit.Axis newAxis = getRotatedAxis(((Orientable) data).getAxis(), r);
((Orientable) data).setAxis(newAxis);
+ } else if(data instanceof RedstoneWire) {
+ RedstoneWire rData = (RedstoneWire) data;
+ for(BlockFace f : rData.getAllowedFaces()) {
+ rData.setFace(getRotatedFace(f, r), rData.getFace(f));
+ }
}
worldBlock.setBlockData(data, false);
if(block.getState() != null) {
- block.getState().getState(worldBlock.getState()).update();
+ block.getState().getState(worldBlock.getState()).update(true, false);
}
}
}
@@ -249,19 +260,19 @@ public class GaeaStructure implements Serializable {
* @throws ClassNotFoundException If structure data is invalid.
*/
@NotNull
- private static GaeaStructure fromFile(@NotNull File f) throws IOException, ClassNotFoundException {
+ private static Structure fromFile(@NotNull File f) throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
Object o = ois.readObject();
ois.close();
- return (GaeaStructure) o;
+ return (Structure) o;
}
@NotNull
- public static GaeaStructure fromStream(@NotNull InputStream f) throws IOException, ClassNotFoundException {
+ public static Structure fromStream(@NotNull InputStream f) throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(f);
Object o = ois.readObject();
ois.close();
- return (GaeaStructure) o;
+ return (Structure) o;
}
private static void toFile(@NotNull Serializable o, @NotNull File f) throws IOException {
diff --git a/src/main/java/com/dfsek/terra/structure/StructureContainedBlock.java b/src/main/java/com/dfsek/terra/structure/StructureContainedBlock.java
index 9e0d947bf..f20e1ea0e 100644
--- a/src/main/java/com/dfsek/terra/structure/StructureContainedBlock.java
+++ b/src/main/java/com/dfsek/terra/structure/StructureContainedBlock.java
@@ -3,7 +3,6 @@ package com.dfsek.terra.structure;
import com.dfsek.terra.structure.serialize.SerializableBlockData;
import com.dfsek.terra.structure.serialize.block.SerializableBlockState;
import com.dfsek.terra.structure.serialize.block.SerializableSign;
-import org.bukkit.Bukkit;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData;
diff --git a/src/main/java/com/dfsek/terra/structure/StructureContainedInventory.java b/src/main/java/com/dfsek/terra/structure/StructureContainedInventory.java
new file mode 100644
index 000000000..0a2aa7137
--- /dev/null
+++ b/src/main/java/com/dfsek/terra/structure/StructureContainedInventory.java
@@ -0,0 +1,39 @@
+package com.dfsek.terra.structure;
+
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+import java.io.Serializable;
+
+public class StructureContainedInventory implements Serializable {
+ public static final long serialVersionUID = -175339605585943678L;
+ private final int uid;
+ private final int x, y, z;
+ public StructureContainedInventory(Inventory orig, StructureContainedBlock link) {
+ ItemStack stack = orig.getItem(0);
+ x = link.getX();
+ y = link.getY();
+ z = link.getZ();
+ if(stack == null) {
+ uid = 0;
+ return;
+ }
+ uid = stack.getAmount();
+ }
+
+ public int getUid() {
+ return uid;
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public int getY() {
+ return y;
+ }
+
+ public int getZ() {
+ return z;
+ }
+}
diff --git a/src/main/java/com/dfsek/terra/structure/GaeaStructureInfo.java b/src/main/java/com/dfsek/terra/structure/StructureInfo.java
similarity index 87%
rename from src/main/java/com/dfsek/terra/structure/GaeaStructureInfo.java
rename to src/main/java/com/dfsek/terra/structure/StructureInfo.java
index 781ff7f02..1f373fc1a 100644
--- a/src/main/java/com/dfsek/terra/structure/GaeaStructureInfo.java
+++ b/src/main/java/com/dfsek/terra/structure/StructureInfo.java
@@ -5,14 +5,14 @@ import org.bukkit.util.Vector;
import java.io.Serializable;
-public class GaeaStructureInfo implements Serializable {
+public class StructureInfo implements Serializable {
public static final long serialVersionUID = -175639605885943678L;
private final int sizeX;
private final int sizeY;
private final int sizeZ;
private final int centerX;
private final int centerZ;
- public GaeaStructureInfo(int sizeX, int sizeY, int sizeZ, Vector2 center) {
+ public StructureInfo(int sizeX, int sizeY, int sizeZ, Vector2 center) {
this.sizeX = sizeX;
this.sizeY = sizeY;
this.sizeZ = sizeZ;
diff --git a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java
index f77f3fa30..df089662f 100644
--- a/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java
+++ b/src/main/java/com/dfsek/terra/util/structure/RotationUtil.java
@@ -1,12 +1,10 @@
package com.dfsek.terra.util.structure;
import com.dfsek.terra.procgen.math.Vector2;
-import com.dfsek.terra.structure.GaeaStructure;
+import com.dfsek.terra.structure.Structure;
import org.bukkit.block.BlockFace;
import org.bukkit.block.data.Rail;
-import java.util.Arrays;
-
public class RotationUtil {
/**
* Rotate and mirror a coordinate pair.
@@ -14,7 +12,7 @@ public class RotationUtil {
* @param r Rotation
* @return Rotated coordinate pair
*/
- public static Vector2 getRotatedCoords(Vector2 orig, GaeaStructure.Rotation r) {
+ public static Vector2 getRotatedCoords(Vector2 orig, Structure.Rotation r) {
Vector2 copy = orig.clone();
switch(r) {
case CW_90:
@@ -36,7 +34,7 @@ public class RotationUtil {
* @param r Rotation
* @return Rotated BlockFace
*/
- public static BlockFace getRotatedFace(BlockFace f, GaeaStructure.Rotation r) {
+ public static BlockFace getRotatedFace(BlockFace f, Structure.Rotation r) {
BlockFace n = f;
int rotateNum = r.getDegrees()/90;
int rn = faceRotation(f);
@@ -46,9 +44,9 @@ public class RotationUtil {
return n;
}
- public static org.bukkit.Axis getRotatedAxis(org.bukkit.Axis orig, GaeaStructure.Rotation r) {
+ public static org.bukkit.Axis getRotatedAxis(org.bukkit.Axis orig, Structure.Rotation r) {
org.bukkit.Axis other = orig;
- final boolean shouldSwitch = r.equals(GaeaStructure.Rotation.CW_90) || r.equals(GaeaStructure.Rotation.CCW_90);
+ final boolean shouldSwitch = r.equals(Structure.Rotation.CW_90) || r.equals(Structure.Rotation.CCW_90);
switch(orig) {
case X:
if(shouldSwitch) other = org.bukkit.Axis.Z;
@@ -67,7 +65,7 @@ public class RotationUtil {
* @param r Rotate
* @return Rotated/mirrored shape
*/
- public static Rail.Shape getRotatedRail(Rail.Shape orig, GaeaStructure.Rotation r) {
+ public static Rail.Shape getRotatedRail(Rail.Shape orig, Structure.Rotation r) {
switch(r) {
case CCW_90:
switch(orig) {
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 8cdccb56d..f5c603b50 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,4 +1,5 @@
name: Terra
+depend: [ "Gaea" ]
main: com.dfsek.terra.Terra
version: 1.0.0
load: STARTUP
diff --git a/src/main/resources/world.yml b/src/main/resources/world.yml
index e69de29bb..161ec2727 100644
--- a/src/main/resources/world.yml
+++ b/src/main/resources/world.yml
@@ -0,0 +1 @@
+config: DEFAULT
\ No newline at end of file