From 971e666d3ed69096c0cfca7178be58094dd86340 Mon Sep 17 00:00:00 2001 From: bzoss Date: Sat, 16 May 2020 18:22:09 -0400 Subject: [PATCH 01/63] 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 000000000..4c84c7290 --- /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 000000000..6342364f4 --- /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 000000000..ebc741c00 --- /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 000000000..de164abf9 --- /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!ia0y~yU=RRdCT0c(hNQXTpBNYzI0Jk_T$PoTb#!!0O-+Al zsT(mcFz9=_IEGX(COa@i21`mvY!0(B*wEI-X0V~P&5uElTVjU*OGpk=1gDFk^9wH( aV+MH(Mp0}$_yCc6F&9DzNt$%x&lFY{v=GrkEyT_y#rO;& zmX;Pa>hVo{hml!dz)tYM7R&CQGxN>9-QT-2S--FjU^3sC9soF(b$S`V)f;CIfo1IP z9?g&{fPjDooLv=)D4`nV9I`-y0vmMhsvtsw8gia?p@|l{(S`vROjvNkPUEy@<#89B zIVo1Ds;iu_tRjmlcF|FxDzT(emmE=D)vQ)^SG$aIm04D~%Z}uDAfvJg$3Z5M>D4U9 zQ1&E6HtG0NWhYThId;2p*kU)^H0Yv9i*DM15m;1kwBWFbB`Ts@<)F%7Dy>^|$mN(y zwd8>8%Gj2=)s`WbOj&Zv4(6o7+zn`lde|{fgTo0S4w+67?PL-iOyjh6BFb%MPRebx ztIf9B-F5;T@khl-G?xOA>j{MaWE#?`3`pA*?&g;n|k={ z`9)v}PY(7D{h!v~lHK~IM*!9qJI9ZKjjvftC)YQ&09=_*w~sbY?tgx{y17{UaQyn( tCr)-(-h6p~YjJ*c<k44ofy`glX=O&z+jOY z;hE;^%b>-;z`()4*q+J20#d@jz#zo{0!#~-;35JGm=SD{r1;$66ATOt1)eUBAr^vH zCpdB)P~c(7ji35|{-03q7Qxx;ns!d9;+%E&?2(|l!mPE|dA`gst%#o)TddF%DtY$J z(&;RxWY`O)Gnyoa9^_Y1?NGcEncmItIl}tjxe}&1iv&~7v@8jKz#pWYP}U{Ka4Bo< d#g2c!tC*W_spehvXVM0_!PC{xWt~$(69C>oNXGyG 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|2q?S0LMRuLqh2x%eS7h5%M*{aU3~97Fv|F)mX(a5eX+QStaJXCtvb4blS$* zd|RXBOS43FwjRfpR%y2^n$^bW9>3h*aPQ~+!~1!?et+K%LHKL!*tY`!pcQb`Hw*yK z005{~R{;RzSrjAy09>)B0xkpx11kW4I#43Sf^De;0N4k%18IQ#M;aQG|J&8u5>Kls z2S7DEz}Fj@uC!c(PG;Nh8q>?yl*0SH(TghfMmdJm7xwQBcIwRML{C@o)E6hy%$TUt z*W;Opb+~d@%h_0|B)c;HhJ!5U$)s*y_u6C~>Na+evgjqzpQLNp+z>k%cdWoOU z_A$fix|5`dU&O;tdS>2wENzZv7xKrT2i!&**H6=6vd##xrEh=BH%I;$pq(=?(V{@Y0wwfE+g(6uS2|rKt^d|*3FB5;nD(pmO!?jBxW_t1Ixc8^^|p5C8JR(* ze8gwYr~$kI(1jGIDa6t|^=r5M=hvNh@>H`tRJi9xFEImW%a2A5oNxEXEw?@WdP!*5 zGaC3#5+d9qlH3t#_{Yi;vYIfKS`->X=Po&yvmW8|+nR}I4O&_HkccBm_v%9gRpXo} z@%v`tU`M23l<)_sHr9(yJ(nrJ6#bc8lq5He+!+Qkefz*Fj4&gi zJQv_u)G0zOU7bKIswB7DU`_qz8q4RN1|OMjsrUzLQ(yk6?UlH*waN%LCbT{OT~S=S znXE{En0F>|P!Q^p*fdCgVNuHwT_4^j^1L>bKO#y7D(-=Pgs2fW|#3J%O2^}2?gjNY4Ceo_H(*Ds1< z$$F8<`3@So472mSe}6jlfpy$VS3Rh!pWuk=MgEI-^SVA$G0EMj9vH+un1`Zkk2t>cXO)srORR`Vl|huoL=Cl4OY(-_VYcHT^UXVAFY%z(j=NnT0O8L4BT zL_+78)ATwz`(`LToYNbPxkyE*sAx%lD4j^aulAgb{P<$x+u~z(W7v=hw&sB&_#2Q9$u5#-)TEowyu5gGK$m8MAKH25Up^}%Gsb-YYxdk=R z{!C(>I^Db=TD)a`kBO&ziy{ND>z*;4*g#@Aid S+-VT;EN*8Ir?3iWB_isr>}*oZ8(3U| zO(3O(g~BQF2BL3aAtUqq0(OE2wpe!eoSAR--R}6o%JS7^04t;I%{>5XSr_L4+`N5d zADGAP&cPN^1rQL>fU~PY5hYZkoI@5!P+)`3T@^$~P(#ksE;P|XH`*}Zf(Z+5*lC>B ztUT_5GbhC=Rdtm!mQ`d?#V$H3R3(;F>XIX>tD4oS?rN7&t}@FiciE8~4`fs};W)@7 zGQFDR7|Ncc$R-_ss_Z1HDaUSC4qNPIn+9DpY0*tPFanDTjusp?u|!35s~l7rOr>>; z4!Imtsg@j&T^ZX_x7sq~k||4W*}d3p#39ouqMb~lgK3=BPDHuQ z%t^V8cD317yW38HL;O)OB$_;jkRoc}o_Gh8(Kyga+JoUp9y}!cK~@|Llk9v4JMip3 zqy9}jdGYcZFo)-R<9+|9^|xd|*4*)})eQi5Mw|Bz){h^by;)p8 zTAEF!*FP>^e*f^(&$ET|)7fOYc6j&4bnC;7*N2y0eY=43UthkT?kvnQdbBm(Jh}hq F?Qf6bLTdm3 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/63] 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 6342364f4..dd7ba14e2 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 ebc741c00..56cf672ac 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_$LMi2F?JV5LaboWgQ(IQ&ZEQTIxm&3=I07E{-7;jL8m6 zk-?G@5}U)U3^ug2u^DV=ZS!Lgp)w3gGpYiM-;?CXsE`-SK!crgHFLz@MVkoi=7)!yw7EbJqPLf1CWT?%u=d0qk2N zi(Iv7{mTBtKDtbJpg!{2g4MsBoZMO{LYtv^lrx}t;2quXXDoTs^bVEd%NbitCF`m( zrne^4S-Q0L>pCHF_*56^Y$pVf#!kgxjF&m%kU4Fc)}X#FL=Mjgyh6~j(HVXt?Lq&07i=tCp8!J(Gs$VSBB$#fFfzo)boxdo?1c@9z(lqurTsv zzMoVk@E!ORZlZQ*q8L4mHH~-z-=5QLXHyA^rx&Rd^xDS?DlJedgT=lJ3LbIi%lCU- zx;J)fX%)^$uv@6%KA&@4%RTz-`$vhCF`X{$)B1Yjdb^bAbhG52q(8XK$5kJuRP7#} zt!HFH5QI8A?{{dDTvb()H(VwgmNxwRd(;R|P`h_ldKv^xmw05AWj2CNpfKqdH6-PY z-ke2d^a;vNS@`E?)=vWY@I&f2ql+b4p?zbsS0fC8z)>e#k~^bt$_sIhZF=P71N$8u zEs7NbznPX|8HI(`M65Eqs{|i4gx90RT^Rbfu~Chy#ys9cj|P|Cs4Fw@Aj^clR@Vc^ z=8wW-TYd>BJ6;c^pP#u`i~e9Dy06+T^8PNueUGTDjoy-wvSc6@ieI(T1=r^Pei2A1 zGMGO0Qe;n#a^E8|mwQ>@#`RHD@P&1rTTcOf(u*0nS5!-m`kAF&e=ct+pIo7~;a?uM z2zgpF`ylIPg!UjWa`krhz}uH~ZXp3~vH6s&ocWTs=-%C?GaUNu0JSbdVC50u?=AL#=d3;cwIfaaQ5A$rUPmvTKnHfT? zWT#lBizNy}d3B6Gy^5>;-iTVZk8I!T+H~26z!G8n(^5gu+1VLq)MHY)agL!0+hX~0 zwh(=`nguq|@jgvva;GNL?E$~Mj^r+|_Kf2p=MIHuu#S9cPK)Wk-0_1im7j>+p;$35Lxy#M zGrBxD4I$Xa{JG83$4_F%^<(FPp53$Kp>SclO~8?`5B;O_{sRF;DWL!W literal 1491 zcmd6n|2q?S0LMRuLqh2x%eS7h5%M*{aU3~97Fv|F)mX(a5eX+QStaJXCtvb4blS$* zd|RXBOS43FwjRfpR%y2^n$^bW9>3h*aPQ~+!~1!?et+K%LHKL!*tY`!pcQb`Hw*yK z005{~R{;RzSrjAy09>)B0xkpx11kW4I#43Sf^De;0N4k%18IQ#M;aQG|J&8u5>Kls z2S7DEz}Fj@uC!c(PG;Nh8q>?yl*0SH(TghfMmdJm7xwQBcIwRML{C@o)E6hy%$TUt z*W;Opb+~d@%h_0|B)c;HhJ!5U$)s*y_u6C~>Na+evgjqzpQLNp+z>k%cdWoOU z_A$fix|5`dU&O;tdS>2wENzZv7xKrT2i!&**H6=6vd##xrEh=BH%I;$pq(=?(V{@Y0wwfE+g(6uS2|rKt^d|*3FB5;nD(pmO!?jBxW_t1Ixc8^^|p5C8JR(* ze8gwYr~$kI(1jGIDa6t|^=r5M=hvNh@>H`tRJi9xFEImW%a2A5oNxEXEw?@WdP!*5 zGaC3#5+d9qlH3t#_{Yi;vYIfKS`->X=Po&yvmW8|+nR}I4O&_HkccBm_v%9gRpXo} z@%v`tU`M23l<)_sHr9(yJ(nrJ6#bc8lq5He+!+Qkefz*Fj4&gi zJQv_u)G0zOU7bKIswB7DU`_qz8q4RN1|OMjsrUzLQ(yk6?UlH*waN%LCbT{OT~S=S znXE{En0F>|P!Q^p*fdCgVNuHwT_4^j^1L>bKO#y7D(-=Pgs2fW|#3J%O2^}2?gjNY4Ceo_H(*Ds1< z$$F8<`3@So472mSe}6jlfpy$VS3Rh!pWuk=MgEI-^SVA$G0EMj9vH+un1`Zkk2t>cXO)srORR`Vl|huoL=Cl4OY(-_VYcHT^UXVAFY%z(j=NnT0O8L4BT zL_+78)ATwz`(`LToYNbPxkyE*sAx%lD4j^aulAgb{P<$x+u~z(W7v=hw&sB&_#2Q9$u5#-)TEowyu5gGK$m8MAKH25Up^}%Gsb-YYxdk=R z{!C(>I^Db=TD)a`kBO&ziy{ND>z*;4*g#@Aid S+-Hz7jM{;rey9v^Ab zEop?&jBX5L8Y#*0;4YQvpd4tDyLzP?Wk`E>5BGGZ{Do;3;gKGc-83C$c%~K&EMIMr1}Zh@b^M7{Lrun3am_ zu0T`N#m@CqIH(Zh(A7zzsZ6B9)mW{mh;-XEN5v$Pmh@yKGf4$l#4i;^qRO)fNumnw zinl;1jRhU0T^N?+!h^yuWXVA>iPU!>1&{nQ>fh9n(`P$@CX5YM>-X@dX& 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 deleted file mode 100755 index 4203949c6f94bd44a6281a343e3d2e8399ebc77c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 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/63] 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 dd7ba14e2..4ba2b7e03 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#&r8)&5XFxOVS=xsMdC~77bHYKXmAm2Qj~lUkB3hX7eR}fMGGskg%wy9QBVej z*aY^2pk09xv?&P6LYPfK(87YCM~lEs(b5y=+dt4QXy7g`_uiRvKIdMkRrj~GcC-R$ zs|@rF0$8op(hQ($`>Hz7jM{;rey9v^Ab zEop?&jBX5L8Y#*0;4YQvpd4tDyLzP?Wk`E>5BGGZ{Do;3;gKGc-83C$c%~K&EMIMr1}Zh@b^M7{Lrun3am_ zu0T`N#m@CqIH(Zh(A7zzsZ6B9)mW{mh;-XEN5v$Pmh@yKGf4$l#4i;^qRO)fNumnw zinl;1jRhU0T^N?+!h^yuWXVA>iPU!>1&{nQ>fh9n(`P$@CX5YM>-X@dX& 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 100644 index 0000000000000000000000000000000000000000..0c15ddd8ad3d7497d363f5db40e4053229cd177a GIT binary patch literal 342 zcmV-c0jd6pP)Lk}*!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/63] 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 4ba2b7e03..0e22b472f 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 zcmV;y06zbTP)>*kKg5%nJm_fh)y+-M7@?M$d;&&- vkFTom4w{J8-NIkZ(l)~EJ{~jYI%YTlrVDKoM%}Yo00000NkvXXu0mjfEX7K& 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 zcmV;z06qVSP)QFQdyOht*h$WQhsMdg+HqBFa_WQ||Qu#yLF37z6-BM3+MO wKeLcmkRn#hNA9w$6~c1b2Hos3o;tw}CxEM!uNytrDF6Tf07*qoM6N<$g3&cdVgLXD literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e8e8afeb20074143562bc5bf4e7722417e91de GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0y~yU|?flU=Zd2k(;mABrq^Aa29w(7BevL9RXp+soH$f z3=9meo-U3d5>ww^G-N!WAaLNoZz*SXz6mWXISbxcUo1;V$vKwdSV>F+^lCUY6>J=xJ#3=9kmp00i_>zopr01BHeI{*Lx literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_burner_active.png new file mode 100644 index 0000000000000000000000000000000000000000..93655b67322e5ed2a483a4017747af703f9682ea GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0y~yU|?flU=Zd2k(;mABrq^Aa29w(7BevL9RXp+soH$f z3=9nZo-U3d5>ww^+{oErAi{7_y!znWIZAsu{8T!aQ#i|oWFADj>gwq3{j_cmi=g0y zVz#AIrmV8L#@Tb5Z`SgbrSIQ;I3~Z3>#afjqJJKHAX!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 5123d8b74..dd863075e 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/63] 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 4c84c7290..73f7dce82 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 0e22b472f..4b0a975a5 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 3e6aef485..0b4d47e0d 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/63] 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 4b0a975a5..434309d16 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/63] 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 434309d16..c535831f9 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/63] 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 c535831f9..3657b10b5 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 dd863075e..622b08e82 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#zf0Cp6vm%7wbanTEngJr2N(rKhoGTCW4$a6VJDQpe^XY9WM9YbDrn(-0Oq2!!6D2%>Y{Z ztCb-DU0RKG04fh|yaehnI56A?l>rU}kN~wagE=f<38N0(;0_OX!l}Dq2uB1W5!BN( zq$2~FNP++jbTGgKsm5yUrpIZZ=BV5(%+ib+>t^oeVV>rciZBbe2#d6!M5S4}Wmu*q zjWC+gjbTh9C0QQar7|6q15I*QuXLjfY47ggp6-;tFzq5d(u1;_ro#-+^rRC`bGkE} z>7-x?mWOa;fMO#{9ul2l6ey%O%t!_iw4etgm_Z7&QgPiC zXo|YnxtG z7AU2$prf=4!;)NhQ22!`IVdKP`VOSvk$*=0n;JWRu>&Y!a;SEU|7ra#+4Acc2hcQ8 zJ$@EwUD7Ju+tFGEFx6k_9o~2I`SP=t#odkdgS$38J$ZX_p=spmt={ErD@(IuGcUfZ zR2OEa>aR`g-#W12=n^zFKAe(CC%lvG!|x 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/63] 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 3657b10b5..75f04df9d 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 622b08e82..44b8885a4 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#&uhA}rE^5|w7@mSLHe zG{R^`H-<5dlw^5um&$Zd4m8PKz0!>`q`kX`d%9Ep!nBLLk%rCeq<*tkzUSy6u{yViHM9dNPukqyjABmx>}$D>N}8vNB$Z0Z))$!(``Tvj`sCz<9}LzOSW}34ghF4 zROvqgG(Xp>nOND}3gBFKxwE?F($kmgo2T0A>jpbsKOU+(9&=xw?U;Ntb91_7ZRO0t zPuqV~MiyKiANxG`wr{RfeRZsVWC%BE%hyIK6Gy6hmekxCsBJkh|MtM{(c#k1opG=2 z*1WM(SaIe1htjTP4~J)G4tK6<-nZ^u>Enj>2a6^*t)5zX{{E9KFTU-6U+P#m)zG^9 U>-ewHH& Date: Tue, 26 May 2020 18:15:50 -0400 Subject: [PATCH 10/63] 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 75f04df9d..fef771f13 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 44b8885a4..6d7704821 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/63] 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 fef771f13..81a514ec0 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/63] 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 81a514ec0..91ac7a9d0 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 6d7704821..bac4fdd96 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/63] 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 91ac7a9d0..3b8577a31 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 bac4fdd96..ac2d1c26c 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#(QD6P6vm&mwBLTVx!{7WvE3+5`PFejO^t1~mDZZAxDbUSQk12L+FS_bQtRAJ zQ6kHQtthp$j5<*(MKUYp!i7mm(R%cJ{R8flQ}4yw`@ZKq&*yos4)pibmmA9f>ic@T z1_88am8t=B-MaP+sK&sap>C)Qa3FvLsGS+iVF61Rb?63nc)$}*-3>!HA`pq7o~9uk z8OTHu1Zbdx0VYT_R%7X2FlDm4P8)Zm)cMtb;r~HL!7vYf}l-)EPW_YG2op74do#9L; z1w*hrgd+nK8(H#@=nSJ!X|RV{XE;Sp#~!MTpg^W+Y(`{8GKioBJs80ZQka#B>#jgk z)Wy#AR5+**e(eoFYfhvp)_V49?T7OHn=|!9XPT%!9#733?<}3YvfS5t z>ig=Ux?i17M;=UWTCTdgeap&91BOS>t*P9bU-x=#Pe8@yOig zs+;RkzO($J<9W^fgD($1nrN(f*!*Q|U_<3y-TT(2mQ}O+7H)s~xpir5ymk>6zfCQD SE!CftrM~X|uE|}8F8u}*!)$*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#u}jxc6vdDJ3QhW1G(@C@ZNaZa?h*}A@iP@l%mfJ%ens6u8Um{!6eJ=nk{lAb z5mb;-K|xC{CJtdqw zUDZASZCZ^b0M+}~7J(9a5A}CIWq<<#BtY%VU=9md!l*+xxWfaUaO!Rt!V!T;1obox z>BvAPk|00>9Skr*s2VsUIVv{`voxc|x|zFqn5Q|VBFw@q!XhmwQE8TL8J1~D zBaCKrV;Iv&NtOq9sZ0muK$G0nE8QqV+PizWr#s~@OuGn=^q}mf=`h1HJ?VtgobC)~ zIw=@}g-U}x)H=f{ays@O=B}6Gm=3BE$G1rW{|?HR9trj znxZatuBXC5g&>EnP7+OJA|0;AYE4C?+pak(CXuwHCnK3jD!?LssVEXvo<&F!Rd83l z1xjfw=qT;Nup}2A6n-H~4vI;nz5^+E Date: Wed, 27 May 2020 21:15:46 -0400 Subject: [PATCH 14/63] 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 3b8577a31..b87ae04a1 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 ac2d1c26c..fe2e84a2d 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/63] 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 73f7dce82..000000000 --- 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 de164abf9..e2e88d1b7 --- 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=%*4RJFkxbb83O|YTS<^#FasFmEn}a^z`&sB>Eakt!I&(eP{7915#GyS oa-o2YSs<*JGh=aL2y-kW!;_NzjyC(}#DR2qy85}Sb4q9e0H0_U_W%F@ literal 1165 zcmds#y=oOe6oe-x1QWSYyI>H(Mp0}$_yCc6F&9DzNt$%x&lFY{v=GrkEyT_y#rO;& zmX;Pa>hVo{hml!dz)tYM7R&CQGxN>9-QT-2S--FjU^3sC9soF(b$S`V)f;CIfo1IP z9?g&{fPjDooLv=)D4`nV9I`-y0vmMhsvtsw8gia?p@|l{(S`vROjvNkPUEy@<#89B zIVo1Ds;iu_tRjmlcF|FxDzT(emmE=D)vQ)^SG$aIm04D~%Z}uDAfvJg$3Z5M>D4U9 zQ1&E6HtG0NWhYThId;2p*kU)^H0Yv9i*DM15m;1kwBWFbB`Ts@<)F%7Dy>^|$mN(y zwd8>8%Gj2=)s`WbOj&Zv4(6o7+zn`lde|{fgTo0S4w+67?PL-iOyjh6BFb%MPRebx ztIf9B-F5;T@khl-G?xOA>j{MaWE#?`3`pA*?&g;n|k={ z`9)v}PY(7D{h!v~lHK~IM*!9qJI9ZKjjvftC)YQ&09=_*w~sbY?tgx{y17{UaQyn( tCr)-(-h6p~YjJ*c<>UgY3~VJqe!&c2khhF|A_D_MfTxRNNCo552?seF90ZQ6 z(fV6%cF4y6#L5L+)5{aoci&~-@j!Lv>UWmiKL7LCpH4|HX9!-Zd33g2!=v>dZfyLz pA}jmU<<8W1z1sIfvqiqokzLmm_L4!!HV9;ir>mdKI%cPYCIEs5Hnso& 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>UgY3~VJqe!&c2khhF|A_D`1pQnpsNCo55iHvLq90ZR1 zTJ`h)`E4u(sV~W ntbExDE5R>cK5XMUx_J(F*^K3EYh&kutnhU8b6MwQOZs 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!Dj1ga|Q+mwvr&fU3@O%BOAv* pMuUc~rk@-QN+wz@l5sN@axpx4_NK&N@R1=%o2RRv%Q~loCIA_t8P)&* delta 128 zcmd0u%s4@^ij9GRVe|Ex1O^5M&H|6fVg?4jBOuH;Rhv(mfq}u*)5S4FV(QzAhKvUk z1P&bdE#=J4H=%_kXTclmi)9HZImc3b9MaUTL>-h+PC99+{$g+QYwd+wzqQHMTZnpT g_D9$^{XHnnWGjERAP!Dj1ga|Q+mwvr&fU3@O%BOAxR s7lAZ-y85}Sb4q9e0AP$82mk;8 delta 139 zcmV;60CfLvodJ*;e+B>m0JGP8U;qFB32;bRa{vGi!~g&e!~vBn4jTXf08dFoK~xx( z?a{FbfG`vQ(HDEcotz@Q2u>u317rzz5**-LMJ+5Xz4ETS1Q8LCa|Wf9l&U<|35?qg tnx}-N@9yx%AHE9hFkhnnNW33B0VEb2D>C>roB#j-07*qo1w^hwV1iGqFp&TN diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png old mode 100755 new mode 100644 index fd730958afc16a23407481ca3ac10d6e0923f452..b402d84a635fff94519e88b53042e9d32394b39a GIT binary patch delta 105 zcmeyxSTjK~nTdgcVZy`=GX@3*wvr&fUV#W+E-o{fQlLH_gqL5L}Hp$GX@ zR67*!M5cE$e2%a_c&>zL&LY8-Gc8NPAMgihCzN%`FrFrlgRctp z^6=$QjSC@+bAK_^GXZY$#Zb=@#a3^J7UiRg*RH zkE|rv0)B?&cW~Zgy!=KX(y@#|Il{AyS-4E(?!n&QyJEI&?9{QhSl-3he@#Efb^a3v zD;9>ZwC%T#zA|&Y9lXWTb$96P;4R+$zZ~O#alUw!y{fKW|L@=LKaI=TgR({RDe>FKWoWHa>e{;Yq?{spbAV#_%flzTq({PTCw!SV60r(L){C(M?iJxhAd*9>W?`N7%I zTse1Fu_s*rwenv@?cb34`nQYC-+3_Ds`p5Yi+(N^5=-n%bBtU z3=9dvMiD)QU;MUfbX`1No?R*z`L*q z^H)SptH0f6c&xv_|HId>p(d}Ftt+;gd+2G=$*A_{N4MRs+wWghSh@fHaf$lmn)>?w ztAAgaxz2t3amH3Y?SQ!^rT@}@`K)=}5|X`4BH3qS-7T-V)8mFn z{VG|Z4#To_n;-RyOx(KFN+oD+kKWa!zuVPwvP;)63cu=FbNHdax#z_k5BHy_dM0#Y z+Up4it}O~=S$_sh285@y3LN@c#apkqMqA4DLzj-O)c*bZ!vou0wu$vBRkS|qJ0@^V z@~g^*Ega`U-C6XHfVEw?Be>_9m5PDMrlPBY2ldmkFKRS}XS~bcIjHv|^=X%mpwH^H zuF3Ip|JLa@O<$FJ%|eFnVbM;J&?Rd%rHc2+8@=e>67qIQ&x8A4l6&fdN}f%;SAXWk z#KrlROMm=xiJbPZYVS6=%K}aobNz0nEfIOIetP<(d2cgH1D5}oERg-xct@4;j~cu3 zcatO+{&Fg$z4cWqZt(Ij(c{_sLD%?~F>^#glvT z^Ydp*bXd;#>$ajUY4-NVAAgh^Pv$?XSI;^V(oCOS-m6qGJ8k|lSA)%h2hVu1 z7+0_9Oh~IRHfd@zppIkU8|WO#9V;Pr2KhIwD^GE_pBWmyv-y dpwJ@lkJV|na=YIeI 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`=GX@3*wvr&fUlWce7pF%jTX-NnRUYpUXO@geCxiCmN#w literal 1172 zcmds#v1*k;6oe-x1QSh684NapAc!{S1ymBug>VT;EN*8Ir?3iWB_isr>}*oZ8(3U| zO(3O(g~BQF2BL3aAtUqq0(OE2wpe!eoSAR--R}6o%JS7^04t;I%{>5XSr_L4+`N5d zADGAP&cPN^1rQL>fU~PY5hYZkoI@5!P+)`3T@^$~P(#ksE;P|XH`*}Zf(Z+5*lC>B ztUT_5GbhC=Rdtm!mQ`d?#V$H3R3(;F>XIX>tD4oS?rN7&t}@FiciE8~4`fs};W)@7 zGQFDR7|Ncc$R-_ss_Z1HDaUSC4qNPIn+9DpY0*tPFanDTjusp?u|!35s~l7rOr>>; z4!Imtsg@j&T^ZX_x7sq~k||4W*}d3p#39ouqMb~lgK3=BPDHuQ z%t^V8cD317yW38HL;O)OB$_;jkRoc}o_Gh8(Kyga+JoUp9y}!cK~@|Llk9v4JMip3 zqy9}jdGYcZFo)-R<9+|9^|xd|*4*)})eQi5Mw|Bz){h^by;)p8 zTAEF!*FP>^e*f^(&$ET|)7fOYc6j&4bnC;7*N2y0eY=43UthkT?kvnQdbBm(Jh}hq F?Qf6bLTdm3 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 zcmV<203-j_0_*{h7=Hu<0002(-QrRJ001peOjJbx006+i!2h#m|IC^HnKQ0S7XSbM z|7QRHfB=Vpe5IF=aBOCiiGzN0acf~=yM#Kn00001bW%=J06^y0W&i*HZAnByRCob2 z$gvT^FbqJ^A1ml66DANFXatWyMXd&T1ABcA6L;?(a6X^W@CE40leRobzt)-Maum WCLm9FM=E;&0000x?%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/63] 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 b87ae04a1..e4a6ebbcb 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/63] Add bzoss to credits for brewing stand --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0a2c76bc8..07a4b437e 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/63] 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 66804f107..ea80f99c1 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 062b5e489..996db3cfe 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/63] 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 0b4d47e0d..8f4c16680 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/63] 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 5425ce96e..516f7bf60 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 bd697208c..9a98dc6da 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 d32c02809..a79410739 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 5d9c23359..86bd742a9 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 885e8599e..bdb3d5bdc 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 000000000..73f7dce82 --- /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 e4a6ebbcb..5535cee8e --- 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 e2e88d1b7..de164abf9 --- 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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 -V+T>+-Jo;xxMJ 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 Z4BIg^6L}!Q>JtZrIo(JsSd;GmLIM(zghBuS 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#y=oOe6oe-x1QWSYyI>H(Mp0}$_yCc6F&9DzNt$%x&lFY{v=GrkEyT_y#rO;& zmX;Pa>hVo{hml!dz)tYM7R&CQGxN>9-QT-2S--FjU^3sC9soF(b$S`V)f;CIfo1IP z9?g&{fPjDooLv=)D4`nV9I`-y0vmMhsvtsw8gia?p@|l{(S`vROjvNkPUEy@<#89B zIVo1Ds;iu_tRjmlcF|FxDzT(emmE=D)vQ)^SG$aIm04D~%Z}uDAfvJg$3Z5M>D4U9 zQ1&E6HtG0NWhYThId;2p*kU)^H0Yv9i*DM15m;1kwBWFbB`Ts@<)F%7Dy>^|$mN(y zwd8>8%Gj2=)s`WbOj&Zv4(6o7+zn`lde|{fgTo0S4w+67?PL-iOyjh6BFb%MPRebx ztIf9B-F5;T@khl-G?xOA>j{MaWE#?`3`pA*?&g;n|k={ z`9)v}PY(7D{h!v~lHK~IM*!9qJI9ZKjjvftC)YQ&09=_*w~sbY?tgx{y17{UaQyn( tCr)-(-h6p~YjJ*c<%$Xn=%*4RJFkxbb83O|YTS<^#FasFmEn}a^z`&sB>Eakt!I&(eP{7915#GyS oa-o2YSs<*JGh=aL2y-kW!;_NzjyC(}#DR2qy85}Sb4q9e0H0_U_W%F@ diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_bubbles.png index be8b4b7fc5e50605efd715acbd3defeb8a8e80f7..780352408fffc2731422e4d54013eb8674de0253 100644 GIT binary patch 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>UgY3~VJqe!&c2khhF|A_D_MfTxRNNCo552?seF90ZQ6 z(fV6%cF4y6#L5L+)5{aoci&~-@j!Lv>UWmiKL7LCpH4|HX9!-Zd33g2!=v>dZfyLz pA}jmU<<8W1z1sIfvqiqokzLmm_L4!!HV9;ir>mdKI%cPYCIEs5Hnso& 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>>UgY3~VJqe!&c2khhF|A_D`1pQnpsNCo55iHvLq90ZR1 zTJ`h)`E4u(sV~W ntbExDE5R>cK5XMUx_J(F*^K3EYh&kutnhU8b6MwQOZs 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|Ex1O^5M&H|6fVg?4jBOuH;Rhv(mfq}u*)5S4FV(QzAhKvUk z1P&bdE#=J4H=%_kXTclmi)9HZImc3b9MaUTL>-h+PC99+{$g+QYwd+wzqQHMTZnpT g_D9$^{XHnnWG3@O%BOAv* pMuUc~rk@-QN+wz@l5sN@axpx4_NK&N@R1=%o2RRv%Q~loCIA_t8P)&* 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 zcmV;60CfLvodJ*;e+B>m0JGP8U;qFB32;bRa{vGi!~g&e!~vBn4jTXf08dFoK~xx( z?a{FbfG`vQ(HDEcotz@Q2u>u317rzz5**-LMJ+5Xz4ETS1Q8LCa|Wf9l&U<|35?qg tnx}-N@9yx%AHE9hFkhnnNW33B0VEb2D>C>roB#j-07*qo1w^hwV1iGqFp&TN delta 92 zcmbQsm_I=>jERAP!Dj1ga|Q+mwvr&fU3@O%BOAxR s7lAZ-y85}Sb4q9e0AP$82mk;8 diff --git a/mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png b/mods/ITEMS/mcl_brewing/textures/mcl_brewing_fuel_bg.png old mode 100644 new mode 100755 index b402d84a635fff94519e88b53042e9d32394b39a..fd730958afc16a23407481ca3ac10d6e0923f452 GIT binary patch delta 232 zcmb>V#W+E-o{fQlLH_gqL5L}Hp$GX@ zR67*!M5cE$e2%a_c&>zL&LY8-Gc8NPAMgihCzN%`FRH zkE|rv0)B?&cW~Zgy!=KX(y@#|Il{AyS-4E(?!n&QyJEI&?9{QhSl-3he@#Efb^a3v zD;9>ZwC%T#zA|&Y9lXWTb$96P;4R+$zZ~O#alUw!y{fKW|L@=LKaI=TgR({RDe>FKWoWHa>e{;Yq?{spbAV#_%flzTq({PTCw!SV60r(L){C(M?iJxhAd*9>W?`N7%I zTse1Fu_s*rwenv@?cb34`nQYC-+3_Ds`p5Yi+(N^5=-n%bBtU z3=9dvMiD)QU;MUfbX`1No?R*z`L*q z^H)SptH0f6c&xv_|HId>p(d}Ftt+;gd+2G=$*A_{N4MRs+wWghSh@fHaf$lmn)>?w ztAAgaxz2t3amH3Y?SQ!^rT@}@`K)=}5|X`4BH3qS-7T-V)8mFn z{VG|Z4#To_n;-RyOx(KFN+oD+kKWa!zuVPwvP;)63cu=FbNHdax#z_k5BHy_dM0#Y z+Up4it}O~=S$_sh285@y3LN@c#apkqMqA4DLzj-O)c*bZ!vou0wu$vBRkS|qJ0@^V z@~g^*Ega`U-C6XHfVEw?Be>_9m5PDMrlPBY2ldmkFKRS}XS~bcIjHv|^=X%mpwH^H zuF3Ip|JLa@O<$FJ%|eFnVbM;J&?Rd%rHc2+8@=e>67qIQ&x8A4l6&fdN}f%;SAXWk z#KrlROMm=xiJbPZYVS6=%K}aobNz0nEfIOIetP<(d2cgH1D5}oERg-xct@4;j~cu3 zcatO+{&Fg$z4cWqZt(Ij(c{_sLD%?~F>^#glvT z^Ydp*bXd;#>$ajUY4-NVAAgh^Pv$?XSI;^V(oCOS-m6qGJ8k|lSA)%h2hVu1 z7+0_9Oh~IRHfd@zppIkU8|WO#9V;Pr2KhIwD^GE_pBWmyv-y dpwJ@lkJV|na=YIeI delta 474 zcmV<00VV#42rFrlgRctp z^6=$QjSC@+bAK_^GXZY$#Zb=@#a3^J7UiRg*VT;EN*8Ir?3iWB_isr>}*oZ8(3U| zO(3O(g~BQF2BL3aAtUqq0(OE2wpe!eoSAR--R}6o%JS7^04t;I%{>5XSr_L4+`N5d zADGAP&cPN^1rQL>fU~PY5hYZkoI@5!P+)`3T@^$~P(#ksE;P|XH`*}Zf(Z+5*lC>B ztUT_5GbhC=Rdtm!mQ`d?#V$H3R3(;F>XIX>tD4oS?rN7&t}@FiciE8~4`fs};W)@7 zGQFDR7|Ncc$R-_ss_Z1HDaUSC4qNPIn+9DpY0*tPFanDTjusp?u|!35s~l7rOr>>; z4!Imtsg@j&T^ZX_x7sq~k||4W*}d3p#39ouqMb~lgK3=BPDHuQ z%t^V8cD317yW38HL;O)OB$_;jkRoc}o_Gh8(Kyga+JoUp9y}!cK~@|Llk9v4JMip3 zqy9}jdGYcZFo)-R<9+|9^|xd|*4*)})eQi5Mw|Bz){h^by;)p8 zTAEF!*FP>^e*f^(&$ET|)7fOYc6j&4bnC;7*N2y0eY=43UthkT?kvnQdbBm(Jh}hq F?Qf6bLTdm3 delta 95 zcmbQjSu{a1l8J$VVZy`=GX@3*wvr&fUlWce7pF%jTX-NnRUYpUXO@geCxiCmN#w 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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 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_potion_bar.png b/mods/ITEMS/mcl_potions/textures/hb_potion_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..ce0aa78ec1e360bc7bc00c81028a6d6b176887fc GIT binary patch literal 91 zcmeAS@N?(olHy`uVBq!ia0y~yU|?ckU=ZK{k(*ChK4xHGU@Q)DcVbv~PUa;81B0li ti(?4K_2iiSX`0N;%)-pf%&{5_kE@sz>|WdZF)%PNc)I$ztaD0e0suGc6juNM 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(936htQ^LJTILWkf_<%UfG02__&h#58sRaf(!mR$?Wjun=r4<|7o;##XQq zrV_+Iu^pM`57-G_*kak;duPr(-mAldJDVHZ8vr)<_jZl|obOs+1@QCUuj{}n4(}fC zqBQ^k0S40D42BqCj7bkUAVGl!)4LjokRU_pQx8m7u;Cy;1|cHENZPoqIeqLwI;X`M z&3Gmq%NcU0p@*po&4?q7JW54*#vE(xaVD6|gcD6XNhQ|fh9(=P#}RD|mKv za6kWP{Vmzc-*noa#N)jOPl2tkT`O;IY+VL$b${p9@wy&w0HCM_e<~AI%|LTVCVhqlb62%;?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*i26ohB9g={5bw~9T;PA z|Kt#<0tg6bz}Z!yh!Uz%&LImVD6m22t_mU~s3GTR7n*3H8*LbH!Gr}j>@-emRvvf3 znUi9bs=CS<%PO*{Viz41suD{ob;%LcRn2NuceTqXSD9s%yX;7g2Qn&~a2#Y3nO@Cu z3}sJJWRs3RRdy29lw-Fmhb?xqO@l6)wCJWC7=c9vM+**{SfV1jRSv2Qrqa4ahg^=S zR7(!Xu8eJ|TWuL~$&@9x>|jnR%-w)?sD~Z%G&r0P;*jYS(M~4O!8A^5C!*YD=A_(4 zyV`84-EAkpA^xZs5>1{%ND(z~PrL)lXdLJy?ZI#)4;~W!AS(`rNp?O5JMip3qy9}j zdGTr&7~%PH{=olf{Vmy@Z+e=a#Omnu8L;&wYxI79YX`uM+4SzoM2{{<LXoX`2*nwmU2(AwJqFwmK3PXibR zu)D7p!0gA(i$E`?&UMG(3V=WY1<0oe1QCfSgxq9+1QRS!zMFw0GLeOppH`rVN>rf) z0SbsvLIuf#J(}Ui6_EG17?BYbA+Kcw8O&e>Wfd8bjLgW2ltooUF)E`fN+E8eZ_WQEsOW>uC_NJWaNOjSz8>{RHx1}#%JJNl_{$RXGv zJ;|cwOss<*?9p;WzD@6Osf1FLSjtkBeIL++`RU0E`cLa`$&S3rIRO1vCN5nC24DK?SwB2D z0-)PzpX%;eUwysZkK=ti-puF5__ghYpSk$>{`vhM4t#mEa`VLZnXk9MweF3+J+rZ} zH1}+@@8RX)wY8^9TSs@kJ9cDg J&C@f>zX4p7Sj+$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*i26oe-Pf(EjPg@i1@P7uZBkOxpUn1HMy22rbkW)K@AT8Tv>Huk0%NM)g2 zun{aQEfkKOudra_GmOmd3)l%B*y88jduHaFeZ4ikzO=Zq2w-V*W3mn441lwz<^k-@ zPVNBn*t)T^j!Xdr1T^4$RiTIys!`4%3nVD8LFcXtA|$9G=V=$3XrUWz7;wRa1vl(0 z&T3X3cfrxguu4^3<;b#%EUMT=$AzlIl1g22Om$VWTGd_cGRjqES>-M}mXm>u%O;!z zQ6jUeSx%sQlN8yclTVc|iE7G;+m*u>yV<5e7fo7p(+-TlqJpCZhfN|;G2JQ$RfMUm zZqXr^V=B{<1F|c!Ep@9cLoS)Ji=olj!0H^mi?mh)ZU-Fwfx-=RCxUxC9y0d(A|I^{Z z^3RJO-aYxg^5Af7_u%sW>et7Ua}Pg{e!RMH@OHLvd~^JM9&2xY-M)8z_A%0%>(j}} IwcVG$0i{zyuK)l5 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%y=zrb5X2`0;U$>ZSQ+dCL7PRa1Puu$B9EAlLa?xL3M=uYl7JvK!Yf3um`>E% zLa+=d3L}O{ z!f}vEWO_BrF_b+?kxe@ORM|;XQ;yxP9JbiaHVwLH(xRJoU<4Kw94$C(Vu_0ARyn9L zm`dvw9dbFQQY|?kyE3+=Znb5|B~zB%vV%FPFn0smp&oY3)8KGIh(o4RL_3*82h%vM zorrRqnUiuG?P{~FcDJ1XhxnsnNHlp4Aw|@{J@F1Gqj8{gRD3hCfWHM z?7*}CjQTfq>)yd>Uodzocb^}Baq?*S#P^*ikI&A%xiVQf{J8iNUp}v% Td%Ji4TQqF0kJnzU-hA*IvG+&^ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_tnt/init.lua b/mods/ITEMS/mcl_tnt/init.lua index 90cb76d8d..14865febf 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 083f9539e..f59fc6dd9 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 e701b7879..3245b934c 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 ae909b9c4..d73d81466 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 7c1ba2723..74f5282ef 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/63] 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 5535cee8e..696e0af12 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/63] 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 696e0af12..4e93d8792 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/63] 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 4e93d8792..73ddb9840 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 c5273bcd2..54c7bcf55 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 000000000..f7311c217 --- /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/63] 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 000000000..c3b3b4b79 --- /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 54c7bcf55..bfb6fffbf 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 f7311c217..000000000 --- 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 000000000..8c35b7ef0 --- /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/63] 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 8c35b7ef0..360c345d4 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/63] 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 c3b3b4b79..83120f374 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/63] 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 360c345d4..bffb8b349 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/63] 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 bfb6fffbf..fd6787ec2 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 bffb8b349..19eea39f6 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/63] 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 fd6787ec2..efa273d7f 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 19eea39f6..958cb4991 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/63] 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 efa273d7f..a73c2d593 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/63] 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 958cb4991..8074ca7a8 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/63] 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 83120f374..886502cfb 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 a73c2d593..a013cebac 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/63] 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 a013cebac..360d5c258 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 000000000..454867b30 --- /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/63] 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 360d5c258..beb212145 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 454867b30..32ddb3780 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 8074ca7a8..8cc620995 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 +}) From 5db4adb58f82e15df6c3446fc1ba473540eda8aa Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 17 Jun 2020 22:29:34 -0400 Subject: [PATCH 35/63] fix readme - I don't want my e-mail plastered on the internet... --- README.md | 5 +---- mods/CORE/mcl_explosions/init.lua | 4 ---- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/README.md b/README.md index f56e131ba..b41282696 100644 --- a/README.md +++ b/README.md @@ -201,11 +201,8 @@ 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 -<<<<<<< HEAD * MysticTempest: Bugfixes -======= -* bzoss : Brewing Stand ->>>>>>> 56a89405107fd3cd9c913a3284f8c9974aa51f62 +* bzoss : Brewing Stand * Lots of other people: TO BE WRITTEN (see mod directories for details) #### Mod credits (summary) diff --git a/mods/CORE/mcl_explosions/init.lua b/mods/CORE/mcl_explosions/init.lua index 47e4e89c4..2c7e69cdc 100644 --- a/mods/CORE/mcl_explosions/init.lua +++ b/mods/CORE/mcl_explosions/init.lua @@ -343,11 +343,7 @@ local function trace_explode(pos, strength, raydirs, radius, drop_chance, fire, minetest.bulk_set_node(airs, {name="air"}) end if #fires > 0 then -<<<<<<< HEAD minetest.bulk_set_node(fires, {name="mcl_fire:fire"}) -======= - minetest.bulk_set_node(fires, {name="mcl_core:fire"}) ->>>>>>> 56a89405107fd3cd9c913a3284f8c9974aa51f62 end -- Update falling nodes for a=1, #airs do From 3a361d441850d8df44a05efa160cabe11ec83e1c Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 17 Jun 2020 22:30:37 -0400 Subject: [PATCH 36/63] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b41282696..d33cda76a 100644 --- a/README.md +++ b/README.md @@ -202,7 +202,7 @@ There are so many people to list (sorry). Check out the respective mod directori * [aligator](https://github.com/aligator): Improvement of doors * [ryvnf](https://github.com/ryvnf): Explosion mechanics * MysticTempest: Bugfixes -* bzoss : Brewing Stand +* [bzoss](https://github.com/bzoss): Brewing Stand * Lots of other people: TO BE WRITTEN (see mod directories for details) #### Mod credits (summary) From 64cd19218f49b1585de581902e3f59ff781a7a43 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 07:43:50 -0400 Subject: [PATCH 37/63] Cleanup brewing stand code. Add lingering base structure add splash river water and water. --- mods/ITEMS/mcl_brewing/init.lua | 39 +----- mods/ITEMS/mcl_potions/init.lua | 19 ++- mods/ITEMS/mcl_potions/lingering.lua | 183 +++++++++++++++++++++++++++ mods/ITEMS/mcl_potions/splash.lua | 8 ++ 4 files changed, 208 insertions(+), 41 deletions(-) create mode 100644 mods/ITEMS/mcl_potions/lingering.lua diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 73ddb9840..a345c5206 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -134,6 +134,7 @@ local function brewing_stand_timer(pos, elapsed) -- return 1 -- end -- end + local brew_output = brewable(inv) if fuel ~= 0 and brew_output then @@ -286,13 +287,9 @@ if minetest.get_modpath("screwdriver") then end 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.") + S("To use an brewing_stand, rightclick it.").."\n" + S("To brew, place fuel first and/or your ingredient last!") + local tiles = {"mcl_brewing_top.png", --top "mcl_brewing_base.png", --bottom "mcl_brewing_side.png", --right @@ -424,8 +421,6 @@ minetest.register_node("mcl_brewing:stand_000", { 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, @@ -511,8 +506,6 @@ minetest.register_node("mcl_brewing:stand_100", { 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, @@ -597,8 +590,6 @@ minetest.register_node("mcl_brewing:stand_010", { 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, @@ -683,8 +674,6 @@ minetest.register_node("mcl_brewing:stand_001", { 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, @@ -769,8 +758,6 @@ minetest.register_node("mcl_brewing:stand_110", { 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, @@ -855,8 +842,6 @@ minetest.register_node("mcl_brewing:stand_101", { 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, @@ -941,8 +926,6 @@ minetest.register_node("mcl_brewing:stand_011", { 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, @@ -1027,8 +1010,6 @@ minetest.register_node("mcl_brewing:stand_111", { 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, @@ -1052,15 +1033,3 @@ minetest.register_craft({ { "mcl_core:stone_smooth", "mcl_core:stone_smooth", "mcl_core:stone_smooth" }, } }) - --- 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_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index beb212145..911372121 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 .. "/lingering.lua") dofile(modpath .. "/potions.lua") local brewhelp = S("Put this item in an item frame for decoration. It's useless otherwise.") @@ -93,9 +94,9 @@ minetest.register_craftitem("mcl_potions:glass_bottle", { -- place the water potion at a place where's space local water_bottle if river_water then - water_bottle = ItemStack("mcl_potions:potion_river_water") + water_bottle = ItemStack("mcl_potions:river_water") else - water_bottle = ItemStack("mcl_potions:potion_water") + water_bottle = ItemStack("mcl_potions:water") end local inv = placer:get_inventory() if creative then @@ -166,7 +167,7 @@ end -- Itemstring of potions is “mcl_potions:potion_” -minetest.register_craftitem("mcl_potions:potion_water", { +minetest.register_craftitem("mcl_potions:water", { description = S("Water Bottle"), _tt_help = S("No effect"), _doc_items_longdesc = S("Water bottles can be used to fill cauldrons. Drinking water has no effect."), @@ -211,7 +212,7 @@ minetest.register_craftitem("mcl_potions:potion_water", { on_secondary_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), }) -minetest.register_craftitem("mcl_potions:potion_river_water", { +minetest.register_craftitem("mcl_potions:river_water", { description = S("River Water Bottle"), _tt_help = S("No effect"), _doc_items_longdesc = S("River water bottles can be used to fill cauldrons. Drinking it has no effect."), @@ -306,8 +307,8 @@ local awkward_table = { } local output_table = { - ["mcl_potions:potion_river_water"] = water_table, - ["mcl_potions:potion_water"] = water_table, + ["mcl_potions:river_water"] = water_table, + ["mcl_potions:water"] = water_table, ["mcl_potions:awkward"] = awkward_table, } @@ -366,6 +367,12 @@ for i, potion in ipairs(potions) do lingering_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_lingering" end +splash_table["mcl_potions:water"] = "mcl_potions:water_splash" +splash_table["mcl_potions:river_water"] = "mcl_potions:river_water_splash" + +lingering_table["mcl_potions:water_splash"] = "mcl_potions:lingering" +lingering_table["mcl_potions:river_water_splash"] = "mcl_potions:lingering" + local mod_table = { ["mesecons:wire_00000000_off"] = extension_table, ["mcl_potions:fermented_spider_eye"] = inversion_table, diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua new file mode 100644 index 000000000..cb48464e0 --- /dev/null +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -0,0 +1,183 @@ +local lingering_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_lingering(name, descr, color, def) + + local id = "mcl_potions:"..name.."_lingering" + minetest.register_craftitem(id, { + description = descr, + inventory_image = lingering_image(color), + 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(); + 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}) + item:take_item() + return item + end, + stack_max = 1, + }) + + local w = 0.7 + + minetest.register_entity(id.."_flying",{ + textures = {lingering_image(color)}, + hp_max = 1, + visual_size = {x=w/2,y=w/2}, + collisionbox = {0,0,0,0,0,0}, + on_step = function(self, dtime) + local pos = self.object:getpos() + 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({ + amount = 100, + time = 30, + 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=-0.5, y=0, z=-0.5}, + maxvel = {x=0.5, y=0.5, z=0.5}, + minacc = {x=-0.25, y=0, z=-0.25}, + maxacc = {x=0.25, y=.1, z=0.25}, + minexptime = 1, + maxexptime = 5, + minsize = 2, + maxsize = 4, + 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() + 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 + + end + end + + end + end, + }) +end + +register_lingering("water", "Lingering Water", "#0000FF", { + potion_fun = function(player, redx) end, +}) + +register_lingering("river_water", "Lingering River Water", "#0000FF", { + potion_fun = function(player, redx) end, +}) + +register_lingering("awkward", "Lingering Awkward Potion", "#0000FF", { + potion_fun = function(player, redx) end, +}) + +register_lingering("mundane", "Lingering Mundane Potion", "#0000FF", { + potion_fun = function(player, redx) end, +}) + +register_lingering("thick", "Lingering Thick Potion", "#0000FF", { + potion_fun = function(player, redx) end, +}) + +register_lingering("healing", "Lingering Healing", "#AA0000", { + potion_fun = function(player, redx) player:set_hp(player:get_hp() + 3*redx) end, +}) + +register_lingering("healing_2", "Lingering Healing II", "#DD0000", { + potion_fun = function(player, redx) player:set_hp(player:get_hp() + 6*redx) end, +}) + +register_lingering("harming", "Lingering Harming", "#660099", { + potion_fun = function(player, redx) mcl_potions.healing_func(player, -4*redx) end, +}) + +register_lingering("harming_2", "Lingering Harming II", "#330066", { + potion_fun = function(player, redx) mcl_potions.healing_func(player, -6*redx) end, +}) + +register_lingering("leaping", "Lingering Leaping", "#00CC33", { + potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.2, 135*redx) end +}) + +register_lingering("leaping_2", "Lingering Leaping II", "#00EE33", { + potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.4, 135*redx) end +}) + +register_lingering("leaping_plus", "Lingering Leaping +", "#00DD33", { + potion_fun = function(player, redx) mcl_potions.leaping_func(player, 1.2, 360*redx) end +}) + +register_lingering("swiftness", "Lingering Swiftness", "#009999", { + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.2, 135*redx) end +}) + +register_lingering("swiftness_2", "Lingering Swiftness II", "#00BBBB", { + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.4, 135*redx) end +}) + +register_lingering("swiftness_plus", "Lingering Swiftness +", "#00BBBB", { + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 1.2, 360*redx) end +}) + +register_lingering("slowness", "Lingering Slowness ", "#000080", { + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 0.85, 68*redx) end +}) + +register_lingering("slowness_plus", "Lingering Slowness +", "#000066", { + potion_fun = function(player, redx) mcl_potions.swiftness_func(player, 0.85, 180*redx) end +}) + +register_lingering("poison", "Lingering Poison", "#335544", { + potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end +}) + +register_lingering("poison_2", "Lingering Poison II", "#446655", { + potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end +}) + +register_lingering("poison_plus", "Lingering Poison +", "#557766", { + potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end +}) + +register_lingering("regeneration", "Lingering Regeneration", "#A52BB2", { + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end +}) + +register_lingering("regeneration_2", "Lingering Regeneration II", "#B52CC2", { + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end +}) + +register_lingering("regeneration_plus", "Lingering Regeneration +", "#C53DD3", { + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 300*redx) end +}) + +register_lingering("invisibility", "Lingering Invisibility", "#B0B0B0", { + potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 135*redx) end +}) + +register_lingering("invisibility_plus", "Lingering Invisibility +", "#A0A0A0", { + potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 300*redx) end +}) + +register_lingering("weakness", "Lingering Weakness", "#6600AA", { + potion_fun = function(player, redx) mcl_potions.weakness_func(player, 1.2, 68*redx) end +}) + +register_lingering("weakness_plus", "Lingering Weakness +", "#7700BB", { + potion_fun = function(player, redx) mcl_potions.weakness_func(player, 1.4, 180*redx) end +}) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 8cc620995..104f5f51d 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -74,6 +74,14 @@ local function register_splash(name, descr, color, def) }) end +register_splash("water", "Splash Water", "#0000FF", { + potion_fun = function(player, redx) end, +}) + +register_splash("river_water", "Splash River Water", "#0000FF", { + potion_fun = function(player, redx) end, +}) + register_splash("awkward", "Splash Awkward Potion", "#0000FF", { potion_fun = function(player, redx) end, }) From 9f5bce29cb7ed8fc71b174368227e065d57b56cb Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 12:27:09 -0400 Subject: [PATCH 38/63] Add more lingering options. Adjust lingering cloud size. --- mods/ITEMS/mcl_potions/init.lua | 8 ++++---- mods/ITEMS/mcl_potions/lingering.lua | 16 ++++++++-------- mods/ITEMS/mcl_potions/splash.lua | 8 ++++---- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 911372121..e782b43e8 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -367,11 +367,11 @@ for i, potion in ipairs(potions) do lingering_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_lingering" end -splash_table["mcl_potions:water"] = "mcl_potions:water_splash" -splash_table["mcl_potions:river_water"] = "mcl_potions:river_water_splash" +for i, potion in ipairs({"awkward", "mundane", "thick", "water", "river_water"}) do + splash_table["mcl_potions:"..potion] = "mcl_potions:"..potion.."_splash" + lingering_table["mcl_potions:"..potion.."_splash"] = "mcl_potions:"..potion.."_lingering" +end -lingering_table["mcl_potions:water_splash"] = "mcl_potions:lingering" -lingering_table["mcl_potions:river_water_splash"] = "mcl_potions:lingering" local mod_table = { ["mesecons:wire_00000000_off"] = extension_table, diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index cb48464e0..053601d41 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -41,19 +41,19 @@ local function register_lingering(name, descr, color, def) if n ~= "air" then minetest.sound_play("mcl_potions_breaking_glass") minetest.add_particlespawner({ - amount = 100, + amount = 1000, time = 30, - 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}, + minpos = {x=pos.x-d, y=pos.y+0.5, z=pos.z-d}, + maxpos = {x=pos.x+d, y=pos.y+d, z=pos.z+d}, minvel = {x=-0.5, y=0, z=-0.5}, maxvel = {x=0.5, y=0.5, z=0.5}, - minacc = {x=-0.25, y=0, z=-0.25}, - maxacc = {x=0.25, y=.1, z=0.25}, + minacc = {x=-0.2, y=0, z=-0.2}, + maxacc = {x=0.2, y=.05, z=0.2}, minexptime = 1, maxexptime = 5, minsize = 2, maxsize = 4, - collisiondetection = false, + collisiondetection = true, vertical = false, texture = "mcl_potions_sprite.png^[colorize:"..color..":127", }) @@ -74,11 +74,11 @@ local function register_lingering(name, descr, color, def) }) end -register_lingering("water", "Lingering Water", "#0000FF", { +register_lingering("water", "Lingering Potion", "#0000FF", { potion_fun = function(player, redx) end, }) -register_lingering("river_water", "Lingering River Water", "#0000FF", { +register_lingering("river_water", "Lingering Potion", "#0000FF", { potion_fun = function(player, redx) end, }) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 104f5f51d..e4576f0bc 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -41,10 +41,10 @@ local function register_splash(name, descr, color, def) if n ~= "air" then minetest.sound_play("mcl_potions_breaking_glass") minetest.add_particlespawner({ - amount = 40, + amount = 50, 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}, + minpos = {x=pos.x-d, y=pos.y+0.5, z=pos.z-d}, + maxpos = {x=pos.x+d, y=pos.y+d, 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}, @@ -53,7 +53,7 @@ local function register_splash(name, descr, color, def) maxexptime = 5, minsize = 2, maxsize = 4, - collisiondetection = false, + collisiondetection = true, vertical = false, texture = "mcl_potions_sprite.png^[colorize:"..color..":127", }) From 4b23c2a15c95cfe4147b713518409d0609092af0 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 16:56:19 -0400 Subject: [PATCH 39/63] Update potions for mob effects. Healing harms zombies, harming heals zombies. --- mods/ITEMS/mcl_potions/functions.lua | 14 +++++++++++++- mods/ITEMS/mcl_potions/init.lua | 2 +- mods/ITEMS/mcl_potions/lingering.lua | 2 +- mods/ITEMS/mcl_potions/potions.lua | 1 + mods/ITEMS/mcl_potions/splash.lua | 6 +++--- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 886502cfb..410717d08 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -31,7 +31,19 @@ function mcl_potions._use_potion(item) minetest.sound_play("mcl_potions_drinking") end -function mcl_potions.healing_func(player, hp) player:set_hp(player:get_hp() + hp) end +local is_zombie = {} + +for i, zombie in ipairs({"husk","zombie","pigman"}) do + is_zombie["mobs_mc:"..zombie] = true + is_zombie["mobs_mc:baby_"..zombie] = true +end + +function mcl_potions.healing_func(player, hp) + + if is_zombie[player:get_entity_name()] then hp = -hp end + player:set_hp(player:get_hp() + hp) + +end function mcl_potions.swiftness_func(player, factor, duration) playerphysics.add_physics_factor(player, "speed", "swiftness", factor) diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index e782b43e8..2e31316c6 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -7,7 +7,7 @@ dofile(modpath .. "/splash.lua") dofile(modpath .. "/lingering.lua") dofile(modpath .. "/potions.lua") -local brewhelp = S("Put this item in an item frame for decoration. It's useless otherwise.") +local brewhelp = S("Try different combinations to create potions.") minetest.register_craftitem("mcl_potions:fermented_spider_eye", { description = S("Fermented Spider Eye"), diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index 053601d41..383f6e22e 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -60,7 +60,7 @@ local function register_lingering(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 + if minetest.is_player(obj) or obj:get_entity_name() 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)) diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 32ddb3780..bdae4326c 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -1,4 +1,5 @@ local S = minetest.get_translator("mcl_potions") +local brewhelp = S("Try different combinations to create potions.") local potion_image = function(colorstring, opacity) if not opacity then diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index e4576f0bc..4543386f9 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -60,7 +60,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 + if minetest.is_player(obj) or obj:get_entity_name() 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)) @@ -95,11 +95,11 @@ register_splash("thick", "Splash Thick Potion", "#0000FF", { }) register_splash("healing", "Splash Healing", "#AA0000", { - potion_fun = function(player, redx) player:set_hp(player:get_hp() + 3*redx) end, + potion_fun = function(player, redx) mcl_potions.healing_func(player, 3*redx) end, }) register_splash("healing_2", "Splash Healing II", "#DD0000", { - potion_fun = function(player, redx) player:set_hp(player:get_hp() + 6*redx) end, + potion_fun = function(player, redx) mcl_potions.healing_func(player, 6*redx) end, }) register_splash("harming", "Splash Harming", "#660099", { From 58cde1c9e91d8d51e4224f6c7dd48fead0a4ea86 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 17:17:56 -0400 Subject: [PATCH 40/63] Correct super zombie. --- mods/ITEMS/mcl_potions/functions.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 410717d08..56833faf7 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -39,9 +39,13 @@ for i, zombie in ipairs({"husk","zombie","pigman"}) do end function mcl_potions.healing_func(player, hp) - + if is_zombie[player:get_entity_name()] then hp = -hp end - player:set_hp(player:get_hp() + hp) + if hp > 0 then + player:set_hp(math.min(player:get_hp() + hp, player:get_properties().hp_max)) + else + player:set_hp(player:get_hp() + hp) + end end From d9e78e8ad902129429e3dc6c74084a4841dd7863 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 17:59:36 -0400 Subject: [PATCH 41/63] Add water breathing. --- mods/ITEMS/mcl_potions/functions.lua | 10 +++++++ mods/ITEMS/mcl_potions/init.lua | 6 ++-- mods/ITEMS/mcl_potions/potions.lua | 43 ++++++++++++++++++++++++++++ mods/ITEMS/mcl_potions/splash.lua | 10 ++++++- 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 56833faf7..d66e49d58 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -81,3 +81,13 @@ function mcl_potions.invisiblility_func(player, duration) mcl_potions.invisible(player, true) minetest.after(duration, function() mcl_potions.invisible(player, false) end ) end + +function mcl_potions.water_breathing_func(player, duration) + if minetest.is_player(player) then + + for i=1,math.floor(duration) do + minetest.after(i, function() player:set_breath(10) end ) + end + end + +end diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 2e31316c6..46d4eb464 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -303,7 +303,7 @@ local awkward_table = { ["mcl_fishing:pufferfish_raw"] = "mcl_potions:water_breathing", --add craft ["mcl_mobitems:ghast_tear"] = "mcl_potions:regeneration", --add craft ["mcl_mobitems:spider_eye"] = "mcl_potions:poison", --add craft - ["mcl_mobitems:rabbit_foot"] = "mcl_potions:leaping", --add craft + ["mcl_mobitems:rabbit_foot"] = "mcl_potions:leaping", } local output_table = { @@ -316,11 +316,11 @@ 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","weakness"}) do +for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","regeneration","invisibility","weakness","water_breathing"}) do table.insert(potions, potion) - if potion ~= "invisibility" and potion ~= "night_vision" and potion ~= "weakness" then + if potion ~= "invisibility" and potion ~= "night_vision" and potion ~= "weakness" and potion ~= "water_breathing" 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.."_2") diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index bdae4326c..b39a18591 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -548,3 +548,46 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) print("Weakness Active") end end) + + +minetest.register_craftitem("mcl_potions:water_breathing", { + description = S("Water Breathing Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#0000AA"), + inventory_image = potion_image("#0000AA"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.water_breathing_func(user, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.water_breathing_func(user, 180) + mcl_potions._use_potion(itemstack) + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:water_breathing_plus", { + description = S("Water Breathing Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#0000CC"), + inventory_image = potion_image("#0000CC"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.water_breathing_func(user, 480) + mcl_potions._use_potion(itemstack) + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.water_breathing_func(user, 480) + 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 4543386f9..ce39e795e 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -171,7 +171,7 @@ register_splash("invisibility", "Splash Invisibility", "#B0B0B0", { }) register_splash("invisibility_plus", "Splash Invisibility +", "#A0A0A0", { - potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 300*redx) end + potion_fun = function(player, redx) mcl_potions.invisiblility_func(player, 360*redx) end }) register_splash("weakness", "Splash Weakness", "#6600AA", { @@ -181,3 +181,11 @@ register_splash("weakness", "Splash Weakness", "#6600AA", { register_splash("weakness_plus", "Splash Weakness +", "#7700BB", { potion_fun = function(player, redx) mcl_potions.weakness_func(player, 1.4, 180*redx) end }) + +register_splash("water_breathing", "Splash Water Breathing", "#0000AA", { + potion_fun = function(player, redx) mcl_potions.water_breathing_func(player, 135*redx) end +}) + +register_splash("water_breathing_plus", "Splash Water Breathing +", "#0000CC", { + potion_fun = function(player, redx) mcl_potions.water_breathing_func(player, 360*redx) end +}) From 3ab5035312bbd05138c98fafd64fb8d64bace936 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 18:14:51 -0400 Subject: [PATCH 42/63] Add regeneration --- mods/ITEMS/mcl_potions/functions.lua | 19 +++++++++++++++---- mods/ITEMS/mcl_potions/potions.lua | 4 ++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index d66e49d58..918156bb4 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -72,9 +72,16 @@ function mcl_potions.poison_func(player, factor, duration) 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 ) + if minetest.is_player(player) then + + for i=1,math.floor(duration/factor) do + minetest.after(i*factor, function() + if player:get_hp() < 20 then + player:set_hp(player:get_hp() + 0.5) + end + end ) + end + end end function mcl_potions.invisiblility_func(player, duration) @@ -86,7 +93,11 @@ function mcl_potions.water_breathing_func(player, duration) if minetest.is_player(player) then for i=1,math.floor(duration) do - minetest.after(i, function() player:set_breath(10) end ) + minetest.after(i, function() + if player:get_breath() < 10 then + player:set_breath(10) + end + end ) end end diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index b39a18591..cb0352198 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -466,13 +466,13 @@ minetest.register_craftitem("mcl_potions:regeneration_2", { stack_max = 1, on_place = function(itemstack, user, pointed_thing) - mcl_potions.regeneration_func(user, 1.2, 21) + mcl_potions.regeneration_func(user, 1.2, 22) 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.regeneration_func(user, 1.2, 22) mcl_potions._use_potion(itemstack) return itemstack end From 38a4e6ed89909f7acd03a3cfd562aa58b350721c Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 19:44:29 -0400 Subject: [PATCH 43/63] Correct regeneration amount - 1/2 heart per cycle --- mods/ITEMS/mcl_potions/functions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 918156bb4..282e53e84 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -77,7 +77,7 @@ function mcl_potions.regeneration_func(player, factor, duration) for i=1,math.floor(duration/factor) do minetest.after(i*factor, function() if player:get_hp() < 20 then - player:set_hp(player:get_hp() + 0.5) + player:set_hp(player:get_hp() + 1) end end ) end From 7dc36368b0992e0b67cc96e96164f2fe5c1cabc6 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 20:08:00 -0400 Subject: [PATCH 44/63] Add poison. Update times/potency. --- mods/ITEMS/mcl_potions/functions.lua | 30 ++++++++++++++-------------- mods/ITEMS/mcl_potions/lingering.lua | 12 +++++------ mods/ITEMS/mcl_potions/splash.lua | 12 +++++------ 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 282e53e84..06a75d175 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -65,25 +65,25 @@ function mcl_potions.weakness_func(player, factor, duration) 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) - if minetest.is_player(player) then - - for i=1,math.floor(duration/factor) do - minetest.after(i*factor, function() - if player:get_hp() < 20 then - player:set_hp(player:get_hp() + 1) - end - end ) - end + for i=1,math.floor(duration/factor) do + minetest.after(i*factor, function() player:set_hp(player:get_hp() - 1) end) end end + +function mcl_potions.regeneration_func(player, factor, duration) + for i=1,math.floor(duration/factor) do + minetest.after(i*factor, function() + if player:get_hp() < 20 then + player:set_hp(player:get_hp() + 1) + end + end ) + end +end + + function mcl_potions.invisiblility_func(player, duration) mcl_potions.invisible(player, true) minetest.after(duration, function() mcl_potions.invisible(player, false) end ) diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index 383f6e22e..158e7a34d 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -143,27 +143,27 @@ register_lingering("slowness_plus", "Lingering Slowness +", "#000066", { }) register_lingering("poison", "Lingering Poison", "#335544", { - potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 2.5, 45*redx) end }) register_lingering("poison_2", "Lingering Poison II", "#446655", { - potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 1.2, 21*redx) end }) register_lingering("poison_plus", "Lingering Poison +", "#557766", { - potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 2.5, 90*redx) end }) register_lingering("regeneration", "Lingering Regeneration", "#A52BB2", { - potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 2.5, 45*redx) end }) register_lingering("regeneration_2", "Lingering Regeneration II", "#B52CC2", { - potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 1.2, 21*redx) end }) register_lingering("regeneration_plus", "Lingering Regeneration +", "#C53DD3", { - potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 300*redx) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 2.5, 90*redx) end }) register_lingering("invisibility", "Lingering Invisibility", "#B0B0B0", { diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index ce39e795e..886f2b020 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -143,27 +143,27 @@ register_splash("slowness_plus", "Splash Slowness +", "#000066", { }) register_splash("poison", "Splash Poison", "#335544", { - potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 2.5, 45*redx) end }) register_splash("poison_2", "Splash Poison II", "#446655", { - potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 1.2, 21*redx) end }) register_splash("poison_plus", "Splash Poison +", "#557766", { - potion_fun = function(player, redx) mcl_potions.poison_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.poison_func(player, 2.5, 90*redx) end }) register_splash("regeneration", "Splash Regeneration", "#A52BB2", { - potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 2.5, 45*redx) end }) register_splash("regeneration_2", "Splash Regeneration II", "#B52CC2", { - potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 180*redx) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 1.2, 21*redx) end }) register_splash("regeneration_plus", "Splash Regeneration +", "#C53DD3", { - potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 0.85, 300*redx) end + potion_fun = function(player, redx) mcl_potions.regeneration_func(player, 2.5, 90*redx) end }) register_splash("invisibility", "Splash Invisibility", "#B0B0B0", { From 70fd9db0c351b18255d07b341e29016d045837a6 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 20:22:44 -0400 Subject: [PATCH 45/63] Fix crash with non-player objects when adding player_physics attributes to object. --- mods/ITEMS/mcl_potions/functions.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 06a75d175..dfcacefb7 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -50,29 +50,29 @@ function mcl_potions.healing_func(player, hp) end function mcl_potions.swiftness_func(player, factor, duration) + if not player:get_meta() then return false end 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) + if player:get_meta() then return false end 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")) + -- 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) for i=1,math.floor(duration/factor) do minetest.after(i*factor, function() player:set_hp(player:get_hp() - 1) end) end end - function mcl_potions.regeneration_func(player, factor, duration) for i=1,math.floor(duration/factor) do minetest.after(i*factor, function() From bd9fd780eb5025e4f20f7c18f091a92916baba43 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 18 Jun 2020 21:04:31 -0400 Subject: [PATCH 46/63] Add potion sprite effects when drinking --- mods/ITEMS/mcl_potions/functions.lua | 20 +++++- mods/ITEMS/mcl_potions/potions.lua | 98 ++++++++++++++-------------- mods/ITEMS/mcl_potions/splash.lua | 7 +- 3 files changed, 71 insertions(+), 54 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index dfcacefb7..8ae3e1118 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -26,9 +26,27 @@ function mcl_potions.invisible(player, toggle) end -function mcl_potions._use_potion(item) +function mcl_potions._use_potion(item, pos, color) + local d = 0.1 item:replace("mcl_potions:glass_bottle") minetest.sound_play("mcl_potions_drinking") + minetest.add_particlespawner({ + amount = 25, + time = 1, + minpos = {x=pos.x-d, y=pos.y+1, z=pos.z-d}, + maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, + minvel = {x=-0.1, y=0, z=-0.1}, + maxvel = {x=0.1, y=0.1, z=0.1}, + minacc = {x=-0.1, y=0, z=-0.1}, + maxacc = {x=0.1, y=.1, z=0.1}, + minexptime = 1, + maxexptime = 5, + minsize = 0.5, + maxsize = 2, + collisiondetection = true, + vertical = false, + texture = "mcl_potions_sprite.png^[colorize:"..color..":127", + }) end local is_zombie = {} diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index cb0352198..2eacc0f6e 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -23,6 +23,7 @@ minetest.register_craftitem("mcl_potions: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:mundane", { description = S("Mundane Potion"), _tt_help = S("No effect"), @@ -37,7 +38,6 @@ minetest.register_craftitem("mcl_potions:mundane", { 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"), @@ -73,13 +73,13 @@ minetest.register_craftitem("mcl_potions:healing", { on_place = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 4) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#CC0000") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 4) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#CC0000") return itemstack end, }) @@ -94,13 +94,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#DD0000") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 8) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#DD0000") return itemstack end, @@ -116,13 +116,13 @@ minetest.register_craftitem("mcl_potions:harming", { on_place = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -6) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#660099") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -6) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#660099") return itemstack end, }) @@ -137,13 +137,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#330066") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -12) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#330066") return itemstack end, }) @@ -169,13 +169,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#009999") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#009999") return itemstack end, }) @@ -190,13 +190,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00BBBB") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.4, 90) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00BBBB") return itemstack end, }) @@ -211,13 +211,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00AAAA") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.2, 480) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00AAAA") return itemstack end, }) @@ -232,13 +232,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#000080") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 0.85, 90) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#000080") return itemstack end, }) @@ -253,13 +253,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#000066") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 0.85, 240) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#000066") return itemstack end, }) @@ -275,13 +275,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00CC33") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00CC33") return itemstack end, }) @@ -296,13 +296,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00EE33") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.4, 90) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00EE33") return itemstack end, }) @@ -317,13 +317,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00DD33") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.2, 480) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#00DD33") return itemstack end, }) @@ -339,13 +339,13 @@ minetest.register_craftitem("mcl_potions:weakness", { on_place = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.2, 90) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#6600AA") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.2, 90) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#6600AA") return itemstack end }) @@ -360,13 +360,13 @@ minetest.register_craftitem("mcl_potions:weakness_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.4, 240) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#7700BB") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.4, 240) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#7700BB") return itemstack end }) @@ -382,13 +382,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#225533") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 2.5, 45) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#225533") return itemstack end }) @@ -403,13 +403,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#447755") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 1.2, 21) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#447755") return itemstack end }) @@ -424,13 +424,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#336644") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 2.5, 90) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#336644") return itemstack end }) @@ -446,13 +446,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#A52BB2") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 2.5, 45) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#A52BB2") return itemstack end }) @@ -467,13 +467,13 @@ minetest.register_craftitem("mcl_potions:regeneration_2", { on_place = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 1.2, 22) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#B52CC2") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 1.2, 22) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#B52CC2") return itemstack end }) @@ -488,13 +488,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#C53DD3") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 2.5, 90) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#C53DD3") return itemstack end }) @@ -510,13 +510,13 @@ minetest.register_craftitem("mcl_potions:invisibility", { on_place = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 180) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#B0B0B0") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 180) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#B0B0B0") return itemstack end }) @@ -531,13 +531,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(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#A0A0A0") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 480) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#A0A0A0") return itemstack end }) @@ -560,13 +560,13 @@ minetest.register_craftitem("mcl_potions:water_breathing", { on_place = function(itemstack, user, pointed_thing) mcl_potions.water_breathing_func(user, 180) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#0000AA") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.water_breathing_func(user, 180) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#0000AA") return itemstack end }) @@ -581,13 +581,13 @@ minetest.register_craftitem("mcl_potions:water_breathing_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.water_breathing_func(user, 480) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#0000CC") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.water_breathing_func(user, 480) - mcl_potions._use_potion(itemstack) + mcl_potions._use_potion(itemstack, user:get_pos(), "#0000CC") return itemstack end }) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 886f2b020..a340b0a30 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -12,13 +12,12 @@ local function register_splash(name, descr, color, def) description = descr, inventory_image = splash_image(color), 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(); - local pos = placer:getpos(); + local pos = placer:get_pos(); 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}) + obj:set_velocity({x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity}) + obj:set_acceleration({x=0, y=-9.8, z=0}) item:take_item() return item end, From a5e3b259fae403ca543224778728528f6d36ff18 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 19 Jun 2020 20:22:32 -0400 Subject: [PATCH 47/63] Keep poisons from killing the player and prevent compounding poison effects. --- mods/ITEMS/mcl_potions/functions.lua | 31 ++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 8ae3e1118..667eb9956 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -1,13 +1,19 @@ local invisibility = {} +local poisoned = {} --- reset player invisibility if they go offline +-- reset player invisibility/poison if they go offline minetest.register_on_leaveplayer(function(player) local name = player:get_player_name() + if invisibility[name] then invisibility[name] = nil end + if poisoned[name] then + poisoned[name] = nil + end + end) function mcl_potions.invisible(player, toggle) @@ -26,6 +32,13 @@ function mcl_potions.invisible(player, toggle) end +function mcl_potions.poison(player, toggle) + + if not player then return false end + poisoned[player:get_player_name()] = toggle + +end + function mcl_potions._use_potion(item, pos, color) local d = 0.1 item:replace("mcl_potions:glass_bottle") @@ -59,10 +72,11 @@ end function mcl_potions.healing_func(player, hp) if is_zombie[player:get_entity_name()] then hp = -hp end + if hp > 0 then player:set_hp(math.min(player:get_hp() + hp, player:get_properties().hp_max)) else - player:set_hp(player:get_hp() + hp) + player:set_hp(math.max(player:get_hp() + hp, 1)) end end @@ -86,8 +100,17 @@ function mcl_potions.weakness_func(player, factor, duration) end function mcl_potions.poison_func(player, factor, duration) - for i=1,math.floor(duration/factor) do - minetest.after(i*factor, function() player:set_hp(player:get_hp() - 1) end) + + if not poisoned[player:get_player_name()] then + mcl_potions.poison(player, true) + for i=1,math.floor(duration/factor) do + minetest.after(i*factor, function() + if poisoned[player:get_player_name()] then + player:set_hp(math.max(player:get_hp() - 1,1)) + end + end) + end + minetest.after(duration, function() mcl_potions.poison(player, false) end) end end From d929ca19a8f655acabd378302cb2bcaf9905a51e Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 09:00:53 -0400 Subject: [PATCH 48/63] Add persistent particle spawner. --- mods/ITEMS/mcl_potions/functions.lua | 81 ++++++++++++++++++----- mods/ITEMS/mcl_potions/lingering.lua | 2 +- mods/ITEMS/mcl_potions/potions.lua | 96 ++++++++++++++-------------- mods/ITEMS/mcl_potions/splash.lua | 2 +- 4 files changed, 114 insertions(+), 67 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 667eb9956..9cdd3c2a6 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -39,29 +39,54 @@ function mcl_potions.poison(player, toggle) end -function mcl_potions._use_potion(item, pos, color) +function mcl_potions._use_potion(item, obj, color) local d = 0.1 + local pos = obj:get_pos() item:replace("mcl_potions:glass_bottle") minetest.sound_play("mcl_potions_drinking") minetest.add_particlespawner({ - amount = 25, - time = 1, - minpos = {x=pos.x-d, y=pos.y+1, z=pos.z-d}, - maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, - minvel = {x=-0.1, y=0, z=-0.1}, - maxvel = {x=0.1, y=0.1, z=0.1}, - minacc = {x=-0.1, y=0, z=-0.1}, - maxacc = {x=0.1, y=.1, z=0.1}, - minexptime = 1, - maxexptime = 5, - minsize = 0.5, - maxsize = 2, - collisiondetection = true, - vertical = false, - texture = "mcl_potions_sprite.png^[colorize:"..color..":127", - }) + amount = 25, + time = 1, + minpos = {x=pos.x-d, y=pos.y+1, z=pos.z-d}, + maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, + minvel = {x=-0.1, y=0, z=-0.1}, + maxvel = {x=0.1, y=0.1, z=0.1}, + minacc = {x=-0.1, y=0, z=-0.1}, + maxacc = {x=0.1, y=.1, z=0.1}, + minexptime = 1, + maxexptime = 5, + minsize = 0.5, + maxsize = 1, + collisiondetection = true, + vertical = false, + texture = "mcl_potions_sprite.png^[colorize:"..color..":127", + }) end + +function mcl_potions._add_spawner(obj, color) + local d = 0.2 + local pos = obj:get_pos() + minetest.add_particlespawner({ + amount = 5, + time = 1, + minpos = {x=pos.x-d, y=pos.y+1, z=pos.z-d}, + maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, + minvel = {x=-0.1, y=0, z=-0.1}, + maxvel = {x=0.1, y=0.1, z=0.1}, + minacc = {x=-0.1, y=0, z=-0.1}, + maxacc = {x=0.1, y=.1, z=0.1}, + minexptime = 0.5, + maxexptime = 1, + minsize = 0.5, + maxsize = 1, + collisiondetection = false, + vertical = false, + texture = "mcl_potions_sprite.png^[colorize:"..color..":127", + }) +end + + local is_zombie = {} for i, zombie in ipairs({"husk","zombie","pigman"}) do @@ -85,18 +110,27 @@ function mcl_potions.swiftness_func(player, factor, duration) if not player:get_meta() then return false end playerphysics.add_physics_factor(player, "speed", "swiftness", factor) minetest.after(duration, function() playerphysics.remove_physics_factor(player, "speed", "swiftness") end ) + for i=1,math.floor(duration) do + minetest.after(i, function() mcl_potions._add_spawner(player, "#009999") end) + end end function mcl_potions.leaping_func(player, factor, duration) if player:get_meta() then return false end playerphysics.add_physics_factor(player, "jump", "leaping", factor) minetest.after(duration, function() playerphysics.remove_physics_factor(player, "jump", "leaping") end ) + for i=1,math.floor(duration) do + minetest.after(i, function() mcl_potions._add_spawner(player, "#00CC33") end) + 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 ) + for i=1,math.floor(duration) do + minetest.after(i, function() mcl_potions._add_spawner(player, "#6600AA") end) + end end function mcl_potions.poison_func(player, factor, duration) @@ -110,6 +144,9 @@ function mcl_potions.poison_func(player, factor, duration) end end) end + for i=1,math.floor(duration) do + minetest.after(i, function() mcl_potions._add_spawner(player, "#225533") end) + end minetest.after(duration, function() mcl_potions.poison(player, false) end) end end @@ -122,12 +159,20 @@ function mcl_potions.regeneration_func(player, factor, duration) end end ) end + for i=1,math.floor(duration) do + minetest.after(i, function() mcl_potions._add_spawner(player, "#A52BB2") end) + end end function mcl_potions.invisiblility_func(player, duration) mcl_potions.invisible(player, true) minetest.after(duration, function() mcl_potions.invisible(player, false) end ) + + for i=1,math.floor(duration) do + minetest.after(i, function() mcl_potions._add_spawner(player, "#B0B0B0") end) + end + end function mcl_potions.water_breathing_func(player, duration) @@ -138,8 +183,10 @@ function mcl_potions.water_breathing_func(player, duration) if player:get_breath() < 10 then player:set_breath(10) end + mcl_potions._add_spawner(player, "#0000AA") end ) end + end end diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index 158e7a34d..04a1ff54a 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -50,7 +50,7 @@ local function register_lingering(name, descr, color, def) minacc = {x=-0.2, y=0, z=-0.2}, maxacc = {x=0.2, y=.05, z=0.2}, minexptime = 1, - maxexptime = 5, + maxexptime = 2, minsize = 2, maxsize = 4, collisiondetection = true, diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 2eacc0f6e..84324f213 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -73,13 +73,13 @@ minetest.register_craftitem("mcl_potions:healing", { on_place = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 4) - mcl_potions._use_potion(itemstack, user:get_pos(), "#CC0000") + mcl_potions._use_potion(itemstack, user, "#CC0000") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 4) - mcl_potions._use_potion(itemstack, user:get_pos(), "#CC0000") + mcl_potions._use_potion(itemstack, user, "#CC0000") return itemstack end, }) @@ -94,13 +94,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(itemstack, user:get_pos(), "#DD0000") + mcl_potions._use_potion(itemstack, user, "#DD0000") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, 8) - mcl_potions._use_potion(itemstack, user:get_pos(), "#DD0000") + mcl_potions._use_potion(itemstack, user, "#DD0000") return itemstack end, @@ -116,13 +116,13 @@ minetest.register_craftitem("mcl_potions:harming", { on_place = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -6) - mcl_potions._use_potion(itemstack, user:get_pos(), "#660099") + mcl_potions._use_potion(itemstack, user, "#660099") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -6) - mcl_potions._use_potion(itemstack, user:get_pos(), "#660099") + mcl_potions._use_potion(itemstack, user, "#660099") return itemstack end, }) @@ -137,13 +137,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(itemstack, user:get_pos(), "#330066") + mcl_potions._use_potion(itemstack, user, "#330066") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.healing_func(user, -12) - mcl_potions._use_potion(itemstack, user:get_pos(), "#330066") + mcl_potions._use_potion(itemstack, user, "#330066") return itemstack end, }) @@ -169,13 +169,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(itemstack, user:get_pos(), "#009999") + mcl_potions._use_potion(itemstack, user, "#009999") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack, user:get_pos(), "#009999") + mcl_potions._use_potion(itemstack, user, "#009999") return itemstack end, }) @@ -190,13 +190,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(itemstack, user:get_pos(), "#00BBBB") + mcl_potions._use_potion(itemstack, user, "#00BBBB") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.4, 90) - mcl_potions._use_potion(itemstack, user:get_pos(), "#00BBBB") + mcl_potions._use_potion(itemstack, user, "#00BBBB") return itemstack end, }) @@ -211,13 +211,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(itemstack, user:get_pos(), "#00AAAA") + mcl_potions._use_potion(itemstack, user, "#00AAAA") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 1.2, 480) - mcl_potions._use_potion(itemstack, user:get_pos(), "#00AAAA") + mcl_potions._use_potion(itemstack, user, "#00AAAA") return itemstack end, }) @@ -232,13 +232,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(itemstack, user:get_pos(), "#000080") + mcl_potions._use_potion(itemstack, user, "#000080") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 0.85, 90) - mcl_potions._use_potion(itemstack, user:get_pos(), "#000080") + mcl_potions._use_potion(itemstack, user, "#000080") return itemstack end, }) @@ -253,13 +253,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(itemstack, user:get_pos(), "#000066") + mcl_potions._use_potion(itemstack, user, "#000066") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.swiftness_func(user, 0.85, 240) - mcl_potions._use_potion(itemstack, user:get_pos(), "#000066") + mcl_potions._use_potion(itemstack, user, "#000066") return itemstack end, }) @@ -275,13 +275,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(itemstack, user:get_pos(), "#00CC33") + mcl_potions._use_potion(itemstack, user, "#00CC33") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.2, 180) - mcl_potions._use_potion(itemstack, user:get_pos(), "#00CC33") + mcl_potions._use_potion(itemstack, user, "#00CC33") return itemstack end, }) @@ -296,13 +296,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(itemstack, user:get_pos(), "#00EE33") + mcl_potions._use_potion(itemstack, user, "#00EE33") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.4, 90) - mcl_potions._use_potion(itemstack, user:get_pos(), "#00EE33") + mcl_potions._use_potion(itemstack, user, "#00EE33") return itemstack end, }) @@ -317,13 +317,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(itemstack, user:get_pos(), "#00DD33") + mcl_potions._use_potion(itemstack, user, "#00DD33") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.leaping_func(user, 1.2, 480) - mcl_potions._use_potion(itemstack, user:get_pos(), "#00DD33") + mcl_potions._use_potion(itemstack, user, "#00DD33") return itemstack end, }) @@ -339,13 +339,13 @@ minetest.register_craftitem("mcl_potions:weakness", { on_place = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.2, 90) - mcl_potions._use_potion(itemstack, user:get_pos(), "#6600AA") + mcl_potions._use_potion(itemstack, user, "#6600AA") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.2, 90) - mcl_potions._use_potion(itemstack, user:get_pos(), "#6600AA") + mcl_potions._use_potion(itemstack, user, "#6600AA") return itemstack end }) @@ -360,13 +360,13 @@ minetest.register_craftitem("mcl_potions:weakness_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.4, 240) - mcl_potions._use_potion(itemstack, user:get_pos(), "#7700BB") + mcl_potions._use_potion(itemstack, user, "#7700BB") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.weakness_func(user, 1.4, 240) - mcl_potions._use_potion(itemstack, user:get_pos(), "#7700BB") + mcl_potions._use_potion(itemstack, user, "#7700BB") return itemstack end }) @@ -382,13 +382,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(itemstack, user:get_pos(), "#225533") + mcl_potions._use_potion(itemstack, user, "#225533") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 2.5, 45) - mcl_potions._use_potion(itemstack, user:get_pos(), "#225533") + mcl_potions._use_potion(itemstack, user, "#225533") return itemstack end }) @@ -403,13 +403,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(itemstack, user:get_pos(), "#447755") + mcl_potions._use_potion(itemstack, user, "#447755") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 1.2, 21) - mcl_potions._use_potion(itemstack, user:get_pos(), "#447755") + mcl_potions._use_potion(itemstack, user, "#447755") return itemstack end }) @@ -424,13 +424,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(itemstack, user:get_pos(), "#336644") + mcl_potions._use_potion(itemstack, user, "#336644") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.poison_func(user, 2.5, 90) - mcl_potions._use_potion(itemstack, user:get_pos(), "#336644") + mcl_potions._use_potion(itemstack, user, "#336644") return itemstack end }) @@ -446,13 +446,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(itemstack, user:get_pos(), "#A52BB2") + mcl_potions._use_potion(itemstack, user, "#A52BB2") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 2.5, 45) - mcl_potions._use_potion(itemstack, user:get_pos(), "#A52BB2") + mcl_potions._use_potion(itemstack, user, "#A52BB2") return itemstack end }) @@ -467,13 +467,13 @@ minetest.register_craftitem("mcl_potions:regeneration_2", { on_place = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 1.2, 22) - mcl_potions._use_potion(itemstack, user:get_pos(), "#B52CC2") + mcl_potions._use_potion(itemstack, user, "#B52CC2") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 1.2, 22) - mcl_potions._use_potion(itemstack, user:get_pos(), "#B52CC2") + mcl_potions._use_potion(itemstack, user, "#B52CC2") return itemstack end }) @@ -488,13 +488,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(itemstack, user:get_pos(), "#C53DD3") + mcl_potions._use_potion(itemstack, user, "#C53DD3") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.regeneration_func(user, 2.5, 90) - mcl_potions._use_potion(itemstack, user:get_pos(), "#C53DD3") + mcl_potions._use_potion(itemstack, user, "#C53DD3") return itemstack end }) @@ -510,13 +510,13 @@ minetest.register_craftitem("mcl_potions:invisibility", { on_place = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 180) - mcl_potions._use_potion(itemstack, user:get_pos(), "#B0B0B0") + mcl_potions._use_potion(itemstack, user, "#B0B0B0") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 180) - mcl_potions._use_potion(itemstack, user:get_pos(), "#B0B0B0") + mcl_potions._use_potion(itemstack, user, "#B0B0B0") return itemstack end }) @@ -531,13 +531,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(itemstack, user:get_pos(), "#A0A0A0") + mcl_potions._use_potion(itemstack, user, "#A0A0A0") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.invisiblility_func(user, 480) - mcl_potions._use_potion(itemstack, user:get_pos(), "#A0A0A0") + mcl_potions._use_potion(itemstack, user, "#A0A0A0") return itemstack end }) @@ -560,13 +560,13 @@ minetest.register_craftitem("mcl_potions:water_breathing", { on_place = function(itemstack, user, pointed_thing) mcl_potions.water_breathing_func(user, 180) - mcl_potions._use_potion(itemstack, user:get_pos(), "#0000AA") + mcl_potions._use_potion(itemstack, user, "#0000AA") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.water_breathing_func(user, 180) - mcl_potions._use_potion(itemstack, user:get_pos(), "#0000AA") + mcl_potions._use_potion(itemstack, user, "#0000AA") return itemstack end }) @@ -581,13 +581,13 @@ minetest.register_craftitem("mcl_potions:water_breathing_plus", { on_place = function(itemstack, user, pointed_thing) mcl_potions.water_breathing_func(user, 480) - mcl_potions._use_potion(itemstack, user:get_pos(), "#0000CC") + mcl_potions._use_potion(itemstack, user, "#0000CC") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.water_breathing_func(user, 480) - mcl_potions._use_potion(itemstack, user:get_pos(), "#0000CC") + mcl_potions._use_potion(itemstack, user, "#0000CC") return itemstack end }) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index a340b0a30..7cadc85ad 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -49,7 +49,7 @@ local function register_splash(name, descr, color, def) minacc = {x=-0.5, y=0, z=-0.5}, maxacc = {x=0.5, y=.2, z=0.5}, minexptime = 1, - maxexptime = 5, + maxexptime = 3, minsize = 2, maxsize = 4, collisiondetection = true, From ec2d700c9529d650063c66a7f355f732aa43b778 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 10:16:00 -0400 Subject: [PATCH 49/63] Prevent compound regeneration --- mods/ITEMS/mcl_potions/functions.lua | 44 ++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 9cdd3c2a6..cd1a8ace9 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -1,5 +1,8 @@ local invisibility = {} local poisoned = {} +local regenerating = {} +local strong = {} +local weak = {} -- reset player invisibility/poison if they go offline minetest.register_on_leaveplayer(function(player) @@ -14,6 +17,18 @@ minetest.register_on_leaveplayer(function(player) poisoned[name] = nil end + if regenerating[name] then + regenerating[name] = nil + end + + if strong[name] then + strong[name] = nil + end + + if weak[name] then + weak[name] = nil + end + end) function mcl_potions.invisible(player, toggle) @@ -39,6 +54,13 @@ function mcl_potions.poison(player, toggle) end +function mcl_potions.regenerate(player, toggle) + + if not player then return false end + regenerating[player:get_player_name()] = toggle + +end + function mcl_potions._use_potion(item, obj, color) local d = 0.1 local pos = obj:get_pos() @@ -152,15 +174,19 @@ function mcl_potions.poison_func(player, factor, duration) end function mcl_potions.regeneration_func(player, factor, duration) - for i=1,math.floor(duration/factor) do - minetest.after(i*factor, function() - if player:get_hp() < 20 then - player:set_hp(player:get_hp() + 1) - end - end ) - end - for i=1,math.floor(duration) do - minetest.after(i, function() mcl_potions._add_spawner(player, "#A52BB2") end) + if not regenerating[player:get_player_name()] then + mcl_potions.regenerate(player, true) + for i=1,math.floor(duration/factor) do + minetest.after(i*factor, function() + if player:get_hp() < 20 then + player:set_hp(player:get_hp() + 1) + end + end ) + end + for i=1,math.floor(duration) do + minetest.after(i, function() mcl_potions._add_spawner(player, "#A52BB2") end) + end + minetest.after(duration, function() mcl_potions.regenerate(player, false) end) end end From e882dfc3c5bdb4e075a3cfd73c96d851ad45b202 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 10:51:36 -0400 Subject: [PATCH 50/63] Drop ghast tear and rabbit foot --- mods/ENTITIES/mobs_mc/ghast.lua | 13 ++----------- mods/ENTITIES/mobs_mc/rabbit.lua | 1 + 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/ghast.lua b/mods/ENTITIES/mobs_mc/ghast.lua index 2efe56afc..27998d170 100644 --- a/mods/ENTITIES/mobs_mc/ghast.lua +++ b/mods/ENTITIES/mobs_mc/ghast.lua @@ -36,17 +36,8 @@ mobs:register_mob("mobs_mc:ghast", { walk_velocity = 1.6, run_velocity = 3.2, drops = { - {name = mobs_mc.items.gunpowder, - chance = 1, - min = 0, - max = 2,}, - -- TODO: drop tear when it's useful - -- ghast tear replaced with gunpowder - --{name = mobs_mc.items.ghast_tear, - {name = mobs_mc.items.gunpowder, - chance = 1, - min = 0, - max = 1,}, + {name = mobs_mc.items.gunpowder, chance = 1, min = 0, max = 2,}, + {name = mobs_mc.items.ghast_tear, chance = 3,min = 0,max = 1,}, }, animation = { stand_speed = 50, walk_speed = 50, run_speed = 50, diff --git a/mods/ENTITIES/mobs_mc/rabbit.lua b/mods/ENTITIES/mobs_mc/rabbit.lua index ef7b702bd..8c0885636 100644 --- a/mods/ENTITIES/mobs_mc/rabbit.lua +++ b/mods/ENTITIES/mobs_mc/rabbit.lua @@ -33,6 +33,7 @@ local rabbit = { drops = { {name = mobs_mc.items.rabbit_raw, chance = 1, min = 0, max = 1}, {name = mobs_mc.items.rabbit_hide, chance = 1, min = 0, max = 1}, + {name = mobs_mc.items.rabbit_foot, chance = 10, min = 0, max = 1}, -- TODO: Drop rabbit's foot when it's useful --{name = mobs_mc.items.rabbit_foot, chance = 10, min = 1, max = 1}, }, From a8beeb9f9b41da0230eb3825c965a028c132736b Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 12:02:42 -0400 Subject: [PATCH 51/63] Minor formatting. --- mods/ITEMS/mcl_potions/lingering.lua | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index 04a1ff54a..d3248623d 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -41,22 +41,22 @@ local function register_lingering(name, descr, color, def) if n ~= "air" then minetest.sound_play("mcl_potions_breaking_glass") minetest.add_particlespawner({ - amount = 1000, - time = 30, - minpos = {x=pos.x-d, y=pos.y+0.5, z=pos.z-d}, - maxpos = {x=pos.x+d, y=pos.y+d, z=pos.z+d}, - minvel = {x=-0.5, y=0, z=-0.5}, - maxvel = {x=0.5, y=0.5, z=0.5}, - minacc = {x=-0.2, y=0, z=-0.2}, - maxacc = {x=0.2, y=.05, z=0.2}, - minexptime = 1, - maxexptime = 2, - minsize = 2, - maxsize = 4, - collisiondetection = true, - vertical = false, - texture = "mcl_potions_sprite.png^[colorize:"..color..":127", - }) + amount = 1000, + time = 30, + minpos = {x=pos.x-d, y=pos.y+0.5, z=pos.z-d}, + maxpos = {x=pos.x+d, y=pos.y+d, z=pos.z+d}, + minvel = {x=-0.5, y=0, z=-0.5}, + maxvel = {x=0.5, y=0.5, z=0.5}, + minacc = {x=-0.2, y=0, z=-0.2}, + maxacc = {x=0.2, y=.05, z=0.2}, + minexptime = 1, + maxexptime = 2, + 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, 4)) do From 3dbaac7549fe02c41e15a476b2723186beb6af7b Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 13:30:35 -0400 Subject: [PATCH 52/63] Update invisibility potions and poisons to utilize globalstep. Seems smoother. --- mods/ITEMS/mcl_potions/functions.lua | 110 +++++++++++++++++---------- 1 file changed, 70 insertions(+), 40 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index cd1a8ace9..b98c3767d 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -1,33 +1,69 @@ -local invisibility = {} -local poisoned = {} -local regenerating = {} -local strong = {} -local weak = {} +local is_invisible = {} +local is_poisoned = {} +local is_regenerating = {} +local is_strong = {} +local is_weak = {} --- reset player invisibility/poison if they go offline +local timer = 0 +minetest.register_globalstep(function(dtime) + + -- Check for invisible players + for player, bool in pairs(is_invisible) do + if is_invisible[player] then + mcl_potions._add_spawner(player, "#B0B0B0") + end + end + + -- Check for poisoned players + for player, bool in pairs(is_poisoned) do + + if is_poisoned[player] then + + player = player or player:get_luaentity() + + is_poisoned[player].timer = is_poisoned[player].timer + dtime + is_poisoned[player].hit_timer = (is_poisoned[player].hit_timer or 0) + dtime + + mcl_potions._add_spawner(player, "#225533") + + if is_poisoned[player].hit_timer >= is_poisoned[player].step then + player:set_hp( math.max(player:get_hp() - 1, 1) ) + is_poisoned[player].hit_timer = 0 + end + + if is_poisoned[player].timer >= is_poisoned[player].dur then + is_poisoned[player] = nil + end + + end + end + +end ) + +-- reset player is_invisible/poison if they go offline minetest.register_on_leaveplayer(function(player) local name = player:get_player_name() - if invisibility[name] then - invisibility[name] = nil + if is_invisible[name] then + is_invisible[name] = nil end - if poisoned[name] then - poisoned[name] = nil + if is_poisoned[name] then + is_poisoned[name] = nil end - if regenerating[name] then - regenerating[name] = nil + if is_regenerating[name] then + is_regenerating[name] = nil end - if strong[name] then - strong[name] = nil + if is_strong[name] then + is_strong[name] = nil end - if weak[name] then - weak[name] = nil - end + if is_weak[name] then + is_weak[name] = nil + end end) @@ -35,7 +71,7 @@ function mcl_potions.invisible(player, toggle) if not player then return false end - invisibility[player:get_player_name()] = toggle + is_invisible[player:get_player_name()] = toggle if toggle then -- hide player player:set_properties({visual_size = {x = 0, y = 0}}) @@ -50,14 +86,14 @@ end function mcl_potions.poison(player, toggle) if not player then return false end - poisoned[player:get_player_name()] = toggle + is_poisoned[player:get_player_name()] = toggle end function mcl_potions.regenerate(player, toggle) if not player then return false end - regenerating[player:get_player_name()] = toggle + is_regenerating[player:get_player_name()] = toggle end @@ -90,7 +126,7 @@ function mcl_potions._add_spawner(obj, color) local d = 0.2 local pos = obj:get_pos() minetest.add_particlespawner({ - amount = 5, + amount = 2, time = 1, minpos = {x=pos.x-d, y=pos.y+1, z=pos.z-d}, maxpos = {x=pos.x+d, y=pos.y+2, z=pos.z+d}, @@ -157,24 +193,23 @@ end function mcl_potions.poison_func(player, factor, duration) - if not poisoned[player:get_player_name()] then - mcl_potions.poison(player, true) - for i=1,math.floor(duration/factor) do - minetest.after(i*factor, function() - if poisoned[player:get_player_name()] then - player:set_hp(math.max(player:get_hp() - 1,1)) - end - end) - end - for i=1,math.floor(duration) do - minetest.after(i, function() mcl_potions._add_spawner(player, "#225533") end) - end - minetest.after(duration, function() mcl_potions.poison(player, false) end) + if not is_poisoned[player] then + + is_poisoned[player] = {step = factor, dur = duration, timer = 0} + + else + + local victim = is_poisoned[player] + + victim.step = math.min(victim.step, factor) + victim.dur = math.max(duration, victim.dur - victim.timer) + victim.timer = 0 + end end function mcl_potions.regeneration_func(player, factor, duration) - if not regenerating[player:get_player_name()] then + if not is_regenerating[player:get_player_name()] then mcl_potions.regenerate(player, true) for i=1,math.floor(duration/factor) do minetest.after(i*factor, function() @@ -194,11 +229,6 @@ end function mcl_potions.invisiblility_func(player, duration) mcl_potions.invisible(player, true) minetest.after(duration, function() mcl_potions.invisible(player, false) end ) - - for i=1,math.floor(duration) do - minetest.after(i, function() mcl_potions._add_spawner(player, "#B0B0B0") end) - end - end function mcl_potions.water_breathing_func(player, duration) From 12d0c3019e2b42b7226cae6d6dc12afd7164472c Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 15:50:58 -0400 Subject: [PATCH 53/63] Move timing functions out to globalstep --- mods/ITEMS/mcl_potions/functions.lua | 265 +++++++++++++++++++++------ mods/ITEMS/mcl_potions/splash.lua | 2 +- 2 files changed, 212 insertions(+), 55 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index b98c3767d..784ece4e2 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -3,19 +3,35 @@ local is_poisoned = {} local is_regenerating = {} local is_strong = {} local is_weak = {} +local is_water_breathing = {} +local is_leaping = {} +local is_swift = {} local timer = 0 minetest.register_globalstep(function(dtime) -- Check for invisible players - for player, bool in pairs(is_invisible) do + for player, vals in pairs(is_invisible) do + if is_invisible[player] then - mcl_potions._add_spawner(player, "#B0B0B0") + + player = player or player:get_luaentity() + + is_invisible[player].timer = is_invisible[player].timer + dtime + + if player:get_pos() then mcl_potions._add_spawner(player, "#B0B0B0") end + + if is_invisible[player].timer >= is_invisible[player].dur then + mcl_potions.make_invisible(player, false) + is_invisible[player] = nil + end + end + end -- Check for poisoned players - for player, bool in pairs(is_poisoned) do + for player, vals in pairs(is_poisoned) do if is_poisoned[player] then @@ -24,7 +40,7 @@ minetest.register_globalstep(function(dtime) is_poisoned[player].timer = is_poisoned[player].timer + dtime is_poisoned[player].hit_timer = (is_poisoned[player].hit_timer or 0) + dtime - mcl_potions._add_spawner(player, "#225533") + if player:get_pos() then mcl_potions._add_spawner(player, "#225533") end if is_poisoned[player].hit_timer >= is_poisoned[player].step then player:set_hp( math.max(player:get_hp() - 1, 1) ) @@ -36,6 +52,95 @@ minetest.register_globalstep(function(dtime) end end + + end + + -- Check for regnerating players + for player, vals in pairs(is_regenerating) do + + if is_regenerating[player] then + + player = player or player:get_luaentity() + + is_regenerating[player].timer = is_regenerating[player].timer + dtime + is_regenerating[player].heal_timer = (is_regenerating[player].heal_timer or 0) + dtime + + if player:get_pos() then mcl_potions._add_spawner(player, "#A52BB2") end + + if is_regenerating[player].heal_timer >= is_regenerating[player].step then + player:set_hp(math.min(player:get_properties().hp_max or 20, player:get_hp() + 1)) + is_regenerating[player].heal_timer = 0 + end + + if is_regenerating[player].timer >= is_regenerating[player].dur then + is_regenerating[player] = nil + end + + end + + end + + -- Check for water breathing players + for player, vals in pairs(is_water_breathing) do + + if is_water_breathing[player] then + + player = player or player:get_luaentity() + + is_water_breathing[player].timer = is_water_breathing[player].timer + dtime + + if player:get_pos() then mcl_potions._add_spawner(player, "#0000AA") end + + if player:get_breath() then + if player:get_breath() < 10 then player:set_breath(10) end + end + + if is_water_breathing[player].timer >= is_water_breathing[player].dur then + is_water_breathing[player] = nil + end + + end + + end + + -- Check for leaping players + for player, vals in pairs(is_leaping) do + + if is_leaping[player] then + + player = player or player:get_luaentity() + + is_leaping[player].timer = is_leaping[player].timer + dtime + + if player:get_pos() then mcl_potions._add_spawner(player, "#00CC33") end + + if is_leaping[player].timer >= is_leaping[player].dur then + playerphysics.remove_physics_factor(player, "jump", "leaping") + is_leaping[player] = nil + end + + end + + end + + -- Check for swift players + for player, vals in pairs(is_swift) do + + if is_swift[player] then + + player = player or player:get_luaentity() + + is_swift[player].timer = is_swift[player].timer + dtime + + if player:get_pos() then mcl_potions._add_spawner(player, "#009999") end + + if is_swift[player].timer >= is_swift[player].dur then + playerphysics.remove_physics_factor(player, "speed", "swiftness") + is_swift[player] = nil + end + + end + end end ) @@ -43,41 +148,52 @@ end ) -- reset player is_invisible/poison if they go offline minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() + player = player or player:get_luaentity() - if is_invisible[name] then - is_invisible[name] = nil + if is_invisible[player] then + is_invisible[player] = nil end - if is_poisoned[name] then - is_poisoned[name] = nil + if is_poisoned[player] then + is_poisoned[player] = nil end - if is_regenerating[name] then - is_regenerating[name] = nil + if is_regenerating[player] then + is_regenerating[player] = nil end - if is_strong[name] then - is_strong[name] = nil + if is_strong[player] then + is_strong[player] = nil end - if is_weak[name] then - is_weak[name] = nil + if is_weak[player] then + is_weak[player] = nil + end + + if is_water_breathing[player] then + is_water_breathing[player] = nil + end + + if is_leaping[player] then + is_leaping[player] = nil + end + + if is_swift[player] then + is_swift[player] = nil end end) -function mcl_potions.invisible(player, toggle) +function mcl_potions.make_invisible(player, toggle) if not player then return false end - is_invisible[player:get_player_name()] = toggle - if toggle then -- hide player + is_invisible[player].old_size = player:get_properties().visual_size 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_properties({visual_size = is_invisible[player].old_size}) player:set_nametag_attributes({color = {a = 255}}) end @@ -165,23 +281,48 @@ function mcl_potions.healing_func(player, hp) end function mcl_potions.swiftness_func(player, factor, duration) + if not player:get_meta() then return false end - playerphysics.add_physics_factor(player, "speed", "swiftness", factor) - minetest.after(duration, function() playerphysics.remove_physics_factor(player, "speed", "swiftness") end ) - for i=1,math.floor(duration) do - minetest.after(i, function() mcl_potions._add_spawner(player, "#009999") end) + + if not is_swift[player] then + + is_swift[player] = {dur = duration, timer = 0} + playerphysics.add_physics_factor(player, "speed", "swiftness", factor) + + else + + local victim = is_swift[player] + + playerphysics.add_physics_factor(player, "speed", "swiftness", factor) + victim.dur = math.max(duration, victim.dur - victim.timer) + victim.timer = 0 + end + end function mcl_potions.leaping_func(player, factor, duration) - if player:get_meta() then return false end - playerphysics.add_physics_factor(player, "jump", "leaping", factor) - minetest.after(duration, function() playerphysics.remove_physics_factor(player, "jump", "leaping") end ) - for i=1,math.floor(duration) do - minetest.after(i, function() mcl_potions._add_spawner(player, "#00CC33") end) + + if not player:get_meta() then return false end + + if not is_leaping[player] then + + is_leaping[player] = {dur = duration, timer = 0} + playerphysics.add_physics_factor(player, "jump", "leaping", factor) + + else + + local victim = is_leaping[player] + + playerphysics.add_physics_factor(player, "jump", "leaping", factor) + victim.dur = math.max(duration, victim.dur - victim.timer) + victim.timer = 0 + 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")) @@ -191,6 +332,7 @@ function mcl_potions.weakness_func(player, factor, duration) end end + function mcl_potions.poison_func(player, factor, duration) if not is_poisoned[player] then @@ -208,40 +350,55 @@ function mcl_potions.poison_func(player, factor, duration) end end + function mcl_potions.regeneration_func(player, factor, duration) - if not is_regenerating[player:get_player_name()] then - mcl_potions.regenerate(player, true) - for i=1,math.floor(duration/factor) do - minetest.after(i*factor, function() - if player:get_hp() < 20 then - player:set_hp(player:get_hp() + 1) - end - end ) - end - for i=1,math.floor(duration) do - minetest.after(i, function() mcl_potions._add_spawner(player, "#A52BB2") end) - end - minetest.after(duration, function() mcl_potions.regenerate(player, false) end) + + if not is_regenerating[player] then + + is_regenerating[player] = {step = factor, dur = duration, timer = 0} + + else + + local victim = is_regenerating[player] + + victim.step = math.min(victim.step, factor) + victim.dur = math.max(duration, victim.dur - victim.timer) + victim.timer = 0 + end end function mcl_potions.invisiblility_func(player, duration) - mcl_potions.invisible(player, true) - minetest.after(duration, function() mcl_potions.invisible(player, false) end ) -end -function mcl_potions.water_breathing_func(player, duration) - if minetest.is_player(player) then + if not is_invisible[player] then - for i=1,math.floor(duration) do - minetest.after(i, function() - if player:get_breath() < 10 then - player:set_breath(10) - end - mcl_potions._add_spawner(player, "#0000AA") - end ) - end + is_invisible[player] = {dur = duration, timer = 0} + mcl_potions.make_invisible(player, true) + + else + + local victim = is_invisible[player] + + victim.dur = math.max(duration, victim.dur - victim.timer) + victim.timer = 0 + + end + +end + +function mcl_potions.water_breathing_func(player, duration) + + if not is_water_breathing[player] then + + is_water_breathing[player] = {dur = duration, timer = 0} + + else + + local victim = is_water_breathing[player] + + victim.dur = math.max(duration, victim.dur - victim.timer) + victim.timer = 0 end diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 7cadc85ad..c38db9f54 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -61,7 +61,7 @@ local function register_splash(name, descr, color, def) if minetest.is_player(obj) or obj:get_entity_name() then - pos2 = obj:get_pos() + local 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 From 95e4934c80fb6c96fbfbb6aa7864467de2501fe1 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 17:26:42 -0400 Subject: [PATCH 54/63] Update brewing stand recipe - it can be built with cobble. --- mods/ITEMS/mcl_brewing/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index a345c5206..cad58b9f8 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -1030,6 +1030,6 @@ minetest.register_craft({ output = "mcl_brewing:stand", recipe = { { "", "mcl_mobitems:blaze_rod", "" }, - { "mcl_core:stone_smooth", "mcl_core:stone_smooth", "mcl_core:stone_smooth" }, + { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, } }) From 7827e0019ffd739c2db308f292ebec38612b60bd Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 18:11:35 -0400 Subject: [PATCH 55/63] Add check for player properties to ensure entity/player didn't die or leave. --- mods/ITEMS/mcl_potions/functions.lua | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 784ece4e2..80397bdff 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -13,7 +13,7 @@ minetest.register_globalstep(function(dtime) -- Check for invisible players for player, vals in pairs(is_invisible) do - if is_invisible[player] then + if is_invisible[player] and player:get_properties() then player = player or player:get_luaentity() @@ -26,6 +26,8 @@ minetest.register_globalstep(function(dtime) is_invisible[player] = nil end + elseif not player:get_properties() then + is_invisible[player] = nil end end @@ -33,7 +35,7 @@ minetest.register_globalstep(function(dtime) -- Check for poisoned players for player, vals in pairs(is_poisoned) do - if is_poisoned[player] then + if is_poisoned[player] and player:get_properties() then player = player or player:get_luaentity() @@ -51,6 +53,8 @@ minetest.register_globalstep(function(dtime) is_poisoned[player] = nil end + elseif not player:get_properties() then + is_poisoned[player] = nil end end @@ -58,7 +62,7 @@ minetest.register_globalstep(function(dtime) -- Check for regnerating players for player, vals in pairs(is_regenerating) do - if is_regenerating[player] then + if is_regenerating[player] and player:get_properties() then player = player or player:get_luaentity() @@ -76,6 +80,8 @@ minetest.register_globalstep(function(dtime) is_regenerating[player] = nil end + elseif not player:get_properties() then + is_regenerating[player] = nil end end @@ -83,7 +89,7 @@ minetest.register_globalstep(function(dtime) -- Check for water breathing players for player, vals in pairs(is_water_breathing) do - if is_water_breathing[player] then + if is_water_breathing[player] and player:get_properties() then player = player or player:get_luaentity() @@ -99,6 +105,8 @@ minetest.register_globalstep(function(dtime) is_water_breathing[player] = nil end + elseif not player:get_properties() then + is_water_breathing[player] = nil end end @@ -106,7 +114,7 @@ minetest.register_globalstep(function(dtime) -- Check for leaping players for player, vals in pairs(is_leaping) do - if is_leaping[player] then + if is_leaping[player] and player:get_properties() then player = player or player:get_luaentity() @@ -119,6 +127,8 @@ minetest.register_globalstep(function(dtime) is_leaping[player] = nil end + elseif not player:get_properties() then + is_leaping[player] = nil end end @@ -126,7 +136,7 @@ minetest.register_globalstep(function(dtime) -- Check for swift players for player, vals in pairs(is_swift) do - if is_swift[player] then + if is_swift[player] and player:get_properties() then player = player or player:get_luaentity() @@ -139,6 +149,8 @@ minetest.register_globalstep(function(dtime) is_swift[player] = nil end + elseif not player:get_properties() then + is_swift[player] = nil end end From 162faa7e60e8060c9c091a8304f1cf7fc56ed542 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 21:00:57 -0400 Subject: [PATCH 56/63] Add fire resistance groundwork. --- mods/ITEMS/mcl_potions/functions.lua | 9 +++++- mods/ITEMS/mcl_potions/init.lua | 8 +++--- mods/ITEMS/mcl_potions/potions.lua | 43 ++++++++++++++++++++++++++++ mods/ITEMS/mcl_potions/splash.lua | 8 ++++++ 4 files changed, 63 insertions(+), 5 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 80397bdff..e47aabfc1 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -149,7 +149,7 @@ minetest.register_globalstep(function(dtime) is_swift[player] = nil end - elseif not player:get_properties() then + elseif not player:get_properties() then is_swift[player] = nil end @@ -415,3 +415,10 @@ function mcl_potions.water_breathing_func(player, duration) end end + + +function mcl_potions.fire_resistance_func(player, duration) + + + +end diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 46d4eb464..e3d86f954 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -300,9 +300,9 @@ local awkward_table = { ["mcl_core:sugar"] = "mcl_potions:swiftness", ["mcl_mobitems:magma_cream"] = "mcl_potions:fire_resistance", --add craft ["mcl_mobitems:blaze_powder"] = "mcl_potions:strength", --add craft - ["mcl_fishing:pufferfish_raw"] = "mcl_potions:water_breathing", --add craft - ["mcl_mobitems:ghast_tear"] = "mcl_potions:regeneration", --add craft - ["mcl_mobitems:spider_eye"] = "mcl_potions:poison", --add craft + ["mcl_fishing:pufferfish_raw"] = "mcl_potions:water_breathing", + ["mcl_mobitems:ghast_tear"] = "mcl_potions:regeneration", + ["mcl_mobitems:spider_eye"] = "mcl_potions:poison", ["mcl_mobitems:rabbit_foot"] = "mcl_potions:leaping", } @@ -320,7 +320,7 @@ for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","reg table.insert(potions, potion) - if potion ~= "invisibility" and potion ~= "night_vision" and potion ~= "weakness" and potion ~= "water_breathing" then + if potion ~= "invisibility" and potion ~= "night_vision" and potion ~= "weakness" and potion ~= "water_breathing" and potion ~= "fire_resistance" 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.."_2") diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 84324f213..439cb5b9b 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -591,3 +591,46 @@ minetest.register_craftitem("mcl_potions:water_breathing_plus", { return itemstack end }) + + +minetest.register_craftitem("mcl_potions:fire_resistance", { + description = S("Fire Resistance Potion"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#D0A040"), + inventory_image = potion_image("#D0A040"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.fire_resistance_func(user, 180) + mcl_potions._use_potion(itemstack, user, "#D0A040") + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.fire_resistance_func(user, 180) + mcl_potions._use_potion(itemstack, user, "#D0A040") + return itemstack + end +}) + +minetest.register_craftitem("mcl_potions:fire_resistance_plus", { + description = S("Fire Resistance Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#E0B050"), + inventory_image = potion_image("#E0B050"), + groups = { brewitem = 1, food = 0 }, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.fire_resistance_func(user, 480) + mcl_potions._use_potion(itemstack, user, "#E0B050") + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.fire_resistance_func(user, 480) + mcl_potions._use_potion(itemstack, user, "#E0B050") + return itemstack + end +}) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index c38db9f54..95efa8bde 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -188,3 +188,11 @@ register_splash("water_breathing", "Splash Water Breathing", "#0000AA", { register_splash("water_breathing_plus", "Splash Water Breathing +", "#0000CC", { potion_fun = function(player, redx) mcl_potions.water_breathing_func(player, 360*redx) end }) + +register_splash("water_breathing_plus", "Splash Fire Resistance", "#D0A040", { + potion_fun = function(player, redx) mcl_potions.fire_resistance_func(player, 135*redx) end +}) + +register_splash("water_breathing_plus", "Splash Fire Resistance +", "#E0B050", { + potion_fun = function(player, redx) mcl_potions.fire_resistance_func(player, 360*redx) end +}) From 9836d631f9c6df29b460d3a6dd8b25d7ee2d5ff9 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 20 Jun 2020 21:17:45 -0400 Subject: [PATCH 57/63] Cleaning up old files and using a night-vision lite method. --- mods/ITEMS/mcl_potions/functions.lua | 5 +++ mods/ITEMS/mcl_potions/init.lua | 2 +- mods/ITEMS/mcl_potions/potions.lua | 37 +++++++++++++++++- mods/ITEMS/mcl_potions/splash.lua | 8 ++++ .../mcl_potions/textures/hb_potion_bar.png | Bin 91 -> 0 bytes .../textures/hb_swiftness_bgicon.png | Bin 1157 -> 0 bytes .../textures/hb_swiftness_icon.png | Bin 1167 -> 0 bytes .../textures/mcl_potions_healing.png | Bin 1261 -> 0 bytes .../textures/mcl_potions_night_vision.png | Bin 1260 -> 0 bytes .../textures/mcl_potions_swiftness.png | Bin 1262 -> 0 bytes .../textures/mcl_potions_weakness.png | Bin 1260 -> 0 bytes 11 files changed, 49 insertions(+), 3 deletions(-) delete mode 100644 mods/ITEMS/mcl_potions/textures/hb_potion_bar.png delete mode 100644 mods/ITEMS/mcl_potions/textures/hb_swiftness_bgicon.png delete mode 100644 mods/ITEMS/mcl_potions/textures/hb_swiftness_icon.png delete mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_healing.png delete mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_night_vision.png delete mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_swiftness.png delete mode 100644 mods/ITEMS/mcl_potions/textures/mcl_potions_weakness.png diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index e47aabfc1..26b57262d 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -422,3 +422,8 @@ function mcl_potions.fire_resistance_func(player, duration) end + + +function mcl_potions.night_vision_func(player, duration) + player:override_day_night_ratio(0.45) +end diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index e3d86f954..ff42768a7 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -316,7 +316,7 @@ 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","weakness","water_breathing"}) do +for i, potion in ipairs({"healing","harming","swiftness","leaping","poison","regeneration","invisibility","weakness","water_breathing","night_vision"}) do table.insert(potions, potion) diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 439cb5b9b..57a2c6014 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -152,10 +152,43 @@ minetest.register_craftitem("mcl_potions:harming_2", { 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", + 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.night_vision_func(user, 180) + mcl_potions._use_potion(itemstack, user, "#009999") + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.night_vision_func(user, 180) + mcl_potions._use_potion(itemstack, user, "#009999") + return itemstack + end, +}) + +minetest.register_craftitem("mcl_potions:night_vision_plus", { + description = S("Night Vision Potion +"), + _doc_items_longdesc = brewhelp, + wield_image = potion_image("#000A0A"), + inventory_image = potion_image("#000A0A"), + groups = { brewitem = 1, food=0}, + stack_max = 1, + + on_place = function(itemstack, user, pointed_thing) + mcl_potions.night_vision_func(user, 480) + mcl_potions._use_potion(itemstack, user, "#000A0A") + return itemstack + end, + + on_secondary_use = function(itemstack, user, pointed_thing) + mcl_potions.night_vision_func(user, 480) + mcl_potions._use_potion(itemstack, user, "#000A0A") + return itemstack + end, }) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 95efa8bde..0f60342df 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -196,3 +196,11 @@ register_splash("water_breathing_plus", "Splash Fire Resistance", "#D0A040", { register_splash("water_breathing_plus", "Splash Fire Resistance +", "#E0B050", { potion_fun = function(player, redx) mcl_potions.fire_resistance_func(player, 360*redx) end }) + +register_splash("night_vision", "Splash Night Vision", "#009999", { + potion_fun = function(player, redx) mcl_potions.night_vision_func(player, 135*redx) end +}) + +register_splash("night_vision_plus", "Splash Night Vision +", "#000A0A", { + potion_fun = function(player, redx) mcl_potions.night_vision_func(player, 360*redx) end +}) diff --git a/mods/ITEMS/mcl_potions/textures/hb_potion_bar.png b/mods/ITEMS/mcl_potions/textures/hb_potion_bar.png deleted file mode 100644 index ce0aa78ec1e360bc7bc00c81028a6d6b176887fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmeAS@N?(olHy`uVBq!ia0y~yU|?ckU=ZK{k(*ChK4xHGU@Q)DcVbv~PUa;81B0li ti(?4K_2iiSX`0N;%)-pf%&{5_kE@sz>|WdZF)%PNc)I$ztaD0e0suGc6juNM diff --git a/mods/ITEMS/mcl_potions/textures/hb_swiftness_bgicon.png b/mods/ITEMS/mcl_potions/textures/hb_swiftness_bgicon.png deleted file mode 100644 index b01f148599a6e7b1d4f79afa58a8842f0b8841e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1157 zcmds%v1(936htQ^LJTILWkf_<%UfG02__&h#58sRaf(!mR$?Wjun=r4<|7o;##XQq zrV_+Iu^pM`57-G_*kak;duPr(-mAldJDVHZ8vr)<_jZl|obOs+1@QCUuj{}n4(}fC zqBQ^k0S40D42BqCj7bkUAVGl!)4LjokRU_pQx8m7u;Cy;1|cHENZPoqIeqLwI;X`M z&3Gmq%NcU0p@*po&4?q7JW54*#vE(xaVD6|gcD6XNhQ|fh9(=P#}RD|mKv za6kWP{Vmzc-*noa#N)jOPl2tkT`O;IY+VL$b${p9@wy&w0HCM_e<~AI%|LTVCVhqlb62%;?Oys diff --git a/mods/ITEMS/mcl_potions/textures/hb_swiftness_icon.png b/mods/ITEMS/mcl_potions/textures/hb_swiftness_icon.png deleted file mode 100644 index 5c85ae17799a58b96bcccee6585d29709b44772e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1167 zcmds%v1*i26ohB9g={5bw~9T;PA z|Kt#<0tg6bz}Z!yh!Uz%&LImVD6m22t_mU~s3GTR7n*3H8*LbH!Gr}j>@-emRvvf3 znUi9bs=CS<%PO*{Viz41suD{ob;%LcRn2NuceTqXSD9s%yX;7g2Qn&~a2#Y3nO@Cu z3}sJJWRs3RRdy29lw-Fmhb?xqO@l6)wCJWC7=c9vM+**{SfV1jRSv2Qrqa4ahg^=S zR7(!Xu8eJ|TWuL~$&@9x>|jnR%-w)?sD~Z%G&r0P;*jYS(M~4O!8A^5C!*YD=A_(4 zyV`84-EAkpA^xZs5>1{%ND(z~PrL)lXdLJy?ZI#)4;~W!AS(`rNp?O5JMip3qy9}j zdGTr&7~%PH{=olf{Vmy@Z+e=a#Omnu8L;&wYxI79YX`uM+4SzoM2{{<W4$a6VJDQpe^XY9WM9YbDrn(-0Oq2!!6D2%>Y{Z ztCb-DU0RKG04fh|yaehnI56A?l>rU}kN~wagE=f<38N0(;0_OX!l}Dq2uB1W5!BN( zq$2~FNP++jbTGgKsm5yUrpIZZ=BV5(%+ib+>t^oeVV>rciZBbe2#d6!M5S4}Wmu*q zjWC+gjbTh9C0QQar7|6q15I*QuXLjfY47ggp6-;tFzq5d(u1;_ro#-+^rRC`bGkE} z>7-x?mWOa;fMO#{9ul2l6ey%O%t!_iw4etgm_Z7&QgPiC zXo|YnxtG z7AU2$prf=4!;)NhQ22!`IVdKP`VOSvk$*=0n;JWRu>&Y!a;SEU|7ra#+4Acc2hcQ8 zJ$@EwUD7Ju+tFGEFx6k_9o~2I`SP=t#odkdgS$38J$ZX_p=spmt={ErD@(IuGcUfZ zR2OEa>aR`g-#W12=n^zFKAe(CC%lvG!|x diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_night_vision.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_night_vision.png deleted file mode 100644 index 9a4ee688c9394bacd4292c0ad7e2fa430e357b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmds#(QD6P6vm&mwBLTVx!{7WvE3+5`PFejO^t1~mDZZAxDbUSQk12L+FS_bQtRAJ zQ6kHQtthp$j5<*(MKUYp!i7mm(R%cJ{R8flQ}4yw`@ZKq&*yos4)pibmmA9f>ic@T z1_88am8t=B-MaP+sK&sap>C)Qa3FvLsGS+iVF61Rb?63nc)$}*-3>!HA`pq7o~9uk z8OTHu1Zbdx0VYT_R%7X2FlDm4P8)Zm)cMtb;r~HL!7vYf}l-)EPW_YG2op74do#9L; z1w*hrgd+nK8(H#@=nSJ!X|RV{XE;Sp#~!MTpg^W+Y(`{8GKioBJs80ZQka#B>#jgk z)Wy#AR5+**e(eoFYfhvp)_V49?T7OHn=|!9XPT%!9#733?<}3YvfS5t z>ig=Ux?i17M;=UWTCTdgeap&91BOS>t*P9bU-x=#Pe8@yOig zs+;RkzO($J<9W^fgD($1nrN(f*!*Q|U_<3y-TT(2mQ}O+7H)s~xpir5ymk>6zfCQD SE!CftrM~X|uE|}8F8u}*!)$*5 diff --git a/mods/ITEMS/mcl_potions/textures/mcl_potions_swiftness.png b/mods/ITEMS/mcl_potions/textures/mcl_potions_swiftness.png deleted file mode 100644 index 4dbf788a61fd9379fceb236ecc919e1f3ffdd65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1262 zcmds#u}jxc6vdDJ3QhW1G(@C@ZNaZa?h*}A@iP@l%mfJ%ens6u8Um{!6eJ=nk{lAb z5mb;-K|xC{CJtdqw zUDZASZCZ^b0M+}~7J(9a5A}CIWq<<#BtY%VU=9md!l*+xxWfaUaO!Rt!V!T;1obox z>BvAPk|00>9Skr*s2VsUIVv{`voxc|x|zFqn5Q|VBFw@q!XhmwQE8TL8J1~D zBaCKrV;Iv&NtOq9sZ0muK$G0nE8QqV+PizWr#s~@OuGn=^q}mf=`h1HJ?VtgobC)~ zIw=@}g-U}x)H=f{ays@O=B}6Gm=3BE$G1rW{|?HR9trj znxZatuBXC5g&>EnP7+OJA|0;AYE4C?+pak(CXuwHCnK3jD!?LssVEXvo<&F!Rd83l z1xjfw=qT;Nup}2A6n-H~4vI;nz5^+EA}rE^5|w7@mSLHe zG{R^`H-<5dlw^5um&$Zd4m8PKz0!>`q`kX`d%9Ep!nBLLk%rCeq<*tkzUSy6u{yViHM9dNPukqyjABmx>}$D>N}8vNB$Z0Z))$!(``Tvj`sCz<9}LzOSW}34ghF4 zROvqgG(Xp>nOND}3gBFKxwE?F($kmgo2T0A>jpbsKOU+(9&=xw?U;Ntb91_7ZRO0t zPuqV~MiyKiANxG`wr{RfeRZsVWC%BE%hyIK6Gy6hmekxCsBJkh|MtM{(c#k1opG=2 z*1WM(SaIe1htjTP4~J)G4tK6<-nZ^u>Enj>2a6^*t)5zX{{E9KFTU-6U+P#m)zG^9 U>-ewHH& Date: Sat, 20 Jun 2020 21:30:26 -0400 Subject: [PATCH 58/63] put some rudementary night vision together --- mods/ITEMS/mcl_potions/functions.lua | 44 ++++++++++++++++++++++++++-- mods/ITEMS/mcl_potions/potions.lua | 16 +++++----- mods/ITEMS/mcl_potions/splash.lua | 4 +-- 3 files changed, 52 insertions(+), 12 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 26b57262d..1c32b5233 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -6,8 +6,9 @@ local is_weak = {} local is_water_breathing = {} local is_leaping = {} local is_swift = {} +local is_cat = {} + -local timer = 0 minetest.register_globalstep(function(dtime) -- Check for invisible players @@ -155,6 +156,28 @@ minetest.register_globalstep(function(dtime) end + -- Check for Night Vision equipped players + for player, vals in pairs(is_cat) do + + if is_cat[player] and player:get_properties() then + + player = player or player:get_luaentity() + + is_cat[player].timer = is_cat[player].timer + dtime + + if player:get_pos() then mcl_potions._add_spawner(player, "#1010AA") end + player:override_day_night_ratio(0.45) + + if is_cat[player].timer >= is_cat[player].dur then + is_cat[player] = nil + end + + elseif not player:get_properties() then + is_cat[player] = nil + end + + end + end ) -- reset player is_invisible/poison if they go offline @@ -194,6 +217,10 @@ minetest.register_on_leaveplayer(function(player) is_swift[player] = nil end + if is_cat[player] then + is_cat[player] = nil + end + end) function mcl_potions.make_invisible(player, toggle) @@ -425,5 +452,18 @@ end function mcl_potions.night_vision_func(player, duration) - player:override_day_night_ratio(0.45) + + if not is_cat[player] then + + is_cat[player] = {dur = duration, timer = 0} + + else + + local victim = is_cat[player] + + victim.dur = math.max(duration, victim.dur - victim.timer) + victim.timer = 0 + + end + end diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 57a2c6014..26036e146 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -152,20 +152,20 @@ minetest.register_craftitem("mcl_potions:harming_2", { minetest.register_craftitem("mcl_potions:night_vision", { description = S("Night Vision Potion"), _doc_items_longdesc = brewhelp, - wield_image = potion_image("#009999"), - inventory_image = potion_image("#009999"), + wield_image = potion_image("#1010AA"), + inventory_image = potion_image("#1010AA"), groups = { brewitem = 1, food=0}, stack_max = 1, on_place = function(itemstack, user, pointed_thing) mcl_potions.night_vision_func(user, 180) - mcl_potions._use_potion(itemstack, user, "#009999") + mcl_potions._use_potion(itemstack, user, "#1010AA") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.night_vision_func(user, 180) - mcl_potions._use_potion(itemstack, user, "#009999") + mcl_potions._use_potion(itemstack, user, "#1010AA") return itemstack end, }) @@ -173,20 +173,20 @@ minetest.register_craftitem("mcl_potions:night_vision", { minetest.register_craftitem("mcl_potions:night_vision_plus", { description = S("Night Vision Potion +"), _doc_items_longdesc = brewhelp, - wield_image = potion_image("#000A0A"), - inventory_image = potion_image("#000A0A"), + wield_image = potion_image("#2020BA"), + inventory_image = potion_image("#2020BA"), groups = { brewitem = 1, food=0}, stack_max = 1, on_place = function(itemstack, user, pointed_thing) mcl_potions.night_vision_func(user, 480) - mcl_potions._use_potion(itemstack, user, "#000A0A") + mcl_potions._use_potion(itemstack, user, "#2020BA") return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) mcl_potions.night_vision_func(user, 480) - mcl_potions._use_potion(itemstack, user, "#000A0A") + mcl_potions._use_potion(itemstack, user, "#2020BA") return itemstack end, }) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 0f60342df..108514387 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -197,10 +197,10 @@ register_splash("water_breathing_plus", "Splash Fire Resistance +", "#E0B050", { potion_fun = function(player, redx) mcl_potions.fire_resistance_func(player, 360*redx) end }) -register_splash("night_vision", "Splash Night Vision", "#009999", { +register_splash("night_vision", "Splash Night Vision", "#1010AA", { potion_fun = function(player, redx) mcl_potions.night_vision_func(player, 135*redx) end }) -register_splash("night_vision_plus", "Splash Night Vision +", "#000A0A", { +register_splash("night_vision_plus", "Splash Night Vision +", "#2020BA", { potion_fun = function(player, redx) mcl_potions.night_vision_func(player, 360*redx) end }) From 266713631a635a1980d3947db79d271b21973767 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sun, 21 Jun 2020 08:39:08 -0400 Subject: [PATCH 59/63] Correct sounds heard at distance and blast resistance for brewing stand. --- mods/ITEMS/mcl_brewing/init.lua | 78 ++++++++++++++-------------- mods/ITEMS/mcl_potions/functions.lua | 2 +- mods/ITEMS/mcl_potions/lingering.lua | 2 +- mods/ITEMS/mcl_potions/splash.lua | 2 +- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index cad58b9f8..a680dca15 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -158,9 +158,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_brewing_complete", {pos=pos, gain=0.4, max_hear_range=16}, true) + minetest.sound_play("mcl_brewing_complete", {pos=pos, gain=0.4, max_hear_range=6}, 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) + minetest.sound_play("mcl_potions_bottle_pour", {pos=pos, gain=0.6, max_hear_range=6}, true) end end stand_timer = 0 @@ -291,11 +291,11 @@ local doc_string = S("To brew, place fuel first and/or your ingredient last!") 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 + "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 @@ -357,7 +357,7 @@ minetest.register_node("mcl_brewing:stand_000", { _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}, + groups = {pickaxey=1, container=4, 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", @@ -405,9 +405,9 @@ minetest.register_node("mcl_brewing:stand_000", { {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, + sounds = mcl_sounds.node_sound_glass_defaults(), + _mcl_blast_resistance = 0, + _mcl_hardness = 1, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, @@ -442,9 +442,9 @@ minetest.register_node("mcl_brewing:stand_100", { _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}, + groups = {pickaxey=1, container=4, 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"}, + drop = "mlc_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -491,8 +491,8 @@ minetest.register_node("mcl_brewing:stand_100", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, + _mcl_blast_resistance = 0, + _mcl_hardness = 1, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, @@ -526,9 +526,9 @@ minetest.register_node("mcl_brewing:stand_010", { _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}, + groups = {pickaxey=1, container=4, 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"}, + drop = "mlc_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -575,8 +575,8 @@ minetest.register_node("mcl_brewing:stand_010", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, + _mcl_blast_resistance = 0, + _mcl_hardness = 1, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, @@ -610,9 +610,9 @@ minetest.register_node("mcl_brewing:stand_001", { _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}, + groups = {pickaxey=1, container=4, 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"}, + drop = "mlc_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -659,8 +659,8 @@ minetest.register_node("mcl_brewing:stand_001", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, + _mcl_blast_resistance = 0, + _mcl_hardness = 1, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, @@ -694,9 +694,9 @@ minetest.register_node("mcl_brewing:stand_110", { _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}, + groups = {pickaxey=1, container=4, 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"}, + drop = "mlc_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -743,8 +743,8 @@ minetest.register_node("mcl_brewing:stand_110", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, + _mcl_blast_resistance = 0, + _mcl_hardness = 1, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, @@ -778,9 +778,9 @@ minetest.register_node("mcl_brewing:stand_101", { _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}, + groups = {pickaxey=1, container=4, 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"}, + drop = "mlc_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -827,8 +827,8 @@ minetest.register_node("mcl_brewing:stand_101", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, + _mcl_blast_resistance = 0, + _mcl_hardness = 1, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, @@ -862,9 +862,9 @@ minetest.register_node("mcl_brewing:stand_011", { _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}, + groups = {pickaxey=1, container=4, 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"}, + drop = "mlc_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -911,8 +911,8 @@ minetest.register_node("mcl_brewing:stand_011", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, + _mcl_blast_resistance = 0, + _mcl_hardness = 1, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, @@ -946,9 +946,9 @@ minetest.register_node("mcl_brewing:stand_111", { _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}, + groups = {pickaxey=1, container=4, 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"}, + drop = "mlc_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -995,8 +995,8 @@ minetest.register_node("mcl_brewing:stand_111", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, + _mcl_blast_resistance = 0, + _mcl_hardness = 1, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 1c32b5233..a2e7befc5 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -256,7 +256,7 @@ function mcl_potions._use_potion(item, obj, color) local d = 0.1 local pos = obj:get_pos() item:replace("mcl_potions:glass_bottle") - minetest.sound_play("mcl_potions_drinking") + minetest.sound_play("mcl_potions_drinking", {pos = pos, max_hear_distance = 6, gain = 1}) minetest.add_particlespawner({ amount = 25, time = 1, diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index d3248623d..26b5c3c12 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -39,7 +39,7 @@ local function register_lingering(name, descr, color, def) local d = 2 local redux_map = {7/8,0.5,0.25} if n ~= "air" then - minetest.sound_play("mcl_potions_breaking_glass") + minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) minetest.add_particlespawner({ amount = 1000, time = 30, diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 108514387..d1d2708db 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -38,7 +38,7 @@ local function register_splash(name, descr, color, def) local d = 2 local redux_map = {7/8,0.5,0.25} if n ~= "air" then - minetest.sound_play("mcl_potions_breaking_glass") + minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) minetest.add_particlespawner({ amount = 50, time = 2, From a233977b355f2f73160d2a436f0391c3ea3dd566 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sun, 21 Jun 2020 08:57:44 -0400 Subject: [PATCH 60/63] Fix stand not dropping when mined with pickaxe. --- mods/ITEMS/mcl_brewing/init.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index a680dca15..3783221a6 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -359,7 +359,7 @@ minetest.register_node("mcl_brewing:stand_000", { _tt_help = S("Brew Potions"), groups = {pickaxey=1, container=4, 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"}, + drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -444,7 +444,7 @@ minetest.register_node("mcl_brewing:stand_100", { _tt_help = S("Brew Potions"), groups = {pickaxey=1, container=4, 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", + drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -528,7 +528,7 @@ minetest.register_node("mcl_brewing:stand_010", { _tt_help = S("Brew Potions"), groups = {pickaxey=1, container=4, 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", + drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -612,7 +612,7 @@ minetest.register_node("mcl_brewing:stand_001", { _tt_help = S("Brew Potions"), groups = {pickaxey=1, container=4, 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", + drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -696,7 +696,7 @@ minetest.register_node("mcl_brewing:stand_110", { _tt_help = S("Brew Potions"), groups = {pickaxey=1, container=4, 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", + drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -780,7 +780,7 @@ minetest.register_node("mcl_brewing:stand_101", { _tt_help = S("Brew Potions"), groups = {pickaxey=1, container=4, 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", + drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -864,7 +864,7 @@ minetest.register_node("mcl_brewing:stand_011", { _tt_help = S("Brew Potions"), groups = {pickaxey=1, container=4, 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", + drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -948,7 +948,7 @@ minetest.register_node("mcl_brewing:stand_111", { _tt_help = S("Brew Potions"), groups = {pickaxey=1, container=4, 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", + drop = "mcl_brewing:stand", paramtype = "light", sunlight_propagates = true, is_ground_content = false, From 2cf0ea664ba7e873037dca550709d929d3a3db3b Mon Sep 17 00:00:00 2001 From: Brandon Date: Sun, 21 Jun 2020 17:41:48 -0400 Subject: [PATCH 61/63] Fix on_blast method to drop items. --- mods/ITEMS/mcl_brewing/init.lua | 55 +++++++++++++++++---------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index 3783221a6..e412990ac 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -322,10 +322,13 @@ local on_put = function(pos, listname, index, stack, player) 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 after_blast = function(pos) + local meta = minetest.get_meta(pos) + drop_brewing_stand_items(pos, meta) + minetest.remove_node(pos) end local allow_take = function(pos, listname, index, stack, player) local name = player:get_player_name() @@ -357,7 +360,7 @@ minetest.register_node("mcl_brewing:stand_000", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, container=4, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 0, not_in_craft_guide = 0}, + groups = {pickaxey=1, material_stone=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", @@ -406,9 +409,9 @@ minetest.register_node("mcl_brewing:stand_000", { } }, sounds = mcl_sounds.node_sound_glass_defaults(), - _mcl_blast_resistance = 0, + _mcl_blast_resistance = 1, _mcl_hardness = 1, - + on_blast = after_blast, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -442,7 +445,7 @@ minetest.register_node("mcl_brewing:stand_100", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, container=4, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, material_stone=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 = "mcl_brewing:stand", paramtype = "light", @@ -491,9 +494,9 @@ minetest.register_node("mcl_brewing:stand_100", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 0, + _mcl_blast_resistance = 1, _mcl_hardness = 1, - + on_blast = after_blast, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -526,7 +529,7 @@ minetest.register_node("mcl_brewing:stand_010", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, container=4, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, material_stone=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 = "mcl_brewing:stand", paramtype = "light", @@ -575,9 +578,9 @@ minetest.register_node("mcl_brewing:stand_010", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 0, + _mcl_blast_resistance = 1, _mcl_hardness = 1, - + on_blast = after_blast, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -610,7 +613,7 @@ minetest.register_node("mcl_brewing:stand_001", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, container=4, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, material_stone=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 = "mcl_brewing:stand", paramtype = "light", @@ -659,9 +662,9 @@ minetest.register_node("mcl_brewing:stand_001", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 0, + _mcl_blast_resistance = 1, _mcl_hardness = 1, - + on_blast = after_blast, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -694,7 +697,7 @@ minetest.register_node("mcl_brewing:stand_110", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, container=4, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, material_stone=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 = "mcl_brewing:stand", paramtype = "light", @@ -743,9 +746,9 @@ minetest.register_node("mcl_brewing:stand_110", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 0, + _mcl_blast_resistance = 1, _mcl_hardness = 1, - + on_blast = after_blast, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -778,7 +781,7 @@ minetest.register_node("mcl_brewing:stand_101", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, container=4, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, material_stone=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 = "mcl_brewing:stand", paramtype = "light", @@ -827,9 +830,9 @@ minetest.register_node("mcl_brewing:stand_101", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 0, + _mcl_blast_resistance = 1, _mcl_hardness = 1, - + on_blast = after_blast, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -862,7 +865,7 @@ minetest.register_node("mcl_brewing:stand_011", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, container=4, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, material_stone=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 = "mcl_brewing:stand", paramtype = "light", @@ -911,9 +914,9 @@ minetest.register_node("mcl_brewing:stand_011", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 0, + _mcl_blast_resistance = 1, _mcl_hardness = 1, - + on_blast = after_blast, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -946,7 +949,7 @@ minetest.register_node("mcl_brewing:stand_111", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, container=4, falling_node=1, crush_after_fall=1, deco_block=1, brewing_stand=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, material_stone=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 = "mcl_brewing:stand", paramtype = "light", @@ -995,9 +998,9 @@ minetest.register_node("mcl_brewing:stand_111", { } }, sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 0, + _mcl_blast_resistance = 1, _mcl_hardness = 1, - + on_blast = after_blast, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, From f969bef0ea8acefe220cf7e7275a4d2093f398a8 Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 22 Jun 2020 15:52:20 -0400 Subject: [PATCH 62/63] Swap on_blast to on_destruct --- mods/ITEMS/mcl_brewing/init.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index e412990ac..d56c91a1f 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -411,7 +411,7 @@ minetest.register_node("mcl_brewing:stand_000", { sounds = mcl_sounds.node_sound_glass_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_blast = after_blast, + on_destruct = after_dig, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -496,7 +496,7 @@ minetest.register_node("mcl_brewing:stand_100", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_blast = after_blast, + on_destruct = after_dig, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -580,7 +580,7 @@ minetest.register_node("mcl_brewing:stand_010", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_blast = after_blast, + on_destruct = after_dig, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -664,7 +664,7 @@ minetest.register_node("mcl_brewing:stand_001", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_blast = after_blast, + on_destruct = after_dig, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -748,7 +748,7 @@ minetest.register_node("mcl_brewing:stand_110", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_blast = after_blast, + on_destruct = after_dig, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -832,7 +832,7 @@ minetest.register_node("mcl_brewing:stand_101", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_blast = after_blast, + on_destruct = after_dig, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -916,7 +916,7 @@ minetest.register_node("mcl_brewing:stand_011", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_blast = after_blast, + on_destruct = after_dig, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -1000,7 +1000,7 @@ minetest.register_node("mcl_brewing:stand_111", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_blast = after_blast, + on_destruct = after_dig, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, From d55be9fa028bb4a2d6c5255eafa763a4e0c0090b Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 22 Jun 2020 15:56:43 -0400 Subject: [PATCH 63/63] Fix on_destruct to actually drop items. --- mods/ITEMS/mcl_brewing/init.lua | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index d56c91a1f..f8d001a21 100755 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -296,6 +296,7 @@ local tiles = {"mcl_brewing_top.png", --top "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 @@ -305,6 +306,7 @@ local allow_put = function(pos, listname, index, stack, player) 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() @@ -320,16 +322,18 @@ local on_put = function(pos, listname, index, stack, player) 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) meta:from_table(oldmetadata) drop_brewing_stand_items(pos, meta) end -local after_blast = function(pos) + +local on_destruct = function(pos) local meta = minetest.get_meta(pos) drop_brewing_stand_items(pos, meta) - minetest.remove_node(pos) end + local allow_take = function(pos, listname, index, stack, player) local name = player:get_player_name() if minetest.is_protected(pos, name) then @@ -339,6 +343,7 @@ local allow_take = function(pos, listname, index, stack, player) return stack:get_count() end end + local on_take = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() @@ -411,7 +416,7 @@ minetest.register_node("mcl_brewing:stand_000", { sounds = mcl_sounds.node_sound_glass_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_destruct = after_dig, + on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -496,7 +501,7 @@ minetest.register_node("mcl_brewing:stand_100", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_destruct = after_dig, + on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -580,7 +585,7 @@ minetest.register_node("mcl_brewing:stand_010", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_destruct = after_dig, + on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -664,7 +669,7 @@ minetest.register_node("mcl_brewing:stand_001", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_destruct = after_dig, + on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -748,7 +753,7 @@ minetest.register_node("mcl_brewing:stand_110", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_destruct = after_dig, + on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -832,7 +837,7 @@ minetest.register_node("mcl_brewing:stand_101", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_destruct = after_dig, + on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -916,7 +921,7 @@ minetest.register_node("mcl_brewing:stand_011", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_destruct = after_dig, + on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, @@ -1000,7 +1005,7 @@ minetest.register_node("mcl_brewing:stand_111", { sounds = mcl_sounds.node_sound_metal_defaults(), _mcl_blast_resistance = 1, _mcl_hardness = 1, - on_destruct = after_dig, + on_destruct = on_destruct, after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put,