Skip to content

Commit

Permalink
Add an initial new schematic command
Browse files Browse the repository at this point in the history
Incomplete
  • Loading branch information
mcmonkey4eva committed Jan 15, 2015
1 parent 6deffa6 commit 2b82f6a
Show file tree
Hide file tree
Showing 6 changed files with 591 additions and 4 deletions.
31 changes: 27 additions & 4 deletions src/main/java/net/aufdemrand/denizen/objects/dCuboid.java
Expand Up @@ -8,6 +8,7 @@
import java.util.regex.Pattern;

import net.aufdemrand.denizen.Settings;
import net.aufdemrand.denizen.utilities.blocks.BlockData;
import net.aufdemrand.denizencore.objects.*;
import net.aufdemrand.denizencore.objects.notable.Notable;
import net.aufdemrand.denizen.objects.notable.NotableManager;
Expand Down Expand Up @@ -152,8 +153,8 @@ public static boolean matches(String string) {


public static class LocationPair {
dLocation low;
dLocation high;
public dLocation low;
public dLocation high;
dLocation point_1;
dLocation point_2;
int x_distance;
Expand Down Expand Up @@ -213,7 +214,7 @@ public void generateDistances() {
//////////////////

// Location Pairs (low, high) that make up the dCuboid
List<LocationPair> pairs = new ArrayList<LocationPair>();
public List<LocationPair> pairs = new ArrayList<LocationPair>();

// Only put dMaterials in filter.
ArrayList<dObject> filter = new ArrayList<dObject>();
Expand Down Expand Up @@ -430,7 +431,7 @@ public List<dLocation> getBlocks_internal(List<dMaterial> materials) {
for (int z = 0; z != z_distance + 1; z++) {
for (int y = 0; y != y_distance + 1; y++) {
loc = new dLocation(loc_1.clone().add(x, y, z));
if (!filter.isEmpty()) {
if (!filter.isEmpty() && loc.getY() >= 0 && loc.getY() < 256) {
// Check filter
for (dObject material : filter) {
if (loc.getBlock().getType().name().equalsIgnoreCase(((dMaterial) material)
Expand Down Expand Up @@ -458,6 +459,28 @@ public List<dLocation> getBlocks_internal(List<dMaterial> materials) {
return list;
}

public void setBlocks_internal(List<BlockData> materials) {
dLocation loc;
int index = 0;
for (LocationPair pair : pairs) {
dLocation loc_1 = pair.low;
int y_distance = pair.y_distance;
int z_distance = pair.z_distance;
int x_distance = pair.x_distance;

for (int x = 0; x != x_distance + 1; x++) {
for (int z = 0; z != z_distance + 1; z++) {
for (int y = 0; y != y_distance + 1; y++) {
if (loc_1.getY() + y >= 0 && loc_1.getY() + y < 256) {
materials.get(index).setBlock(loc_1.clone().add(x, y, z).getBlock());
}
index++;
}
}
}
}
}

public List<dLocation> getBlockLocations() {
int max = Settings.blockTagsMaxBlocks();
dLocation loc;
Expand Down
Expand Up @@ -2226,6 +2226,56 @@ public void registerCoreMembers() {
"RUNTASK", "runtask [<name>] (instantly) (queue(:<name>)) (delay:<#>) (define:<element>|...)", 1);


// <--[command]
// @Name Schematic
// @Syntax schematic [create/load/unload/rotate/paste/save] [name:<name>] (angle:<#>) (<location>) (<cuboid>)
// @Group World
// @Required 2
// @Stable stable
// @Short Creates, loads, pastes, and saves schematics (Sets of blocks).
// @Author mcmonkey

// @Description
// Todo

// @Tags
// <schematic[<name>].height>
// <schematic[<name>].length>
// <schematic[<name>].width>
// <schematic[<name>].block[<location>]>
// <schematic[<name>].origin>
// <schematic[<name>].offset>
// <schematic[<name>].blocks>

// @Usage
// Use to create a new schematic from a cuboid and an origin location
// - schematic create name:MySchematic cu@<player.location.sub[5,5,5]>|<player.location.add[5,5,5]> <player.location>

// @Usage
// Use to load a schematic
// - schematic load name:MySchematic

// @Usage
// Use to unload a schematic
// - schematic unload name:MySchematic

// @Usage
// Use to rotate a loaded schematic
// - schematic rotate name:MySchematic angle:90

// @Usage
// Use to paste a loaded schematic
// - schematic paste name:MySchematic <player.location> noair

// @Usage
// Use to save a created schematic
// - schematic save name:MySchematic

// -->
registerCoreMember(SchematicCommand.class,
"SCHEMATIC", "schematic [create/load/unload/rotate/paste/save] [name:<name>] (angle:<#>) (<location>) (<cuboid>)", 2);


// <--[command]
// @Name Scoreboard
// @Syntax scoreboard ({add}/remove) (viewers:<player>|...) (lines:<player>/<text>|...) (id:<value>/{main}) (objective:<value>) (criteria:<criteria>/{dummy}) (score:<#>) (displayslot:<value>/{sidebar}/none)
Expand Down

0 comments on commit 2b82f6a

Please sign in to comment.