@@ -226,3 +226,85 @@ core.register_craftitem("testitems:wield_image_animation_overlay", {
226226 wield_overlay = animated_overlay ,
227227 color = " #ff0000" ,
228228})
229+
230+ local function animated_image_accelerated (speed )
231+ local image = table .copy (animated_image )
232+ image .animation .length = image .animation .length * speed
233+ return image
234+ end
235+
236+ local function animated_overlay_accelerated (speed )
237+ local image = table .copy (animated_overlay )
238+ image .animation .frame_length = image .animation .frame_length * speed
239+ return image
240+ end
241+
242+ local function update_animation (meta , mode , speed , name )
243+ local msg
244+ local speed_factor = 1 / (speed + 1 )
245+ if mode == 0 then
246+ meta :set_wield_overlay ()
247+ msg = S " Not animated"
248+ elseif mode == 1 then
249+ meta :set_inventory_image (animated_image_accelerated (speed_factor ))
250+ msg = S " Inventory image animated"
251+ elseif mode == 2 then
252+ meta :set_inventory_image ()
253+ meta :set_inventory_overlay (animated_overlay_accelerated (speed_factor ))
254+ msg = S " Inventory overlay animated"
255+ elseif mode == 3 then
256+ meta :set_inventory_overlay ()
257+ meta :set_wield_image (animated_image_accelerated (speed_factor ))
258+ msg = S " Wield image animated"
259+ else
260+ meta :set_wield_image ()
261+ meta :set_wield_overlay (animated_overlay_accelerated (speed_factor ))
262+ msg = S " Wield overlay animated"
263+ end
264+ core .chat_send_player (name , msg .. S " , speed " .. speed )
265+ end
266+
267+ local function toggle_red_string_meta_inventory_image (itemstack )
268+ local meta = itemstack :get_meta ()
269+ local image = meta :get_string (" inventory_image" ) == " " and
270+ " testnodes_anim.png^[invert:rgb^[verticalframe:4:0^[multiply:#ff0000" or " "
271+ local overlay = meta :get_string (" inventory_overlay" ) == " " and
272+ " testitems_animation_overlay.png^[verticalframe:4:0^[multiply:#ff0000" or " "
273+ meta :set_string (" inventory_image" , image )
274+ meta :set_string (" inventory_overlay" , overlay )
275+ meta :set_string (" wield_image" , image )
276+ meta :set_string (" wield_overlay" , overlay )
277+ return itemstack
278+ end
279+
280+ core .register_craftitem (" testitems:inventory_image_animation_meta" , {
281+ description = S (" Animated Meta Test Item" ).. " \n " ..
282+ S (" Left click to cycle through modes" ).. " \n " ..
283+ S (" Hold sneak and left click to change speed" ).. " \n " ..
284+ S (" Right click to toggle red string meta inventory image fields" ),
285+ inventory_image = " testnodes_anim.png^[invert:rgb^[verticalframe:4:0" ,
286+ inventory_overlay = " testitems_animation_overlay.png^[verticalframe:4:0" ,
287+ wield_image = " testnodes_anim.png^[invert:rgb^[verticalframe:4:0" ,
288+ wield_overlay = " testitems_animation_overlay.png^[verticalframe:4:0" ,
289+ on_use = function (itemstack , user , pointed_thing )
290+ if not core .is_player (user ) then
291+ return
292+ end
293+ local name = user :get_player_name ()
294+ local meta = itemstack :get_meta ()
295+ local speed = meta :get_int (" speed" )
296+ local mode = meta :get_int (" mode" )
297+
298+ if user :get_player_control ().sneak then
299+ speed = (speed + 1 ) % 4
300+ meta :set_int (" speed" , speed )
301+ else
302+ mode = (mode + 1 ) % 5
303+ meta :set_int (" mode" , mode )
304+ end
305+ update_animation (meta , mode , speed , name )
306+ return itemstack
307+ end ,
308+ on_place = toggle_red_string_meta_inventory_image ,
309+ on_secondary_use = toggle_red_string_meta_inventory_image ,
310+ })
0 commit comments