Ancien code projet

This commit is contained in:
KuroMento
2025-11-26 15:44:59 +01:00
commit e4ddf4c2df
133 changed files with 2566 additions and 0 deletions

675
.gitignore vendored Normal file
View File

@@ -0,0 +1,675 @@
# Created by https://www.toptal.com/developers/gitignore/api/csharp,visualstudio,visualstudiocode,rider
# Edit at https://www.toptal.com/developers/gitignore?templates=csharp,visualstudio,visualstudiocode,rider
### Csharp ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
### Rider ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### VisualStudioCode ###
!.vscode/*.code-snippets
# Local History for Visual Studio Code
# Built Visual Studio Code Extensions
*.vsix
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
### VisualStudio ###
# User-specific files
# User-specific files (MonoDevelop/Xamarin Studio)
# Mono auto generated files
# Build results
# Visual Studio 2015/2017 cache/options directory
# Uncomment if you have tasks that create the project's static files in wwwroot
# Visual Studio 2017 auto generated files
# MSTest test Results
# NUnit
# Build Results of an ATL Project
# Benchmark Results
# .NET Core
# ASP.NET Scaffolding
# StyleCop
# Files built by Visual Studio
# Chutzpah Test files
# Visual C++ cache files
# Visual Studio profiler
# Visual Studio Trace Files
# TFS 2012 Local Workspace
# Guidance Automation Toolkit
# ReSharper is a .NET coding add-in
# TeamCity is a build add-in
# DotCover is a Code Coverage Tool
# AxoCover is a Code Coverage Tool
# Coverlet is a free, cross platform Code Coverage Tool
# Visual Studio code coverage results
# NCrunch
# MightyMoose
# Web workbench (sass)
# Installshield output folder
# DocProject is a documentation generator add-in
# Click-Once directory
# Publish Web Output
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
# NuGet Packages
# NuGet Symbol Packages
# The packages folder can be ignored because of Package Restore
# except build/, which is used as an MSBuild target.
# Uncomment if necessary however generally it will be regenerated when needed
# NuGet v3's project.json files produces more ignorable files
# Microsoft Azure Build Output
# Microsoft Azure Emulator
# Windows Store app package directories and files
# Visual Studio cache files
# files ending in .cache can be ignored
# but keep track of directories ending in .cache
# Others
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
# RIA/Silverlight projects
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
# SQL Server files
# Business Intelligence projects
# Microsoft Fakes
# GhostDoc plugin setting file
# Node.js Tools for Visual Studio
# Visual Studio 6 build log
# Visual Studio 6 workspace options file
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
# Visual Studio 6 technical files
# Visual Studio LightSwitch build output
# Paket dependency manager
# FAKE - F# Make
# CodeRush personal settings
# Python Tools for Visual Studio (PTVS)
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
# Telerik's JustMock configuration file
# BizTalk build output
# OpenCover UI analysis results
# Azure Stream Analytics local run output
# MSBuild Binary and Structured Log
# NVidia Nsight GPU debugger configuration file
# MFractors (Xamarin productivity tool) working folder
# Local History for Visual Studio
# Visual Studio History (VSHistory) files
# BeatPulse healthcheck temp database
# Backup folder for Package Reference Convert tool in Visual Studio 2017
# Ionide (cross platform F# VS Code tools) working folder
# Fody - auto-generated XML schema
# VS Code files for those working on multiple tools
# Local History for Visual Studio Code
# Windows Installer files from build outputs
# JetBrains Rider
### VisualStudio Patch ###
# Additional files built by Visual Studio
# End of https://www.toptal.com/developers/gitignore/api/csharp,visualstudio,visualstudiocode,rider

31
Automate.sln Normal file
View File

@@ -0,0 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33530.505
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automate", "Automate\Automate.csproj", "{55CD759F-F7AE-47BC-812E-474FD3CE693E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CakeBuild", "ZZCakeBuild\CakeBuild.csproj", "{81442847-D1B8-4499-BC9B-03FB65182FBE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{55CD759F-F7AE-47BC-812E-474FD3CE693E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55CD759F-F7AE-47BC-812E-474FD3CE693E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55CD759F-F7AE-47BC-812E-474FD3CE693E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{55CD759F-F7AE-47BC-812E-474FD3CE693E}.Release|Any CPU.Build.0 = Release|Any CPU
{81442847-D1B8-4499-BC9B-03FB65182FBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{81442847-D1B8-4499-BC9B-03FB65182FBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{81442847-D1B8-4499-BC9B-03FB65182FBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{81442847-D1B8-4499-BC9B-03FB65182FBE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {DA43A4CC-D6DC-4089-8B21-FD28C6F587BB}
EndGlobalSection
EndGlobal

65
Automate/Automate.csproj Normal file
View File

@@ -0,0 +1,65 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>bin\$(Configuration)\Mods\mod</OutputPath>
</PropertyGroup>
<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>
<Reference Include="VSEssentials">
<HintPath>$(VINTAGE_STORY)/Mods/VSEssentials.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="VSCreativeMod">
<HintPath>$(VINTAGE_STORY)/Mods/VSCreativeMod.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>$(VINTAGE_STORY)/Lib/Newtonsoft.Json.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="0Harmony">
<HintPath>$(VINTAGE_STORY)/Lib/0Harmony.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="VintagestoryLib">
<HintPath>$(VINTAGE_STORY)/VintagestoryLib.dll</HintPath>
<Private>false</Private>
</Reference>
<Reference Include="protobuf-net">
<HintPath>$(VINTAGE_STORY)/Lib/protobuf-net.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="cairo-sharp">
<HintPath>$(VINTAGE_STORY)/Lib/cairo-sharp.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.Data.Sqlite">
<HintPath>$(VINTAGE_STORY)/Lib/Microsoft.Data.Sqlite.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Content Include="assets\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Remove="assets\automate\blocktypes\boiler.json" />
<None Remove="assets\automate\blocktypes\water_chamber.json" />
<None Remove="assets\automate\textures\block\copper.png" />
<None Remove="assets\automate\textures\block\leaded.png" />
<Content Include="modinfo.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,95 @@
using Vintagestory.API.Client;
using Vintagestory.API.Common;
using Vintagestory.API.Config;
using Vintagestory.API.Server;
using Automate.BlockEntities;
using Automate.Blocks;
using Vintagestory.GameContent.Mechanics;
using Automate.AutomateMP.Network;
using Automate.src.BlockEntities;
namespace Automate
{
public class AutomateModSystem : ModSystem
{
private ICoreClientAPI capi;
private ICoreServerAPI sapi;
private IClientNetworkChannel clientNwChannel;
private IServerNetworkChannel serverNwChannel;
public override bool ShouldLoad(EnumAppSide forSide)
{
return true;
}
// Called on server and client
// Useful for registering block/entity classes on both sides
public override void Start(ICoreAPI api)
{
// Starting the Mod System Core
base.Start(api);
// Registering all blocks, items, entities, etc.
Mod.Logger.Event(" Initialisation of " + api.Side + " side...");
api.RegisterBlockClass(AutomateRefs.MODID + ".boiler", typeof(BlockBoiler));
api.RegisterBlockClass(AutomateRefs.MODID + ".waterchamber", typeof(BlockWaterChamber));
api.RegisterBlockEntityClass(AutomateRefs.MODID + ".bewaterchamber", typeof(BEWaterChamber));
api.RegisterBlockEntityClass(AutomateRefs.MODID + ".beboiler", typeof(BEBoiler));
Mod.Logger.Event(" Boiler, Water Chamber and Piston registered !");
if (api.Side == EnumAppSide.Client)
{
capi = (ICoreClientAPI) api;
clientNwChannel =
capi.Network.RegisterChannel(Mod.Info.ModID + "mechnetwork")
.RegisterMessageType(typeof(AutomateNetworkMessage))
.SetMessageHandler<AutomateNetworkMessage>(OnAutomateWelcome);
}
else
{
sapi = (ICoreServerAPI) api;
//api.World.RegisterGameTickListener(OnServerGameTick, 20); For Server Tick, to update all networks
serverNwChannel =
sapi.Network.RegisterChannel(Mod.Info.ModID + "mechnetwork")
.RegisterMessageType(typeof(AutomateNetworkMessage));
//.RegisterMessageType(typeof(MechNetworkPacket))
api.ChatCommands.Create(Mod.Info.ModID)
.WithDescription("A welcoming message for " + Mod.Info.ModID)
.RequiresPrivilege(Privilege.controlserver)
.HandleWith(new OnCommandDelegate(OnAutomateCommand));
}
}
public override void StartServerSide(ICoreServerAPI api)
{
Mod.Logger.Notification("Hello from template mod server side: " + Lang.Get("automate:hello"));
}
public override void StartClientSide(ICoreClientAPI api)
{
Mod.Logger.Notification("Hello from template mod client side: " + Lang.Get("automate:hello"));
}
// The command with its data. Here a simple message like in the tuto on github!
private TextCommandResult OnAutomateCommand(TextCommandCallingArgs args){
serverNwChannel.BroadcastPacket(
new AutomateNetworkMessage()
{
message = "Welcome to the Automate mod, start by checking the handbook with the H key!"
}
);
return TextCommandResult.Success();
}
// Function executed on client upon receiving the packet
private void OnAutomateWelcome(AutomateNetworkMessage networkMessage)
{
capi.ShowChatMessage(networkMessage.message);
}
}
}

15
Automate/AutomateRefs.cs Normal file
View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Automate
{
public class AutomateRefs
{
public const String MODID = "automate";
public const String MODID_COLONS = MODID + ":";
public const String GAME_COLONS = "game:";
}
}

View File

@@ -0,0 +1,16 @@
{
"profiles": {
"Client": {
"commandName": "Executable",
"executablePath": "dotnet",
"commandLineArgs": "\"$(VINTAGE_STORY)/Vintagestory.dll\" --tracelog --addModPath \"$(ProjectDir)/bin/$(Configuration)/Mods\"",
"workingDirectory": "$(VINTAGE_STORY)"
},
"Server": {
"commandName": "Executable",
"executablePath": "dotnet",
"commandLineArgs": "\"$(VINTAGE_STORY)/VintagestoryServer.dll\" --tracelog --addModPath \"$(ProjectDir)/bin/$(Configuration)/Mods\"",
"workingDirectory": "$(VINTAGE_STORY)"
}
}
}

89
Automate/README.md Normal file
View File

@@ -0,0 +1,89 @@
Créer un équivalent au mod **Create** (de Minecraft) dans **Vintage Story** est un projet ambitieux, mais passionnant ! Le mod Create repose sur des mécaniques de **mouvement de blocs, automation, engrenages, énergie cinétique, et machines complexes**. Voici une **liste structurée** des compétences C# et concepts de l'API Vintage Story à maîtriser pour y parvenir :
---
## **1. Concepts Fondamentaux à Revoir (C#)**
- **Programmation orientée objet (POO)**
- Classes, héritage, interfaces (`IMod`, `ModSystem`).
- Méthodes virtuelles (`Override` dans `ModSystem`).
- **Gestion des événements**
- Comprendre `events`, `delegates` (ex: `OnPlayerInteract`, `OnBlockPlaced`).
- **Collections et LINQ**
- Utilisation de `List<T>`, `Dictionary<K,V>` pour gérer des données dynamiques (ex: liste de blocs connectés).
- **Threading et tâches asynchrones**
- Pour éviter de bloquer le jeu avec des calculs lourds (ex: `Task.Run` pour des simulations de physique).
---
## **2. API Vintage Story Spécifique**
### **Pour les mécaniques de type "Create"**
| **Fonctionnalité** | **API/Classes à utiliser** | **Exemple d'application** |
|----------------------------------|----------------------------------------------------|---------------------------|
| **Mouvement de blocs** | `BlockEntity`, `BlockEntityBehavior` | Déplacer un bloc via un piston. |
| **Interaction joueur** | `ICorePlayerAPI`, `BlockSelection` | Détecter un clic sur une manivelle. |
| **Rendu custom (GUI/animations)**| `IRenderAPI`, `ShapeRenderer`, `GuiDialog` | Afficher une interface de contrôle. |
| **Physique et collisions** | `Cuboidf`, `BlockCollisionTester` | Vérifier si un bloc peut être poussé. |
| **Réseau (sync client/serveur)** | `IServerNetworkAPI`, `IClientNetworkAPI` | Synchroniser l'état des engrenages. |
| **Sons et particules** | `ISoundAPI`, `ISimpleParticleAPI` | Jouer un bruit de mécanique. |
---
## **3. Composantes Clés à Implémenter**
### **(Inspirées de Create)**
1. **Système dénergie cinétique**
- Créer une classe `KineticNetwork` pour gérer la transmission de puissance entre engrenages.
- Utiliser `ModSystem` pour mettre à jour les réseaux chaque tick (`OnServerGameTick`).
2. **Blocs interactifs**
- **Manivelles**, **poulies**, **engrenages** :
- Hériter de `BlockEntity` pour stocker leur état (rotation, puissance transmise).
- Exemple de code pour une manivelle :
```csharp
public class BlockEntityCrank : BlockEntity
{
public float RotationAngle { get; set; }
public override void OnTick(float dt) => RotationAngle += dt * 10f;
}
```
3. **Mouvement de blocs (pistons, convoyeurs)**
- Utiliser `BlockEntityBehavior` pour détecter les blocs adjacents.
- Pour déplacer un bloc :
```csharp
api.World.BlockAccessor.SetBlock(0, oldPos); // Supprime l'ancien bloc
api.World.BlockAccessor.SetBlock(blockId, newPos); // Place le bloc à la nouvelle position
```
4. **Machines et automation**
- **Recettes mécaniques** : Utiliser `IModRegistry` pour ajouter des recettes custom.
- **Stockage ditems/fluides** : Inspirer des mods comme `From Golden Combs` pour gérer des inventaires dynamiques.
---
## **4. Outils et Bonnes Pratiques**
- **Débogage** :
- Utiliser `Mod.Logger.Notification()` pour tracer des infos.
- **Attacher un débogueur** (VSCode/Rider) au processus du jeu.
- **Optimisation** :
- Éviter les calculs lourds dans `OnTick()` → Utiliser des timers ou des updates espacés.
- **Compatibilité** :
- Vérifier les dépendances (ex: `"requiredmods": ["game"]` dans `modinfo.json`).
---
## **5. Ressources pour Approfondir**
- **Exemples de mods complexes** :
- [TemporalGearManagement](https://github.com/anegostudios/VintageStory-TemporalGearManagement) (gestion détats persistants).
- [Primitive Survival](https://github.com/copygirl/PrimitiveSurvival) (machines et automation).
- **Documentation API** :
- [API Vintage Story](https://apidocs.vintagestory.at/api/Vintagestory.API.Common.ICoreAPI.html) (pour explorer les méthodes disponibles).
---
## **6. Prochaines Étapes (Roadmap Suggérée)**
1. **Commencer petit** : Un seul engrenage qui transmet sa rotation à un bloc adjacent.
2. **Ajouter des GUI** : Une interface pour afficher la puissance transmise.
3. **Gérer la physique** : Empêcher les blocs de se chevaucher.
4. **Étendre le système** : Ajouter des convoyeurs, des bras mécaniques, etc.
Si tu veux des exemples plus précis sur lune de ces étapes, fais-le-moi savoir ! 🛠️

View File

@@ -0,0 +1,24 @@
{
"code": "autoboiler",
"class": "automate.boiler",
"entityClass": "automate.beboiler",
"entityBehaviors": [
{ "name": "TemperatureSensitive" },
],
"behaviors": [
{ "name": "Lockable" },
{ "name": "Container" },
{ "name": "Ignitable" },
{ "name": "HeatSource" },
{ "name": "HorizontalOrientable" }
],
"creativeinventory": {
"general": [ "*" ],
"mechanics": [ "*" ],
"automate": [ "*" ]
},
"drawtype": "Cube",
"texture": {
"base": "block/rock/bauxite1"
}
}

View File

@@ -0,0 +1,41 @@
{
"code": "rail",
"creativeinventory": { "general": [ "*" ], "mechanics": [ "*" ], "automate": [ "*" ] },
"blockmaterial": "Metal",
"behaviors": [
{"name": "Unstable"},
{"name": "HorizontalOrientable"}
],
"variantgroups": [
{ "code": "rock", "loadFromProperties": "block/rockwithdeposit" },
],
"textures": {
"stainlesssteel": { "base": "block/stainlesssteel" },
"steel": { "base": "block/steel" },
"support": { "base": "block/rock/{rock}1" }
},
"shape": {
"base": "block/rail"
},
"requiredminingtier": 2,
"resistance": 0.5,
"lightAbsorption": 0,
"replaceable": 5001,
"maxStackSize": 32,
"selectionbox": {
"x1": 0, "y1": 0, "z1": 0, "x2": 1, "y2": 0.2, "z2": 1,
},
"collisionbox": {
"x1": 0, "y1": 0, "z1": 0, "x2": 1, "y2": 0.15, "z2": 1,
},
"sidesolid": {
"all": false
},
"sideopaque": {
"all": false
},
"sounds": {
"place": "game:block/anvil",
"walk": "game:walk/stone"
}
}

View File

@@ -0,0 +1,35 @@
{
"code": "waterchamber",
"class": "automate.waterchamber",
"entityClass": "automate.bewaterchamber",
"attributes": {
"canDrinkFrom": false,
"isTopOpened": false,
"allowHeldLiquidTransfer": false,
"capacityLitres": 50
},
"creativeinventory": {
"general": [ "*" ],
"mechanics": [ "*" ],
"automate": [ "*" ]
},
"textures": {
"copper": { "base": "block/copper" },
"glass": { "base": "block/leaded" }
},
"shape": {
"base": "block/water_chamber"
},
"sideao": {
"all": false
},
"sidesolid": {
"all": false
},
"emitsideao": {
"all": false
},
"sideopaque": {
"all": false
}
}

View File

@@ -0,0 +1,5 @@
{
"pageCode": "automate:automate",
"title": "automate:automate-title",
"text": "automate:automate-text"
}

View File

@@ -0,0 +1,91 @@
{
"code": "railbar",
"creativeinventory": {
"general": [ "*" ],
"automate": [ "*" ]
},
"attributes": {
"onTongTransform": {
"translation": { "x": 0.2, "y": -0.5, "z": 0.225 },
"rotation": { "x": 0, "y": 3, "z": -11 },
"origin": { "x": 0, "y": 0, "z": 0 },
"scale": 1.2
}
},
"maxStackSize": 32,
"shape": {
"base": "item/railbar"
},
"guiTransform": {
"translation": {
"x": 0,
"y": 0,
"z": 0
},
"rotation": {
"x": -89,
"y": 41,
"z": 33
},
"origin": {
"x": 0.48,
"y": 0,
"z": 0.38
},
"scale": 1.78
},
"fpHandTransform": {
"translation": {
"x": -0.3,
"y": -0.5,
"z": 0.3
},
"rotation": {
"x": -29,
"y": 1,
"z": 88
},
"origin": {
"x": 0.2,
"y": 0.5,
"z": 0.5
},
"scale": 2.5
},
"groundTransform": {
"translation": {
"x": 0,
"y": 0,
"z": 0
},
"rotation": {
"x": 0,
"y": 0,
"z": 0
},
"origin": {
"x": 0.5,
"y": 0,
"z": 0.5
},
"scale": 3.4
},
"tpHandTransform": {
"translation": {
"x": -0.45,
"y": 0.03,
"z": -0.66
},
"rotation": {
"x": 90,
"y": 0,
"z": 0
},
"origin": {
"x": 0.5,
"y": 0,
"z": 0.5
},
"scale": 0.8
}
}

View File

@@ -0,0 +1,37 @@
{
// Creative Tab
"game:tabname-automate": "Automate",
// Handbook:
"automate:automate-title": "Automate: Basics",
"automate:automate-text": "Work In Progress, but progress there is not!",
"block-rail-andesite": "Andesite Rail",
"block-rail-chalk": "Chalk Rail",
"block-rail-chert": "Chert Rail",
"block-rail-conglomerate": "Conglomerate Rail",
"block-rail-limestone": "Limestone Rail",
"block-rail-claystone": "Claystone Rail",
"block-rail-granite": "Granite Rail",
"block-rail-sandstone": "Sandstone Rail",
"block-rail-shale": "Shale Rail",
"block-rail-basalt": "Basalt Rail",
"block-rail-peridotite": "Peridotite Rail",
"block-rail-phyllite": "Phyllite Rail",
"block-rail-slate": "Slate Rail",
"block-rail-bauxite": "Bauxite Rail",
"block-rail-suevite": "Suevite Rail",
"block-rail-whitemarble": "Whitemarble Rail",
"block-rail-greenmarble": "Greenmarble Rail",
"block-rail-redmarble": "Redmarble Rail",
"block-rail-kimberlite": "Kimberlite Rail",
"blockdesc-rail-*": "A rail that can be connected to other rails to form a circuit V2",
"block-autoboiler": "Boiler",
"block-waterchamber": "Water Chamber",
"Steam Engine Boiler": "Steam Engine Boiler",
"Temperature: {0}°C": "Temperature: {0}°C",
"item-railbar": "Rail Bar",
"itemdesc-railbar": "The fondation of every rail"
}

View File

@@ -0,0 +1,25 @@
{
"ingredientPattern": "BSB",
"width": 3,
"height": 1,
"ingredients": {
"B": {
"type": "item",
"code": "railbar"
},
"S": {
"type": "item",
"code": "game:stone-*",
"name": "rock",
"allowedVariants": ["andesite", "chalk", "chert", "conglomerate", "limestone",
"claystone", "granite", "sandstone", "shale", "basalt", "peridotite", "phyllite",
"slate", "bauxite", "suevite", "whitemarble", "greenmarble", "redmarble", "kimberlite"],
"quantity": 6
}
},
"output": {
"type": "block",
"code": "rail-{rock}",
"quantity" : 2
}
}

View File

@@ -0,0 +1,25 @@
{
"ingredientPattern": "B,S,B",
"width": 3,
"height": 1,
"ingredients": {
"B": {
"type": "item",
"code": "railbar",
},
"S": {
"type": "item",
"code": "stone-*",
"name": "rock",
"allowedVariants": ["andesite", "chalk", "chert", "conglomerate", "limestone",
"claystone", "granite", "sandstone", "shale", "basalt", "peridotite", "phyllite",
"slate", "bauxite", "suevite", "whitemarble", "greenmarble", "redmarble", "kimberlite"],
"quantity": 6
}
},
"output": {
"type": "block",
"code": "rail-{rock}",
"quantity" : 2
}
}

View File

@@ -0,0 +1,24 @@
{
"ingredient": {
"type": "item",
"code": "game:ingot-steel",
},
"pattern": [
[
"#_#_#_#",
"#_#_#_#",
"#_#_#_#",
"_______",
"#_#_#_#",
"#_#_#_#",
"#_#_#_#"
]
],
"output": {
"type": "item",
"code": "railbar",
"quantity": 8
}
}

View File

@@ -0,0 +1,116 @@
{
"editor": {
"allAngles": false,
"entityTextureMode": false
},
"textureWidth": 16,
"textureHeight": 16,
"textureSizes": {
"stainlesssteel": [16,16],
"steel": [16,16]
},
"textures": {
"stainlesssteel": "block/stainlesssteel",
"steel": "block/steel",
"support": "block/rock/{rock}1"
},
"elements": [
{
"name": "LeftRail",
"from": [ 2.0, 0.0, 0.0 ],
"to": [ 4.0, 2.0, 16.0 ],
"rotationOrigin": [ 2.0, 0.0, 0.0 ],
"faces": {
"north": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 2.0 ], "autoUv": false },
"east": { "texture": "#steel", "uv": [ 0.0, 0.0, 16.0, 2.0 ], "autoUv": false },
"south": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"west": { "texture": "#steel", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"up": { "texture": "#stainlesssteel", "uv": [ 3.0, 0.0, 5.0, 16.0 ], "windMode": [-1,-1,-1,-1] },
"down": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 16.0 ] }
}
},
{
"name": "RightRail",
"from": [ 12.0, 0.0, 0.0 ],
"to": [ 14.0, 2.0, 16.0 ],
"rotationOrigin": [ 12.0, 0.0, 0.0 ],
"faces": {
"north": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"east": { "texture": "#steel", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"south": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"west": { "texture": "#steel", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"up": { "texture": "#stainlesssteel", "uv": [ 3.0, 0.0, 5.0, 16.0 ], "windMode": [-1,-1,-1,-1] },
"down": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 16.0 ] }
}
},
{
"name": "Support",
"from": [ 0.0, 0.0, 1.0 ],
"to": [ 16.0, 1.0, 3.0 ],
"rotationOrigin": [ 0.0, 0.0, 1.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
},
{
"name": "Support2",
"from": [ 0.0, 0.0, 4.0 ],
"to": [ 16.0, 1.0, 6.0 ],
"rotationOrigin": [ 0.0, 0.0, 4.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
},
{
"name": "Support3",
"from": [ 0.0, 0.0, 7.0 ],
"to": [ 16.0, 1.0, 9.0 ],
"rotationOrigin": [ 0.0, 0.0, 7.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
},
{
"name": "Support4",
"from": [ 0.0, 0.0, 10.0 ],
"to": [ 16.0, 1.0, 12.0 ],
"rotationOrigin": [ 0.0, 0.0, 10.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
},
{
"name": "Support5",
"from": [ 0.0, 0.0, 13.0 ],
"to": [ 16.0, 1.0, 15.0 ],
"rotationOrigin": [ 0.0, 0.0, 13.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
}
]}

View File

@@ -0,0 +1,115 @@
{
"editor": {
"allAngles": false,
"entityTextureMode": false
},
"textureWidth": 16,
"textureHeight": 16,
"textureSizes": {
"stainlesssteel": [16,16],
"steel": [16,16]
},
"textures": {
"stainlesssteel": "block/stainlesssteel",
"steel": "block/steel"
},
"elements": [
{
"name": "LeftRail",
"from": [ 2.0, 0.0, 0.0 ],
"to": [ 4.0, 2.0, 16.0 ],
"rotationOrigin": [ 2.0, 0.0, 0.0 ],
"faces": {
"north": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 2.0 ], "autoUv": false },
"east": { "texture": "#steel", "uv": [ 0.0, 0.0, 16.0, 2.0 ], "autoUv": false },
"south": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"west": { "texture": "#steel", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"up": { "texture": "#stainlesssteel", "uv": [ 3.0, 0.0, 5.0, 16.0 ], "windMode": [-1,-1,-1,-1] },
"down": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 16.0 ] }
}
},
{
"name": "RightRail",
"from": [ 12.0, 0.0, 0.0 ],
"to": [ 14.0, 2.0, 16.0 ],
"rotationOrigin": [ 12.0, 0.0, 0.0 ],
"faces": {
"north": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"east": { "texture": "#steel", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"south": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"west": { "texture": "#steel", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"up": { "texture": "#stainlesssteel", "uv": [ 3.0, 0.0, 5.0, 16.0 ], "windMode": [-1,-1,-1,-1] },
"down": { "texture": "#steel", "uv": [ 0.0, 0.0, 2.0, 16.0 ] }
}
},
{
"name": "Support",
"from": [ 0.0, 0.0, 1.0 ],
"to": [ 16.0, 1.0, 3.0 ],
"rotationOrigin": [ 0.0, 0.0, 1.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
},
{
"name": "Support2",
"from": [ 0.0, 0.0, 4.0 ],
"to": [ 16.0, 1.0, 6.0 ],
"rotationOrigin": [ 0.0, 0.0, 4.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
},
{
"name": "Support3",
"from": [ 0.0, 0.0, 7.0 ],
"to": [ 16.0, 1.0, 9.0 ],
"rotationOrigin": [ 0.0, 0.0, 7.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
},
{
"name": "Support4",
"from": [ 0.0, 0.0, 10.0 ],
"to": [ 16.0, 1.0, 12.0 ],
"rotationOrigin": [ 0.0, 0.0, 10.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
},
{
"name": "Support5",
"from": [ 0.0, 0.0, 13.0 ],
"to": [ 16.0, 1.0, 15.0 ],
"rotationOrigin": [ 0.0, 0.0, 13.0 ],
"faces": {
"north": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"south": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#support", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
"up": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] },
"down": { "texture": "#support", "uv": [ 0.0, 0.0, 16.0, 2.0 ] }
}
}
]}

View File

@@ -0,0 +1,164 @@
{
"editor": {
"allAngles": false,
"entityTextureMode": false
},
"textureWidth": 16,
"textureHeight": 16,
"textureSizes": {
"leaded": [16,16],
"copper": [16,16]
},
"textures": {
"copper": "block/copper",
"leaded": "block/leaded"
},
"elements": [
{
"name": "Bottom",
"from": [ 0.0, 0.0, 0.0 ],
"to": [ 16.0, 1.0, 16.0 ],
"faces": {
"north": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 1.0 ], "autoUv": false },
"south": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"up": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
"down": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }
}
},
{
"name": "Top",
"from": [ 0.0, 15.0, 0.0 ],
"to": [ 16.0, 16.0, 16.0 ],
"rotationOrigin": [ 0.0, 15.0, 0.0 ],
"faces": {
"north": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"south": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"up": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
"down": { "texture": "#copper", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }
}
},
{
"name": "Pillar1",
"from": [ 0.0, 1.0, 0.0 ],
"to": [ 2.0, 15.0, 2.0 ],
"rotationOrigin": [ 0.0, 1.0, 0.0 ],
"faces": {
"north": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"east": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"south": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"west": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"up": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"down": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }
},
"children": [
{
"name": "Pillar2",
"from": [ 14.0, 0.0, 0.0 ],
"to": [ 16.0, 14.0, 2.0 ],
"rotationOrigin": [ 14.0, 0.0, 0.0 ],
"faces": {
"north": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"east": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"south": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"west": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"up": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"down": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }
}
},
{
"name": "Pillar3",
"from": [ 0.0, 0.0, 14.0 ],
"to": [ 2.0, 14.0, 16.0 ],
"rotationOrigin": [ 0.0, 0.0, 14.0 ],
"faces": {
"north": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"east": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"south": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"west": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"up": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"down": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }
}
},
{
"name": "Pillar4",
"from": [ 14.0, 0.0, 14.0 ],
"to": [ 16.0, 14.0, 16.0 ],
"rotationOrigin": [ 14.0, 0.0, 14.0 ],
"faces": {
"north": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"east": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"south": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"west": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 14.0 ] },
"up": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
"down": { "texture": "#copper", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }
}
}
]
},
{
"name": "Glass1",
"from": [ 1.0, 1.0, 2.0 ],
"to": [ 2.0, 15.0, 14.0 ],
"renderPass": 3,
"rotationOrigin": [ 1.0, 1.0, 2.0 ],
"faces": {
"north": { "texture": "#leaded", "uv": [ 1.0, 7.5, 15.0, 8.5 ], "rotation": 90 },
"east": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 14.0 ] },
"south": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 14.0 ] },
"west": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 14.0 ] },
"up": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 12.0 ] },
"down": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 12.0 ] }
},
"children": [
{
"name": "Glass2",
"from": [ 1.0, 0.0, -1.0 ],
"to": [ 13.0, 14.0, 0.0 ],
"renderPass": 3,
"rotationOrigin": [ 1.0, 0.0, -1.0 ],
"faces": {
"north": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 14.0 ] },
"east": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 14.0 ] },
"south": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 14.0 ] },
"west": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 14.0 ] },
"up": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 1.0 ] },
"down": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 1.0 ] }
}
},
{
"name": "Glass3",
"from": [ 13.0, 0.0, 0.0 ],
"to": [ 14.0, 14.0, 12.0 ],
"renderPass": 3,
"rotationOrigin": [ 13.0, 0.0, 0.0 ],
"faces": {
"north": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 14.0 ] },
"east": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 14.0 ] },
"south": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 14.0 ] },
"west": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 14.0 ] },
"up": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 12.0 ] },
"down": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 12.0 ] }
}
},
{
"name": "Glass4",
"from": [ 1.0, 0.0, 12.0 ],
"to": [ 13.0, 14.0, 13.0 ],
"renderPass": 3,
"rotationOrigin": [ 1.0, 0.0, 12.0 ],
"faces": {
"north": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 14.0 ] },
"east": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 14.0 ] },
"south": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 14.0 ] },
"west": { "texture": "#leaded", "uv": [ 0.0, 0.0, 1.0, 14.0 ] },
"up": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 1.0 ] },
"down": { "texture": "#leaded", "uv": [ 0.0, 0.0, 12.0, 1.0 ] }
}
}
]
}
]}

View File

@@ -0,0 +1,27 @@
{
"editor": {
"allAngles": false,
"entityTextureMode": false
},
"textureWidth": 16,
"textureHeight": 16,
"textureSizes": {
},
"textures": {
},
"elements": [
{
"name": "Bar",
"from": [ 0.0, 0.0, 7.0 ],
"to": [ 16.0, 1.0, 8.0 ],
"rotationOrigin": [ 0.0, 0.0, 7.0 ],
"faces": {
"north": { "texture": "#null", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#null", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"south": { "texture": "#null", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#null", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"up": { "texture": "#null", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"down": { "texture": "#null", "uv": [ 0.0, 0.0, 16.0, 1.0 ] }
}
}
]}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Some files were not shown because too many files have changed in this diff Show More