From 9c1211983d1589890efe4bbb13973708d41ec981 Mon Sep 17 00:00:00 2001 From: ian1337 Date: Fri, 16 Oct 2026 16:52:20 +0200 Subject: [PATCH] [add] Magic Tourch --- .../9b880295f71a0e6aa23e96d38002ee07e356516d | 3 +- .../glitchlabs/ichori/Block/ModBlocks.java | 14 ++++ .../ichori/Block/custom/MagicTourch.java | 35 +++++++++ .../ovh/glitchlabs/ichori/Item/ModItems.java | 4 ++ .../Item/custom/test_spawn_magic_tourch.java | 27 +++++++ .../ichori/datagen/ModBlockStateProvider.java | 1 + .../ichori/datagen/ModItemModelProvider.java | 1 + .../ichori/event/CustomPartical.java | 21 ++++++ .../ichori/blockstates/magic_tourch.json | 5 ++ .../ichori/models/block/magic_tourch.json | 6 ++ .../ichori/models/item/magic_tourch.json | 3 + .../ichori/quasar/emitters/magic_tourch.json | 72 +++++++++++++++++++ 12 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ovh/glitchlabs/ichori/Block/custom/MagicTourch.java create mode 100644 src/main/java/ovh/glitchlabs/ichori/Item/custom/test_spawn_magic_tourch.java create mode 100644 src/main/java/ovh/glitchlabs/ichori/event/CustomPartical.java create mode 100644 src/main/resources/assets/ichori/blockstates/magic_tourch.json create mode 100644 src/main/resources/assets/ichori/models/block/magic_tourch.json create mode 100644 src/main/resources/assets/ichori/models/item/magic_tourch.json create mode 100644 src/main/resources/assets/ichori/quasar/emitters/magic_tourch.json diff --git a/src/generated/resources/.cache/9b880295f71a0e6aa23e96d38002ee07e356516d b/src/generated/resources/.cache/9b880295f71a0e6aa23e96d38002ee07e356516d index ca59d0b..cb1bcc4 100644 --- a/src/generated/resources/.cache/9b880295f71a0e6aa23e96d38002ee07e356516d +++ b/src/generated/resources/.cache/9b880295f71a0e6aa23e96d38002ee07e356516d @@ -1,2 +1,3 @@ -// 1.21.1 2026-10-16T12:48:59.62422735 Item Models: ichori +// 1.21.1 2026-10-16T15:55:28.827063419 Item Models: ichori be44db6dcd5cd06217ef4e7a8025a21185ac48ac assets/ichori/models/item/test_spawn_light.json +be44db6dcd5cd06217ef4e7a8025a21185ac48ac assets/ichori/models/item/test_spawn_magic_tourch.json diff --git a/src/main/java/ovh/glitchlabs/ichori/Block/ModBlocks.java b/src/main/java/ovh/glitchlabs/ichori/Block/ModBlocks.java index bbea834..c28ed0d 100644 --- a/src/main/java/ovh/glitchlabs/ichori/Block/ModBlocks.java +++ b/src/main/java/ovh/glitchlabs/ichori/Block/ModBlocks.java @@ -3,9 +3,13 @@ package ovh.glitchlabs.ichori.Block; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.PushReaction; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredBlock; import net.neoforged.neoforge.registries.DeferredRegister; +import ovh.glitchlabs.ichori.Block.custom.MagicTourch; import ovh.glitchlabs.ichori.Ichori; import ovh.glitchlabs.ichori.Item.ModItems; @@ -15,6 +19,16 @@ public class ModBlocks { public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Ichori.MODID); + public static final DeferredBlock MAGIC_TOURCH = registerBlock("magic_tourch", + () -> new MagicTourch(BlockBehaviour.Properties.of() + .noCollission() + .noOcclusion() + .instabreak() + .sound(SoundType.WOOD) + .pushReaction(PushReaction.DESTROY))); + + + private static DeferredBlock registerBlock(String name, Supplier block) { DeferredBlock toReturn = BLOCKS.register(name, block); registerBlockItem(name, toReturn); diff --git a/src/main/java/ovh/glitchlabs/ichori/Block/custom/MagicTourch.java b/src/main/java/ovh/glitchlabs/ichori/Block/custom/MagicTourch.java new file mode 100644 index 0000000..7601d6d --- /dev/null +++ b/src/main/java/ovh/glitchlabs/ichori/Block/custom/MagicTourch.java @@ -0,0 +1,35 @@ +package ovh.glitchlabs.ichori.Block.custom; + +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import ovh.glitchlabs.ichori.Ichori; +import ovh.glitchlabs.ichori.event.CustomPartical; + +public class MagicTourch extends Block { + CustomPartical partical = new CustomPartical(); + private static final VoxelShape SHAPE = Block.box(6.0, 0.0, 6.0, 10.0, 16.0, 10.0); + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext ctx) { + return SHAPE; + } + + public MagicTourch(Properties properties) { + super(properties); + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + Vec3 spawnPos = new Vec3(pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5); + partical.spawnParticleOnPosition(spawnPos, ResourceLocation.fromNamespaceAndPath(Ichori.MODID, "magic_tourch")); + } + +} diff --git a/src/main/java/ovh/glitchlabs/ichori/Item/ModItems.java b/src/main/java/ovh/glitchlabs/ichori/Item/ModItems.java index c5b06a9..82c55cd 100644 --- a/src/main/java/ovh/glitchlabs/ichori/Item/ModItems.java +++ b/src/main/java/ovh/glitchlabs/ichori/Item/ModItems.java @@ -6,6 +6,7 @@ import net.neoforged.neoforge.registries.DeferredItem; import net.neoforged.neoforge.registries.DeferredRegister; import ovh.glitchlabs.ichori.Ichori; import ovh.glitchlabs.ichori.Item.custom.test_spawn_light; +import ovh.glitchlabs.ichori.Item.custom.test_spawn_magic_tourch; public class ModItems { public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Ichori.MODID); @@ -13,6 +14,9 @@ public class ModItems { public static final DeferredItem TEST_Spawn_LIGHT = ITEMS.register("test_spawn_light", () -> new test_spawn_light(new Item.Properties())); + public static final DeferredItem TEST_Spawn_MAGIC_TOURCH = ITEMS.register("test_spawn_magic_tourch", + () -> new test_spawn_magic_tourch(new Item.Properties())); + diff --git a/src/main/java/ovh/glitchlabs/ichori/Item/custom/test_spawn_magic_tourch.java b/src/main/java/ovh/glitchlabs/ichori/Item/custom/test_spawn_magic_tourch.java new file mode 100644 index 0000000..cea419c --- /dev/null +++ b/src/main/java/ovh/glitchlabs/ichori/Item/custom/test_spawn_magic_tourch.java @@ -0,0 +1,27 @@ +package ovh.glitchlabs.ichori.Item.custom; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import ovh.glitchlabs.ichori.Ichori; +import ovh.glitchlabs.ichori.event.CustomPartical; + +public class test_spawn_magic_tourch extends Item { + CustomPartical partical = new CustomPartical(); + + public test_spawn_magic_tourch(Properties properties) { + super(properties); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Level level = context.getLevel(); + Vec3 pos = context.getClickLocation(); + partical.spawnParticleOnPosition(pos, ResourceLocation.fromNamespaceAndPath(Ichori.MODID, "magic_tourch")); + + return InteractionResult.SUCCESS; + } +} \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/ichori/datagen/ModBlockStateProvider.java b/src/main/java/ovh/glitchlabs/ichori/datagen/ModBlockStateProvider.java index b3126a9..9fcccfa 100644 --- a/src/main/java/ovh/glitchlabs/ichori/datagen/ModBlockStateProvider.java +++ b/src/main/java/ovh/glitchlabs/ichori/datagen/ModBlockStateProvider.java @@ -4,6 +4,7 @@ import net.minecraft.data.PackOutput; import net.neoforged.neoforge.client.model.generators.BlockStateProvider; import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.registries.DeferredBlock; +import ovh.glitchlabs.ichori.Block.ModBlocks; import ovh.glitchlabs.ichori.Ichori; public class ModBlockStateProvider extends BlockStateProvider { diff --git a/src/main/java/ovh/glitchlabs/ichori/datagen/ModItemModelProvider.java b/src/main/java/ovh/glitchlabs/ichori/datagen/ModItemModelProvider.java index 8388814..e722095 100644 --- a/src/main/java/ovh/glitchlabs/ichori/datagen/ModItemModelProvider.java +++ b/src/main/java/ovh/glitchlabs/ichori/datagen/ModItemModelProvider.java @@ -17,6 +17,7 @@ public class ModItemModelProvider extends ItemModelProvider { protected void registerModels() { withExistingParent(ModItems.TEST_Spawn_LIGHT.getId().getPath(), mcLoc("item/stick")); + withExistingParent(ModItems.TEST_Spawn_MAGIC_TOURCH.getId().getPath(), mcLoc("item/stick")); } } diff --git a/src/main/java/ovh/glitchlabs/ichori/event/CustomPartical.java b/src/main/java/ovh/glitchlabs/ichori/event/CustomPartical.java new file mode 100644 index 0000000..cf8e24f --- /dev/null +++ b/src/main/java/ovh/glitchlabs/ichori/event/CustomPartical.java @@ -0,0 +1,21 @@ +package ovh.glitchlabs.ichori.event; + +import foundry.veil.api.client.render.VeilRenderSystem; +import foundry.veil.api.quasar.particle.ParticleEmitter; +import foundry.veil.api.quasar.particle.ParticleSystemManager; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.Vec3; + +public class CustomPartical { + + public static void spawnParticleOnPosition(Vec3 position, ResourceLocation id){ + try { + ParticleSystemManager manager = VeilRenderSystem.renderer().getParticleManager(); + ParticleEmitter emitter = manager.createEmitter(id); + emitter.setPosition(position); + manager.addParticleSystem(emitter); + } catch (Exception ignored) { + + } + } +} diff --git a/src/main/resources/assets/ichori/blockstates/magic_tourch.json b/src/main/resources/assets/ichori/blockstates/magic_tourch.json new file mode 100644 index 0000000..3e444f7 --- /dev/null +++ b/src/main/resources/assets/ichori/blockstates/magic_tourch.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "ichori:block/magic_tourch" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ichori/models/block/magic_tourch.json b/src/main/resources/assets/ichori/models/block/magic_tourch.json new file mode 100644 index 0000000..7ddb63e --- /dev/null +++ b/src/main/resources/assets/ichori/models/block/magic_tourch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "minecraft:block/dark_oak_planks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ichori/models/item/magic_tourch.json b/src/main/resources/assets/ichori/models/item/magic_tourch.json new file mode 100644 index 0000000..cdb2f10 --- /dev/null +++ b/src/main/resources/assets/ichori/models/item/magic_tourch.json @@ -0,0 +1,3 @@ +{ + "parent": "ichori:block/magic_tourch" +} \ No newline at end of file diff --git a/src/main/resources/assets/ichori/quasar/emitters/magic_tourch.json b/src/main/resources/assets/ichori/quasar/emitters/magic_tourch.json new file mode 100644 index 0000000..3882788 --- /dev/null +++ b/src/main/resources/assets/ichori/quasar/emitters/magic_tourch.json @@ -0,0 +1,72 @@ +{ + "count": 1, + "emitter_settings": { + "shape": { + "shape": "veil:point", + "dimensions": [ + 1.0, + 1.0, + 1.0 + ], + "rotation": [ + 0.0, + 0.0, + 0.0 + ], + "from_surface": true + }, + "particle_settings": { + "initial_rotation_variation": [ + 150.0, + 200.0, + 150.0 + ], + "random_speed": true, + "random_size": true, + "random_lifetime": true, + "random_initial_direction": true, + "initial_direction_variation": [ + 0.3, + 1.0, + 0.3 + ], + "random_initial_rotation": true, + "particle_size_variation": 0.020000003, + "particle_lifetime": 30, + "particle_lifetime_variation": 30.0, + "initial_direction": [ + 0.0, + 1.0, + 0.0 + ], + "particle_speed": 0.005, + "particle_speed_variation": 0.015, + "base_particle_size": 0.08 + } + }, + "particle_data": { + "modules": [ + { + "block": 8, + "sky": 15, + "module": "veil:lightmap" + }, + { + "gradient": { + "color": -106349847 + }, + "brightness": 0.6, + "radius": 3.5, + "module": "veil:light" + } + ], + "sprite_data": { + "sprite": "minecraft:textures/block/purple_stained_glass.png" + }, + "additive": true, + "render_style": "veil:cube" + }, + "max_lifetime": 1, + "loop": false, + "rate": 2 +} \ No newline at end of file