Working Power Command and save data
build / build (push) Has been cancelled

This commit is contained in:
2026-08-07 16:59:33 +02:00
parent 91bdbbf8ff
commit f2a5083cc1
16 changed files with 136 additions and 24 deletions
@@ -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 {
@@ -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()
}
}
@@ -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"))
}
}
}
}
})
}
}
@@ -0,0 +1,6 @@
package gamer.noir.curseenc.client.value
object GlobalVariable {
@JvmField
var nocturnal_Vision = false
}
@@ -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.
@@ -1,5 +0,0 @@
package gamer.noir.curseenc.client
class AttachmentsClient {
var Nighte_vision = true
}
@@ -1,10 +0,0 @@
package gamer.noir.curseenc.client
import net.fabricmc.api.ClientModInitializer
object FabricClient: ClientModInitializer {
override fun onInitializeClient() {
//nop
}
}
@@ -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)
}
}
}
@@ -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("...")
@@ -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()
}
@@ -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)
})
}
}
@@ -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"
}
@@ -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 ]
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 432 B