diff --git a/.timetracker b/.timetracker
index 75b6a72..5deb8dc 100644
--- a/.timetracker
+++ b/.timetracker
@@ -1,5 +1,5 @@
{
- "total": 14216,
+ "total": 18477,
"sessions": [
{
"begin": "2026-03-17T23:54:43+01:00",
@@ -19,12 +19,12 @@
{
"begin": "2026-03-18T22:54:14+01:00",
"end": "2026-03-18T23:14:49+01:00",
- "duration": 1234
+ "duration": 1235
},
{
"begin": "2026-03-18T23:14:52+01:00",
- "end": "2026-03-19T00:06:26+01:00",
- "duration": 3094
+ "end": "2026-03-19T01:17:26+01:00",
+ "duration": 7354
}
]
}
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 03c01b0..34aa302 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -5,7 +5,7 @@
"name": "Vintage Story Client",
"type": "dotnet",
"request": "launch",
- "projectPath": "${workspaceFolder}/ButterflyPins/ButterflyPins/ButterflyPins.csproj"
+ "projectPath": "${workspaceFolder}/ButterflyPins/ButterflyPins.csproj"
}
]
}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 8a7610e..f4767cf 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -18,7 +18,7 @@
"dependsOrder": "sequence",
"args": [
"build",
- "${workspaceFolder}/ButterflyPins/ButterflyPins/ButterflyPins.csproj",
+ "${workspaceFolder}/ButterflyPins/ButterflyPins.csproj",
"-c",
"${input:buildConfig}",
"/property:GenerateFullPaths=true",
diff --git a/ButterflyPins.slnx b/ButterflyPins.slnx
index c96646c..9d89ef1 100644
--- a/ButterflyPins.slnx
+++ b/ButterflyPins.slnx
@@ -4,6 +4,6 @@
-
-
+
+
diff --git a/ButterflyPins/ButterflyPins/BlockEntities/BlockEntityButterflyPinBoard.cs b/ButterflyPins/BlockEntities/BlockEntityButterflyPinBoard.cs
similarity index 100%
rename from ButterflyPins/ButterflyPins/BlockEntities/BlockEntityButterflyPinBoard.cs
rename to ButterflyPins/BlockEntities/BlockEntityButterflyPinBoard.cs
diff --git a/ButterflyPins/ButterflyPins/Blocks/BlockButterflyPinBoard.cs b/ButterflyPins/Blocks/BlockButterflyPinBoard.cs
similarity index 65%
rename from ButterflyPins/ButterflyPins/Blocks/BlockButterflyPinBoard.cs
rename to ButterflyPins/Blocks/BlockButterflyPinBoard.cs
index dbc1bee..51e8a8d 100644
--- a/ButterflyPins/ButterflyPins/Blocks/BlockButterflyPinBoard.cs
+++ b/ButterflyPins/Blocks/BlockButterflyPinBoard.cs
@@ -1,4 +1,5 @@
using ButterflyPins.BlockEntities;
+using System;
using Vintagestory.API.Common;
using Vintagestory.API.MathTools;
@@ -6,6 +7,8 @@ namespace ButterflyPins.Blocks;
public class BlockButterflyPinBoard : Block
{
+ private const string ButterflyPinPrefix = "clothes-butterflypin-";
+
public override bool OnBlockInteractStart(IWorldAccessor world, IPlayer byPlayer, BlockSelection blockSel)
{
if (blockSel == null)
@@ -35,4 +38,32 @@ public class BlockButterflyPinBoard : Block
base.OnBlockBroken(world, pos, byPlayer, dropQuantityMultiplier);
}
+
+ public override bool ConsumeCraftingIngredients(ItemSlot[] slots, ItemSlot outputSlot, GridRecipe matchingRecipe)
+ {
+ bool preservedPin = false;
+
+ foreach (ItemSlot slot in slots)
+ {
+ if (slot.Empty)
+ continue;
+
+ if (!preservedPin && IsButterflyPin(slot.Itemstack))
+ {
+ preservedPin = true;
+ continue;
+ }
+
+ slot.TakeOut(1);
+ slot.MarkDirty();
+ }
+
+ return true;
+ }
+
+ private static bool IsButterflyPin(ItemStack stack)
+ {
+ AssetLocation? code = stack.Collectible?.Code;
+ return code != null && code.Path.StartsWith(ButterflyPinPrefix, StringComparison.Ordinal);
+ }
}
\ No newline at end of file
diff --git a/ButterflyPins/ButterflyPins/ButterflyPins.csproj b/ButterflyPins/ButterflyPins.csproj
similarity index 100%
rename from ButterflyPins/ButterflyPins/ButterflyPins.csproj
rename to ButterflyPins/ButterflyPins.csproj
diff --git a/ButterflyPins/ButterflyPins/assets/butterflypins/recipes/grid/pinboard2x2.json b/ButterflyPins/ButterflyPins/assets/butterflypins/recipes/grid/pinboard2x2.json
deleted file mode 100644
index c902a33..0000000
--- a/ButterflyPins/ButterflyPins/assets/butterflypins/recipes/grid/pinboard2x2.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "ingredientPattern": "PPP\tS_S\tPPP",
- "ingredients": {
- "P": { "type": "item", "code": "plank-*" },
- "S": { "type": "item", "code": "stick" }
- },
- "width": 3,
- "height": 3,
- "output": { "type": "block", "code": "pinboard2x2-south" }
-}
\ No newline at end of file
diff --git a/ButterflyPins/ButterflyPins/assets/butterflypins/recipes/grid/pinboard3x3.json b/ButterflyPins/ButterflyPins/assets/butterflypins/recipes/grid/pinboard3x3.json
deleted file mode 100644
index aeff790..0000000
--- a/ButterflyPins/ButterflyPins/assets/butterflypins/recipes/grid/pinboard3x3.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "ingredientPattern": "PPP\tPSP\tPPP",
- "ingredients": {
- "P": { "type": "item", "code": "plank-*" },
- "S": { "type": "item", "code": "stick" }
- },
- "width": 3,
- "height": 3,
- "output": { "type": "block", "code": "pinboard3x3-south" }
-}
\ No newline at end of file
diff --git a/ButterflyPins/ButterflyPins/Properties/launchSettings.json b/ButterflyPins/Properties/launchSettings.json
similarity index 100%
rename from ButterflyPins/ButterflyPins/Properties/launchSettings.json
rename to ButterflyPins/Properties/launchSettings.json
diff --git a/ButterflyPins/ButterflyPins/Systems/ButterflyPinsModSystem.cs b/ButterflyPins/Systems/ButterflyPinsModSystem.cs
similarity index 100%
rename from ButterflyPins/ButterflyPins/Systems/ButterflyPinsModSystem.cs
rename to ButterflyPins/Systems/ButterflyPinsModSystem.cs
diff --git a/ButterflyPins/ButterflyPins/assets/butterflypins/blocktypes/pinboard2x2.json b/ButterflyPins/assets/butterflypins/blocktypes/pinboard2x2.json
similarity index 88%
rename from ButterflyPins/ButterflyPins/assets/butterflypins/blocktypes/pinboard2x2.json
rename to ButterflyPins/assets/butterflypins/blocktypes/pinboard2x2.json
index 10dff5a..c00517e 100644
--- a/ButterflyPins/ButterflyPins/assets/butterflypins/blocktypes/pinboard2x2.json
+++ b/ButterflyPins/assets/butterflypins/blocktypes/pinboard2x2.json
@@ -42,7 +42,7 @@
"collisionbox": {
"x1": 0.0625,
"y1": 0.0625,
- "z1": 0.9375,
+ "z1": 0.90625,
"x2": 0.9375,
"y2": 0.9375,
"z2": 1.0,
@@ -56,7 +56,7 @@
"selectionbox": {
"x1": 0.0625,
"y1": 0.0625,
- "z1": 0.9375,
+ "z1": 0.90625,
"x2": 0.9375,
"y2": 0.9375,
"z2": 1.0,
@@ -80,7 +80,7 @@
"guiTransform": {
"rotation": { "x": -19, "y": 136, "z": 0 },
"origin": { "x": 0.5, "y": 0.5, "z": 0.5 },
- "scale": 1.9
+ "scale": 1.0
},
"groundTransform": {
"translation": { "x": 0, "y": 0, "z": 0 },
@@ -90,7 +90,13 @@
},
"tpHandTransform": {
"translation": { "x": -0.45, "y": -0.8, "z": 0.04 },
- "rotation": { "x": 0, "y": 0, "z": -10 },
+ "rotation": { "x": 0, "y": 180, "z": -10 },
+ "origin": { "x": 0.5, "y": 0.5, "z": 0.5 },
+ "scale": 0.95
+ },
+ "fpHandTransform": {
+ "translation": { "x": -0.45, "y": -0.8, "z": 0.04 },
+ "rotation": { "x": 0, "y": 180, "z": -10 },
"origin": { "x": 0.5, "y": 0.5, "z": 0.5 },
"scale": 0.95
}
diff --git a/ButterflyPins/ButterflyPins/assets/butterflypins/blocktypes/pinboard3x3.json b/ButterflyPins/assets/butterflypins/blocktypes/pinboard3x3.json
similarity index 88%
rename from ButterflyPins/ButterflyPins/assets/butterflypins/blocktypes/pinboard3x3.json
rename to ButterflyPins/assets/butterflypins/blocktypes/pinboard3x3.json
index 6f9912c..9978f78 100644
--- a/ButterflyPins/ButterflyPins/assets/butterflypins/blocktypes/pinboard3x3.json
+++ b/ButterflyPins/assets/butterflypins/blocktypes/pinboard3x3.json
@@ -42,7 +42,7 @@
"collisionbox": {
"x1": 0.0625,
"y1": 0.0625,
- "z1": 0.9375,
+ "z1": 0.90625,
"x2": 0.9375,
"y2": 0.9375,
"z2": 1.0,
@@ -56,7 +56,7 @@
"selectionbox": {
"x1": 0.0625,
"y1": 0.0625,
- "z1": 0.9375,
+ "z1": 0.90625,
"x2": 0.9375,
"y2": 0.9375,
"z2": 1.0,
@@ -80,7 +80,7 @@
"guiTransform": {
"rotation": { "x": -19, "y": 136, "z": 0 },
"origin": { "x": 0.5, "y": 0.5, "z": 0.5 },
- "scale": 1.9
+ "scale": 1.0
},
"groundTransform": {
"translation": { "x": 0, "y": 0, "z": 0 },
@@ -90,7 +90,13 @@
},
"tpHandTransform": {
"translation": { "x": -0.45, "y": -0.8, "z": 0.04 },
- "rotation": { "x": 0, "y": 0, "z": -10 },
+ "rotation": { "x": 0, "y": 180, "z": -10 },
+ "origin": { "x": 0.5, "y": 0.5, "z": 0.5 },
+ "scale": 0.95
+ },
+ "fpHandTransform": {
+ "translation": { "x": -0.45, "y": -0.8, "z": 0.04 },
+ "rotation": { "x": 0, "y": 180, "z": -10 },
"origin": { "x": 0.5, "y": 0.5, "z": 0.5 },
"scale": 0.95
}
diff --git a/ButterflyPins/ButterflyPins/assets/butterflypins/lang/en.json b/ButterflyPins/assets/butterflypins/lang/en.json
similarity index 100%
rename from ButterflyPins/ButterflyPins/assets/butterflypins/lang/en.json
rename to ButterflyPins/assets/butterflypins/lang/en.json
diff --git a/ButterflyPins/assets/butterflypins/recipes/grid/pinboard2x2.json b/ButterflyPins/assets/butterflypins/recipes/grid/pinboard2x2.json
new file mode 100644
index 0000000..e2715b0
--- /dev/null
+++ b/ButterflyPins/assets/butterflypins/recipes/grid/pinboard2x2.json
@@ -0,0 +1,13 @@
+{
+ "ingredientPattern": "_S_\tSBS\t_S_",
+ "ingredients": {
+ "S": { "type": "item", "code": "game:stick" },
+ "B": {
+ "type": "item",
+ "code": "game:*-butterflypin-*"
+ }
+ },
+ "width": 3,
+ "height": 3,
+ "output": { "type": "block", "code": "pinboard2x2-north" }
+}
\ No newline at end of file
diff --git a/ButterflyPins/assets/butterflypins/recipes/grid/pinboard3x3.json b/ButterflyPins/assets/butterflypins/recipes/grid/pinboard3x3.json
new file mode 100644
index 0000000..fc7ceef
--- /dev/null
+++ b/ButterflyPins/assets/butterflypins/recipes/grid/pinboard3x3.json
@@ -0,0 +1,13 @@
+{
+ "ingredientPattern": "S_S\t_B_\tS_S",
+ "ingredients": {
+ "S": { "type": "item", "code": "game:stick" },
+ "B": {
+ "type": "item",
+ "code": "game:*-butterflypin-*"
+ }
+ },
+ "width": 3,
+ "height": 3,
+ "output": { "type": "block", "code": "pinboard3x3-north" }
+}
\ No newline at end of file
diff --git a/ButterflyPins/ButterflyPins/assets/butterflypins/shapes/block/pinboard-2x2.json b/ButterflyPins/assets/butterflypins/shapes/block/pinboard-2x2.json
similarity index 100%
rename from ButterflyPins/ButterflyPins/assets/butterflypins/shapes/block/pinboard-2x2.json
rename to ButterflyPins/assets/butterflypins/shapes/block/pinboard-2x2.json
diff --git a/ButterflyPins/ButterflyPins/assets/butterflypins/shapes/block/pinboard-3x3.json b/ButterflyPins/assets/butterflypins/shapes/block/pinboard-3x3.json
similarity index 100%
rename from ButterflyPins/ButterflyPins/assets/butterflypins/shapes/block/pinboard-3x3.json
rename to ButterflyPins/assets/butterflypins/shapes/block/pinboard-3x3.json
diff --git a/ButterflyPins/ButterflyPins/modinfo.json b/ButterflyPins/modinfo.json
similarity index 100%
rename from ButterflyPins/ButterflyPins/modinfo.json
rename to ButterflyPins/modinfo.json
diff --git a/ButterflyPins/ZZCakeBuild/CakeBuild.csproj b/ZZCakeBuild/CakeBuild.csproj
similarity index 100%
rename from ButterflyPins/ZZCakeBuild/CakeBuild.csproj
rename to ZZCakeBuild/CakeBuild.csproj
diff --git a/ButterflyPins/ZZCakeBuild/Program.cs b/ZZCakeBuild/Program.cs
similarity index 100%
rename from ButterflyPins/ZZCakeBuild/Program.cs
rename to ZZCakeBuild/Program.cs
diff --git a/ButterflyPins/build.ps1 b/build.ps1
similarity index 100%
rename from ButterflyPins/build.ps1
rename to build.ps1
diff --git a/ButterflyPins/build.sh b/build.sh
old mode 100644
new mode 100755
similarity index 100%
rename from ButterflyPins/build.sh
rename to build.sh