commit 0c924c9d7831d0f9211d5119311777b74ba727bc Author: OldCoder Date: Sun Sep 4 22:00:49 2022 -0700 Imported from trollstream "ContentDB" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..aa2e3fe --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2022 Furious_mat + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..4025cd1 --- /dev/null +++ b/depends.txt @@ -0,0 +1,4 @@ +mobs_mc +mcl_core +mcl_mapgen_core +mcl_tools diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..f7aece7 --- /dev/null +++ b/init.lua @@ -0,0 +1,1304 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +--################### +--################### DREAM +--################### + +local drops_common = { + {name = "mcl_core:diamond", + chance = 1, + min = 1, + max = 3, + looting = "common",}, +} + +local drops_dream = table.copy(drops_common) +table.insert(drops_dream, { + name = "mcl_dream:dream_channel_block", + chance = 15, + min = 1, + max = 1, +}) + +local dream = { + description = S("Dream"), + type = "monster", + spawn_class = "hostile", + hp_min = 20, + hp_max = 20, + xp_min = 5, + xp_max = 5, + breath_max = -1, + armor = {undead = 90, fleshy = 90}, + collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.69, 0.7}, + visual = "mesh", + mesh = "mcl_dream_dream.b3d", + textures = { + { + "mcl_dream_dream.png", + } + }, + visual_size = {x=1, y=1}, + makes_footstep_sound = true, + walk_velocity = 15, + run_velocity = 15, + damage = 10, + reach = 2, + fear_height = 4, + pathfinding = 1, + jump = true, + jump_height = 4, + drops = drops_dream, + animation = { + speed_normal = 25, speed_run = 50, + stand_start = 40, stand_end = 80, + walk_start = 0, walk_end = 40, + run_start = 0, run_end = 40, + }, + view_range = 16, + attack_type = "dogfight", + harmed_by_heal = true, +} + +mcl_mobs:register_mob("mcl_dream:dream", dream) + +-- Spawning + +mcl_mobs:spawn_specific( +"mcl_dream:dream", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +3, +mcl_vars.mg_overworld_min, +mcl_vars.mg_overworld_max) + +-- spawn eggs +mcl_mobs:register_egg("mcl_dream:dream", S("Dream"), "", 0) + +minetest.register_craft({ + output = "mcl_dream:pick", + recipe = { + {"mcl_dream:dream_ingot", "mcl_dream:dream_ingot", "mcl_dream:dream_ingot"}, + {"", "mcl_core:stick", ""}, + {"", "mcl_core:stick", ""}, + } +}) + +minetest.register_craft({ + output = "mcl_dream:sword", + recipe = { + {"", "mcl_dream:dream_ingot", ""}, + {"", "mcl_dream:dream_ingot", ""}, + {"", "mcl_core:stick", ""}, + } +}) + +-- Registering tools +minetest.register_tool("mcl_dream:pick", { + description = S("Dream Pickaxe"), + _doc_items_longdesc = pickaxe_longdesc, + inventory_image = "mcl_dream_dream_pick.png", + wield_scale = wield_scale, + groups = { tool=1, pickaxe=1, dig_speed_class=8, enchantability=10 }, + tool_capabilities = { + -- 1/1.2 + full_punch_interval = 0.83333333, + max_drop_level=5, + damage_groups = {fleshy=6}, + punch_attack_uses = 898, + }, + sound = { breaks = "default_tool_breaks" }, + _repair_material = "mcl_dream:dream_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + pickaxey = { speed = 8, level = 5, uses = 3000 } + }, + _mcl_upgradable = true, + _mcl_upgrade_item = "mcl_tools:pick_netherite" +}) + +minetest.register_tool("mcl_dream:sword", { + description = S("Dream Sword"), + _doc_items_longdesc = sword_longdesc, + inventory_image = "mcl_dream_dream_sword.png", + wield_scale = wield_scale, + groups = { weapon=1, sword=1, dig_speed_class=6, enchantability=10 }, + tool_capabilities = { + full_punch_interval = 0.625, + max_drop_level=5, + damage_groups = {fleshy=15}, + punch_attack_uses = 1796, + }, + sound = { breaks = "default_tool_breaks" }, + _repair_material = "mcl_dream:dream_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + swordy = { speed = 8, level = 5, uses = 1796 }, + swordy_cobweb = { speed = 8, level = 5, uses = 3000 } + }, + _mcl_upgradable = true, + _mcl_upgrade_item = "mcl_tools:sword_netherite" +}) + +minetest.register_craftitem("mcl_dream:dream_ingot",{ + description = S("Dream Ingot"), + _doc_items_longdesc = S("Dream Ingot"), + inventory_image = "mcl_dream_dream_ingot.png", + stack_max = 64, + groups = { craftitem = 1 }, +}) + +minetest.register_craftitem("mcl_dream:dream_totem",{ + description = S("Dream Totem"), + _doc_items_longdesc = S("Dream Totem"), + inventory_image = "mcl_dream_dream_totem.png", + stack_max = 64, + groups = { craftitem = 1 }, +}) + +minetest.register_craftitem("mcl_dream:dream_totem_2",{ + description = S("Dream Totem"), + _doc_items_longdesc = S("Dream Totem"), + inventory_image = "mcl_dream_dream_totem_2.png", + stack_max = 64, + groups = { craftitem = 1 }, +}) + +minetest.register_craftitem("mcl_dream:dream_totem_3",{ + description = S("Dream Totem"), + _doc_items_longdesc = S("Dream Totem"), + inventory_image = "mcl_dream_dream_totem_3.png", + stack_max = 64, + groups = { craftitem = 1 }, +}) + +minetest.register_craftitem("mcl_dream:dream_totem_4",{ + description = S("Dream Totem"), + _doc_items_longdesc = S("Dream Totem"), + inventory_image = "mcl_dream_dream_totem_4.png", + stack_max = 64, + groups = { craftitem = 1 }, +}) + +local S = minetest.get_translator(minetest.get_current_modname()) + +local hud_totem = {} + +minetest.register_on_leaveplayer(function(player) + hud_totem[player] = nil +end) + +minetest.register_craftitem("mcl_dream:technoblade_totem", { + description = S("Technoblade Totem (RIP Techoblade)"), + _tt_help = minetest.colorize(mcl_colors.GREEN, S("Protects you from death while wielding it")), + _doc_items_longdesc = S("A totem of undying is a rare artifact which may safe you from certain death."), + _doc_items_usagehelp = S("The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however."), + inventory_image = "mcl_dream_technoblade_totem.png", + wield_image = "mcl_dream_technoblade_totem.png", + stack_max = 1, + groups = {combat_item = 1, offhand_item = 1}, +}) +minetest.register_alias("mobs_mc:technoblade_totem", "mcl_dream:technoblade_totem") + +local particle_colors = {"98BF22", "C49E09", "337D0B", "B0B021", "1E9200"} -- TODO: real MC colors + +-- Save the player from death when holding totem of undying in hand +mcl_damage.register_modifier(function(obj, damage, reason) + if obj:is_player() and not reason.bypasses_totem then + local hp = obj:get_hp() + if hp - damage <= 0 then + local wield = obj:get_wielded_item() + local in_offhand = false + if not (wield:get_name() == "mcl_dream:technoblade_totem") then + local inv = obj:get_inventory() + if inv then + wield = obj:get_inventory():get_stack("offhand", 1) + in_offhand = true + end + end + if wield:get_name() == "mcl_dream:technoblade_totem" then + local ppos = obj:get_pos() + local pnname = minetest.get_node(ppos).name + + if obj:get_breath() < 11 then + obj:set_breath(10) + end + + if not minetest.is_creative_enabled(obj:get_player_name()) then + wield:take_item() + if in_offhand then + obj:get_inventory():set_stack("offhand", 1, wield) + mcl_inventory.update_inventory_formspec(obj) + else + obj:set_wielded_item(wield) + end + end + awards.unlock(obj:get_player_name(), "mcl:postMortal") + + -- Effects + minetest.sound_play({name = "mcl_totems_totem", gain = 1}, {pos=ppos, max_hear_distance = 16}, true) + + for i = 1, 4 do + for c = 1, #particle_colors do + minetest.add_particlespawner({ + amount = math.floor(100 / (4 * #particle_colors)), + time = 1, + minpos = vector.offset(ppos, 0, -1, 0), + maxpos = vector.offset(ppos, 0, 1, 0), + minvel = vector.new(-1.5, 0, -1.5), + maxvel = vector.new(1.5, 1.5, 1.5), + minacc = vector.new(0, -0.1, 0), + maxacc = vector.new(0, -1, 0), + minexptime = 1, + maxexptime = 3, + minsize = 1, + maxsize = 2, + collisiondetection = true, + collision_removal = true, + object_collision = false, + vertical = false, + texture = "mcl_particles_totem" .. i .. ".png^[colorize:#" .. particle_colors[c], + glow = 10, + }) + end + end + + -- Big totem overlay + if not hud_totem[obj] then + hud_totem[obj] = obj:hud_add({ + hud_elem_type = "image", + text = "mcl_dream_technoblade_totem.png", + position = {x = 0.5, y = 1}, + scale = {x = 17, y = 17}, + offset = {x = 0, y = -178}, + z_index = 100, + }) + minetest.after(3, function() + if obj:is_player() then + obj:hud_remove(hud_totem[obj]) + hud_totem[obj] = nil + end + end) + end + + -- Set HP to exactly 1 + return hp - 1 + end + end + end +end, 1000) + +minetest.register_node("mcl_dream:dream_ore", { + description = S("Dream Ore"), + _doc_items_longdesc = S("Ore Dream Block"), + tiles = {"mcl_dream_dream_ore.png"}, + is_ground_content = false, + stack_max = 64, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {pickaxey=1, building_block = 1, xp=1}, + drop = "mcl_dream:dream_ingot", + on_rotate = on_rotate, + _mcl_silk_touch_drop = true, + _mcl_blast_resistance = 3, + _mcl_hardness = 3, + _mcl_fortune_drop = mcl_core.fortune_drop_ore, +}) + +minetest.register_node("mcl_dream:dream_channel_block", { + description = S("Dream Channel Block"), + _doc_items_longdesc = S("Obtain 3 of this block and spawn The Dream Error."), + tiles = {"mcl_dream_dream_channel_block.png"}, + is_ground_content = false, + stack_max = 64, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {pickaxey=1, building_block = 1, xp=1}, + on_rotate = on_rotate, + _mcl_blast_resistance = 3, + _mcl_hardness = 3, +}) + +minetest.register_node("mcl_dream:dream_block", { + description = S("Dream Block"), + _doc_items_longdesc = S("Obtain 4 of this block and spawn The Dream Error."), + tiles = {"mcl_dream_dream_block.png"}, + is_ground_content = false, + stack_max = 64, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + groups = {pickaxey=1, building_block = 1, xp=1}, + on_rotate = on_rotate, + _mcl_blast_resistance = 3, + _mcl_hardness = 3, +}) + + -- + -- Dream Ore Mapgen + -- + +minetest.register_ore({ + ore_type = "blob", + ore = "mcl_dream:dream_ore", + wherein = { "mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite"}, + clust_scarcity = 10*10*10, + clust_num_ores = 58, + clust_size = 7, + y_min = layer_min, + y_max = layer_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + } +}) + +minetest.register_craftitem("mcl_dream:apple_dream_enchanted", { + description = S("Enchanted Dream Apple"), + _doc_items_longdesc = S("Dream apples are precious food items which can be eaten."), + wield_image = "mcl_dream_apple_dream_enchanted.png", + inventory_image = "mcl_dream_apple_dream_enchanted.png", + stack_max = 64, + on_place = minetest.item_eat(30), + on_secondary_use = minetest.item_eat(30), + groups = { food = 2, eatable = 1, can_eat_when_full = 1 }, + _mcl_saturation = 30, +}) + +minetest.register_craft({ + output = "mcl_dream:dream_block 4", + recipe = { + {"mcl_dream:dream_totem", "mcl_dream:dream_totem_2"}, + {"mcl_dream:dream_totem_3", "mcl_dream:dream_totem_4"}, + } +}) + +minetest.register_craft({ + output = "mcl_dream:apple_dream_enchanted", + recipe = { + {"mcl_dream:dream_ingot", "mcl_dream:dream_ingot", "mcl_dream:dream_ingot"}, + {"mcl_dream:dream_ingot", "mcl_core:apple", "mcl_dream:dream_ingot"}, + {"mcl_dream:dream_ingot", "mcl_dream:dream_ingot", "mcl_dream:dream_ingot"}, + } +}) + +--################### +--################### The Dream Error +--################### + +local drops_common = { + {name = "mcl_nether:netheriteblock", + chance = 1, + min = 1, + max = 1, + looting = "common",}, + {name = "mcl_dream:technoblade_totem", + chance = 1, + min = 1, + max = 1, + looting = "common",}, +} + +local dream_error = { + description = S("Dream_error"), + type = "monster", + spawn_class = "hostile", + hp_min = 500, + hp_max = 500, + xp_min = 50, + xp_max = 50, + breath_max = -1, + armor = {undead = 90, fleshy = 90}, + collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.69, 0.7}, + visual = "mesh", + mesh = "mobs_mc_zombie.b3d", + textures = { + { + "mcl_dream_dream_error.png", + } + }, + visual_size = {x=3, y=3}, + makes_footstep_sound = true, + walk_velocity = 8, + run_velocity = 8, + damage = 30, + reach = 2, + fear_height = 4, + pathfinding = 1, + jump = true, + do_custom = function(self) + if self.health < (self.hp_max / 2) then + self.base_texture = "mcl_dream_dream_error.png" + self.fly = false + self.object:set_properties({textures={self.base_texture}}) + self.armor = {undead = 80, fleshy = 80} + end + mcl_bossbars.update_boss(self.object, "The Dream Error", "green") + end, + jump_height = 4, + drops = drops_common, + animation = { + speed_normal = 25, speed_run = 50, + stand_start = 40, stand_end = 80, + walk_start = 0, walk_end = 40, + run_start = 0, run_end = 40, + }, + view_range = 16, + attack_type = "dogfight", + harmed_by_heal = true, +} + +mcl_mobs:register_mob("mcl_dream:dream_error", dream_error) + +-- spawn eggs +mcl_mobs:register_egg("mcl_dream:dream_error", S("The Dream Error"), "mcl_dream_dream_error.png", 0) + +minetest.register_craft({ + output = "mcl_dream:dream_error", + recipe = { + {"mcl_dream:dream_channel_block", "mcl_dream:dream_channel_block", "mcl_dream:dream_channel_block"}, + {"mcl_dream:dream_block", "mcl_dream:dream_block", "mcl_dream:dream_block"}, + {"", "mcl_dream:dream_block", ""}, + } +}) + +local mod_target = minetest.get_modpath("mcl_target") + +--################### +--################### DREAM BLAZE +--################### + + +mcl_mobs:register_mob("mcl_dream:dream_blaze", { + description = S("Dream Blaze"), + type = "monster", + spawn_class = "hostile", + hp_min = 20, + hp_max = 20, + xp_min = 10, + xp_max = 10, + collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.79, 0.3}, + rotate = -180, + visual = "mesh", + mesh = "mobs_mc_blaze.b3d", + textures = { + {"mcl_dream_dream_blaze.png"}, + }, + armor = { fleshy = 100, snowball_vulnerable = 100, water_vulnerable = 100 }, + visual_size = {x=3, y=3}, + sounds = { + random = "mobs_mc_blaze_breath", + death = "mobs_mc_blaze_died", + damage = "mobs_mc_blaze_hurt", + distance = 16, + }, + walk_velocity = .8, + run_velocity = 1.6, + damage = 6, + reach = 2, + pathfinding = 1, + drops = { + {name = "mcl_dream:apple_dream_enchanted", + chance = 1, + min = 0, + max = 1, + looting = "common",}, + }, + animation = { + stand_speed = 25, + stand_start = 0, + stand_end = 100, + walk_speed = 25, + walk_start = 0, + walk_end = 100, + run_speed = 50, + run_start = 0, + run_end = 100, + }, + lava_damage = 0, + fire_damage = 0, + fall_damage = 0, + fall_speed = -2.25, + light_damage = 0, + view_range = 16, + attack_type = "dogshoot", + arrow = "mcl_dream:blaze_fireball", + shoot_interval = 3.5, + shoot_offset = 1.0, + passive = false, + jump = true, + jump_height = 4, + fly = true, + makes_footstep_sound = false, + fear_height = 0, + glow = 14, + fire_resistant = true, + do_custom = function(self) + if self.state == "attack" and self.attack:get_pos() and vector.distance(self.object:get_pos(), self.attack:get_pos()) < 1.2 then + mcl_burning.set_on_fire(self.attack, 5) + end + local pos = self.object:get_pos() + minetest.add_particle({ + pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, + velocity = {x=0, y=math.random(1,1), z=0}, + expirationtime = math.random(), + size = math.random(1, 4), + collisiondetection = true, + vertical = false, + texture = "mcl_particles_smoke_anim.png^[colorize:#2c2c2c:255", + animation = { + type = "vertical_frames", + aspect_w = 8, + aspect_h = 8, + length = 2.05, + }, + }) + minetest.add_particle({ + pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, + velocity = {x=0, y=math.random(1,1), z=0}, + expirationtime = math.random(), + size = math.random(1, 4), + collisiondetection = true, + vertical = false, + texture = "mcl_particles_smoke_anim.png^[colorize:#424242:255", + animation = { + type = "vertical_frames", + aspect_w = 8, + aspect_h = 8, + length = 2.05, + }, + }) + minetest.add_particle({ + pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, + velocity = {x=0, y=math.random(1,1), z=0}, + expirationtime = math.random(), + size = math.random(1, 4), + collisiondetection = true, + vertical = false, + texture = "mcl_particles_smoke_anim.png^[colorize:#0f0f0f:255", + animation = { + type = "vertical_frames", + aspect_w = 8, + aspect_h = 8, + length = 2.05, + }, + }) + end, +}) + +-- (Dream) Blaze fireball +mcl_mobs:register_arrow("mcl_dream:blaze_fireball", { + visual = "sprite", + visual_size = {x = 0.3, y = 0.3}, + textures = {"mcl_fire_fire_charge.png"}, + velocity = 15, + _is_fireball = true, + + -- Direct hit, no fire... just plenty of pain + hit_player = function(self, player) + mcl_burning.set_on_fire(player, 5) + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 5}, + }, nil) + end, + + hit_mob = function(self, mob) + mcl_burning.set_on_fire(mob, 5) + mob:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 5}, + }, nil) + end, + + hit_object = function(self, object) + local lua = object:get_luaentity() + if lua then + if lua.name == "mcl_minecarts:tnt_minecart" then + lua:on_activate_by_rail(2) + end + end + end, + + -- Node hit, make fire + hit_node = function(self, pos, node) + if node == "air" then + minetest.set_node(pos, {name = "mcl_fire:fire"}) + else + if self._shot_from_dispenser and mod_target and node == "mcl_target:target_off" then + mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks + end + local v = vector.normalize(self.object:get_velocity()) + local crashpos = vector.subtract(pos, v) + local crashnode = minetest.get_node(crashpos) + local cndef = minetest.registered_nodes[crashnode.name] + -- Set fire if node is air, or a replacable flammable node (e.g. a plant) + if crashnode.name == "air" or + (cndef and cndef.buildable_to and minetest.get_item_group(crashnode.name, "flammable") >= 1) then + minetest.set_node(crashpos, {name = "mcl_fire:fire"}) + end + end + end +}) + +-- spawn eggs +mcl_mobs:register_egg("mcl_dream:dream_blaze", S("Dream Blaze"), "mobs_mc_spawn_icon_blaze.png", 0) + +--################### +--################### DREAM CREEPER +--################### + +mcl_mobs:register_mob("mcl_dream:dream_creeper", { + type = "monster", + spawn_class = "hostile", + hp_min = 20, + hp_max = 20, + xp_min = 5, + xp_max = 5, + collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3}, + pathfinding = 1, + visual = "mesh", + mesh = "mobs_mc_creeper.b3d", + textures = { + {"mcl_dream_dream_creeper.png", + "mobs_mc_empty.png"}, + }, + visual_size = {x=3, y=3}, + sounds = { + attack = "tnt_ignite", + death = "mobs_mc_creeper_death", + damage = "mobs_mc_creeper_hurt", + fuse = "tnt_ignite", + explode = "tnt_explode", + distance = 16, + }, + makes_footstep_sound = true, + walk_velocity = 1.05, + run_velocity = 2.1, + runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, + attack_type = "explode", + + --hssssssssssss + + explosion_strength = 3, + explosion_radius = 3.5, + explosion_damage_radius = 3.5, + explosiontimer_reset_radius = 6, + reach = 3, + explosion_timer = 1.5, + allow_fuse_reset = true, + stop_to_explode = true, + + -- Force-ignite creeper with flint and steel and explode after 1.5 seconds. + -- TODO: Make creeper flash after doing this as well. + -- TODO: Test and debug this code. + on_rightclick = function(self, clicker) + if self._forced_explosion_countdown_timer ~= nil then + return + end + local item = clicker:get_wielded_item() + if item:get_name() == "mcl_fire:flint_and_steel" then + if not minetest.is_creative_enabled(clicker:get_player_name()) then + -- Wear tool + local wdef = item:get_definition() + item:add_wear(1000) + -- Tool break sound + if item:get_count() == 0 and wdef.sound and wdef.sound.breaks then + minetest.sound_play(wdef.sound.breaks, {pos = clicker:get_pos(), gain = 0.5}, true) + end + clicker:set_wielded_item(item) + end + self._forced_explosion_countdown_timer = self.explosion_timer + minetest.sound_play(self.sounds.attack, {pos = self.object:get_pos(), gain = 1, max_hear_distance = 16}, true) + end + end, + do_custom = function(self, dtime) + if self._forced_explosion_countdown_timer ~= nil then + self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime + if self._forced_explosion_countdown_timer <= 0 then + mcl_mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) + end + end + end, + on_die = function(self, pos, cmi_cause) + -- Drop a random music disc when killed by skeleton or stray + if cmi_cause and cmi_cause.type == "punch" then + local luaentity = cmi_cause.puncher and cmi_cause.puncher:get_luaentity() + if luaentity and luaentity.name:find("arrow") then + local shooter_luaentity = luaentity._shooter and luaentity._shooter:get_luaentity() + if shooter_luaentity and (shooter_luaentity.name == "mobs_mc:skeleton" or shooter_luaentity.name == "mobs_mc:stray") then + minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, "mcl_jukebox:record_" .. math.random(9)) + end + end + end + end, + maxdrops = 2, + drops = { + {name = "mcl_mobitems:gunpowder", + chance = 1, + min = 0, + max = 2, + looting = "common",}, + }, + animation = { + speed_normal = 24, + speed_run = 48, + stand_start = 0, + stand_end = 23, + walk_start = 24, + walk_end = 49, + run_start = 24, + run_end = 49, + hurt_start = 110, + hurt_end = 139, + death_start = 140, + death_end = 189, + look_start = 50, + look_end = 108, + }, + floats = 1, + fear_height = 4, + view_range = 16, +}) + +-- spawn eggs +mcl_mobs:register_egg("mcl_dream:dream_creeper", S("Dream Creeper"), "mobs_mc_spawn_icon_creeper.png", 0) + +--################### +--################### DREAM SPIDER +--################### + +local dream_spider = { + description = S("Dream Spider"), + type = "monster", + spawn_class = "hostile", + passive = false, + docile_by_day = true, + attack_type = "dogfight", + pathfinding = 1, + damage = 2, + reach = 2, + hp_min = 16, + hp_max = 16, + xp_min = 5, + xp_max = 5, + armor = {fleshy = 100, arthropod = 100}, + collisionbox = {-0.7, -0.01, -0.7, 0.7, 0.89, 0.7}, + visual = "mesh", + mesh = "mobs_mc_spider.b3d", + textures = { + {"mcl_dream_dream_spider.png"}, + }, + visual_size = {x=3, y=3}, + makes_footstep_sound = false, + sounds = { + random = "mobs_mc_spider_random", + attack = "mobs_mc_spider_attack", + damage = "mobs_mc_spider_hurt", + death = "mobs_mc_spider_death", + -- TODO: sounds: walk + distance = 16, + }, + walk_velocity = 1.3, + run_velocity = 2.8, + jump = true, + jump_height = 4, + view_range = 16, + floats = 1, + drops = { + {name = "mcl_mobitems:string", chance = 1, min = 0, max = 2, looting = "common"}, + {name = "mcl_mobitems:spider_eye", chance = 3, min = 1, max = 1, looting = "common", looting_chance_function = function(lvl) + return 1 - 2 / (lvl + 3) + end}, + }, + specific_attack = { "player", "mobs_mc:iron_golem" }, + fear_height = 4, + animation = { + stand_speed = 10, + walk_speed = 25, + run_speed = 50, + stand_start = 20, + stand_end = 40, + walk_start = 0, + walk_end = 20, + run_start = 0, + run_end = 20, + }, +} +mcl_mobs:register_mob("mcl_dream:dream_spider", dream_spider) + +-- spawn eggs +mcl_mobs:register_egg("mcl_dream:dream_spider", S("Dream Spider"), "mobs_mc_spawn_icon_spider.png", 0) + +--################### +--################### DREAM GHAST +--################### + + +mcl_mobs:register_mob("mcl_dream:dream_ghast", { + description = S("Dream Ghast"), + type = "monster", + spawn_class = "hostile", + pathfinding = 1, + group_attack = true, + hp_min = 10, + hp_max = 10, + xp_min = 5, + xp_max = 5, + collisionbox = {-2, 5, -2, 2, 9, 2}, + visual = "mesh", + mesh = "mobs_mc_ghast.b3d", + textures = { + {"mcl_dream_dream_ghast.png"}, + }, + visual_size = {x=12, y=12}, + sounds = { + shoot_attack = "mobs_fireball", + death = "mobs_mc_zombie_death", + attack = "mobs_fireball", + random = "mobs_eerie", + distance = 16, + -- TODO: damage + -- TODO: better death + }, + walk_velocity = 1.6, + run_velocity = 3.2, + drops = { + {name = "mcl_mobitems:gunpowder", chance = 1, min = 0, max = 2, looting = "common"}, + {name = "mcl_mobitems:ghast_tear", chance = 10/6, min = 0, max = 1, looting = "common", looting_ignore_chance = true}, + }, + animation = { + stand_speed = 50, walk_speed = 50, run_speed = 50, + stand_start = 0, stand_end = 40, + walk_start = 0, walk_end = 40, + run_start = 0, run_end = 40, + }, + fall_damage = 0, + view_range = 100, + attack_type = "dogshoot", + arrow = "mcl_dream:fireball", + shoot_interval = 3.5, + shoot_offset = -5, + dogshoot_switch = 1, + dogshoot_count_max =1, + passive = false, + jump = true, + jump_height = 4, + floats=1, + fly = true, + makes_footstep_sound = false, + instant_death = true, + fire_resistant = true, + do_custom = function(self) + if self.firing == true then + self.base_texture = {"mcl_dream_dream_ghast_firing.png"} + self.object:set_properties({textures=self.base_texture}) + else + self.base_texture = {"mcl_dream_dream_ghast.png"} + self.object:set_properties({textures=self.base_texture}) + end + end, +}) + +-- fireball (projectile) +mcl_mobs:register_arrow("mcl_dream:fireball", { + visual = "sprite", + visual_size = {x = 1, y = 1}, + textures = {"mcl_fire_fire_charge.png"}, + velocity = 15, + collisionbox = {-.5, -.5, -.5, .5, .5, .5}, + _is_fireball = true, + + hit_player = function(self, player) + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 6}, + }, nil) + local p = self.object:get_pos() + if p then + mcl_mobs:boom(self, p, 1, true) + else + mcl_mobs:boom(self, player:get_pos(), 1, true) + end + end, + + hit_mob = function(self, mob) + mob:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 6}, + }, nil) + mcl_mobs:boom(self, self.object:get_pos(), 1, true) + end, + + hit_node = function(self, pos, node) + mcl_mobs:boom(self, pos, 1, true) + end +}) + + + + +-- spawn eggs +mcl_mobs:register_egg("mcl_dream:dream_ghast", S("Dream Ghast"), "mobs_mc_spawn_icon_ghast.png", 0) + +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +mcl_structures.register_structure("giant_dream",{ + place_on = {"group:grass_block","group:dirt","mcl_core:dirt_with_grass"}, + fill_ratio = 0.01, + flags = "place_center_x, place_center_z", + solid_ground = true, + make_foundation = true, + chunk_probability = 500, + y_max = mcl_vars.mg_overworld_max, + y_min = 1, + sidelen = 80, + filenames = { + modpath.."/schematics/mcl_dream_dream.mts", + }, + after_place = function(p,def,pr) + local spawnon = {"mcl_amethyst:calcite"} + local p1=vector.offset(p,-def.sidelen,-1,-def.sidelen) + local p2=vector.offset(p,def.sidelen,def.sidelen,def.sidelen) + local sp = minetest.find_nodes_in_area_under_air(p1,p2,spawnon) + if sp and #sp > 0 then + for i=1,5 do + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mcl_dream:dream") + end + end + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mcl_dream:dream_creeper") + end + end + end, + loot = { + ["mcl_chests:chest_small" ] ={{ + stacks_min = 3, + stacks_max = 3, + items = { + { itemstring = "mcl_dream:dream_totem", weight = 10, amount_min = 1, amount_max=1 }, + { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_bows:bow", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_core:diamond", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max=8 }, + + { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_farming:bread", weight = 20, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_dream:dream_ingot", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_core:iron_ingot", weight = 10, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_bows:arrow", weight = 5, amount_min = 1, amount_max = 4 }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_mobs:nametag", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_dream:apple_dream_enchanted", weight = 2, }, + } + }} + } +}) + +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +mcl_structures.register_structure("end_dream_dungeon",{ + place_on = {"mcl_end:end_stone"}, + fill_ratio = 0.01, + flags = "all_floors", + solid_ground = true, + make_foundation = true, + chunk_probability = 300, + y_min = mcl_vars.mg_end_min, + y_max = mcl_vars.mg_end_max, + biomes = {"End"}, + sidelen = 80, + filenames = { + modpath.."/schematics/mcl_dream_end_dream_dungeon.mts", + }, + after_place = function(p,def,pr) + local spawnon = {"mcl_colorblocks:concrete_lime"} + local p1=vector.offset(p,-def.sidelen,-1,-def.sidelen) + local p2=vector.offset(p,def.sidelen,def.sidelen,def.sidelen) + local sp = minetest.find_nodes_in_area_under_air(p1,p2,spawnon) + if sp and #sp > 0 then + for i=1,5 do + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mcl_dream:dream") + end + end + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mcl_dream:dream_ghast") + end + end + end, + loot = { + ["mcl_chests:chest_small" ] ={{ + stacks_min = 3, + stacks_max = 3, + items = { + { itemstring = "mcl_dream:dream_totem_4", weight = 10, amount_min = 1, amount_max=1 }, + { itemstring = "mcl_end:chorus_fruit", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_bows:bow", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_core:diamondblock", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_bows:arrow", weight = 5, amount_min = 1, amount_max = 4 }, + + { itemstring = "mcl_core:goldblock", weight = 15, amount_min = 2, amount_max = 7 }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_end:crystal", weight = 20, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_bells:bell", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_dream:dream_ingot", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_core:ironblock", weight = 10, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_armor:elytra", weight = 5, amount_min = 1, amount_max = 4 }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_totems:totem", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_dream:apple_dream_enchanted", weight = 2, }, + } + }} + } +}) + +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +mcl_structures.register_structure("nether_dream_dungeon",{ + place_on = {"mcl_nether:netherrack","mcl_crimson:crimson_nylium","mcl_crimson:warped_nylium","mcl_blackstone:basalt","mcl_blackstone:soul_soil"}, + fill_ratio = 0.01, + flags = "all_floors", + solid_ground = true, + make_foundation = true, + chunk_probability = 300, + y_min = mcl_vars.mg_lava_nether_max - 1, + y_max = mcl_vars.mg_nether_max - 30, + biomes = {"Nether","SoulsandValley","WarpedForest","CrimsonForest","BasaltDelta"}, + sidelen = 60, + filenames = { + modpath.."/schematics/mcl_dream_nether_dream_dungeon.mts", + }, + after_place = function(p,def,pr) + local spawnon = {"mcl_colorblocks:concrete_lime"} + local p1=vector.offset(p,-def.sidelen,-1,-def.sidelen) + local p2=vector.offset(p,def.sidelen,def.sidelen,def.sidelen) + local sp = minetest.find_nodes_in_area_under_air(p1,p2,spawnon) + if sp and #sp > 0 then + for i=1,5 do + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mcl_dream:dream") + end + end + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mcl_dream:dream_blaze") + end + end + end, + loot = { + ["mcl_chests:chest_small" ] ={{ + stacks_min = 3, + stacks_max = 3, + items = { + { itemstring = "mcl_dream:dream_totem_2", weight = 10, amount_min = 1, amount_max=1 }, + { itemstring = "mcl_potions:fire_resistance", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_core:obsidian", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_core:diamondblock", weight = 10, amount_min = 1, amount_max=8 }, + { itemstring = "mcl_nether:magma", weight = 5, amount_min = 1, amount_max = 4 }, + + { itemstring = "mcl_nether:ancient_debris", weight = 15, amount_min = 2, amount_max = 7 }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_throwing:ender_pearl", weight = 20, amount_min = 1, amount_max = 1 }, + { itemstring = "mcl_bells:bell", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_nether:netherite_scrap", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_core:apple_gold", weight = 10, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_shields:shield", weight = 5, amount_min = 1, amount_max = 4 }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_tnt:tnt", weight = 2, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_dream:apple_dream_enchanted", weight = 2, }, + } + }} + } +}) + +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) + +mcl_structures.register_structure("spider_dream_dungeon",{ + place_on = {"mcl_core:stone","mcl_deepslate:deepslate"}, + fill_ratio = 0.01, + flags = "place_center_x, place_center_z", + solid_ground = true, + make_foundation = true, + chunk_probability = 300, + y_max = -1, + y_min = -60, + sidelen = 30, + filenames = { + modpath.."/schematics/mcl_dream_spider_dream_dungeon.mts", + }, + after_place = function(p,def,pr) + local spawnon = {"mcl_colorblocks:concrete_lime"} + local p1=vector.offset(p,-def.sidelen,-1,-def.sidelen) + local p2=vector.offset(p,def.sidelen,def.sidelen,def.sidelen) + local sp = minetest.find_nodes_in_area_under_air(p1,p2,spawnon) + if sp and #sp > 0 then + for i=1,5 do + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mcl_dream:dream") + end + end + local pos = sp[pr:next(1,#sp)] + if pos then + minetest.add_entity(pos,"mcl_dream:dream_spider") + end + end + end, + loot = { + ["mcl_chests:chest_small" ] ={{ + stacks_min = 1, + stacks_max = 1, + items = { + { itemstring = "mcl_mobs:nametag", weight = 30 }, + { itemstring = "mcl_core:apple_gold", weight = 20 }, + { itemstring = "mcl_books:book", weight = 10, func = function(stack, pr) + mcl_enchanting.enchant_uniform_randomly(stack, {"soul_speed"}, pr) + end }, + { itemstring = "air", weight = 5}, + { itemstring = "mcl_core:pick_iron", weight = 5 }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 1 }, + + { itemstring = "mcl_dream:dream_totem_3", weight = 10 }, + }},{ + stacks_min = 3, + stacks_max = 3, + items = { + { itemstring = "mcl_minecarts:rail", weight = 20, amount_min = 4, amount_max = 8 }, + { itemstring = "mcl_torches:torch", weight = 15, amount_min = 1, amount_max = 16 }, + { itemstring = "mcl_minecarts:activator_rail", weight = 5, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_minecarts:detector_rail", weight = 5, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_minecarts:golden_rail", weight = 5, amount_min = 1, amount_max = 4 }, + }},{ + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_minecarts:minecart", weight = 1 }, + { itemstring = "mcl_dream:apple_dream_enchanted", weight = 2, }, + } + }} + } +}) diff --git a/models/mcl_dream_dream.b3d b/models/mcl_dream_dream.b3d new file mode 100644 index 0000000..f5482f4 Binary files /dev/null and b/models/mcl_dream_dream.b3d differ diff --git a/schematics/mcl_dream_dream.mts b/schematics/mcl_dream_dream.mts new file mode 100644 index 0000000..ca1e04f Binary files /dev/null and b/schematics/mcl_dream_dream.mts differ diff --git a/schematics/mcl_dream_end_dream_dungeon.mts b/schematics/mcl_dream_end_dream_dungeon.mts new file mode 100644 index 0000000..62c8c22 Binary files /dev/null and b/schematics/mcl_dream_end_dream_dungeon.mts differ diff --git a/schematics/mcl_dream_nether_dream_dungeon.mts b/schematics/mcl_dream_nether_dream_dungeon.mts new file mode 100644 index 0000000..558daa1 Binary files /dev/null and b/schematics/mcl_dream_nether_dream_dungeon.mts differ diff --git a/schematics/mcl_dream_spider_dream_dungeon.mts b/schematics/mcl_dream_spider_dream_dungeon.mts new file mode 100644 index 0000000..3469eb5 Binary files /dev/null and b/schematics/mcl_dream_spider_dream_dungeon.mts differ diff --git a/textures/mcl_dream_apple_dream_enchanted.png b/textures/mcl_dream_apple_dream_enchanted.png new file mode 100644 index 0000000..afba258 Binary files /dev/null and b/textures/mcl_dream_apple_dream_enchanted.png differ diff --git a/textures/mcl_dream_dream.png b/textures/mcl_dream_dream.png new file mode 100644 index 0000000..2594d16 Binary files /dev/null and b/textures/mcl_dream_dream.png differ diff --git a/textures/mcl_dream_dream_blaze.png b/textures/mcl_dream_dream_blaze.png new file mode 100644 index 0000000..7c9cf53 Binary files /dev/null and b/textures/mcl_dream_dream_blaze.png differ diff --git a/textures/mcl_dream_dream_block.png b/textures/mcl_dream_dream_block.png new file mode 100644 index 0000000..5be5a5f Binary files /dev/null and b/textures/mcl_dream_dream_block.png differ diff --git a/textures/mcl_dream_dream_channel_block.png b/textures/mcl_dream_dream_channel_block.png new file mode 100644 index 0000000..d8c3100 Binary files /dev/null and b/textures/mcl_dream_dream_channel_block.png differ diff --git a/textures/mcl_dream_dream_creeper.png b/textures/mcl_dream_dream_creeper.png new file mode 100644 index 0000000..289cf9f Binary files /dev/null and b/textures/mcl_dream_dream_creeper.png differ diff --git a/textures/mcl_dream_dream_error.png b/textures/mcl_dream_dream_error.png new file mode 100644 index 0000000..a59b8f6 Binary files /dev/null and b/textures/mcl_dream_dream_error.png differ diff --git a/textures/mcl_dream_dream_ghast.png b/textures/mcl_dream_dream_ghast.png new file mode 100644 index 0000000..dc0fa1c Binary files /dev/null and b/textures/mcl_dream_dream_ghast.png differ diff --git a/textures/mcl_dream_dream_ghast_firing.png b/textures/mcl_dream_dream_ghast_firing.png new file mode 100644 index 0000000..18cd411 Binary files /dev/null and b/textures/mcl_dream_dream_ghast_firing.png differ diff --git a/textures/mcl_dream_dream_ingot.png b/textures/mcl_dream_dream_ingot.png new file mode 100644 index 0000000..d43e9ce Binary files /dev/null and b/textures/mcl_dream_dream_ingot.png differ diff --git a/textures/mcl_dream_dream_ore.png b/textures/mcl_dream_dream_ore.png new file mode 100644 index 0000000..a93fc42 Binary files /dev/null and b/textures/mcl_dream_dream_ore.png differ diff --git a/textures/mcl_dream_dream_pick.png b/textures/mcl_dream_dream_pick.png new file mode 100644 index 0000000..26b8f32 Binary files /dev/null and b/textures/mcl_dream_dream_pick.png differ diff --git a/textures/mcl_dream_dream_spider.png b/textures/mcl_dream_dream_spider.png new file mode 100644 index 0000000..0d37519 Binary files /dev/null and b/textures/mcl_dream_dream_spider.png differ diff --git a/textures/mcl_dream_dream_sword.png b/textures/mcl_dream_dream_sword.png new file mode 100644 index 0000000..834dac7 Binary files /dev/null and b/textures/mcl_dream_dream_sword.png differ diff --git a/textures/mcl_dream_dream_totem.png b/textures/mcl_dream_dream_totem.png new file mode 100644 index 0000000..f4370bd Binary files /dev/null and b/textures/mcl_dream_dream_totem.png differ diff --git a/textures/mcl_dream_dream_totem_2.png b/textures/mcl_dream_dream_totem_2.png new file mode 100644 index 0000000..f152e64 Binary files /dev/null and b/textures/mcl_dream_dream_totem_2.png differ diff --git a/textures/mcl_dream_dream_totem_3.png b/textures/mcl_dream_dream_totem_3.png new file mode 100644 index 0000000..c8d0e87 Binary files /dev/null and b/textures/mcl_dream_dream_totem_3.png differ diff --git a/textures/mcl_dream_dream_totem_4.png b/textures/mcl_dream_dream_totem_4.png new file mode 100644 index 0000000..abb6dc3 Binary files /dev/null and b/textures/mcl_dream_dream_totem_4.png differ diff --git a/textures/mcl_dream_technoblade_totem.png b/textures/mcl_dream_technoblade_totem.png new file mode 100644 index 0000000..178838e Binary files /dev/null and b/textures/mcl_dream_technoblade_totem.png differ