Replace multiple add_basic_rule() calls with per-item-proxy-class add_*_rules().

This commit is contained in:
Phaethon H 2021-11-12 11:19:41 -08:00
parent 7ac3ffd0fe
commit 874d5986f6
7 changed files with 168 additions and 44 deletions

View File

@ -67,10 +67,6 @@ function BucketProxy.make_lava(old_itemstack, cauldron_node)
return ItemStack("mcl_buckets:bucket_lava")
end
-- full lava cauldron + empty bucket = empty cauldron, lava bucket
BucketProxy:add_basic_rule("lava", true, BucketProxy.is_empty, nil, 0, BucketProxy.make_lava, BucketProxy.sound_lava)
-- any lava cauldron + lava bucket = full lava cauldron, empty bucket (may waste bucket)
BucketProxy:add_basic_rule("lava", nil, BucketProxy.is_lava, "lava", true, "mcl_buckets:bucket_empty", BucketProxy.sound_lava)
-- empty cauldron + lava bucket = full lava cauldron, empty bucket
BucketProxy:add_basic_rule(nil, 0, BucketProxy.is_lava, "lava", true, "mcl_buckets:bucket_empty", BucketProxy.sound_lava)
BucketProxy:add_bucket_rules("lava", BucketProxy.is_lava, BucketProxy.make_lava, BucketProxy.sound_lava)

View File

@ -52,12 +52,8 @@ function BucketProxy.make_river_water(itemstack, cauldron_node)
end
end
-- full river water cauldron + empty bucket -> empty cauldron, river water bucket
BucketProxy:add_basic_rule("river_water", 3, BucketProxy.is_empty, nil, 0, "mcl_buckets:bucket_river_water", BucketProxy.sound_water)
-- any river water cauldron + river water bucket -> full river water cauldron, empty bucket (may waste bucket)
BucketProxy:add_basic_rule("river_water", nil, BucketProxy.is_river_water, "river_water", true, "mcl_buckets:bucket_empty", BucketProxy.sound_water)
-- empty cauldron + river water bucket -> full river water cauldron, empty bucket
BucketProxy:add_basic_rule(nil, 0, BucketProxy.is_river_water, "river_water", true, "mcl_buckets:bucket_empty", BucketProxy.sound_water)
BucketProxy:add_bucket_rules("river_water", BucketProxy.is_river_water, "mcl_buckets:bucket_river_water", BucketProxy.sound_water)
@ -74,13 +70,6 @@ function BottleProxy.make_river_water(old_itemstack, cauldron_node)
return ItemStack("mcl_potions:river_water")
end
-- river water cauldron + empty bottle -> river water cauldron less 1, river water bottle
BottleProxy:add_basic_rule("river_water", 3, BottleProxy.is_empty, "river_water", 2, BottleProxy.make_river_water, BottleProxy.sound_water)
BottleProxy:add_basic_rule("river_water", 2, BottleProxy.is_empty, "river_water", 1, BottleProxy.make_river_water, BottleProxy.sound_water)
BottleProxy:add_basic_rule("river_water", 1, BottleProxy.is_empty, nil, 0, BottleProxy.make_river_water, BottleProxy.sound_water)
-- empty cauldron + water bottle -> river water cauldron 1, empty bottle
BottleProxy:add_basic_rule(nil, 0, BottleProxy.is_river_water, "river_water", 1, BottleProxy.make_empty, BottleProxy.sound_water)
-- river water cauldron + river water bottle -> river water cauldron plus 1, empty bottle
BottleProxy:add_basic_rule("river_water", 1, BottleProxy.is_river_water, "river_water", 2, BottleProxy.make_empty, BottleProxy.sound_water)
BottleProxy:add_basic_rule("river_water", 2, BottleProxy.is_river_water, "river_water", 3, BottleProxy.make_empty, BottleProxy.sound_water)
BottleProxy:add_bottle_rules("river_water", BottleProxy.is_river_water, "mcl_potions:bottle_river_water", BottleProxy.sound_water)

View File

@ -62,7 +62,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
<i style="float:right;">Last updated 2021-11-10 21:14:01 </i>
<i style="float:right;">Last updated 2021-11-12 11:20:21 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -898,7 +898,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
<i style="float:right;">Last updated 2021-11-10 21:14:01 </i>
<i style="float:right;">Last updated 2021-11-12 11:20:21 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -281,7 +281,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
<i style="float:right;">Last updated 2021-11-10 21:14:01 </i>
<i style="float:right;">Last updated 2021-11-12 11:20:21 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -100,6 +100,10 @@
<td class="summary">Rule's <code>output_specifier</code> callback for obtaining a water bucket.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#BucketProxy:add_bucket_rules">BucketProxy:add_bucket_rules (substance, filled_input, filled_output, sound_specifier)</a></td>
<td class="summary">Patterned bucket rules.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#BottleProxy.is_empty">BottleProxy.is_empty (itemstack)</a></td>
<td class="summary">Rule's <code>input_constraint</code> callback for empty bottle.</td>
</tr>
@ -120,6 +124,10 @@
<td class="summary">Rule's <code>output_specifier</code> function for obtaining water bottle.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#BottleProxy:add_bottle_rules">BottleProxy:add_bottle_rules (substance, filled_input, filled_output, sound_specifier)</a></td>
<td class="summary">Patterned bottle rules.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#BannerProxy.is_banner">BannerProxy.is_banner (itemstack)</a></td>
<td class="summary">Rule's <code>input_constraint</code> function for banner.</td>
</tr>
@ -127,6 +135,10 @@
<td class="name" nowrap><a href="#BannerProxy.wash_banner">BannerProxy.wash_banner (old_itemstack, cauldron_node)</a></td>
<td class="summary">Rule's <code>output_specifier</code> function for obtaining washed banner.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#BannerProxy:add_banner_rules">BannerProxy:add_banner_rules (substance, sound_specifier)</a></td>
<td class="summary">Patterned banner rules.</td>
</tr>
</table>
<h2><a href="#Tables">Tables</a></h2>
<table class="function_list">
@ -524,6 +536,37 @@
</dd>
<dt>
<a name = "BucketProxy:add_bucket_rules"></a>
<strong>BucketProxy:add_bucket_rules (substance, filled_input, filled_output, sound_specifier)</strong>
</dt>
<dd>
Patterned bucket rules. </p>
<p> Buckets fill to full, empty from full.
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">substance</span>
string : substance shared between bucket and cauldron
</li>
<li><span class="parameter">filled_input</span>
string/function : filled bucket given to cauldron
</li>
<li><span class="parameter">filled_output</span>
string/function : filled bucket taken from cauldron
</li>
<li><span class="parameter">sound_specifier</span>
string/function : rule's sound specifier
</li>
</ul>
</dd>
<dt>
<a name = "BottleProxy.is_empty"></a>
@ -658,6 +701,37 @@
</dd>
<dt>
<a name = "BottleProxy:add_bottle_rules"></a>
<strong>BottleProxy:add_bottle_rules (substance, filled_input, filled_output, sound_specifier)</strong>
</dt>
<dd>
Patterned bottle rules. </p>
<p> Bottles fill by 1 level, drain by 1 level, not wasted on full cauldron.
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">substance</span>
string : substance shared between bottle and cauldron.
</li>
<li><span class="parameter">filled_input</span>
string/function : filled bottle given to cauldron
</li>
<li><span class="parameter">filled_output</span>
string/function : filled bottle taken from cauldron
</li>
<li><span class="parameter">sound_specifier</span>
string/function : rule's sound specifier
</li>
</ul>
</dd>
<dt>
<a name = "BannerProxy.is_banner"></a>
@ -713,6 +787,31 @@
</dd>
<dt>
<a name = "BannerProxy:add_banner_rules"></a>
<strong>BannerProxy:add_banner_rules (substance, sound_specifier)</strong>
</dt>
<dd>
Patterned banner rules. </p>
<p> Banner washed in cauldron, reduces by 1 level, may waste washing (blank banner washable)
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">substance</span>
string : substance consumed from cauldron
</li>
<li><span class="parameter">sound_specifier</span>
string/function : rule's sound specifier
</li>
</ul>
</dd>
</dl>
<h2 class="section-header "><a name="Tables"></a>Tables</h2>
@ -942,7 +1041,7 @@
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
<i style="float:right;">Last updated 2021-11-10 21:14:01 </i>
<i style="float:right;">Last updated 2021-11-12 11:20:21 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>

View File

@ -365,12 +365,28 @@ function BucketProxy.make_water(old_itemstack, cauldron_node)
end
end
-- full water cauldron + empty bucket -> empty cauldron, water bucket
BucketProxy:add_basic_rule("water", 3, BucketProxy.is_empty, nil, 0, "mcl_buckets:bucket_water", BucketProxy.sound_water)
-- any water cauldron + water bucket -> full water cauldron, empty bucket (may waste bucket)
BucketProxy:add_basic_rule("water", nil, BucketProxy.is_water, "water", true, "mcl_buckets:bucket_empty", BucketProxy.sound_water)
-- empty cauldron + water bucket -> full water cauldron, empty bucket
BucketProxy:add_basic_rule(nil, 0, BucketProxy.is_water, "water", true, "mcl_buckets:bucket_empty", BucketProxy.sound_water)
--- Patterned bucket rules.
--
-- Buckets fill to full, empty from full.
-- @param substance string : substance shared between bucket and cauldron
-- @param filled_input string/function : filled bucket given to cauldron
-- @param filled_output string/function : filled bucket taken from cauldron
-- @param sound_specifier string/function : rule's sound specifier
function BucketProxy:add_bucket_rules(substance, filled_input, filled_output, sound_specifier)
local empty = "mcl_buckets:bucket_empty"
local empty_output = "mcl_buckets:bucket_empty"
-- full stuff cauldron + empty bucket -> empty cauldron, full bucket
self:add_basic_rule(substance, true, empty, nil, 0, filled_output, sound_specifier)
-- any level stuff cauldron + stuff bucket -> full stuff cauldron, empty bucket (may waste bucket)
self:add_basic_rule(substance, nil, filled_input, substance, true, empty_output, sound_specifier)
-- empty cauldron + stuff bucket -> full stuff cauldron, empty bucket
self:add_basic_rule(nil, 0, filled_input, substance, true, empty_output, sound_specifier)
-- other combinations -> do nothing (no interaction)
end
BucketProxy:add_bucket_rules("water", BucketProxy.is_water, "mcl_buckets:bucket_water", BucketProxy.sound_water)
-------
@ -432,15 +448,30 @@ function BottleProxy.make_water(old_itemstack, cauldron_node)
return ItemStack("mcl_potions:water")
end
-- water cauldron + empty bottle -> water cauldron less 1, water bottle
BottleProxy:add_basic_rule("water", 3, BottleProxy.is_empty, "water", 2, BottleProxy.make_water, BottleProxy.sound_water)
BottleProxy:add_basic_rule("water", 2, BottleProxy.is_empty, "water", 1, BottleProxy.make_water, BottleProxy.sound_water)
BottleProxy:add_basic_rule("water", 1, BottleProxy.is_empty, nil, 0, BottleProxy.make_water, BottleProxy.sound_water)
-- empty cauldron + water bottle -> water cauldron 1, empty bottle
BottleProxy:add_basic_rule(nil, 0, BottleProxy.is_water, "water", 1, BottleProxy.make_empty, BottleProxy.sound_water)
-- water cauldron + water bottle -> water cauldron plus 1, empty bottle
BottleProxy:add_basic_rule("water", 1, BottleProxy.is_water, "water", 2, BottleProxy.make_empty, BottleProxy.sound_water)
BottleProxy:add_basic_rule("water", 2, BottleProxy.is_water, "water", 3, BottleProxy.make_empty, BottleProxy.sound_water)
--- Patterned bottle rules.
--
-- Bottles fill by 1 level, drain by 1 level, not wasted on full cauldron.
-- @param substance string : substance shared between bottle and cauldron.
-- @param filled_input string/function : filled bottle given to cauldron
-- @param filled_output string/function : filled bottle taken from cauldron
-- @param sound_specifier string/function : rule's sound specifier
function BottleProxy:add_bottle_rules(substance, filled_input, filled_output, sound_specifier)
local empty_input = self.is_empty
local empty_output = self.make_empty
-- stuff cauldron + empty bottle -> stuff cauldron less 1, water bottle
self:add_basic_rule(substance, 3, empty_input, substance, 2, filled_output, sound_specifier)
self:add_basic_rule(substance, 2, empty_input, substance, 1, filled_output, sound_specifier)
self:add_basic_rule(substance, 1, empty_input, nil, 0, filled_output, sound_specifier)
-- empty cauldron + stuff bottle -> stuff cauldron 1, empty bottle
self:add_basic_rule(nil, 0, filled_input, substance, 1, empty_output, sound_specifier)
-- stuff cauldron + stuff bottle -> stuff cauldron plus 1, empty bottle
self:add_basic_rule(substance, 1, filled_input, substance, 2, empty_output, sound_specifier)
self:add_basic_rule(substance, 2, filled_input, substance, 3, empty_output, sound_specifier)
-- full cauldron + stuff bottle -> do nothing (do not waste bottle)
end
BottleProxy:add_bottle_rules("water", BottleProxy.is_water, BottleProxy.make_water, BottleProxy.sound_water)
-------
@ -485,11 +516,20 @@ function BannerProxy.wash_banner(old_itemstack, cauldron_node)
return washed_itemstack
end
-- water cauldron any + banner -> water cauldron less 1, washed banner
BannerProxy:add_basic_rule("water", 3, BannerProxy.is_banner, "water", 2, BannerProxy.wash_banner, "mcl_potions_bottle_pour")
BannerProxy:add_basic_rule("water", 2, BannerProxy.is_banner, "water", 1, BannerProxy.wash_banner, "mcl_potions_bottle_pour")
BannerProxy:add_basic_rule("water", 1, BannerProxy.is_banner, nil, 0, BannerProxy.wash_banner, "mcl_potions_bottle_pour")
--- Patterned banner rules.
--
-- Banner washed in cauldron, reduces by 1 level, may waste washing (blank banner washable)
-- @param substance string : substance consumed from cauldron
-- @param sound_specifier string/function : rule's sound specifier
function BannerProxy:add_banner_rules(substance, sound_specifier)
self:add_basic_rule(substance, 3, self.is_banner, substance, 2, self.wash_banner, sound_specifier)
self:add_basic_rule(substance, 2, self.is_banner, substance, 1, self.wash_banner, sound_specifier)
self:add_basic_rule(substance, 1, self.is_banner, nil, 0, self.wash_banner, sound_specifier)
end
BannerProxy:add_banner_rules("water", "mcl_potions_bottle_pour")