diff --git a/README.md b/README.md index dc8b541bb..23079362e 100644 --- a/README.md +++ b/README.md @@ -12,57 +12,64 @@ Custom Ore Gem est un mod Minecraft développé avec MCreator pour Forge 1.20.1. - **Mod Loader** : Forge (version 47.3.0) - **Version de Java** : Java 17 - **Mod ID** : `custom_ore_gen` -- **Version** : 1.0.0 +- **Version** : 2.1.5 - **Auteur** : Aulyrius (créé via MCreator) - **Site web** : https://lanro.eu ## Avant garde -Il est recommandé pour la bonne utilisation du mods d'utilisé des mods complémentaire : +### Dépendances Requises -* **Biomes O' Plenty** - Pour profiter des biomes supplémentaires (69 biomes BOP supportés) -* **Biome Replacer** pour supprimer les biomes caves, qui n'ont pas de sens de température et d'un point de vue joueur est pas logique. +* **KubeJS** (OBLIGATOIRE) - Ce mod ne peut pas fonctionner sans KubeJS installé + - Le mod refusera de se lancer si KubeJS n'est pas présent + - Le mod crée automatiquement le script de suppression des minerais vanilla au premier lancement dans `kubejs/startup_scripts/custom_ore_gen_remove_vanilla_ores.js` - biome_replacer.properties : +* **Biomes O' Plenty** (Recommandé) - Pour profiter des biomes supplémentaires (69 biomes BOP supportés) - ```javascript +* **Biome Replacer** (Optionnel) - Pour supprimer les biomes caves qui n'ont pas de sens de température + + ```properties + biome_replacer.properties: minecraft:deep_dark > null minecraft:dripstone_caves > null minecraft:lush_caves > null ``` -* KubeJS pour supprimer la génération de base avec le script suivant : - *remove.js* +### Script KubeJS Automatique - ```javascript - // priority: 0 - - WorldgenEvents.remove(event => { - var minecraftOreList = [ - 'minecraft:coal_ore', - 'minecraft:deepslate_coal_ore', - 'minecraft:copper_ore', - 'minecraft:deepslate_copper_ore', - 'minecraft:iron_ore', - 'minecraft:deepslate_iron_ore', - 'minecraft:gold_ore', - 'minecraft:deepslate_gold_ore', - 'minecraft:redstone_ore', - 'minecraft:deepslate_redstone_ore', - 'minecraft:emerald_ore', - 'minecraft:deepslate_emerald_ore', - 'minecraft:diamond_ore', - 'minecraft:deepslate_diamond_ore', - 'minecraft:lapis_ore', - 'minecraft:deepslate_lapis_ore' - ]; - - event.removeOres(props => { - props.blocks = minecraftOreList - }); - }); - ``` +Le mod crée automatiquement le script suivant au premier lancement dans `kubejs/startup_scripts/custom_ore_gen_remove_vanilla_ores.js` : + +```javascript +// priority: 0 + +WorldgenEvents.remove(event => { + var minecraftOreList = [ + 'minecraft:coal_ore', + 'minecraft:deepslate_coal_ore', + 'minecraft:copper_ore', + 'minecraft:deepslate_copper_ore', + 'minecraft:iron_ore', + 'minecraft:deepslate_iron_ore', + 'minecraft:gold_ore', + 'minecraft:deepslate_gold_ore', + 'minecraft:redstone_ore', + 'minecraft:deepslate_redstone_ore', + 'minecraft:emerald_ore', + 'minecraft:deepslate_emerald_ore', + 'minecraft:diamond_ore', + 'minecraft:deepslate_diamond_ore', + 'minecraft:lapis_ore', + 'minecraft:deepslate_lapis_ore' + ]; + + event.removeOres(props => { + props.blocks = minecraftOreList + }); +}); +``` + +> **Note** : Le script n'est recréé que s'il n'existe pas déjà. Vous pouvez le modifier manuellement sans risque. ## Fonctionnalités Principales ### Nouveaux Minerais (16 blocs) @@ -79,6 +86,8 @@ Le mod ajoute plusieurs variantes de minerais personnalisés : - Se génère dans les biomes froids (cold_biomes) - Drop : 1-2 Diamants (Fortune supporté) +> **Note** : La version surface du minerai Shard Diamond a été désactivée dans la version 2.1.5. Seule la version deepslate est disponible. + #### Variantes d'Or - **Pure Golden Ore** (`puregoldenore`) : Un minerai d'or pur de haute qualité - Se génère dans les biomes chauds (hot_biomes) @@ -531,10 +540,16 @@ Minerais trouvables: ## Intégration ### Mode Créatif -Les items sont organisés dans les onglets créatifs via `CustomOreGenModTabs` : -- **INGREDIENTS** : Diamond Shards et blocs de minerais -- **TOOLS_AND_UTILITIES** : Pioche, pelle, hache, paxel et Ore Biome Finder -- **COMBAT** : Armure complète en Diamond Shard (casque, plastron, jambières, bottes) +Le mod ajoute un onglet créatif personnalisé **"Custom Ore Gen"** contenant tous les items du mod : +- Tous les minerais (15 blocs - le minerai surface Shard Diamond est désactivé) +- Diamond Shards et Ore Biome Finder +- Tous les outils Diamond Shard (pioche, pelle, hache, paxel) +- Toute l'armure Diamond Shard (casque, plastron, jambières, bottes) + +Les items restent également disponibles dans les onglets vanilla Minecraft : +- **INGREDIENTS** : Diamond Shards +- **TOOLS_AND_UTILITIES** : Outils et Ore Biome Finder +- **COMBAT** : Armure Diamond Shard ### Langue Le mod inclut des fichiers de localisation en anglais (`en_us.json`) avec des noms descriptifs pour tous les blocs et objets. @@ -587,10 +602,12 @@ config/custom_ore_gen-common.toml ## Installation 1. Assurez-vous d'avoir Minecraft 1.20.1 installé avec Forge 47.3.0+ -2. Placez le fichier .jar du mod dans le dossier `mods` de votre installation Minecraft -3. Lancez le jeu avec le profil Forge +2. **Installez KubeJS** (OBLIGATOIRE) - Le mod ne fonctionnera pas sans KubeJS +3. Placez le fichier `.jar` du mod dans le dossier `mods` de votre installation Minecraft +4. Lancez le jeu avec le profil Forge +5. Le mod créera automatiquement le script KubeJS nécessaire au premier lancement -> **Important** : Ce mod est conçu pour être utilisé avec KubeJS et ne doit pas être utilisé seul. +> **Important** : Ce mod nécessite KubeJS pour fonctionner. Le script de suppression des minerais vanilla sera créé automatiquement dans `kubejs/startup_scripts/custom_ore_gen_remove_vanilla_ores.js`. ## Architecture du Code @@ -600,7 +617,9 @@ config/custom_ore_gen-common.toml net.mcreator.customoregen/ ├── CustomOreGenMod.java # Classe principale du mod ├── OresCommand.java # Commande /ores pour détecter les minerais -├── block/ # Classes des blocs (16 minerais) +├── KubeJSIntegration.java # Création automatique du script KubeJS +├── ShardDiamondArmorMaterial.java # Classe de matériau d'armure Diamond Shard +├── block/ # Classes des blocs (15 minerais) │ ├── SharddiamondblockoreBlock.java │ ├── ConcentrateddiamondoreBlock.java │ ├── ConcentratedcoaloreBlock.java @@ -635,7 +654,7 @@ net.mcreator.customoregen/ │ ├── ConfigurableOreDropsProcedure.java # Drops configurables │ └── OreexperienceProcedure.java # Drops d'XP └── init/ # Registres Forge - ├── CustomOreGenModBlocks.java # 16 blocs + ├── CustomOreGenModBlocks.java # 15 blocs ├── CustomOreGenModItems.java # Items + BlockItems └── CustomOreGenModTabs.java # Onglets créatifs ``` @@ -643,6 +662,8 @@ net.mcreator.customoregen/ ### Classes Principales - **CustomOreGenMod** : Point d'entrée du mod, gère l'initialisation et le réseau +- **KubeJSIntegration** : Crée automatiquement le script KubeJS de suppression des minerais vanilla au premier lancement du jeu +- **ShardDiamondArmorMaterial** : Classe de matériau d'armure Diamond Shard avec gestion des textures - **OresCommand** : Commande `/ores` pour identifier les minerais du biome actuel - **OreBiomeFinderItem** : Item utilisable pour détecter les minerais du biome (clic droit) - **SharddiamondpaxelItem** : Paxel combinant pioche + pelle + hache en un seul outil @@ -653,15 +674,29 @@ net.mcreator.customoregen/ ## Philosophie du Mod -Custom Ore Gem est conçu pour : -- **Modifier la distribution des ressources** Minecraft avec de nouvelles variantes de minerais -- **Fournir un système de drops configurable** pour les pack makers et moddeurs -- **Introduire une progression intermédiaire** à travers les Diamond Shards (outils et armure) +Custom Ore Gen est conçu pour : +- **Modifier la distribution des ressources** Minecraft avec de nouvelles variantes de minerais basées sur la température des biomes +- **Fournir une dépendance obligatoire à KubeJS** avec création automatique du script de suppression des minerais vanilla +- **Introduire une progression intermédiaire** à travers les Diamond Shards (outils et armure entre fer et diamant) - **Offrir des outils d'exploration** avec l'Ore Biome Finder et la commande `/ores` - **Proposer un outil tout-en-un** avec le Paxel en Diamond Shard (1000 durabilité) - **Fournir une armure intermédiaire** entre fer et diamant (17 protection, 1060 durabilité) -- **S'intégrer avec KubeJS** pour permettre des modifications avancées +- **Faciliter l'installation** avec création automatique des scripts KubeJS nécessaires - **Supporter Biomes O' Plenty** avec 69 biomes supplémentaires classés par température +- **Fournir un onglet créatif dédié** regroupant tous les items du mod + +## Changements de Version + +### Version 2.1.5 +- ✅ Ajout de l'armure complète Diamond Shard (casque, plastron, jambières, bottes) +- ✅ Ajout du Paxel Diamond Shard (outil tout-en-un : pioche + pelle + hache) +- ✅ Création d'un onglet créatif personnalisé "Custom Ore Gen" +- ✅ KubeJS est maintenant une dépendance obligatoire (le mod refuse de se lancer sans KubeJS) +- ✅ Création automatique du script KubeJS de suppression des minerais vanilla au premier lancement +- ✅ Nouvelle texture Diamond Shard (32x32 pixels) +- ✅ Correction des textures d'armure (plus de texture violette) +- ✅ Désactivation du minerai Shard Diamond en surface (seulement la version deepslate reste disponible) +- ✅ Amélioration du système de matériau d'armure avec `ShardDiamondArmorMaterial` ## Crédits diff --git a/src/main/java/net/mcreator/customoregen/KubeJSIntegration.java b/src/main/java/net/mcreator/customoregen/KubeJSIntegration.java index 41d1fecd4..c07965313 100644 --- a/src/main/java/net/mcreator/customoregen/KubeJSIntegration.java +++ b/src/main/java/net/mcreator/customoregen/KubeJSIntegration.java @@ -1,11 +1,9 @@ package net.mcreator.customoregen; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.event.level.LevelEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.LogicalSide; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.storage.LevelResource; import java.io.File; import java.io.IOException; @@ -13,47 +11,70 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; -@Mod.EventBusSubscriber(modid = CustomOreGenMod.MODID, bus = Mod.EventBusSubscriber.Bus.FORGE) +@Mod.EventBusSubscriber(modid = CustomOreGenMod.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) public class KubeJSIntegration { private static final String SCRIPT_FILE_NAME = "custom_ore_gen_remove_vanilla_ores.js"; private static boolean hasCreatedScript = false; @SubscribeEvent - public static void onServerLoad(LevelEvent.Load event) { - // Only run on server side and only once - if (event.getLevel().isClientSide() || hasCreatedScript) { - return; - } - - if (!(event.getLevel() instanceof ServerLevel serverLevel)) { + public static void onCommonSetup(FMLCommonSetupEvent event) { + // Only run once + if (hasCreatedScript) { return; } hasCreatedScript = true; - // Get the server's kubejs directory - File kubeJsDir = new File(serverLevel.getServer().getServerDirectory(), "kubejs/startup_scripts"); + CustomOreGenMod.LOGGER.info("============================================"); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: FMLCommonSetupEvent FIRED!"); + CustomOreGenMod.LOGGER.info("============================================"); + // Get the game directory (where .minecraft is) + File gameDir = new File("."); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Game directory: " + gameDir.getAbsolutePath()); + + File kubeJsDir = new File(gameDir, "kubejs/startup_scripts"); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Target KubeJS directory: " + kubeJsDir.getAbsolutePath()); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Directory exists? " + kubeJsDir.exists()); + + // Create directory if it doesn't exist if (!kubeJsDir.exists()) { - CustomOreGenMod.LOGGER.info("KubeJS directory not found. Skipping script creation."); - return; + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Directory does not exist, creating..."); + boolean created = kubeJsDir.mkdirs(); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: mkdirs() returned: " + created); + if (!created) { + CustomOreGenMod.LOGGER.error("Custom Ore Gen: FAILED to create KubeJS directory!"); + return; + } + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Successfully created directory"); } File scriptFile = new File(kubeJsDir, SCRIPT_FILE_NAME); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Script file path: " + scriptFile.getAbsolutePath()); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Script file exists? " + scriptFile.exists()); // Only create if it doesn't exist if (scriptFile.exists()) { - CustomOreGenMod.LOGGER.info("KubeJS script already exists: " + scriptFile.getPath()); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Script already exists, skipping creation"); return; } + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Script does not exist, creating now..."); + try { createKubeJSScript(scriptFile.toPath()); - CustomOreGenMod.LOGGER.info("Successfully created KubeJS script: " + scriptFile.getPath()); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Script creation completed successfully!"); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: File exists after creation? " + scriptFile.exists()); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: File size: " + scriptFile.length() + " bytes"); } catch (IOException e) { - CustomOreGenMod.LOGGER.error("Failed to create KubeJS script", e); + CustomOreGenMod.LOGGER.error("Custom Ore Gen: FAILED to create KubeJS script!", e); + e.printStackTrace(); } + + CustomOreGenMod.LOGGER.info("============================================"); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Script creation process finished"); + CustomOreGenMod.LOGGER.info("============================================"); } private static void createKubeJSScript(Path scriptPath) throws IOException { @@ -87,5 +108,6 @@ WorldgenEvents.remove(event => { """; Files.writeString(scriptPath, scriptContent, StandardOpenOption.CREATE_NEW); + CustomOreGenMod.LOGGER.info("Custom Ore Gen: Files.writeString() completed"); } }