mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-24 05:03:34 -04:00
Fix /blockprops not updating blockprops, fixes #473. Also fixes /gb remove.
This commit is contained in:
parent
253cb65f85
commit
8befec23a8
@ -135,13 +135,22 @@ namespace MCGalaxy {
|
||||
}
|
||||
|
||||
public static void UpdateGlobalBlockProps() {
|
||||
for (int i = 0; i < Block.Count; i++) {
|
||||
GlobalProps[i] = Block.Props[i];
|
||||
GlobalProps[i + Block.Count] = BlockProps.MakeDefault();
|
||||
for (int i = 0; i < GlobalProps.Length; i++) {
|
||||
ExtBlock block = ExtBlock.FromIndex(i);
|
||||
GlobalProps[i] = BlockProps.MakeDefault();
|
||||
GlobalProps[i] = DefaultProps(block);
|
||||
}
|
||||
BlockProps.Load("global", GlobalProps, true);
|
||||
}
|
||||
|
||||
internal static BlockProps DefaultProps(ExtBlock block) {
|
||||
if (block.IsPhysicsType) return Block.Props[block.Index];
|
||||
|
||||
if (block.IsCustomType || GlobalDefs[block.BlockID] != null)
|
||||
return GlobalProps[block.Index];
|
||||
return Block.Props[block.Index];
|
||||
}
|
||||
|
||||
static void UpdateLoadedLevels(BlockDefinition[] oldGlobalDefs) {
|
||||
Level[] loaded = LevelInfo.Loaded.Items;
|
||||
foreach (Level lvl in loaded) {
|
||||
@ -158,7 +167,7 @@ namespace MCGalaxy {
|
||||
public static void Add(BlockDefinition def, BlockDefinition[] defs, Level level) {
|
||||
byte raw = def.BlockID;
|
||||
bool global = defs == GlobalDefs;
|
||||
if (global) UpdateGlobalCustom(def);
|
||||
if (global) UpdateGlobalCustom(raw, def);
|
||||
|
||||
defs[raw] = def;
|
||||
if (global) Block.SetDefaultNames();
|
||||
@ -180,7 +189,7 @@ namespace MCGalaxy {
|
||||
public static void Remove(BlockDefinition def, BlockDefinition[] defs, Level level) {
|
||||
byte raw = def.BlockID;
|
||||
bool global = defs == GlobalDefs;
|
||||
if (global) UpdateGlobalCustom(def);
|
||||
if (global) UpdateGlobalCustom(raw, null);
|
||||
|
||||
defs[raw] = null;
|
||||
if (global) Block.SetDefaultNames();
|
||||
@ -197,10 +206,8 @@ namespace MCGalaxy {
|
||||
Save(global, level);
|
||||
}
|
||||
|
||||
static void UpdateGlobalCustom(BlockDefinition def) {
|
||||
byte raw = def.BlockID;
|
||||
Level[] loaded = LevelInfo.Loaded.Items;
|
||||
|
||||
static void UpdateGlobalCustom(byte raw, BlockDefinition def) {
|
||||
Level[] loaded = LevelInfo.Loaded.Items;
|
||||
foreach (Level lvl in loaded) {
|
||||
if (lvl.CustomBlockDefs[raw] != GlobalDefs[raw]) continue;
|
||||
lvl.UpdateCustomBlock(raw, def);
|
||||
|
@ -477,9 +477,9 @@ namespace MCGalaxy.Commands.CPE {
|
||||
string scope = global ? "global" : "level";
|
||||
Player.Message(p, "Created a new " + scope + " custom block " + def.Name + "(" + def.BlockID + ")");
|
||||
|
||||
block = ExtBlock.FromRaw(def.BlockID);
|
||||
UpdateBlockProps(global, p, block, props);
|
||||
block = ExtBlock.FromRaw(def.BlockID);
|
||||
BlockDefinition.Add(def, defs, p == null ? null : p.level);
|
||||
UpdateBlockProps(global, p, block, props);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -568,36 +568,39 @@ namespace MCGalaxy.Commands.CPE {
|
||||
static void UpdateBlockProps(bool global, Player p, ExtBlock block, BlockProps props) {
|
||||
if (!global) {
|
||||
p.level.BlockProps[block.Index] = props;
|
||||
p.level.UpdateBlockHandler(block);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
BlockDefinition.GlobalProps[block.Index] = props;
|
||||
|
||||
Level[] loaded = LevelInfo.Loaded.Items;
|
||||
byte raw = block.BlockID;
|
||||
byte raw = block.RawID;
|
||||
|
||||
foreach (Level lvl in loaded) {
|
||||
if (lvl.CustomBlockDefs[raw] != BlockDefinition.GlobalDefs[raw]) continue;
|
||||
if (lvl.CustomBlockDefs[raw] != BlockDefinition.GlobalDefs[raw]) continue;
|
||||
lvl.BlockProps[block.Index] = props;
|
||||
lvl.UpdateBlockHandler(block);
|
||||
}
|
||||
}
|
||||
|
||||
static void RemoveBlockProps(bool global, ExtBlock block, Player p) {
|
||||
// Level block reverts to using global block
|
||||
if (!global) {
|
||||
p.level.BlockProps[block.Index] = BlockDefinition.GlobalProps[block.Index];
|
||||
p.level.BlockProps[block.Index] = BlockDefinition.DefaultProps(block);
|
||||
p.level.UpdateBlockHandler(block);
|
||||
return;
|
||||
}
|
||||
|
||||
if (block.BlockID < Block.CpeCount) {
|
||||
BlockDefinition.GlobalProps[block.Index] = Block.Props[block.Index];
|
||||
} else {
|
||||
BlockDefinition.GlobalProps[block.Index] = BlockProps.MakeDefault();
|
||||
}
|
||||
|
||||
BlockProps props = BlockProps.MakeDefault();
|
||||
BlockDefinition.GlobalProps[block.Index] = props;
|
||||
Level[] loaded = LevelInfo.Loaded.Items;
|
||||
byte raw = block.BlockID;
|
||||
byte raw = block.RawID;
|
||||
if (!block.IsCustomType) props = Block.Props[raw];
|
||||
|
||||
foreach (Level lvl in loaded) {
|
||||
if (lvl.CustomBlockDefs[raw] != BlockDefinition.GlobalDefs[raw]) continue;
|
||||
lvl.BlockProps[block.Index] = BlockDefinition.GlobalProps[block.Index];
|
||||
lvl.UpdateBlockHandler(block);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -192,14 +192,16 @@ namespace MCGalaxy.Commands.World {
|
||||
|
||||
|
||||
static void OnPropsChanged(BlockProps[] scope, Level level, ExtBlock block) {
|
||||
scope[block.Index].Changed = true;
|
||||
int idx = block.Index;
|
||||
scope[idx].Changed = true;
|
||||
|
||||
if (scope == Block.Props) {
|
||||
BlockProps.Save("core", scope, i=> true);
|
||||
BlockProps.Save("core", scope, i => true);
|
||||
Level[] loaded = LevelInfo.Loaded.Items;
|
||||
BlockDefinition.GlobalProps[idx] = BlockDefinition.DefaultProps(block);
|
||||
|
||||
foreach (Level lvl in loaded) {
|
||||
lvl.BlockProps[block.Index] = Block.Props[block.Index];
|
||||
lvl.BlockProps[idx] = BlockDefinition.GlobalProps[idx];
|
||||
lvl.UpdateBlockHandler(block);
|
||||
}
|
||||
} else if (scope == BlockDefinition.GlobalProps) {
|
||||
@ -208,8 +210,8 @@ namespace MCGalaxy.Commands.World {
|
||||
|
||||
byte raw = block.RawID;
|
||||
foreach (Level lvl in loaded) {
|
||||
if (lvl.CustomBlockDefs[raw] != BlockDefinition.GlobalDefs[raw]) continue;
|
||||
lvl.BlockProps[block.Index] = BlockDefinition.GlobalProps[block.Index];
|
||||
if (lvl.CustomBlockDefs[raw] != BlockDefinition.GlobalDefs[raw]) continue;
|
||||
lvl.BlockProps[idx] = BlockDefinition.GlobalProps[idx];
|
||||
lvl.UpdateBlockHandler(block);
|
||||
}
|
||||
} else {
|
||||
|
@ -53,9 +53,8 @@ namespace MCGalaxy {
|
||||
|
||||
for (int i = 0; i < CustomBlockDefs.Length; i++)
|
||||
CustomBlockDefs[i] = BlockDefinition.GlobalDefs[i];
|
||||
for (int i = 0; i < BlockProps.Length; i++)
|
||||
BlockProps[i] = BlockDefinition.GlobalProps[i];
|
||||
|
||||
LoadCoreProps();
|
||||
for (int i = 0; i < blockAABBs.Length; i++) {
|
||||
ExtBlock block = ExtBlock.FromIndex(i);
|
||||
blockAABBs[i] = Block.BlockAABB(block, this);
|
||||
@ -470,10 +469,15 @@ namespace MCGalaxy {
|
||||
public ushort smallX, smallY, smallZ;
|
||||
}
|
||||
|
||||
public void UpdateBlockProps() {
|
||||
void LoadCoreProps() {
|
||||
for (int i = 0; i < BlockProps.Length; i++) {
|
||||
BlockProps[i] = BlockDefinition.GlobalProps[i];
|
||||
}
|
||||
ExtBlock block = ExtBlock.FromIndex(i);
|
||||
BlockProps[i] = BlockDefinition.DefaultProps(block);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateBlockProps() {
|
||||
LoadCoreProps();
|
||||
MCGalaxy.Blocks.BlockProps.Load("lvl_" + MapName, BlockProps, true);
|
||||
}
|
||||
|
||||
@ -484,9 +488,9 @@ namespace MCGalaxy {
|
||||
}
|
||||
|
||||
public void UpdateBlockHandler(ExtBlock block) {
|
||||
bool nonSolid = CollideType(block) != MCGalaxy.Blocks.CollideType.Solid;
|
||||
|
||||
bool nonSolid = CollideType(block) != MCGalaxy.Blocks.CollideType.Solid;
|
||||
int i = block.Index;
|
||||
|
||||
deleteHandlers[i] = BlockBehaviour.GetDeleteHandler(block, BlockProps);
|
||||
placeHandlers[i] = BlockBehaviour.GetPlaceHandler(block, BlockProps);
|
||||
walkthroughHandlers[i] = BlockBehaviour.GetWalkthroughHandler(block, BlockProps, nonSolid);
|
||||
|
Loading…
x
Reference in New Issue
Block a user