Back to NxLabs

NxLabs / Vintage Story

Piles!

PBy Pursec

A modding library for adding coal-style piles simply and easily

Piles!

Description

This a modding library/tool for adding custom piles in the style of coal and charcoal from Vanilla entirely through external content mods. 



<span style="text-decoration: line-through;">By default piles for Rot, Salt, and All types of vanilla Grain and included.&nbsp;
</span><span style="color: #d35400;">These piles have now been extracted out to their own mod.
Check out: <span style="color: #3598db;">Granary</span></span>
<span style="text-decoration: line-through;">
</span>


This library adds the following relevant classes:&nbsp;<span style="color: #e67e23;">BlockPile</span>, <span style="color: #e67e23;">BlockEntityPile</span>, &amp; <span style="color: #e67e23;">BehaviorPileItem</span>

To add your own pile with this mod installed it is as follows:


  1. Create a new content mod with a blocktype file for each of the piles you wish to create (if they are variant piles such as grain, you only need 1 with variant groups)
  2. Each of these blocktypes assign them the class <span style="color: #e74c3c;">BlockPile</span> and entityclass <span style="color: #e74c3c;">BlockEntityPile</span>
  3. (<span style="color: #2fcc71;">Optional</span>) add an attributes section to the block type to specify parameters of that pile. Any not-specified attribute will be given a default value. If the attributes array is not presnt at all, all values will be default.

    The attributes are as follows:

    <span style="color: #34495e;">"attributes":
    {
    &nbsp; &nbsp;"addItemLabel" : "String" or "LangKey",
    &nbsp; &nbsp;"removeItemLabel": "String" or "LangKey",
    &nbsp; &nbsp;"defaultAddQuantity": Integer (default: 2),
    &nbsp; &nbsp;"defaultTakeQuantity": Integer (default: 2),
    &nbsp; &nbsp;"bulkTakeQuantity": Integer (default: 4),
    &nbsp; &nbsp;"maxStackSize": Integer (default: 16),
    &nbsp; &nbsp;"interactSoundPath" : "domain:pathToSound",
    &nbsp; &nbsp;"allowUnstablePlacement": true/false (default: false)
    }
    </span>
  4. &nbsp;Assign a texture to the blockPile you created just as you would a vanilla block.
    1. The piles support assignment by face if desired (such as defining a different texture for "up"/the top face and a seperate texture for the sides. If wanting the same texture for all sides use the vanilla <span style="color: #e67e23;">"all"</span> key for the textures field
  5. Create a patch adding/appending<span style="color: #e74c3c;"> BehaviorPileItem</span> to the item you wish to pileable, with a properties array pointing to the corresponding code of the newly created blocktype.
    1. If using variants such as for example "grain" they may be defined as "grain-flax" or generically "grain-{type}", in which case you can specify the code of the pile blocktype created as "grainPile-{type}" and make sure that the blocktype for "grainPile" as the corresponding variantgroups array to have different piles per type of grain with only one blocktype file.
    2. For specifying those variant textures simply point the texture-path to the location and use the variant group {type} as you would with normal variant texturing

      The source code and example implementation from the default piles can be found at: https://github.com/Pursec/PilesPilesPiles


<pre class="language-csharp">Example of a patch file for grain supporting variantgroups:
[
    {
        "file": "game:itemtypes/food/grain",
         "op": "add",
         "path": "/behaviors",
         "value": [
                          {
                              "name": "BehaviorPileItem",
                              "properties": { "pileBlockCode": "gespiles:grainPile-{type}"}
                          }
                      ]
   }
]


<pre class="language-csharp">Example of grainPile.json

{
  "code": "grainPile",
  "class": "BlockPile",
  "entityClass": "BlockEntityPile",
  "variantgroups": [
    {
      "code": "type",
      "states": [ "spelt", "rice", "flax", "rye", "amaranth", "sunflower" ]
    }
  ],
  "creativeinventory": {
    "general": [ "" ],
    "decorative": [ "" ]
  },
  "behaviors": [
    { "name": "UnstableFalling" }
  ],
  "attributes": {
    "addItemLabel": "Add Grain",
    "removeItemLabel": "Remove Grain",
    "allowUnstablePlacement": true
  },
  "blockmaterial": "Soil",
  "lightAbsorption": 0,
  "sidesolid": { "all": false },
  "sideopaque": { "all": false },
  "textures": {
    "all": { "base": "game:block/food/grain/{type}" }
  },
  "replaceable": 100,
  "resistance": 2,
  "collisionbox": {
    "x1": 0,
    "y1": 0,
    "x2": 1,
    "y2": 0,
    "z2": 1
  },
  "selectionbox": {
    "x1": 0,
    "y1": 0,
    "x2": 1,
    "y2": 0,
    "z2": 1
  },
  "drops": [],
  "materialDensity": 600
}



If you wish to support me do so at:
Ko-fi
<a title="Patreon" href="https://patreon.com/user?u=54887552&amp;utm_medium=clipboard_copy&amp;utm_source=copyLink&amp;utm_campaign=creatorshare_creator&amp;utm_content=join_link" target="_blank" rel="noopener">Patreon

Ratings & reviews

No ratings yet

Sign in to leave a rating or comment.