mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-27 07:11:04 -04:00
Old width/height/length/depth should be fields to not break old plugins (Thanks goodlyay), also fix /copy ignore to work with custom blocks and add /copy air ignore. (Thanks goodlyay)
This commit is contained in:
parent
6e64532ecb
commit
ae9ed7ba9e
@ -79,11 +79,11 @@ namespace MCGalaxy.Commands
|
||||
lvl.spawnx = temp.spawnx;
|
||||
lvl.spawny = temp.spawny;
|
||||
lvl.spawnz = temp.spawnz;
|
||||
|
||||
lvl.Length = temp.Length;
|
||||
lvl.Width = temp.Width;
|
||||
lvl.Height = temp.Height;
|
||||
|
||||
|
||||
lvl.Width = temp.Width; lvl.width = temp.Width;
|
||||
lvl.Height = temp.Height; lvl.depth = temp.Height;
|
||||
lvl.Length = temp.Length; lvl.length = temp.Length; lvl.height = temp.Length;
|
||||
|
||||
lvl.blocks = temp.blocks;
|
||||
lvl.setPhysics(0);
|
||||
lvl.ClearPhysics();
|
||||
|
@ -50,8 +50,8 @@ namespace MCGalaxy.Commands
|
||||
} else if (opt == "delete") {
|
||||
if (parts.Length != 2) { Help(p); return; }
|
||||
string path = "extra/savecopy/" + parts[1] + "/" + message + ".cpy";
|
||||
if (!File.Exists(path)) {
|
||||
Player.SendMessage(p, "No such copy exists"); return;
|
||||
if (!File.Exists(path)) {
|
||||
Player.SendMessage(p, "No such copy exists"); return;
|
||||
}
|
||||
|
||||
File.Delete(path);
|
||||
@ -75,20 +75,17 @@ namespace MCGalaxy.Commands
|
||||
void HandleOther(Player p, string opt, string[] parts) {
|
||||
CatchPos cpos = default(CatchPos);
|
||||
cpos.ignoreTypes = new List<byte>();
|
||||
p.copyoffset[0] = 0; p.copyoffset[1] = 0; p.copyoffset[2] = 0;
|
||||
cpos.extIgnoreTypes = new List<byte>();
|
||||
p.copyoffset[0] = 0; p.copyoffset[1] = 0; p.copyoffset[2] = 0;
|
||||
|
||||
if (opt == "cut") {
|
||||
cpos.type = 1;
|
||||
} else if (opt == "air") {
|
||||
cpos.type = 2;
|
||||
if (parts.Length > 1 && parts[1].ToLower() == "ignore")
|
||||
GetIgnoreBlocks(cpos, p, 2, parts);
|
||||
} else if (opt == "ignore") {
|
||||
for (int i = 1; i < parts.Length; i++ ) {
|
||||
string s = parts[i];
|
||||
if (Block.Byte(s) != Block.Zero) {
|
||||
cpos.ignoreTypes.Add(Block.Byte(s));
|
||||
Player.SendMessage(p, "Ignoring &b" + s);
|
||||
}
|
||||
}
|
||||
GetIgnoreBlocks(cpos, p, 1, parts);
|
||||
} else if (!String.IsNullOrEmpty(opt)) {
|
||||
Help(p); return;
|
||||
}
|
||||
@ -98,6 +95,19 @@ namespace MCGalaxy.Commands
|
||||
p.ClearBlockchange();
|
||||
p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
|
||||
}
|
||||
|
||||
void GetIgnoreBlocks(CatchPos cpos, Player p, int i, string[] parts) {
|
||||
for (; i < parts.Length; i++ ) {
|
||||
byte extType = 0;
|
||||
byte type = DrawCmd.GetBlock(p, parts[i], out extType);
|
||||
if (type == Block.Zero) continue;
|
||||
|
||||
if (type != Block.custom_block || extType == 0)
|
||||
cpos.ignoreTypes.Add(type);
|
||||
if (type == Block.custom_block)
|
||||
cpos.extIgnoreTypes.Add(extType);
|
||||
}
|
||||
}
|
||||
|
||||
void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type, byte extType) {
|
||||
RevertAndClearState(p, x, y, z);
|
||||
@ -117,7 +127,7 @@ namespace MCGalaxy.Commands
|
||||
ushort minZ = (ushort)Math.Min(z, cpos.z), maxX = (ushort)Math.Max(x, cpos.x);
|
||||
ushort maxY = (ushort)Math.Max(y, cpos.y), maxZ = (ushort)Math.Max(z, cpos.z);
|
||||
|
||||
CopyState state = new CopyState(minX, minY, minZ, maxX - minX + 1,
|
||||
CopyState state = new CopyState(minX, minY, minZ, maxX - minX + 1,
|
||||
maxY - minY + 1, maxZ - minZ + 1);
|
||||
state.SetOrigin(cpos.x, cpos.y, cpos.z);
|
||||
int totalAir = 0, index = 0;
|
||||
@ -127,15 +137,17 @@ namespace MCGalaxy.Commands
|
||||
for (ushort zz = minZ; zz <= maxZ; ++zz)
|
||||
for (ushort xx = minX; xx <= maxX; ++xx)
|
||||
{
|
||||
byte b = p.level.GetTile(xx, yy, zz);
|
||||
byte b = p.level.GetTile(xx, yy, zz), extB = 0;
|
||||
if (!Block.canPlace(p, b)) { index++; continue; }
|
||||
if (b == Block.custom_block)
|
||||
extB = p.level.GetExtTile(xx, yy, zz);
|
||||
bool ignore = cpos.ignoreTypes.Contains(b) || cpos.extIgnoreTypes.Contains(extB);
|
||||
|
||||
if (b == Block.air && cpos.type != 2 || cpos.ignoreTypes.Contains(b))
|
||||
if (b == Block.air && cpos.type != 2 || ignore)
|
||||
totalAir++;
|
||||
if (!cpos.ignoreTypes.Contains(b)) {
|
||||
if (!ignore) {
|
||||
state.Blocks[index] = b;
|
||||
if (b == Block.custom_block)
|
||||
state.ExtBlocks[index] = p.level.GetExtTile(xx, yy, zz);
|
||||
state.ExtBlocks[index] = extB;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
@ -176,8 +188,7 @@ namespace MCGalaxy.Commands
|
||||
|
||||
void SaveCopy(Player p, string file) {
|
||||
if (!Player.ValidName(file)) {
|
||||
Player.SendMessage(p, "Bad file name");
|
||||
return;
|
||||
Player.SendMessage(p, "Bad file name"); return;
|
||||
}
|
||||
|
||||
if (!Directory.Exists("extra/savecopy"))
|
||||
@ -198,13 +209,12 @@ namespace MCGalaxy.Commands
|
||||
Player.SendMessage(p, "Saved copy as " + file);
|
||||
}
|
||||
|
||||
void LoadCopy(Player p, string file) {
|
||||
void LoadCopy(Player p, string file) {
|
||||
string path = "extra/savecopy/" + p.name + "/" + file;
|
||||
bool existsNew = File.Exists(path + ".cpb");
|
||||
bool existsOld = File.Exists(path + ".cpy");
|
||||
if (!existsNew && !existsOld) {
|
||||
Player.SendMessage(p, "No such copy exists");
|
||||
return;
|
||||
Player.SendMessage(p, "No such copy exists"); return;
|
||||
}
|
||||
path = existsNew ? path + ".cpb" : path + ".cpy";
|
||||
|
||||
@ -221,10 +231,13 @@ namespace MCGalaxy.Commands
|
||||
Player.SendMessage(p, "Loaded copy as " + file);
|
||||
}
|
||||
|
||||
struct CatchPos { public ushort x, y, z; public int type; public List<byte> ignoreTypes; }
|
||||
struct CatchPos {
|
||||
public ushort x, y, z;
|
||||
public int type;
|
||||
public List<byte> ignoreTypes, extIgnoreTypes;
|
||||
}
|
||||
|
||||
public override void Help(Player p)
|
||||
{
|
||||
public override void Help(Player p) {
|
||||
Player.SendMessage(p, "/copy - Copies the blocks in an area.");
|
||||
Player.SendMessage(p, "/copy save <save_name> - Saves what you have copied.");
|
||||
Player.SendMessage(p, "/copy load <load_name> - Loads what you have saved.");
|
||||
|
@ -108,7 +108,10 @@ namespace MCGalaxy.Levels.IO {
|
||||
|
||||
pointer += skip;
|
||||
}
|
||||
|
||||
lvl.width = lvl.Width;
|
||||
lvl.depth = lvl.Height;
|
||||
lvl.length = lvl.Length; lvl.height = lvl.Length;
|
||||
|
||||
lvl.spawnx = (ushort)(lvl.Width / 1.3);
|
||||
lvl.spawny = (ushort)(lvl.Height / 1.3);
|
||||
lvl.spawnz = (ushort)(lvl.Length / 1.3);
|
||||
|
@ -102,12 +102,12 @@ namespace MCGalaxy
|
||||
public bool ctfmode;
|
||||
public int currentUndo;
|
||||
public ushort Width, Height, Length;
|
||||
// NOTE: These are for legacy matching only, you should use upper case Width/Height/Length
|
||||
// as these correctly map Y to beinh Height
|
||||
[Obsolete] public ushort width { get { return Width; } }
|
||||
[Obsolete] public ushort height { get { return Length; } }
|
||||
[Obsolete] public ushort depth { get { return Height; } }
|
||||
[Obsolete] public ushort length { get { return Length; } }
|
||||
// NOTE: These are for legacy code only, you should use upper case Width/Height/Length
|
||||
// as these correctly map Y to being Height
|
||||
[Obsolete] public ushort width;
|
||||
[Obsolete] public ushort height;
|
||||
[Obsolete] public ushort depth;
|
||||
[Obsolete] public ushort length;
|
||||
|
||||
public int drown = 70;
|
||||
public bool edgeWater;
|
||||
@ -205,12 +205,12 @@ namespace MCGalaxy
|
||||
Width = x;
|
||||
Height = y;
|
||||
Length = z;
|
||||
if (Width < 16)
|
||||
Width = 16;
|
||||
if (Height < 16)
|
||||
Height = 16;
|
||||
if (Length < 16)
|
||||
Length = 16;
|
||||
if (Width < 16) Width = 16;
|
||||
if (Height < 16) Height = 16;
|
||||
if (Length < 16) Length = 16;
|
||||
width = Width;
|
||||
length = Height;
|
||||
height = Length; depth = Length;
|
||||
|
||||
CustomBlockDefs = new BlockDefinition[256];
|
||||
for (int i = 0; i < CustomBlockDefs.Length; i++)
|
||||
|
Loading…
x
Reference in New Issue
Block a user