Compare commits

..

No commits in common. "master" and "v1.0" have entirely different histories.
master ... v1.0

6 changed files with 83 additions and 122 deletions

View file

@ -1,4 +1,4 @@
using TechbloxModdingAPI.Blocks; using GamecraftModdingAPI.Blocks;
namespace GCMC namespace GCMC
{ {

View file

@ -1,19 +1,16 @@
[Dirt] [Dirt]
type=Cube type=DirtCube
color=Orange
darkness=5
[Grass] [Grass]
type=Cube type=GrassCube
color=Green
[Stone,Coal_ore,Iron_ore] [Stone,Coal_ore,Iron_ore]
type=Cube type=ConcreteCube
color=White color=White
darkness=5 darkness=5
[Leaves] [Leaves]
type=Cube type=AluminiumCube
color=Green color=Green
darkness=5 darkness=5
@ -21,16 +18,14 @@ darkness=5
ignore=true ignore=true
[Log] [Log]
type=Cube type=WoodCube
color=Orange
darkness=8
[Water] [Water]
type=Cube type=GlassCube
color=Blue color=Blue
[Sand] [Sand]
type=Cube type=AluminiumCube
color=Yellow color=Yellow
[Long_grass] [Long_grass]
@ -40,11 +35,11 @@ type=Flower1
type=Flower2 type=Flower2
[Gravel] [Gravel]
type=Cube type=ConcreteCube
color=White color=White
darkness=7 darkness=7
[Clay] [Clay]
type=Cube type=ConcreteCube
color=White color=White
darkness=4 darkness=4

View file

@ -6,69 +6,69 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="ILMerge" Version="3.0.41" /> <PackageReference Include="ILMerge" Version="3.0.29" />
<PackageReference Include="ini-parser" Version="2.5.2" /> <PackageReference Include="ini-parser" Version="2.5.2" />
<PackageReference Include="Lib.Harmony" Version="2.0.4" /> <PackageReference Include="Lib.Harmony" Version="2.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="BlockEntityFactory, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\Gamecraft_Data\Managed\BlockEntityFactory.dll</HintPath>
</Reference>
<Reference Include="CommandLine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="CommandLine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\CommandLine.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\CommandLine.dll</HintPath>
</Reference> </Reference>
<Reference Include="DataLoader, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="DataLoader, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\DataLoader.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\DataLoader.dll</HintPath>
</Reference> </Reference>
<Reference Include="Svelto.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="GamecraftModdingAPI">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\Svelto.Common.dll</HintPath> <HintPath>..\..\GamecraftModdingAPI\GamecraftModdingAPI\bin\Debug\net472\GamecraftModdingAPI.dll</HintPath>
</Reference> </Reference>
<Reference Include="Svelto.Tasks, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="IllusionPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\Svelto.Tasks.dll</HintPath> <HintPath>IllusionPlugin.dll</HintPath>
</Reference>
<Reference Include="TechbloxModdingAPI">
<HintPath>..\..\ref\Plugins\TechbloxModdingAPI.dll</HintPath>
</Reference>
<Reference Include="IllusionPlugin">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\IllusionPlugin.dll</HintPath>
<!-- <Private>False</Private> Need to copy for ILMerge --> <!-- <Private>False</Private> Need to copy for ILMerge -->
</Reference> </Reference>
<Reference Include="Newtonsoft.Json"> <Reference Include="Newtonsoft.Json">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\Newtonsoft.Json.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Blocks, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="RobocraftX.Blocks, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\RobocraftX.Blocks.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Blocks.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Character, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="RobocraftX.Character, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\RobocraftX.Character.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Character.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="RobocraftX.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\RobocraftX.Common.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Common.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.GUI, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="RobocraftX.GUI, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\RobocraftX.GUI.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.GUI.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.Input, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="RobocraftX.Input, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\RobocraftX.Input.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.Input.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.MachineEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="RobocraftX.MachineEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\RobocraftX.MachineEditor.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.MachineEditor.dll</HintPath>
</Reference> </Reference>
<Reference Include="RobocraftX.StateSync, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="RobocraftX.StateSync, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\RobocraftX.StateSync.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\RobocraftX.StateSync.dll</HintPath>
</Reference>
<Reference Include="Svelto.Common_3, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>D:\Games\SteamLibrary\steamapps\common\RobocraftX\Gamecraft_Data\Managed\Svelto.Common_3.dll</HintPath>
</Reference> </Reference>
<Reference Include="Svelto.ECS, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="Svelto.ECS, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\Svelto.ECS.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Svelto.ECS.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Entities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="Unity.Entities, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\Unity.Entities.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Entities.dll</HintPath>
</Reference> </Reference>
<Reference Include="Unity.Mathematics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="Unity.Mathematics, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\Unity.Mathematics.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\Unity.Mathematics.dll</HintPath>
</Reference> </Reference>
<Reference Include="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\UnityEngine.CoreModule.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
</Reference> </Reference>
<Reference Include="uREPL, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"> <Reference Include="uREPL, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\uREPL.dll</HintPath> <HintPath>..\..\ref\Gamecraft_Data\Managed\uREPL.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
@ -79,13 +79,9 @@
</ItemGroup> </ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" /> <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<!-- <Target Name="AfterBuild"> <Target Name="AfterBuild">
<!- the ILMergePath property points to the location of ILMerge.exe console application -> <!-- the ILMergePath property points to the location of ILMerge.exe console application -->
<Exec Command="$(ILMergeConsolePath) /ndebug /out:bin\Debug\net472\GCMC.dll bin\$(Configuration)\net472\GCMC.dll bin\$(Configuration)\net472\INIFileParser.dll" /> <Exec Command="$(ILMergeConsolePath) /ndebug /out:bin\Debug\net472\GCMC.dll bin\$(Configuration)\net472\GCMC.dll bin\$(Configuration)\net472\INIFileParser.dll" />
</Target> -->
<Target Name="CopyToPlugins" AfterTargets="AfterBuild">
<Copy SourceFiles="$(MSBuildProjectDirectory)\$(OutputPath)\GCMC.dll" DestinationFolder="$(MSBuildProjectDirectory)\..\..\ref\Plugins" />
</Target> </Target>
</Project> </Project>

View file

@ -1,34 +1,26 @@
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using GamecraftModdingAPI;
using GamecraftModdingAPI.Blocks;
using GamecraftModdingAPI.Commands;
using IllusionPlugin; using IllusionPlugin;
using Newtonsoft.Json; using Newtonsoft.Json;
using Svelto.Tasks;
using Svelto.Tasks.ExtraLean;
using TechbloxModdingAPI;
using TechbloxModdingAPI.App;
using TechbloxModdingAPI.Blocks;
using TechbloxModdingAPI.Commands;
using TechbloxModdingAPI.Tasks;
using TechbloxModdingAPI.Utility;
using Unity.Mathematics; using Unity.Mathematics;
using UnityEngine; using UnityEngine;
using uREPL; using uREPL;
namespace GCMC namespace GCMC
{ {
public class GCMCPlugin : IEnhancedPlugin public class GCMCPlugin : IPlugin
{ {
public override string Name { get; } = Assembly.GetExecutingAssembly().GetName().Name; public string Name { get; } = "GCMC";
public override string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version.ToString(); public string Version { get; } = "v0.0.1";
private readonly Dictionary<string, BlockType> _mapping = new Dictionary<string, BlockType>(10); private readonly Dictionary<string, BlockType> mapping = new Dictionary<string, BlockType>(10);
private readonly List<(Block, SimBody, float3)> _simulationBlocks = new List<(Block, SimBody, float3)>(); private JsonSerializer _serializer = JsonSerializer.Create();
private readonly JsonSerializer _serializer = JsonSerializer.Create(); private JsonTraceWriter _traceWriter = new JsonTraceWriter();
private readonly JsonTraceWriter _traceWriter = new JsonTraceWriter();
private async void ImportWorld(string name) private async void ImportWorld(string name)
{ {
@ -37,7 +29,7 @@ namespace GCMC
Log.Output("Reading block mappings..."); Log.Output("Reading block mappings...");
var parser = new IniParser.FileIniDataParser(); var parser = new IniParser.FileIniDataParser();
var ini = parser.ReadFile("BlockTypes.ini"); var ini = parser.ReadFile("BlockTypes.ini");
_mapping.Clear(); mapping.Clear();
foreach (var section in ini.Sections) foreach (var section in ini.Sections)
{ {
var mcblocks = section.SectionName.Split(','); var mcblocks = section.SectionName.Split(',');
@ -79,11 +71,11 @@ namespace GCMC
foreach (var mcblock in mcblocks) foreach (var mcblock in mcblocks)
{ {
_mapping.Add(mcblock.ToUpper(), new BlockType mapping.Add(mcblock.ToUpper(), new BlockType
{ {
Material = mcblock.ToUpper(), Material = mcblock.ToUpper(),
Type = type, Type = type,
Color = new BlockColor(color, darkness) Color = new BlockColor {Color = color, Darkness = darkness}
}); });
} }
} }
@ -101,7 +93,7 @@ namespace GCMC
for (i = 0; i < blocksArray.Length; i++) for (i = 0; i < blocksArray.Length; i++)
{ {
var blocks = blocksArray[i]; var blocks = blocksArray[i];
if (!_mapping.TryGetValue(blocks.Material, out var type)) if (!mapping.TryGetValue(blocks.Material, out var type))
{ {
Console.WriteLine("Unknown block: " + blocks.Material); Console.WriteLine("Unknown block: " + blocks.Material);
continue; continue;
@ -109,15 +101,10 @@ namespace GCMC
if (type.Type == BlockIDs.Invalid) continue; if (type.Type == BlockIDs.Invalid) continue;
var block = new Block(type.Type, (blocks.Start + blocks.End) / 10 * 3 + new float3(5000, 0, 5000)) Block.PlaceNew(type.Type, (blocks.Start + blocks.End) / 10 * 3, color: type.Color.Color,
{ darkness: type.Color.Darkness, scale: (blocks.End - blocks.Start + 1) * 3,
Color = type.Color, rotation: float3.zero);
Scale = (blocks.End - blocks.Start + 1) * 3,
//Static = true - Doesn't seem to work
};
_simulationBlocks.Add((block, null, default));
} }
Game.Simulate += GameOnSimulate;
Log.Output(i + " blocks placed."); Log.Output(i + " blocks placed.");
} }
@ -127,52 +114,35 @@ namespace GCMC
Log.Error(e.Message); Log.Error(e.Message);
} }
} }
private void GameOnSimulate(object sender, GameEventArgs e) public void OnApplicationStart()
{ {
Game.Simulate -= GameOnSimulate; GamecraftModdingAPI.Main.Init();
GameWhileSimulating().RunOn(Scheduler.extraLeanRunner);
}
private IEnumerator GameWhileSimulating()
{
while (!GameState.IsSimulationMode())
yield return Yield.It;
for (var i = 0; i < _simulationBlocks.Count; i++)
{
var (block, body, _) = _simulationBlocks[i];
if (body is null) body = block.GetSimBody();
_simulationBlocks[i] = (block, body, body.Position);
}
while (GameState.IsSimulationMode())
{
foreach (var (_, body, pos) in _simulationBlocks)
{
body.Velocity = 0;
body.AngularVelocity = 0;
body.Position = pos;
body.Rotation = float3.zero;
}
yield return Yield.It;
}
}
public override void OnApplicationStart()
{
TechbloxModdingAPI.Main.Init();
CommandBuilder.Builder("importWorld", "Imports a Minecraft world.") CommandBuilder.Builder("importWorld", "Imports a Minecraft world.")
.Action<string>(ImportWorld).Build(); .Action<string>(ImportWorld).Build();
//_serializer.TraceWriter = _traceWriter; _serializer.TraceWriter = _traceWriter;
Debug.Log("GCMC loaded"); Debug.Log("GCMC loaded");
} }
public override void OnApplicationQuit() public void OnApplicationQuit()
{
}
public void OnLevelWasLoaded(int level)
{
}
public void OnLevelWasInitialized(int level)
{
}
public void OnUpdate()
{
}
public void OnFixedUpdate()
{ {
TechbloxModdingAPI.Main.Shutdown();
} }
} }
} }

BIN
GCMC/IllusionPlugin.dll Normal file

Binary file not shown.

View file

@ -1,18 +1,18 @@
# TBMC # GCMC
Minecraft world importer for Techblox. Minecraft world importer for Gamecraft.
## Usage ## Usage
You'll need a Bukkit/Spigot/Paper server first. Download the Bukkit plugin from [releases](https://git.exmods.org/NorbiPeti/GCMC/releases) and put it in the server's plugins directory. You'll need a Bukkit/Spigot/Paper server first. Download the Bukkit plugin from [releases](https://git.exmods.org/NorbiPeti/GCMC/releases) and put it in the server's plugins directory.
Then run `/export <x1> <y1> <z1> <x2> <y2> <z2>` on the server with the starting and ending coordinates of the area you want to export. Then run `/export <x1> <y1> <z1> <x2> <y2> <z2>` on the server with the starting and ending coordinates of the area you want to export.
Make sure to not select a large area as it can make Techblox lag. Make sure to not select a large area as it can make Gamecraft lag.
After that, copy the `result.json` from the server folder into Techblox's folder. After that, copy the `result.json` from the server folder into Gamecraft's folder.
Then, using the Techblox mod, do `importWorld "result.json"` in the GC console (opened by pressing the button near right shift by default) to import the Minecraft blocks. Then, using the Gamecraft mod, do `importWorld "result.json"` in the GC console (opened by pressing the button near right shift by default) to import the Minecraft blocks.
It can take a while to load the file and place the blocks, depending on how many are there to place. It can take a while to load the file and place the blocks, depending on how many are there to place.
Open the game log (and scroll to the end) to see the blocks that the mod doesn't know how to place in GC. You can add block mappings to the BlockTypes.ini file in Techblox's folder following the format (Minecraft block goes in brackets, the rest are Techblox block settings, color darkness goes 0-9). Open the game log (and scroll to the end) to see the blocks that the mod doesn't know how to place in GC. You can add block mappings to the BlockTypes.ini file in Gamecraft's folder following the format (Minecraft block goes in brackets, the rest are Gamecraft block settings, color darkness goes 0-9).
If you're up to contributing to this mod, please send this file to me (NorbiPeti) after adding more block types. If you're up to contributing to this mod, please send this file to me (NorbiPeti) after adding more block types.
I have big plans for this project. One day... I have big plans for this project. One day...