diff --git a/MCGalaxy/Blocks/Block.cs b/MCGalaxy/Blocks/Block.cs index a58c1efd6..bd870cc5c 100644 --- a/MCGalaxy/Blocks/Block.cs +++ b/MCGalaxy/Blocks/Block.cs @@ -178,12 +178,17 @@ namespace MCGalaxy { public static void SetBlocks() { SetCoreProperties(); BlockProps.Load("core", Block.Props, false); + BlockDefinition.UpdateGlobalBlockProps(); BlockPerms.Load(); - + UpdateLoadedLevels(); + } + + public static void UpdateLoadedLevels() { Level[] loaded = LevelInfo.Loaded.Items; foreach (Level lvl in loaded) { + lvl.UpdateBlockProps(); lvl.UpdateBlockHandlers(); - } + } } [Obsolete("Use BlockPerms.CanModify()")] diff --git a/MCGalaxy/Blocks/BlockDefinitions.cs b/MCGalaxy/Blocks/BlockDefinitions.cs index c3ede934f..4e9422d8f 100644 --- a/MCGalaxy/Blocks/BlockDefinitions.cs +++ b/MCGalaxy/Blocks/BlockDefinitions.cs @@ -46,7 +46,7 @@ namespace MCGalaxy { public const string GlobalPath = "blockdefs/global.json", GlobalBackupPath = "blockdefs/global.json.bak"; public static BlockDefinition[] GlobalDefs; - public static Blocks.BlockProps[] GlobalProps; + public static BlockProps[] GlobalProps = new BlockProps[Block.Count * 2]; public BlockDefinition Copy() { BlockDefinition def = new BlockDefinition(); @@ -134,8 +134,7 @@ namespace MCGalaxy { if (oldDefs != null) UpdateLoadedLevels(oldDefs); } - public static void LoadGlobalProps() { - GlobalProps = new BlockProps[Block.Count * 2]; + public static void UpdateGlobalBlockProps() { for (int i = 0; i < Block.Count; i++) { GlobalProps[i] = Block.Props[i]; GlobalProps[i + Block.Count] = BlockProps.MakeDefault(); diff --git a/MCGalaxy/Levels/Level.cs b/MCGalaxy/Levels/Level.cs index afa1707e1..90ae2e5a3 100644 --- a/MCGalaxy/Levels/Level.cs +++ b/MCGalaxy/Levels/Level.cs @@ -382,7 +382,7 @@ namespace MCGalaxy { lvl.UpdateCustomBlock((byte)i, defs[i]); } - MCGalaxy.Blocks.BlockProps.Load("lvl_" + lvl.MapName, lvl.BlockProps, true); + lvl.UpdateBlockProps(); lvl.UpdateBlockHandlers(); } @@ -470,14 +470,21 @@ namespace MCGalaxy { public ushort smallX, smallY, smallZ; } - public void UpdateBlockHandlers() { + public void UpdateBlockProps() { + for (int i = 0; i < BlockProps.Length; i++) { + BlockProps[i] = BlockDefinition.GlobalProps[i]; + } + MCGalaxy.Blocks.BlockProps.Load("lvl_" + MapName, BlockProps, true); + } + + public void UpdateBlockHandlers() { for (int i = 0; i < BlockProps.Length; i++) { UpdateBlockHandler(ExtBlock.FromIndex(i)); } } 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); diff --git a/MCGalaxy/Server/Server.cs b/MCGalaxy/Server/Server.cs index 14c3b0368..250a8ca35 100644 --- a/MCGalaxy/Server/Server.cs +++ b/MCGalaxy/Server/Server.cs @@ -203,7 +203,7 @@ namespace MCGalaxy { Command.InitAll(); CommandPerms.Load(); Block.SetBlocks(); - BlockDefinition.LoadGlobalProps(); + BlockDefinition.UpdateGlobalBlockProps(); Awards.Load(); Economy.Load(); WarpList.Global.Load(null);