Initial project scaffold for VS Vineyard mod

Sets up C# .NET 8 project with modinfo.json, ModSystem entry point,
full asset directory structure, .gitignore, and README.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Tim Riddell
2026-03-26 20:30:24 +13:00
commit 7033595a90
6 changed files with 184 additions and 0 deletions

19
.gitignore vendored Normal file
View File

@@ -0,0 +1,19 @@
# Build output
bin/
obj/
releases/
# IDE
.vs/
.vscode/
*.user
*.suo
.idea/
*.iml
# OS
.DS_Store
Thumbs.db
# Logs
*.log

72
README.md Normal file
View File

@@ -0,0 +1,72 @@
# VS Vineyard
A Vintage Story mod adding viticulture and winemaking mechanics.
## Features (Planned)
- Grape vine blocks with seasonal growth stages
- Grape harvesting and pressing into juice
- Fermentation and barrel aging system
- Multiple wine varieties with stat effects
- Wild grape vines in world generation
## Development Setup
### Prerequisites
- [.NET 8.0 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)
- Vintage Story installed
### Environment Variable
Set `VINTAGE_STORY` to your game installation path:
**Linux:**
```bash
export VINTAGE_STORY="$HOME/.local/share/vintagestory"
```
**Windows (PowerShell):**
```powershell
$env:VINTAGE_STORY = "$env:APPDATA\Vintagestory"
```
Add this to your shell profile so it persists.
### Build
```bash
dotnet build # Debug build
dotnet build -c Release # Release build + creates releases/vsvineyard-x.x.x.zip
```
### Install for Testing
Symlink or copy the `releases/*.zip` into your Mods folder:
**Linux:** `~/.config/VintagestoryData/Mods/`
**Windows:** `%APPDATA%\VintagestoryData\Mods\`
## Project Structure
```
VSVineyard/
├── src/ C# source files
├── resources/
│ ├── modinfo.json Mod metadata
│ └── assets/
│ └── vsvineyard/
│ ├── blocktypes/ Block JSON definitions
│ ├── itemtypes/ Item JSON definitions
│ ├── textures/ PNG textures
│ ├── shapes/ 3D model JSON
│ ├── recipes/ Crafting/cooking recipes
│ ├── worldgen/ World gen patches
│ └── lang/ Localization strings
├── releases/ Built mod zips (git-ignored)
└── VSVineyard.csproj
```
## Contributing
This is a group project — feel free to open issues or PRs!

39
VSVineyard.csproj Normal file
View File

@@ -0,0 +1,39 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AssemblyName>VSVineyard</AssemblyName>
<RootNamespace>VSVineyard</RootNamespace>
<Version>0.1.0</Version>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<!-- Reference the Vintage Story API DLLs from the game installation directory.
Set the VINTAGE_STORY environment variable to your game install path.
Linux default: ~/.local/share/vintagestory
Windows default: C:\Users\<you>\AppData\Roaming\VintagestoryData -->
<ItemGroup>
<Reference Include="VintagestoryAPI">
<HintPath>$(VINTAGE_STORY)/VintagestoryAPI.dll</HintPath>
<Private>false</Private>
</Reference>
<Reference Include="VSSurvivalMod">
<HintPath>$(VINTAGE_STORY)/Mods/VSSurvivalMod.dll</HintPath>
<Private>false</Private>
</Reference>
</ItemGroup>
<!-- Copy assets into build output for Release packaging -->
<ItemGroup>
<None Include="resources/**" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<!-- On Release build, zip everything into a distributable mod file -->
<Target Name="PackMod" AfterTargets="Build" Condition="'$(Configuration)' == 'Release'">
<ItemGroup>
<ModFiles Include="$(OutputPath)/**" Exclude="$(OutputPath)/*.pdb;$(OutputPath)/**/*.pdb" />
</ItemGroup>
<MakeDir Directories="releases" />
<ZipDirectory SourceDirectory="$(OutputPath)" DestinationFile="releases/vsvineyard-$(Version).zip" Overwrite="true" />
</Target>
</Project>

View File

@@ -0,0 +1,8 @@
{
"block-vsvineyard-grapevine-*": "Grape Vine",
"item-vsvineyard-grapes-*": "Grapes",
"item-vsvineyard-grapejuice": "Grape Juice",
"item-vsvineyard-wine-*": "Wine",
"block-vsvineyard-winebarrel": "Wine Barrel",
"block-vsvineyard-winepress": "Wine Press"
}

15
resources/modinfo.json Normal file
View File

@@ -0,0 +1,15 @@
{
"type": "code",
"modid": "vsvineyard",
"name": "VS Vineyard",
"version": "0.1.0",
"description": "Adds viticulture and winemaking to Vintage Story — grow grape vines, harvest grapes, press juice, ferment and age wine in barrels.",
"authors": ["VSVineyard Contributors"],
"website": "",
"dependencies": {
"game": "1.19.0"
},
"side": "Universal",
"requiredOnClient": true,
"requiredOnServer": true
}

View File

@@ -0,0 +1,31 @@
using Vintagestory.API.Common;
using Vintagestory.API.Server;
using Vintagestory.API.Client;
namespace VSVineyard;
public class VSVineyardModSystem : ModSystem
{
public override void Start(ICoreAPI api)
{
base.Start(api);
api.Logger.Notification("[VS Vineyard] Mod loaded successfully.");
// TODO: Register block/item/entity classes here as they are added
// api.RegisterBlockClass("GrapeVine", typeof(BlockGrapeVine));
// api.RegisterItemClass("Grapes", typeof(ItemGrapes));
// api.RegisterBlockEntityClass("WineBarrel", typeof(BlockEntityWineBarrel));
}
public override void StartServerSide(ICoreServerAPI api)
{
base.StartServerSide(api);
// TODO: Server-side logic (recipes, world gen, network handlers)
}
public override void StartClientSide(ICoreClientAPI api)
{
base.StartClientSide(api);
// TODO: Client-side logic (GUI, rendering, HUD)
}
}