From 971e666d3ed69096c0cfca7178be58094dd86340 Mon Sep 17 00:00:00 2001 From: bzoss Date: Sat, 16 May 2020 18:22:09 -0400 Subject: [PATCH 01/34] Initial commit to brewing formspec. --- mods/ITEMS/mcl_brewing/depends.txt | 7 + mods/ITEMS/mcl_brewing/init.lua | 235 ++++++++++++++++++ mods/ITEMS/mcl_brewing/locale/template.txt | 16 ++ mods/ITEMS/mcl_brewing/mod.conf | 1 + .../mcl_brewing/textures/mcl_brewing_base.png | Bin 0 -> 125 bytes .../textures/mcl_brewing_bottle_bg.png | Bin 0 -> 1165 bytes .../textures/mcl_brewing_fuel_bg.png | Bin 0 -> 250 bytes .../textures/mcl_brewing_inventory.png | Bin 0 -> 1491 bytes .../textures/mcl_brewing_potion_bg.png | Bin 0 -> 1172 bytes .../mcl_brewing/textures/mcl_brewing_side.png | Bin 0 -> 1353 bytes .../mcl_brewing/textures/mcl_brewing_top.png | Bin 0 -> 1606 bytes 11 files changed, 259 insertions(+) create mode 100755 mods/ITEMS/mcl_brewing/depends.txt create mode 100755 mods/ITEMS/mcl_brewing/init.lua create mode 100755 mods/ITEMS/mcl_brewing/locale/template.txt create mode 100755 mods/ITEMS/mcl_brewing/mod.conf create mode 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png create mode 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png create mode 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_potion_bg.png create mode 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png create mode 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png diff --git a/mods/ITEMS/mcl_brewing/depends.txt b/mods/ITEMS/mcl_brewing/depends.txt new file mode 100755 index 0000000000..4c84c72900 --- /dev/null +++ b/mods/ITEMS/mcl_brewing/depends.txt @@ -0,0 +1,7 @@ +mcl_init +mcl_formspec +mcl_sounds +mcl_potions +mcl_mobitems? +mcl_core? +screwdriver? diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua new file mode 100755 index 0000000000..6342364f45 --- /dev/null +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -0,0 +1,235 @@ +local S = minetest.get_translator("mcl_brewing") + +local MAX_NAME_LENGTH = 30 +local MAX_WEAR = 65535 +local SAME_TOOL_REPAIR_BOOST = math.ceil(MAX_WEAR * 0.12) -- 12% +local MATERIAL_TOOL_REPAIR_BOOST = { + math.ceil(MAX_WEAR * 0.25), -- 25% + math.ceil(MAX_WEAR * 0.5), -- 50% + math.ceil(MAX_WEAR * 0.75), -- 75% + MAX_WEAR, -- 100% +} +local NAME_COLOR = "#FFFF4C" + +local function get_brewing_stand_formspec() + + return "size[9,8.75]".. + "background[-0.19,-0.25;9.41,9.49;mcl_brewing_inventory.png]".. + "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. + "list[current_player;main;0,4.5;9,3;9]".. + mcl_formspec.get_itemslot_bg(0,4.5,9,3).. + "list[current_player;main;0,7.75;9,1;]".. + mcl_formspec.get_itemslot_bg(0,7.75,9,1).. + "list[current_name;fuel;0.5,1.75;1,1;]".. + mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]".. + "list[current_name;input;2.75,0.5;1,1;]".. + mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. + "list[context;stand;4.5,2.5;1,1;]".. + mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. + "list[context;stand;6,2.8;1,1;1]".. + mcl_formspec.get_itemslot_bg(6,2.8,1,1).."image[6,2.8;1,1;mcl_brewing_bottle_bg.png]".. + "list[context;stand;7.5,2.5;1,1;2]".. + mcl_formspec.get_itemslot_bg(7.5,2.5,1,1).."image[7.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. + + "listring[current_player;main]".. + "listring[current_name;fuel]".. + "listring[current_name;input]".. + -- "listring[context;stand1]".. + -- "listring[context;stand2]".. + "listring[context;stand]" +end + + +-- Given a tool and material stack, returns how many items of the material stack +-- needs to be used up to repair the tool. +local function get_consumed_materials(tool, material) + local wear = tool:get_wear() + if wear == 0 then + return 0 + end + local health = (MAX_WEAR - wear) + local matsize = material:get_count() + local materials_used = 0 + for m=1, math.min(4, matsize) do + materials_used = materials_used + 1 + if (wear - MATERIAL_TOOL_REPAIR_BOOST[m]) <= 0 then + break + end + end + return materials_used +end + +-- Given 2 input stacks, tells you which is the tool and which is the material. +-- Returns ("tool", input1, input2) if input1 is tool and input2 is material. +-- Returns ("material", input2, input1) if input1 is material and input2 is tool. +-- Returns nil otherwise. +local function distinguish_tool_and_material(input1, input2) + local def1 = input1:get_definition() + local def2 = input2:get_definition() + if def1.type == "tool" and def1._repair_material then + return "tool", input1, input2 + elseif def2.type == "tool" and def2._repair_material then + return "material", input2, input1 + else + return nil + end +end + + + +-- Drop input items of brewing_stand at pos with metadata meta +local function drop_brewing_stand_items(pos, meta) + + local inv = meta:get_inventory() + + local stack = inv:get_stack("fuel", 1) + if not stack:is_empty() then + local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} + minetest.add_item(p, stack) + end + + local stack = inv:get_stack("input", 1) + if not stack:is_empty() then + local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} + minetest.add_item(p, stack) + end + + for i=1, inv:get_size("stand") do + local stack = inv:get_stack("stand", i) + if not stack:is_empty() then + local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} + minetest.add_item(p, stack) + end + end +end + + + + +local brewing_standdef = { + groups = {pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1}, + tiles = {"mcl_brewing_top.png^[transformR90", "mcl_brewing_base.png", "mcl_brewing_side.png"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-8/16, 2/16, -5/16, 8/16, 8/16, 5/16}, -- top + {-5/16, -4/16, -2/16, 5/16, 5/16, 2/16}, -- middle + {-8/16, -8/16, -5/16, 8/16, -4/16, 5/16}, -- base + } + }, + sounds = mcl_sounds.node_sound_metal_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 5, + _mcl_after_falling = damage_brewing_stand_by_falling, + + after_dig_node = function(pos, oldnode, oldmetadata, digger) + local meta = minetest.get_meta(pos) + local meta2 = meta + meta:from_table(oldmetadata) + drop_brewing_stand_items(pos, meta) + meta:from_table(meta2:to_table()) + end, + + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + else + return stack:get_count() + end + end, + + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + else + return stack:get_count() + end + end, + -- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + -- local name = player:get_player_name() + -- if minetest.is_protected(pos, name) then + -- minetest.record_protection_violation(pos, name) + -- return 0 + -- end + -- end, + + on_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + minetest.get_node_timer(pos):start(1.0) + --some code here to enforce only potions getting placed on stands + end, + + on_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + end, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("fuel", 1) + inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) + local form = get_brewing_stand_formspec() + meta:set_string("formspec", form) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local sender_name = sender:get_player_name() + if minetest.is_protected(pos, sender_name) then + minetest.record_protection_violation(pos, sender_name) + return + end + + end, +} +if minetest.get_modpath("screwdriver") then + brewing_standdef.on_rotate = screwdriver.rotate_simple +end + +brewing_standdef.description = S("Brewing Stand") +brewing_standdef._doc_items_longdesc = S("The stand allows you to brew potions!") +brewing_standdef._doc_items_usagehelp = +S("To use an brewing_stand, rightclick it. An brewing_stand has 2 input slots (on the left) and one output slot.").."\n".. +S("To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.").."\n".. +S("There are two possibilities to repair tools (and armor):").."\n".. +S("• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.").."\n".. +S("• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.").."\n".. +S("Armor counts as a tool. It is possible to repair and rename a tool in a single step.").."\n\n".. +S("The brewing_stand has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the brewing_stand gets damaged. brewing_stand also have a chance of being damaged when they fall by more than 1 block. If a very damaged brewing_stand is damaged again, it is destroyed.") +brewing_standdef._tt_help = S("Repair and rename items") + +minetest.register_node("mcl_brewing:stand", brewing_standdef) + +if minetest.get_modpath("mcl_core") then + minetest.register_craft({ + output = "mcl_brewing:stand", + recipe = { + { "", "mcl_mobitems:blaze_rod", "" }, + { "mcl_core:stone_smooth", "mcl_core:stone_smooth", "mcl_core:stone_smooth" }, + } + }) +end + + +-- Legacy +minetest.register_lbm({ + label = "Update brewing_stand formspecs (0.60.0", + name = "mcl_brewing:update_formspec_0_60_0", + --nodenames = { "group:brewing_stand" }, + run_at_every_load = false, + action = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_brewing_stand_formspec()) + end, +}) diff --git a/mods/ITEMS/mcl_brewing/locale/template.txt b/mods/ITEMS/mcl_brewing/locale/template.txt new file mode 100755 index 0000000000..ebc741c005 --- /dev/null +++ b/mods/ITEMS/mcl_brewing/locale/template.txt @@ -0,0 +1,16 @@ +# textdomain: mcl_anvils +Set Name= +Repair and Name= +Inventory= +Anvil= +The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!= +To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.= +To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.= +There are two possibilities to repair tools (and armor):= +• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.= +• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.= +Armor counts as a tool. It is possible to repair and rename a tool in a single step.= +The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.= +Slightly Damaged Anvil= +Very Damaged Anvil= +Repair and rename items= diff --git a/mods/ITEMS/mcl_brewing/mod.conf b/mods/ITEMS/mcl_brewing/mod.conf new file mode 100755 index 0000000000..de164abf92 --- /dev/null +++ b/mods/ITEMS/mcl_brewing/mod.conf @@ -0,0 +1 @@ +name = mcl_brewing diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png new file mode 100755 index 0000000000000000000000000000000000000000..7e6440a57ebf4f5d2b279eae59b62ec06d329cec GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uFA^FIyyS0rlvo&)Qy0G z`kpS1Ar*|t4os23k`fY|!>kN8w6(DrY-nxsV-Vz)*df3YlEW0i>0;>o!b`=N!J?lp UfiGfC6HqIIr>mdKI;Vst004d*G5`Po literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c4fd2be15e5849c00ebadbe188f162e56cb4a9 GIT binary patch literal 1165 zcmds#ziO0G5XDbS2qv;oyI>H(Mp0}We1OOiX#br)c_vz(kVU}jqZK>SN!#vHaDcB6R2#d6+hT?3xWmu+V!N^rBw+gGYqAS#h z0SzTs?9mu)q|xGXwV|$A;hyf*{%A`T;gKHIcA;Q1!!tb#_ds#hE4reil^I#&id`t!jLIl-BxwSGi{k{1TcRWn zFu6?}Fku*nP$LF3H^G8~#%Lp5J)%C%HZ`l57(wEXwp3Zw103UTiZRii=NM8$jof>@ zBg$qR>GZUR;YJ=FdiVpY9gI#$^Eogj!o$;OHNM1u{(Ai4*@_Kc1vG(!!?Tybq*>D>&UBdiaeD`A?mNHFD0%aZU1{6X3YWnFR%m$K$w?D+S)in;lg VYTi|UCT)-#JYD@<);T3K0RY}WNXGyG literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png new file mode 100755 index 0000000000000000000000000000000000000000..c62c33b9d29263539c816c0156928d01341a8027 GIT binary patch literal 1491 zcmd6n`#aMM9LK+ggM`vUmPtGQsg|EFzoGGov20K#12rLVBLM4>3@l)_;+)JIE2vs zko*?`pIMPH4n^sg?sOn}1jB5C?Y@Q=I8FN-6OIN*Azl~`B$*a&72{5`_4oukN-p)5 zKAq`hhu3x`%acAyhaPoLzxG_*9LX*ej)M2Qk2I{EVn7ugky2~FzUD8^!cl;6)&!zM z9=7%69gs=pu=|7;%sHcgwF4Y|66v5dFcd<=#k%KPcP}8_`EOj7wK3q&_56GmE7wr{ zABo?j___@fZC1>rbc?-jh8akjr4H+7a3W~+fDHg4a^MO(8k)WZQ#=i zlPu-1@2pup@CpFWr@Blc7U$@nyOck_?7&keo0MVVUDtX@nK*l446^@RTL5mU_3`J6 zV$<%Cpf|Em@h*w%mP98YPLW7x#8~Um7%YR^)Lh&MuL=7Dp-7rTuL!*nuuG7FT!5o9-D&yu&Cv*glxli|-3|i!s6rGkk z7s_NzfhEJJy`y)U*3CP$-jIvj2$K{o8V_cWi1?N66H)JL_%za9er%$Y+o)(`SA?281J9KS$1MO{fBxqlht)N0@@O5xgzd_V|rnpZvP;Nd;M4po#@ZY zcKO}%j@{7Aon`_4J<2Vtx~Jss*y7-LpU!?Ic?wF%ZggC;ofk2v?Dil>vLDba9tu literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_potion_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_potion_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..818e41d4b8bf2c2adb942112951b8a7232753acc GIT binary patch literal 1172 zcmds#v1(OO5Jh)P2qv1CG8k+GK@e@`2UOm}1VRW&EYcaoDXaooiHMrY&L+kDfkhCT zKuQY>g(>m}qJLo_!a-xSkw&XJx!$H`Wkhw5_@gaVW@M2ocA;Q1Dx=7eqzM2njuSL) ziIP0P;Sa2KFghX4=fIQ*4^N}j_!9s5>&c6k*Q6Oe-`Uy)e)#Jx!Z{}AI7f$w%u78@p{QlwRUuSdY or<5xPcYhvDKiqhIaOu_e3p)S(^~dSv+)20Im~Krz-hcG=50BzPYXATM literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png new file mode 100755 index 0000000000000000000000000000000000000000..4203949c6f94bd44a6281a343e3d2e8399ebc77c GIT binary patch literal 1353 zcmV-P1-AN$P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvcI+q&{nsjb2?!yE?qy%Nlm%G(?}gH@IAK$z}|q*{{84C0EH8sHJX;KwUR;L6?s8u5l-9iLZkDrd3Dd->e0_HT zU{r-rEZHV322Ve{$bM(sis$%(m>?Tt#?!*sQ|#y*Ucfs?7wk-4a=C|sj9&`=g3*$* zKF4k%bYboAeD|Tm)5QaJz1P@#+gF#J2U4EaqK>7^5fnE-DRY`f3%C{IFk3>4SYiR_ z6>M&3g*dSVrkx#E&fK}pzHmW^&Nds+TU)G5S(IRtEix!@qj9%El2noiCJI;+i0v5* zPrqsUD;(juGBhp2*kJLY(KF$1+G(iwk-E$#o>(C+I}#9K4CclYS|Eh`!c-@|v(Zi7 zm>XgR4C;hAVu9IgyNONtE4O6wEYMTq$n5FPp)Lb}2)-4;AeS8*&!X(v1Zx8`aE#z5 zBXTRwZeV~_ZDs1OE_GVeUO^yjUBIxv3YvSc5o(!vv3VqJuLqW*vj^Fc?5W+rgQM z?3^9U4bDum*c58P8tWjZ@?Z=My2e&JpWJ;h_m($O_aolyE9PiW_cxfMLEU2Rk+&zT z)jUrWnFNhpI50KRQP{eaY$N_qkDvE;tL$`~9eUpb)S&>|mX5(UeePqXj-%+lSHF8B zxVyUPnr8%x#iZ&(+0vYa1!L>7=4Z}mc&k@0>9RIyd0+kp&?J|RY?xMhHKsW;4Gj#+ zD-2HW)gCs*FVQBq{^@3!k04(ius^JndeNbWC?2B9@&aeRM#P^ezUf0n{?kqe8urNh z(BAj-+leDhY+7l89~M;NZ&&2wEfq9Or}{%1Pk5&HyX^D+Lqji9_5_U16#H)5ZZEM4 z2S&f9?KTM7i$whnP4U+~U)r4t{T$d6FVq`8>kZ9Ya(p{8hkl!mXU#&b zlD!_SV)crxo`Ss;vHNL+> z7)~t>0Iaq61M2;{;RwDA0z?=>5a*h&E3kF0NlGe_!RDqsdTTbVMNx?CN$el@bIQi= zwa3u4iw$)%u6v|QLdIIXbZN_+J(pMpUo4$+_@x)o^cnXt^d*29Xg6Gf715lM00000 LNkvXXu0mjf(hGRv literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png new file mode 100755 index 0000000000000000000000000000000000000000..9c6e9bad58c438096d3e1f192f1c7ee0921a9222 GIT binary patch literal 1606 zcmV-M2D$l(P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?mh319{m&|92_ho896!&Q9nA6v6Ju3UNq4t2L%omCMKobyrGD8F)9S`xZoE}X3Bf)wy~KqTy3q;o^&wP-02dR;rr*)mMQUYOJYY(@<)zaq~@DXtAZP zvDT@(&fRzEp~s#UYm?P8Yj|PqXV!4CHW+i8p1fF7vB+TpM>*lanKEV_D&sO3(15ms zGZWA`JD3}snP@dB*eYwtgPe+kF=fy-wA^uV_hRlx-hka7@n)ZxgF)T@!5j?gCUc*> z-LO{EcB9Zn(8$7psiCfgt=pVz&_Aum=iZizj!G|Q1tM^v0J}6!98j5FTvHRsHC3#{+#j4|5#7T z@LKiM`?l7~qiYeCZ^Jcuu=VMgxWlN&4M)%nnSlP*W6tNbD(V``yC)EPtX@hwT-D3V zqNx`fbPW8#z>0_IwO-lsrAIfOab2DPPLQT&GvKCY?$|e`!+|S|2ktO|59`!6zT^KJ zrHfiv+y-8IaD3zTw=Fns5eyo_E$#V|HAN|v9%nxEYD{ylgyVDp`n`v{iCT{|(K<2n z*FProZXa}A@K;Eeq{?BEesV{9_`w}>UHd^9AAVYdr`+e?>c*vqySh=r6EX`SyiUM% z3CS{Nzj9^va9Z2s0m>U5F2N4((YXri3eK+syTK6+r9I^+eb$UEG4Wa32;bRa{vGf6951U z69E94oEQKA00(qQO+^Rf1qu)h2gs}C{{R31JV``BR5;6hlRb*VFc5{mghfaYFoCqG z+@{JE>@w+g&$oLA`vl1q(yH7dl`#yAm}a-K@L%#82{Z5c&CJv0bUHC0gz)FRXSdq{ zAR?rc@ZOVB;&3=1B6MB188}-;7z%&B3u26PT}R*dJfBZgl^7#)Oaz8M132d}vjt&X z1Mo2~P}K#=IY$VA5CS6dULb^!PczG8fVL?CsOoOLg|UOSDRIu_?`>03)ekP$_}+n; zQPq#^LRIPeo~nLeX6*O-Nt@fXe#fnhh1W0<5RqJ{s;KIO=$u<@VRemWwjdTov2e9I zgE{WEbG~1$@%w zDHmZWiXw}olwJz}e183AH^<`*jo?zc1d+j-&O9}zE{4FdC+jQ{`u07*qoM6N<$ Ef(vI7VE_OC literal 0 HcmV?d00001 From 572b43e93c1eed891e2f20f6ea01327b1f0e4ecd Mon Sep 17 00:00:00 2001 From: bzoss Date: Sat, 16 May 2020 19:15:34 -0400 Subject: [PATCH 02/34] Updated brewing stand node -- needs work. --- mods/ITEMS/mcl_brewing/init.lua | 10 +++++---- mods/ITEMS/mcl_brewing/locale/template.txt | 19 +++--------------- .../mcl_brewing/textures/mcl_brewing_base.png | Bin 125 -> 191 bytes .../textures/mcl_brewing_inventory.png | Bin 1491 -> 1190 bytes .../textures/mcl_brewing_plume.png | Bin 0 -> 1249 bytes .../mcl_brewing/textures/mcl_brewing_side.png | Bin 1353 -> 0 bytes .../mcl_brewing/textures/mcl_brewing_top.png | Bin 1606 -> 0 bytes 7 files changed, 9 insertions(+), 20 deletions(-) mode change 100755 => 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_plume.png delete mode 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png delete mode 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 6342364f45..dd7ba14e2c 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -108,7 +108,7 @@ end local brewing_standdef = { groups = {pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1}, - tiles = {"mcl_brewing_top.png^[transformR90", "mcl_brewing_base.png", "mcl_brewing_side.png"}, + tiles = {"mcl_brewing_base.png", "mcl_brewing_plume.png"}, paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -117,9 +117,11 @@ local brewing_standdef = { node_box = { type = "fixed", fixed = { - {-8/16, 2/16, -5/16, 8/16, 8/16, 5/16}, -- top - {-5/16, -4/16, -2/16, 5/16, 5/16, 2/16}, -- middle - {-8/16, -8/16, -5/16, 8/16, -4/16, 5/16}, -- base + --TODO: add bottle hangers + {-1/16, -6/16, -1/16, 1/16, 12/16, 1/16}, -- heat plume + { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base + {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base + {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base } }, sounds = mcl_sounds.node_sound_metal_defaults(), diff --git a/mods/ITEMS/mcl_brewing/locale/template.txt b/mods/ITEMS/mcl_brewing/locale/template.txt index ebc741c005..56cf672ac9 100755 --- a/mods/ITEMS/mcl_brewing/locale/template.txt +++ b/mods/ITEMS/mcl_brewing/locale/template.txt @@ -1,16 +1,3 @@ -# textdomain: mcl_anvils -Set Name= -Repair and Name= -Inventory= -Anvil= -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!= -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.= -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.= -There are two possibilities to repair tools (and armor):= -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.= -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.= -Armor counts as a tool. It is possible to repair and rename a tool in a single step.= -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.= -Slightly Damaged Anvil= -Very Damaged Anvil= -Repair and rename items= +# textdomain: mcl_brewing +Brewing Stand= +The brewing stand allows the creating of potions for the benefit of various effects. Stay tuned for developments, as you can only view the stand and interact with it, but not create potions. diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_base.png old mode 100755 new mode 100644 index 7e6440a57ebf4f5d2b279eae59b62ec06d329cec..8831ffb9b5217e3aceb2526ed2734a9dd91edd08 GIT binary patch delta 174 zcmV;f08#&azX6aKe*^;n008aX;!*$r01{A4R7HMtafg6>rI(PCiGy%#W@}+#yjw1V z0001JNklyY;yf@ItjDor7zQ!P2`rMCSKm7mCD50a9J9j`yU8wF!m-20G c4m+yj3*K`MW5R3Zy#N3J07*qoM6N<$f{fltNdN!< delta 107 zcmdnbSUW)?m5G^wfgx$G_$MI68Q>G*s;sQ6qoZSLYWh=4-3TbC@9E+gQo)$)z!VuQ zDIu{r%*tRxTN|6fhSoMe20?C#9Re&NIZP3pE{4u8yi|-CEc*Ep_#);s0ktxCy85}S Ib4q9e0FaOye*gdg diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png index c62c33b9d29263539c816c0156928d01341a8027..ee8fff1a66c03b5d20fd7da50c48d6d8b98c0dd0 100755 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^3xIeQ2OE&o({p|Xq&N#aB8wRq_>O=u<5X=vX$A(C z2u~Nskcv5P@18BZZ6MJ0FjbBBrBm5~)v=ASjn)(Vf>hrfNc9jeeR5XO?a;vw>?-04 zjQh^_q$!;|=%muZzhJ2g3&Vt&mtQVsw_P$M(FC`?7a_!@_-0U#s7* zuRrsCt#!gld%^S1H-D0^x0`?UWl7NYIo0?6-+Wj5y?j^y_pQ>G-1qy%@7=f0@2Y!} zv*4TgH}*-Uze!*At{*6Mf1_2f>Gdo3SFcHTsGs(#`kd|jUHSVq?kjt{aJ^=#Erat{ z-g9|dT92jY)Ot5w0t&QW^S^t1_v_{F&iie(G&T5J=6vhTYWr)~H`<-~87cBkV{<6a zo@BA8P0XOcIiRL8W7WBPFT+AjfB%>kmhN@!I%D!D|A5OTt8YnIRW7|c^YsVjf*iFM z^OhWcZ1}su-1qbP+|aAvznA~~^JmSUUDrzWrgz`T+rFf9!<=t-U+ps6yCdfM)>W(a z?cKX__xn73QuA8*RASnwpguU7 z_^oYIZ@&%O>2X?9DtOPlM{8@RM}1XX9{XWd-I&n&qV>@#9`>peB-3gKw zYI;qpSKX?)E1mS2(PGQu;`5z4_b>9ktt*zPICuU5*R8opP8oBSybI?EnHH#w_7f>0zIVWFp W({sjbjkXsclRaJiT-G@yGywnsMJb^G literal 1491 zcmd6n`#aMM9LK+ggM`vUmPtGQsg|EFzoGGov20K#12rLVBLM4>3@l)_;+)JIE2vs zko*?`pIMPH4n^sg?sOn}1jB5C?Y@Q=I8FN-6OIN*Azl~`B$*a&72{5`_4oukN-p)5 zKAq`hhu3x`%acAyhaPoLzxG_*9LX*ej)M2Qk2I{EVn7ugky2~FzUD8^!cl;6)&!zM z9=7%69gs=pu=|7;%sHcgwF4Y|66v5dFcd<=#k%KPcP}8_`EOj7wK3q&_56GmE7wr{ zABo?j___@fZC1>rbc?-jh8akjr4H+7a3W~+fDHg4a^MO(8k)WZQ#=i zlPu-1@2pup@CpFWr@Blc7U$@nyOck_?7&keo0MVVUDtX@nK*l446^@RTL5mU_3`J6 zV$<%Cpf|Em@h*w%mP98YPLW7x#8~Um7%YR^)Lh&MuL=7Dp-7rTuL!*nuuG7FT!5o9-D&yu&Cv*glxli|-3|i!s6rGkk z7s_NzfhEJJy`y)U*3CP$-jIvj2$K{o8V_cWi1?N66H)JL_%za9er%$Y+o)(`SA?281J9KS$1MO{fBxqlht)N0@@O5xgzd_V|rnpZvP;Nd;M4po#@ZY zcKO}%j@{7Aon`_4J<2Vtx~Jss*y7-LpU!?Ic?wF%ZggC;ofk2v?Dil>vLDba9tu diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_plume.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_plume.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb6dbbb75db0e6e8ea3c2d9995be2fbb54b2f24 GIT binary patch literal 1249 zcmds#%WIQS5XGkiqy`cd7na0=FEAiJ=+K3@X-bL-NC-`#bRoFVS-7Z*bx|#()*=d8 zK`C{F`ap1}P!ZfH6l#^iY!n0+RS*m=gl-gd|#N{d(ZsNneTd|el(XY zWQizOt5yc_yE&fD4Bn;vo0>!!Y8)FHKuN?zLZn1S ztjcPv9#A-I!lrD-=3vBCc41d`V@Fp|Lk!TM1Qzzt7}}7A7A|`jiW*BrOvJ+<+M-ew zHBk?{punc7n29;u0}5xwRouj34|xC+w-E>Y0|E{~4KYB25=X&-#?Xc|v^JcRTp)D#iHAk+n3kqzin>unt(g*-tIF6v<7EvM(VB$97022(uA*dk+Xxs!AIM5i{ zkoFi+oW?e4EXTwUB>bT*Dsztkrtt?wnrO^34Jn{f?lImJWiY06V%o`YASVwo{Dc(_ zQYT2`bHJ1k9z3O1=}Y|QuTvK%x`{eyY_Q%0#(%li8)|VyPvh*yv(=IFMEN)Ibj zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvcI+q&{nsjb2?!yE?qy%Nlm%G(?}gH@IAK$z}|q*{{84C0EH8sHJX;KwUR;L6?s8u5l-9iLZkDrd3Dd->e0_HT zU{r-rEZHV322Ve{$bM(sis$%(m>?Tt#?!*sQ|#y*Ucfs?7wk-4a=C|sj9&`=g3*$* zKF4k%bYboAeD|Tm)5QaJz1P@#+gF#J2U4EaqK>7^5fnE-DRY`f3%C{IFk3>4SYiR_ z6>M&3g*dSVrkx#E&fK}pzHmW^&Nds+TU)G5S(IRtEix!@qj9%El2noiCJI;+i0v5* zPrqsUD;(juGBhp2*kJLY(KF$1+G(iwk-E$#o>(C+I}#9K4CclYS|Eh`!c-@|v(Zi7 zm>XgR4C;hAVu9IgyNONtE4O6wEYMTq$n5FPp)Lb}2)-4;AeS8*&!X(v1Zx8`aE#z5 zBXTRwZeV~_ZDs1OE_GVeUO^yjUBIxv3YvSc5o(!vv3VqJuLqW*vj^Fc?5W+rgQM z?3^9U4bDum*c58P8tWjZ@?Z=My2e&JpWJ;h_m($O_aolyE9PiW_cxfMLEU2Rk+&zT z)jUrWnFNhpI50KRQP{eaY$N_qkDvE;tL$`~9eUpb)S&>|mX5(UeePqXj-%+lSHF8B zxVyUPnr8%x#iZ&(+0vYa1!L>7=4Z}mc&k@0>9RIyd0+kp&?J|RY?xMhHKsW;4Gj#+ zD-2HW)gCs*FVQBq{^@3!k04(ius^JndeNbWC?2B9@&aeRM#P^ezUf0n{?kqe8urNh z(BAj-+leDhY+7l89~M;NZ&&2wEfq9Or}{%1Pk5&HyX^D+Lqji9_5_U16#H)5ZZEM4 z2S&f9?KTM7i$whnP4U+~U)r4t{T$d6FVq`8>kZ9Ya(p{8hkl!mXU#&b zlD!_SV)crxo`Ss;vHNL+> z7)~t>0Iaq61M2;{;RwDA0z?=>5a*h&E3kF0NlGe_!RDqsdTTbVMNx?CN$el@bIQi= zwa3u4iw$)%u6v|QLdIIXbZN_+J(pMpUo4$+_@x)o^cnXt^d*29Xg6Gf715lM00000 LNkvXXu0mjf(hGRv diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png deleted file mode 100755 index 9c6e9bad58c438096d3e1f192f1c7ee0921a9222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1606 zcmV-M2D$l(P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?mh319{m&|92_ho896!&Q9nA6v6Ju3UNq4t2L%omCMKobyrGD8F)9S`xZoE}X3Bf)wy~KqTy3q;o^&wP-02dR;rr*)mMQUYOJYY(@<)zaq~@DXtAZP zvDT@(&fRzEp~s#UYm?P8Yj|PqXV!4CHW+i8p1fF7vB+TpM>*lanKEV_D&sO3(15ms zGZWA`JD3}snP@dB*eYwtgPe+kF=fy-wA^uV_hRlx-hka7@n)ZxgF)T@!5j?gCUc*> z-LO{EcB9Zn(8$7psiCfgt=pVz&_Aum=iZizj!G|Q1tM^v0J}6!98j5FTvHRsHC3#{+#j4|5#7T z@LKiM`?l7~qiYeCZ^Jcuu=VMgxWlN&4M)%nnSlP*W6tNbD(V``yC)EPtX@hwT-D3V zqNx`fbPW8#z>0_IwO-lsrAIfOab2DPPLQT&GvKCY?$|e`!+|S|2ktO|59`!6zT^KJ zrHfiv+y-8IaD3zTw=Fns5eyo_E$#V|HAN|v9%nxEYD{ylgyVDp`n`v{iCT{|(K<2n z*FProZXa}A@K;Eeq{?BEesV{9_`w}>UHd^9AAVYdr`+e?>c*vqySh=r6EX`SyiUM% z3CS{Nzj9^va9Z2s0m>U5F2N4((YXri3eK+syTK6+r9I^+eb$UEG4Wa32;bRa{vGf6951U z69E94oEQKA00(qQO+^Rf1qu)h2gs}C{{R31JV``BR5;6hlRb*VFc5{mghfaYFoCqG z+@{JE>@w+g&$oLA`vl1q(yH7dl`#yAm}a-K@L%#82{Z5c&CJv0bUHC0gz)FRXSdq{ zAR?rc@ZOVB;&3=1B6MB188}-;7z%&B3u26PT}R*dJfBZgl^7#)Oaz8M132d}vjt&X z1Mo2~P}K#=IY$VA5CS6dULb^!PczG8fVL?CsOoOLg|UOSDRIu_?`>03)ekP$_}+n; zQPq#^LRIPeo~nLeX6*O-Nt@fXe#fnhh1W0<5RqJ{s;KIO=$u<@VRemWwjdTov2e9I zgE{WEbG~1$@%w zDHmZWiXw}olwJz}e183AH^<`*jo?zc1d+j-&O9}zE{4FdC+jQ{`u07*qoM6N<$ Ef(vI7VE_OC From 228fc4b6ea2b3ff52fe6ef58a480a90eecbc8c60 Mon Sep 17 00:00:00 2001 From: bzoss Date: Tue, 19 May 2020 17:31:07 -0400 Subject: [PATCH 03/34] Updated node to add bottles. TODO: Update node for bottle placement. --- mods/ITEMS/mcl_brewing/init.lua | 39 +++++++++++++++++- .../textures/mcl_brewing_plume.png | Bin 1249 -> 0 bytes .../mcl_brewing/textures/mcl_brewing_side.png | Bin 0 -> 342 bytes .../mcl_brewing/textures/mcl_brewing_top.png | Bin 0 -> 403 bytes 4 files changed, 37 insertions(+), 2 deletions(-) delete mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_plume.png create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index dd7ba14e2c..4ba2b7e030 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -108,7 +108,12 @@ end local brewing_standdef = { groups = {pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1}, - tiles = {"mcl_brewing_base.png", "mcl_brewing_plume.png"}, + tiles = {"mcl_brewing_top.png", --top + "mcl_brewing_base.png", --bottom + "mcl_brewing_side.png", --right + "mcl_brewing_side.png", --left + "mcl_brewing_side.png", --back + "mcl_brewing_side.png^[transformFX"}, --front paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -118,10 +123,40 @@ local brewing_standdef = { type = "fixed", fixed = { --TODO: add bottle hangers - {-1/16, -6/16, -1/16, 1/16, 12/16, 1/16}, -- heat plume + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base + + {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 + {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 + {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 + {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 + {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 + + {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 + {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 + {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 + {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 + + + {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 + {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 + {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 + {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 + {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 + + {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 + {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 + {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 + {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 + + {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 + {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 + + {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 + {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 + {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 } }, sounds = mcl_sounds.node_sound_metal_defaults(), diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_plume.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_plume.png deleted file mode 100644 index 2fb6dbbb75db0e6e8ea3c2d9995be2fbb54b2f24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1249 zcmds#%WIQS5XGkiqy`cd7na0=FEAiJ=+K3@X-bL-NC-`#bRoFVS-7Z*bx|#()*=d8 zK`C{F`ap1}P!ZfH6l#^iY!n0+RS*m=gl-gd|#N{d(ZsNneTd|el(XY zWQizOt5yc_yE&fD4Bn;vo0>!!Y8)FHKuN?zLZn1S ztjcPv9#A-I!lrD-=3vBCc41d`V@Fp|Lk!TM1Qzzt7}}7A7A|`jiW*BrOvJ+<+M-ew zHBk?{punc7n29;u0}5xwRouj34|xC+w-E>Y0|E{~4KYB25=X&-#?Xc|v^JcRTp)D#iHAk+n3kqzin>unt(g*-tIF6v<7EvM(VB$97022(uA*dk+Xxs!AIM5i{ zkoFi+oW?e4EXTwUB>bT*Dsztkrtt?wnrO^34Jn{f?lImJWiY06V%o`YASVwo{Dc(_ zQYT2`bHJ1k9z3O1=}Y|QuTvK%x`{eyY_Q%0#(%li8)|VyPvh*yv(=IFMEN)IbjLk}*!hKoCXWAV-enkjjb`khp{ofUl5-f&-9CP|#6u zf^Yy%zyVC3^rrN>E8;mUo`de5fE6DLxF~`YOJMhOW20lg+2t4kRn>Mj6SSg> zV@)u*tZlosEzre@JlEe^M1k o43e1T@*RL)+GE&HjX-n$0hVQYo-Av_(f|Me07*qoM6N<$g5_wAqW}N^ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed94d460a248da9fc44e73762782d2e4b26d4e1 GIT binary patch literal 403 zcmV;E0c`$>P)Lk}*%hP!xqfh@>{H4E`IphB%Vo;N)*`F)@Y#1jIyQ zOc-$C4>&nU!f41N42GGBfq_wL7)W0pq(dD@AC#18@J#RJ-h1x3CnrS=9;&54c@opM zuuX&G>=EP1l)I;9YP&ZbM*uKiNB}NxN{lDdU2X9M%9Hrg$2N_fgTE@sSQ!BN{k~T7 zXM%9Rb!Yo4$R1jlwx!>DLkJNh)en-2L6rdEBre!_!oRU8J?V_p?e$eKU&x42xqJb~ zaU!V`LIk~TNB={E(*VBoG3}M>xqN}m#t@_7fLy*1$%JhhD}pdIC(bFoZb!3k!c$8= z#5-r_7n;OV%e9HcN}bVgz Date: Sat, 23 May 2020 16:39:55 -0400 Subject: [PATCH 04/34] Updated Formspec background. Established initial brewing timer framework. --- mods/ITEMS/mcl_brewing/init.lua | 291 ++++++++++++++---- .../textures/mcl_brewing_bubbles.png | Bin 0 -> 193 bytes .../textures/mcl_brewing_bubbles_active.png | Bin 0 -> 194 bytes .../textures/mcl_brewing_burner.png | Bin 0 -> 147 bytes .../textures/mcl_brewing_burner_active.png | Bin 0 -> 157 bytes .../textures/mcl_brewing_inventory.png | Bin 1190 -> 1033 bytes mods/ITEMS/mcl_potions/init.lua | 8 + 7 files changed, 244 insertions(+), 55 deletions(-) create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles.png create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles_active.png create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png create mode 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 4ba2b7e030..0e22b472fb 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -1,20 +1,12 @@ -local S = minetest.get_translator("mcl_brewing") - -local MAX_NAME_LENGTH = 30 -local MAX_WEAR = 65535 -local SAME_TOOL_REPAIR_BOOST = math.ceil(MAX_WEAR * 0.12) -- 12% -local MATERIAL_TOOL_REPAIR_BOOST = { - math.ceil(MAX_WEAR * 0.25), -- 25% - math.ceil(MAX_WEAR * 0.5), -- 50% - math.ceil(MAX_WEAR * 0.75), -- 75% - MAX_WEAR, -- 100% -} +local S = minetest.get_translator("mcl_brewing_stand") local NAME_COLOR = "#FFFF4C" -local function get_brewing_stand_formspec() +local function active_brewing_formspec(fuel_percent, item_percent) return "size[9,8.75]".. - "background[-0.19,-0.25;9.41,9.49;mcl_brewing_inventory.png]".. + "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png^[lowpart:".. + (item_percent)..":mcl_brewing_inventory_active.png]".. + -- "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory_active.png]".. "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. "list[current_player;main;0,4.5;9,3;9]".. mcl_formspec.get_itemslot_bg(0,4.5,9,3).. @@ -34,49 +26,230 @@ local function get_brewing_stand_formspec() "listring[current_player;main]".. "listring[current_name;fuel]".. "listring[current_name;input]".. - -- "listring[context;stand1]".. - -- "listring[context;stand2]".. "listring[context;stand]" end +local brewing_formspec = "size[9,8.75]".. + "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. + "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. + "list[current_player;main;0,4.5;9,3;9]".. + mcl_formspec.get_itemslot_bg(0,4.5,9,3).. + "list[current_player;main;0,7.75;9,1;]".. + mcl_formspec.get_itemslot_bg(0,7.75,9,1).. + "list[current_name;fuel;0.5,1.75;1,1;]".. + mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]".. + "list[current_name;input;2.75,0.5;1,1;]".. + mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. + "list[context;stand;4.5,2.5;1,1;]".. + mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. + "list[context;stand;6,2.8;1,1;1]".. + mcl_formspec.get_itemslot_bg(6,2.8,1,1).."image[6,2.8;1,1;mcl_brewing_bottle_bg.png]".. + "list[context;stand;7.5,2.5;1,1;2]".. + mcl_formspec.get_itemslot_bg(7.5,2.5,1,1).."image[7.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. --- Given a tool and material stack, returns how many items of the material stack --- needs to be used up to repair the tool. -local function get_consumed_materials(tool, material) - local wear = tool:get_wear() - if wear == 0 then + "image[2.7,3.33;1.28,0.41;mcl_brewing_burner.png^[lowpart:".. + (65)..":mcl_brewing_burner_active.png^[transformR270]".. + + "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png^[lowpart:".. + (65)..":mcl_brewing_bubbles_active.png]".. + + "listring[current_player;main]".. + "listring[current_name;fuel]".. + "listring[current_name;input]".. + "listring[context;stand]" + + +local function swap_node(pos, name) + local node = minetest.get_node(pos) + if node.name == name then + return + end + node.name = name + minetest.swap_node(pos, node) +end + + +local function brewing_stand_timer(pos, elapsed) + -- Inizialize metadata + local meta = minetest.get_meta(pos) + local fuel_time = meta:get_float("fuel_time") or 0 + local input_time = meta:get_float("input_time") or 0 + local input_item = meta:get_string("input_item") or "" + local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 + + local inv = meta:get_inventory() + local stand_list, fuellist + + local cookable, cooked + local fuel + + local update = true + + while update do + + update = false + + local formspec = brewing_formspec + + formspec = active_brewing_formspec(100,15) + + input_list = inv:get_list("input") + stand_list = inv:get_list("stand") + fuellist = inv:get_list("fuel") + + for i=1, inv:get_size("stand") do + local stack = inv:get_stack("stand", i) + print(stack:get_name()) + print(stack:get_count()) + end + + + -- Check if we have compatible alchemy + local aftercooked + cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = stand_list}) + cookable = cooked.time ~= 0 + + -- Check if src item has been changed + if stand_list[1]:get_name() ~= input_item then + -- Reset cooking progress in this case + input_time = 0 + input_item = stand_list[1]:get_name() + update = true + + -- Check if we have enough fuel to burn + elseif fuel_time < fuel_totaltime then + -- The furnace is currently active and has enough fuel + fuel_time = fuel_time + elapsed + -- If there is a cookable item then check if it is ready yet + if cookable then + -- Place result in dst list if done + if input_time >= cooked.time then + inv:add_item("stand", cooked.item) + inv:set_stack("input", 1, aftercooked.items[1]) + + input_time = 0 + update = true + end + + elseif input_time ~= 0 then + -- If output slot is occupied, stop cooking + input_time = 0 + update = true + end + else + -- Furnace ran out of fuel + if cookable then + -- We need to get new fuel + local afterfuel + fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) + + if fuel.time == 0 then + -- No valid fuel in fuel list + fuel_totaltime = 0 + input_time = 0 + else + -- Take fuel from fuel list + inv:set_stack("fuel", 1, afterfuel.items[1]) + update = true + fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) + input_time = input_time + elapsed + end + else + -- We don't need to get new fuel since there is no cookable item + fuel_totaltime = 0 + input_time = 0 + end + fuel_time = 0 + end + + elapsed = 0 + end + + if fuel and fuel_totaltime > fuel.time then + fuel_totaltime = fuel.time + end + if stand_list[1]:is_empty() then + input_time = 0 + end + + -- + -- Update formspec and node + -- + local formspec = brewing_formspec + formspec = active_brewing_formspec(100,85) + local item_state + local item_percent = 0 + + if cookable then + item_percent = math.floor(input_time / cooked.time * 100) + end + + local result = false + + if fuel_totaltime ~= 0 then + local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) + formspec = active_brewing_formspec(fuel_percent, item_percent) + swap_node(pos, "mcl_brewing:stand_active") + -- make sure timer restarts automatically + result = true + else + swap_node(pos, "mcl_brewing:stand") + -- stop timer on the inactive stand + minetest.get_node_timer(pos):stop() + end + + -- + -- Set meta values + -- + meta:set_float("fuel_totaltime", fuel_totaltime) + meta:set_float("fuel_time", fuel_time) + meta:set_float("input_time", input_time) + meta:set_string("input_item", stand_list[1]:get_name()) + meta:set_string("formspec", formspec) + + return result +end + + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) return 0 end - local health = (MAX_WEAR - wear) - local matsize = material:get_count() - local materials_used = 0 - for m=1, math.min(4, matsize) do - materials_used = materials_used + 1 - if (wear - MATERIAL_TOOL_REPAIR_BOOST[m]) <= 0 then - break + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if listname == "fuel" then + + -- Test stack with size 1 because we burn one fuel at a time + local teststack = ItemStack(stack) + teststack:set_count(1) + local output, decremented_input = minetest.get_craft_result({method="fuel", width=1, items={teststack}}) + if output.time ~= 0 then + -- Only allow to place 1 item if fuel get replaced by recipe. + -- This is the case for lava buckets. + local replace_item = decremented_input.items[1] + if replace_item:is_empty() then + -- For most fuels, just allow to place everything + return stack:get_count() + else + if inv:get_stack(listname, index):get_count() == 0 then + return 1 + else + return 0 + end + end + else + return 0 end - end - return materials_used -end - --- Given 2 input stacks, tells you which is the tool and which is the material. --- Returns ("tool", input1, input2) if input1 is tool and input2 is material. --- Returns ("material", input2, input1) if input1 is material and input2 is tool. --- Returns nil otherwise. -local function distinguish_tool_and_material(input1, input2) - local def1 = input1:get_definition() - local def2 = input2:get_definition() - if def1.type == "tool" and def1._repair_material then - return "tool", input1, input2 - elseif def2.type == "tool" and def2._repair_material then - return "material", input2, input1 - else - return nil + elseif listname == "input" then + return stack:get_count() + elseif listname == "stand" then + return 0 end end - -- Drop input items of brewing_stand at pos with metadata meta local function drop_brewing_stand_items(pos, meta) @@ -106,7 +279,7 @@ end -local brewing_standdef = { +local brewing_stand_def = { groups = {pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1}, tiles = {"mcl_brewing_top.png", --top "mcl_brewing_base.png", --bottom @@ -191,6 +364,7 @@ local brewing_standdef = { return stack:get_count() end end, + -- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) -- local name = player:get_player_name() -- if minetest.is_protected(pos, name) then @@ -217,7 +391,7 @@ local brewing_standdef = { inv:set_size("stand", 3) -- inv:set_size("stand2", 1) -- inv:set_size("stand3", 1) - local form = get_brewing_stand_formspec() + local form = brewing_formspec meta:set_string("formspec", form) end, @@ -227,16 +401,19 @@ local brewing_standdef = { minetest.record_protection_violation(pos, sender_name) return end - end, + + on_timer = brewing_stand_timer, } + + if minetest.get_modpath("screwdriver") then - brewing_standdef.on_rotate = screwdriver.rotate_simple + brewing_stand_def.on_rotate = screwdriver.rotate_simple end -brewing_standdef.description = S("Brewing Stand") -brewing_standdef._doc_items_longdesc = S("The stand allows you to brew potions!") -brewing_standdef._doc_items_usagehelp = +brewing_stand_def.description = S("Brewing Stand") +brewing_stand_def._doc_items_longdesc = S("The stand allows you to brew potions!") +brewing_stand_def._doc_items_usagehelp = S("To use an brewing_stand, rightclick it. An brewing_stand has 2 input slots (on the left) and one output slot.").."\n".. S("To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.").."\n".. S("There are two possibilities to repair tools (and armor):").."\n".. @@ -244,9 +421,13 @@ S("• Tool + Tool: Place two tools of the same type in the input slots. The “ S("• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.").."\n".. S("Armor counts as a tool. It is possible to repair and rename a tool in a single step.").."\n\n".. S("The brewing_stand has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the brewing_stand gets damaged. brewing_stand also have a chance of being damaged when they fall by more than 1 block. If a very damaged brewing_stand is damaged again, it is destroyed.") -brewing_standdef._tt_help = S("Repair and rename items") +brewing_stand_def._tt_help = S("Repair and rename items") -minetest.register_node("mcl_brewing:stand", brewing_standdef) +minetest.register_node("mcl_brewing:stand", brewing_stand_def) + +local brewing_stand_active_def = brewing_stand_def +brewing_stand_active_def.light_source = 8 +minetest.register_node("mcl_brewing:stand_active", brewing_stand_active_def) if minetest.get_modpath("mcl_core") then minetest.register_craft({ @@ -267,6 +448,6 @@ minetest.register_lbm({ run_at_every_load = false, action = function(pos, node) local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_brewing_stand_formspec()) + meta:set_string("formspec", brewing_formspec) end, }) diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles.png new file mode 100644 index 0000000000000000000000000000000000000000..780352408fffc2731422e4d54013eb8674de0253 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^d_XME!3HF+ANuniNO2Z;L>2?ZkAN`aRBb+KpkT45 zi(`mI@6$2dx`fogckvDtPBMt%Q)%UVwZiaQJ2?}Pn-Z|1R|+3ydu zw+jerAOFra|H%#6Y4P=CTe{c&Txx%0@=Ti-8K176^*t}KaN4XICby>k^{YPc&FZ*z o_fY)VOJ;}O*vT0`w@R~MT*jR%>~?o^6wrDGPgg&ebxsLQ04&8yumAu6 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles_active.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles_active.png new file mode 100644 index 0000000000000000000000000000000000000000..2a367807ac6d5024ee9a392ede39401ffc9c2c55 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^d_XME!3HF+ANuniNO2Z;L>2?ZkAN`aRBb+KpkRro zi(`mI@6$<+d<_O1EaLJ<|DXRGVr%Ny$T6k)*iNRCMhqo~&TKZ>;=w3OnQe pZqpjkLq)gP?!GaaXLXQIyoCO|{#S9F5M?jcysy3fAP|(%W z#W6%;>f4Kkj0Y414jlL`<;>1Ep@k)9!5iy~WeF)c$5MP8($ua*9h6W`I%%o?VsGoCO|{#S9F5M?jcysy3fAP|)Ag z#W6%;>f4JOIU5W_7%qxeADlZ!X)lMLN(XZaXStBfgJ@S>9o@a3*6m>t6r51Zwsgvr zRW{c+dv5d1THdns{kspxAX!0n03%pQb^{Z3 z6y3p%`?_4Vv571{IH!sMkJc}2MW5tAIs^b#X1CkL>NZ8&Q?xlnyH(p$v`dfrL0|d_ z=;~{#elPv~_xUq-2U2RDi2MCsG#|g;@5OGni`8@0^Uc@R?|)bSrv7+ayF>cetkYJn zt*?*jlUY{;H&1NajMMj;NB8^M9n#;vI*)4prv6f`dIoIHQf<#w&*$!2Q(s@}meALn zRy_cRY8#yOXd4=zQ)^oaY~88{VAuMo{&;=;RDbQGHXjYlX1hb$Y^&eb*Sx50HBV4kmcMGF>*Q^%&R8!$ z0Q+Ww`boOoZle!)S(bm>jxolMkB{*6^;INZ84F4bcFwWZwx;SkQ}a|q$T$a>}y z$d>Dnz}BKs1h352qEQ5|P*-Gy5W@9(4I!*68b$DmEG-(pzrR;eheWm(jUsr3=8nb? z)*1CAuz$1&&Q(VQFT~cOQ3S8h+!4IiIwUYOvU1fC!7pZO(I|pfXzpkX!7lh^<%%p3 zOslO$V_%*9elLQTs%_Rd91h`fxfE5TttlFFydN^?i?mejq>SL-^ka;FQgr5#-puHc zqi;E-`2Iv$mf?E6wjR?ELO7jH*=D2^?&N8^)tA7BlvtickYrI zq548~eQ~{3F~<1$`I#+(r{0~WdOwT!T4q<=)@Hs{55APD2o4>`q>A98C{}UIW*>lE zJG$z*5M1o6`x#t=cBecrG){8&YYM3%Ye=0O$1K(R$+8RXGIU25V~lTaZ<`p1Ihg%M zsDFN9o44cf_;)aFX%@^;Bgafz)yh$4GOrZDx#S#xDTrWZHR~>T%tckZV3HHT>51SG zL@=|*TGvHWpSpcsjA{Nl>gI`HW;N#1y&`yhzMBg`*iOd{Q;9f1UDHVgb@A(Jg}Ym`?_WH P00000NkvXXu0mjf1>fRr delta 1079 zcmV-71jze|2&M^;IDZ6KNkl5QgDpCJpIAcEGD$fn9++kWNx1?!aY8 z7j@*#Ax6T%@CPIpAOXJ5jAkOq!9pa251^$)1OSkk)9Iw{7NhMLZN_NVwH>2fjOZTp zy`O-gzFPHr@2`K%@2xvv$v+X#=d2y-}oO|B?*?;bR_jkIF_q7|+N54*A zy}rIq)kk7O5$vDXz8PoiXQu9twHwmku{u*V*VNyutY<)fmg;-XJ)gR7zOlY`?V+zJ zWjz2x^$pH$w1viJY<)|C(q%mWht^Ns$GhvN?$1uOIW;i-c0=0it3TG)u|CZCSrqOl zvsDbdV-{Mn1Ahhp006)yB$%qs-sx6VHT(FMR%c4q*8yYlPf*h|tJ)Ykd8O5v>+l0` zY$oWQq{rhi`+zr1^RI1H)%W*z`TYE>{JPe4E|-hkZnva$u$=bY>bf?)xLnt@s;a)d zy{WtJZZYbd&*!9dkO6nnsPiAwr?H_E;?_*6sut^~Qh(|kehp|zRdr}_?@r{B#eeB_ zU_ey|*ID|*BC<-W10(Ka3~`I~wI{5!I;;T=4MkSlwsO5*MdWW}Ex80zavc~bEgFg7 z%#;?5L~w?NB1=T%e!q)IUeQPdXJl{D`2GEzMV&*i{x#H4jgq2~2sTpJwLTt?O4a5! z17o(1Mt_k!qrP}+-=(27_7uUX>JY&@QCc(-!I8OWwrq3j2+p<6;kanAjONhDN>zsl z-Z{&`CsJNC62TeTIvPdT1s_(b$RdI>#D!?vI(1zW!J$%Kh<5e-$J(})+wE4lNXsc2 zQ@ozyt$mkT^&zKS@S1+i@ynt!Q${mmgjIci=6{RvHN_AX-=AojM(+1}?=ck-xm+&E zW+aQ(ljKWDOFQZgs%3O`FF>b?WlKMOAC2Ja^*Xpq#td$zQeFN9Xn&^b-cK3Ls;VC! zAITy(_U_c`_3YwnnL`7iGdnFFeEtT+-S^thhKpbsI3_NFtE$?3-5X-_0XVdybI*w^ z-+$2!?S69{c+St@3fi4wLTH?%?pF*}krh%W#WAybJxO-KLqd0Ss;Vz9FGUQ*6qx;H zaPL_Ec0Ql~4aOz!=#Wb-sb|*|o1RoNt*e!yPBgJ1IAo_A<0Dynka7T8IBW!`{Pi4m zELH?}2lA2RHUnUo&;uYE0002&&L4c)Ntl}`hUfqQ002ovPDHLkV1j`mDGvYu diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 5123d8b741..dd863075e6 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -279,6 +279,14 @@ minetest.register_craftitem("mcl_potions:potion_mundane", { on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), }) + +minetest.register_craft({ + type = "cooking", + output = "mcl_potions:potion_awkward", +recipe = "mcl_nether:nether_wart_item", --"mcl_potions:potion_river_water"}, + cooktime = 10, +}) + minetest.register_craftitem("mcl_potions:potion_thick", { description = S("Thick Potion"), _tt_help = S("No effect"), From 5c4cc99621439428f1d487abe99350da125c8e8d Mon Sep 17 00:00:00 2001 From: bzoss Date: Mon, 25 May 2020 09:08:37 -0400 Subject: [PATCH 05/34] Fixed for burning only blaze powder. --- mods/ITEMS/mcl_brewing/depends.txt | 2 +- mods/ITEMS/mcl_brewing/init.lua | 165 +++++++++++++---------------- mods/ITEMS/mcl_mobitems/init.lua | 7 +- 3 files changed, 78 insertions(+), 96 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/depends.txt b/mods/ITEMS/mcl_brewing/depends.txt index 4c84c72900..73f7dce829 100755 --- a/mods/ITEMS/mcl_brewing/depends.txt +++ b/mods/ITEMS/mcl_brewing/depends.txt @@ -2,6 +2,6 @@ mcl_init mcl_formspec mcl_sounds mcl_potions -mcl_mobitems? +mcl_mobitems mcl_core? screwdriver? diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 0e22b472fb..4b0a975a5c 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -4,8 +4,7 @@ local NAME_COLOR = "#FFFF4C" local function active_brewing_formspec(fuel_percent, item_percent) return "size[9,8.75]".. - "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png^[lowpart:".. - (item_percent)..":mcl_brewing_inventory_active.png]".. + "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. -- "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory_active.png]".. "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. "list[current_player;main;0,4.5;9,3;9]".. @@ -23,6 +22,12 @@ local function active_brewing_formspec(fuel_percent, item_percent) "list[context;stand;7.5,2.5;1,1;2]".. mcl_formspec.get_itemslot_bg(7.5,2.5,1,1).."image[7.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. + "image[2.7,3.33;1.28,0.41;mcl_brewing_burner.png^[lowpart:".. + (100-fuel_percent)..":mcl_brewing_burner_active.png^[transformR270]".. + + "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png^[lowpart:".. + (item_percent)..":mcl_brewing_bubbles_active.png]".. + "listring[current_player;main]".. "listring[current_name;fuel]".. "listring[current_name;input]".. @@ -47,11 +52,8 @@ local brewing_formspec = "size[9,8.75]".. "list[context;stand;7.5,2.5;1,1;2]".. mcl_formspec.get_itemslot_bg(7.5,2.5,1,1).."image[7.5,2.5;1,1;mcl_brewing_bottle_bg.png]".. - "image[2.7,3.33;1.28,0.41;mcl_brewing_burner.png^[lowpart:".. - (65)..":mcl_brewing_burner_active.png^[transformR270]".. - - "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png^[lowpart:".. - (65)..":mcl_brewing_bubbles_active.png]".. + "image[2.7,3.33;1.28,0.41;mcl_brewing_burner.png^[transformR270]".. + "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png]".. "listring[current_player;main]".. "listring[current_name;fuel]".. @@ -73,14 +75,17 @@ local function brewing_stand_timer(pos, elapsed) -- Inizialize metadata local meta = minetest.get_meta(pos) local fuel_time = meta:get_float("fuel_time") or 0 - local input_time = meta:get_float("input_time") or 0 + -- local input_time = meta:get_float("input_time") or 0 local input_item = meta:get_string("input_item") or "" local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - local inv = meta:get_inventory() - local stand_list, fuellist + local stand_timer = {0,0,0} + local stand_item = {"","",""} - local cookable, cooked + local inv = meta:get_inventory() + local stand_list, fuel_list + + local brewable, brewed local fuel local update = true @@ -89,77 +94,53 @@ local function brewing_stand_timer(pos, elapsed) update = false - local formspec = brewing_formspec - - formspec = active_brewing_formspec(100,15) - input_list = inv:get_list("input") stand_list = inv:get_list("stand") - fuellist = inv:get_list("fuel") - - for i=1, inv:get_size("stand") do - local stack = inv:get_stack("stand", i) - print(stack:get_name()) - print(stack:get_count()) - end + fuel_list = inv:get_list("fuel") - -- Check if we have compatible alchemy - local aftercooked - cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = stand_list}) - cookable = cooked.time ~= 0 + --TODO check if the stands have changed items - -- Check if src item has been changed - if stand_list[1]:get_name() ~= input_item then - -- Reset cooking progress in this case - input_time = 0 - input_item = stand_list[1]:get_name() - update = true + if fuel_time < fuel_totaltime then - -- Check if we have enough fuel to burn - elseif fuel_time < fuel_totaltime then - -- The furnace is currently active and has enough fuel fuel_time = fuel_time + elapsed - -- If there is a cookable item then check if it is ready yet - if cookable then - -- Place result in dst list if done - if input_time >= cooked.time then - inv:add_item("stand", cooked.item) - inv:set_stack("input", 1, aftercooked.items[1]) - input_time = 0 - update = true - end + --TODO check to see if we can brew - elseif input_time ~= 0 then - -- If output slot is occupied, stop cooking - input_time = 0 - update = true - end - else - -- Furnace ran out of fuel - if cookable then - -- We need to get new fuel - local afterfuel - fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) + else --get more fuel from fuel_list - if fuel.time == 0 then - -- No valid fuel in fuel list - fuel_totaltime = 0 - input_time = 0 - else - -- Take fuel from fuel list - inv:set_stack("fuel", 1, afterfuel.items[1]) - update = true - fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) - input_time = input_time + elapsed - end - else - -- We don't need to get new fuel since there is no cookable item + local after_fuel + + -- for i=1, inv:get_size("stand") do + -- local stack = inv:get_stack("stand", i) + -- print(stack:get_name()) + -- print(stack:get_count()) + -- end + print(inv:get_stack("fuel",1):get_name()) + + fuel, after_fuel = minetest.get_craft_result({method="fuel", width=1, items=fuel_list}) + + if fuel.time == 0 then --no valid fuel, reset timers fuel_totaltime = 0 - input_time = 0 + + for i=1, inv:get_size("stand", i) do + stand_timer[i] = 0 + end + + fuel_totaltime = 0 + for i=1, inv:get_size("stand", i) do + stand_timer[i] = 0 + end + -- only allow blaze powder fuel + elseif inv:get_stack("fuel",1):get_name() == "mcl_mobitems:blaze_powder" then -- Grab another fuel + inv:set_stack("fuel", 1, after_fuel.items[1]) + update = true + fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) + for i=1, inv:get_size("stand", i) do + stand_timer[i] = stand_timer[i] + elapsed + end end - fuel_time = 0 + end elapsed = 0 @@ -168,43 +149,33 @@ local function brewing_stand_timer(pos, elapsed) if fuel and fuel_totaltime > fuel.time then fuel_totaltime = fuel.time end - if stand_list[1]:is_empty() then - input_time = 0 + + for i=1, inv:get_size("stand", i) do + if stand_list[i]:is_empty() then + stand_timer[i] = 0 + end end - -- - -- Update formspec and node - -- + --update formspec local formspec = brewing_formspec - formspec = active_brewing_formspec(100,85) - local item_state - local item_percent = 0 - - if cookable then - item_percent = math.floor(input_time / cooked.time * 100) - end local result = false if fuel_totaltime ~= 0 then - local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) - formspec = active_brewing_formspec(fuel_percent, item_percent) + local fuel_percent = math.floor(fuel_time/fuel_totaltime*100) + formspec = active_brewing_formspec(fuel_percent, 60) swap_node(pos, "mcl_brewing:stand_active") - -- make sure timer restarts automatically result = true else swap_node(pos, "mcl_brewing:stand") - -- stop timer on the inactive stand minetest.get_node_timer(pos):stop() end - -- - -- Set meta values - -- + meta:set_float("fuel_totaltime", fuel_totaltime) meta:set_float("fuel_time", fuel_time) - meta:set_float("input_time", input_time) - meta:set_string("input_item", stand_list[1]:get_name()) + -- meta:set_float("src_time", src_time) + -- meta:set_string("src_item", srclist[1]:get_name()) meta:set_string("formspec", formspec) return result @@ -277,10 +248,13 @@ local function drop_brewing_stand_items(pos, meta) end - +local on_rotate +if minetest.get_modpath("screwdriver") then + on_rotate = screwdriver.rotate_simple +end local brewing_stand_def = { - groups = {pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1}, + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1}, tiles = {"mcl_brewing_top.png", --top "mcl_brewing_base.png", --bottom "mcl_brewing_side.png", --right @@ -295,7 +269,7 @@ local brewing_stand_def = { node_box = { type = "fixed", fixed = { - --TODO: add bottle hangers + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base @@ -404,6 +378,7 @@ local brewing_stand_def = { end, on_timer = brewing_stand_timer, + on_rotate = on_rotate, } @@ -427,6 +402,8 @@ minetest.register_node("mcl_brewing:stand", brewing_stand_def) local brewing_stand_active_def = brewing_stand_def brewing_stand_active_def.light_source = 8 +brewing_stand_active_def.drop = "mcl_brewing:stand" +brewing_stand_active_def.groups = {not_in_creative_inventory=1, pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1} minetest.register_node("mcl_brewing:stand_active", brewing_stand_active_def) if minetest.get_modpath("mcl_core") then diff --git a/mods/ITEMS/mcl_mobitems/init.lua b/mods/ITEMS/mcl_mobitems/init.lua index 3e6aef4853..0b4d47e0de 100644 --- a/mods/ITEMS/mcl_mobitems/init.lua +++ b/mods/ITEMS/mcl_mobitems/init.lua @@ -428,6 +428,12 @@ minetest.register_craft({ burntime = 120, }) +minetest.register_craft({ + type = "fuel", + recipe = "mcl_mobitems:blaze_powder", + burntime = 120, +}) + minetest.register_craft({ output = 'mcl_mobitems:slimeball 9', recipe = {{"mcl_core:slimeblock"}}, @@ -439,4 +445,3 @@ minetest.register_craft({ {"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}, {"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}}, }) - From 190eb32ac2d4bc8125b84e4efad6bc8acbb52bb4 Mon Sep 17 00:00:00 2001 From: bzoss Date: Mon, 25 May 2020 09:28:23 -0400 Subject: [PATCH 06/34] Update brew timer...will reset if any bottle is changed --- mods/ITEMS/mcl_brewing/init.lua | 51 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 4b0a975a5c..434309d164 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -74,16 +74,18 @@ end local function brewing_stand_timer(pos, elapsed) -- Inizialize metadata local meta = minetest.get_meta(pos) + local fuel_time = meta:get_float("fuel_time") or 0 - -- local input_time = meta:get_float("input_time") or 0 - local input_item = meta:get_string("input_item") or "" local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - local stand_timer = {0,0,0} - local stand_item = {"","",""} + local input_item = meta:get_string("input_item") or "" + + local stand_timer = meta:get_float("stand_timer") or 0 + local stand_items = meta:get_string("stand_items") or {"","",""} local inv = meta:get_inventory() - local stand_list, fuel_list + + local input_list, stand_list, fuel_list local brewable, brewed local fuel @@ -98,8 +100,14 @@ local function brewing_stand_timer(pos, elapsed) stand_list = inv:get_list("stand") fuel_list = inv:get_list("fuel") - - --TODO check if the stands have changed items + -- TODO fix this function to check for change in stand content... + -- for i=1, inv:get_size("stand", i) do -- reset the process due to change + -- if stand_list[i]:get_name() ~= stand_list[i] then + -- stand_timer = 0 + -- stand_list[i] = stand_list[i]:get_name() + -- update = true -- need to update the stand with new data + -- end + -- end if fuel_time < fuel_totaltime then @@ -111,34 +119,23 @@ local function brewing_stand_timer(pos, elapsed) local after_fuel - -- for i=1, inv:get_size("stand") do - -- local stack = inv:get_stack("stand", i) - -- print(stack:get_name()) - -- print(stack:get_count()) - -- end - print(inv:get_stack("fuel",1):get_name()) + -- print(inv:get_stack("fuel",1):get_name()) fuel, after_fuel = minetest.get_craft_result({method="fuel", width=1, items=fuel_list}) if fuel.time == 0 then --no valid fuel, reset timers - fuel_totaltime = 0 - - for i=1, inv:get_size("stand", i) do - stand_timer[i] = 0 - end fuel_totaltime = 0 - for i=1, inv:get_size("stand", i) do - stand_timer[i] = 0 - end + stand_timer = 0 + -- only allow blaze powder fuel elseif inv:get_stack("fuel",1):get_name() == "mcl_mobitems:blaze_powder" then -- Grab another fuel inv:set_stack("fuel", 1, after_fuel.items[1]) + update = true + fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) - for i=1, inv:get_size("stand", i) do - stand_timer[i] = stand_timer[i] + elapsed - end + stand_timer = stand_timer + elapsed end end @@ -152,7 +149,7 @@ local function brewing_stand_timer(pos, elapsed) for i=1, inv:get_size("stand", i) do if stand_list[i]:is_empty() then - stand_timer[i] = 0 + stand_timer = 0 end end @@ -174,8 +171,8 @@ local function brewing_stand_timer(pos, elapsed) meta:set_float("fuel_totaltime", fuel_totaltime) meta:set_float("fuel_time", fuel_time) - -- meta:set_float("src_time", src_time) - -- meta:set_string("src_item", srclist[1]:get_name()) + meta:set_float("stand_timer", stand_timer) + -- meta:set_string("stand_items", stand_list) meta:set_string("formspec", formspec) return result From 0df8bb94f90150912e0b91841e93fc448686fe77 Mon Sep 17 00:00:00 2001 From: bzoss Date: Mon, 25 May 2020 09:29:23 -0400 Subject: [PATCH 07/34] Remove "active" stand node definition --- mods/ITEMS/mcl_brewing/init.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 434309d164..c535831f96 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -397,11 +397,11 @@ brewing_stand_def._tt_help = S("Repair and rename items") minetest.register_node("mcl_brewing:stand", brewing_stand_def) -local brewing_stand_active_def = brewing_stand_def -brewing_stand_active_def.light_source = 8 -brewing_stand_active_def.drop = "mcl_brewing:stand" -brewing_stand_active_def.groups = {not_in_creative_inventory=1, pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1} -minetest.register_node("mcl_brewing:stand_active", brewing_stand_active_def) +-- local brewing_stand_active_def = brewing_stand_def +-- brewing_stand_active_def.light_source = 8 +-- brewing_stand_active_def.drop = "mcl_brewing:stand" +-- brewing_stand_active_def.groups = {not_in_creative_inventory=1, pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1} +-- minetest.register_node("mcl_brewing:stand_active", brewing_stand_active_def) if minetest.get_modpath("mcl_core") then minetest.register_craft({ From b5b00209976e34bedf47213a63aa6472bf4e153c Mon Sep 17 00:00:00 2001 From: bzoss Date: Mon, 25 May 2020 15:31:35 -0400 Subject: [PATCH 08/34] Laid the framework to brew potions...TODO make it actually swap for the potion. --- mods/ITEMS/mcl_brewing/init.lua | 46 +++++++++++++++--- mods/ITEMS/mcl_potions/init.lua | 16 +++--- .../textures/mcl_potions_healing.png | Bin 0 -> 1261 bytes 3 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_healing.png diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index c535831f96..3657b10b59 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -71,12 +71,37 @@ local function swap_node(pos, name) end +local function brewable(inv) + + local ingredient = inv:get_stack("input",1):get_name() + local stands = {"","",""} + + for i=1,3 do + + local bottle = inv:get_stack("stand", i):get_name() + + if ingredient == "mcl_nether:nether_wart_item" and bottle == "mcl_potions:potion_river_water" or "mcl_potions:potion_water" then + stands[i] = "mcl_potions:potion_awkward" + end + + end + + for i=1,3 do + if stands[i] then return stands end + end + + return false + +end + + local function brewing_stand_timer(pos, elapsed) -- Inizialize metadata local meta = minetest.get_meta(pos) local fuel_time = meta:get_float("fuel_time") or 0 local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 + local BREW_TIME = 10 local input_item = meta:get_string("input_item") or "" @@ -87,7 +112,6 @@ local function brewing_stand_timer(pos, elapsed) local input_list, stand_list, fuel_list - local brewable, brewed local fuel local update = true @@ -109,11 +133,21 @@ local function brewing_stand_timer(pos, elapsed) -- end -- end + local brew_output = brewable(inv) + if fuel_time < fuel_totaltime then fuel_time = fuel_time + elapsed - --TODO check to see if we can brew + -- Replace the stand item with the brew result + if brew_output and (stand_timer >= BREW_TIME) then + for i=1, inv:get_size("stand", i) do + if brew_output[i] then + inv:set_stack("stand", i, brew_output[i]) + end + end + end + else --get more fuel from fuel_list @@ -139,7 +173,6 @@ local function brewing_stand_timer(pos, elapsed) end end - elapsed = 0 end @@ -160,11 +193,12 @@ local function brewing_stand_timer(pos, elapsed) if fuel_totaltime ~= 0 then local fuel_percent = math.floor(fuel_time/fuel_totaltime*100) - formspec = active_brewing_formspec(fuel_percent, 60) - swap_node(pos, "mcl_brewing:stand_active") + local brew_percent = math.floor(stand_timer/BREW_TIME*100) % 100 + formspec = active_brewing_formspec(fuel_percent, stand_timer) + -- swap_node(pos, "mcl_brewing:stand_active") result = true else - swap_node(pos, "mcl_brewing:stand") + -- swap_node(pos, "mcl_brewing:stand") minetest.get_node_timer(pos):stop() end diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index dd863075e6..622b08e82f 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -280,12 +280,6 @@ minetest.register_craftitem("mcl_potions:potion_mundane", { on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), }) -minetest.register_craft({ - type = "cooking", - output = "mcl_potions:potion_awkward", -recipe = "mcl_nether:nether_wart_item", --"mcl_potions:potion_river_water"}, - cooktime = 10, -}) minetest.register_craftitem("mcl_potions:potion_thick", { description = S("Thick Potion"), @@ -328,3 +322,13 @@ minetest.register_craftitem("mcl_potions:dragon_breath", { groups = { brewitem = 1, not_in_creative_inventory = 1 }, stack_max = 64, }) + +minetest.register_craftitem("mcl_potions:healing", { + description = S("Healing Potion"), + _doc_items_longdesc = brewhelp, + wield_image = "mcl_potions_healing.png", + inventory_image = "mcl_potions_healing.png", + -- TODO: Reveal item when it's actually useful + groups = { brewitem = 1, food=5}, + stack_max = 64, +}) diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_healing.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_healing.png new file mode 100644 index 0000000000000000000000000000000000000000..66bdbe0065be22e8cb94da875e61db61ee8da2bc GIT binary patch literal 1261 zcmds#y=#+E6vj_Xs%a%1vf0p3{D6vr;z4jwNhQTpN({9_9fX4PAa$wOK~zvgs7e)! z8aUw4!O0ppm0`P#Z4UckOwev8*#utAm9+x5Cb$QaTFYA3~fk5%OkniMvY~v z9znt%+M+U3bL0xUpuncOsUt@ujR3%f;|LmV5hd~fCT=4RFu^b!f*N9g#!X;>1C5~# zX^#=bX>6m$a!d?C!XMhAGWQr@8h=oviN-wBkOC^@9^*|>24hMmrkxB2a`F(vPgvm~ zb%HcL2TTd!!Bc9LzQlk2n!0$opD07KWAzij_%GMrhFW^7(>U8bQ#*N{sCOlv%!6IM zCHy%zQXLvUaQo%zi^B5We6F!)%k$HBXP3GsuHPA2-O*lYPA$Cp+O91%=W;h@4sIXa zwDzoZ8 GYkvT-_G^3q literal 0 HcmV?d00001 From cae4940e702918a83baa704820ad2e99488c9251 Mon Sep 17 00:00:00 2001 From: bzoss Date: Tue, 26 May 2020 18:10:20 -0400 Subject: [PATCH 09/34] Updated a few simple potions. TODO: Stop fuel burn once the potion is complete. --- mods/ITEMS/mcl_brewing/init.lua | 109 +++++++++++------- mods/ITEMS/mcl_potions/init.lua | 18 ++- .../textures/mcl_potions_weakness.png | Bin 0 -> 1260 bytes 3 files changed, 84 insertions(+), 43 deletions(-) create mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_weakness.png diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 3657b10b59..75f04df9d6 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -75,23 +75,35 @@ local function brewable(inv) local ingredient = inv:get_stack("input",1):get_name() local stands = {"","",""} + local stand_size = inv:get_size("stand") - for i=1,3 do + for i=1,stand_size do local bottle = inv:get_stack("stand", i):get_name() + stands[i] = bottle -- initialize the stand - if ingredient == "mcl_nether:nether_wart_item" and bottle == "mcl_potions:potion_river_water" or "mcl_potions:potion_water" then - stands[i] = "mcl_potions:potion_awkward" + if bottle == "mcl_potions:potion_river_water" or bottle == "mcl_potions:potion_water" then + if ingredient == "mcl_nether:nether_wart_item" then + stands[i] = "mcl_potions:potion_awkward" + elseif ingredient == "mcl_potions:fermented_spider_eye" then + stands[i] = "mcl_potions:weakness" + end + + elseif bottle == "mcl_potions:potion_awkward" then + if ingredient == "mcl_potions:speckled_melon" then + stands[i] = "mcl_potions:healing" + end end end - - for i=1,3 do - if stands[i] then return stands end + -- if any stand holds a new potion, return the list of new potions + for i=1,stand_size do + if stands[i] ~= inv:get_stack("stand", i):get_name() then + return stands + end end return false - end @@ -101,7 +113,7 @@ local function brewing_stand_timer(pos, elapsed) local fuel_time = meta:get_float("fuel_time") or 0 local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - local BREW_TIME = 10 + local BREW_TIME = 30 -- all brews take max of 10 local input_item = meta:get_string("input_item") or "" @@ -124,11 +136,12 @@ local function brewing_stand_timer(pos, elapsed) stand_list = inv:get_list("stand") fuel_list = inv:get_list("fuel") - -- TODO fix this function to check for change in stand content... + -- TODO ... fix this. Goal is to reset the process if the stand changes -- for i=1, inv:get_size("stand", i) do -- reset the process due to change - -- if stand_list[i]:get_name() ~= stand_list[i] then + -- local _name = inv:get_stack("stand", i):get_name() + -- if _name ~= stand_list[i] then -- stand_timer = 0 - -- stand_list[i] = stand_list[i]:get_name() + -- stand_list[i] = _name -- update = true -- need to update the stand with new data -- end -- end @@ -139,39 +152,58 @@ local function brewing_stand_timer(pos, elapsed) fuel_time = fuel_time + elapsed - -- Replace the stand item with the brew result - if brew_output and (stand_timer >= BREW_TIME) then - for i=1, inv:get_size("stand", i) do - if brew_output[i] then - inv:set_stack("stand", i, brew_output[i]) + if brew_output then + + stand_timer = stand_timer + elapsed + -- Replace the stand item with the brew result + if stand_timer >= BREW_TIME then + + local input_count = inv:get_stack("input",1):get_count() + if (input_count-1) ~= 0 then + inv:set_stack("input",1,inv:get_stack("input",1):get_name().." "..(input_count-1)) + else + inv:set_stack("input",1,"") end + + for i=1, inv:get_size("stand") do + if brew_output[i] then + inv:set_stack("stand", i, brew_output[i]) + end + end + stand_timer = 0 + update = false -- stop the update if brew is complete end + end else --get more fuel from fuel_list local after_fuel - - -- print(inv:get_stack("fuel",1):get_name()) - fuel, after_fuel = minetest.get_craft_result({method="fuel", width=1, items=fuel_list}) - if fuel.time == 0 then --no valid fuel, reset timers + if brew_output then - fuel_totaltime = 0 + if fuel.time == 0 then --no valid fuel, reset timers + + fuel_totaltime = 0 + stand_timer = 0 + + -- only allow blaze powder fuel + elseif inv:get_stack("fuel",1):get_name() == "mcl_mobitems:blaze_powder" then -- Grab another fuel + inv:set_stack("fuel", 1, after_fuel.items[1]) + + update = true + fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) + stand_timer = stand_timer + elapsed + + end + + else --if no output potion, stop the process + fuel_total_time = 0 stand_timer = 0 - - -- only allow blaze powder fuel - elseif inv:get_stack("fuel",1):get_name() == "mcl_mobitems:blaze_powder" then -- Grab another fuel - inv:set_stack("fuel", 1, after_fuel.items[1]) - - update = true - - fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) - stand_timer = stand_timer + elapsed end - + fuel_time = 0 end elapsed = 0 end @@ -180,11 +212,11 @@ local function brewing_stand_timer(pos, elapsed) fuel_totaltime = fuel.time end - for i=1, inv:get_size("stand", i) do - if stand_list[i]:is_empty() then - stand_timer = 0 - end - end + -- for i=1, inv:get_size("stand") do + -- if stand_list[i]:is_empty() then + -- stand_timer = 0 + -- end + -- end --update formspec local formspec = brewing_formspec @@ -193,8 +225,8 @@ local function brewing_stand_timer(pos, elapsed) if fuel_totaltime ~= 0 then local fuel_percent = math.floor(fuel_time/fuel_totaltime*100) - local brew_percent = math.floor(stand_timer/BREW_TIME*100) % 100 - formspec = active_brewing_formspec(fuel_percent, stand_timer) + local brew_percent = math.floor(stand_timer/BREW_TIME*100) + formspec = active_brewing_formspec(fuel_percent, brew_percent*2 % 100) -- swap_node(pos, "mcl_brewing:stand_active") result = true else @@ -340,7 +372,6 @@ local brewing_stand_def = { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1200, _mcl_hardness = 5, - _mcl_after_falling = damage_brewing_stand_by_falling, after_dig_node = function(pos, oldnode, oldmetadata, digger) local meta = minetest.get_meta(pos) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 622b08e82f..44b8885a46 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -290,7 +290,7 @@ minetest.register_craftitem("mcl_potions:potion_thick", { inventory_image = potion_image("#0000FF"), wield_image = potion_image("#0000FF"), -- TODO: Reveal item when it's actually useful - groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1 }, + groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 }, on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), }) @@ -300,7 +300,7 @@ minetest.register_craftitem("mcl_potions:speckled_melon", { _doc_items_longdesc = S("This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else."), stack_max = 64, -- TODO: Reveal item when it's actually useful - groups = { brewitem = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1 }, + groups = { brewitem = 1, not_in_creative_inventory = 0, not_in_craft_guide = 1 }, inventory_image = "mcl_potions_melon_speckled.png", }) @@ -319,7 +319,7 @@ minetest.register_craftitem("mcl_potions:dragon_breath", { wield_image = "mcl_potions_dragon_breath.png", inventory_image = "mcl_potions_dragon_breath.png", -- TODO: Reveal item when it's actually useful - groups = { brewitem = 1, not_in_creative_inventory = 1 }, + groups = { brewitem = 1, not_in_creative_inventory = 0 }, stack_max = 64, }) @@ -330,5 +330,15 @@ minetest.register_craftitem("mcl_potions:healing", { inventory_image = "mcl_potions_healing.png", -- TODO: Reveal item when it's actually useful groups = { brewitem = 1, food=5}, - stack_max = 64, + stack_max = 1, +}) + +minetest.register_craftitem("mcl_potions:weakness", { + description = S("Healing Potion"), + _doc_items_longdesc = brewhelp, + wield_image = "mcl_potions_weakness.png", + inventory_image = "mcl_potions_weakness.png", + -- TODO: Reveal item when it's actually useful + groups = { brewitem = 1, food=-5}, + stack_max = 1, }) diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_weakness.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_weakness.png new file mode 100644 index 0000000000000000000000000000000000000000..524ebeea6aa747c33bfc685e2cd55aac676e3ebe GIT binary patch literal 1260 zcmds#y=zoa5XEQn2quB7f=zUdZebxJKD3J#+aT{@f35MYi)DQzSZUPG&Xbf#g zdyFVfV;eP=V`2yr{?HbcxyJz0_=6%%H0GIx6i_Mm7;lO)7*jei?PNHRlZP07!U_ke z6QuDuU`hxNo>HsyCI0i*{!?dqiE?zTR^0)N|8o6psD(K_gtMJT%0r_>`4{ozrdH<* z`15?F)L&nB`Pr+D`Bt%`z0vpP$w>PNo&WlL*YxArTQfcD%V!UN-ubiKTy$k};!ERQ zZ9c2NK0eeOp_^@`>&^1iXno(Z+}+`}o|6mj4DTHu%YNxrnjtZEx+*K>9&{O4}Qq{7PmSJE5A+t9)Ei+EL8@orF)wj G=l%evV{E$s literal 0 HcmV?d00001 From c9ff19d02a7f719d4b01a3fe5ffb5999c7b81882 Mon Sep 17 00:00:00 2001 From: bzoss Date: Tue, 26 May 2020 18:15:50 -0400 Subject: [PATCH 10/34] Some small doc string updates. --- mods/ITEMS/mcl_brewing/init.lua | 2 +- mods/ITEMS/mcl_potions/init.lua | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 75f04df9d6..fef771f13c 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -226,7 +226,7 @@ local function brewing_stand_timer(pos, elapsed) if fuel_totaltime ~= 0 then local fuel_percent = math.floor(fuel_time/fuel_totaltime*100) local brew_percent = math.floor(stand_timer/BREW_TIME*100) - formspec = active_brewing_formspec(fuel_percent, brew_percent*2 % 100) + formspec = active_brewing_formspec(fuel_percent, brew_percent*4 % 100) -- swap_node(pos, "mcl_brewing:stand_active") result = true else diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 44b8885a46..6d7704821a 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -320,7 +320,7 @@ minetest.register_craftitem("mcl_potions:dragon_breath", { inventory_image = "mcl_potions_dragon_breath.png", -- TODO: Reveal item when it's actually useful groups = { brewitem = 1, not_in_creative_inventory = 0 }, - stack_max = 64, + stack_max = 1, }) minetest.register_craftitem("mcl_potions:healing", { @@ -334,7 +334,7 @@ minetest.register_craftitem("mcl_potions:healing", { }) minetest.register_craftitem("mcl_potions:weakness", { - description = S("Healing Potion"), + description = S("Weakness Potion"), _doc_items_longdesc = brewhelp, wield_image = "mcl_potions_weakness.png", inventory_image = "mcl_potions_weakness.png", From 36ce478361786f9d7ed7d208dc83c8ac32424e60 Mon Sep 17 00:00:00 2001 From: bzoss Date: Tue, 26 May 2020 21:07:07 -0400 Subject: [PATCH 11/34] Comment some broken bits. --- mods/ITEMS/mcl_brewing/init.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index fef771f13c..81a514ec0e 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -118,7 +118,7 @@ local function brewing_stand_timer(pos, elapsed) local input_item = meta:get_string("input_item") or "" local stand_timer = meta:get_float("stand_timer") or 0 - local stand_items = meta:get_string("stand_items") or {"","",""} + -- local stand_items = meta:get_list("stand_items") or {"","",""} local inv = meta:get_inventory() @@ -139,10 +139,11 @@ local function brewing_stand_timer(pos, elapsed) -- TODO ... fix this. Goal is to reset the process if the stand changes -- for i=1, inv:get_size("stand", i) do -- reset the process due to change -- local _name = inv:get_stack("stand", i):get_name() - -- if _name ~= stand_list[i] then + -- if _name ~= stand_items[i] then -- stand_timer = 0 - -- stand_list[i] = _name + -- stand_items[i] = _name -- update = true -- need to update the stand with new data + -- return 1 -- end -- end @@ -238,7 +239,7 @@ local function brewing_stand_timer(pos, elapsed) meta:set_float("fuel_totaltime", fuel_totaltime) meta:set_float("fuel_time", fuel_time) meta:set_float("stand_timer", stand_timer) - -- meta:set_string("stand_items", stand_list) + -- meta:set_list("stand_items", stand_list) meta:set_string("formspec", formspec) return result From 2ad28f1fac60254e8d6f4dcca32f3fec4dc097b7 Mon Sep 17 00:00:00 2001 From: bzoss Date: Tue, 26 May 2020 21:16:52 -0400 Subject: [PATCH 12/34] Update with sounds, and turn on some potion items. --- mods/ITEMS/mcl_brewing/init.lua | 2 ++ mods/ITEMS/mcl_potions/init.lua | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 81a514ec0e..91ac7a9d04 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -168,7 +168,9 @@ local function brewing_stand_timer(pos, elapsed) for i=1, inv:get_size("stand") do if brew_output[i] then + minetest.sound_play("mcl_potions_bottle_fill", {pos=pos, gain=0.4, max_hear_range=16}, true) inv:set_stack("stand", i, brew_output[i]) + minetest.sound_play("mcl_potions_bottle_pour", {pos=pos, gain=0.6, max_hear_range=16}, true) end end stand_timer = 0 diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 6d7704821a..bac4fdd967 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -8,7 +8,7 @@ minetest.register_craftitem("mcl_potions:fermented_spider_eye", { wield_image = "mcl_potions_spider_eye_fermented.png", inventory_image = "mcl_potions_spider_eye_fermented.png", -- TODO: Reveal item when it's actually useful - groups = { brewitem = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1 }, + groups = { brewitem = 1, not_in_creative_inventory = 0, not_in_craft_guide = 0 }, stack_max = 64, }) From 861aedbfa34aa0eae11d54dffc0be1bf9105085b Mon Sep 17 00:00:00 2001 From: bzoss Date: Wed, 27 May 2020 18:36:10 -0400 Subject: [PATCH 13/34] Updated potion offering - moved alchemy matrix to mcl_potions --- mods/ITEMS/mcl_brewing/init.lua | 26 +++------- mods/ITEMS/mcl_potions/init.lua | 48 ++++++++++++++++-- .../textures/mcl_potions_night_vision.png | Bin 0 -> 1260 bytes .../textures/mcl_potions_swiftness.png | Bin 0 -> 1262 bytes 4 files changed, 52 insertions(+), 22 deletions(-) create mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_night_vision.png create mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_swiftness.png diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 91ac7a9d04..3b8577a31c 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -1,5 +1,4 @@ local S = minetest.get_translator("mcl_brewing_stand") -local NAME_COLOR = "#FFFF4C" local function active_brewing_formspec(fuel_percent, item_percent) @@ -76,32 +75,23 @@ local function brewable(inv) local ingredient = inv:get_stack("input",1):get_name() local stands = {"","",""} local stand_size = inv:get_size("stand") + local was_alchemy = true for i=1,stand_size do local bottle = inv:get_stack("stand", i):get_name() - stands[i] = bottle -- initialize the stand - if bottle == "mcl_potions:potion_river_water" or bottle == "mcl_potions:potion_water" then - if ingredient == "mcl_nether:nether_wart_item" then - stands[i] = "mcl_potions:potion_awkward" - elseif ingredient == "mcl_potions:fermented_spider_eye" then - stands[i] = "mcl_potions:weakness" - end - - elseif bottle == "mcl_potions:potion_awkward" then - if ingredient == "mcl_potions:speckled_melon" then - stands[i] = "mcl_potions:healing" - end + local alchemy = mcl_potions.get_alchemy(ingredient, bottle) + if alchemy then + stands[i] = alchemy + else + stands[i] = bottle + was_alchemy = false end end -- if any stand holds a new potion, return the list of new potions - for i=1,stand_size do - if stands[i] ~= inv:get_stack("stand", i):get_name() then - return stands - end - end + if was_alchemy then return stands end return false end diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index bac4fdd967..ac2d1c26c0 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -299,7 +299,6 @@ minetest.register_craftitem("mcl_potions:speckled_melon", { description = S("Glistering Melon"), _doc_items_longdesc = S("This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else."), stack_max = 64, - -- TODO: Reveal item when it's actually useful groups = { brewitem = 1, not_in_creative_inventory = 0, not_in_craft_guide = 1 }, inventory_image = "mcl_potions_melon_speckled.png", }) @@ -318,7 +317,6 @@ minetest.register_craftitem("mcl_potions:dragon_breath", { _doc_items_longdesc = brewhelp, wield_image = "mcl_potions_dragon_breath.png", inventory_image = "mcl_potions_dragon_breath.png", - -- TODO: Reveal item when it's actually useful groups = { brewitem = 1, not_in_creative_inventory = 0 }, stack_max = 1, }) @@ -328,7 +326,6 @@ minetest.register_craftitem("mcl_potions:healing", { _doc_items_longdesc = brewhelp, wield_image = "mcl_potions_healing.png", inventory_image = "mcl_potions_healing.png", - -- TODO: Reveal item when it's actually useful groups = { brewitem = 1, food=5}, stack_max = 1, }) @@ -338,7 +335,50 @@ minetest.register_craftitem("mcl_potions:weakness", { _doc_items_longdesc = brewhelp, wield_image = "mcl_potions_weakness.png", inventory_image = "mcl_potions_weakness.png", - -- TODO: Reveal item when it's actually useful groups = { brewitem = 1, food=-5}, stack_max = 1, }) + +minetest.register_craftitem("mcl_potions:night_vision", { + description = S("Night Vision Potion"), + _doc_items_longdesc = brewhelp, + wield_image = "mcl_potions_night_vision.png", + inventory_image = "mcl_potions_night_vision.png", + groups = { brewitem = 1, food=0}, + stack_max = 1, +}) + +minetest.register_craftitem("mcl_potions:swiftness", { + description = S("Swiftness Potion"), + _doc_items_longdesc = brewhelp, + wield_image = "mcl_potions_swiftness.png", + inventory_image = "mcl_potions_swiftness.png", + groups = { brewitem = 1, food=0}, + stack_max = 1, +}) + +mcl_potions = {} + +-- Compare two ingredients for compatable alchemy +function mcl_potions.get_alchemy(ingr, pot) + + if pot == "mcl_potions:potion_river_water" or pot == "mcl_potions:potion_water" then + if ingr == "mcl_nether:nether_wart_item" then + return "mcl_potions:potion_awkward" + elseif ingr == "mcl_potions:fermented_spider_eye" then + return "mcl_potions:weakness" + end + + elseif pot == "mcl_potions:potion_awkward" then + if ingr == "mcl_potions:speckled_melon" then + return "mcl_potions:healing" + elseif ingr == "mcl_farming:carrot_item_gold" then + return "mcl_potions:night_vision" + elseif ingr == "mcl_core:sugar" then + return "mcl_potions:swiftness" + end + + else + return false + end +end diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_night_vision.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_night_vision.png new file mode 100644 index 0000000000000000000000000000000000000000..9a4ee688c9394bacd4292c0ad7e2fa430e357b89 GIT binary patch literal 1260 zcmds#(Tj{>6vofAX=lgIxZr}FmfahrQKpUyYSpr{cBZsVYqq!$g`<_CY>KE|7ecwz zbnaGBBAW}lMX61jrB2kAB3WC?g$pYsMbq(|_b+he!du@roq6B)Ilt#Q-?jSiP(Ig{ zBcgn*S{cD_PdwQ+yeqe_KPPIV`o6{>N+Ko_A|)~+kBXUCh?UrgJvN0&ghWY<#N(_o zsgNqEk$PM;CKECxGctz~Ig<;yk{dY+XhRxWxQx>tePRi-G8?l;TT~(}%3>@Y6xdW@ zRaRs5fWlc5Hf1w52P3Ys3%jx#JGz1zVt@uEu&{^5(1tX$aM{C9)L1HFA|C$G7L}@~ ziF()t1vX8^Ow8dPP&g~D;wBDz$OD+TjX2;R5O4@;hyfauI0_ClhBl<3<&j)$qsB5- zk09X>ZBd!2IdX+vP+(Kt)R7~SMgZW#aRd#wh!S}K6Solum|z$VK@BlL<0i1cfyU5= zw8x0zG`3M=IVOf6;SX(5nR^T{jXx;TL}Q+5NCA~{kMX7`gE6HO(@us1IeCcTC#-Og zIzbwr1Ez%V;3>6AU*bQ19lvm~nTKWZPluk&EQ}3g&s}ZRdQbmY+vxl~@NE3y z^p;lU-p*~S%LN*pIKQrZe{sW`^+WxoChc8nD>dIveVm&e-F$4}OXk)_%H3`K?0?bz z;P9)XkEgoYA9a77tZyp6@BGkP>{&B^VCl~1U)xtEn;pw^>HEyew`~4YSgH*USElzI Gx%>wc!)$*5 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_swiftness.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_swiftness.png new file mode 100644 index 0000000000000000000000000000000000000000..4dbf788a61fd9379fceb236ecc919e1f3ffdd65b GIT binary patch literal 1262 zcmds#v1^lI5XLW!k{V1D2N7GPZbDqjE#e?5sck?@jD;dth@v+HheFjsS|}n?#bO6b zI1yB^qJn~pU24f7)#AAbh2WrrlMXsKWDq@{d;bC_2VeNUaCzVNx!?2Lcda@+SjcbB z6H%cuRIcH-FP`o!-sK0^SBSDyJu)(Yl8A|fNQsQdqhcl&VkI_Wk4<3`AyE<|@i?nY zDx^wkq#jp|$%IVFjLe}#&g4R_^>GT=p;&HI|B)h=)J4MWrfg zq8@fZflX5}6LYu+6wZpPxQW9a@&G1oBM$fn1RR1IVt@uEj)DV?p$%zhc_bIxsIg4d zBS`o|TU2Ihj$C0E6xdWZb>xVo5dgSw96`e^qC_6R#BIa@CK!f8P(uvRxCtz9pfR)| z?J=S_jcwFej)@^i_(NM%<{kq~;}427(U@l%Qb48LW4tNKU`*-6w3FdLP99?T2`e0= zPLRgufGHt7cuK9(m-x?LXD?0eAj;7B+VF8;{Fm!*L+x4B2F`96A38BXRD2arX1-MH z!Jjjg^1+e4voGJjE42E$*Vmi%E@>?F&nzxawHFpI-f7&ppZjw2=;Y}BEqzx$?>e=w z{o>YdTDvf|wcbllrr+$|d~Bh2ZQJ01Qj-pU%$Az%d!Jg%qbp}#f6YAHN%=>=I@7DU zr+0rmKUtm4ekgXPA8#t3yZUXeFqb>M=X-5p>UO8~cHMZ_&+JlZzJF|En5qm6m!BP~ GU;YD}6mCfX literal 0 HcmV?d00001 From bcdb37800db5914fa0b97b451c8100d0e2a07bfd Mon Sep 17 00:00:00 2001 From: bzoss Date: Wed, 27 May 2020 21:15:46 -0400 Subject: [PATCH 14/34] Shift to table lookup for brewing combinations. Fix issue with brewing only if all slots filled. --- mods/ITEMS/mcl_brewing/init.lua | 16 +++++-------- mods/ITEMS/mcl_potions/init.lua | 41 +++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 3b8577a31c..b87ae04a10 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -73,9 +73,9 @@ end local function brewable(inv) local ingredient = inv:get_stack("input",1):get_name() - local stands = {"","",""} + local stands = {} local stand_size = inv:get_size("stand") - local was_alchemy = true + local was_alchemy = {false,false,false} for i=1,stand_size do @@ -84,14 +84,16 @@ local function brewable(inv) local alchemy = mcl_potions.get_alchemy(ingredient, bottle) if alchemy then stands[i] = alchemy + was_alchemy[i] = true else stands[i] = bottle - was_alchemy = false end end -- if any stand holds a new potion, return the list of new potions - if was_alchemy then return stands end + for i=1,table.getn(was_alchemy) do + if was_alchemy[i] then return stands end + end return false end @@ -205,12 +207,6 @@ local function brewing_stand_timer(pos, elapsed) fuel_totaltime = fuel.time end - -- for i=1, inv:get_size("stand") do - -- if stand_list[i]:is_empty() then - -- stand_timer = 0 - -- end - -- end - --update formspec local formspec = brewing_formspec diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index ac2d1c26c0..fe2e84a2d6 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -359,26 +359,33 @@ minetest.register_craftitem("mcl_potions:swiftness", { mcl_potions = {} +function key_in_table(table,key) + return table[key] ~= nil +end + +local water_table = { + ["mcl_nether:nether_wart_item"] = "mcl_potions:potion_awkward", + ["mcl_potions:fermented_spider_eye"] = "mcl_potions:weakness", +} +local awkward_table = { + ["mcl_potions:speckled_melon"] = "mcl_potions:healing", + ["mcl_farming:carrot_item_gold"] = "mcl_potions:night_vision", + ["mcl_core:sugar"] = "mcl_potions:swiftness", +} +local output_table = { + ["mcl_potions:potion_river_water"] = water_table, + ["mcl_potions:potion_water"] = water_table, + ["mcl_potions:potion_awkward"] = awkward_table, +} + -- Compare two ingredients for compatable alchemy function mcl_potions.get_alchemy(ingr, pot) - if pot == "mcl_potions:potion_river_water" or pot == "mcl_potions:potion_water" then - if ingr == "mcl_nether:nether_wart_item" then - return "mcl_potions:potion_awkward" - elseif ingr == "mcl_potions:fermented_spider_eye" then - return "mcl_potions:weakness" + if output_table[pot] ~= nil then + local brew_table = output_table[pot] + if brew_table[ingr] ~= nil then + return brew_table[ingr] end - - elseif pot == "mcl_potions:potion_awkward" then - if ingr == "mcl_potions:speckled_melon" then - return "mcl_potions:healing" - elseif ingr == "mcl_farming:carrot_item_gold" then - return "mcl_potions:night_vision" - elseif ingr == "mcl_core:sugar" then - return "mcl_potions:swiftness" - end - - else - return false end + return false end From 014f15b64308fbda28f11484f3edcb80e6944f99 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 29 May 2020 02:27:34 +0200 Subject: [PATCH 15/34] Clean up mcl_brewing file formats --- mods/ITEMS/mcl_brewing/depends.txt | 7 ------- mods/ITEMS/mcl_brewing/init.lua | 0 mods/ITEMS/mcl_brewing/locale/template.txt | 0 mods/ITEMS/mcl_brewing/mod.conf | 2 ++ .../textures/mcl_brewing_bottle_bg.png | Bin 1165 -> 108 bytes .../textures/mcl_brewing_bubbles.png | Bin 193 -> 155 bytes .../textures/mcl_brewing_bubbles_active.png | Bin 194 -> 153 bytes .../textures/mcl_brewing_burner.png | Bin 147 -> 109 bytes .../textures/mcl_brewing_burner_active.png | Bin 157 -> 111 bytes .../textures/mcl_brewing_fuel_bg.png | Bin 250 -> 124 bytes .../textures/mcl_brewing_inventory.png | Bin 1033 -> 488 bytes .../textures/mcl_brewing_potion_bg.png | Bin 1172 -> 114 bytes .../mcl_brewing/textures/mcl_brewing_side.png | Bin 342 -> 236 bytes .../mcl_brewing/textures/mcl_brewing_top.png | Bin 403 -> 211 bytes 14 files changed, 2 insertions(+), 7 deletions(-) delete mode 100755 mods/ITEMS/mcl_brewing/depends.txt mode change 100755 => 100644 mods/ITEMS/mcl_brewing/init.lua mode change 100755 => 100644 mods/ITEMS/mcl_brewing/locale/template.txt mode change 100755 => 100644 mods/ITEMS/mcl_brewing/mod.conf mode change 100755 => 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png mode change 100755 => 100644 mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png diff --git a/mods/ITEMS/mcl_brewing/depends.txt b/mods/ITEMS/mcl_brewing/depends.txt deleted file mode 100755 index 73f7dce829..0000000000 --- a/mods/ITEMS/mcl_brewing/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -mcl_init -mcl_formspec -mcl_sounds -mcl_potions -mcl_mobitems -mcl_core? -screwdriver? diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua old mode 100755 new mode 100644 diff --git a/mods/ITEMS/mcl_brewing/locale/template.txt b/mods/ITEMS/mcl_brewing/locale/template.txt old mode 100755 new mode 100644 diff --git a/mods/ITEMS/mcl_brewing/mod.conf b/mods/ITEMS/mcl_brewing/mod.conf old mode 100755 new mode 100644 index de164abf92..e2e88d1b72 --- a/mods/ITEMS/mcl_brewing/mod.conf +++ b/mods/ITEMS/mcl_brewing/mod.conf @@ -1 +1,3 @@ name = mcl_brewing +depends = mcl_init, mcl_formspec, mcl_sounds, mcl_potions, mcl_mobitems +optional_depends = mcl_core, screwdriver diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png index c0c4fd2be15e5849c00ebadbe188f162e56cb4a9..64032deaf428d8e97a4aaf67e35850904115120c 100644 GIT binary patch delta 89 zcmeC>%$Xn=%*4RJFkxbb8IWQt3GxdD(m;^6jC~@IQuK6j45?sDmQW~QH(Mp0}We1OOiX#br)c_vz(kVU}jqZK>SN!#vHaDcB6R2#d6+hT?3xWmu+V!N^rBw+gGYqAS#h z0SzTs?9mu)q|xGXwV|$A;hyf*{%A`T;gKHIcA;Q1!!tb#_ds#hE4reil^I#&id`t!jLIl-BxwSGi{k{1TcRWn zFu6?}Fku*nP$LF3H^G8~#%Lp5J)%C%HZ`l57(wEXwp3Zw103UTiZRii=NM8$jof>@ zBg$qR>GZUR;YJ=FdiVpY9gI#$^Eogj!o$;OHNM1u{(Ai4*@_Kc1vG(!!?Tybq*>WUgtt7}V7)S#_-ZJ)yKq|n~#WAFU@#%zvoDB{FN7iWl zEjK%4<9}l10bqX;`=Qw)-{;7#YYKbGAY>Z^vcuEW&t)C6Q$iB}f(JIX delta 176 zcmV;h08js$0l@)~8Gi-<007s*{OwtZr_Z#`$aSz=wwr5i7^{ z2A|~E9hP5zcC?GF`K3R^lbJl|X!6y~P0tvimYRG5MuLy8swwaenuylj!e7nOHp1*a e9y8}UW;g++3vCld-LqN%0000>WUgtt7}V7)S#_-ZJ)yK+4b4#WAFU@##cHwgV0VM}DpP z`TzVjmV#85%xJv^;hem_-zppLHEf#7UOn&M{k{e}wyfar^}fva^B@0jEf?IqZCzHr lY=xEJmoFc-aUI<}hr4XXa<;Xx^FTIuy85}Sb4p-r0s!h!H5vc_ delta 177 zcmV;i08amz0m1>08Gi-<007s*{OD0Cd94voy3w50{48`Rm?_4~t;tnT{`` z%Or=@Sc+tc3CVithe#sIRozqW^#H~>JjNIV07OKWLis8PnfUA|S8$H)400000NkvXXu0mjfhVMuJ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png index e2e8e8afeb20074143562bc5bf4e7722417e91de..b15bd5e3e417a91902ad35d8c8e242391e3466be 100644 GIT binary patch delta 90 zcmbQtm^(o-go%NH!Dj1gb0Ec5666;Qq=6uB8T&*arR3@27*fHQ%+T~dL4c8s;~%3z nLs!#Jjs_(Ytrp3+84I}>o;-U~;xG8f5Twh~)z4*}Q$iB}8KN21 delta 128 zcmd0u%s4@^ij9GRVe|Ex1R%v(;1OBOz`%C|gc+x5^GO2*T|HeKLnNlYy=cgIKtbTZ zf!|Wj?0geiSaKG;vA$TAkdkvO#m6B{?Ml=^3FV}dmg+C|How+hxb<6`Y`ul3mu7#2 debe8A(oE(u+IzC2t$+qHc)I$ztaD0e0swWbEMWiu diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png index 93655b67322e5ed2a483a4017747af703f9682ea..b5782d0fad0191fa07b2e2d7b6b769b6f23f3d7a 100644 GIT binary patch delta 92 zcmbQsm_I=>jERAP!Dj1gb0Ec5666;Qq=6uB8T&*arQ+%07*fHQ%+T~dL4c8srqFsE>q3&}i)cGcC<-TP_X9u`5t3B_znr%YL8bB(j-Hs7q}Elc0O p`*2KtAJ>D>&UBdiaeD`A?mNHFD0%aZU1{6X3YWnFR%m$K$w?D+S)in;lg VYTi|UCT)-#JYD@<);T3K0RY}WNXGyG diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png old mode 100755 new mode 100644 index 02c9dc44d104929c726074bb22b5105090b9c724..66f0c12259ba3688909c8de62b86f9366ffff580 GIT binary patch delta 474 zcmV<00VV#42rFrlgRctp z^6=$QjSC@+bAK_^GXZY$#Zb=@#a3^J7UiRg*O=u<5X=vX$A)7 z-JULvAr*7p-t{heWF^5C@G~sGgYzEauDFR&k3_-XwQTmZM9_#P#|M2x|sLAVP>x!-B9(r1IGOGRg(QUWu_WM^AR_?!l zTq3!qzP|tJUts9Wef)98RzB^3xhAFm(tr7^dEF9{y-Xt6XJg$huesCXnU{$q_r!Mp ze&u4f`N#b#S)mTYvUQsu^@~j0y46Z0Xl{?*)ug}M)pN2-*Dwmd>RNO7p}@K4#T*a! zpQw5!bYj};2?wq%3S?P-222Kor?d(j`dY=SxJFyb^+T7AuGIeh`@;jpLcJP4cVChAkZDLfu*PkAQVuxFfjdnw5%y$)=*Kf(P}}vM*{hg=f6W;5n%GBlT&Q zj-b!#wXVtWbN|-qH%(uad(A?I?_tqSk>^JhzRSkCzCwxTX+_V&jgf0P^KWs02%R6gz#ef3mey3u-(gFBzdG-!4tq?x|f zt2pBtx;tT#@WGdz4+LEdHXo0=?ixIQS8ZHR=0B@f&pLsMo?YInR53ek{xVmC&4LHd zc(E8)uK|i1n>4kbx?5kDe=Yv#*Vhfq$$v8|MD{y({$#$N*1QKbLh*2~7a~AmxDo diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_potion_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_potion_bg.png index 818e41d4b8bf2c2adb942112951b8a7232753acc..5dad86d62c443524a2ee85cac956ddae3cbfcbf3 100644 GIT binary patch delta 95 zcmbQjSu{a1l8J$VVZy`=Ga$uQ666;Qq=6uB8T&*arS9qC7*fHQETK@q#?ukp#n^Gx sd70{!vP+UO4I8q24BnUs@Tu-%VlXzml-MiyE(fI5)78&qol`;+0D&hOqW}N^ literal 1172 zcmds#v1(OO5Jh)P2qv1CG8k+GK@e@`2UOm}1VRW&EYcaoDXaooiHMrY&L+kDfkhCT zKuQY>g(>m}qJLo_!a-xSkw&XJx!$H`Wkhw5_@gaVW@M2ocA;Q1Dx=7eqzM2njuSL) ziIP0P;Sa2KFghX4=fIQ*4^N}j_!9s5>&c6k*Q6Oe-`Uy)e)#Jx!Z{}AI7f$w%u78@p{QlwRUuSdY or<5xPcYhvDKiqhIaOu_e3p)S(^~dSv+)20Im~Krz-hcG=50BzPYXATM diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png index 0c15ddd8ad3d7497d363f5db40e4053229cd177a..52530bc21a82b86ff2943c41cdb0fe2d5e63a7f0 100644 GIT binary patch delta 220 zcmcb{^oDVQL_G^L0|Ud`yN`l^lx~1eh%1mjaNxlI&1wJ7%=|yoc%8S{e;`Qv|G$Bu zy`g65^a%wyX_Gsf>q-i<6BBp0SZxDpU@Qsp3ubV5b|VeQ$@O$`45?r=Ik8djkO7aw zMS1NP8p3J<(itrM4z6q2Dw(Tm`Gm{g%N5woQ$G+|){%dl-{Wb2lCb%a3dZ>w%kmc- z&Aa6o-IdN?@@4mS!;ROuA8}`Q`KD;iJXpRt?c5#9&rix?%8C_`xP%XYuaJg<1CUEl&{1%LZ~#ug0ZgCtsVGteIf~K{ z6j2QgUc9@`reK=c(f{-R?9K{KR8^(T`TFw(fVcBogO_C~Zhw!}+!oOJOm#lfV>rN> zE8;mUo`de5fE6DLxF~`YOJMhOW20lg+2t4kRn>Mj6SSg>V@)u*tZlosEzre@JlEe^ zM1s diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_top.png index 4ed94d460a248da9fc44e73762782d2e4b26d4e1..c62de1ec0615146d51091bc7ec56beeb77b1a303 100644 GIT binary patch delta 195 zcmV;!06hPb1JePJ7=Hu<0002(-QrRJ0016POjJbx004)8e13FslZk_+mymF5X8-^H zYhhu)z`*~20KMs^Gynhq0d!JMQvg8b*k%9#0Aoo+K~#7FUB&?h!Z8%U;a?F2cnt#d zmQ@ERy2jh+0PO_n0y73cM^2u>{{tVe(%TXKv6pB4nJL4w$viXKJF@^yI#6)6D7;xbaI5|kdXviZBhM9?h zfl+H1NM9bLLmfyTl$2`lOz-91d+xa>Cq)b%s--}A64SP@O@D*q>=EP1l)I;9YP&Zb zM*uKiNB}NxN{lDdU2X9M%9Hrg$2N_fgTE@sSQ!BN{k~T7XM%9Rb!Yo4$R1jlwx!>D zLkJNh)en-2L6rdEBre!_!oRU8J?V_p?e$eKU&x42xqJb~aU!V`LIk~TNB={E(*VBo zG3}M>xqN}m#(fZ@;ecGe5XppX8Y_Y@G$+m}y>3UdZ^BbcKEyj`=NFp9Q_Ho9#Y&yg zaKL;aVkG|RJF1}BYSXBd@zhc?ZzJ@`mp+YJnPR2B_Tc&P9@{kZ7Ujif iUwKlW+o+Xs-5Ebw)`Crohbj*M0000 Date: Fri, 29 May 2020 02:28:44 +0200 Subject: [PATCH 16/34] Remove dead code in mcl_brewing --- mods/ITEMS/mcl_brewing/init.lua | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index b87ae04a10..e4a6ebbcb2 100644 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -4,7 +4,6 @@ local function active_brewing_formspec(fuel_percent, item_percent) return "size[9,8.75]".. "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. - -- "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory_active.png]".. "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. "list[current_player;main;0,4.5;9,3;9]".. mcl_formspec.get_itemslot_bg(0,4.5,9,3).. @@ -110,7 +109,6 @@ local function brewing_stand_timer(pos, elapsed) local input_item = meta:get_string("input_item") or "" local stand_timer = meta:get_float("stand_timer") or 0 - -- local stand_items = meta:get_list("stand_items") or {"","",""} local inv = meta:get_inventory() @@ -216,10 +214,8 @@ local function brewing_stand_timer(pos, elapsed) local fuel_percent = math.floor(fuel_time/fuel_totaltime*100) local brew_percent = math.floor(stand_timer/BREW_TIME*100) formspec = active_brewing_formspec(fuel_percent, brew_percent*4 % 100) - -- swap_node(pos, "mcl_brewing:stand_active") result = true else - -- swap_node(pos, "mcl_brewing:stand") minetest.get_node_timer(pos):stop() end @@ -227,7 +223,6 @@ local function brewing_stand_timer(pos, elapsed) meta:set_float("fuel_totaltime", fuel_totaltime) meta:set_float("fuel_time", fuel_time) meta:set_float("stand_timer", stand_timer) - -- meta:set_list("stand_items", stand_list) meta:set_string("formspec", formspec) return result @@ -390,14 +385,6 @@ local brewing_stand_def = { end end, - -- allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - -- local name = player:get_player_name() - -- if minetest.is_protected(pos, name) then - -- minetest.record_protection_violation(pos, name) - -- return 0 - -- end - -- end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) minetest.get_node_timer(pos):start(1.0) @@ -414,8 +401,6 @@ local brewing_stand_def = { inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) - -- inv:set_size("stand2", 1) - -- inv:set_size("stand3", 1) local form = brewing_formspec meta:set_string("formspec", form) end, @@ -451,12 +436,6 @@ brewing_stand_def._tt_help = S("Repair and rename items") minetest.register_node("mcl_brewing:stand", brewing_stand_def) --- local brewing_stand_active_def = brewing_stand_def --- brewing_stand_active_def.light_source = 8 --- brewing_stand_active_def.drop = "mcl_brewing:stand" --- brewing_stand_active_def.groups = {not_in_creative_inventory=1, pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, brewing_stand=1} --- minetest.register_node("mcl_brewing:stand_active", brewing_stand_active_def) - if minetest.get_modpath("mcl_core") then minetest.register_craft({ output = "mcl_brewing:stand", @@ -467,15 +446,3 @@ if minetest.get_modpath("mcl_core") then }) end - --- Legacy -minetest.register_lbm({ - label = "Update brewing_stand formspecs (0.60.0", - name = "mcl_brewing:update_formspec_0_60_0", - --nodenames = { "group:brewing_stand" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", brewing_formspec) - end, -}) From d3872b713c46b0d1fe053b7baab0693100d3ea12 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 29 May 2020 02:36:15 +0200 Subject: [PATCH 17/34] Add bzoss to credits for brewing stand --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0a2c76bc8c..07a4b437e4 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,7 @@ There are so many people to list (sorry). Check out the respective mod directori * [Rootyjr](https://github.com/Rootyjr): Fishing rod and bugfixes * [aligator](https://github.com/aligator): Improvement of doors * [ryvnf](https://github.com/ryvnf): Explosion mechanics +* bzoss : Brewing Stand * Lots of other people: TO BE WRITTEN (see mod directories for details) ### Graphics From f6ccf1fe413d7f6bd44fbb309d0f45e43511177b Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 29 May 2020 02:49:39 +0200 Subject: [PATCH 18/34] Mark brewing stuff as WIP --- mods/MISC/mcl_wip/depends.txt | 2 ++ mods/MISC/mcl_wip/init.lua | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/mods/MISC/mcl_wip/depends.txt b/mods/MISC/mcl_wip/depends.txt index 66804f107a..ea80f99c1d 100644 --- a/mods/MISC/mcl_wip/depends.txt +++ b/mods/MISC/mcl_wip/depends.txt @@ -6,3 +6,5 @@ doc_identifier mobs_mc mcl_comparators mcl_minecarts +mcl_potions +mcl_brewing diff --git a/mods/MISC/mcl_wip/init.lua b/mods/MISC/mcl_wip/init.lua index 062b5e489e..996db3cfe5 100644 --- a/mods/MISC/mcl_wip/init.lua +++ b/mods/MISC/mcl_wip/init.lua @@ -13,6 +13,11 @@ local wip_items = { "mobs_mc:wither", "mobs_mc:parrot", "mobs_mc:witch", + "mcl_brewing:stand", + "mcl_potions:healing", + "mcl_potions:night_vision", + "mcl_potions:swiftness", + "mcl_potions:weakness", "screwdriver:screwdriver", } local experimental_items = { From 02540a5193114535417f58390f3f31f77ad802cb Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 29 May 2020 02:50:14 +0200 Subject: [PATCH 19/34] Blaze powder is no fuel --- mods/ITEMS/mcl_mobitems/init.lua | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mods/ITEMS/mcl_mobitems/init.lua b/mods/ITEMS/mcl_mobitems/init.lua index 0b4d47e0de..8f4c166809 100644 --- a/mods/ITEMS/mcl_mobitems/init.lua +++ b/mods/ITEMS/mcl_mobitems/init.lua @@ -428,12 +428,6 @@ minetest.register_craft({ burntime = 120, }) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_mobitems:blaze_powder", - burntime = 120, -}) - minetest.register_craft({ output = 'mcl_mobitems:slimeball 9', recipe = {{"mcl_core:slimeblock"}}, From a5dc19cd7c9aadf0af663adf7cfa34771a8da135 Mon Sep 17 00:00:00 2001 From: bzoss Date: Mon, 8 Jun 2020 17:47:53 -0400 Subject: [PATCH 20/34] Initial commit to correct branch... --- mods/CORE/flowlib/README.txt | 2 +- mods/CORE/mcl_explosions/init.lua | 41 +- mods/ENVIRONMENT/mcl_weather/skycolor.lua | 12 +- mods/HELP/mcl_craftguide/init.lua | 4 +- mods/ITEMS/REDSTONE/mcl_observers/init.lua | 1 + mods/ITEMS/mcl_brewing/depends.txt | 7 + mods/ITEMS/mcl_brewing/init.lua | 900 +++++++++++++++--- mods/ITEMS/mcl_brewing/locale/template.txt | 0 mods/ITEMS/mcl_brewing/mod.conf | 2 - .../sounds/mcl_brewing_complete.ogg | Bin 0 -> 38394 bytes .../textures/mcl_brewing_bottle_bg.png | Bin 108 -> 1165 bytes .../textures/mcl_brewing_bubbles.png | Bin 155 -> 193 bytes .../textures/mcl_brewing_bubbles_active.png | Bin 153 -> 194 bytes .../textures/mcl_brewing_burner.png | Bin 109 -> 147 bytes .../textures/mcl_brewing_burner_active.png | Bin 111 -> 157 bytes .../textures/mcl_brewing_fuel_bg.png | Bin 124 -> 250 bytes .../textures/mcl_brewing_inventory.png | Bin 488 -> 1033 bytes .../textures/mcl_brewing_potion_bg.png | Bin 114 -> 1172 bytes .../mcl_brewing/textures/mcl_brewing_side.png | Bin 236 -> 404 bytes .../mcl_brewing/textures/mcl_brewing_top.png | Bin 211 -> 404 bytes mods/ITEMS/mcl_buckets/init.lua | 1 + mods/ITEMS/mcl_chests/init.lua | 74 +- mods/ITEMS/mcl_core/functions.lua | 213 ++++- mods/ITEMS/mcl_core/nodes_liquid.lua | 4 + mods/ITEMS/mcl_end/chorus_plant.lua | 1 + mods/ITEMS/mcl_mobitems/init.lua | 1 + mods/ITEMS/mcl_potions/depends.txt | 2 + mods/ITEMS/mcl_potions/init.lua | 484 +++++++++- .../sounds/mcl_potions_breaking_glass.ogg | Bin 0 -> 45330 bytes .../sounds/mcl_potions_drinking.ogg | Bin 0 -> 23932 bytes .../mcl_potions/textures/hb_potion_bar.png | Bin 0 -> 91 bytes .../textures/hb_swiftness_bgicon.png | Bin 0 -> 1157 bytes .../textures/hb_swiftness_icon.png | Bin 0 -> 1167 bytes .../textures/mcl_potions_splash_bottle.png | Bin 0 -> 1210 bytes .../textures/mcl_potions_splash_overlay.png | Bin 0 -> 1172 bytes .../textures/mcl_potions_sprite.png | Bin 0 -> 1181 bytes mods/ITEMS/mcl_tnt/init.lua | 6 +- mods/MAPGEN/mcl_structures/init.lua | 19 +- .../locale/mcl_structures.de.tr | 1 - .../locale/mcl_structures.es.tr | 1 - .../locale/mcl_structures.fr.tr | 1 - .../mcl_structures_desert_temple.mts | Bin 1354 -> 1460 bytes mods/MISC/mcl_wip/depends.txt | 3 +- mods/MISC/mcl_wip/init.lua | 6 +- 44 files changed, 1487 insertions(+), 299 deletions(-) create mode 100755 mods/ITEMS/mcl_brewing/depends.txt mode change 100644 => 100755 mods/ITEMS/mcl_brewing/init.lua mode change 100644 => 100755 mods/ITEMS/mcl_brewing/locale/template.txt mode change 100644 => 100755 mods/ITEMS/mcl_brewing/mod.conf create mode 100644 mods/ITEMS/mcl_brewing/sounds/mcl_brewing_complete.ogg mode change 100644 => 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png mode change 100644 => 100755 mods/ITEMS/mcl_brewing/textures/mcl_brewing_inventory.png create mode 100755 mods/ITEMS/mcl_potions/sounds/mcl_potions_breaking_glass.ogg create mode 100644 mods/ITEMS/mcl_potions/sounds/mcl_potions_drinking.ogg create mode 100644 mods/ITEMS/mcl_potions/textures/hb_potion_bar.png create mode 100644 mods/ITEMS/mcl_potions/textures/hb_swiftness_bgicon.png create mode 100644 mods/ITEMS/mcl_potions/textures/hb_swiftness_icon.png create mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_splash_bottle.png create mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_splash_overlay.png create mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_sprite.png diff --git a/mods/CORE/flowlib/README.txt b/mods/CORE/flowlib/README.txt index 5425ce96e8..516f7bf603 100644 --- a/mods/CORE/flowlib/README.txt +++ b/mods/CORE/flowlib/README.txt @@ -1,4 +1,4 @@ -Waterlib +Flowlib ================ Simple flow functions for use in Minetest mods by Qwertymine3 diff --git a/mods/CORE/mcl_explosions/init.lua b/mods/CORE/mcl_explosions/init.lua index bd697208ca..9a98dc6dae 100644 --- a/mods/CORE/mcl_explosions/init.lua +++ b/mods/CORE/mcl_explosions/init.lua @@ -36,9 +36,10 @@ local N_EXPOSURE_RAYS = 16 minetest.register_on_mods_loaded(function() -- Store blast resistance values by content ids to improve performance. for name, def in pairs(minetest.registered_nodes) do - node_blastres[minetest.get_content_id(name)] = def._mcl_blast_resistance or 0 - node_on_blast[minetest.get_content_id(name)] = def.on_blast - node_walkable[minetest.get_content_id(name)] = def.walkable + local id = minetest.get_content_id(name) + node_blastres[id] = def._mcl_blast_resistance or 0 + node_on_blast[id] = def.on_blast + node_walkable[id] = def.walkable end end) @@ -183,9 +184,7 @@ local function trace_explode(pos, strength, raydirs, radius, drop_chance, fire, local cid = data[idx] local br = node_blastres[cid] - local hash = (npos_z + 32768) * 65536 * 65536 + - (npos_y + 32768) * 65536 + - npos_x + 32768 + local hash = minetest.hash_node_position({x=npos_x, y=npos_y, z=npos_z}) rpos_x = rpos_x + STEP_LENGTH * rdir_x rpos_y = rpos_y + STEP_LENGTH * rdir_y @@ -305,6 +304,8 @@ local function trace_explode(pos, strength, raydirs, radius, drop_chance, fire, end end + local airs, fires = {}, {} + -- Remove destroyed blocks and drop items for hash, idx in pairs(destroy) do local do_drop = not creative_mode and math.random() <= drop_chance @@ -314,7 +315,8 @@ local function trace_explode(pos, strength, raydirs, radius, drop_chance, fire, if do_drop or on_blast ~= nil then local npos = minetest.get_position_from_hash(hash) if on_blast ~= nil then - remove = on_blast(npos, 1.0) + on_blast(npos, 1.0) + remove = false else local name = minetest.get_name_from_content_id(data[idx]) local drop = minetest.get_node_drops(name, "") @@ -329,21 +331,34 @@ local function trace_explode(pos, strength, raydirs, radius, drop_chance, fire, end if remove then if mod_fire and fire and math.random(1, 3) == 1 then - data[idx] = CONTENT_FIRE + table.insert(fires, minetest.get_position_from_hash(hash)) else - data[idx] = minetest.CONTENT_AIR + table.insert(airs, minetest.get_position_from_hash(hash)) end end end + -- We use bulk_set_node instead of LVM because we want to have on_destruct and + -- on_construct being called + if #airs > 0 then + minetest.bulk_set_node(airs, {name="air"}) + end + if #fires > 0 then + minetest.bulk_set_node(fires, {name="mcl_core:fire"}) + end + -- Update falling nodes + for a=1, #airs do + local p = airs[a] + minetest.check_for_falling({x=p.x, y=p.y+1, z=p.z}) + end + for f=1, #fires do + local p = fires[f] + minetest.check_for_falling({x=p.x, y=p.y+1, z=p.z}) + end -- Log explosion minetest.log('action', 'Explosion at ' .. minetest.pos_to_string(pos) .. ' with strength ' .. strength .. ' and radius ' .. radius) - -- Update environment - vm:set_data(data) - vm:write_to_map(data) - vm:update_liquids() end -- Create an explosion with strength at pos. diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua index d32c028098..a794107399 100644 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ b/mods/ENVIRONMENT/mcl_weather/skycolor.lua @@ -1,3 +1,5 @@ +local mods_loaded = false + mcl_weather.skycolor = { -- Should be activated before do any effect. active = true, @@ -169,7 +171,11 @@ mcl_weather.skycolor = { -- Simply getter. Ether returns user given players list or get all connected players if none provided get_players = function(players) if players == nil or #players == 0 then - players = minetest.get_connected_players() + if mods_loaded then + players = minetest.get_connected_players() + elseif players == nil then + players = {} + end end return players end, @@ -222,3 +228,7 @@ minetest.register_on_respawnplayer(initsky) mcl_worlds.register_on_dimension_change(function(player) mcl_weather.skycolor.update_sky_color({player}) end) + +minetest.register_on_mods_loaded(function() + mods_loaded = true +end) diff --git a/mods/HELP/mcl_craftguide/init.lua b/mods/HELP/mcl_craftguide/init.lua index 5d9c233599..86bd742a99 100644 --- a/mods/HELP/mcl_craftguide/init.lua +++ b/mods/HELP/mcl_craftguide/init.lua @@ -1088,7 +1088,9 @@ if progressive_mode then M.after(POLL_FREQ, poll_new_items) end - poll_new_items() + M.register_on_mods_loaded(function() + M.after(1, poll_new_items) + end) mcl_craftguide.add_recipe_filter("Default progressive filter", progressive_filter) diff --git a/mods/ITEMS/REDSTONE/mcl_observers/init.lua b/mods/ITEMS/REDSTONE/mcl_observers/init.lua index 885e8599e4..bdb3d5bdc6 100644 --- a/mods/ITEMS/REDSTONE/mcl_observers/init.lua +++ b/mods/ITEMS/REDSTONE/mcl_observers/init.lua @@ -236,6 +236,7 @@ mesecon.register_node("mcl_observers:observer_up", -- Regularily check the observer nodes. -- TODO: This is rather slow and clunky. Find a more efficient way to do this. minetest.register_abm({ + label = "Observer node check", nodenames = {"mcl_observers:observer_off", "mcl_observers:observer_down_off", "mcl_observers:observer_up_off"}, interval = 1, chance = 1, diff --git a/mods/ITEMS/mcl_brewing/depends.txt b/mods/ITEMS/mcl_brewing/depends.txt new file mode 100755 index 0000000000..73f7dce829 --- /dev/null +++ b/mods/ITEMS/mcl_brewing/depends.txt @@ -0,0 +1,7 @@ +mcl_init +mcl_formspec +mcl_sounds +mcl_potions +mcl_mobitems +mcl_core? +screwdriver? diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua old mode 100644 new mode 100755 index e4a6ebbcb2..5535cee8e9 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -1,9 +1,10 @@ local S = minetest.get_translator("mcl_brewing_stand") -local function active_brewing_formspec(fuel_percent, item_percent) +local function active_brewing_formspec(fuel_percent, brew_percent) return "size[9,8.75]".. "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. + -- "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory_active.png]".. "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. "list[current_player;main;0,4.5;9,3;9]".. mcl_formspec.get_itemslot_bg(0,4.5,9,3).. @@ -24,7 +25,7 @@ local function active_brewing_formspec(fuel_percent, item_percent) (100-fuel_percent)..":mcl_brewing_burner_active.png^[transformR270]".. "image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png^[lowpart:".. - (item_percent)..":mcl_brewing_bubbles_active.png]".. + (brew_percent)..":mcl_brewing_bubbles_active.png]".. "listring[current_player;main]".. "listring[current_name;fuel]".. @@ -102,20 +103,17 @@ local function brewing_stand_timer(pos, elapsed) -- Inizialize metadata local meta = minetest.get_meta(pos) - local fuel_time = meta:get_float("fuel_time") or 0 - local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 - local BREW_TIME = 30 -- all brews take max of 10 + local fuel_timer = meta:get_float("fuel_timer") or 0 + local BREW_TIME = 20 -- all brews brew the same + local BURN_TIME = BREW_TIME * 10 local input_item = meta:get_string("input_item") or "" - local stand_timer = meta:get_float("stand_timer") or 0 - + local fuel = meta:get_float("fuel") or 0 local inv = meta:get_inventory() local input_list, stand_list, fuel_list - local fuel - local update = true while update do @@ -136,73 +134,60 @@ local function brewing_stand_timer(pos, elapsed) -- return 1 -- end -- end + brew_output = brewable(inv) + if fuel ~= 0 and brew_output then - local brew_output = brewable(inv) - - if fuel_time < fuel_totaltime then - - fuel_time = fuel_time + elapsed - - if brew_output then - - stand_timer = stand_timer + elapsed - -- Replace the stand item with the brew result - if stand_timer >= BREW_TIME then - - local input_count = inv:get_stack("input",1):get_count() - if (input_count-1) ~= 0 then - inv:set_stack("input",1,inv:get_stack("input",1):get_name().." "..(input_count-1)) - else - inv:set_stack("input",1,"") - end - - for i=1, inv:get_size("stand") do - if brew_output[i] then - minetest.sound_play("mcl_potions_bottle_fill", {pos=pos, gain=0.4, max_hear_range=16}, true) - inv:set_stack("stand", i, brew_output[i]) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pos, gain=0.6, max_hear_range=16}, true) - end - end - stand_timer = 0 - update = false -- stop the update if brew is complete - end + fuel_timer = fuel_timer + elapsed + stand_timer = stand_timer + elapsed + if fuel_timer >= BURN_TIME then --replace with more fuel + fuel = 0 --force a new fuel grab + fuel_timer = 0 end + -- Replace the stand item with the brew result + if stand_timer >= BREW_TIME then - else --get more fuel from fuel_list - - local after_fuel - fuel, after_fuel = minetest.get_craft_result({method="fuel", width=1, items=fuel_list}) - - if brew_output then - - if fuel.time == 0 then --no valid fuel, reset timers - - fuel_totaltime = 0 - stand_timer = 0 - - -- only allow blaze powder fuel - elseif inv:get_stack("fuel",1):get_name() == "mcl_mobitems:blaze_powder" then -- Grab another fuel - inv:set_stack("fuel", 1, after_fuel.items[1]) - - update = true - fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) - stand_timer = stand_timer + elapsed - + local input_count = inv:get_stack("input",1):get_count() + if (input_count-1) ~= 0 then + inv:set_stack("input",1,inv:get_stack("input",1):get_name().." "..(input_count-1)) + else + inv:set_stack("input",1,"") end - else --if no output potion, stop the process - fuel_total_time = 0 + for i=1, inv:get_size("stand") do + if brew_output[i] then + minetest.sound_play("mcl_brewing_complete", {pos=pos, gain=0.4, max_hear_range=16}, true) + inv:set_stack("stand", i, brew_output[i]) + minetest.sound_play("mcl_potions_bottle_pour", {pos=pos, gain=0.6, max_hear_range=16}, true) + end + end stand_timer = 0 + update = false -- stop the update if brew is complete end - fuel_time = 0 - end - elapsed = 0 - end - if fuel and fuel_totaltime > fuel.time then - fuel_totaltime = fuel.time + elseif fuel == 0 then --get more fuel from fuel_list + + -- only allow blaze powder fuel + local fuel_name = inv:get_stack("fuel",1):get_name() + local fuel_count = inv:get_stack("fuel",1):get_count() + + if fuel_name == "mcl_mobitems:blaze_powder" then -- Grab another fuel + + if (fuel_count-1) ~= 0 then + inv:set_stack("fuel",1,fuel_name.." "..(fuel_count-1)) + else + inv:set_stack("fuel",1,"") + end + update = true + fuel = 1 + else -- no fuel available + update = false + end + + end + + elapsed = 0 end --update formspec @@ -210,19 +195,19 @@ local function brewing_stand_timer(pos, elapsed) local result = false - if fuel_totaltime ~= 0 then - local fuel_percent = math.floor(fuel_time/fuel_totaltime*100) + if fuel_timer ~= 0 then + local fuel_percent = math.floor(fuel_timer/BURN_TIME*100 % BURN_TIME) local brew_percent = math.floor(stand_timer/BREW_TIME*100) - formspec = active_brewing_formspec(fuel_percent, brew_percent*4 % 100) + formspec = active_brewing_formspec(fuel_percent, brew_percent*1 % 100) result = true else minetest.get_node_timer(pos):stop() end - - meta:set_float("fuel_totaltime", fuel_totaltime) - meta:set_float("fuel_time", fuel_time) + meta:set_float("fuel_timer", fuel_timer) meta:set_float("stand_timer", stand_timer) + meta:set_float("fuel", fuel) + -- meta:set_list("stand_items", stand_list) meta:set_string("formspec", formspec) return result @@ -300,14 +285,677 @@ if minetest.get_modpath("screwdriver") then on_rotate = screwdriver.rotate_simple end -local brewing_stand_def = { - groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1}, - tiles = {"mcl_brewing_top.png", --top - "mcl_brewing_base.png", --bottom - "mcl_brewing_side.png", --right - "mcl_brewing_side.png", --left - "mcl_brewing_side.png", --back - "mcl_brewing_side.png^[transformFX"}, --front +local doc_string = + S("To use an brewing_stand, rightclick it. An brewing_stand has 2 input slots (on the left) and one output slot.").."\n".. + S("To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.").."\n".. + S("There are two possibilities to repair tools (and armor):").."\n".. + S("• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.").."\n".. + S("• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.").."\n".. + S("Armor counts as a tool. It is possible to repair and rename a tool in a single step.").."\n\n".. + S("The brewing_stand has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the brewing_stand gets damaged. brewing_stand also have a chance of being damaged when they fall by more than 1 block. If a very damaged brewing_stand is damaged again, it is destroyed.") +local tiles = {"mcl_brewing_top.png", --top + "mcl_brewing_base.png", --bottom + "mcl_brewing_side.png", --right + "mcl_brewing_side.png", --left + "mcl_brewing_side.png", --back + "mcl_brewing_side.png^[transformFX"} --front +local allow_put = function(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + else + return stack:get_count() + end +end +local on_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local str = "" + for i=1, inv:get_size("stand") do + local stack = inv:get_stack("stand", i) + if not stack:is_empty() then + str = str.."1" + else str = str.."0" + end + end + minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str}) + minetest.get_node_timer(pos):start(1.0) + --some code here to enforce only potions getting placed on stands +end +local after_dig = function(pos, oldnode, oldmetadata, digger) + local meta = minetest.get_meta(pos) + local meta2 = meta + meta:from_table(oldmetadata) + drop_brewing_stand_items(pos, meta) + meta:from_table(meta2:to_table()) +end +local allow_take = function(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + else + return stack:get_count() + end +end +local on_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) +end + +minetest.register_node("mcl_brewing:stand_000", { + description = S("Brewing Stand"), + _doc_items_longdesc = S("The stand allows you to brew potions!"), + _doc_items_usagehelp = doc_string, + _tt_help = S("Brew Potions"), + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 0, not_in_craft_guide = 0}, + tiles = tiles, + drop = {"mcl_brewing:stand"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume + { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base + {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base + {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base + + -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 + -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 + -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 + -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 + -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 + + {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 + {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 + {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 + {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 + + + -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 + -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 + -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 + -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 + -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 + + {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 + {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 + {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 + {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 + + -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 + -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 + + {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 + {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 + {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 + } + }, + sounds = mcl_sounds.node_sound_metal_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 5, + + after_dig_node = after_dig, + allow_metadata_inventory_take = allow_take, + allow_metadata_inventory_put = allow_put, + on_metadata_inventory_put = on_put, + on_metadata_inventory_take = on_take, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("fuel", 1) + inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) + local form = brewing_formspec + meta:set_string("formspec", form) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local sender_name = sender:get_player_name() + if minetest.is_protected(pos, sender_name) then + minetest.record_protection_violation(pos, sender_name) + return + end + end, + + on_timer = brewing_stand_timer, + on_rotate = on_rotate, +}) + +minetest.register_alias("mcl_brewing:stand", "mcl_brewing:stand_000") + +minetest.register_node("mcl_brewing:stand_100", { + description = S("Brewing Stand"), + _doc_items_longdesc = S("The stand allows you to brew potions!"), + _doc_items_usagehelp = doc_string, + _tt_help = S("Brew Potions"), + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + tiles = tiles, + drop = {"mlc_brewing:stand"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume + { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base + {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base + {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base + + {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 + {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 + {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 + {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 + {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 + + {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 + {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 + {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 + {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 + + + -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 + -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 + -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 + -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 + -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 + + {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 + {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 + {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 + {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 + + -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 + -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 + + {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 + {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 + {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 + } + }, + sounds = mcl_sounds.node_sound_metal_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 5, + + after_dig_node = after_dig, + allow_metadata_inventory_take = allow_take, + allow_metadata_inventory_put = allow_put, + on_metadata_inventory_put = on_put, + on_metadata_inventory_take = on_take, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("fuel", 1) + inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) + local form = brewing_formspec + meta:set_string("formspec", form) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local sender_name = sender:get_player_name() + if minetest.is_protected(pos, sender_name) then + minetest.record_protection_violation(pos, sender_name) + return + end + end, + + on_timer = brewing_stand_timer, + on_rotate = on_rotate, +}) +minetest.register_node("mcl_brewing:stand_010", { + description = S("Brewing Stand"), + _doc_items_longdesc = S("The stand allows you to brew potions!"), + _doc_items_usagehelp = doc_string, + _tt_help = S("Brew Potions"), + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + tiles = tiles, + drop = {"mlc_brewing:stand"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume + { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base + {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base + {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base + + -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 + -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 + -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 + -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 + -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 + + {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 + {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 + {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 + {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 + + + {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 + {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 + {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 + {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 + {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 + + {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 + {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 + {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 + {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 + + -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 + -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 + + {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 + {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 + {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 + } + }, + sounds = mcl_sounds.node_sound_metal_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 5, + + after_dig_node = after_dig, + allow_metadata_inventory_take = allow_take, + allow_metadata_inventory_put = allow_put, + on_metadata_inventory_put = on_put, + on_metadata_inventory_take = on_take, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("fuel", 1) + inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) + local form = brewing_formspec + meta:set_string("formspec", form) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local sender_name = sender:get_player_name() + if minetest.is_protected(pos, sender_name) then + minetest.record_protection_violation(pos, sender_name) + return + end + end, + + on_timer = brewing_stand_timer, + on_rotate = on_rotate, +}) +minetest.register_node("mcl_brewing:stand_001", { + description = S("Brewing Stand"), + _doc_items_longdesc = S("The stand allows you to brew potions!"), + _doc_items_usagehelp = doc_string, + _tt_help = S("Brew Potions"), + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + tiles = tiles, + drop = {"mlc_brewing:stand"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume + { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base + {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base + {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base + + -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 + -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 + -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 + -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 + -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 + + {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 + {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 + {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 + {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 + + + -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 + -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 + -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 + -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 + -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 + + {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 + {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 + {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 + {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 + + {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 + {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 + + {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 + {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 + {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 + } + }, + sounds = mcl_sounds.node_sound_metal_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 5, + + after_dig_node = after_dig, + allow_metadata_inventory_take = allow_take, + allow_metadata_inventory_put = allow_put, + on_metadata_inventory_put = on_put, + on_metadata_inventory_take = on_take, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("fuel", 1) + inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) + local form = brewing_formspec + meta:set_string("formspec", form) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local sender_name = sender:get_player_name() + if minetest.is_protected(pos, sender_name) then + minetest.record_protection_violation(pos, sender_name) + return + end + end, + + on_timer = brewing_stand_timer, + on_rotate = on_rotate, +}) +minetest.register_node("mcl_brewing:stand_110", { + description = S("Brewing Stand"), + _doc_items_longdesc = S("The stand allows you to brew potions!"), + _doc_items_usagehelp = doc_string, + _tt_help = S("Brew Potions"), + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + tiles = tiles, + drop = {"mlc_brewing:stand"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume + { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base + {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base + {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base + + {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 + {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 + {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 + {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 + {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 + + {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 + {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 + {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 + {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 + + + {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 + {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 + {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 + {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 + {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 + + {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 + {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 + {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 + {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 + + -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 + -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 + + {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 + {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 + {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 + } + }, + sounds = mcl_sounds.node_sound_metal_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 5, + + after_dig_node = after_dig, + allow_metadata_inventory_take = allow_take, + allow_metadata_inventory_put = allow_put, + on_metadata_inventory_put = on_put, + on_metadata_inventory_take = on_take, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("fuel", 1) + inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) + local form = brewing_formspec + meta:set_string("formspec", form) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local sender_name = sender:get_player_name() + if minetest.is_protected(pos, sender_name) then + minetest.record_protection_violation(pos, sender_name) + return + end + end, + + on_timer = brewing_stand_timer, + on_rotate = on_rotate, +}) +minetest.register_node("mcl_brewing:stand_101", { + description = S("Brewing Stand"), + _doc_items_longdesc = S("The stand allows you to brew potions!"), + _doc_items_usagehelp = doc_string, + _tt_help = S("Brew Potions"), + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + tiles = tiles, + drop = {"mlc_brewing:stand"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume + { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base + {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base + {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base + + {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 + {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 + {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 + {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 + {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 + + {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 + {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 + {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 + {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 + + + -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 + -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 + -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 + -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 + -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 + + {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 + {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 + {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 + {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 + + {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 + {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 + + {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 + {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 + {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 + } + }, + sounds = mcl_sounds.node_sound_metal_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 5, + + after_dig_node = after_dig, + allow_metadata_inventory_take = allow_take, + allow_metadata_inventory_put = allow_put, + on_metadata_inventory_put = on_put, + on_metadata_inventory_take = on_take, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("fuel", 1) + inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) + local form = brewing_formspec + meta:set_string("formspec", form) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local sender_name = sender:get_player_name() + if minetest.is_protected(pos, sender_name) then + minetest.record_protection_violation(pos, sender_name) + return + end + end, + + on_timer = brewing_stand_timer, + on_rotate = on_rotate, +}) +minetest.register_node("mcl_brewing:stand_011", { + description = S("Brewing Stand"), + _doc_items_longdesc = S("The stand allows you to brew potions!"), + _doc_items_usagehelp = doc_string, + _tt_help = S("Brew Potions"), + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + tiles = tiles, + drop = {"mlc_brewing:stand"}, + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + + {-1/16, -5/16, -1/16, 1/16, 8/16, 1/16}, -- heat plume + { 2/16, -8/16, -8/16, 8/16, -6/16, -2/16}, -- base + {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base + {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base + + -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 + -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 + -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 + -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 + -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 + + {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 + {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 + {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 + {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 + + + {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 + {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 + {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 + {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 + {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 + + {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 + {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 + {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 + {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 + + {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 + {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 + + {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 + {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 + {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 + } + }, + sounds = mcl_sounds.node_sound_metal_defaults(), + _mcl_blast_resistance = 1200, + _mcl_hardness = 5, + + after_dig_node = after_dig, + allow_metadata_inventory_take = allow_take, + allow_metadata_inventory_put = allow_put, + on_metadata_inventory_put = on_put, + on_metadata_inventory_take = on_take, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("input", 1) + inv:set_size("fuel", 1) + inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) + local form = brewing_formspec + meta:set_string("formspec", form) + end, + + on_receive_fields = function(pos, formname, fields, sender) + local sender_name = sender:get_player_name() + if minetest.is_protected(pos, sender_name) then + minetest.record_protection_violation(pos, sender_name) + return + end + end, + + on_timer = brewing_stand_timer, + on_rotate = on_rotate, +}) +minetest.register_node("mcl_brewing:stand_111", { + description = S("Brewing Stand"), + _doc_items_longdesc = S("The stand allows you to brew potions!"), + _doc_items_usagehelp = doc_string, + _tt_help = S("Brew Potions"), + groups = {pickaxey=1, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + tiles = tiles, + drop = {"mlc_brewing:stand"}, paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -357,43 +1005,11 @@ local brewing_stand_def = { _mcl_blast_resistance = 1200, _mcl_hardness = 5, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta - meta:from_table(oldmetadata) - drop_brewing_stand_items(pos, meta) - meta:from_table(meta2:to_table()) - end, - - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - - on_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - minetest.get_node_timer(pos):start(1.0) - --some code here to enforce only potions getting placed on stands - end, - - on_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - end, + after_dig_node = after_dig, + allow_metadata_inventory_take = allow_take, + allow_metadata_inventory_put = allow_put, + on_metadata_inventory_put = on_put, + on_metadata_inventory_take = on_take, on_construct = function(pos) local meta = minetest.get_meta(pos) @@ -401,6 +1017,8 @@ local brewing_stand_def = { inv:set_size("input", 1) inv:set_size("fuel", 1) inv:set_size("stand", 3) + -- inv:set_size("stand2", 1) + -- inv:set_size("stand3", 1) local form = brewing_formspec meta:set_string("formspec", form) end, @@ -415,34 +1033,24 @@ local brewing_stand_def = { on_timer = brewing_stand_timer, on_rotate = on_rotate, -} +}) +minetest.register_craft({ + output = "mcl_brewing:stand", + recipe = { + { "", "mcl_mobitems:blaze_rod", "" }, + { "mcl_core:stone_smooth", "mcl_core:stone_smooth", "mcl_core:stone_smooth" }, + } +}) -if minetest.get_modpath("screwdriver") then - brewing_stand_def.on_rotate = screwdriver.rotate_simple -end - -brewing_stand_def.description = S("Brewing Stand") -brewing_stand_def._doc_items_longdesc = S("The stand allows you to brew potions!") -brewing_stand_def._doc_items_usagehelp = -S("To use an brewing_stand, rightclick it. An brewing_stand has 2 input slots (on the left) and one output slot.").."\n".. -S("To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.").."\n".. -S("There are two possibilities to repair tools (and armor):").."\n".. -S("• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.").."\n".. -S("• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.").."\n".. -S("Armor counts as a tool. It is possible to repair and rename a tool in a single step.").."\n\n".. -S("The brewing_stand has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the brewing_stand gets damaged. brewing_stand also have a chance of being damaged when they fall by more than 1 block. If a very damaged brewing_stand is damaged again, it is destroyed.") -brewing_stand_def._tt_help = S("Repair and rename items") - -minetest.register_node("mcl_brewing:stand", brewing_stand_def) - -if minetest.get_modpath("mcl_core") then - minetest.register_craft({ - output = "mcl_brewing:stand", - recipe = { - { "", "mcl_mobitems:blaze_rod", "" }, - { "mcl_core:stone_smooth", "mcl_core:stone_smooth", "mcl_core:stone_smooth" }, - } - }) -end - +-- Legacy +minetest.register_lbm({ + label = "Update brewing_stand formspecs (0.60.0", + name = "mcl_brewing:update_formspec_0_60_0", + --nodenames = { "group:brewing_stand" }, + run_at_every_load = false, + action = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", brewing_formspec) + end, +}) diff --git a/mods/ITEMS/mcl_brewing/locale/template.txt b/mods/ITEMS/mcl_brewing/locale/template.txt old mode 100644 new mode 100755 diff --git a/mods/ITEMS/mcl_brewing/mod.conf b/mods/ITEMS/mcl_brewing/mod.conf old mode 100644 new mode 100755 index e2e88d1b72..de164abf92 --- a/mods/ITEMS/mcl_brewing/mod.conf +++ b/mods/ITEMS/mcl_brewing/mod.conf @@ -1,3 +1 @@ name = mcl_brewing -depends = mcl_init, mcl_formspec, mcl_sounds, mcl_potions, mcl_mobitems -optional_depends = mcl_core, screwdriver diff --git a/mods/ITEMS/mcl_brewing/sounds/mcl_brewing_complete.ogg b/mods/ITEMS/mcl_brewing/sounds/mcl_brewing_complete.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1798cb2730098ef00b966afa24e82a203bef2623 GIT binary patch literal 38394 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®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 iCi{nRO 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 TAj0Ys2ZcG^NGw>B?*Bpp5|M;L literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bottle_bg.png index 64032deaf428d8e97a4aaf67e35850904115120c..c0c4fd2be15e5849c00ebadbe188f162e56cb4a9 100644 GIT binary patch literal 1165 zcmds#ziO0G5XDbS2qv;oyI>H(Mp0}We1OOiX#br)c_vz(kVU}jqZK>SN!#vHaDcB6R2#d6+hT?3xWmu+V!N^rBw+gGYqAS#h z0SzTs?9mu)q|xGXwV|$A;hyf*{%A`T;gKHIcA;Q1!!tb#_ds#hE4reil^I#&id`t!jLIl-BxwSGi{k{1TcRWn zFu6?}Fku*nP$LF3H^G8~#%Lp5J)%C%HZ`l57(wEXwp3Zw103UTiZRii=NM8$jof>@ zBg$qR>GZUR;YJ=FdiVpY9gI#$^Eogj!o$;OHNM1u{(Ai4*@_Kc1vG(!!?Tybq*%$Xn=%*4RJFkxbb8IWQt3GxdD(m;^6jC~@IQuK6j45?sDmQW~QwtZr_Z#`$aSz=wwr5i7^{ z2A|~E9hP5zcC?GF`K3R^lbJl|X!6y~P0tvimYRG5MuLy8swwaenuylj!e7nOHp1*a e9y8}UW;g++3vCld-LqN%0000>WUgtt7}V7)S#_-ZJ)yKq|n~#WAFU@#%zvoDB{FN7iWl zEjK%4<9}l10bqX;`=Qw)-{;7#YYKbGAY>Z^vcuEW&t)C6Q$iB}f(JIX diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles_active.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles_active.png index b30fc8dd7a39b892f1875b651303fc8f7c7d5dcb..2a367807ac6d5024ee9a392ede39401ffc9c2c55 100644 GIT binary patch delta 177 zcmV;i08amz0m1>08Gi-<007s*{OD0Cd94voy3w50{48`Rm?_4~t;tnT{`` z%Or=@Sc+tc3CVithe#sIRozqW^#H~>JjNIV07OKWLis8PnfUA|S8$H)400000NkvXXu0mjfhVMuJ delta 136 zcmX@aIFoULWIYoD14G1u>>WUgtt7}V7)S#_-ZJ)yK+4b4#WAFU@##cHwgV0VM}DpP z`TzVjmV#85%xJv^;hem_-zppLHEf#7UOn&M{k{e}wyfar^}fva^B@0jEf?IqZCzHr lY=xEJmoFc-aUI<}hr4XXa<;Xx^FTIuy85}Sb4p-r0s!h!H5vc_ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png index b15bd5e3e417a91902ad35d8c8e242391e3466be..e2e8e8afeb20074143562bc5bf4e7722417e91de 100644 GIT binary patch delta 128 zcmd0u%s4@^ij9GRVe|Ex1R%v(;1OBOz`%C|gc+x5^GO2*T|HeKLnNlYy=cgIKtbTZ zf!|Wj?0geiSaKG;vA$TAkdkvO#m6B{?Ml=^3FV}dmg+C|How+hxb<6`Y`ul3mu7#2 debe8A(oE(u+IzC2t$+qHc)I$ztaD0e0swWbEMWiu delta 90 zcmbQtm^(o-go%NH!Dj1gb0Ec5666;Qq=6uB8T&*arR3@27*fHQ%+T~dL4c8s;~%3z nLs!#Jjs_(Ytrp3+84I}>o;-U~;xG8f5Twh~)z4*}Q$iB}8KN21 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png index b5782d0fad0191fa07b2e2d7b6b769b6f23f3d7a..93655b67322e5ed2a483a4017747af703f9682ea 100644 GIT binary patch delta 139 zcmd0w%Q!)@o{fQlVe|Ex1R%v(;1OBOz`%C|gc+x5^GO2*{XJbALnNlYy||IH!9axJ zqImVexpS2Ea`>rqFsE>q3&}i)cGcC<-TP_X9u`5t3B_znr%YL8bB(j-Hs7q}Elc0O p`*2KtAJjERAP!Dj1gb0Ec5666;Qq=6uB8T&*arQ+%07*fHQ%+T~dL4c8s>D>&UBdiaeD`A?mNHFD0%aZU1{6X3YWnFR%m$K$w?D+S)in;lg VYTi|UCT)-#JYD@<);T3K0RY}WNXGyG delta 105 zcmeyxSTjK~nTdgcVZy`=Ga$uQ666;Qq=6uB8T&*aW$5YR7*fHQED=!f=m_Vf5aHDi zS+o?^%<|!F`8r2|MdNZolSM;-??$#$b6vbO=u<5X=vX$A)7 z-JULvAr*7p-t{heWF^5C@G~sGgYzEauDFR&k3_-XwQTmZM9_#P#|M2x|sLAVP>x!-B9(r1IGOGRg(QUWu_WM^AR_?!l zTq3!qzP|tJUts9Wef)98RzB^3xhAFm(tr7^dEF9{y-Xt6XJg$huesCXnU{$q_r!Mp ze&u4f`N#b#S)mTYvUQsu^@~j0y46Z0Xl{?*)ug}M)pN2-*Dwmd>RNO7p}@K4#T*a! zpQw5!bYj};2?wq%3S?P-222Kor?d(j`dY=SxJFyb^+T7AuGIeh`@;jpLcJP4cVChAkZDLfu*PkAQVuxFfjdnw5%y$)=*Kf(P}}vM*{hg=f6W;5n%GBlT&Q zj-b!#wXVtWbN|-qH%(uad(A?I?_tqSk>^JhzRSkCzCwxTX+_V&jgf0P^KWs02%R6gz#ef3mey3u-(gFBzdG-!4tq?x|f zt2pBtx;tT#@WGdz4+LEdHXo0=?ixIQS8ZHR=0B@f&pLsMo?YInR53ek{xVmC&4LHd zc(E8)uK|i1n>4kbx?5kDe=Yv#*Vhfq$$v8|MD{y({$#$N*1QKbLh*2~7a~AmxDo delta 474 zcmV<00VV#42rFrlgRctp z^6=$QjSC@+bAK_^GXZY$#Zb=@#a3^J7UiRg*g(>m}qJLo_!a-xSkw&XJx!$H`Wkhw5_@gaVW@M2ocA;Q1Dx=7eqzM2njuSL) ziIP0P;Sa2KFghX4=fIQ*4^N}j_!9s5>&c6k*Q6Oe-`Uy)e)#Jx!Z{}AI7f$w%u78@p{QlwRUuSdY or<5xPcYhvDKiqhIaOu_e3p)S(^~dSv+)20Im~Krz-hcG=50BzPYXATM delta 95 zcmbQjSu{a1l8J$VVZy`=Ga$uQ666;Qq=6uB8T&*arS9qC7*fHQETK@q#?ukp#n^Gx sd70{!vP+UO4I8q24BnUs@Tu-%VlXzml-MiyE(fI5)78&qol`;+0D&hOqW}N^ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png index 52530bc21a82b86ff2943c41cdb0fe2d5e63a7f0..7793eae65f8c60e3f53bd777393265ccf6fafc7e 100644 GIT binary patch delta 389 zcmV;00eb%I0h9xf7=H)`0000V^Z#K0000SaNLh0L01FcU01FcV0GgZ_0003-NklOjmOhFo>2}ZBKD*46=`q7#s52Fc& zLBR3#i!ls>HT}Dko`)#`oZmi)&Fa|cLAdVT?R2u3w4`LLe3W{=%g9c~`Y$|s4*~$d zrUQu`H%9v#J5{+qPTO%_`&Z j8vqrnLbGORg4q894h5f%W16LW00000NkvXXu0mjfB8{!y delta 220 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 z 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_potions/sounds/mcl_potions_drinking.ogg b/mods/ITEMS/mcl_potions/sounds/mcl_potions_drinking.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6e3978d29258fc9da728699ff26a9a69f815f07e GIT binary patch literal 23932 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_potions/textures/hb_swiftness_bgicon.png b/mods/ITEMS/mcl_potions/textures/hb_swiftness_bgicon.png new file mode 100644 index 0000000000000000000000000000000000000000..b01f148599a6e7b1d4f79afa58a8842f0b8841e7 GIT binary patch literal 1157 zcmds#v1*i25QWdO5t3j6S|&({t>x4f$}aALY(kPIT|k^7m7`3Tk63 z*a%Yz;+v$Md~=_`%EAl(zs%ly&wS_1|MqzGXlHwGThh*QF+1URtDns&?>|RZccrP0 zAD_)BC6inVDW&SlOy;tXrL20>P44oLr@Z=Xn8FpINJaJ4G^Hy;naV;*Whz&NDpeF{ zBaIf9IbGeSmz#xInpL-@ayJk2G_R&$Gu$F9(xMuQv+0&$nU)13SFPMCtkR0EP$LF3 zlwh$(W3-V*i_6u9x@LuYx>x(7Emed^dQ{tmg3S!i^eo&1#aXZLN-yk@2bkO@4*Uaw zL#Po08cL4BL1VO$Myoox-lk?{M0Jq(qb*ftWRWX&p>pR6Etp#l03lV zHgUj&VH`q@7|`4V3l18ijdb;h`ZU|rtYTsWi9gy>WmOMwjK3+yM0=iNNDVb|@9~Z( zn{lMm(;kK!d3fmI53F`DIw8&Hz?29NPovfN694(@>8sawq={ahtWLrBFW29Oy8kmS zIlJ|2asEQu{n5|l!@b>o{ybRD9-M8)lW&vh&5JL$zF%&9-aFKK{eJ%Y`E-3lUl;e^ T{kr{eqkApqtJ$ZA7jLcs;?Oys literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_potions/textures/hb_swiftness_icon.png b/mods/ITEMS/mcl_potions/textures/hb_swiftness_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5c85ae17799a58b96bcccee6585d29709b44772e GIT binary patch literal 1167 zcmds#v1*i25QWcX3pc@}u}esyo!AJ2*lI{H3$iY23eyGDDXc;?jarF~t)MV3A=t&< zLSeAA^D%74Z|)OVS$N_9m)U#oneUwW-z^vSHaE66ByG+Q_gDO`_cNRF{`uhdHEF8l z{i6d)$t0ITN~yXslesKpDXZRele;|RDX%^orf@|lQc-<1P3g)|rm|2{naWk6N)-j# zNTbDNPFMHoum(hGa!0VcPJ1OGta z5NgDLhLWRj&=_r`(W*|ax2ahfQ5_`yXiJqDS>%dcDA7_J1~fOpf`i6rBV9eBKFu~YtC$!;;*YjeS=9p^<8O*F(VpiRQbUd0d%Ppc zW*q7Cw1?qF9v*u51FId3PDt}PFeSpn(`Yrm#DD&J`ttRzG|`LI;vpFS<@(!DcfQ9n z&aR&x9zU11zV)H_y*b d&rf%6FCS@pa_jilmyfTy>-=D`|7q{!%^xOIJbeHF literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_bottle.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..17a69a8b6280bd7ce7054cb169240ae3cdf2a4b7 GIT binary patch literal 1210 zcmds#J!@1^5QZm2Fj>q8R${PG&_V@eTES>GngtCZZlPV8Op!ta6Of<~VxvV;8F5_k zCj=uFqLpGJ8BnmXu~W3LQMA!weCGZFD+>?YyUd<*-g(}4?(LcBvqP=DEfE>&OtokE z9p%|Q(9e7R)8<8yewjJfoum{|5fgEd5Xq`kMNQO2Lo{pCRLsO&EX1oRxd|2=G)5cgtP#~|wy9ak#0V09w55v7 z8elX2qG%>s^K6DxP)+VN-X_XoY|^P|H--zj@leBWu*yNx328nDrbKvnYFag4;y-`Q zFJIp$(kF|v(-*+_FW29OI`-NZI6HV{>e5w_;aBzaZ5$pRW9`lMpd26A z@pjRBlh?MFe);l~2j};HJn;4L&08ma%zeA_y>);5-I?Cf%EI&Ufk&4|*Vmt|Y#rVC t{@9U~-k~pBPj}s09lCLF;^f2MBO@=?K2N;-@bhi~b|$CWo2Tbi{{UQ+Sj+$b literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_overlay.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_splash_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..9acbce6cda8345209e09fbd68eb3f0e1e47fa3fe GIT binary patch literal 1172 zcmds#v1(LN5QhJ-5HyfQEF>fZJ3$niArGKzFblGV7(}fCnn7%gXeAbj*w~w5z{*0q zU?W&qS}2U2udra_GmPKdC$O^cz`e`tIp?46|L4Bmo?TyFT3wQ~Jl&e?@Oy^m?5Pp& z{rSlqX{7BNyPK4fNiKzyQgvk}b6LnzR=w#acX`NDUVS!9;fheCqWWr@(v_i1Wuc@p zm8(LPDhjlbMvKdwuI|&z&B83rs@qbzn}>OtS5vSVZV?t~Q4Ph}bjz?z%Yu=sR&Etm zX+>A45d#`Zu-Kz9+DN0tytNqcID#9Z@s_jC-W`<{a7Vd%KtXFuY7xu^l zOl}hg{(-S=J)M;=jWfg^>lMKIk~p?@(-m`LazV- literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_sprite.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..17391b1fd60aebe926edaadfdae5e5895c6b2b34 GIT binary patch literal 1181 zcmds#ziU)c5QR?&!fr5YV`Z=p1Z@Vf5;P>3h=iCQgOtLkSjpG)5a~w76VtsB2cZr+c+O+EPV$q(`+~DA>&KOwYnSP@MG&uk^wm zd4S1n;=n%;ID{H8prPa_95hB7X|$@7>uqXQMpOrhKiX1dMi#kZ7Ya6`GKw5YngHP9 zI6>o>* z!T2xN--f#IIqq_Hd~faMRGNJ3XXg3RWPv{~uCH9#8O5c8_hVfieYkb>d+)`;bob}} z+UV7ZH|G|Q@4q~Gc=~wp)Q|0FPtT9vUYjl*eVY8z*DuQ#-t9j8-VE!j8!NAuZ$J72 DvG+&^ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_tnt/init.lua b/mods/ITEMS/mcl_tnt/init.lua index 90cb76d8d3..14865febf0 100644 --- a/mods/ITEMS/mcl_tnt/init.lua +++ b/mods/ITEMS/mcl_tnt/init.lua @@ -13,8 +13,9 @@ end tnt = {} tnt.ignite = function(pos) minetest.remove_node(pos) - spawn_tnt(pos, "mcl_tnt:tnt") + local e = spawn_tnt(pos, "mcl_tnt:tnt") minetest.check_for_falling(pos) + return e end -- Add smoke particle of entity at pos. @@ -70,9 +71,8 @@ minetest.register_node("mcl_tnt:tnt", { groups = { dig_immediate = 3, tnt = 1, enderman_takable=1, flammable=-1 }, mesecons = tnt_mesecons, on_blast = function(pos) - local e = spawn_tnt(pos, "mcl_tnt:tnt") + local e = tnt.ignite(pos) e:get_luaentity().timer = tnt.BOOMTIMER - (0.5 + math.random()) - return true end, _on_ignite = function(player, pointed_thing) tnt.ignite(pointed_thing.under) diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 083f9539ea..f59fc6dd93 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -36,9 +36,7 @@ mcl_structures.call_struct = function(pos, struct_style, rotation) if not rotation then rotation = "random" end - if struct_style == "village" then - return mcl_structures.generate_village(pos, rotation) - elseif struct_style == "desert_temple" then + if struct_style == "desert_temple" then return mcl_structures.generate_desert_temple(pos, rotation) elseif struct_style == "desert_well" then return mcl_structures.generate_desert_well(pos, rotation) @@ -61,14 +59,6 @@ mcl_structures.call_struct = function(pos, struct_style, rotation) end end -mcl_structures.generate_village = function(pos) - -- No generating for the moment, only place it :D - -- TODO: Do complete overhaul of the algorithm - local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_village.mts" - return minetest.place_schematic(newpos, path, "random", nil, true) -end - mcl_structures.generate_desert_well = function(pos) local newpos = {x=pos.x,y=pos.y-2,z=pos.z} local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_desert_well.mts" @@ -482,7 +472,7 @@ end -- Debug command minetest.register_chatcommand("spawnstruct", { - params = "desert_temple | desert_well | igloo | village | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_portal_shrine", + params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_portal_shrine", description = S("Generate a pre-defined structure near your position."), privs = {debug = true}, func = function(name, param) @@ -493,10 +483,7 @@ minetest.register_chatcommand("spawnstruct", { pos = vector.round(pos) local errord = false local message = S("Structure placed.") - if param == "village" then - mcl_structures.generate_village(pos) - message = S("Village built. WARNING: Villages are experimental and might have bugs.") - elseif param == "desert_temple" then + if param == "desert_temple" then mcl_structures.generate_desert_temple(pos) elseif param == "desert_well" then mcl_structures.generate_desert_well(pos) diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.de.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.de.tr index e701b7879b..3245b934cc 100644 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.de.tr +++ b/mods/MAPGEN/mcl_structures/locale/mcl_structures.de.tr @@ -1,7 +1,6 @@ # textdomain: mcl_structures Generate a pre-defined structure near your position.=Erzeugt ein vordefiniertes Gebäude in Ihrer Nähe. Structure placed.=Gebäude platziert. -Village built. WARNING: Villages are experimental and might have bugs.=Dorf gebaut. ACHTUNG: Dörfer sind experimentell und können fehlerhaft sein. Error: No structure type given. Please use “/spawnstruct ”.=Fehler: Kein Gebäudetyp angegeben. Bitte benutzen Sie „/spawnstruct “. Error: Unknown structure type. Please use “/spawnstruct ”.=Fehler: Unbekannter Gebäudetyp. Bitte benutzen Sie „/spawnstruct “. Use /help spawnstruct to see a list of avaiable types.=Benutzen Sie „/help spawnstruct“, um eine Liste der vorhandenen Typen zu sehen. diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.es.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.es.tr index ae909b9c49..d73d81466d 100644 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.es.tr +++ b/mods/MAPGEN/mcl_structures/locale/mcl_structures.es.tr @@ -1,7 +1,6 @@ # textdomain: mcl_structures Generate a pre-defined structure near your position.=Genere una estructura predefinida cerca de su posición. Structure placed.=Estructura colocada. -Village built. WARNING: Villages are experimental and might have bugs.=Pueblo construido. ADVERTENCIA: los pueblos son experimentales y pueden tener errores. Error: No structure type given. Please use “/spawnstruct ”.=Error: no se especifica ningún tipo de estructura. Utilice "/spawnstruct ". Error: Unknown structure type. Please use “/spawnstruct ”.=Error: tipo de estructura desconocido. Utilice "/spawnstruct ". Use /help spawnstruct to see a list of avaiable types.=Utiliza "/help spawnstruct" para ver una lista de los tipos disponibles. diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.fr.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.fr.tr index 7c1ba27231..74f5282efe 100644 --- a/mods/MAPGEN/mcl_structures/locale/mcl_structures.fr.tr +++ b/mods/MAPGEN/mcl_structures/locale/mcl_structures.fr.tr @@ -1,7 +1,6 @@ # textdomain: mcl_structures Generate a pre-defined structure near your position.=Générez une structure prédéfinie près de votre position. Structure placed.=Structure placée. -Village built. WARNING: Villages are experimental and might have bugs.=Village construit. AVERTISSEMENT: les villages sont expérimentaux et peuvent avoir des bugs. Error: No structure type given. Please use “/spawnstruct ”.=Erreur: Aucun type de structure indiqué. Veuillez utiliser "/spawnstruct ". Error: Unknown structure type. Please use “/spawnstruct ”.=Erreur: Type de structure inconnu. Veuillez utiliser "/spawnstruct ". Use /help spawnstruct to see a list of avaiable types.=Utilisez /help spawnstruct pour voir une liste des types disponibles. diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_desert_temple.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_desert_temple.mts index b60bce2dd07383e7979453f37e74abaae1b37374..79a58637b9a9959bf06f1186a4eb65bb143614cf 100644 GIT binary patch delta 1110 zcmV-c1gZPV3bYH5B>@hRCPR}k0V9!*8UY}Ysu~7gZ*_EKa*?PVk!dE8#VwI(9|n14 zY;13Lk?}u&c%1E=i^_4++(+V!n}yb82)Hrbv@K%4BBAFhN_G4Vsi z6Bl=bx=nRUV$@uw(#DMWi?vKuZ^%!&#pQ>qSoyMBuzjE<^5%ynK1SvKAJi3LEf;NW z?D1oWs%yIz^M{!BftJ`SKX5U#{2kJA(Kfz63%=OAd6jnC!pE>i8`}4x9iQ_IoPPl2 z$e$m7M&?81hYRze@&jG3QvUp4;)~?hO!?+j!sG_pq}};LxXy5F`XYJBH@+irwV{zR zUz12b0_!%=Ci~1E+%YmJZvJ4KZ~oxct5k~o5Grx&9=vtZEy+6~>#{l-)!q7S$}`Vp zkH*&g@L-hgs9Jt2ED@uB3q_ajyMLX1enQ88%`(*X(!KeV?kJIusrd0&n{DG~veb;~ z-(->uv0QhO5Od6RYuzzVYw7&(JsG96$BKJh&m5WlF<{Rtlt=&Y#HM>}?u^B)+uYix z_O;7gA5v27mZ&Al61I&z`QiS~4|jn!?nq*exo+*2{P1|@hV%3DAe3_rlB@im{l!Lq z8@G-g@!YXV=MUT-&2nG6%=IDVqLC;+9z=eK0rQ8j7V`&6O>fV|y{uj4`jC=pw?r*b zmasa(`G*k4IRC(d^AGzNXcJt&pwyufw{Bd&@Ed3o-2cF-bKU=NOapC#`zJXy?w?F) zpiSDHKYYOR7qRu?`3oRr&-`FNm#Hg%!dhRn4c0drB>d)0YU>BoGG7Vm#p4DWyFi#p#QHAiI0F<;C4fqEAP=QG};reXd7q~QINoEGn& zOlbeXMC#$&Dy93O77TyTUTVHn!XCbE0m>1j`Yl(fA`6Kv0UHlwVUgb4UdqLPgL6zE zHXg{r5`7#~iu@oaO+1i=S^GGqRKi;S^+wis(DtyZlXfJ9FMFUwJP^vi6?u9)%oZQ^ zME-cN3)y%e3-@A`^E!lZ1nnQ%ZL~KDCzHM>yM*kilwD5}>$hInD;~(SL3Rn*Q)CBj zivV)xho`rApo1h_8s)T(=`9|A))M8kj=}uFYSY2N?+dF<2dAp@4+Yue#E!uE$(a;YWA(6$7)zNv2saQ}n8CBXer`j)_)0Tk}HT%`a2Ab*$-tfegvzgkPY-nXrTsDmz^ zU}WP#`VMH&6-+z~1LEP33 cp$OHUkj4EExoOLhxc>p@tiS)^7qZja{I-uhjQ{`u delta 1036 zcmV+n1oQi}3(5+RB>@eQCPM)vk!l_WZ*pO7XJwI#8MG)D z*?)Ov4b}x_NJwq;cJnRwP?LUXvY`IWIuhdtJhaQa%?yAX=CN1X8LcLKj{^hf7{9*JJ#3sNJwp_J>F`I?Tz&ZkjSAAmybU9D`pzwkG5ATe|*sc zA+;%2@?3BH`|{Q&jSXvzsgJ+X4eA7aSn7kkeSh6w9j$5l*MdQvY}JRGqs?~oK^wX3 zNs8mH7Aup^JZ9&leoEbooVYY#i#`}ZA3E#X7<>IeA3KefV$Cdedd4vS9{ux5ma6-` z75mH}R3EgFu6?Q1w(-h%=}Yu3vEdVh@8l*{Tn&HrvsMcN=nRn*Oz5P$%faQXdAme=?;( zo#fC5p1-Iowl|)?0ExW%;H#0hZ~pCzm7m|Vv15HzI(T`0QyO?f2ar1`SXLEW9}m& zb*H4DdJvs^5tz2ql6C%IH)-cy91?M)a+QI-@#e{+4^lmhgKBNaa*HD+4q&okkoKTa z_NxbnJ|wOOxk%Q%`iz|$^ue(Qjl%q4(bcBm{KD!};}ld6tUnY0>yw{N!#CG2X6*pi zH>d3Y_dgiJ{SOmdUiC0d>?UvKF_yjPLo9oZ(7xXA`2zp|0Bk}3D5LmdW&Qv5l#%{X zJfS0(GI|H4z+=0u!pH*vK Date: Tue, 9 Jun 2020 19:05:51 -0400 Subject: [PATCH 21/34] Correct alias issue. --- mods/ITEMS/mcl_brewing/init.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 5535cee8e9..696e0af12c 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -429,9 +429,7 @@ minetest.register_node("mcl_brewing:stand_000", { on_timer = brewing_stand_timer, on_rotate = on_rotate, }) - -minetest.register_alias("mcl_brewing:stand", "mcl_brewing:stand_000") - +minetest.register_alias("mcl_brewing:stand_000", "mcl_brewing:stand") minetest.register_node("mcl_brewing:stand_100", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), From b674e743874d3fbe4a40666ae2b1b4c9aa92542e Mon Sep 17 00:00:00 2001 From: bzoss Date: Tue, 9 Jun 2020 20:09:32 -0400 Subject: [PATCH 22/34] Correct redstone alias and Add poison and regeneration potions - THESE DON'T CURRENTLY WORK --- mods/ITEMS/mcl_brewing/init.lua | 14 +- .../mcl_brewing/textures/mcl_brewing_side.png | Bin 404 -> 392 bytes mods/ITEMS/mcl_potions/init.lua | 192 ++++++++++++++++-- 3 files changed, 187 insertions(+), 19 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 696e0af12c..4e93d87925 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -341,6 +341,18 @@ local allow_take = function(pos, listname, index, stack, player) end local on_take = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local str = "" + for i=1, inv:get_size("stand") do + local stack = inv:get_stack("stand", i) + if not stack:is_empty() then + str = str.."1" + else str = str.."0" + end + end + minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str}) + minetest.get_node_timer(pos):start(1.0) + --some code here to enforce only potions getting placed on stands end minetest.register_node("mcl_brewing:stand_000", { @@ -429,7 +441,7 @@ minetest.register_node("mcl_brewing:stand_000", { on_timer = brewing_stand_timer, on_rotate = on_rotate, }) -minetest.register_alias("mcl_brewing:stand_000", "mcl_brewing:stand") +minetest.register_alias("mcl_brewing:stand", "mcl_brewing:stand_000") minetest.register_node("mcl_brewing:stand_100", { description = S("Brewing Stand"), _doc_items_longdesc = S("The stand allows you to brew potions!"), diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_side.png index 7793eae65f8c60e3f53bd777393265ccf6fafc7e..057a405e0b90e9fd1a7307bae5fdb548bb8765da 100644 GIT binary patch delta 344 zcmV-e0jK_y1Be5VIe$7yL_t(IjfIlGP69y?#(zhSz=c0H7wCM6djLtSAi35MAK-dT z)W$?RBPRCn0OlGiB2*f9fUBV(7IYXwBZk;GR=c^q3brJQ1Uc|`0D4`0d#Bw_Yxa$#umtD{ zvNX0jc)bhL@461*{fRtH0bn#9r+RfnQ8ve+J?M48^9~!tKgXCTwn)h-6}B}vs%fJR z@OTN9Kd@k+n^D~ES<1|MxWAR-rpt1*Hf~t0zi7G*jjK+H?e5p$>*WgeZu`T=DQSVq qO}9bSDKVda0#K|Jsh2C-K-K@~s;s=D6?bC*0000Lc{kjKW z)Hu?4*L96_jVMkM_&&;aQAK%xQkq0`2*Epa{_S2almmEYy?>P#6=H;f$?!xZ`!|D3 zK^mh8Mz6mr`Nj(R(V8R=qX~vV!148qF${t={kxQ&hbaM^-#&@W>e%T)xbEKVbh4PV zq-3molzP6)$WF%kFFbk=0sz3K1Bo5vVaoArJDF Date: Fri, 12 Jun 2020 19:11:06 -0400 Subject: [PATCH 23/34] Add invisibility potion - includes splash and plus --- mods/ITEMS/mcl_brewing/init.lua | 2 +- mods/ITEMS/mcl_potions/init.lua | 63 ++++++++++++++++++++++++- mods/ITEMS/mcl_potions/invisibility.lua | 28 +++++++++++ 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 mods/ITEMS/mcl_potions/invisibility.lua diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 4e93d87925..73ddb9840d 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -134,7 +134,7 @@ local function brewing_stand_timer(pos, elapsed) -- return 1 -- end -- end - brew_output = brewable(inv) + local brew_output = brewable(inv) if fuel ~= 0 and brew_output then fuel_timer = fuel_timer + elapsed diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index c5273bcd27..54c7bcf55e 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -1,4 +1,8 @@ local S = minetest.get_translator("mcl_potions") +mcl_potions = {} + +local modpath = minetest.get_modpath("mcl_potions") +dofile(modpath .. "/invisibility.lua") local brewhelp = S("Put this item in an item frame for decoration. It's useless otherwise.") @@ -770,6 +774,53 @@ minetest.register_craftitem("mcl_potions:regeneration_plus", { end }) +local invisiblility_func = function(player, duration) + invisible(player, true) + minetest.after(duration, function() mcl_potions.invisible(player, false) end ) +end + +minetest.register_craftitem("mcl_potions:invisibility", { + description = S("Invisibility Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#B0B0B0"), + inventory_image = potion_image("#B0B0B0"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + invisiblility_func(user, 180) + _use_potion() + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + invisiblility_func(user, 180) + _use_potion() + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:invisibility_plus", { + description = S("Invisibility Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#A0A0A0"), + inventory_image = potion_image("#A0A0A0"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + invisiblility_func(user, 480) + _use_potion() + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + invisiblility_func(user, 480) + _use_potion() + return itemstack + end +}) + -- Look into reducing attack on punch minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) if puncher:get_attribute("weakness") then @@ -908,6 +959,15 @@ register_splash("regeneration_2", "Splash Regeneration II", "#B52CC2", { register_splash("regeneration_plus", "Splash Regeneration +", "#C53DD3", { potion_fun = function(player) regeneration_func(player, 0.85, 180) end }) + +register_splash("invisibility", "Splash Invisibility", "#B0B0B0", { + potion_fun = function(player) invisiblility_func(player, 135) end +}) + +register_splash("invisibility", "Splash Invisibility", "#A0A0A0", { + potion_fun = function(player) invisiblility_func(player, 300) end +}) + -- duration effects of redstone are a factor of 8/3 -- duration effects of glowstone are a time factor of 1/2 and effect of 14/12 -- splash potion effects are reduced by a factor of 3/4 @@ -958,7 +1018,8 @@ local inversion_table = { ["mcl_potions:swiftness_plus"] = "mlc_potions:slowness_plus", ["mcl_potions:leaping"] = "mcl_potions:slowness", ["mcl_potions:leaping_2"] = "mcl_potions:slowness_plus", - ["mcl_potions:leaping_plus"] = "mlc_potions:slowness_plus", + ["mcl_potions:leaping_plus"] = "mcl_potions:slowness_plus", + ["mcl_potions:night_vision"] = "mcl_potions:invisibility", } diff --git a/mods/ITEMS/mcl_potions/invisibility.lua b/mods/ITEMS/mcl_potions/invisibility.lua new file mode 100644 index 0000000000..f7311c2172 --- /dev/null +++ b/mods/ITEMS/mcl_potions/invisibility.lua @@ -0,0 +1,28 @@ +-- invisibility function +invisibility = {} + +-- reset player invisibility if they go offline +minetest.register_on_leaveplayer(function(player) + + local name = player:get_player_name() + if invisibility[name] then + invisibility[name] = nil + end + +end) + +invisible = function(player, toggle) + + if not player then return false end + + invisibility[player:get_player_name()] = toggle + + if toggle then -- hide player + player:set_properties({visual_size = {x = 0, y = 0}}) + player:set_nametag_attributes({color = {a = 0}}) + else -- show player + player:set_properties({visual_size = {x = 1, y = 1}}) + player:set_nametag_attributes({color = {a = 255}}) + end + +end From 7b4ded46f93101f2ef268c755220f06aeb2a2567 Mon Sep 17 00:00:00 2001 From: bzoss Date: Fri, 12 Jun 2020 19:54:45 -0400 Subject: [PATCH 24/34] Rearrange the code structure. --- mods/ITEMS/mcl_potions/functions.lua | 67 +++++ mods/ITEMS/mcl_potions/init.lua | 353 ++++++------------------ mods/ITEMS/mcl_potions/invisibility.lua | 28 -- mods/ITEMS/mcl_potions/splash.lua | 145 ++++++++++ 4 files changed, 302 insertions(+), 291 deletions(-) create mode 100644 mods/ITEMS/mcl_potions/functions.lua delete mode 100644 mods/ITEMS/mcl_potions/invisibility.lua create mode 100644 mods/ITEMS/mcl_potions/splash.lua diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua new file mode 100644 index 0000000000..c3b3b4b79a --- /dev/null +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -0,0 +1,67 @@ +local invisibility = {} + +-- reset player invisibility if they go offline +minetest.register_on_leaveplayer(function(player) + + local name = player:get_player_name() + if invisibility[name] then + invisibility[name] = nil + end + +end) + +function mcl_potions.invisible(player, toggle) + + if not player then return false end + + invisibility[player:get_player_name()] = toggle + + if toggle then -- hide player + player:set_properties({visual_size = {x = 0, y = 0}}) + player:set_nametag_attributes({color = {a = 0}}) + else -- show player + player:set_properties({visual_size = {x = 1, y = 1}}) + player:set_nametag_attributes({color = {a = 255}}) + end + +end + +function mcl_potions._use_potion() + minetest.item_eat(0, "mcl_potions:glass_bottle") + minetest.sound_play("mcl_potions_drinking") +end + +function mcl_potions.healing_func(player, hp) player:set_hp(player:get_hp() + hp) end + +function mcl_potions.swiftness_func(player, factor, duration) + playerphysics.add_physics_factor(player, "speed", "swiftness", factor) + minetest.after(duration, function() playerphysics.remove_physics_factor(player, "speed", "swiftness") end ) +end + +function mcl_potions.leaping_func(player, factor, duration) + playerphysics.add_physics_factor(player, "jump", "leaping", factor) + minetest.after(duration, function() playerphysics.remove_physics_factor(player, "jump", "leaping") end ) +end + +function mcl_potions.weakness_func(player, factor, duration) + player:set_attribute("weakness", tostring(factor)) + print(player:get_player_name().." ".."weakness = "..player:get_attribute("weakness")) + minetest.after(duration, function() player:set_attribute("weakness", tostring(0)) end ) +end + +function mcl_potions.poison_func(player, factor, duration) + player:set_attribute("poison", tostring(factor)) + print(player:get_player_name().." ".."poison = "..player:get_attribute("poison")) + minetest.after(duration, function() player:set_attribute("poison", tostring(0)) end ) +end + +function mcl_potions.regeneration_func(player, factor, duration) + player:set_attribute("regeneration", tostring(factor)) + print(player:get_player_name().." ".."regeneration = "..player:get_attribute("regeneration")) + minetest.after(duration, function() player:set_attribute("regeneration", tostring(0)) end ) +end + +function mcl_potions.invisiblility_func(player, duration) + invisible(player, true) + minetest.after(duration, function() invisible(player, false) end ) +end diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 54c7bcf55e..bfb6fffbfc 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -2,7 +2,8 @@ local S = minetest.get_translator("mcl_potions") mcl_potions = {} local modpath = minetest.get_modpath("mcl_potions") -dofile(modpath .. "/invisibility.lua") +dofile(modpath .. "/functions.lua") +dofile(modpath .. "/splash.lua") local brewhelp = S("Put this item in an item frame for decoration. It's useless otherwise.") @@ -137,12 +138,7 @@ local potion_image = function(colorstring, opacity) return "mcl_potions_potion_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_potion_bottle_drinkable.png" end -local splash_image = function(colorstring, opacity) - if not opacity then - opacity = 127 - end - return "mcl_potions_splash_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_splash_bottle.png" -end + -- Cauldron fill up rules: -- Adding any water increases the water level by 1, preserving the current water type @@ -332,12 +328,6 @@ minetest.register_craftitem("mcl_potions:dragon_breath", { stack_max = 1, }) -local function _use_potion() - minetest.item_eat(0, "mcl_potions:glass_bottle") - minetest.sound_play("mcl_potions_drinking") -end - -local healing_func = function(player, hp) player:set_hp(player:get_hp() + hp) end minetest.register_craftitem("mcl_potions:healing", { description = S("Healing Potion"), @@ -348,14 +338,14 @@ minetest.register_craftitem("mcl_potions:healing", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - healing_func(user, 4) - _use_potion() + mcl_potions.healing_func(user, 4) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - healing_func(user, 4) - _use_potion() + mcl_potions.healing_func(user, 4) + mcl_potions._use_potion() return itemstack end, }) @@ -369,14 +359,14 @@ minetest.register_craftitem("mcl_potions:healing_2", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - healing_func(user, 8) - _use_potion() + mcl_potions.healing_func(user, 8) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - healing_func(user, 8) - _use_potion() + mcl_potions.healing_func(user, 8) + mcl_potions._use_potion() return itemstack end, @@ -391,14 +381,14 @@ minetest.register_craftitem("mcl_potions:harming", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - healing_func(user, -6) - _use_potion() + mcl_potions.healing_func(user, -6) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - healing_func(user, -6) - _use_potion() + mcl_potions.healing_func(user, -6) + mcl_potions._use_potion() return itemstack end, }) @@ -412,14 +402,14 @@ minetest.register_craftitem("mcl_potions:harming_2", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - healing_func(user, -12) - _use_potion() + mcl_potions.healing_func(user, -12) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - healing_func(user, -12) - _use_potion() + mcl_potions.healing_func(user, -12) + mcl_potions._use_potion() return itemstack end, }) @@ -434,10 +424,6 @@ minetest.register_craftitem("mcl_potions:night_vision", { stack_max = 1, }) -local swiftness_func = function(player, factor, duration) - playerphysics.add_physics_factor(player, "speed", "swiftness", factor) - minetest.after(duration, function() playerphysics.remove_physics_factor(player, "speed", "swiftness") end ) -end minetest.register_craftitem("mcl_potions:swiftness", { description = S("Swiftness Potion"), @@ -448,14 +434,14 @@ minetest.register_craftitem("mcl_potions:swiftness", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - swiftness_func(user, 1.2, 180) - _use_potion() + mcl_potions.swiftness_func(user, 1.2, 180) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - swiftness_func(user, 1.2, 180) - _use_potion() + mcl_potions.swiftness_func(user, 1.2, 180) + mcl_potions._use_potion() return itemstack end, }) @@ -469,14 +455,14 @@ minetest.register_craftitem("mcl_potions:swiftness_2", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - swiftness_func(user, 1.4, 90) - _use_potion() + mcl_potions.swiftness_func(user, 1.4, 90) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - swiftness_func(user, 1.4, 90) - _use_potion() + mcl_potions.swiftness_func(user, 1.4, 90) + mcl_potions._use_potion() return itemstack end, }) @@ -490,14 +476,14 @@ minetest.register_craftitem("mcl_potions:swiftness_plus", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - swiftness_func(user, 1.2, 480) - _use_potion() + mcl_potions.swiftness_func(user, 1.2, 480) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - swiftness_func(user, 1.2, 480) - _use_potion() + mcl_potions.swiftness_func(user, 1.2, 480) + mcl_potions._use_potion() return itemstack end, }) @@ -511,14 +497,14 @@ minetest.register_craftitem("mcl_potions:slowness", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - swiftness_func(user, 0.85, 90) - _use_potion() + mcl_potions.swiftness_func(user, 0.85, 90) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - swiftness_func(user, 0.85, 90) - _use_potion() + mcl_potions.swiftness_func(user, 0.85, 90) + mcl_potions._use_potion() return itemstack end, }) @@ -532,21 +518,17 @@ minetest.register_craftitem("mcl_potions:slowness_plus", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - swiftness_func(user, 0.85, 240) - _use_potion() + mcl_potions.swiftness_func(user, 0.85, 240) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - swiftness_func(user, 0.85, 240) - _use_potion() + mcl_potions.swiftness_func(user, 0.85, 240) + mcl_potions._use_potion() return itemstack end, }) -local leaping_func = function(player, factor, duration) - playerphysics.add_physics_factor(player, "jump", "leaping", factor) - minetest.after(duration, function() playerphysics.remove_physics_factor(player, "jump", "leaping") end ) -end minetest.register_craftitem("mcl_potions:leaping", { @@ -558,14 +540,14 @@ minetest.register_craftitem("mcl_potions:leaping", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - leaping_func(user, 1.2, 180) - _use_potion() + mcl_potions.leaping_func(user, 1.2, 180) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - leaping_func(user, 1.2, 180) - _use_potion() + mcl_potions.leaping_func(user, 1.2, 180) + mcl_potions._use_potion() return itemstack end, }) @@ -579,14 +561,14 @@ minetest.register_craftitem("mcl_potions:leaping_2", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - leaping_func(user, 1.4, 90) - _use_potion() + mcl_potions.leaping_func(user, 1.4, 90) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - leaping_func(user, 1.4, 90) - _use_potion() + mcl_potions.leaping_func(user, 1.4, 90) + mcl_potions._use_potion() return itemstack end, }) @@ -600,23 +582,19 @@ minetest.register_craftitem("mcl_potions:leaping_plus", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - leaping_func(user, 1.2, 480) - _use_potion() + mcl_potions.leaping_func(user, 1.2, 480) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - leaping_func(user, 1.2, 480) - _use_potion() + mcl_potions.leaping_func(user, 1.2, 480) + mcl_potions._use_potion() return itemstack end, }) -local weakness_func = function(player, factor, duration) - player:set_attribute("weakness", tostring(factor)) - print(player:get_player_name().." ".."weakness = "..player:get_attribute("weakness")) - minetest.after(duration, function() player:set_attribute("weakness", tostring(0)) end ) -end + minetest.register_craftitem("mcl_potions:weakness", { description = S("Weakness Potion"), _doc_items_longdesc = brewhelp, @@ -626,23 +604,19 @@ minetest.register_craftitem("mcl_potions:weakness", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - weakness_func(user, 1.2, 180) - _use_potion() + mcl_potions.weakness_func(user, 1.2, 180) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - weakness_func(user, 1.2, 180) - _use_potion() + mcl_potions.weakness_func(user, 1.2, 180) + mcl_potions._use_potion() return itemstack end }) -local poison_func = function(player, factor, duration) - player:set_attribute("poison", tostring(factor)) - print(player:get_player_name().." ".."poison = "..player:get_attribute("poison")) - minetest.after(duration, function() player:set_attribute("poison", tostring(0)) end ) -end + minetest.register_craftitem("mcl_potions:poison", { description = S("Poison Potion"), _doc_items_longdesc = brewhelp, @@ -652,14 +626,14 @@ minetest.register_craftitem("mcl_potions:poison", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - poison_func(user, 2.5, 45) - _use_potion() + mcl_potions.poison_func(user, 2.5, 45) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - poison_func(user, 2.5, 45) - _use_potion() + mcl_potions.poison_func(user, 2.5, 45) + mcl_potions._use_potion() return itemstack end }) @@ -673,14 +647,14 @@ minetest.register_craftitem("mcl_potions:poison_2", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - poison_func(user, 1.2, 21) - _use_potion() + mcl_potions.poison_func(user, 1.2, 21) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - poison_func(user, 1.2, 21) - _use_potion() + mcl_potions.poison_func(user, 1.2, 21) + mcl_potions._use_potion() return itemstack end }) @@ -694,23 +668,19 @@ minetest.register_craftitem("mcl_potions:poison_plus", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - poison_func(user, 2.5, 90) - _use_potion() + mcl_potions.poison_func(user, 2.5, 90) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - poison_func(user, 2.5, 90) - _use_potion() + mcl_potions.poison_func(user, 2.5, 90) + mcl_potions._use_potion() return itemstack end }) -local regeneration_func = function(player, factor, duration) - player:set_attribute("regeneration", tostring(factor)) - print(player:get_player_name().." ".."regeneration = "..player:get_attribute("regeneration")) - minetest.after(duration, function() player:set_attribute("regeneration", tostring(0)) end ) -end + minetest.register_craftitem("mcl_potions:regeneration", { description = S("Regeneration Potion"), _doc_items_longdesc = brewhelp, @@ -720,14 +690,14 @@ minetest.register_craftitem("mcl_potions:regeneration", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - regeneration_func(user, 2.5, 45) - _use_potion() + mcl_potions.regeneration_func(user, 2.5, 45) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - regeneration_func(user, 2.5, 45) - _use_potion() + mcl_potions.regeneration_func(user, 2.5, 45) + mcl_potions._use_potion() return itemstack end }) @@ -741,14 +711,14 @@ minetest.register_craftitem("mcl_potions:regeneration_2", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - regeneration_func(user, 1.2, 21) - _use_potion() + mcl_potions.regeneration_func(user, 1.2, 21) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - regeneration_func(user, 1.2, 21) - _use_potion() + mcl_potions.regeneration_func(user, 1.2, 21) + mcl_potions._use_potion() return itemstack end }) @@ -762,22 +732,18 @@ minetest.register_craftitem("mcl_potions:regeneration_plus", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - regeneration_func(user, 2.5, 90) - _use_potion() + mcl_potions.regeneration_func(user, 2.5, 90) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - regeneration_func(user, 2.5, 90) - _use_potion() + mcl_potions.regeneration_func(user, 2.5, 90) + mcl_potions._use_potion() return itemstack end }) -local invisiblility_func = function(player, duration) - invisible(player, true) - minetest.after(duration, function() mcl_potions.invisible(player, false) end ) -end minetest.register_craftitem("mcl_potions:invisibility", { description = S("Invisibility Potion"), @@ -788,14 +754,14 @@ minetest.register_craftitem("mcl_potions:invisibility", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - invisiblility_func(user, 180) - _use_potion() + mcl_potions.invisiblility_func(user, 180) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - invisiblility_func(user, 180) - _use_potion() + mcl_potions.invisiblility_func(user, 180) + mcl_potions._use_potion() return itemstack end }) @@ -809,14 +775,14 @@ minetest.register_craftitem("mcl_potions:invisibility_plus", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - invisiblility_func(user, 480) - _use_potion() + mcl_potions.invisiblility_func(user, 480) + mcl_potions._use_potion() return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - invisiblility_func(user, 480) - _use_potion() + mcl_potions.invisiblility_func(user, 480) + mcl_potions._use_potion() return itemstack end }) @@ -829,144 +795,6 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) end) -function register_splash(name, descr, color, def) - - local id = "mcl_potions:"..name.."_splash" - minetest.register_craftitem(id, { - description = descr, - inventory_image = splash_image(color), - on_use = function(itemstack, placer, pointed_thing) - --weapons_shot(itemstack, placer, pointed_thing, def.velocity, name) - local velocity = 10 - local dir = placer:get_look_dir(); - local pos = placer:getpos(); - local obj = minetest.env:add_entity({x=pos.x+dir.x,y=pos.y+2+dir.y,z=pos.z+dir.z}, id.."_flying") - obj:setvelocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity}) - obj:setacceleration({x=0, y=-9.8, z=0}) - itemstack:take_item() - return itemstack - end, - }) - - local w = 0.35 - - minetest.register_entity(id.."_flying",{ - textures = {splash_image(color)}, - hp_max = 1, - visual_size = {x=w,y=w}, - collisionbox = {-w,-w,-w, w,w,w}, - on_step = function(self, dtime) - local pos = self.object:getpos() - local node = minetest.get_node(pos) - local n = node.name - local d = 2 - if n ~= "air" then - minetest.sound_play("mcl_potions_breaking_glass") - minetest.add_particlespawner({ - amount = 40, - time = 2, - minpos = {x=pos.x-d, y=pos.y, z=pos.z-d}, - maxpos = {x=pos.x+d, y=pos.y+1, z=pos.z+d}, - minvel = {x=-1, y=0, z=-1}, - maxvel = {x=1, y=0.5, z=1}, - minacc = {x=-0.5, y=0, z=-0.5}, - maxacc = {x=0.5, y=.2, z=0.5}, - minexptime = 1, - maxexptime = 5, - minsize = 2, - maxsize = 4, - collisiondetection = true, - vertical = false, - texture = "mcl_potions_sprite.png^[colorize:"..color..":127", - }) - self.object:remove() - for i, obj in ipairs(minetest.get_objects_inside_radius(pos, 3)) do - if minetest.is_player(obj) then def.potion_fun(obj) end - end - end - end, - }) -end - -register_splash("healing", "Splash Healing", "#AA0000", { - potion_fun = function(player) player:set_hp(player:get_hp() + 3) end, -}) - -register_splash("healing_2", "Splash Healing II", "#DD0000", { - potion_fun = function(player) player:set_hp(player:get_hp() + 6) end, -}) - -register_splash("harming", "Splash Harming", "#660099", { - potion_fun = function(player) healing_func(player, -4) end, -}) - -register_splash("harming_2", "Splash Harming II", "#330066", { - potion_fun = function(player) healing_func(player, -6) end, -}) - -register_splash("leaping", "Splash Leaping", "#00CC33", { - potion_fun = function(player) leaping_func(player, 1.2, 135) end -}) - -register_splash("leaping_2", "Splash Leaping II", "#00EE33", { - potion_fun = function(player) leaping_func(player, 1.4, 135) end -}) - -register_splash("leaping_plus", "Splash Leaping +", "#00DD33", { - potion_fun = function(player) leaping_func(player, 1.2, 360) end -}) - -register_splash("swiftness", "Splash Swiftness", "#009999", { - potion_fun = function(player) swiftness_func(player, 1.2, 135) end -}) - -register_splash("swiftness_2", "Splash Swiftness II", "#00BBBB", { - potion_fun = function(player) swiftness_func(player, 1.4, 135) end -}) - -register_splash("swiftness_plus", "Splash Swiftness +", "#00BBBB", { - potion_fun = function(player) swiftness_func(player, 1.2, 360) end -}) - -register_splash("slowness", "Splash Slowness ", "#000080", { - potion_fun = function(player) swiftness_func(player, 0.85, 68) end -}) - -register_splash("slowness_plus", "Splash Slowness +", "#000066", { - potion_fun = function(player) swiftness_func(player, 0.85, 180) end -}) - -register_splash("poison", "Splash Poison", "#335544", { - potion_fun = function(player) poison_func(player, 0.85, 180) end -}) - -register_splash("poison_2", "Splash Poison II", "#446655", { - potion_fun = function(player) poison_func(player, 0.85, 180) end -}) - -register_splash("poison_plus", "Splash Poison II", "#557766", { - potion_fun = function(player) poison_func(player, 0.85, 180) end -}) - -register_splash("regeneration", "Splash Regeneration", "#A52BB2", { - potion_fun = function(player) regeneration_func(player, 0.85, 180) end -}) - -register_splash("regeneration_2", "Splash Regeneration II", "#B52CC2", { - potion_fun = function(player) regeneration_func(player, 0.85, 180) end -}) - -register_splash("regeneration_plus", "Splash Regeneration +", "#C53DD3", { - potion_fun = function(player) regeneration_func(player, 0.85, 180) end -}) - -register_splash("invisibility", "Splash Invisibility", "#B0B0B0", { - potion_fun = function(player) invisiblility_func(player, 135) end -}) - -register_splash("invisibility", "Splash Invisibility", "#A0A0A0", { - potion_fun = function(player) invisiblility_func(player, 300) end -}) -- duration effects of redstone are a factor of 8/3 -- duration effects of glowstone are a time factor of 1/2 and effect of 14/12 @@ -1036,7 +864,6 @@ local mod_table = { ["mcl_mobitems:gunpowder"] = splash_table, } -mcl_potions = {} -- Compare two ingredients for compatable alchemy function mcl_potions.get_alchemy(ingr, pot) diff --git a/mods/ITEMS/mcl_potions/invisibility.lua b/mods/ITEMS/mcl_potions/invisibility.lua deleted file mode 100644 index f7311c2172..0000000000 --- a/mods/ITEMS/mcl_potions/invisibility.lua +++ /dev/null @@ -1,28 +0,0 @@ --- invisibility function -invisibility = {} - --- reset player invisibility if they go offline -minetest.register_on_leaveplayer(function(player) - - local name = player:get_player_name() - if invisibility[name] then - invisibility[name] = nil - end - -end) - -invisible = function(player, toggle) - - if not player then return false end - - invisibility[player:get_player_name()] = toggle - - if toggle then -- hide player - player:set_properties({visual_size = {x = 0, y = 0}}) - player:set_nametag_attributes({color = {a = 0}}) - else -- show player - player:set_properties({visual_size = {x = 1, y = 1}}) - player:set_nametag_attributes({color = {a = 255}}) - end - -end diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua new file mode 100644 index 0000000000..8c35b7ef08 --- /dev/null +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -0,0 +1,145 @@ +local splash_image = function(colorstring, opacity) + if not opacity then + opacity = 127 + end + return "mcl_potions_splash_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_splash_bottle.png" +end + +local function register_splash(name, descr, color, def) + + local id = "mcl_potions:"..name.."_splash" + minetest.register_craftitem(id, { + description = descr, + inventory_image = splash_image(color), + on_use = function(itemstack, placer, pointed_thing) + --weapons_shot(itemstack, placer, pointed_thing, def.velocity, name) + local velocity = 10 + local dir = placer:get_look_dir(); + local pos = placer:getpos(); + local obj = minetest.env:add_entity({x=pos.x+dir.x,y=pos.y+2+dir.y,z=pos.z+dir.z}, id.."_flying") + obj:setvelocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity}) + obj:setacceleration({x=0, y=-9.8, z=0}) + itemstack:take_item() + return itemstack + end, + }) + + local w = 0.35 + + minetest.register_entity(id.."_flying",{ + textures = {splash_image(color)}, + hp_max = 1, + visual_size = {x=w,y=w}, + collisionbox = {-w,-w,-w, w,w,w}, + on_step = function(self, dtime) + local pos = self.object:getpos() + local node = minetest.get_node(pos) + local n = node.name + local d = 2 + if n ~= "air" then + minetest.sound_play("mcl_potions_breaking_glass") + minetest.add_particlespawner({ + amount = 40, + time = 2, + minpos = {x=pos.x-d, y=pos.y, z=pos.z-d}, + maxpos = {x=pos.x+d, y=pos.y+1, z=pos.z+d}, + minvel = {x=-1, y=0, z=-1}, + maxvel = {x=1, y=0.5, z=1}, + minacc = {x=-0.5, y=0, z=-0.5}, + maxacc = {x=0.5, y=.2, z=0.5}, + minexptime = 1, + maxexptime = 5, + minsize = 2, + maxsize = 4, + collisiondetection = true, + vertical = false, + texture = "mcl_potions_sprite.png^[colorize:"..color..":127", + }) + self.object:remove() + for i, obj in ipairs(minetest.get_objects_inside_radius(pos, 3)) do + if minetest.is_player(obj) then def.potion_fun(obj) end + end + end + end, + }) +end + +register_splash("healing", "Splash Healing", "#AA0000", { + potion_fun = function(player) player:set_hp(player:get_hp() + 3) end, +}) + +register_splash("healing_2", "Splash Healing II", "#DD0000", { + potion_fun = function(player) player:set_hp(player:get_hp() + 6) end, +}) + +register_splash("harming", "Splash Harming", "#660099", { + potion_fun = function(player) mcl_potions.healing_func(player, -4) end, +}) + +register_splash("harming_2", "Splash Harming II", "#330066", { + potion_fun = function(player) mcl_potions.healing_func(player, -6) end, +}) + +register_splash("leaping", "Splash Leaping", "#00CC33", { + potion_fun = function(player) mcl_potions.leaping_func(player, 1.2, 135) end +}) + +register_splash("leaping_2", "Splash Leaping II", "#00EE33", { + potion_fun = function(player) mcl_potions.leaping_func(player, 1.4, 135) end +}) + +register_splash("leaping_plus", "Splash Leaping +", "#00DD33", { + potion_fun = function(player) mcl_potions.leaping_func(player, 1.2, 360) end +}) + +register_splash("swiftness", "Splash Swiftness", "#009999", { + potion_fun = function(player) mcl_potions.swiftness_func(player, 1.2, 135) end +}) + +register_splash("swiftness_2", "Splash Swiftness II", "#00BBBB", { + potion_fun = function(player) mcl_potions.swiftness_func(player, 1.4, 135) end +}) + +register_splash("swiftness_plus", "Splash Swiftness +", "#00BBBB", { + potion_fun = function(player) mcl_potions.swiftness_func(player, 1.2, 360) end +}) + +register_splash("slowness", "Splash Slowness ", "#000080", { + potion_fun = function(player) mcl_potions.swiftness_func(player, 0.85, 68) end +}) + +register_splash("slowness_plus", "Splash Slowness +", "#000066", { + potion_fun = function(player) mcl_potions.swiftness_func(player, 0.85, 180) end +}) + +register_splash("poison", "Splash Poison", "#335544", { + potion_fun = function(player) mcl_potions.poison_func(player, 0.85, 180) end +}) + +register_splash("poison_2", "Splash Poison II", "#446655", { + potion_fun = function(player) mcl_potions.poison_func(player, 0.85, 180) end +}) + +register_splash("poison_plus", "Splash Poison II", "#557766", { + potion_fun = function(player) mcl_potions.poison_func(player, 0.85, 180) end +}) + +register_splash("regeneration", "Splash Regeneration", "#A52BB2", { + potion_fun = function(player) mcl_potions.regeneration_func(player, 0.85, 180) end +}) + +register_splash("regeneration_2", "Splash Regeneration II", "#B52CC2", { + potion_fun = function(player) mcl_potions.regeneration_func(player, 0.85, 180) end +}) + +register_splash("regeneration_plus", "Splash Regeneration +", "#C53DD3", { + potion_fun = function(player) mcl_potions.regeneration_func(player, 0.85, 180) end +}) + +register_splash("invisibility", "Splash Invisibility", "#B0B0B0", { + potion_fun = function(player) mcl_potions.invisiblility_func(player, 135) end +}) + +register_splash("invisibility", "Splash Invisibility", "#A0A0A0", { + potion_fun = function(player) mcl_potions.invisiblility_func(player, 300) end +}) From 7766368f64ed8c191dd01c2d3e57b3b6d88cf3ab Mon Sep 17 00:00:00 2001 From: bzoss Date: Sat, 13 Jun 2020 17:50:33 -0400 Subject: [PATCH 25/34] Change splash effect with distance. --- mods/ITEMS/mcl_potions/splash.lua | 52 ++++++++++++++++++------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 8c35b7ef08..360c345d4c 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -36,6 +36,7 @@ local function register_splash(name, descr, color, def) local node = minetest.get_node(pos) local n = node.name local d = 2 + local redux_map = {7/8,0.5,0.25} if n ~= "air" then minetest.sound_play("mcl_potions_breaking_glass") minetest.add_particlespawner({ @@ -56,8 +57,15 @@ local function register_splash(name, descr, color, def) texture = "mcl_potions_sprite.png^[colorize:"..color..":127", }) self.object:remove() - for i, obj in ipairs(minetest.get_objects_inside_radius(pos, 3)) do - if minetest.is_player(obj) then def.potion_fun(obj) end + for i, obj in ipairs(minetest.get_objects_inside_radius(pos, 4)) do + if minetest.is_player(obj) then + + pos2 = obj:get_pos() + local rad = math.floor(math.sqrt((pos2.x-pos.x)^2 + (pos2.y-pos.y)^2 + (pos2.z-pos.z)^2)) + if rad > 0 then def.potion_fun(obj, redux_map[rad]) else def.potion_fun(obj, 1) end + print(obj:get_player_name().." "..math.floor(rad)) + + end end end end, @@ -65,81 +73,81 @@ local function register_splash(name, descr, color, def) end register_splash("healing", "Splash Healing", "#AA0000", { - potion_fun = function(player) player:set_hp(player:get_hp() + 3) end, + potion_fun = function(player, redx) player:set_hp(player:get_hp() + 3*redx) end, }) register_splash("healing_2", "Splash Healing II", "#DD0000", { - potion_fun = function(player) player:set_hp(player:get_hp() + 6) end, + potion_fun = function(player, redx) player:set_hp(player:get_hp() + 6*redx) end, }) register_splash("harming", "Splash Harming", "#660099", { - potion_fun = function(player) mcl_potions.healing_func(player, -4) end, + potion_fun = function(player, redx) mcl_potions.healing_func(player, -4*redx) end, }) register_splash("harming_2", "Splash Harming II", "#330066", { - potion_fun = function(player) mcl_potions.healing_func(player, -6) end, + potion_fun = function(player, redx) mcl_potions.healing_func(player, -6*redx) end, }) register_splash("leaping", "Splash Leaping", "#00CC33", { - potion_fun = function(player) mcl_potions.leaping_func(player, 1.2, 135) end + potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.2, 135*redx) end }) register_splash("leaping_2", "Splash Leaping II", "#00EE33", { - potion_fun = function(player) mcl_potions.leaping_func(player, 1.4, 135) end + potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.4, 135*redx) end }) register_splash("leaping_plus", "Splash Leaping +", "#00DD33", { - potion_fun = function(player) mcl_potions.leaping_func(player, 1.2, 360) end + potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.2, 360*redx) end }) register_splash("swiftness", "Splash Swiftness", "#009999", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 1.2, 135) end + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.2, 135*redx) end }) register_splash("swiftness_2", "Splash Swiftness II", "#00BBBB", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 1.4, 135) end + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.4, 135*redx) end }) register_splash("swiftness_plus", "Splash Swiftness +", "#00BBBB", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 1.2, 360) end + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.2, 360*redx) end }) register_splash("slowness", "Splash Slowness ", "#000080", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 0.85, 68) end + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 0.85, 68*redx) end }) register_splash("slowness_plus", "Splash Slowness +", "#000066", { - potion_fun = function(player) mcl_potions.swiftness_func(player, 0.85, 180) end + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 0.85, 180*redx) end }) register_splash("poison", "Splash Poison", "#335544", { - potion_fun = function(player) mcl_potions.poison_func(player, 0.85, 180) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end }) register_splash("poison_2", "Splash Poison II", "#446655", { - potion_fun = function(player) mcl_potions.poison_func(player, 0.85, 180) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end }) register_splash("poison_plus", "Splash Poison II", "#557766", { - potion_fun = function(player) mcl_potions.poison_func(player, 0.85, 180) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end }) register_splash("regeneration", "Splash Regeneration", "#A52BB2", { - potion_fun = function(player) mcl_potions.regeneration_func(player, 0.85, 180) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end }) register_splash("regeneration_2", "Splash Regeneration II", "#B52CC2", { - potion_fun = function(player) mcl_potions.regeneration_func(player, 0.85, 180) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end }) register_splash("regeneration_plus", "Splash Regeneration +", "#C53DD3", { - potion_fun = function(player) mcl_potions.regeneration_func(player, 0.85, 180) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 300*redx) end }) register_splash("invisibility", "Splash Invisibility", "#B0B0B0", { - potion_fun = function(player) mcl_potions.invisiblility_func(player, 135) end + potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 135*redx) end }) register_splash("invisibility", "Splash Invisibility", "#A0A0A0", { - potion_fun = function(player) mcl_potions.invisiblility_func(player, 300) end + potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 300*redx) end }) From 724ff56bbfa2d744fd4344912620d9685bdc0d1f Mon Sep 17 00:00:00 2001 From: bzoss Date: Tue, 16 Jun 2020 08:13:10 -0400 Subject: [PATCH 26/34] Fix a missed call to mcl_potions:invisible. --- mods/ITEMS/mcl_potions/functions.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index c3b3b4b79a..83120f3743 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -62,6 +62,6 @@ function mcl_potions.regeneration_func(player, factor, duration) end function mcl_potions.invisiblility_func(player, duration) - invisible(player, true) - minetest.after(duration, function() invisible(player, false) end ) + mcl_potions.invisible(player, true) + minetest.after(duration, function() mcl_potions.invisible(player, false) end ) end From 54c1be724dcd3fb5ec19c8df0249cfa6ec607014 Mon Sep 17 00:00:00 2001 From: bzoss Date: Tue, 16 Jun 2020 08:25:42 -0400 Subject: [PATCH 27/34] Increase collision box to fix issues with splash potions not breaking at feet. --- mods/ITEMS/mcl_potions/splash.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 360c345d4c..bffb8b3494 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -22,15 +22,16 @@ local function register_splash(name, descr, color, def) itemstack:take_item() return itemstack end, + stack_max = 100, -- increased stack to test throwing }) - local w = 0.35 + local w = 0.7 minetest.register_entity(id.."_flying",{ textures = {splash_image(color)}, hp_max = 1, - visual_size = {x=w,y=w}, - collisionbox = {-w,-w,-w, w,w,w}, + visual_size = {x=w/2,y=w/2}, + collisionbox = {-w,-w,-w,w,w,w}, on_step = function(self, dtime) local pos = self.object:getpos() local node = minetest.get_node(pos) @@ -52,12 +53,13 @@ local function register_splash(name, descr, color, def) maxexptime = 5, minsize = 2, maxsize = 4, - collisiondetection = true, + collisiondetection = false, vertical = false, texture = "mcl_potions_sprite.png^[colorize:"..color..":127", }) self.object:remove() for i, obj in ipairs(minetest.get_objects_inside_radius(pos, 4)) do + if minetest.is_player(obj) then pos2 = obj:get_pos() From 9fe15c7e12e2e4a5f9e4d45df7e8d92cdcb69757 Mon Sep 17 00:00:00 2001 From: Brandon Date: Tue, 16 Jun 2020 22:29:35 -0400 Subject: [PATCH 28/34] Add invisibility II brewing and correct inversion table (no such thing as slowness +). Add poison to harming inversion. Reduced splash stack max. --- mods/ITEMS/mcl_potions/init.lua | 15 +++++++++------ mods/ITEMS/mcl_potions/splash.lua | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index bfb6fffbfc..fd6787ec20 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -827,10 +827,12 @@ local output_table = { local enhancement_table = {} local extension_table = {} local potions = {} -for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","regeneration"}) do - enhancement_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_2" - table.insert(potions, potion) - table.insert(potions, potion.."_2") +for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","regeneration","invisibility"}) do + if potion ~= "invisibility" and potion ~= "night_vision" then + enhancement_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_2" + table.insert(potions, potion) + table.insert(potions, potion.."_2") + end if potion ~= "healing" and potion ~= "harming" then extension_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_plus" table.insert(potions, potion.."_plus") @@ -842,12 +844,13 @@ local inversion_table = { ["mcl_potions:healing"] = "mcl_potions:harming", ["mcl_potions:healing_2"] = "mcl_potions:harming_2", ["mcl_potions:swiftness"] = "mcl_potions:slowness", - ["mcl_potions:swiftness_2"] = "mcl_potions:slowness_plus", ["mcl_potions:swiftness_plus"] = "mlc_potions:slowness_plus", ["mcl_potions:leaping"] = "mcl_potions:slowness", - ["mcl_potions:leaping_2"] = "mcl_potions:slowness_plus", ["mcl_potions:leaping_plus"] = "mcl_potions:slowness_plus", ["mcl_potions:night_vision"] = "mcl_potions:invisibility", + ["mcl_potions:night_vision_plus"] = "mcl_potions:invisibility_plus", + ["mcl_potions:poison"] = "mcl_potions:harming", + ["mcl_potions:poison_2"] = "mcl_potions:harming_2", } diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index bffb8b3494..19eea39f62 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -22,7 +22,7 @@ local function register_splash(name, descr, color, def) itemstack:take_item() return itemstack end, - stack_max = 100, -- increased stack to test throwing + stack_max = 1, }) local w = 0.7 @@ -59,7 +59,7 @@ local function register_splash(name, descr, color, def) }) self.object:remove() for i, obj in ipairs(minetest.get_objects_inside_radius(pos, 4)) do - + if minetest.is_player(obj) then pos2 = obj:get_pos() From 021492994a035548c5a09c41f34d8007314826fa Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 17 Jun 2020 16:49:52 -0400 Subject: [PATCH 29/34] Update the available perturbations of brewing. Include splash enhancement. --- mods/ITEMS/mcl_potions/init.lua | 35 ++++++++++++++++++++++++------- mods/ITEMS/mcl_potions/splash.lua | 12 +++++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index fd6787ec20..efa273d7f7 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -260,7 +260,7 @@ minetest.register_craftitem("mcl_potions:potion_river_water", { local how_to_drink = S("Use the “Place” key to drink it.") -minetest.register_craftitem("mcl_potions:potion_awkward", { +minetest.register_craftitem("mcl_potions:awkward", { description = S("Awkward Potion"), _tt_help = S("No effect"), _doc_items_longdesc = S("This potion has an awkward taste and is used for brewing more potions. Drinking it has no effect."), @@ -273,7 +273,7 @@ minetest.register_craftitem("mcl_potions:potion_awkward", { on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), }) -minetest.register_craftitem("mcl_potions:potion_mundane", { +minetest.register_craftitem("mcl_potions:mundane", { description = S("Mundane Potion"), _tt_help = S("No effect"), _doc_items_longdesc = S("This potion has a clean taste and is used for brewing more potions. Drinking it has no effect."), @@ -288,7 +288,7 @@ minetest.register_craftitem("mcl_potions:potion_mundane", { }) -minetest.register_craftitem("mcl_potions:potion_thick", { +minetest.register_craftitem("mcl_potions:thick", { description = S("Thick Potion"), _tt_help = S("No effect"), _doc_items_longdesc = S("This potion has a bitter taste and is used for brewing more potions. Drinking it has no effect."), @@ -801,8 +801,16 @@ end) -- splash potion effects are reduced by a factor of 3/4 local water_table = { - ["mcl_nether:nether_wart_item"] = "mcl_potions:potion_awkward", + ["mcl_nether:nether_wart_item"] = "mcl_potions:awkward", ["mcl_potions:fermented_spider_eye"] = "mcl_potions:weakness", + ["mcl_potions:speckled_melon"] = "mcl_potions:mundane", + ["mcl_core:sugar"] = "mcl_potions:mundane", + ["mcl_mobitems:magma_cream"] = "mcl_potions:mundane", + ["mcl_mobitems:blaze_powder"] = "mcl_potions:mundane", + ["mesecons:wire_00000000_off"] = "mcl_potions:mundane", + ["mcl_mobitems:ghast_tear"] = "mcl_potions:mundane", + ["mcl_mobitems:spider_eye"] = "mcl_potions:mundane", + ["mcl_mobitems:rabbit_foot"] = "mcl_potions:mundane" } local awkward_table = { @@ -820,21 +828,22 @@ local awkward_table = { local output_table = { ["mcl_potions:potion_river_water"] = water_table, ["mcl_potions:potion_water"] = water_table, - ["mcl_potions:potion_awkward"] = awkward_table, + ["mcl_potions:awkward"] = awkward_table, } local enhancement_table = {} local extension_table = {} -local potions = {} +local potions = {"awkward", "mundane", "thick"} for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","regeneration","invisibility"}) do if potion ~= "invisibility" and potion ~= "night_vision" then enhancement_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_2" + enhancement_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_2_splash" table.insert(potions, potion) table.insert(potions, potion.."_2") end if potion ~= "healing" and potion ~= "harming" then - extension_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_plus" + extension_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_plus_splash" table.insert(potions, potion.."_plus") end end @@ -851,6 +860,16 @@ local inversion_table = { ["mcl_potions:night_vision_plus"] = "mcl_potions:invisibility_plus", ["mcl_potions:poison"] = "mcl_potions:harming", ["mcl_potions:poison_2"] = "mcl_potions:harming_2", + ["mcl_potions:healing_splash"] = "mcl_potions:harming_splash", + ["mcl_potions:healing_2_splash"] = "mcl_potions:harming_2_splash", + ["mcl_potions:swiftness_splash"] = "mcl_potions:slowness_splash", + ["mcl_potions:swiftness_plus_splash"] = "mlc_potions:slowness_plus_splash", + ["mcl_potions:leaping_splash"] = "mcl_potions:slowness_splash", + ["mcl_potions:leaping_plus_splash"] = "mcl_potions:slowness_plus_splash", + ["mcl_potions:night_vision_splash"] = "mcl_potions:invisibility_splash", + ["mcl_potions:night_vision_plus_splash"] = "mcl_potions:invisibility_plus_splash", + ["mcl_potions:poison_splash"] = "mcl_potions:harming_splash", + ["mcl_potions:poison_2_splash"] = "mcl_potions:harming_2_splash", } @@ -881,11 +900,13 @@ function mcl_potions.get_alchemy(ingr, pot) if brew_table[pot] ~= nil then return brew_table[pot] end + elseif splash_table[ingr] ~= nil then local brew_table = mod_table[ingr] if brew_table[pot] ~= nil then return brew_table[pot] end + end return false diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 19eea39f62..958cb49911 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -74,6 +74,18 @@ local function register_splash(name, descr, color, def) }) end +register_splash("awkward", "Splash Awkward Potion", "#0000FF", { + potion_fun = function(player, redx) end, +}) + +register_splash("mundane", "Splash Mundane Potion", "#0000FF", { + potion_fun = function(player, redx) end, +}) + +register_splash("thick", "Splash Thick Potion", "#0000FF", { + potion_fun = function(player, redx) end, +}) + register_splash("healing", "Splash Healing", "#AA0000", { potion_fun = function(player, redx) player:set_hp(player:get_hp() + 3*redx) end, }) From b8256cd447cfd929e4bca28a8bb7583dc322154f Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 17 Jun 2020 17:05:44 -0400 Subject: [PATCH 30/34] remove redundant code and add lingering potions -TODO: Add lingering effect --- mods/ITEMS/mcl_potions/init.lua | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index efa273d7f7..a73c2d5930 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -874,9 +874,11 @@ local inversion_table = { local splash_table = {} +local lingering_table = {} for i, potion in ipairs(potions) do splash_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_splash" + lingering_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_lingering" end local mod_table = { @@ -884,6 +886,7 @@ local mod_table = { ["mcl_potions:fermented_spider_eye"] = inversion_table, ["mcl_nether:glowstone_dust"] = enhancement_table, ["mcl_mobitems:gunpowder"] = splash_table, + ["mcl_potions:dragon_breath"] = lingering_table, } -- Compare two ingredients for compatable alchemy @@ -901,12 +904,6 @@ function mcl_potions.get_alchemy(ingr, pot) return brew_table[pot] end - elseif splash_table[ingr] ~= nil then - local brew_table = mod_table[ingr] - if brew_table[pot] ~= nil then - return brew_table[pot] - end - end return false From 454a9c231e7c4b4723290b9ed97fda59cece8f8f Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 17 Jun 2020 17:36:15 -0400 Subject: [PATCH 31/34] Correct issues with splash potions disappearing immediately when thrown. --- mods/ITEMS/mcl_potions/splash.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 958cb49911..8074ca7a8e 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -11,7 +11,7 @@ local function register_splash(name, descr, color, def) minetest.register_craftitem(id, { description = descr, inventory_image = splash_image(color), - on_use = function(itemstack, placer, pointed_thing) + on_use = function(item, placer, pointed_thing) --weapons_shot(itemstack, placer, pointed_thing, def.velocity, name) local velocity = 10 local dir = placer:get_look_dir(); @@ -19,8 +19,8 @@ local function register_splash(name, descr, color, def) local obj = minetest.env:add_entity({x=pos.x+dir.x,y=pos.y+2+dir.y,z=pos.z+dir.z}, id.."_flying") obj:setvelocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity}) obj:setacceleration({x=0, y=-9.8, z=0}) - itemstack:take_item() - return itemstack + item:take_item() + return item end, stack_max = 1, }) @@ -31,7 +31,7 @@ local function register_splash(name, descr, color, def) textures = {splash_image(color)}, hp_max = 1, visual_size = {x=w/2,y=w/2}, - collisionbox = {-w,-w,-w,w,w,w}, + collisionbox = {0,0,0,0,0,0}, on_step = function(self, dtime) local pos = self.object:getpos() local node = minetest.get_node(pos) @@ -65,10 +65,10 @@ local function register_splash(name, descr, color, def) pos2 = obj:get_pos() local rad = math.floor(math.sqrt((pos2.x-pos.x)^2 + (pos2.y-pos.y)^2 + (pos2.z-pos.z)^2)) if rad > 0 then def.potion_fun(obj, redux_map[rad]) else def.potion_fun(obj, 1) end - print(obj:get_player_name().." "..math.floor(rad)) end end + end end, }) From 7c0996b03ca4a59b23fa6ea0dd6064a83f10bebc Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 17 Jun 2020 17:44:03 -0400 Subject: [PATCH 32/34] Correct issue with drinking potion not resulting in an empty bottle --- mods/ITEMS/mcl_potions/functions.lua | 4 +- mods/ITEMS/mcl_potions/init.lua | 84 ++++++++++++++-------------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 83120f3743..886502cfbd 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -26,8 +26,8 @@ function mcl_potions.invisible(player, toggle) end -function mcl_potions._use_potion() - minetest.item_eat(0, "mcl_potions:glass_bottle") +function mcl_potions._use_potion(item) + item:replace("mcl_potions:glass_bottle") minetest.sound_play("mcl_potions_drinking") end diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index a73c2d5930..a013cebaca 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -339,13 +339,13 @@ minetest.register_craftitem("mcl_potions:healing", { on_place = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 4) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 4) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -360,13 +360,13 @@ minetest.register_craftitem("mcl_potions:healing_2", { on_place = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 8) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 8) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, @@ -382,13 +382,13 @@ minetest.register_craftitem("mcl_potions:harming", { on_place = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -6) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -6) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -403,13 +403,13 @@ minetest.register_craftitem("mcl_potions:harming_2", { on_place = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -12) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -12) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -435,13 +435,13 @@ minetest.register_craftitem("mcl_potions:swiftness", { on_place = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.2, 180) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.2, 180) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -456,13 +456,13 @@ minetest.register_craftitem("mcl_potions:swiftness_2", { on_place = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.4, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.4, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -477,13 +477,13 @@ minetest.register_craftitem("mcl_potions:swiftness_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.2, 480) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.2, 480) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -498,13 +498,13 @@ minetest.register_craftitem("mcl_potions:slowness", { on_place = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 0.85, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 0.85, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -519,13 +519,13 @@ minetest.register_craftitem("mcl_potions:slowness_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 0.85, 240) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 0.85, 240) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -541,13 +541,13 @@ minetest.register_craftitem("mcl_potions:leaping", { on_place = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.2, 180) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.2, 180) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -562,13 +562,13 @@ minetest.register_craftitem("mcl_potions:leaping_2", { on_place = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.4, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.4, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -583,13 +583,13 @@ minetest.register_craftitem("mcl_potions:leaping_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.2, 480) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.2, 480) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, }) @@ -605,13 +605,13 @@ minetest.register_craftitem("mcl_potions:weakness", { on_place = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.2, 180) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.2, 180) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) @@ -627,13 +627,13 @@ minetest.register_craftitem("mcl_potions:poison", { on_place = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 2.5, 45) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 2.5, 45) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) @@ -648,13 +648,13 @@ minetest.register_craftitem("mcl_potions:poison_2", { on_place = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 1.2, 21) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 1.2, 21) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) @@ -669,13 +669,13 @@ minetest.register_craftitem("mcl_potions:poison_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 2.5, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 2.5, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) @@ -691,13 +691,13 @@ minetest.register_craftitem("mcl_potions:regeneration", { on_place = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 2.5, 45) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 2.5, 45) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) @@ -712,13 +712,13 @@ minetest.register_craftitem("mcl_potions:regeneration_2", { on_place = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 1.2, 21) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 1.2, 21) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) @@ -733,13 +733,13 @@ minetest.register_craftitem("mcl_potions:regeneration_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 2.5, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 2.5, 90) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) @@ -755,13 +755,13 @@ minetest.register_craftitem("mcl_potions:invisibility", { on_place = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 180) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 180) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) @@ -776,13 +776,13 @@ minetest.register_craftitem("mcl_potions:invisibility_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 480) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 480) - mcl_potions._use_potion() + mcl_potions._use_potion(itemstack) return itemstack end }) From 2c6f62354b3fa6ac8afa2e0fc063ea893a950657 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 17 Jun 2020 17:50:18 -0400 Subject: [PATCH 33/34] pull potions out of init.lua to better organize --- mods/ITEMS/mcl_potions/init.lua | 522 +--------------------------- mods/ITEMS/mcl_potions/potions.lua | 528 +++++++++++++++++++++++++++++ 2 files changed, 529 insertions(+), 521 deletions(-) create mode 100644 mods/ITEMS/mcl_potions/potions.lua diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index a013cebaca..360d5c2582 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -4,6 +4,7 @@ mcl_potions = {} local modpath = minetest.get_modpath("mcl_potions") dofile(modpath .. "/functions.lua") dofile(modpath .. "/splash.lua") +dofile(modpath .. "/potions.lua") local brewhelp = S("Put this item in an item frame for decoration. It's useless otherwise.") @@ -257,51 +258,6 @@ minetest.register_craftitem("mcl_potions:potion_river_water", { }) - -local how_to_drink = S("Use the “Place” key to drink it.") - -minetest.register_craftitem("mcl_potions:awkward", { - description = S("Awkward Potion"), - _tt_help = S("No effect"), - _doc_items_longdesc = S("This potion has an awkward taste and is used for brewing more potions. Drinking it has no effect."), - _doc_items_usagehelp = how_to_drink, - stack_max = 1, - inventory_image = potion_image("#0000FF"), - wield_image = potion_image("#0000FF"), - -- TODO: Reveal item when it's actually useful - groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1}, - on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), - on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), -}) -minetest.register_craftitem("mcl_potions:mundane", { - description = S("Mundane Potion"), - _tt_help = S("No effect"), - _doc_items_longdesc = S("This potion has a clean taste and is used for brewing more potions. Drinking it has no effect."), - _doc_items_usagehelp = how_to_drink, - stack_max = 1, - inventory_image = potion_image("#0000FF"), - wield_image = potion_image("#0000FF"), - -- TODO: Reveal item when it's actually useful - groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1 }, - on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), - on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), -}) - - -minetest.register_craftitem("mcl_potions:thick", { - description = S("Thick Potion"), - _tt_help = S("No effect"), - _doc_items_longdesc = S("This potion has a bitter taste and is used for brewing more potions. Drinking it has no effect."), - _doc_items_usagehelp = how_to_drink, - stack_max = 1, - inventory_image = potion_image("#0000FF"), - wield_image = potion_image("#0000FF"), - -- TODO: Reveal item when it's actually useful - groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 }, - on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), - on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), -}) - minetest.register_craftitem("mcl_potions:speckled_melon", { description = S("Glistering Melon"), _doc_items_longdesc = S("This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else."), @@ -319,482 +275,6 @@ minetest.register_craft({ } }) -minetest.register_craftitem("mcl_potions:dragon_breath", { - description = S("Dragon's Breath"), - _doc_items_longdesc = brewhelp, - wield_image = "mcl_potions_dragon_breath.png", - inventory_image = "mcl_potions_dragon_breath.png", - groups = { brewitem = 1, not_in_creative_inventory = 0 }, - stack_max = 1, -}) - - -minetest.register_craftitem("mcl_potions:healing", { - description = S("Healing Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#CC0000"), - inventory_image = potion_image("#CC0000"), - groups = { brewitem = 1, food=3, can_eat_when_full=1 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.healing_func(user, 4) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.healing_func(user, 4) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - -minetest.register_craftitem("mcl_potions:healing_2", { - description = S("Healing Potion II"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#DD0000"), - inventory_image = potion_image("#DD0000"), - groups = { brewitem = 1, food=3, can_eat_when_full=1 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.healing_func(user, 8) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.healing_func(user, 8) - mcl_potions._use_potion(itemstack) - return itemstack - end, - -}) - -minetest.register_craftitem("mcl_potions:harming", { - description = S("Harming Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#660099"), - inventory_image = potion_image("#660099"), - groups = { brewitem = 1, food=3, can_eat_when_full=1 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.healing_func(user, -6) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.healing_func(user, -6) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - -minetest.register_craftitem("mcl_potions:harming_2", { - description = S("Harming Potion II"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#330066"), - inventory_image = potion_image("#330066"), - groups = { brewitem = 1, food=3, can_eat_when_full=1 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.healing_func(user, -12) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.healing_func(user, -12) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - - -minetest.register_craftitem("mcl_potions:night_vision", { - description = S("Night Vision Potion"), - _doc_items_longdesc = brewhelp, - wield_image = "mcl_potions_night_vision.png", - inventory_image = "mcl_potions_night_vision.png", - groups = { brewitem = 1, food=0}, - stack_max = 1, -}) - - -minetest.register_craftitem("mcl_potions:swiftness", { - description = S("Swiftness Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#009999"), - inventory_image = potion_image("#009999"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - -minetest.register_craftitem("mcl_potions:swiftness_2", { - description = S("Swiftness Potion II"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#00BBBB"), - inventory_image = potion_image("#00BBBB"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 1.4, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 1.4, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - -minetest.register_craftitem("mcl_potions:swiftness_plus", { - description = S("Swiftness Potion +"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#00AAAA"), - inventory_image = potion_image("#00AAAA"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 1.2, 480) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 1.2, 480) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - -minetest.register_craftitem("mcl_potions:slowness", { - description = S("Slowness Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#000080"), - inventory_image = potion_image("#000080"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 0.85, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 0.85, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - -minetest.register_craftitem("mcl_potions:slowness_plus", { - description = S("Slowness Potion +"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#000066"), - inventory_image = potion_image("#000066"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 0.85, 240) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.swiftness_func(user, 0.85, 240) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - - -minetest.register_craftitem("mcl_potions:leaping", { - description = S("Leaping Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#00CC33"), - inventory_image = potion_image("#00CC33"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.leaping_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.leaping_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - -minetest.register_craftitem("mcl_potions:leaping_2", { - description = S("Leaping Potion II"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#00EE33"), - inventory_image = potion_image("#00EE33"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.leaping_func(user, 1.4, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.leaping_func(user, 1.4, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - -minetest.register_craftitem("mcl_potions:leaping_plus", { - description = S("Leaping Potion +"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#00DD33"), - inventory_image = potion_image("#00DD33"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.leaping_func(user, 1.2, 480) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.leaping_func(user, 1.2, 480) - mcl_potions._use_potion(itemstack) - return itemstack - end, -}) - - -minetest.register_craftitem("mcl_potions:weakness", { - description = S("Weakness Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#6600AA"), - inventory_image = potion_image("#6600AA"), - groups = { brewitem = 1, food=0}, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.weakness_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.weakness_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - - -minetest.register_craftitem("mcl_potions:poison", { - description = S("Poison Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#225533"), - inventory_image = potion_image("#225533"), - groups = { brewitem = 1, food = 0 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.poison_func(user, 2.5, 45) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.poison_func(user, 2.5, 45) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - -minetest.register_craftitem("mcl_potions:poison_2", { - description = S("Poison Potion II"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#447755"), - inventory_image = potion_image("#447755"), - groups = { brewitem = 1, food = 0 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.poison_func(user, 1.2, 21) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.poison_func(user, 1.2, 21) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - -minetest.register_craftitem("mcl_potions:poison_plus", { - description = S("Poison Potion +"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#336644"), - inventory_image = potion_image("#336644"), - groups = { brewitem = 1, food = 0 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.poison_func(user, 2.5, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.poison_func(user, 2.5, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - - -minetest.register_craftitem("mcl_potions:regeneration", { - description = S("Regeneration Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#A52BB2"), - inventory_image = potion_image("#A52BB2"), - groups = { brewitem = 1, food = 0 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.regeneration_func(user, 2.5, 45) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.regeneration_func(user, 2.5, 45) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - -minetest.register_craftitem("mcl_potions:regeneration_2", { - description = S("Regeneration Potion II"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#B52CC2"), - inventory_image = potion_image("#B52CC2"), - groups = { brewitem = 1, food = 0 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.regeneration_func(user, 1.2, 21) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.regeneration_func(user, 1.2, 21) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - -minetest.register_craftitem("mcl_potions:regeneration_plus", { - description = S("Regeneration Potion +"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#C53DD3"), - inventory_image = potion_image("#C53DD3"), - groups = { brewitem = 1, food = 0 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.regeneration_func(user, 2.5, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.regeneration_func(user, 2.5, 90) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - - -minetest.register_craftitem("mcl_potions:invisibility", { - description = S("Invisibility Potion"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#B0B0B0"), - inventory_image = potion_image("#B0B0B0"), - groups = { brewitem = 1, food = 0 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.invisiblility_func(user, 180) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.invisiblility_func(user, 180) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - -minetest.register_craftitem("mcl_potions:invisibility_plus", { - description = S("Invisibility Potion +"), - _doc_items_longdesc = brewhelp, - wield_image = potion_image("#A0A0A0"), - inventory_image = potion_image("#A0A0A0"), - groups = { brewitem = 1, food = 0 }, - stack_max = 1, - - on_place = function(itemstack, user, pointed_thing) - mcl_potions.invisiblility_func(user, 480) - mcl_potions._use_potion(itemstack) - return itemstack - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.invisiblility_func(user, 480) - mcl_potions._use_potion(itemstack) - return itemstack - end -}) - --- Look into reducing attack on punch -minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) - if puncher:get_attribute("weakness") then - print("Weakness Active") - end -end) - - -- duration effects of redstone are a factor of 8/3 -- duration effects of glowstone are a time factor of 1/2 and effect of 14/12 diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua new file mode 100644 index 0000000000..454867b30a --- /dev/null +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -0,0 +1,528 @@ +local S = minetest.get_translator("mcl_potions") + +local potion_image = function(colorstring, opacity) + if not opacity then + opacity = 127 + end + return "mcl_potions_potion_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_potion_bottle_drinkable.png" +end + +local how_to_drink = S("Use the “Place” key to drink it.") + +minetest.register_craftitem("mcl_potions:awkward", { + description = S("Awkward Potion"), + _tt_help = S("No effect"), + _doc_items_longdesc = S("This potion has an awkward taste and is used for brewing more potions. Drinking it has no effect."), + _doc_items_usagehelp = how_to_drink, + stack_max = 1, + inventory_image = potion_image("#0000FF"), + wield_image = potion_image("#0000FF"), + -- TODO: Reveal item when it's actually useful + groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1}, + on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), + on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), +}) +minetest.register_craftitem("mcl_potions:mundane", { + description = S("Mundane Potion"), + _tt_help = S("No effect"), + _doc_items_longdesc = S("This potion has a clean taste and is used for brewing more potions. Drinking it has no effect."), + _doc_items_usagehelp = how_to_drink, + stack_max = 1, + inventory_image = potion_image("#0000FF"), + wield_image = potion_image("#0000FF"), + -- TODO: Reveal item when it's actually useful + groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=1 }, + on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), + on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), +}) + + +minetest.register_craftitem("mcl_potions:thick", { + description = S("Thick Potion"), + _tt_help = S("No effect"), + _doc_items_longdesc = S("This potion has a bitter taste and is used for brewing more potions. Drinking it has no effect."), + _doc_items_usagehelp = how_to_drink, + stack_max = 1, + inventory_image = potion_image("#0000FF"), + wield_image = potion_image("#0000FF"), + -- TODO: Reveal item when it's actually useful + groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 }, + on_place = minetest.item_eat(0, "mcl_potions:glass_bottle"), + on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), +}) + + +minetest.register_craftitem("mcl_potions:dragon_breath", { + description = S("Dragon's Breath"), + _doc_items_longdesc = brewhelp, + wield_image = "mcl_potions_dragon_breath.png", + inventory_image = "mcl_potions_dragon_breath.png", + groups = { brewitem = 1, not_in_creative_inventory = 0 }, + stack_max = 1, +}) + + +minetest.register_craftitem("mcl_potions:healing", { + description = S("Healing Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#CC0000"), + inventory_image = potion_image("#CC0000"), + groups = { brewitem = 1, food=3, can_eat_when_full=1 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.healing_func(user, 4) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.healing_func(user, 4) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:healing_2", { + description = S("Healing Potion II"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#DD0000"), + inventory_image = potion_image("#DD0000"), + groups = { brewitem = 1, food=3, can_eat_when_full=1 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.healing_func(user, 8) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.healing_func(user, 8) + mcl_potions._use_potion(itemstack) + return itemstack + end, + +}) + +minetest.register_craftitem("mcl_potions:harming", { + description = S("Harming Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#660099"), + inventory_image = potion_image("#660099"), + groups = { brewitem = 1, food=3, can_eat_when_full=1 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.healing_func(user, -6) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.healing_func(user, -6) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:harming_2", { + description = S("Harming Potion II"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#330066"), + inventory_image = potion_image("#330066"), + groups = { brewitem = 1, food=3, can_eat_when_full=1 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.healing_func(user, -12) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.healing_func(user, -12) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + + +minetest.register_craftitem("mcl_potions:night_vision", { + description = S("Night Vision Potion"), + _doc_items_longdesc = brewhelp, + wield_image = "mcl_potions_night_vision.png", + inventory_image = "mcl_potions_night_vision.png", + groups = { brewitem = 1, food=0}, + stack_max = 1, +}) + + +minetest.register_craftitem("mcl_potions:swiftness", { + description = S("Swiftness Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#009999"), + inventory_image = potion_image("#009999"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 1.2, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 1.2, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:swiftness_2", { + description = S("Swiftness Potion II"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#00BBBB"), + inventory_image = potion_image("#00BBBB"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 1.4, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 1.4, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:swiftness_plus", { + description = S("Swiftness Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#00AAAA"), + inventory_image = potion_image("#00AAAA"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 1.2, 480) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 1.2, 480) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:slowness", { + description = S("Slowness Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#000080"), + inventory_image = potion_image("#000080"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 0.85, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 0.85, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:slowness_plus", { + description = S("Slowness Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#000066"), + inventory_image = potion_image("#000066"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 0.85, 240) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.swiftness_func(user, 0.85, 240) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + + +minetest.register_craftitem("mcl_potions:leaping", { + description = S("Leaping Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#00CC33"), + inventory_image = potion_image("#00CC33"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.leaping_func(user, 1.2, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.leaping_func(user, 1.2, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:leaping_2", { + description = S("Leaping Potion II"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#00EE33"), + inventory_image = potion_image("#00EE33"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.leaping_func(user, 1.4, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.leaping_func(user, 1.4, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:leaping_plus", { + description = S("Leaping Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#00DD33"), + inventory_image = potion_image("#00DD33"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.leaping_func(user, 1.2, 480) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.leaping_func(user, 1.2, 480) + mcl_potions._use_potion(itemstack) + return itemstack + end, +}) + + +minetest.register_craftitem("mcl_potions:weakness", { + description = S("Weakness Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#6600AA"), + inventory_image = potion_image("#6600AA"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.weakness_func(user, 1.2, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.weakness_func(user, 1.2, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + + +minetest.register_craftitem("mcl_potions:poison", { + description = S("Poison Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#225533"), + inventory_image = potion_image("#225533"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.poison_func(user, 2.5, 45) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.poison_func(user, 2.5, 45) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:poison_2", { + description = S("Poison Potion II"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#447755"), + inventory_image = potion_image("#447755"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.poison_func(user, 1.2, 21) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.poison_func(user, 1.2, 21) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:poison_plus", { + description = S("Poison Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#336644"), + inventory_image = potion_image("#336644"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.poison_func(user, 2.5, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.poison_func(user, 2.5, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + + +minetest.register_craftitem("mcl_potions:regeneration", { + description = S("Regeneration Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#A52BB2"), + inventory_image = potion_image("#A52BB2"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.regeneration_func(user, 2.5, 45) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.regeneration_func(user, 2.5, 45) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:regeneration_2", { + description = S("Regeneration Potion II"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#B52CC2"), + inventory_image = potion_image("#B52CC2"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.regeneration_func(user, 1.2, 21) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.regeneration_func(user, 1.2, 21) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:regeneration_plus", { + description = S("Regeneration Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#C53DD3"), + inventory_image = potion_image("#C53DD3"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.regeneration_func(user, 2.5, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.regeneration_func(user, 2.5, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + + +minetest.register_craftitem("mcl_potions:invisibility", { + description = S("Invisibility Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#B0B0B0"), + inventory_image = potion_image("#B0B0B0"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.invisiblility_func(user, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.invisiblility_func(user, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:invisibility_plus", { + description = S("Invisibility Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#A0A0A0"), + inventory_image = potion_image("#A0A0A0"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.invisiblility_func(user, 480) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.invisiblility_func(user, 480) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + +-- Look into reducing attack on punch +minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) + if puncher:get_attribute("weakness") then + print("Weakness Active") + end +end) From 56a89405107fd3cd9c913a3284f8c9974aa51f62 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 17 Jun 2020 22:17:16 -0400 Subject: [PATCH 34/34] Correct for splash invisibility. Add weakness + and splash potions. --- mods/ITEMS/mcl_potions/init.lua | 11 ++++++++--- mods/ITEMS/mcl_potions/potions.lua | 25 +++++++++++++++++++++++-- mods/ITEMS/mcl_potions/splash.lua | 12 ++++++++++-- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 360d5c2582..beb2121452 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -315,17 +315,22 @@ local output_table = { local enhancement_table = {} local extension_table = {} local potions = {"awkward", "mundane", "thick"} -for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","regeneration","invisibility"}) do - if potion ~= "invisibility" and potion ~= "night_vision" then +for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","regeneration","invisibility","weakness"}) do + + table.insert(potions, potion) + + if potion ~= "invisibility" and potion ~= "night_vision" and potion ~= "weakness" then enhancement_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_2" enhancement_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_2_splash" - table.insert(potions, potion) table.insert(potions, potion.."_2") end + if potion ~= "healing" and potion ~= "harming" then extension_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_plus_splash" + extension_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_plus" table.insert(potions, potion.."_plus") end + end diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 454867b30a..32ddb37807 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -337,13 +337,34 @@ minetest.register_craftitem("mcl_potions:weakness", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - mcl_potions.weakness_func(user, 1.2, 180) + mcl_potions.weakness_func(user, 1.2, 90) mcl_potions._use_potion(itemstack) return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) - mcl_potions.weakness_func(user, 1.2, 180) + mcl_potions.weakness_func(user, 1.2, 90) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:weakness_plus", { + description = S("Weakness Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#7700BB"), + inventory_image = potion_image("#7700BB"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.weakness_func(user, 1.4, 240) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.weakness_func(user, 1.4, 240) mcl_potions._use_potion(itemstack) return itemstack end diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 8074ca7a8e..8cc6209955 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -142,7 +142,7 @@ register_splash("poison_2", "Splash Poison II", "#446655", { potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end }) -register_splash("poison_plus", "Splash Poison II", "#557766", { +register_splash("poison_plus", "Splash Poison +", "#557766", { potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end }) @@ -162,6 +162,14 @@ register_splash("invisibility", "Splash Invisibility", "#B0B0B0", { potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 135*redx) end }) -register_splash("invisibility", "Splash Invisibility", "#A0A0A0", { +register_splash("invisibility_plus", "Splash Invisibility +", "#A0A0A0", { potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 300*redx) end }) + +register_splash("weakness", "Splash Weakness", "#6600AA", { + potion_fun = function(player, redx) mcl_potions.weakness_func(player, 1.2, 68*redx) end +}) + +register_splash("weakness_plus", "Splash Weakness +", "#7700BB", { + potion_fun = function(player, redx) mcl_potions.weakness_func(player, 1.4, 180*redx) end +})