From f2a5083cc1e043fd4a18c96426aa987d4e0a6182 Mon Sep 17 00:00:00 2001 From: gamer_noir Date: Fri, 7 Aug 2026 16:59:33 +0200 Subject: [PATCH] Working Power Command and save data --- .../client/mixin/NightVisionMixin.java | 4 +- .../curseenc/client/CurseOfEienNoChiClient.kt | 2 + .../gamer/noir/curseenc/client/key/Keys.kt | 53 ++++++++++++++++++ .../curseenc/client/value/GlobalVariable.kt | 6 ++ .../gamer/noir/curseenc/CurseOfEienNoChi.kt | 1 - .../noir/curseenc/client/AttachmentsClient.kt | 5 -- .../noir/curseenc/client/FabricClient.kt | 10 ---- .../gamer/noir/curseenc/command/Materials.kt | 20 +++++++ .../noir/curseenc/command/ModCommands.kt | 2 +- .../curseenc/command/SacrificialDagger.kt | 9 +++ .../gamer/noir/curseenc/item/ModItems.kt | 15 +++-- .../resources/assets/curseenc/lang/en_us.json | 5 +- .../models/item/sacrificial_dagger.json | 28 +++++++++ .../curseenc/textures/Power/night_vision.png | Bin 270 -> 270 bytes .../assets/curseenc/textures/item/garlic.png | Bin 257 -> 266 bytes .../textures/mob_effect/garlic_status.png | Bin 257 -> 432 bytes 16 files changed, 136 insertions(+), 24 deletions(-) create mode 100644 src/client/kotlin/gamer/noir/curseenc/client/key/Keys.kt create mode 100644 src/client/kotlin/gamer/noir/curseenc/client/value/GlobalVariable.kt delete mode 100644 src/main/kotlin/gamer/noir/curseenc/client/AttachmentsClient.kt delete mode 100644 src/main/kotlin/gamer/noir/curseenc/client/FabricClient.kt create mode 100644 src/main/kotlin/gamer/noir/curseenc/command/Materials.kt create mode 100644 src/main/kotlin/gamer/noir/curseenc/command/SacrificialDagger.kt create mode 100644 src/main/resources/assets/curseenc/models/item/sacrificial_dagger.json diff --git a/src/client/java/gamer/noir/curseenc/client/mixin/NightVisionMixin.java b/src/client/java/gamer/noir/curseenc/client/mixin/NightVisionMixin.java index bfe7b6a..f074d45 100644 --- a/src/client/java/gamer/noir/curseenc/client/mixin/NightVisionMixin.java +++ b/src/client/java/gamer/noir/curseenc/client/mixin/NightVisionMixin.java @@ -1,5 +1,7 @@ package gamer.noir.curseenc.client.mixin; +import gamer.noir.curseenc.client.value.GlobalVariable; +import gamer.noir.curseenc.data.AttachmentsServer; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.LightTexture; import org.spongepowered.asm.mixin.Final; @@ -17,7 +19,7 @@ public class NightVisionMixin { @ModifyVariable(method = "updateLightTexture" ,at = @At(value = "NEW", target = "(FFF)Lorg/joml/Vector3f;",ordinal = 0), ordinal = 6) float customNightVision(float original) { - if (this.minecraft.player != null && this.minecraft.player.isSpectator()) { + if (this.minecraft.player != null && GlobalVariable.nocturnal_Vision ) { return 1 ; } else { diff --git a/src/client/kotlin/gamer/noir/curseenc/client/CurseOfEienNoChiClient.kt b/src/client/kotlin/gamer/noir/curseenc/client/CurseOfEienNoChiClient.kt index 54f82b9..b418011 100644 --- a/src/client/kotlin/gamer/noir/curseenc/client/CurseOfEienNoChiClient.kt +++ b/src/client/kotlin/gamer/noir/curseenc/client/CurseOfEienNoChiClient.kt @@ -1,9 +1,11 @@ package gamer.noir.curseenc.client +import gamer.noir.curseenc.client.key.Keys import net.fabricmc.api.ClientModInitializer object CurseOfEienNoChiClient : ClientModInitializer { override fun onInitializeClient() { // This entrypoint is suitable for setting up client-specific logic, such as rendering. + Keys.initialize() } } \ No newline at end of file diff --git a/src/client/kotlin/gamer/noir/curseenc/client/key/Keys.kt b/src/client/kotlin/gamer/noir/curseenc/client/key/Keys.kt new file mode 100644 index 0000000..4ad632d --- /dev/null +++ b/src/client/kotlin/gamer/noir/curseenc/client/key/Keys.kt @@ -0,0 +1,53 @@ +package gamer.noir.curseenc.client.key + +import com.mojang.blaze3d.platform.InputConstants +import gamer.noir.curseenc.CurseOfEienNoChi +import gamer.noir.curseenc.client.value.GlobalVariable +import gamer.noir.curseenc.data.AttachmentsServer +import gamer.noir.curseenc.data.AttachmentsServer.Powers +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper +import net.minecraft.client.KeyMapping +import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation +import org.lwjgl.glfw.GLFW + + +object Keys { + val nocturnalVision: KeyMapping = KeyBindingHelper.registerKeyBinding( + KeyMapping( + "key.${CurseOfEienNoChi.MOD_ID}.nocturnal_vision", // The translation key for the key mapping. + InputConstants.Type.KEYSYM, // // The type of the keybinding; KEYSYM for keyboard, MOUSE for mouse. + GLFW.GLFW_KEY_N, // The GLFW keycode of the key. + "key.${CurseOfEienNoChi.MOD_ID}.keys_category" // The category of the mapping. + ) + ) + fun initialize() { + ClientTickEvents.END_CLIENT_TICK.register({ client -> + // Régler le fait que il reste activé et qu'il n'y a pas de vérification pour le désactiver quand on a plus le pouvoir + while (nocturnalVision.consumeClick()) { + val player = client.player + if (player != null) { + val power_list =player.getAttached(AttachmentsServer.Powers) + if (power_list?.contains(ResourceLocation.fromNamespaceAndPath(CurseOfEienNoChi.MOD_ID ,"nocturnal_vision") ) == true) { + if (GlobalVariable.nocturnal_Vision) { + GlobalVariable.nocturnal_Vision = false + client.player!!.sendSystemMessage(Component.literal("Nocturnal Vision disabled")) + } else { + GlobalVariable.nocturnal_Vision = true + client.player!!.sendSystemMessage(Component.literal("Nocturnal Vision enabled")) + } + } + else{ + if (GlobalVariable.nocturnal_Vision) { + GlobalVariable.nocturnal_Vision = false + client.player!!.sendSystemMessage(Component.literal("Nocturnal Vision no longer exists")) + } + } + } + } + }) + + + } +} \ No newline at end of file diff --git a/src/client/kotlin/gamer/noir/curseenc/client/value/GlobalVariable.kt b/src/client/kotlin/gamer/noir/curseenc/client/value/GlobalVariable.kt new file mode 100644 index 0000000..6fe79bb --- /dev/null +++ b/src/client/kotlin/gamer/noir/curseenc/client/value/GlobalVariable.kt @@ -0,0 +1,6 @@ +package gamer.noir.curseenc.client.value + +object GlobalVariable { + @JvmField + var nocturnal_Vision = false +} \ No newline at end of file diff --git a/src/main/kotlin/gamer/noir/curseenc/CurseOfEienNoChi.kt b/src/main/kotlin/gamer/noir/curseenc/CurseOfEienNoChi.kt index fce9576..ee49b26 100644 --- a/src/main/kotlin/gamer/noir/curseenc/CurseOfEienNoChi.kt +++ b/src/main/kotlin/gamer/noir/curseenc/CurseOfEienNoChi.kt @@ -17,7 +17,6 @@ object CurseOfEienNoChi : ModInitializer { ModItems.initialize() Effect.initialize() ModCommands.initialize() - // 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. diff --git a/src/main/kotlin/gamer/noir/curseenc/client/AttachmentsClient.kt b/src/main/kotlin/gamer/noir/curseenc/client/AttachmentsClient.kt deleted file mode 100644 index 28e3429..0000000 --- a/src/main/kotlin/gamer/noir/curseenc/client/AttachmentsClient.kt +++ /dev/null @@ -1,5 +0,0 @@ -package gamer.noir.curseenc.client - -class AttachmentsClient { - var Nighte_vision = true -} \ No newline at end of file diff --git a/src/main/kotlin/gamer/noir/curseenc/client/FabricClient.kt b/src/main/kotlin/gamer/noir/curseenc/client/FabricClient.kt deleted file mode 100644 index 1a9c405..0000000 --- a/src/main/kotlin/gamer/noir/curseenc/client/FabricClient.kt +++ /dev/null @@ -1,10 +0,0 @@ -package gamer.noir.curseenc.client - -import net.fabricmc.api.ClientModInitializer - -object FabricClient: ClientModInitializer { - override fun onInitializeClient() { - //nop - - } -} \ No newline at end of file diff --git a/src/main/kotlin/gamer/noir/curseenc/command/Materials.kt b/src/main/kotlin/gamer/noir/curseenc/command/Materials.kt new file mode 100644 index 0000000..8d20d3a --- /dev/null +++ b/src/main/kotlin/gamer/noir/curseenc/command/Materials.kt @@ -0,0 +1,20 @@ +package gamer.noir.curseenc.command + +import net.minecraft.client.Minecraft +import net.minecraft.world.item.Items +import net.minecraft.world.item.Tier +import net.minecraft.world.item.crafting.Ingredient + +enum class Materials: Tier { + DaggerSacrificialMaterial { + override fun getUses(): Int { + return 300 + } + override fun getAttackDamageBonus(): Float { + return 1.5f + } + override fun getRepairIngredient(): Ingredient { + return Ingredient.of(Items.IRON_INGOT) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/gamer/noir/curseenc/command/ModCommands.kt b/src/main/kotlin/gamer/noir/curseenc/command/ModCommands.kt index 18d7e25..c519680 100644 --- a/src/main/kotlin/gamer/noir/curseenc/command/ModCommands.kt +++ b/src/main/kotlin/gamer/noir/curseenc/command/ModCommands.kt @@ -90,7 +90,7 @@ object ModCommands { val argument_power = Commands.argument("Power", StringArgumentType.string()).suggests { context, builder -> - builder.suggest("night_vision") + builder.suggest("nocturnal_vision") .suggest("hyper_speed") .suggest("bat_mod") .suggest("...") diff --git a/src/main/kotlin/gamer/noir/curseenc/command/SacrificialDagger.kt b/src/main/kotlin/gamer/noir/curseenc/command/SacrificialDagger.kt new file mode 100644 index 0000000..3b062cc --- /dev/null +++ b/src/main/kotlin/gamer/noir/curseenc/command/SacrificialDagger.kt @@ -0,0 +1,9 @@ +package gamer.noir.curseenc.command + +import net.minecraft.world.item.Item +import net.minecraft.world.item.Items +import net.minecraft.world.item.Items.registerItem + +class SacrificialDagger: Item { + val dageur:Item = registerItem() +} \ No newline at end of file diff --git a/src/main/kotlin/gamer/noir/curseenc/item/ModItems.kt b/src/main/kotlin/gamer/noir/curseenc/item/ModItems.kt index 87525ba..8a00e8f 100644 --- a/src/main/kotlin/gamer/noir/curseenc/item/ModItems.kt +++ b/src/main/kotlin/gamer/noir/curseenc/item/ModItems.kt @@ -2,19 +2,19 @@ package gamer.noir.curseenc.item import gamer.noir.curseenc.CurseOfEienNoChi import gamer.noir.curseenc.effect.Effect -import gamer.noir.curseenc.effect.GarlicStatus import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents.ModifyEntries import net.minecraft.core.Registry import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceLocation -import net.minecraft.world.effect.MobEffect import net.minecraft.world.effect.MobEffectInstance -import net.minecraft.world.effect.MobEffects import net.minecraft.world.food.FoodProperties import net.minecraft.world.item.CreativeModeTabs import net.minecraft.world.item.Item +import net.minecraft.world.item.SwordItem + + object ModItems { @@ -28,22 +28,27 @@ object ModItems { // Return the registered item! return registeredItem } - val GARLIC_FOOD: FoodProperties = FoodProperties.Builder() .alwaysEdible() .effect(MobEffectInstance(Effect.GARLIC_STATUS, 6 * 20, 0), 1.0f) .build() + val GARLIC: Item = register( Item(Item.Properties().food(GARLIC_FOOD)), "garlic" ) + val SACRIFICIAL_DAGGER: Item = register( + SwordItem(Test.INSTANCE, + Item.Properties()), + "sacrificial_dagger" + ) fun initialize() { ItemGroupEvents.modifyEntriesEvent(CreativeModeTabs.INGREDIENTS) .register(ModifyEntries { entries: FabricItemGroupEntries -> entries.accept(GARLIC) - + entries.accept(SACRIFICIAL_DAGGER) }) } } diff --git a/src/main/resources/assets/curseenc/lang/en_us.json b/src/main/resources/assets/curseenc/lang/en_us.json index 5e99ba2..a3608e4 100644 --- a/src/main/resources/assets/curseenc/lang/en_us.json +++ b/src/main/resources/assets/curseenc/lang/en_us.json @@ -1,6 +1,9 @@ { "item.curseenc.garlic": "Garlic", + "item.curseenc.sacrificial_dagger": "Sacrificial D agger", + "effect.curseenc.garlic_status": "Garlic Status", - "effect.curseenc.garlic_status": "Garlic Status" + "key.curseenc.keys_category": "Curse Of Eien No Chi", + "key.curseenc.nocturnal_vision": "Nocturnal Vision" } \ No newline at end of file diff --git a/src/main/resources/assets/curseenc/models/item/sacrificial_dagger.json b/src/main/resources/assets/curseenc/models/item/sacrificial_dagger.json new file mode 100644 index 0000000..0f0d359 --- /dev/null +++ b/src/main/resources/assets/curseenc/models/item/sacrificial_dagger.json @@ -0,0 +1,28 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "curseenc:item/sacrificial_dagger" + }, + "display": { + "thirdperson_righthand": { + "rotation": [45, 90, 0], + "translation": [ 0, 2.5, 0.5 ], + "scale": [ 0.68, 0.68, 0.68 ] + }, + "firstperson_righthand": { + "rotation": [35, 90, 0], + "translation": [ 0, 4, 1.75 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "firstperson_lefthand": { + "rotation": [35, -90, 0], + "translation": [ 0, 4, 1.75 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "thirdperson_lefthand": { + "rotation": [45, -90, 0], + "translation": [ 0, 2.5, 0.5 ], + "scale": [ 0.68, 0.68, 0.68 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/curseenc/textures/Power/night_vision.png b/src/main/resources/assets/curseenc/textures/Power/night_vision.png index 09588ec2c663761aefac470f5a626c2e42942b27..9b30d18b1d47741504d4c08642d5baf7c3640bc5 100644 GIT binary patch delta 52 zcmV-40L%Z50*(TZPaM)JG~`BZTV%_+GAj@ZEiOEXD;{(J008n@WYCdoA_~C(01m+c KxRGn^k(YPf5EAwP delta 52 zcmeBU>SLPVFZ0eV;D2Igbjs;#e(nO?x_UO9+Hxff3=G#}XC_a~R^mFuz`%EiQB=dL IVdC_10QC_P2LJ#7 diff --git a/src/main/resources/assets/curseenc/textures/item/garlic.png b/src/main/resources/assets/curseenc/textures/item/garlic.png index f0417fc2afe7b46ea71f73c6741db20eff4ef69a..f8a6a28955abcb9d4e13e464e80476ea6dff5231 100644 GIT binary patch delta 218 zcmZo<>SCH8!^)tc%O5;ZQK4QUz$e7DzPx+}rLo|Y0`y%;{7;rd8 z9{!sjb9>3vKfOx@{xGr3o?3fy?;rjRCu-(b=q$Qa&eP=T?!}sQCG8W7juq1?-)Z@D;?n=c^Z(ykyS*)ofq}u%;&T^} zVlN5u3;quV3{u|AZa^W<0*}aI1_r*vAk26?e?katoqGt3Y@yoFux9bbLJjAm*7($c3+{j<~VS?8SF~>75(~4hBcwx)^+l$#8SaRK?@5zv9J&L06_va7KyJB@Bu_DEUi*qirC}@QVDhzzCelu z4E`x4MbeG;jXRsk=EVHq*x8+#Z)SEmx&XWHEE%^7)j{>qnSh_;SPYz7Ul4af4}Xml z0=|RLuj`)<*2DE(V)EB!L(N8mURNv1R{I#5S)J&i(+^CeJqg`0RCx!{!G9n iSR^+T2(f}Gu|!7!GRn^8|6h~<0000fP|G%|%ds`L*1B0W* z=Pn?{UJ~RN{2vS$q`aBkfI^%F9+AZi419+{nDKc2iWHz=lBbJfh(vg-UpF6vA3pXFKB8}QXd&FD$umt#F{*B5qqh-Y^&geHHvk-zf81g{rjj%Qq^6~CJB!j}8D z8JDwO6vK1=Jofu`QJmc8`d4gSV3VQz!pwTxy0d);{ZIU1nB~ZFQT0URO`vrQp00i_ I>zopr06Ga+mH+?%