From 1ebd1341b0bdff243eefb07987a960eecc6480a6 Mon Sep 17 00:00:00 2001 From: paisc Date: Thu, 23 Jan 2025 00:35:04 +0100 Subject: [PATCH] added dune staff prototype --- .../net/voltexstudios/VoltexDesertUpdate.java | 10 ++-- .../VoltexDesertUpdateClient.java | 4 +- .../net/voltexstudios/entity/ModEntities.java | 21 ++++++++ .../entity/custom/DuneProjectileEntity.java | 47 ++++++++++++++++++ .../java/net/voltexstudios/item/ModItems.java | 33 ++++++++++++ .../item/custom/DuneStaffItem.java | 47 ++++++++++++++++++ .../assets/voltexdesertupdate/lang/en_us.json | 3 ++ .../models/item/dune_staff.json | 6 +++ .../textures/item/dune_staff.png | Bin 0 -> 2094 bytes 9 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/voltexstudios/entity/ModEntities.java create mode 100644 src/main/java/net/voltexstudios/entity/custom/DuneProjectileEntity.java create mode 100644 src/main/java/net/voltexstudios/item/ModItems.java create mode 100644 src/main/java/net/voltexstudios/item/custom/DuneStaffItem.java create mode 100644 src/main/resources/assets/voltexdesertupdate/lang/en_us.json create mode 100644 src/main/resources/assets/voltexdesertupdate/models/item/dune_staff.json create mode 100644 src/main/resources/assets/voltexdesertupdate/textures/item/dune_staff.png diff --git a/src/main/java/net/voltexstudios/VoltexDesertUpdate.java b/src/main/java/net/voltexstudios/VoltexDesertUpdate.java index 5359680..9c81c84 100644 --- a/src/main/java/net/voltexstudios/VoltexDesertUpdate.java +++ b/src/main/java/net/voltexstudios/VoltexDesertUpdate.java @@ -2,6 +2,8 @@ package net.voltexstudios; import net.fabricmc.api.ModInitializer; +import net.voltexstudios.entity.ModEntities; +import net.voltexstudios.item.ModItems; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,10 +15,10 @@ public class VoltexDesertUpdate implements ModInitializer { @Override public void onInitialize() { - // This code runs as soon as Minecraft is in a mod-load-ready state. - // However, some things (like resources) may still be uninitialized. - // Proceed with mild caution. - LOGGER.info("Hello Fabric world!"); + + ModItems.registerModItems(); + + ModEntities.registerModEntities(); } } \ No newline at end of file diff --git a/src/main/java/net/voltexstudios/VoltexDesertUpdateClient.java b/src/main/java/net/voltexstudios/VoltexDesertUpdateClient.java index 3cbfd4b..0063d81 100644 --- a/src/main/java/net/voltexstudios/VoltexDesertUpdateClient.java +++ b/src/main/java/net/voltexstudios/VoltexDesertUpdateClient.java @@ -2,12 +2,12 @@ package net.voltexstudios; import net.fabricmc.api.ClientModInitializer; -import static com.mojang.text2speech.Narrator.LOGGER; + public class VoltexDesertUpdateClient implements ClientModInitializer { @Override public void onInitializeClient() { - LOGGER.info("Initializing Desert Update Client"); + VoltexDesertUpdate.LOGGER.info("Initializing Desert Update Client"); } diff --git a/src/main/java/net/voltexstudios/entity/ModEntities.java b/src/main/java/net/voltexstudios/entity/ModEntities.java new file mode 100644 index 0000000..d20f289 --- /dev/null +++ b/src/main/java/net/voltexstudios/entity/ModEntities.java @@ -0,0 +1,21 @@ +package net.voltexstudios.entity; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnGroup; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; +import net.voltexstudios.VoltexDesertUpdate; +import net.voltexstudios.entity.custom.DuneProjectileEntity; + +public class ModEntities { + + public static final EntityType DUNE_PROJECTILE_ENTITY = Registry.register(Registries.ENTITY_TYPE, + Identifier.of(VoltexDesertUpdate.MOD_ID, "dune_projectile_entity"), + EntityType.Builder.create(DuneProjectileEntity::new, SpawnGroup.MISC) + .dimensions(0.25f, 0.25f).build()); + + public static void registerModEntities() { + VoltexDesertUpdate.LOGGER.info("Registering Mod Entities for " + VoltexDesertUpdate.MOD_ID); + } +} diff --git a/src/main/java/net/voltexstudios/entity/custom/DuneProjectileEntity.java b/src/main/java/net/voltexstudios/entity/custom/DuneProjectileEntity.java new file mode 100644 index 0000000..58259f1 --- /dev/null +++ b/src/main/java/net/voltexstudios/entity/custom/DuneProjectileEntity.java @@ -0,0 +1,47 @@ +package net.voltexstudios.entity.custom; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.projectile.thrown.ThrownItemEntity; +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.util.hit.HitResult; +import net.minecraft.world.World; + +public class DuneProjectileEntity extends ThrownItemEntity { + + private static final float DAMAGE = 4F; + + public DuneProjectileEntity(EntityType duneProjectileEntityEntityType, World world) { + super(duneProjectileEntityEntityType, world); + } + + public DuneProjectileEntity(LivingEntity livingEntity, World world) { + super(EntityType.EGG, livingEntity, world); + } + + @Override + protected void onCollision(HitResult hitResult) { + super.onCollision(hitResult); + if (!this.getWorld().isClient) { + this.getWorld().createExplosion(this, this.getX(), this.getBodyY(0.0625D), this.getZ(), 1.0F, false, World.ExplosionSourceType.TRIGGER); + this.discard(); + } + } + + @Override + protected void onEntityHit(EntityHitResult entityHitResult) { + super.onEntityHit(entityHitResult); + Entity entity = entityHitResult.getEntity(); + entity.damage(this.getDamageSources().thrown(this, this.getOwner()), DAMAGE); + } + + + @Override + protected Item getDefaultItem() { + return Items.EGG; + } + +} diff --git a/src/main/java/net/voltexstudios/item/ModItems.java b/src/main/java/net/voltexstudios/item/ModItems.java new file mode 100644 index 0000000..89e7735 --- /dev/null +++ b/src/main/java/net/voltexstudios/item/ModItems.java @@ -0,0 +1,33 @@ +package net.voltexstudios.item; + +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroups; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; +import net.voltexstudios.VoltexDesertUpdate; +import net.voltexstudios.item.custom.DuneStaffItem; + +public class ModItems { + + public static final Item DUNE_STAFF = registerItem("dune_staff", new DuneStaffItem(new Item.Settings() + .rarity(Rarity.EPIC) + .maxDamage(100) + .fireproof() + )); + + private static Item registerItem(String name, Item item) { + return Registry.register(Registries.ITEM, Identifier.of(VoltexDesertUpdate.MOD_ID, name), item); + } + + public static void registerModItems() { + VoltexDesertUpdate.LOGGER.info("Registering Mod Items for " + VoltexDesertUpdate.MOD_ID); + + ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(entries -> { + // add items to the ingredients tab + entries.add(DUNE_STAFF); + }); + } +} diff --git a/src/main/java/net/voltexstudios/item/custom/DuneStaffItem.java b/src/main/java/net/voltexstudios/item/custom/DuneStaffItem.java new file mode 100644 index 0000000..3ffbe5c --- /dev/null +++ b/src/main/java/net/voltexstudios/item/custom/DuneStaffItem.java @@ -0,0 +1,47 @@ +package net.voltexstudios.item.custom; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stat.Stats; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; +import net.voltexstudios.VoltexDesertUpdate; +import net.voltexstudios.entity.custom.DuneProjectileEntity; + +public class DuneStaffItem extends Item { + + private static final int useDuration = 7 * 20; // 7 seconds + + public DuneStaffItem(Settings settings) { + super(settings); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + + ItemStack itemStack = user.getStackInHand(hand); + + if (!world.isClient) { + + VoltexDesertUpdate.LOGGER.info("DuneStaffItem used"); + + DuneProjectileEntity duneProjectileEntity = new DuneProjectileEntity(user, world); + duneProjectileEntity.setVelocity(user, user.getPitch(), user.getYaw(), 0.0f, 1.5f, 0f); + world.spawnEntity(duneProjectileEntity); + + /* + TridentEntity tridentEntity = new TridentEntity(world, user, Items.TRIDENT.getDefaultStack()); + tridentEntity.setVelocity(user, user.getPitch(), user.getYaw(), 0.0f, 1.5f, 0f); + world.spawnEntity(tridentEntity); + + */ + } + + user.getItemCooldownManager().set(this, useDuration); + user.incrementStat(Stats.USED.getOrCreateStat(this)); + + return TypedActionResult.success(itemStack); + } +} diff --git a/src/main/resources/assets/voltexdesertupdate/lang/en_us.json b/src/main/resources/assets/voltexdesertupdate/lang/en_us.json new file mode 100644 index 0000000..a9a1e3c --- /dev/null +++ b/src/main/resources/assets/voltexdesertupdate/lang/en_us.json @@ -0,0 +1,3 @@ +{ + "item.voltexdesertupdate.dune_staff": "Staff of the Dunes" +} \ No newline at end of file diff --git a/src/main/resources/assets/voltexdesertupdate/models/item/dune_staff.json b/src/main/resources/assets/voltexdesertupdate/models/item/dune_staff.json new file mode 100644 index 0000000..3cbf64f --- /dev/null +++ b/src/main/resources/assets/voltexdesertupdate/models/item/dune_staff.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "voltexdesertupdate:item/dune_staff" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/voltexdesertupdate/textures/item/dune_staff.png b/src/main/resources/assets/voltexdesertupdate/textures/item/dune_staff.png new file mode 100644 index 0000000000000000000000000000000000000000..7603938b9606a99538665f4f2e50a2445e526577 GIT binary patch literal 2094 zcmb_ddu$X%7+)%>a#-7lAkjp(TOd@sx37Ec(xWXs@UHesTh3Ap#?I}|wrlTpx4V12 zyNWcynn23Izkr=v!j9TME(p-pPLe`pnaV8%zwFzrb#DuvhyR zV_4zSN~G0l4c7~z7Iy+ki$Z5At|K&tRaT{RAa+6vkHU6E^%LVCA0}``@)PUbVLGhW z!VV?aW59Ji4H2=YQ{*M0Y9(Ho5|Dv7v;dxp$5c~D`H75O0rl-^ioi1vtJ6=^*bed5 za3fx;84%~43@Oqyi+gz|@Bk0Tdn$02W?dA`Q4CAcUcu!PSPsuV1afCcvd|n@lXZqh zexk#&bb+Fh$)q#MIW?o5VtAgXXqIAG5+O)4ty&;Os%BZvLI9egq3D*Pskm(sM74zF zClJ*s4RJkhRyDJ6LJ^}>X#w?10GVEa{$tnVM`RfdOmUQM9gI zPt?`eo1lAk?f^iqB>QAibcsCamRvl^b9|J9v#p4q+q>$-xbJB}ajTort6nZ%YlPQ7*K(yia`ABHQQ+VDr= z`@3$QSh%UL#ToM!)8~oD9vY#SJR4ZBqqeVROK@WU^6+G__wvx6mk*8ioBWm~i<(NX zzLL6QyCbh)&%b+*qjYYNnAo{*^xWM;M^}7UzutF#<9DyWc%SJVEXGp5y1NE9SHmYa zy?10|Pw{V)3qSdNPsy#H-gbKK@WB;doN!eBI8r+J!?BBxFZ}A#O%3CteJ|9o15)eQ z-h=OyHD5R~-g{=(6I@H>Sasd7JA8DF%W>dr^zB8TCl0esi~Dy}I;svlJTXwY@9&GJ zhk6U%-24-^azr}wk@M1p#9xQ1=B&L~T^A}}di%Dy^<#bK(zU5?2MT)6#ys;+bR9o) zkeFA#wCHHt2d!^_#U~Sw{8Am<{9N0qA*>qPTk#;7J_+$}er{^1=ox+V%k3}8FZXU; QX5Z+c)eV6?tJ=2w3;XT5S^xk5 literal 0 HcmV?d00001