forked from mirrors/NBTExplorer
Example updates
This commit is contained in:
parent
2b6dec51bf
commit
b7c53caa5e
13 changed files with 91 additions and 34 deletions
|
@ -36,7 +36,8 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Substrate">
|
||||
<Reference Include="Substrate, Version=1.3.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\bin\Release\NET2\Substrate.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using Substrate;
|
||||
using Substrate.Core;
|
||||
|
||||
// This example replaces all instances of one block ID with another in a world.
|
||||
// Substrate will handle all of the lower-level headaches that can pop up, such
|
||||
|
@ -24,11 +25,11 @@ namespace BlockReplace
|
|||
int after = Convert.ToInt32(args[2]);
|
||||
|
||||
// Open our world
|
||||
BetaWorld world = BetaWorld.Open(dest);
|
||||
NbtWorld world = NbtWorld.Open(dest);
|
||||
|
||||
// The chunk manager is more efficient than the block manager for
|
||||
// this purpose, since we'll inspect every block
|
||||
BetaChunkManager cm = world.GetChunkManager();
|
||||
IChunkManager cm = world.GetChunkManager();
|
||||
|
||||
foreach (ChunkRef chunk in cm) {
|
||||
// You could hardcode your dimensions, but maybe some day they
|
||||
|
@ -56,6 +57,8 @@ namespace BlockReplace
|
|||
|
||||
// Save the chunk
|
||||
cm.Save();
|
||||
|
||||
Console.WriteLine("Processed Chunk {0},{1}", chunk.X, chunk.Z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using Substrate;
|
||||
using Substrate.Core;
|
||||
using Substrate.Nbt;
|
||||
using System.IO;
|
||||
|
||||
// This example will convert worlds between alpha and beta format.
|
||||
// This will convert chunks to and from region format, and copy level.dat
|
||||
|
@ -14,7 +15,7 @@ namespace Convert
|
|||
static void Main (string[] args)
|
||||
{
|
||||
if (args.Length != 3) {
|
||||
Console.WriteLine("Usage: Convert <world> <dest> <a|b>");
|
||||
Console.WriteLine("Usage: Convert <world> <dest> <alpha|beta|anvil>");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -22,16 +23,17 @@ namespace Convert
|
|||
string dst = args[1];
|
||||
string srctype = args[2];
|
||||
|
||||
if (!Directory.Exists(dst))
|
||||
Directory.CreateDirectory(dst);
|
||||
|
||||
// Open source and destrination worlds depending on conversion type
|
||||
NbtWorld srcWorld;
|
||||
NbtWorld srcWorld = NbtWorld.Open(src);
|
||||
NbtWorld dstWorld;
|
||||
if (srctype == "a") {
|
||||
srcWorld = AlphaWorld.Open(src);
|
||||
dstWorld = BetaWorld.Create(dst);
|
||||
}
|
||||
else {
|
||||
srcWorld = BetaWorld.Open(src);
|
||||
dstWorld = AlphaWorld.Create(dst);
|
||||
switch (srctype) {
|
||||
case "alpha": dstWorld = AlphaWorld.Create(dst); break;
|
||||
case "beta": dstWorld = BetaWorld.Create(dst); break;
|
||||
case "anvil": dstWorld = AnvilWorld.Create(dst); break;
|
||||
default: throw new Exception("Invalid conversion type");
|
||||
}
|
||||
|
||||
// Grab chunk managers to copy chunks
|
||||
|
@ -41,16 +43,12 @@ namespace Convert
|
|||
// Copy each chunk from source to dest
|
||||
foreach (ChunkRef chunk in cmsrc) {
|
||||
cmdst.SetChunk(chunk.X, chunk.Z, chunk.GetChunkRef());
|
||||
Console.WriteLine("Copying chunk: {0}, {1}", chunk.X, chunk.Z);
|
||||
}
|
||||
|
||||
// Copy level data from source to dest
|
||||
dstWorld.Level.LoadTreeSafe(srcWorld.Level.BuildTree());
|
||||
|
||||
// If we're creating an alpha world, get rid of the version field
|
||||
if (srctype == "b") {
|
||||
dstWorld.Level.Version = 0;
|
||||
}
|
||||
|
||||
// Save level.dat
|
||||
dstWorld.Level.Save();
|
||||
}
|
||||
|
|
|
@ -26,11 +26,11 @@ namespace CustomBlocks
|
|||
string dest = args[0];
|
||||
|
||||
// Open our world
|
||||
BetaWorld world = BetaWorld.Open(dest);
|
||||
NbtWorld world = NbtWorld.Open(dest);
|
||||
|
||||
// The chunk manager is more efficient than the block manager for
|
||||
// this purpose, since we'll inspect every block
|
||||
BetaChunkManager cm = world.GetChunkManager();
|
||||
IChunkManager cm = world.GetChunkManager();
|
||||
|
||||
foreach (ChunkRef chunk in cm) {
|
||||
// You could hardcode your dimensions, but maybe some day they
|
||||
|
|
|
@ -51,7 +51,8 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Substrate">
|
||||
<Reference Include="Substrate, Version=1.3.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\bin\Release\NET2\Substrate.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
using System;
|
||||
using Substrate;
|
||||
using Substrate.Nbt;
|
||||
using Substrate.Core;
|
||||
using System.IO;
|
||||
|
||||
// FlatMap is an example of generating worlds from scratch with Substrate.
|
||||
// It will produce a completely flat, solid map with grass, dirt, stone,
|
||||
|
@ -12,19 +15,48 @@ namespace FlatMap
|
|||
{
|
||||
static void Main (string[] args)
|
||||
{
|
||||
string dest = "F:\\Minecraft\\test";
|
||||
if (args.Length < 2) {
|
||||
Console.WriteLine("Usage: flatmap <type> <target_dir>");
|
||||
Console.WriteLine("Available Types: alpha, beta, anvil");
|
||||
return;
|
||||
}
|
||||
|
||||
string dest = args[1];
|
||||
int xmin = -20;
|
||||
int xmax = 20;
|
||||
int zmin = -20;
|
||||
int zmaz = 20;
|
||||
|
||||
NbtVerifier.InvalidTagType += (e) =>
|
||||
{
|
||||
throw new Exception("Invalid Tag Type: " + e.TagName + " [" + e.Tag + "]");
|
||||
};
|
||||
NbtVerifier.InvalidTagValue += (e) =>
|
||||
{
|
||||
throw new Exception("Invalid Tag Value: " + e.TagName + " [" + e.Tag + "]");
|
||||
};
|
||||
NbtVerifier.MissingTag += (e) =>
|
||||
{
|
||||
throw new Exception("Missing Tag: " + e.TagName);
|
||||
};
|
||||
|
||||
if (!Directory.Exists(dest))
|
||||
Directory.CreateDirectory(dest);
|
||||
|
||||
// This will instantly create any necessary directory structure
|
||||
BetaWorld world = BetaWorld.Create(dest);
|
||||
BetaChunkManager cm = world.GetChunkManager();
|
||||
NbtWorld world;
|
||||
switch (args[0]) {
|
||||
case "alpha": world = AlphaWorld.Create(dest); break;
|
||||
case "beta": world = BetaWorld.Create(dest); break;
|
||||
case "anvil": world = AnvilWorld.Create(dest); break;
|
||||
default: throw new Exception("Invalid world type specified.");
|
||||
}
|
||||
|
||||
IChunkManager cm = world.GetChunkManager();
|
||||
|
||||
// We can set different world parameters
|
||||
world.Level.LevelName = "Flatlands";
|
||||
world.Level.Spawn = new SpawnPoint(20, 20, 70);
|
||||
world.Level.Spawn = new SpawnPoint(20, 70, 20);
|
||||
|
||||
// world.Level.SetDefaultPlayer();
|
||||
// We'll let MC create the player for us, but you could use the above
|
||||
|
@ -51,6 +83,7 @@ namespace FlatMap
|
|||
FlatChunk(chunk, 64);
|
||||
|
||||
// Reset and rebuild the lighting for the entire chunk at once
|
||||
chunk.Blocks.RebuildHeightMap();
|
||||
chunk.Blocks.RebuildBlockLight();
|
||||
chunk.Blocks.RebuildSkyLight();
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using Substrate;
|
||||
using Substrate.Core;
|
||||
|
||||
// This example will insert x amount of an item into a player's
|
||||
// inventory in an SMP server (where there is a player directory)
|
||||
|
@ -21,8 +22,8 @@ namespace GiveItem
|
|||
int count = Convert.ToInt32(args[3]);
|
||||
|
||||
// Open the world and grab its player manager
|
||||
BetaWorld world = BetaWorld.Open(dest);
|
||||
PlayerManager pm = world.GetPlayerManager();
|
||||
NbtWorld world = NbtWorld.Open(dest);
|
||||
IPlayerManager pm = world.GetPlayerManager();
|
||||
|
||||
// Check that the named player exists
|
||||
if (!pm.PlayerExists(player)) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using Substrate;
|
||||
using Substrate.TileEntities;
|
||||
using Substrate.Core;
|
||||
|
||||
// GoodyChest is an example that creates chests filled with random
|
||||
// items throughout the world, according to a probability of
|
||||
|
@ -30,8 +31,8 @@ namespace GoodyChest
|
|||
rand = new Random();
|
||||
|
||||
// Open our world
|
||||
BetaWorld world = BetaWorld.Open(dest);
|
||||
BetaChunkManager cm = world.GetChunkManager();
|
||||
NbtWorld world = NbtWorld.Open(dest);
|
||||
IChunkManager cm = world.GetChunkManager();
|
||||
|
||||
int added = 0;
|
||||
|
||||
|
|
|
@ -8,7 +8,13 @@ namespace Maze
|
|||
{
|
||||
static void Main (string[] args)
|
||||
{
|
||||
BetaWorld world = BetaWorld.Open("F:\\Minecraft\\test");
|
||||
if (args.Length < 1) {
|
||||
Console.WriteLine("You must specify a target directory");
|
||||
return;
|
||||
}
|
||||
string dest = args[0];
|
||||
|
||||
AnvilWorld world = AnvilWorld.Open("F:\\Minecraft\\test");
|
||||
BlockManager bm = world.GetBlockManager();
|
||||
|
||||
bm.AutoLight = false;
|
||||
|
@ -48,7 +54,7 @@ namespace Maze
|
|||
|
||||
Console.WriteLine("Relight Chunks");
|
||||
|
||||
BetaChunkManager cm = world.GetChunkManager();
|
||||
RegionChunkManager cm = world.GetChunkManager();
|
||||
cm.RelightDirtyChunks();
|
||||
|
||||
world.Save();
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace MoveSpawn
|
|||
int z = Convert.ToInt32(args[3]);
|
||||
|
||||
// Open our world
|
||||
BetaWorld world = BetaWorld.Open(dest);
|
||||
NbtWorld world = NbtWorld.Open(dest);
|
||||
|
||||
// Set the level's spawn
|
||||
// Note: Players do not have separate spawns by default
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Substrate;
|
||||
using Substrate.Core;
|
||||
|
||||
// This example is a tool to delete all entities of a given type (e.g., "pig")
|
||||
// on a map. It optionally can be restricted to boxed region in block coords.
|
||||
|
@ -35,8 +36,8 @@ namespace PurgeEntities
|
|||
}
|
||||
|
||||
// Load world
|
||||
BetaWorld world = BetaWorld.Open(dest);
|
||||
BetaChunkManager cm = world.GetChunkManager();
|
||||
NbtWorld world = NbtWorld.Open(dest);
|
||||
IChunkManager cm = world.GetChunkManager();
|
||||
|
||||
// Remove entities
|
||||
foreach (ChunkRef chunk in cm) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using Substrate;
|
||||
using Substrate.Core;
|
||||
using Substrate.Nbt;
|
||||
|
||||
// This example will reset and rebuild the lighting (heightmap, block light,
|
||||
// skylight) for all chunks in a map.
|
||||
|
@ -24,6 +25,16 @@ namespace Relight
|
|||
}
|
||||
string dest = args[0];
|
||||
|
||||
NbtVerifier.InvalidTagType += (e) => {
|
||||
throw new Exception("Invalid Tag Type: " + e.TagName + " [" + e.Tag + "]");
|
||||
};
|
||||
NbtVerifier.InvalidTagValue += (e) => {
|
||||
throw new Exception("Invalid Tag Value: " + e.TagName + " [" + e.Tag + "]");
|
||||
};
|
||||
NbtVerifier.MissingTag += (e) => {
|
||||
throw new Exception("Missing Tag: " + e.TagName);
|
||||
};
|
||||
|
||||
// Opening an NbtWorld will try to autodetect if a world is Alpha-style or Beta-style
|
||||
NbtWorld world = NbtWorld.Open(dest);
|
||||
|
||||
|
|
|
@ -51,7 +51,8 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Substrate">
|
||||
<Reference Include="Substrate, Version=1.3.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\bin\Release\NET2\Substrate.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
|
|
Loading…
Reference in a new issue