20 Commits
Author SHA1 Message Date
feldenr 0c831bdff8 fix(ores): prove ore generation works for BOP biomes + blacklist highland
Investigation of 'no ores in BOP biomes' (highland, shrubland) reported during
in-game testing. Root cause: the early version of ConfigGatedFeaturesModifier
used a static firstCallLogged flag and threw when the COMMON config was not yet
loaded at biome-info build time, so its features were silently dropped. That
was already fixed (per-instance flag + try/catch defaulting to enabled); this
commit proves the fix end-to-end and removes the leftover debug logging.

Two automated proofs added (no manual in-game testing needed):

1. oreFeaturesAcrossBiomes GameTest: queries each biome holder's
   modifiableBiomeInfo().get() (the generation settings AFTER NeoForge applies
   every biome modifier). Result: every temperate biome - vanilla AND Biomes
   O' Plenty (shrubland, field, moor, grassland, woodland, mediterranean_forest)
   - contains the custom iron/coal/shard features. All 2 GameTests pass.

2. OreAuditHandler: a file-gated diagnostic (active only when run/.oreaudit
   exists) that runs on a dedicated server, generates real chunks under the
   latitude world type, scans actual ore blocks per surface biome, writes
   ore_audit_report.txt, then stops. Run with level-type=
   custom_ore_gen:ultra_wide_biome + the .oreaudit flag. Result on a 12x12
   chunk scan: biomes with ores=5, biomes with zero ores=0. BOP biomes
   (biomesoplenty:moor, biomesoplenty:grassland) contain iron, coal and shard
   diamond, identical to vanilla biomes. Totals: shard=89 iron=2667 coal=4803.

Design change: biomesoplenty:highland removed from latitude_temperate_surface,
mountain_biomes and tempered_biomes tags. The user finds the biome ugly; it no
longer generates. (Its ore generation was already correct - the removal is a
pure aesthetic preference, not an ore fix.)
2026-06-18 22:14:26 +02:00
feldenr 147c9d6b4a fix(biomes): remove cross-climate tag leaks (copper/gold in temperate spawn)
minecraft:birch_forest was listed in BOTH latitude_hot_surface AND
latitude_temperate_surface. Since ore generation is gated on the climate
tags, the hot-band ores (copper, pure gold, redstone) were spawning in
birch_forest - the default temperate spawn biome - so players found copper
in what looks like a temperate forest. birch_forest is a vanilla temperate
biome (temperature 0.6) and is the configured safe spawn; it never belonged
in the hot tag. Removed from hot, kept in temperate.

Also fixed a second leak: minecraft:windswept_forest was in BOTH temperate
AND cold, so it received both temperate (iron/coal) and cold (lapis/diamond)
ores. Kept in temperate only (windswept forest is not a genuinely cold biome
like snowy/taiga/grove).

Validated: each surface biome now belongs to exactly one climate tag (no
overlap). Latitude GameTest still green: spawn=birch_forest | north=100% |
south=100% | swamp=1.26% | deepDark=1.30% | caveBiomes=6.5%.
2026-06-17 21:34:07 +02:00
feldenr 48a0d797f0 feat(config): make ore feature toggles actually gate generation + cleanup
The feature toggles (enableConcentratedOres, enableImpureOres, ...) were
defined in config but never read: ConfigHelper.isFeatureEnabled() had no
caller, so the toggles were decorative. Wiring them is non-trivial because
NeoForge biome modifiers are loaded as data at bootstrap, before ModConfig
exists, so a data JSON cannot read a runtime config value directly.

Fix: a custom BiomeModifier (ConfigGatedFeaturesModifier) registered as
'custom_ore_gen:config_gated_features'. Its modify() runs at world load, when
the config is available, and only adds each feature group when its toggle is
on. The six add_*_biomes_ores.json modifiers now use this type, with each ore
mapped to its toggle:
  - shardDiamondOre       -> shard diamonds (surface + deep)
  - concentratedOres       -> concentrated coal, deepslate diamond
  - impureOres             -> iron (+deepslate)
  - pureGoldenOre          -> pure golden (+deepslate)
  - customCopperOres       -> copper high/lower
  - customEmeraldOres      -> emerald high/lower
  - vanillaOreVariants     -> lapis, redstone (+deepslate)

With all toggles defaulting to true, behaviour is identical to the previous
neoforge:add_features modifiers (code-equivalent), so existing worlds keep
their ores.

Also fixes a pre-existing bug: sharddiamondblockore (surface shard diamond)
was referenced by no biome modifier and never generated; it is now linked via
the shard diamond group (neoforge:any).

Dead code removed: the ash_coal feature/drop config (enableAshCoalOre,
ashCoalOreMinDrops/MaxDrops) and the 'ash_coal' drop case referenced an ore
block that was deleted long ago, plus the 'Temporarily use coal' placeholder.

Testing: the latitude GameTest still passes. A new oreGatingMatchesConfig test
verifies the shard feature presence in biome settings matches the toggle, but
skips with a note on runGameTestServer (its level is a void world with no
decoration features, so biome modifiers are not observable there); run it
against a real world to exercise the ON/OFF assertion.
2026-06-17 21:21:53 +02:00
feldenr 9182bda998 fix(drops): make iron/gold ores ignore Fortune like vanilla
Iron and Gold ores were the only ones reacting to Fortune (Fortune III could
yield up to 4 raw iron/gold per block). In vanilla 1.21, iron and gold ores
ignore Fortune entirely (the raw ore is smelted, not multiplied). Copper,
lapis and redstone legitimately keep Fortune (vanilla behavior), so those are
unchanged.

Added pureGoldenOreEnableFortune and impureIronOreEnableFortune config toggles
(default: false) for consistency with the other ores (which all have an
enableFortune toggle) and wired them into both the ConfigurableOreDropsProcedure
(XP path) and the CustomOreLootModifier (item drops path, authoritative).

Verified after a GameTest run that NeoForge merges the new keys with the
default false WITHOUT touching the user's existing custom drop values
(e.g. minDrops/maxDrops overrides are preserved). GameTest still green:
spawn=birch_forest | north=100% | south=100% | swamp=1.26% | deepDark=1.30%
| caveBiomes=6.5%.
2026-06-17 13:28:49 +02:00
feldenr 3ea6906369 fix(create): repair processing recipes + make them standalone-safe
The Create processing recipes (crushing/milling/mixing) were broken in two
ways, plus leaked parse errors when Create was absent.

1. Format migration to Create 6.x (matched against native recipes in the
   Create 6.0.9 jar):
   - results entries: item -> id
   - processingTime -> processing_time (snake_case)
   - ingredients keep item (still correct in 6.x)

2. Phantom item references: 9 recipes targeted blocks that no longer exist
   (renamed/removed ores). Reaffected 8 to their real block (e.g.
   highlapisore -> lapisore, goldore -> puregoldenore, highcopperore ->
   copperhighore) and deleted 9 with no real equivalent or that would
   duplicate an existing recipe (deepslate variants of coal/copper/emerald
   that don't exist as blocks).
   Result: all 16 registered ore blocks now have at least one valid Create
   recipe (15 direct + sharddiamond via the forge:ores/shard_diamond tag).

3. Standalone safety: wrapped all 20 Create recipes + the Mekanism enriching
   recipe in neoforge:conditions (mod_loaded) so they only parse when the
   target mod is present. Without this, the RecipeManager logged ERRORs
   (Unknown registry key create:crushing) on every boot when the mod ran
   alone. Conditions use the sibling format, verified empirically.

Validated both configurations via runGameTestServer:
  - Standalone (Create + Mekanism absent): 0 recipe parse errors, latitude OK
  - With all mods (BOP + Tectonic + Create + JEI): 0 parse errors, recipes
    load, latitude OK (spawn=birch_forest | north=100% | south=100% |
    swamp=1.26% | deepDark=1.30% | caveBiomes=6.5%)

The mod has no hard dependency on Create (no compile dep, no Java imports,
optional in mods.toml) and now boots cleanly with zero recipe errors whether
or not Create/Mekanism are installed.
2026-06-16 22:34:53 +02:00
feldenr dac57d3c63 fix: synchronize ore generation with latitude climate tags
The ore biome modifiers still referenced the legacy climate tags
(cold_biomes / tempered_biomes / hot_biomes) which were out of sync with the
new latitude system (latitude_cold_surface / _temperate_surface / _hot_surface).
As a result ores did not spawn where the player would expect them, several BOP
biomes got no ores at all, and surface ores leaked into oceans.

All three climate modifiers now point at the latitude surface tags, so ore
distribution follows the climate exactly. Because the latitude tags exclude
oceans, the fix also removes iron/coal generation under oceans.

Result (verified by coverage analysis):
  North (cold/frozen)      -> Lapis + Diamond          (27 biomes, +16 BOP)
  Equator (temperate/spawn)-> Iron + Coal             (31 biomes, +21 BOP)
  South (hot)              -> Gold + Copper + Redstone(22 biomes, +11 BOP)
  0 orphan surface biomes; no ocean surface ores. GameTest still green.
2026-06-16 21:41:25 +02:00
feldenr fa8c40652b test+feat: depth-slice map validation + tune cave thresholds to target
Add geological depth slices to the automated GameTest: it now samples the
latitude world at three depths and renders one PNG per depth (a top-down
'view' of that Y layer):
  - latitude_map_surface.png  (Y=64)
  - latitude_map_mid_cave.png (Y=-15)
  - latitude_map_deep.png     (Y=-50)
plus a report section per slice and new assertions:
  - Deep Dark must stay rare in the deep zone (<8%)
  - cave biomes (lush/dripstone) must stay a minority in mid-cave (<25%)

Cave biome colors are now distinct (lush=green, dripstone=orange, deep_dark=
teal) so the slices are readable.

Tuned the cave thresholds using the test as a fast feedback loop (BiomeSource-
only sampling, ~30s per run, mods-independent):
  - CAVE_THRESHOLD 0.55 -> 0.38   (lush/dripstone pockets now ~6.5%)
  - DEEP_DARK_THRESHOLD 0.88 -> 0.55 (Deep Dark now legendary ~1.3%; was 0%)

Validated with BOP + Tectonic:
  spawn=birch_forest | north=100% | south=100% | swamp=1.26% |
  deepDark=1.30% | caveBiomes=6.5%
2026-06-16 21:26:32 +02:00
feldenr 060b77b506 feat: rethink cave generation - latitude extends underground, Deep Dark legendary
The previous implementation forced a uniform cave-biome slab (lush/dripstone/
deep_dark) across all of Y<30, which overrode the latitude logic for a huge
volume and made the Deep Dark far too common.

New 3-zone underground model keeps the latitude surface biome as the default
at every depth (mining under a desert feels like the desert) and only carves
rare cave features on top:

- Near surface (Y >= 0): latitude biome as-is, no override.
- Mid caves (-30 <= Y < 0): lush/dripstone pockets (~8%) matching the climate
  (humid/warm bands -> lush, dry/cold bands -> dripstone).
- Deep zone (Y < -30): legendary Deep Dark pockets (~1%, very low-frequency
  noise so they form large rare regions suitable for Ancient Cities); the
  surface latitude biome otherwise.

Deep Dark is removed from the biome band pools and driven solely by its own
noise, restoring it to a rare, legendary discovery. Cave biomes are now
resolved once and declared in possibleBiomes. BiomeBand.underground() removed
(caves are climate-driven, not band-pool-driven).

Validated by GameTest (BOP + Tectonic): spawn=birch_forest | north=100% |
south=100% | swamp=1.26%.
2026-06-16 21:12:17 +02:00
feldenr 45213d3580 fix(test): use tag membership for climate band assertions
With Biomes O' Plenty installed, the FROZEN/HOT bands are filled with BOP
cold/hot biomes which the previous hardcoded vanilla-only assertion sets
did not include, causing a false failure (FROZEN measured 31% vs real ~100%).

Assertions now resolve the surface tags from the real registry and check
membership, so vanilla + BOP biomes are both counted. Adds a per-band
breakdown to the report for easier diagnostics.

Validated with Create + JEI + Biomes O' Plenty + Tectonic + deps:
  spawn=birch_forest | north=100% | south=100% | swamp=1.26%
2026-06-15 23:10:24 +02:00
feldenr 169a447f7b test: add automated latitude validation via GameTest server
Run `./gradlew runGameTestServer` to validate the latitude biome system
without manual in-game testing. Boots a headless game server (full biome
registry), samples a 32000x32000 grid through LatitudeBiomeSource, renders a
PNG map and writes a distribution report, then asserts climate invariants:
  - spawn on a safe biome (plains/forest)
  - FROZEN band dominated by cold/frozen biomes (>60%)
  - HOT band dominated by warm/hot biomes (>60%)
  - swamp remains rare in the temperate band (<15%)

Outputs land in run/gametest-results/latitude/ (latitude_map.png +
latitude_report.txt). Sampling is BiomeSource-only (no chunk generation),
so it runs in ~35s regardless of installed mods.

- LatitudeGameTest: @GameTestHolder + @PrefixGameTestTemplate(false)
- structure/empty_1x1.nbt: minimal 1x1x1 air structure required by GameTest
- build.gradle: add gameTestServer run configuration
2026-06-15 21:07:43 +02:00
feldenr 7729eeb65c feat: latitude biome system with two world types + map validation command
Add a latitude-based world generation system: biomes are distributed by Z
coordinate (frozen north -> temperate equator -> hot south) with extremely
large biomes on a continental scale, plus full Biomes O' Plenty support.

World types (selectable in the world creation 'World Type' button):
- Ultra Wide Biome: latitude biomes + vanilla terrain (immune to Tectonic
  via a private noise_settings copy under custom_ore_gen).
- Tectonic Ultra Wide Biome: latitude biomes + minecraft:overworld terrain
  (uses Tectonic when present, vanilla otherwise).

Core implementation:
- LatitudeBiomeSource: custom BiomeSource distributing biomes by latitude.
  Temperature derived from Z with a boundary wobble, dual-octave selector
  noise for a flat biome distribution (no biome dominates), land/ocean mask,
  underground cave layer, moisture-driven rare swamp/mangrove pockets, and a
  guaranteed safe spawn zone (plains/forests) around the origin.
- BiomeBand: 5 climate bands (FROZEN/COLD/TEMPERATE/WARM/HOT) with vanilla
  surface pools + dedicated climate tags (latitude_*_surface) for optional
  BOP biomes via required:false, plus ocean and underground pools.
- WorldGenRegistration: DeferredRegister for the 'custom_ore_gen:latitude'
  BiomeSource codec.
- LatitudeSpawnHandler: pins spawn to a plains/forest biome on overworld load.

Validation:
- /latitude map [radius] [step]: samples the LatitudeBiomeSource on a large
  grid, renders a top-down PNG map (run/latitude/latitude_map.png) and writes
  a per-band distribution + invariant report (run/latitude/latitude_report.txt).

Constants tuned for a continental scale:
  TEMPERATURE_SCALE = 16000 (equator->pole)
  SURFACE_SELECTOR_SCALE = 0.00033 (biomes ~3000 blocks wide)

Swamp fix: removed from the common temperate surface tag and made rare
(~8% of temperate land via moisture noise), matching vanilla humidity biomes.
2026-06-14 22:59:09 +02:00
feldenr 74480d9d2c feat: replace event-based drops with Global Loot Modifier (fix Create drill crash)
- Add CustomOreLootModifier (Global Loot Modifier) handling all ore drops,
  ensuring compatibility with machines (Create drill/contraptions) and avoiding
  duplication. Handles silk touch (vanilla block / shard diamond block) and
  fortune via config-driven min/max drops.
- Register GLM serializer via DeferredRegister in CustomOreGenMod (user code block)
- Rewrite OreBreakEventHandler: remove direct drops mutation that caused
  UnsupportedOperationException on immutable list when broken by Create drill.
  Drops are now fully GLM-driven; handler only triggers XP/procedure logic.
- Migrate loot tables from loot_table/ (singular, 1.20) to loot_tables/
  (plural, NeoForge 1.21 format) for all 16 ore blocks.
- Declare GLM in data/neoforge/loot_modifiers/global_loot_modifiers.json
- Add Create crushing + milling recipes for diamond -> diamond shards
- Config tweaks: tool durabilities (pickaxe/axe/shovel 450, paxel 800),
  Pure Golden Ore maxHeight 256 -> 320
- Refresh shard diamond armor/item textures
- Simplify unit tests for new drop system
2026-06-14 11:08:59 +02:00
feldenrandClaude 3ef6f03244 fix: make ore generation biome-specific and add command permissions
- Replace overworld-wide ore spawning with biome-specific generation
- Delete add_custom_ores.json that caused ores to spawn everywhere
- Create 6 biome-specific modifiers:
  * add_cold_biomes_ores.json - Lapis, concentrated diamond
  * add_hot_biomes_ores.json - Pure gold, copper, redstone
  * add_mountain_biomes_ores.json - High emerald
  * add_rare_biomes_ores.json - Lower emerald
  * add_tempered_biomes_ores.json - Iron, concentrated coal
  * add_shard_diamond_ores.json - Shard diamond (all biomes)
- Add permission level 2 requirement to /ores and /ore commands

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-03 14:06:50 +01:00
felden.r@grenoble.archi.fr 9e9c4d28d6 fix: resolve crash at startup by checking if config is loaded 2026-02-03 11:32:50 +01:00
felden.r@grenoble.archi.fr d0ae2916ad fix: resolve build errors and link tool/armor stats to config 2026-02-03 11:23:06 +01:00
felden.r@grenoble.archi.fr 7bd578797b chore: align ore drops and XP with vanilla 1.21 and add AGENTS.md guide 2026-02-03 09:23:25 +01:00
feldenr 93bb4afb97 refactor: cleanup block classes and migrate tests to NeoForge
- Removed onDestroyedByPlayer from blocks (now handled by OreBreakEventHandler)
- Updated tests to use NeoForge classes (ModConfigSpec instead of ForgeConfigSpec)
- Fixed EnchantabilityFix annotation and commented out placeholder code
- Updated pack.mcmeta format for 1.21.1
2026-02-02 23:21:11 +01:00
feldenr 0fa495474b fix: register config and update recipe formats for 1.21.1
- Registered ModConfigs.SPEC in CustomOreGenMod to avoid IllegalStateException
- Updated all recipe JSONs to use 'id' instead of 'item' in result fields
- Renamed mekanism recipes folder to match 1.21.1 conventions
2026-02-02 23:20:17 +01:00
feldenr bca6034dd7 fix: restore ore drops and make them configurable via procedure
- Renamed data folders to 1.21.1 standards (singular names)
- Implemented OreBreakEventHandler to call ConfigurableOreDropsProcedure
- Updated procedure and config to handle all custom and variant ores
- Modified loot tables to only handle Silk Touch (manual drops via procedure)
- Fixed missing drops issue caused by folder name mismatch in 1.21.1
2026-02-02 23:11:42 +01:00
feldenr 4b9a4b0a05 Fix custom ore drops and tool enchantability for 1.21 2026-02-02 22:24:52 +01:00
246 changed files with 7301 additions and 4666 deletions
+6 -1
View File
@@ -30,7 +30,12 @@
"Bash(dir \"C:\\\\Program Files\\\\Eclipse Adoptium\")", "Bash(dir \"C:\\\\Program Files\\\\Eclipse Adoptium\")",
"Bash(\"C:\\\\Program Files\\\\Java\\\\latest\\\\bin\\\\java.exe\":*)", "Bash(\"C:\\\\Program Files\\\\Java\\\\latest\\\\bin\\\\java.exe\":*)",
"Bash(/c/Program Files/Java/latest/bin/java.exe:*)", "Bash(/c/Program Files/Java/latest/bin/java.exe:*)",
"Bash(/c/Program Files/Java/jdk-24/bin/java.exe:*)" "Bash(/c/Program Files/Java/jdk-24/bin/java.exe:*)",
"Bash(git show:*)",
"Bash(git fetch:*)",
"Bash(git pull:*)",
"Bash(set:*)",
"Bash(JAVA_HOME=/c/Program Files/Java/jdk-24 ./gradlew:*)"
] ]
} }
} }
Binary file not shown.
Binary file not shown.
+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>custom_ore_gem</name>
<comment>Project custom_ore_gem created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
<filteredResources>
<filter>
<id>1770104171004</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
@@ -0,0 +1,13 @@
arguments=--init-script C\:\\Users\\felden.r\\.local\\share\\opencode\\bin\\jdtls\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle
auto.sync=false
build.scans.enabled=false
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
connection.project.dir=
eclipse.preferences.version=1
gradle.user.home=
java.home=C\:/Program Files/Java/jdk-1.8
jvm.arguments=
offline.mode=false
override.workspace.settings=true
show.console.view=true
show.executions.view=true
+172
View File
@@ -0,0 +1,172 @@
# Custom Ore Gem - Developer Guide for Agents
This repository is a Minecraft **NeoForge 1.21.1** mod created with **MCreator**. Agents must follow these strict guidelines to ensure build stability and code preservation.
## 1. Build & Test Commands
Use the Gradle wrapper for all operations. Ensure you are using Java 21 (NeoForge 1.21.1 requirement).
- **Build Mod:**
```bash
./gradlew build
```
- Generates the mod JAR in `build/libs/`.
- Always run this after making changes to verify compilation.
- **Run Client:**
```bash
./gradlew runClient
```
- **Run Server:**
```bash
./gradlew runServer
```
- **Run Data Generation:**
```bash
./gradlew runData
```
- This generates resources (blockstates, models, loot tables) into `src/generated/resources`.
- **Run All Tests:**
```bash
./gradlew test
```
- **Run Single Test Class:**
```bash
./gradlew test --tests "net.mcreator.customoregen.OresCommandTest"
```
- **Run Single Test Method:**
```bash
./gradlew test --tests "net.mcreator.customoregen.OresCommandTest.testCommandRegistration_ShouldRegisterOresCommand"
```
- **Clean Project:**
```bash
./gradlew clean
```
## 2. MCreator & Code Preservation
**CRITICAL:** This project is partially generated by MCreator.
- **Generated Files:** Many files in `src/main/java` are regenerated on every build or MCreator export.
- **User Code Blocks:** You **MUST** only edit code within designated user code blocks in these files.
```java
// Start of user code block [block_name]
// ... YOUR CODE HERE ...
// End of user code block [block_name]
```
- If a file does not have these blocks, assume it is **UNSAFE** to edit unless you created it yourself.
- **Safe Files:**
- Files strictly created by you (e.g., in `src/test/java`).
- New utility classes or event handlers not managed by MCreator.
- **Do NOT** directly modify the following unless inside a user block:
- `CustomOreGenModBlocks.java`
- `CustomOreGenModItems.java`
- `CustomOreGenModTabs.java`
- Any file in `net.mcreator.customoregen.procedures` (unless explicitly safe).
## 3. Code Style & Conventions
### Formatting
- **Indentation:**
- **Source Code (`src/main`):** Use **TABS** (default MCreator style).
- **Tests (`src/test`):** Use **4 SPACES** (typical for JUnit tests).
- **Consistency:** Always check the current file's indentation before editing.
- **Encoding:** UTF-8.
### Naming
- **Classes:** PascalCase (e.g., `CustomOreGenMod`).
- **Methods:** camelCase (e.g., `queueServerWork`).
- **Constants:** UPPER_SNAKE_CASE (e.g., `MODID`, `COLD_BIOMES_TAG`).
- **Fields:** camelCase (e.g., `workQueue`, `oreGenConfig`).
- **Packages:** `net.mcreator.customoregen` (lowercase).
### Imports
- Group imports in this specific order:
1. Java/Standard Libraries (`java.*`, `javax.*`)
2. Third-party Libraries (e.g., `org.apache.logging.log4j.*`)
3. Minecraft/NeoForge (`net.minecraft.*`, `net.neoforged.*`)
4. Project Classes (`net.mcreator.customoregen.*`)
- Avoid `import *` unless there are many imports from the same package (e.g., `java.util.*` is acceptable if heavily used, but explicit imports are preferred for clarity).
### Logging
- Use `LogManager.getLogger(Class.class)` for loggers.
- Field name: `LOGGER`.
- Log levels: Use `debug` for dev info, `info` for general status, `error` for exceptions.
## 4. Architecture & Patterns
- **Framework:** NeoForge 1.21.1 (Java 21).
- **Registries:** Use `DeferredRegister` for all registries (Blocks, Items, Tabs, SoundEvents).
- Example: `public static final DeferredRegister.Blocks REGISTRY = DeferredRegister.createBlocks(CustomOreGenMod.MODID);`
- **Event Bus:**
- The `@Mod` class registers the `IEventBus`.
- Use `@SubscribeEvent` for event handling.
- Event handlers often reside in `net.mcreator.customoregen.event` or static inner classes annotated with `@EventBusSubscriber`.
- **Configuration:**
- Located in `net.mcreator.customoregen.config.ModConfigs`.
- Uses `ModConfig.Type.COMMON` built with `ModConfigSpec`.
- Access configs via the public static fields (e.g., `ModConfigs.ORE_GEN.shardDiamondOreCount.get()`).
- **Commands:**
- Registered via `RegisterCommandsEvent`.
- Use Brigadier (`CommandDispatcher`, `CommandContext`).
- See `OresCommand.java` for the reference implementation.
## 5. Testing Guidelines
- **Framework:** JUnit 5 (Jupiter) + Mockito.
- **Location:** `src/test/java`.
- **Mocking Strategy:**
- Since a full Minecraft environment is not available in unit tests, you **MUST** mock Minecraft classes.
- Use `@ExtendWith(MockitoExtension.class)`.
- Mock critical classes: `@Mock ServerPlayer player`, `@Mock Level level`, `@Mock BlockPos pos`.
- Stub methods: `when(level.getBiome(pos)).thenReturn(biomeHolder);`.
- **Assertions:** Use `org.junit.jupiter.api.Assertions` (e.g., `assertEquals`, `assertDoesNotThrow`).
## 6. Common Tasks
- **Adding a New Ore:**
1. Create Block & Item (MCreator/Manual).
2. Add JSONs: Loot Table, Configured Feature, Placed Feature, Biome Modifier.
3. Register in `CustomOreGenModBlocks` and `CustomOreGenModItems`.
4. Update `OresCommand.java` lists (e.g., `COLD_ORES`, `HOT_ORES`) to make it discoverable.
5. Update `OreBreakEventHandler.java` if it has custom drops logic.
6. Add to `ModConfigs.java` for generation parameters (vein size, count, etc.).
- **Modifying Logic:**
- Check `procedures/` for game logic (often MCreator generated).
- Check `event/` for event-driven logic.
- Always verify if logic changes need a corresponding test update.
## 7. Safety & Verification
- **Backups:** If you are unsure about MCreator regeneration, backup the file before editing.
- **Verification:**
- Always run `./gradlew build` after changes to ensure no compilation errors.
- If you touch config files, ensure `ModConfigsTest` still passes.
- If you touch commands, ensure `OresCommandTest` still passes.
## 8. Directory Structure
```
src/
├── main/
│ ├── java/net/mcreator/customoregen/
│ │ ├── block/ # Block definitions
│ │ ├── config/ # Configuration classes
│ │ ├── event/ # Event handlers
│ │ ├── init/ # Registration (Blocks, Items, Tabs)
│ │ ├── item/ # Item definitions
│ │ └── procedures/ # Game logic procedures
│ └── resources/ # Assets and data (textures, models, lang)
└── test/
└── java/net/mcreator/customoregen/ # Unit tests
```
+48 -5
View File
@@ -57,6 +57,7 @@ net.mcreator.customoregen/
├── block/ # Ore block classes (17 blocks) ├── block/ # Ore block classes (17 blocks)
├── item/ # Items (Diamond Shard, tools, armor, Paxel, OreBiomeFinder) ├── item/ # Items (Diamond Shard, tools, armor, Paxel, OreBiomeFinder)
├── config/ # NeoForge configuration system (ModConfigs.java) ├── config/ # NeoForge configuration system (ModConfigs.java)
├── event/ # Event handlers (OreBreakEventHandler, EnchantabilityFix)
├── procedures/ # Game logic (ConfigurableOreDropsProcedure, OreexperienceProcedure) ├── procedures/ # Game logic (ConfigurableOreDropsProcedure, OreexperienceProcedure)
└── init/ └── init/
├── CustomOreGenModBlocks.java # Block registry (deferred register) ├── CustomOreGenModBlocks.java # Block registry (deferred register)
@@ -76,13 +77,13 @@ The mod uses **NeoForge** biome modifiers to distribute ores based on biome temp
- `tempered_biomes.json` - Temperate biomes (iron, concentrated coal) - `tempered_biomes.json` - Temperate biomes (iron, concentrated coal)
- BOP biomes are included with `"required": false` for optional compatibility - BOP biomes are included with `"required": false` for optional compatibility
2. **Biome Modifiers** (`src/main/resources/data/custom_ore_gen/forge/biome_modifier/`): 2. **Biome Modifiers** (`src/main/resources/data/custom_ore_gen/neoforge/biome_modifier/`):
- Each ore has a JSON file linking it to biome tags - Each ore has a JSON file linking it to biome tags
- Special case: `deepslatesharddiamondore_biome_modifier.json` uses `"type": "forge:any"` for all biomes - Special case: `deepslatesharddiamondore_biome_modifier.json` uses `"type": "forge:any"` for all biomes
- **JSON Structure**: - **JSON Structure**:
```json ```json
{ {
"type": "forge:add_features", "type": "neoforge:add_features",
"biomes": "custom_ore_gen:cold_biomes", // or {"type": "forge:any"} for all biomes "biomes": "custom_ore_gen:cold_biomes", // or {"type": "forge:any"} for all biomes
"features": "custom_ore_gen:deepslatesharddiamondore", "features": "custom_ore_gen:deepslatesharddiamondore",
"step": "underground_ores" "step": "underground_ores"
@@ -111,10 +112,11 @@ Located in `src/main/java/net/mcreator/customoregen/config/`:
- Generated config file: `config/custom_ore_gen-common.toml` (created on first run) - Generated config file: `config/custom_ore_gen-common.toml` (created on first run)
**Current Implementation Status**: **Current Implementation Status**:
- **✅ Ore Drops**: Fully implemented via `OreBreakEventHandler.java` which listens to `BlockEvent.BreakEvent` and calls `ConfigurableOreDropsProcedure.execute()` for all custom ores
- **⚠️ Tool Stats**: Config classes exist in `ModConfigs.java`, but tools currently have hardcoded values (e.g., `SharddiamondpickaxeItem.java:18` has `return 200` for durability). Config reading not yet implemented. - **⚠️ Tool Stats**: Config classes exist in `ModConfigs.java`, but tools currently have hardcoded values (e.g., `SharddiamondpickaxeItem.java:18` has `return 200` for durability). Config reading not yet implemented.
- **⚠️ Ore Drops**: `ConfigurableOreDropsProcedure.java` exists but requires MCreator integration to link to block loot tables
- **⚠️ Feature Toggles**: Defined in `FeatureToggleConfig` but not yet wired to block/item registration conditional logic - **⚠️ Feature Toggles**: Defined in `FeatureToggleConfig` but not yet wired to block/item registration conditional logic
- **⚠️ Ore Generation**: Config values exist but worldgen JSON files still use hardcoded values - **⚠️ Ore Generation**: Config values exist but worldgen JSON files still use hardcoded values
- **⚠️ Enchantability**: `EnchantabilityFix.java` exists but is commented out - enchantment values not yet applied to items
### Ore Biome Finder ### Ore Biome Finder
@@ -131,12 +133,13 @@ The `OreBiomeFinderItem` (`item/OreBiomeFinderItem.java`) and `/ores` command (`
To add a new ore type (requires MCreator for full integration): To add a new ore type (requires MCreator for full integration):
1. **Create the block** in MCreator with proper properties (sound type, harvest level, etc.) 1. **Create the block** in MCreator with proper properties (sound type, harvest level, etc.)
2. **Add loot table** at `src/main/resources/data/custom_ore_gen/loot_tables/blocks/{orename}.json` 2. **Add loot table** at `src/main/resources/data/custom_ore_gen/loot_table/blocks/{orename}.json` (note: `loot_table` not `loot_tables`)
3. **Add configured_feature** JSON in `src/main/resources/data/custom_ore_gen/worldgen/configured_feature/` 3. **Add configured_feature** JSON in `src/main/resources/data/custom_ore_gen/worldgen/configured_feature/`
4. **Add placed_feature** JSON in `src/main/resources/data/custom_ore_gen/worldgen/placed_feature/` 4. **Add placed_feature** JSON in `src/main/resources/data/custom_ore_gen/worldgen/placed_feature/`
5. **Create biome_modifier** JSON in `src/main/resources/data/custom_ore_gen/forge/biome_modifier/` linking to a biome tag (or create a new tag in `tags/worldgen/biome/`) 5. **Create biome_modifier** JSON in `src/main/resources/data/custom_ore_gen/neoforge/biome_modifier/` linking to a biome tag (or create a new tag in `tags/worldgen/biome/`)
6. **Add BOP entries** (optional) to appropriate biome tag JSON files with `"required": false` wrapper 6. **Add BOP entries** (optional) to appropriate biome tag JSON files with `"required": false` wrapper
7. **Update `OreBiomeFinderItem.java`** to add the new ore to the appropriate category list 7. **Update `OreBiomeFinderItem.java`** to add the new ore to the appropriate category list
8. **Add ore type mapping** in `OreBreakEventHandler.java` if you want configurable drops via `ConfigurableOreDropsProcedure`
## User Code Sections ## User Code Sections
@@ -156,6 +159,36 @@ public static final Supplier<Item> ORE_BIOME_FINDER = REGISTRY.register("ore_bio
**Important**: Custom items like the Ore Biome Finder, Shard Diamond armor, and Paxel are registered in this protected section and will survive MCreator rebuilds. **Important**: Custom items like the Ore Biome Finder, Shard Diamond armor, and Paxel are registered in this protected section and will survive MCreator rebuilds.
## Event Handlers
The mod uses NeoForge's event system for ore processing:
### OreBreakEventHandler
- Listens to `BlockEvent.BreakEvent` with `@SubscribeEvent`
- Maps custom ore blocks to ore type strings (`shard_diamond`, `concentrated_coal`, `pure_golden`, etc.)
- Calls `ConfigurableOreDropsProcedure.execute()` with ore type when player breaks ore with correct tool
- Supports 10 ore types: shard_diamond, concentrated_coal, pure_golden, impure_iron, concentrated_diamond, lapis, redstone, emerald, copper
### EnchantabilityFix
- Uses `ModifyDefaultComponentsEvent` to set enchantability values on tools and armor
- Currently **commented out** - enchantability not yet applied
- When active, should set `DataComponents.ENCHANTABLE` with value 9 (tools) or 14 (armor)
## Loot Table Format
NeoForge 1.21 uses `loot_table` (singular) instead of `loot_tables` (plural):
- Location: `src/main/resources/data/custom_ore_gen/loot_table/blocks/{orename}.json`
- Includes Silk Touch support via `match_tool` condition
- Uses `random_sequence` for loot table randomization
- Example structure in `deepslatesharddiamondore.json` shows Silk Touch → drop block, otherwise drops handled by `OreBreakEventHandler`
## Vanilla Ore Removal
The mod removes vanilla ores via NeoForge biome modifiers (NOT KubeJS anymore):
- `src/main/resources/data/custom_ore_gen/neoforge/biome_modifier/remove_vanilla_ores.json`
- Uses `neoforge:remove_features` type to remove vanilla ore generation
- This replaces the old KubeJS automatic script system from Forge 1.20.1
## Biomes O' Plenty Integration ## Biomes O' Plenty Integration
The mod includes BOP biome support through biome tag entries. BOP biomes are wrapped with: The mod includes BOP biome support through biome tag entries. BOP biomes are wrapped with:
@@ -175,6 +208,16 @@ After making changes:
2. Run `./gradlew runClient` to test in-game 2. Run `./gradlew runClient` to test in-game
3. Check logs in `run/logs/` for errors 3. Check logs in `run/logs/` for errors
## Enchantment Tags
The mod includes enchantment tags at `src/main/resources/data/minecraft/tags/item/enchantable/`:
- **armor.json** - Marks Shard Diamond armor pieces as enchantable
- **durability.json** - Marks tools and armor for durability enchantments
- **mining.json** - Marks pickaxes, shovels, and paxel as mining tools
- **weapon.json** - Marks axes as weapons
These tags enable proper enchantment behavior for custom items in the enchanting table and anvil.
## Important Notes ## Important Notes
### README Disclaimer ### README Disclaimer
+14
View File
@@ -52,6 +52,11 @@ neoForge {
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
} }
gameTestServer {
type = 'gameTestServer'
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}
data { data {
data() data()
programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
@@ -79,6 +84,11 @@ configurations {
dependencies { dependencies {
// KubeJS dependency - version will need to be updated for 1.21 // KubeJS dependency - version will need to be updated for 1.21
// localRuntime "dev.latvian.mods:kubejs-neoforge:${kubejs_version}" // localRuntime "dev.latvian.mods:kubejs-neoforge:${kubejs_version}"
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
testImplementation 'org.mockito:mockito-core:4.5.1'
testImplementation 'org.mockito:mockito-junit-jupiter:4.5.1'
} }
tasks.withType(ProcessResources).configureEach { tasks.withType(ProcessResources).configureEach {
@@ -105,6 +115,10 @@ tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' options.encoding = 'UTF-8'
} }
tasks.withType(Test).configureEach {
useJUnitPlatform()
}
idea { idea {
module { module {
downloadSources = true downloadSources = true
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:tempered_biomes",
"features": "custom_ore_gen:concentratedcoalore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:hot_biomes",
"features": "custom_ore_gen:copperhighore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:hot_biomes",
"features": "custom_ore_gen:copperlowerore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:cold_biomes",
"features": "custom_ore_gen:deepslatediamondore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:tempered_biomes",
"features": "custom_ore_gen:deepslateironore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:cold_biomes",
"features": "custom_ore_gen:deepslatelapisore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:hot_biomes",
"features": "custom_ore_gen:deepslatepuregoldenore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:hot_biomes",
"features": "custom_ore_gen:deepslateredstoneore",
"step": "underground_ores"
}
@@ -1,8 +0,0 @@
{
"type": "forge:add_features",
"biomes": {
"type": "forge:any"
},
"features": "custom_ore_gen:deepslatesharddiamondore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:mountain_biomes",
"features": "custom_ore_gen:highemeraldore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:tempered_biomes",
"features": "custom_ore_gen:ironore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:cold_biomes",
"features": "custom_ore_gen:lapisore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:rare_biomes",
"features": "custom_ore_gen:loweremeraldore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:hot_biomes",
"features": "custom_ore_gen:puregoldenore",
"step": "underground_ores"
}
@@ -1,6 +0,0 @@
{
"type": "forge:add_features",
"biomes": "#custom_ore_gen:hot_biomes",
"features": "custom_ore_gen:redstoneore",
"step": "underground_ores"
}
@@ -1,8 +0,0 @@
{
"type": "forge:add_features",
"biomes": {
"type": "forge:any"
},
"features": "custom_ore_gen:sharddiamondblockore",
"step": "underground_ores"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:coal",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 2
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:coal_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/concentratedcoalore"
}
@@ -1,85 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": {
"min": 1,
"max": 2
},
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:raw_copper",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 2,
"max": 5
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:copper_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/copperhighore"
}
@@ -1,85 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": {
"min": 1,
"max": 2
},
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:raw_copper",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 2,
"max": 6
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:deepslate_copper_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/copperlowerore"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:diamond",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 2
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:diamond_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/deepslatediamondore"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:raw_iron",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "custom_ore_gen:deepslateironore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/deepslateironore"
}
@@ -1,90 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:lapis_lazuli",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 4,
"max": 6
}
},
{
"function": "enchant_with_levels",
"treasure": true,
"levels": {
"min": 1,
"max": 10
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:deepslate_lapis_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/deepslatelapisore"
}
@@ -1,89 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": {
"min": 1,
"max": 2
},
"bonus_rolls": {
"min": 1,
"max": 2
},
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:raw_gold",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 2
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:gold_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/deepslatepuregoldenore"
}
@@ -1,85 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": {
"min": 1,
"max": 2
},
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:redstone",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 4,
"max": 6
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:deepslate_redstone_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/deepslateredstoneore"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "custom_ore_gen:diamondshard",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 2
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "custom_ore_gen:deepslatesharddiamondore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/deepslatesharddiamondore"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:emerald",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:emerald_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/highemeraldore"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:raw_iron",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:iron_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/ironore"
}
@@ -1,90 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:lapis_lazuli",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 4,
"max": 8
}
},
{
"function": "enchant_with_levels",
"treasure": true,
"levels": {
"min": 0,
"max": 5
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:lapis_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/lapisore"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:emerald",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 2
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:deepslate_emerald_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/loweremeraldore"
}
@@ -1,89 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": {
"min": 1,
"max": 2
},
"bonus_rolls": {
"min": 1,
"max": 2
},
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:raw_gold",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 2
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:gold_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/puregoldenore"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:redstone",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 4,
"max": 5
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:redstone_ore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/redstoneore"
}
@@ -1,82 +0,0 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "custom_ore_gen:diamondshard",
"weight": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 2
}
},
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "custom_ore_gen:sharddiamondblockore",
"weight": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 1
}
}
]
}
]
}
],
"random_sequence": "custom_ore_gen:blocks/sharddiamondblockore"
}
@@ -1,18 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"aaa",
"aaa",
"aaa"
],
"key": {
"a": {
"item": "custom_ore_gen:diamondshard"
}
},
"result": {
"item": "minecraft:diamond",
"count": 1
}
}
@@ -1,21 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"aaa",
" b ",
" b "
],
"key": {
"a": {
"item": "custom_ore_gen:diamondshard"
},
"b": {
"item": "minecraft:stick"
}
},
"result": {
"item": "custom_ore_gen:sharddiamondpickaxe",
"count": 1
}
}
@@ -1,24 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"DSD",
"SCS",
"DSD"
],
"key": {
"D": {
"item": "custom_ore_gen:diamondshard"
},
"S": {
"item": "minecraft:soul_sand"
},
"C": {
"item": "minecraft:soul_soil"
}
},
"result": {
"item": "minecraft:sculk_catalyst",
"count": 1
}
}
@@ -1,21 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"category": "equipment",
"pattern": [
"aDa",
"a a",
"a a"
],
"key": {
"a": {
"item": "custom_ore_gen:diamondshard"
},
"D": {
"item": "minecraft:diamond"
}
},
"result": {
"item": "custom_ore_gen:sharddiamondleggings",
"count": 1
}
}
@@ -1,27 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"category": "equipment",
"pattern": [
"PSA",
" T ",
" T "
],
"key": {
"P": {
"item": "custom_ore_gen:sharddiamondpickaxe"
},
"S": {
"item": "custom_ore_gen:sharddiamondshovel"
},
"A": {
"item": "custom_ore_gen:sharddiamondaxe"
},
"T": {
"item": "minecraft:stick"
}
},
"result": {
"item": "custom_ore_gen:sharddiamondpaxel",
"count": 1
}
}
@@ -1,12 +0,0 @@
{
"type": "mekanism:enriching",
"input": {
"ingredient": {
"tag": "forge:ores/shard_diamond"
}
},
"output": {
"item": "custom_ore_gen:diamondshard",
"count": 2
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"pack": { "pack": {
"pack_format": 15, "pack_format": 48,
"description": "Changement de la distribution des ressources sur Minecraft, ne pas utilisé seul sans KubeJS" "description": "Changement de la distribution des ressources sur Minecraft, ne pas utilisé seul sans KubeJS"
} }
} }
Binary file not shown.
+1 -1
View File
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G
org.gradle.daemon=true org.gradle.daemon=true
# Mod Properties # Mod Properties
mod_version=3.0 mod_version=3.2
mod_id=custom_ore_gen mod_id=custom_ore_gen
mod_name=Custom Ore Gen mod_name=Custom Ore Gen
mod_group_id=com.aulyrius.custom_ore_gen mod_group_id=com.aulyrius.custom_ore_gen
-123
View File
@@ -1,123 +0,0 @@
// Custom Ore Gem - Commande pour voir les minerais du biome actuel
// Placez ce fichier dans: kubejs/server_scripts/
// Commande: /ores
ServerEvents.commandRegistry(event => {
const oresByBiome = {
// Biomes froids (taiga, snowy_*, frozen_*, ice_spikes, grove, cold_ocean)
cold: {
biomes: ['minecraft:taiga', 'minecraft:frozen_ocean', 'minecraft:frozen_river',
'minecraft:snowy_plains', 'minecraft:snowy_beach', 'minecraft:snowy_taiga',
'minecraft:old_growth_pine_taiga', 'minecraft:grove', 'minecraft:snowy_slopes',
'minecraft:jagged_peaks', 'minecraft:frozen_peaks', 'minecraft:cold_ocean',
'minecraft:deep_cold_ocean', 'minecraft:deep_frozen_ocean', 'minecraft:ice_spikes'],
ores: ['Lapis (stone)', 'Lapis (deepslate)', 'Diamant Concentre']
},
// Biomes chauds (desert, jungle, savanna, badlands)
hot: {
biomes: ['minecraft:desert', 'minecraft:jungle', 'minecraft:sparse_jungle',
'minecraft:savanna', 'minecraft:savanna_plateau', 'minecraft:stony_peaks',
'minecraft:warm_ocean', 'minecraft:windswept_savanna', 'minecraft:eroded_badlands',
'minecraft:bamboo_jungle', 'minecraft:mangrove_swamp', 'minecraft:badlands',
'minecraft:wooded_badlands'],
ores: ['Or Pur (stone)', 'Or Pur (deepslate)', 'Redstone (stone)',
'Redstone (deepslate)', 'Cuivre (haut)', 'Cuivre (bas)']
},
// Biomes montagnes (peaks, slopes, meadow)
mountain: {
biomes: ['minecraft:jagged_peaks', 'minecraft:frozen_peaks', 'minecraft:stony_peaks',
'minecraft:savanna_plateau', 'minecraft:wooded_badlands', 'minecraft:meadow',
'minecraft:grove', 'minecraft:snowy_slopes', 'minecraft:windswept_hills'],
ores: ['Emeraude (haute altitude)']
},
// Biomes tempérés (plains, forest, swamp, coniferous)
tempered: {
biomes: ['minecraft:plains', 'minecraft:snowy_plains', 'minecraft:meadow',
'minecraft:sunflower_plains', 'minecraft:swamp', 'minecraft:mangrove_swamp',
'minecraft:taiga', 'minecraft:snowy_taiga', 'minecraft:old_growth_pine_taiga',
'minecraft:grove', 'minecraft:cherry_grove', 'minecraft:windswept_hills',
'minecraft:windswept_forest', 'minecraft:beach', 'minecraft:river', 'minecraft:stony_shore',
'minecraft:ocean', 'minecraft:lukewarm_ocean', 'minecraft:deep_ocean',
'minecraft:deep_lukewarm_ocean', 'minecraft:dripstone_caves', 'minecraft:lush_caves'],
ores: ['Charbon Concentre', 'Fer (stone)', 'Fer (deepslate)']
},
// Biomes rares (mushroom_fields, flower_forest, ice_spikes, etc.)
rare: {
biomes: ['minecraft:mushroom_fields', 'minecraft:sparse_jungle', 'minecraft:savanna_plateau',
'minecraft:sunflower_plains', 'minecraft:windswept_gravelly_hills',
'minecraft:flower_forest', 'minecraft:ice_spikes', 'minecraft:old_growth_birch_forest',
'minecraft:old_growth_spruce_taiga', 'minecraft:windswept_savanna',
'minecraft:eroded_badlands', 'minecraft:bamboo_jungle', 'minecraft:deep_dark',
'minecraft:dark_forest'],
ores: ['Emeraude (basse altitude)']
}
}
const oresEverywhere = ['Diamant Shard (deepslate)', 'Bloc Diamant Shard']
// Enregistrement de la commande /ores
const oresCmd = event.register('ores')
oresCmd.executes(function (ctx) {
const player = ctx.source.player
if (!player) {
ctx.source.sendFailure('Cette commande ne peut etre utilisee que par un joueur')
return 1
}
const level = player.getLevel()
const pos = player.blockPosition()
const biomeHolder = level.getBiome(pos)
if (!biomeHolder) {
ctx.source.sendFailure('Impossible de determiner le biome')
return 1
}
const biomeKey = biomeHolder.unwrapKey().toString()
const biomeName = biomeHolder.value().getName().getString()
const biomeId = biomeKey.replace('minecraft:', '').replace(/^.*:/, '')
// Trouver les minerais pour ce biome
const foundOres = Java.to(['empty'], 'java.util.Set')
const foundCategories = []
for (const category in oresByBiome) {
const data = oresByBiome[category]
if (data.biomes.indexOf(biomeKey) >= 0 || data.biomes.indexOf('minecraft:' + biomeId) >= 0) {
for (let i = 0; i < data.ores.length; i++) {
foundOres.add(data.ores[i])
}
foundCategories.push(category)
}
}
// Ajouter les minerais presents partout
for (let i = 0; i < oresEverywhere.length; i++) {
foundOres.add(oresEverywhere[i])
}
// Afficher le resultat
ctx.source.sendSuccess('=== Minerais dans: ' + biomeName + ' ===')
ctx.source.sendSuccess('Biome ID: ' + biomeId)
ctx.source.sendSuccess('Tags: ' + (foundCategories.join(', ') || 'standard'))
if (foundOres.size() > 0) {
ctx.source.sendSuccess('Minerais trouvables:')
const iterator = foundOres.iterator()
while (iterator.hasNext()) {
ctx.source.sendSuccess(' * ' + iterator.next())
}
} else {
ctx.source.sendSuccess('Aucun minerai specifique a ce biome')
}
return 1
})
// Alias /ore
const oreCmd = event.register('ore')
oreCmd.executes(function (ctx) {
ctx.source.server.commands.executeCommand(ctx.source.source, 'ores')
return 1
})
})
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+824 -675
View File
File diff suppressed because it is too large Load Diff
+225 -68
View File
@@ -1,15 +1,15 @@
[02févr.2026 16:32:04.536] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--launchTarget, forgeclientdev, --version, 21.1.219, --assetIndex, 17, --assetsDir, C:\\Users\\felden.r\\.gradle\\caches\\neoformruntime\\assets, --gameDir, ., --fml.fmlVersion, 4.0.42, --fml.mcVersion, 1.21.1, --fml.neoForgeVersion, 21.1.219, --fml.neoFormVersion, 20240808.144430] [03févr.2026 11:23:32.725] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--launchTarget, forgeclientdev, --version, 21.1.219, --assetIndex, 17, --assetsDir, C:\\Users\\felden.r\\.gradle\\caches\\neoformruntime\\assets, --gameDir, ., --fml.fmlVersion, 4.0.42, --fml.mcVersion, 1.21.1, --fml.neoForgeVersion, 21.1.219, --fml.neoFormVersion, 20240808.144430]
[02févr.2026 16:32:04.540] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: JVM identified as Eclipse Adoptium OpenJDK 64-Bit Server VM 21.0.8+9-LTS [03févr.2026 11:23:32.728] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: JVM identified as Eclipse Adoptium OpenJDK 64-Bit Server VM 21.0.8+9-LTS
[02févr.2026 16:32:04.542] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 11.0.5+main.901c6ea8 starting: java version 21.0.8 by Eclipse Adoptium; OS Windows 11 arch amd64 version 10.0 [03févr.2026 11:23:32.730] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 11.0.5+main.901c6ea8 starting: java version 21.0.8 by Eclipse Adoptium; OS Windows 11 arch amd64 version 10.0
[02févr.2026 16:32:04.659] [main/WARN] [net.neoforged.fml.loading.FMLConfig/CORE]: Configuration file C:\Users\felden.r\Desktop\Perso\custom_ore_gen\custom_ore_gem\run\config\fml.toml is not correct. Correcting [03févr.2026 11:23:32.837] [main/WARN] [net.neoforged.fml.loading.FMLConfig/CORE]: Configuration file C:\Users\felden.r\Desktop\Perso\custom_ore_gen\custom_ore_gem\run\config\fml.toml is not correct. Correcting
[02févr.2026 16:32:04.713] [main/INFO] [net.neoforged.fml.loading.ImmediateWindowHandler/]: Loading ImmediateWindowProvider fmlearlywindow [03févr.2026 11:23:32.889] [main/INFO] [net.neoforged.fml.loading.ImmediateWindowHandler/]: Loading ImmediateWindowProvider fmlearlywindow
[02févr.2026 16:32:04.876] [main/INFO] [EARLYDISPLAY/]: Trying GL version 4.6 [03févr.2026 11:23:33.084] [main/INFO] [EARLYDISPLAY/]: Trying GL version 4.6
[02févr.2026 16:32:04.954] [main/INFO] [EARLYDISPLAY/]: Requested GL version 4.6 got version 4.6 [03févr.2026 11:23:33.178] [main/INFO] [EARLYDISPLAY/]: Requested GL version 4.6 got version 4.6
[02févr.2026 16:32:05.186] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.7 Source=union:/C:/Users/felden.r/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.15.2+mixin.0.8.7/2af2f021d8e02a0220dc27a7a72b4666d66d44ca/sponge-mixin-0.15.2+mixin.0.8.7.jar%23138!/ Service=ModLauncher Env=CLIENT [03févr.2026 11:23:33.330] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.7 Source=union:/C:/Users/felden.r/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.15.2+mixin.0.8.7/2af2f021d8e02a0220dc27a7a72b4666d66d44ca/sponge-mixin-0.15.2+mixin.0.8.7.jar%23138!/ Service=ModLauncher Env=CLIENT
[02févr.2026 16:32:05.211] [main/WARN] [net.neoforged.fml.loading.FMLConfig/CORE]: Configuration file C:\Users\felden.r\Desktop\Perso\custom_ore_gen\custom_ore_gem\run\config\fml.toml is not correct. Correcting [03févr.2026 11:23:33.346] [main/WARN] [net.neoforged.fml.loading.FMLConfig/CORE]: Configuration file C:\Users\felden.r\Desktop\Perso\custom_ore_gen\custom_ore_gem\run\config\fml.toml is not correct. Correcting
[02févr.2026 16:32:05.536] [pool-2-thread-1/INFO] [EARLYDISPLAY/]: GL info: Intel(R) UHD Graphics GL version 4.6.0 - Build 31.0.101.2135, Intel [03févr.2026 11:23:33.672] [pool-2-thread-1/INFO] [EARLYDISPLAY/]: GL info: Intel(R) UHD Graphics GL version 4.6.0 - Build 31.0.101.2135, Intel
[02févr.2026 16:32:06.095] [main/INFO] [net.neoforged.fml.loading.moddiscovery.locators.JarInJarDependencyLocator/]: Found 4 dependencies adding them to mods collection [03févr.2026 11:23:34.022] [main/INFO] [net.neoforged.fml.loading.moddiscovery.locators.JarInJarDependencyLocator/]: Found 4 dependencies adding them to mods collection
[02févr.2026 16:32:06.097] [main/INFO] [net.neoforged.fml.loading.moddiscovery.ModDiscoverer/]: [03févr.2026 11:23:34.025] [main/INFO] [net.neoforged.fml.loading.moddiscovery.ModDiscoverer/]:
Mod List: Mod List:
Name Version (Mod Id) Name Version (Mod Id)
@@ -20,59 +20,216 @@
Minecraft 1.21.1 (minecraft) Minecraft 1.21.1 (minecraft)
NeoForge 21.1.219 (neoforge) NeoForge 21.1.219 (neoforge)
TerraBlender 4.1.0.8 (terrablender) TerraBlender 4.1.0.8 (terrablender)
[02févr.2026 16:32:08.141] [main/INFO] [mixin/]: Compatibility level set to JAVA_17 [03févr.2026 11:23:35.251] [main/INFO] [mixin/]: Compatibility level set to JAVA_17
[02févr.2026 16:32:08.178] [main/INFO] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Launching target 'forgeclientdev' with arguments [--version, 21.1.219, --gameDir, ., --assetsDir, C:\Users\felden.r\.gradle\caches\neoformruntime\assets, --assetIndex, 17] [03févr.2026 11:23:35.276] [main/INFO] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Launching target 'forgeclientdev' with arguments [--version, 21.1.219, --gameDir, ., --assetsDir, C:\Users\felden.r\.gradle\caches\neoformruntime\assets, --assetIndex, 17]
[02févr.2026 16:32:08.266] [main/WARN] [mixin/]: Reference map 'terrablender.refmap.json' for terrablender.mixins.json could not be read. If this is a development environment you can ignore this message [03févr.2026 11:23:35.344] [main/WARN] [mixin/]: Reference map 'terrablender.refmap.json' for terrablender.mixins.json could not be read. If this is a development environment you can ignore this message
[02févr.2026 16:32:08.267] [main/WARN] [mixin/]: Reference map 'terrablender.refmap.json' for terrablender_neoforge.mixins.json could not be read. If this is a development environment you can ignore this message [03févr.2026 11:23:35.345] [main/WARN] [mixin/]: Reference map 'terrablender.refmap.json' for terrablender_neoforge.mixins.json could not be read. If this is a development environment you can ignore this message
[02févr.2026 16:32:08.268] [main/WARN] [mixin/]: Reference map 'glitchcore.refmap.json' for glitchcore.mixins.json could not be read. If this is a development environment you can ignore this message [03févr.2026 11:23:35.346] [main/WARN] [mixin/]: Reference map 'glitchcore.refmap.json' for glitchcore.mixins.json could not be read. If this is a development environment you can ignore this message
[02févr.2026 16:32:08.269] [main/WARN] [mixin/]: Reference map 'glitchcore.refmap.json' for glitchcore.neoforge.mixins.json could not be read. If this is a development environment you can ignore this message [03févr.2026 11:23:35.347] [main/WARN] [mixin/]: Reference map 'glitchcore.refmap.json' for glitchcore.neoforge.mixins.json could not be read. If this is a development environment you can ignore this message
[02févr.2026 16:32:08.271] [main/WARN] [mixin/]: Reference map 'biomesoplenty.refmap.json' for biomesoplenty.mixins.json could not be read. If this is a development environment you can ignore this message [03févr.2026 11:23:35.348] [main/WARN] [mixin/]: Reference map 'biomesoplenty.refmap.json' for biomesoplenty.mixins.json could not be read. If this is a development environment you can ignore this message
[02févr.2026 16:32:08.272] [main/WARN] [mixin/]: Reference map 'biomesoplenty.refmap.json' for biomesoplenty.neoforge.mixins.json could not be read. If this is a development environment you can ignore this message [03févr.2026 11:23:35.348] [main/WARN] [mixin/]: Reference map 'biomesoplenty.refmap.json' for biomesoplenty.neoforge.mixins.json could not be read. If this is a development environment you can ignore this message
[02févr.2026 16:32:08.289] [main/INFO] [net.werdei.biome_replacer.BiomeReplacer/]: [BiomeReplacer] TerraBlender detected, biome replacements will be injected into it [03févr.2026 11:23:35.361] [main/INFO] [net.werdei.biome_replacer.BiomeReplacer/]: [BiomeReplacer] TerraBlender detected, biome replacements will be injected into it
[02févr.2026 16:32:08.872] [main/INFO] [MixinExtras|Service/]: Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.5.0). [03févr.2026 11:23:35.839] [main/INFO] [MixinExtras|Service/]: Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.5.0).
[02févr.2026 16:32:10.893] [Datafixer Bootstrap/INFO] [com.mojang.datafixers.DataFixerBuilder/]: 229 Datafixer optimizations took 422 milliseconds [03févr.2026 11:23:37.523] [Datafixer Bootstrap/INFO] [com.mojang.datafixers.DataFixerBuilder/]: 229 Datafixer optimizations took 402 milliseconds
[02févr.2026 16:32:17.955] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, location] and [teleport, destination] with inputs: [0.1 -0.5 .9, 0 0 0] [03févr.2026 11:23:43.254] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, location] and [teleport, destination] with inputs: [0.1 -0.5 .9, 0 0 0]
[02févr.2026 16:32:17.957] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, location] and [teleport, targets] with inputs: [0.1 -0.5 .9, 0 0 0] [03févr.2026 11:23:43.256] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, location] and [teleport, targets] with inputs: [0.1 -0.5 .9, 0 0 0]
[02févr.2026 16:32:17.961] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, destination] and [teleport, targets] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498] [03févr.2026 11:23:43.261] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, destination] and [teleport, targets] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498]
[02févr.2026 16:32:17.962] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, targets] and [teleport, destination] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498] [03févr.2026 11:23:43.263] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, targets] and [teleport, destination] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498]
[02févr.2026 16:32:17.964] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, targets, location] and [teleport, targets, destination] with inputs: [0.1 -0.5 .9, 0 0 0] [03févr.2026 11:23:43.265] [main/WARN] [net.minecraft.commands.Commands/]: Ambiguity between arguments [teleport, targets, location] and [teleport, targets, destination] with inputs: [0.1 -0.5 .9, 0 0 0]
[02févr.2026 16:32:18.123] [Render thread/WARN] [net.minecraft.server.packs.VanillaPackResourcesBuilder/]: Assets URL 'union:/C:/Users/felden.r/Desktop/Perso/custom_ore_gen/custom_ore_gem/build/moddev/artifacts/neoforge-21.1.219.jar%23193!/assets/.mcassetsroot' uses unexpected schema [03févr.2026 11:23:43.422] [Render thread/WARN] [net.minecraft.server.packs.VanillaPackResourcesBuilder/]: Assets URL 'union:/C:/Users/felden.r/Desktop/Perso/custom_ore_gen/custom_ore_gem/build/moddev/artifacts/neoforge-21.1.219.jar%23193!/assets/.mcassetsroot' uses unexpected schema
[02févr.2026 16:32:18.124] [Render thread/WARN] [net.minecraft.server.packs.VanillaPackResourcesBuilder/]: Assets URL 'union:/C:/Users/felden.r/Desktop/Perso/custom_ore_gen/custom_ore_gem/build/moddev/artifacts/neoforge-21.1.219.jar%23193!/data/.mcassetsroot' uses unexpected schema [03févr.2026 11:23:43.422] [Render thread/WARN] [net.minecraft.server.packs.VanillaPackResourcesBuilder/]: Assets URL 'union:/C:/Users/felden.r/Desktop/Perso/custom_ore_gen/custom_ore_gem/build/moddev/artifacts/neoforge-21.1.219.jar%23193!/data/.mcassetsroot' uses unexpected schema
[02févr.2026 16:32:18.161] [Render thread/INFO] [com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService/]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD] [03févr.2026 11:23:43.449] [Render thread/INFO] [com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService/]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[02févr.2026 16:32:18.177] [Render thread/INFO] [net.minecraft.client.Minecraft/]: Setting user: Dev [03févr.2026 11:23:43.462] [Render thread/INFO] [net.minecraft.client.Minecraft/]: Setting user: Dev
[02févr.2026 16:32:18.391] [Render thread/INFO] [net.minecraft.client.Minecraft/]: Backend library: LWJGL version 3.3.3+5 [03févr.2026 11:23:43.612] [Render thread/INFO] [net.minecraft.client.Minecraft/]: Backend library: LWJGL version 3.3.3+5
[02févr.2026 16:32:19.517] [modloading-worker-0/INFO] [net.neoforged.neoforge.common.NeoForgeMod/NEOFORGE-MOD]: NeoForge mod loading, version 21.1.219, for MC 1.21.1 [03févr.2026 11:23:44.590] [modloading-worker-0/INFO] [net.neoforged.neoforge.common.NeoForgeMod/NEOFORGE-MOD]: NeoForge mod loading, version 21.1.219, for MC 1.21.1
[02févr.2026 16:32:21.099] [Render thread/INFO] [net.neoforged.neoforge.gametest.GameTestHooks/]: Enabled Gametest Namespaces: [custom_ore_gen] [03févr.2026 11:23:45.202] [modloading-sync-worker/ERROR] [net.neoforged.fml.javafmlmod.FMLModContainer/]: Exception caught during firing event: Cannot get config value before config is loaded.
[02févr.2026 16:32:21.414] [Render thread/INFO] [net.minecraft.server.packs.resources.ReloadableResourceManager/]: Reloading ResourceManager: vanilla, mod_resources, mod/terrablender, mod/glitchcore, mod/biomesoplenty, mod/biome_replacer, mod/custom_ore_gen, mod/neoforge Index: 1
[02févr.2026 16:32:21.538] [Render thread/INFO] [terrablender/]: Registered region minecraft:overworld to index 0 for type OVERWORLD Listeners:
[02févr.2026 16:32:21.538] [Render thread/INFO] [terrablender/]: Registered region minecraft:nether to index 0 for type NETHER 0: net.neoforged.neoforge.registries.DeferredRegister$$Lambda/0x0000021601e888d8@17a07cea
[02févr.2026 16:32:21.538] [Render thread/INFO] [terrablender/]: Registered region biomesoplenty:overworld_primary to index 1 for type OVERWORLD 1: net.neoforged.neoforge.registries.DeferredRegister$$Lambda/0x0000021601e888d8@23eaf85c
[02févr.2026 16:32:21.538] [Render thread/INFO] [terrablender/]: Registered region biomesoplenty:overworld_secondary to index 2 for type OVERWORLD 2: net.neoforged.neoforge.registries.DeferredRegister$$Lambda/0x0000021601e888d8@f29974
[02févr.2026 16:32:21.539] [Render thread/INFO] [terrablender/]: Registered region biomesoplenty:overworld_rare to index 3 for type OVERWORLD 3: net.neoforged.neoforge.registries.DeferredRegister$$Lambda/0x0000021601e888d8@78563c1f
[02févr.2026 16:32:21.539] [Render thread/INFO] [terrablender/]: Registered region biomesoplenty:nether_common to index 1 for type NETHER java.lang.IllegalStateException: Cannot get config value before config is loaded.
[02févr.2026 16:32:21.539] [Render thread/INFO] [terrablender/]: Registered region biomesoplenty:nether_rare to index 2 for type NETHER at MC-BOOTSTRAP/com.google.common@32.1.2-jre/com.google.common.base.Preconditions.checkState(Preconditions.java:512)
[02févr.2026 16:32:21.566] [Worker-Main-3/INFO] [net.minecraft.client.gui.font.providers.UnihexProvider/]: Found unifont_all_no_pua-15.1.05.hex, loading at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.common.ModConfigSpec$ConfigValue.getRaw(ModConfigSpec.java:1235)
[02févr.2026 16:32:21.710] [Worker-Main-11/INFO] [net.minecraft.client.gui.font.providers.UnihexProvider/]: Found unifont_jp_patch-15.1.05.hex, loading at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.common.ModConfigSpec$ConfigValue.get(ModConfigSpec.java:1222)
[02févr.2026 16:32:23.833] [Render thread/WARN] [net.minecraft.client.sounds.SoundEngine/]: Missing sound for event: minecraft:item.goat_horn.play at TRANSFORMER/custom_ore_gen@3.0/net.mcreator.customoregen.item.SharddiamondpaxelItem$1.getSpeed(SharddiamondpaxelItem.java:24)
[02févr.2026 16:32:23.834] [Render thread/WARN] [net.minecraft.client.sounds.SoundEngine/]: Missing sound for event: minecraft:entity.goat.screaming.horn_break at TRANSFORMER/minecraft@1.21.1/net.minecraft.world.item.Tier.createToolProperties(Tier.java:23)
[02févr.2026 16:32:24.647] [Render thread/INFO] [com.mojang.blaze3d.audio.Library/]: OpenAL initialized on device OpenAL Soft on Haut-parleur (Realtek(R) Audio) at TRANSFORMER/minecraft@1.21.1/net.minecraft.world.item.DiggerItem.<init>(DiggerItem.java:15)
[02févr.2026 16:32:24.647] [Render thread/INFO] [net.minecraft.client.sounds.SoundEngine/SOUNDS]: Sound engine started at TRANSFORMER/minecraft@1.21.1/net.minecraft.world.item.PickaxeItem.<init>(PickaxeItem.java:7)
[02févr.2026 16:32:24.765] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 1024x1024x2 minecraft:textures/atlas/blocks.png-atlas at TRANSFORMER/custom_ore_gen@3.0/net.mcreator.customoregen.item.SharddiamondpaxelItem.<init>(SharddiamondpaxelItem.java:18)
[02févr.2026 16:32:25.425] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x2 minecraft:textures/atlas/signs.png-atlas at TRANSFORMER/custom_ore_gen@3.0/net.mcreator.customoregen.init.CustomOreGenModItems.lambda$static$22(CustomOreGenModItems.java:77)
[02févr.2026 16:32:25.439] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x512x2 minecraft:textures/atlas/shield_patterns.png-atlas at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.DeferredRegister.lambda$register$0(DeferredRegister.java:215)
[02févr.2026 16:32:25.453] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x512x2 minecraft:textures/atlas/banner_patterns.png-atlas at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.DeferredRegister.lambda$register$1(DeferredRegister.java:234)
[02févr.2026 16:32:25.469] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 2048x1024x2 minecraft:textures/atlas/armor_trims.png-atlas at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.DeferredRegister.lambda$addEntries$2(DeferredRegister.java:375)
[02févr.2026 16:32:25.720] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 128x64x2 minecraft:textures/atlas/decorated_pot.png-atlas at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.RegisterEvent.register(RegisterEvent.java:48)
[02févr.2026 16:32:25.740] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 256x256x2 minecraft:textures/atlas/chest.png-atlas at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.DeferredRegister.addEntries(DeferredRegister.java:375)
[02févr.2026 16:32:25.748] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x2 minecraft:textures/atlas/beds.png-atlas at MC-BOOTSTRAP/net.neoforged.bus/net.neoforged.bus.ConsumerEventHandler.invoke(ConsumerEventHandler.java:27)
[02févr.2026 16:32:25.763] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x2 minecraft:textures/atlas/shulker_boxes.png-atlas at MC-BOOTSTRAP/net.neoforged.bus/net.neoforged.bus.EventBus.post(EventBus.java:360)
[02févr.2026 16:32:25.850] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x0 minecraft:textures/atlas/particles.png-atlas at MC-BOOTSTRAP/net.neoforged.bus/net.neoforged.bus.EventBus.post(EventBus.java:342)
[02févr.2026 16:32:25.954] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x0 minecraft:textures/atlas/paintings.png-atlas at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModContainer.acceptEvent(ModContainer.java:177)
[02févr.2026 16:32:25.974] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 256x128x0 minecraft:textures/atlas/mob_effects.png-atlas at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.lambda$postEventWithWrapInModOrder$16(ModLoader.java:379)
[02févr.2026 16:32:25.994] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 64x64x0 minecraft:textures/atlas/map_decorations.png-atlas at java.base/java.lang.Iterable.forEach(Iterable.java:75)
[02févr.2026 16:32:26.003] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 1024x512x0 minecraft:textures/atlas/gui.png-atlas at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModList.forEachModInOrder(ModList.java:174)
[02févr.2026 16:32:26.518] [Render thread/WARN] [net.minecraft.client.renderer.ShaderInstance/]: Shader rendertype_entity_translucent_emissive could not find sampler named Sampler2 in the specified shader program. at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.postEventWithWrapInModOrder(ModLoader.java:377)
[02févr.2026 16:32:27.166] [Render thread/INFO] [net.neoforged.neoforge.client.entity.animation.json.AnimationLoader/]: Loaded 0 entity animations at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.postEventWrapContainerInModOrder(ModLoader.java:368)
[02févr.2026 16:32:32.858] [Render thread/INFO] [net.minecraft.world.item.crafting.RecipeManager/]: Loaded 1598 recipes at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.GameData.postRegisterEvents(GameData.java:92)
[02févr.2026 16:32:33.063] [Render thread/INFO] [net.minecraft.advancements.AdvancementTree/]: Loaded 1709 advancements at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.internal.CommonModLoader.lambda$begin$0(CommonModLoader.java:54)
[02févr.2026 16:32:45.299] [Render thread/INFO] [net.minecraft.client.Minecraft/]: Stopping! at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
[03févr.2026 11:23:45.203] [modloading-sync-worker/ERROR] [net.neoforged.fml.ModContainer/LOADING]: Caught exception during event net.neoforged.neoforge.registries.RegisterEvent@c961e08 dispatch for modid custom_ore_gen
java.lang.IllegalStateException: Cannot get config value before config is loaded.
at MC-BOOTSTRAP/com.google.common@32.1.2-jre/com.google.common.base.Preconditions.checkState(Preconditions.java:512) ~[guava-32.1.2-jre.jar%23113!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.common.ModConfigSpec$ConfigValue.getRaw(ModConfigSpec.java:1235) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.common.ModConfigSpec$ConfigValue.get(ModConfigSpec.java:1222) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/custom_ore_gen@3.0/net.mcreator.customoregen.item.SharddiamondpaxelItem$1.getSpeed(SharddiamondpaxelItem.java:24) ~[%23199!/:?]
at TRANSFORMER/minecraft@1.21.1/net.minecraft.world.item.Tier.createToolProperties(Tier.java:23) ~[neoforge-21.1.219.jar%23193!/:?]
at TRANSFORMER/minecraft@1.21.1/net.minecraft.world.item.DiggerItem.<init>(DiggerItem.java:15) ~[neoforge-21.1.219.jar%23193!/:?]
at TRANSFORMER/minecraft@1.21.1/net.minecraft.world.item.PickaxeItem.<init>(PickaxeItem.java:7) ~[neoforge-21.1.219.jar%23193!/:?]
at TRANSFORMER/custom_ore_gen@3.0/net.mcreator.customoregen.item.SharddiamondpaxelItem.<init>(SharddiamondpaxelItem.java:18) ~[%23199!/:?]
at TRANSFORMER/custom_ore_gen@3.0/net.mcreator.customoregen.init.CustomOreGenModItems.lambda$static$22(CustomOreGenModItems.java:77) ~[%23199!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.DeferredRegister.lambda$register$0(DeferredRegister.java:215) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.DeferredRegister.lambda$register$1(DeferredRegister.java:234) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.DeferredRegister.lambda$addEntries$2(DeferredRegister.java:375) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.RegisterEvent.register(RegisterEvent.java:48) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.DeferredRegister.addEntries(DeferredRegister.java:375) ~[neoforge-21.1.219.jar%23194!/:?]
at MC-BOOTSTRAP/net.neoforged.bus/net.neoforged.bus.ConsumerEventHandler.invoke(ConsumerEventHandler.java:27) ~[bus-8.0.5.jar%23150!/:?]
at MC-BOOTSTRAP/net.neoforged.bus/net.neoforged.bus.EventBus.post(EventBus.java:360) ~[bus-8.0.5.jar%23150!/:?]
at MC-BOOTSTRAP/net.neoforged.bus/net.neoforged.bus.EventBus.post(EventBus.java:342) ~[bus-8.0.5.jar%23150!/:?]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModContainer.acceptEvent(ModContainer.java:177) ~[loader-4.0.42.jar%23146!/:4.0]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.lambda$postEventWithWrapInModOrder$16(ModLoader.java:379) ~[loader-4.0.42.jar%23146!/:4.0]
at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[?:?]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModList.forEachModInOrder(ModList.java:174) ~[loader-4.0.42.jar%23146!/:4.0]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.postEventWithWrapInModOrder(ModLoader.java:377) ~[loader-4.0.42.jar%23146!/:4.0]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.postEventWrapContainerInModOrder(ModLoader.java:368) ~[loader-4.0.42.jar%23146!/:4.0]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.GameData.postRegisterEvents(GameData.java:92) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.internal.CommonModLoader.lambda$begin$0(CommonModLoader.java:54) ~[neoforge-21.1.219.jar%23194!/:?]
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
[03févr.2026 11:23:45.295] [modloading-sync-worker/ERROR] [net.neoforged.neoforge.registries.GameData/]: Failed to register some entries, see suppressed exceptions for details
java.lang.RuntimeException: null
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.GameData.postRegisterEvents(GameData.java:83) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.internal.CommonModLoader.lambda$begin$0(CommonModLoader.java:54) ~[neoforge-21.1.219.jar%23194!/:?]
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
Suppressed: net.neoforged.fml.ModLoadingException: Loading errors encountered:
- Custom Ore Gen (custom_ore_gen) encountered an error while dispatching the net.neoforged.neoforge.registries.RegisterEvent event
java.lang.IllegalStateException: Cannot get config value before config is loaded.
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModContainer.acceptEvent(ModContainer.java:181) ~[loader-4.0.42.jar%23146!/:4.0]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.lambda$postEventWithWrapInModOrder$16(ModLoader.java:379) ~[loader-4.0.42.jar%23146!/:4.0]
at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[?:?]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModList.forEachModInOrder(ModList.java:174) ~[loader-4.0.42.jar%23146!/:4.0]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.postEventWithWrapInModOrder(ModLoader.java:377) ~[loader-4.0.42.jar%23146!/:4.0]
at MC-BOOTSTRAP/fml_loader@4.0.42/net.neoforged.fml.ModLoader.postEventWrapContainerInModOrder(ModLoader.java:368) ~[loader-4.0.42.jar%23146!/:4.0]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.registries.GameData.postRegisterEvents(GameData.java:92) ~[neoforge-21.1.219.jar%23194!/:?]
at TRANSFORMER/neoforge@21.1.219/net.neoforged.neoforge.internal.CommonModLoader.lambda$begin$0(CommonModLoader.java:54) ~[neoforge-21.1.219.jar%23194!/:?]
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
[03févr.2026 11:23:45.302] [modloading-sync-worker/ERROR] [net.neoforged.neoforge.registries.GameData/]: Rolling back to VANILLA state
[03févr.2026 11:23:45.875] [Render thread/FATAL] [net.neoforged.fml.ModLoader/LOADING]: Failed to wait for future Registry initialization, 1 errors found
[03févr.2026 11:23:45.972] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.sound.SoundEngineLoadEvent to a broken mod state
[03févr.2026 11:23:46.075] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterColorHandlersEvent$Block to a broken mod state
[03févr.2026 11:23:46.077] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterColorHandlersEvent$Item to a broken mod state
[03févr.2026 11:23:46.089] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterMaterialAtlasesEvent to a broken mod state
[03févr.2026 11:23:46.124] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterRenderBuffersEvent to a broken mod state
[03févr.2026 11:23:46.199] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent to a broken mod state
[03févr.2026 11:23:46.237] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RenderLevelStageEvent$RegisterStageEvent to a broken mod state
[03févr.2026 11:23:46.318] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent to a broken mod state
[03févr.2026 11:23:46.318] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterSpriteSourceTypesEvent to a broken mod state
[03févr.2026 11:23:46.345] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterMenuScreensEvent to a broken mod state
[03févr.2026 11:23:46.345] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent to a broken mod state
[03févr.2026 11:23:46.345] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$RegisterLayerDefinitions to a broken mod state
[03févr.2026 11:23:46.345] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$RegisterRenderers to a broken mod state
[03févr.2026 11:23:46.347] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterClientTooltipComponentFactoriesEvent to a broken mod state
[03févr.2026 11:23:46.348] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterEntitySpectatorShadersEvent to a broken mod state
[03févr.2026 11:23:46.348] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent to a broken mod state
[03févr.2026 11:23:46.350] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterRecipeBookCategoriesEvent to a broken mod state
[03févr.2026 11:23:46.350] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterGuiLayersEvent to a broken mod state
[03févr.2026 11:23:46.353] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterDimensionSpecialEffectsEvent to a broken mod state
[03févr.2026 11:23:46.354] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterNamedRenderTypesEvent to a broken mod state
[03févr.2026 11:23:46.354] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterColorHandlersEvent$ColorResolvers to a broken mod state
[03févr.2026 11:23:46.355] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterItemDecorationsEvent to a broken mod state
[03févr.2026 11:23:46.361] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterPresetEditorsEvent to a broken mod state
[03févr.2026 11:23:46.361] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.gui.map.RegisterMapDecorationRenderersEvent to a broken mod state
[03févr.2026 11:23:46.362] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterDimensionTransitionScreenEvent to a broken mod state
[03févr.2026 11:23:46.371] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterJsonAnimationTypesEvent to a broken mod state
[03févr.2026 11:23:46.536] [Render thread/INFO] [net.minecraft.server.packs.resources.ReloadableResourceManager/]: Reloading ResourceManager: vanilla
[03févr.2026 11:23:46.564] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.ModelEvent$RegisterGeometryLoaders to a broken mod state
[03févr.2026 11:23:46.644] [Worker-Main-4/INFO] [net.minecraft.client.gui.font.providers.UnihexProvider/]: Found unifont_all_no_pua-15.1.05.hex, loading
[03févr.2026 11:23:46.788] [Worker-Main-9/INFO] [net.minecraft.client.gui.font.providers.UnihexProvider/]: Found unifont_jp_patch-15.1.05.hex, loading
[03févr.2026 11:23:47.625] [Worker-Main-2/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.ModelEvent$RegisterAdditional to a broken mod state
[03févr.2026 11:23:48.177] [Worker-Main-2/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.ModelEvent$ModifyBakingResult to a broken mod state
[03févr.2026 11:23:48.292] [Render thread/WARN] [net.minecraft.client.sounds.SoundEngine/]: Missing sound for event: minecraft:item.goat_horn.play
[03févr.2026 11:23:48.292] [Render thread/WARN] [net.minecraft.client.sounds.SoundEngine/]: Missing sound for event: minecraft:entity.goat.screaming.horn_break
[03févr.2026 11:23:48.499] [Render thread/INFO] [com.mojang.blaze3d.audio.Library/]: OpenAL initialized on device OpenAL Soft on Casque pour téléphone (Jabra EVOLVE 20 MS)
[03févr.2026 11:23:48.500] [Render thread/INFO] [net.minecraft.client.sounds.SoundEngine/SOUNDS]: Sound engine started
[03févr.2026 11:23:48.501] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.sound.SoundEngineLoadEvent to a broken mod state
[03févr.2026 11:23:48.652] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 1024x512x2 minecraft:textures/atlas/blocks.png-atlas
[03févr.2026 11:23:49.119] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.120] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 256x256x2 minecraft:textures/atlas/signs.png-atlas
[03févr.2026 11:23:49.129] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.129] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x512x2 minecraft:textures/atlas/shield_patterns.png-atlas
[03févr.2026 11:23:49.147] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.147] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x512x2 minecraft:textures/atlas/banner_patterns.png-atlas
[03févr.2026 11:23:49.155] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.155] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 1024x1024x2 minecraft:textures/atlas/armor_trims.png-atlas
[03févr.2026 11:23:49.243] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.243] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 256x256x2 minecraft:textures/atlas/chest.png-atlas
[03févr.2026 11:23:49.247] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.248] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 128x64x2 minecraft:textures/atlas/decorated_pot.png-atlas
[03févr.2026 11:23:49.253] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.253] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x2 minecraft:textures/atlas/beds.png-atlas
[03févr.2026 11:23:49.258] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.258] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x2 minecraft:textures/atlas/shulker_boxes.png-atlas
[03févr.2026 11:23:49.269] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.270] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.ModelEvent$BakingCompleted to a broken mod state
[03févr.2026 11:23:49.382] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.383] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.482] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.483] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.483] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.487] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.488] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.490] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.493] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.495] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.498] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.498] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.499] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.499] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.500] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.500] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.501] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.501] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.501] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.504] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.511] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.512] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$CreateSkullModels to a broken mod state
[03févr.2026 11:23:49.513] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.EntityRenderersEvent$AddLayers to a broken mod state
[03févr.2026 11:23:49.513] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x0 minecraft:textures/atlas/particles.png-atlas
[03févr.2026 11:23:49.533] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.534] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 512x256x0 minecraft:textures/atlas/paintings.png-atlas
[03févr.2026 11:23:49.539] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.539] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 256x128x0 minecraft:textures/atlas/mob_effects.png-atlas
[03févr.2026 11:23:49.543] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.543] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 64x64x0 minecraft:textures/atlas/map_decorations.png-atlas
[03févr.2026 11:23:49.545] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.545] [Render thread/INFO] [net.minecraft.client.renderer.texture.TextureAtlas/]: Created: 1024x512x0 minecraft:textures/atlas/gui.png-atlas
[03févr.2026 11:23:49.562] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.TextureAtlasStitchedEvent to a broken mod state
[03févr.2026 11:23:49.866] [Render thread/WARN] [net.minecraft.client.renderer.ShaderInstance/]: Shader rendertype_entity_translucent_emissive could not find sampler named Sampler2 in the specified shader program.
[03févr.2026 11:23:50.417] [Render thread/ERROR] [net.neoforged.fml.ModLoader/]: Cowardly refusing to send event net.neoforged.neoforge.client.event.RegisterShadersEvent to a broken mod state
[03févr.2026 11:23:50.614] [Render thread/ERROR] [net.minecraft.CrashReport/]: Negative index in crash report handler (0/31)
[03févr.2026 11:23:50.630] [Render thread/FATAL] [net.neoforged.neoforge.common.NeoForgeMod/]: Preparing crash report with UUID 160a6dde-56f7-4750-9441-f23d13eb440b
[03févr.2026 11:23:50.631] [Render thread/FATAL] [net.neoforged.neoforge.client.loading.ClientModLoader/]: Crash report saved to .\crash-reports\crash-2026-02-03_11.23.50-fml.txt
[03févr.2026 11:23:50.632] [Render thread/FATAL] [net.neoforged.neoforge.common.NeoForgeMod/]: Preparing crash report with UUID 66c866f5-f1f1-4d57-8d34-ecdd9f0f0fd1
[03févr.2026 11:24:54.437] [Render thread/INFO] [net.minecraft.client.Minecraft/]: Stopping!
+137 -9
View File
@@ -1,12 +1,140 @@
bobView:false version:3955
fboEnable:true ao:false
lastServer:localhost:25463 biomeBlendRadius:2
renderDistance:5
fancyGraphics:false
entityShadows:true
enableVsync:false enableVsync:false
entityDistanceScaling:1.0
entityShadows:true
forceUnicodeFont:false
japaneseGlyphVariants:false
fov:0.0
fovEffectScale:1.0
darknessEffectScale:1.0
glintSpeed:0.5
glintStrength:0.75
prioritizeChunkUpdates:0
fullscreen:false
gamma:0.5
graphicsMode:0
guiScale:0
maxFps:260 maxFps:260
particles:0
renderClouds:false
ao:0
mipmapLevels:2 mipmapLevels:2
narrator:0
particles:0
reducedDebugInfo:false
renderClouds:"false"
renderDistance:5
simulationDistance:12
screenEffectScale:1.0
soundDevice:""
autoJump:false
operatorItemsTab:false
autoSuggestions:true
chatColors:true
chatLinks:true
chatLinksPrompt:true
discrete_mouse_scroll:false
invertYMouse:false
realmsNotifications:true
showSubtitles:false
directionalAudio:false
touchscreen:false
bobView:false
toggleCrouch:false
toggleSprint:false
darkMojangStudiosBackground:false
hideLightningFlashes:false
hideSplashTexts:false
mouseSensitivity:0.5
damageTiltStrength:1.0
highContrast:false
narratorHotkey:true
resourcePacks:[]
incompatibleResourcePacks:[]
lastServer:localhost:25463
lang:en_us
chatVisibility:0
chatOpacity:1.0
chatLineSpacing:0.0
textBackgroundOpacity:0.5
backgroundForChatOnly:true
hideServerAddress:false
advancedItemTooltips:false
pauseOnLostFocus:true
overrideWidth:0
overrideHeight:0
chatHeightFocused:1.0
chatDelay:0.0
chatHeightUnfocused:0.4375
chatScale:1.0
chatWidth:1.0
notificationDisplayTime:1.0
useNativeTransport:true
mainHand:"right"
attackIndicator:1
tutorialStep:none
mouseWheelSensitivity:1.0
rawMouseInput:true
glDebugVerbosity:1
skipMultiplayerWarning:false
hideMatchedNames:true
joinedFirstServer:false
hideBundleTutorial:false
syncChunkWrites:true
showAutosaveIndicator:true
allowServerListing:true
onlyShowSecureChat:false
panoramaScrollSpeed:1.0
telemetryOptInExtra:false
onboardAccessibility:false
menuBackgroundBlurriness:5
key_key.attack:key.mouse.left
key_key.use:key.mouse.right
key_key.forward:key.keyboard.w
key_key.left:key.keyboard.a
key_key.back:key.keyboard.s
key_key.right:key.keyboard.d
key_key.jump:key.keyboard.space
key_key.sneak:key.keyboard.left.shift
key_key.sprint:key.keyboard.left.control
key_key.drop:key.keyboard.q
key_key.inventory:key.keyboard.e
key_key.chat:key.keyboard.t
key_key.playerlist:key.keyboard.tab
key_key.pickItem:key.mouse.middle
key_key.command:key.keyboard.slash
key_key.socialInteractions:key.keyboard.p
key_key.screenshot:key.keyboard.f2
key_key.togglePerspective:key.keyboard.f5
key_key.smoothCamera:key.keyboard.unknown
key_key.fullscreen:key.keyboard.f11
key_key.spectatorOutlines:key.keyboard.unknown
key_key.swapOffhand:key.keyboard.f
key_key.saveToolbarActivator:key.keyboard.c
key_key.loadToolbarActivator:key.keyboard.x
key_key.advancements:key.keyboard.l
key_key.hotbar.1:key.keyboard.1
key_key.hotbar.2:key.keyboard.2
key_key.hotbar.3:key.keyboard.3
key_key.hotbar.4:key.keyboard.4
key_key.hotbar.5:key.keyboard.5
key_key.hotbar.6:key.keyboard.6
key_key.hotbar.7:key.keyboard.7
key_key.hotbar.8:key.keyboard.8
key_key.hotbar.9:key.keyboard.9
soundCategory_master:1.0
soundCategory_music:1.0
soundCategory_record:1.0
soundCategory_weather:1.0
soundCategory_block:1.0
soundCategory_hostile:1.0
soundCategory_neutral:1.0
soundCategory_player:1.0
soundCategory_ambient:1.0
soundCategory_voice:1.0
modelPart_cape:true
modelPart_jacket:true
modelPart_left_sleeve:true
modelPart_right_sleeve:true
modelPart_left_pants_leg:true
modelPart_right_pants_leg:true
modelPart_hat:true
+1 -1
View File
@@ -1 +1 @@
[{"name":"Dev","uuid":"380df991-f603-344c-a090-369bad2a924a","expiresOn":"2026-03-02 16:22:45 +0100"}] [{"name":"Dev","uuid":"380df991-f603-344c-a090-369bad2a924a","expiresOn":"2026-03-03 09:20:49 +0100"}]
@@ -20,6 +20,16 @@ import net.mcreator.customoregen.init.CustomOreGenModTabs;
import net.mcreator.customoregen.init.CustomOreGenModItems; import net.mcreator.customoregen.init.CustomOreGenModItems;
import net.mcreator.customoregen.init.CustomOreGenModBlocks; import net.mcreator.customoregen.init.CustomOreGenModBlocks;
import net.mcreator.customoregen.item.ShardDiamondArmorMaterial; import net.mcreator.customoregen.item.ShardDiamondArmorMaterial;
import net.mcreator.customoregen.config.ModConfigs;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.neoforge.common.loot.IGlobalLootModifier;
import com.mojang.serialization.MapCodec;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.NeoForgeRegistries;
import net.mcreator.customoregen.loot.CustomOreLootModifier;
import net.mcreator.customoregen.worldgen.WorldGenRegistration;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.List; import java.util.List;
@@ -31,20 +41,26 @@ import java.util.AbstractMap;
public class CustomOreGenMod { public class CustomOreGenMod {
public static final Logger LOGGER = LogManager.getLogger(CustomOreGenMod.class); public static final Logger LOGGER = LogManager.getLogger(CustomOreGenMod.class);
public static final String MODID = "custom_ore_gen"; public static final String MODID = "custom_ore_gen";
public static final DeferredRegister<MapCodec<? extends IGlobalLootModifier>> LOOT_MODIFIERS = DeferredRegister.create(NeoForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, MODID);
public CustomOreGenMod(IEventBus modEventBus, ModContainer container) { public CustomOreGenMod(IEventBus modEventBus, ModContainer container) {
// Start of user code block mod constructor // Start of user code block mod constructor
container.registerConfig(ModConfig.Type.COMMON, ModConfigs.SPEC);
LOOT_MODIFIERS.register("custom_ore_drops", () -> CustomOreLootModifier.CODEC);
// End of user code block mod constructor // End of user code block mod constructor
NeoForge.EVENT_BUS.register(this); NeoForge.EVENT_BUS.register(this);
CustomOreGenModBlocks.REGISTRY.register(modEventBus); CustomOreGenModBlocks.REGISTRY.register(modEventBus);
CustomOreGenModItems.REGISTRY.register(modEventBus); CustomOreGenModItems.REGISTRY.register(modEventBus);
ShardDiamondArmorMaterial.REGISTRY.register(modEventBus); ShardDiamondArmorMaterial.REGISTRY.register(modEventBus);
CustomOreGenModTabs.REGISTRY.register(modEventBus); CustomOreGenModTabs.REGISTRY.register(modEventBus);
LOOT_MODIFIERS.register(modEventBus);
// Start of user code block mod init // Start of user code block mod init
WorldGenRegistration.BIOME_SOURCES.register(modEventBus);
WorldGenRegistration.BIOME_MODIFIER_SERIALIZERS.register(modEventBus);
// End of user code block mod init // End of user code block mod init
} }
@@ -65,10 +65,13 @@ public class OresCommand {
public static void onRegisterCommands(RegisterCommandsEvent event) { public static void onRegisterCommands(RegisterCommandsEvent event) {
CommandDispatcher<CommandSourceStack> dispatcher = event.getDispatcher(); CommandDispatcher<CommandSourceStack> dispatcher = event.getDispatcher();
// Niveau de permission 2 = OP (Admin level)
dispatcher.register(Commands.literal("ores") dispatcher.register(Commands.literal("ores")
.requires(source -> source.hasPermission(2))
.executes(OresCommand::executeOres)); .executes(OresCommand::executeOres));
dispatcher.register(Commands.literal("ore") dispatcher.register(Commands.literal("ore")
.requires(source -> source.hasPermission(2))
.executes(OresCommand::executeOres)); .executes(OresCommand::executeOres));
} }
@@ -11,8 +11,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.mcreator.customoregen.procedures.OreexperienceProcedure;
public class ConcentratedcoaloreBlock extends Block { public class ConcentratedcoaloreBlock extends Block {
public ConcentratedcoaloreBlock() { public ConcentratedcoaloreBlock() {
super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(3f, 15f).requiresCorrectToolForDrops()); super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(3f, 15f).requiresCorrectToolForDrops());
@@ -23,10 +21,4 @@ public class ConcentratedcoaloreBlock extends Block {
return 15; return 15;
} }
@Override
public boolean onDestroyedByPlayer(BlockState blockstate, Level world, BlockPos pos, Player entity, boolean willHarvest, FluidState fluid) {
boolean retval = super.onDestroyedByPlayer(blockstate, world, pos, entity, willHarvest, fluid);
OreexperienceProcedure.execute(world, pos.getX(), pos.getY(), pos.getZ(), entity);
return retval;
}
} }
@@ -11,8 +11,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.mcreator.customoregen.procedures.OreexperienceProcedure;
public class CopperhighoreBlock extends Block { public class CopperhighoreBlock extends Block {
public CopperhighoreBlock() { public CopperhighoreBlock() {
super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(1f, 10f).requiresCorrectToolForDrops()); super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(1f, 10f).requiresCorrectToolForDrops());
@@ -23,10 +21,4 @@ public class CopperhighoreBlock extends Block {
return 15; return 15;
} }
@Override
public boolean onDestroyedByPlayer(BlockState blockstate, Level world, BlockPos pos, Player entity, boolean willHarvest, FluidState fluid) {
boolean retval = super.onDestroyedByPlayer(blockstate, world, pos, entity, willHarvest, fluid);
OreexperienceProcedure.execute(world, pos.getX(), pos.getY(), pos.getZ(), entity);
return retval;
}
} }
@@ -11,8 +11,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.mcreator.customoregen.procedures.OreexperienceProcedure;
public class CopperloweroreBlock extends Block { public class CopperloweroreBlock extends Block {
public CopperloweroreBlock() { public CopperloweroreBlock() {
super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(4.5f, 10f).requiresCorrectToolForDrops()); super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(4.5f, 10f).requiresCorrectToolForDrops());
@@ -23,10 +21,4 @@ public class CopperloweroreBlock extends Block {
return 15; return 15;
} }
@Override
public boolean onDestroyedByPlayer(BlockState blockstate, Level world, BlockPos pos, Player entity, boolean willHarvest, FluidState fluid) {
boolean retval = super.onDestroyedByPlayer(blockstate, world, pos, entity, willHarvest, fluid);
OreexperienceProcedure.execute(world, pos.getX(), pos.getY(), pos.getZ(), entity);
return retval;
}
} }
@@ -13,9 +13,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.mcreator.customoregen.procedures.OreexperienceProcedure;
import net.mcreator.customoregen.init.CustomOreGenModBlocks; import net.mcreator.customoregen.init.CustomOreGenModBlocks;
public class DeepslatediamondoreBlock extends Block { public class DeepslatediamondoreBlock extends Block {
public DeepslatediamondoreBlock() { public DeepslatediamondoreBlock() {
super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(3f, 11f).requiresCorrectToolForDrops()); super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(3f, 11f).requiresCorrectToolForDrops());
@@ -26,10 +24,4 @@ public class DeepslatediamondoreBlock extends Block {
return 15; return 15;
} }
@Override
public boolean onDestroyedByPlayer(BlockState blockstate, Level world, BlockPos pos, Player entity, boolean willHarvest, FluidState fluid) {
boolean retval = super.onDestroyedByPlayer(blockstate, world, pos, entity, willHarvest, fluid);
OreexperienceProcedure.execute(world, pos.getX(), pos.getY(), pos.getZ(), entity);
return retval;
}
} }
@@ -11,8 +11,7 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.mcreator.customoregen.procedures.OreexperienceProcedure; import net.mcreator.customoregen.init.CustomOreGenModBlocks;
public class DeepslateironoreBlock extends Block { public class DeepslateironoreBlock extends Block {
public DeepslateironoreBlock() { public DeepslateironoreBlock() {
super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(3f, 10f).requiresCorrectToolForDrops()); super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(3f, 10f).requiresCorrectToolForDrops());
@@ -23,10 +22,4 @@ public class DeepslateironoreBlock extends Block {
return 15; return 15;
} }
@Override
public boolean onDestroyedByPlayer(BlockState blockstate, Level world, BlockPos pos, Player entity, boolean willHarvest, FluidState fluid) {
boolean retval = super.onDestroyedByPlayer(blockstate, world, pos, entity, willHarvest, fluid);
OreexperienceProcedure.execute(world, pos.getX(), pos.getY(), pos.getZ(), entity);
return retval;
}
} }
@@ -11,8 +11,7 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.mcreator.customoregen.procedures.OreexperienceProcedure; import net.mcreator.customoregen.init.CustomOreGenModBlocks;
public class DeepslatelapisoreBlock extends Block { public class DeepslatelapisoreBlock extends Block {
public DeepslatelapisoreBlock() { public DeepslatelapisoreBlock() {
super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(4.5f, 10f).requiresCorrectToolForDrops()); super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(4.5f, 10f).requiresCorrectToolForDrops());
@@ -23,10 +22,4 @@ public class DeepslatelapisoreBlock extends Block {
return 15; return 15;
} }
@Override
public boolean onDestroyedByPlayer(BlockState blockstate, Level world, BlockPos pos, Player entity, boolean willHarvest, FluidState fluid) {
boolean retval = super.onDestroyedByPlayer(blockstate, world, pos, entity, willHarvest, fluid);
OreexperienceProcedure.execute(world, pos.getX(), pos.getY(), pos.getZ(), entity);
return retval;
}
} }
@@ -11,8 +11,7 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.mcreator.customoregen.procedures.OreexperienceProcedure; import net.mcreator.customoregen.init.CustomOreGenModBlocks;
public class DeepslatepuregoldenoreBlock extends Block { public class DeepslatepuregoldenoreBlock extends Block {
public DeepslatepuregoldenoreBlock() { public DeepslatepuregoldenoreBlock() {
super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(3f, 10f).requiresCorrectToolForDrops()); super(BlockBehaviour.Properties.of().sound(SoundType.STONE).strength(3f, 10f).requiresCorrectToolForDrops());
@@ -23,10 +22,4 @@ public class DeepslatepuregoldenoreBlock extends Block {
return 15; return 15;
} }
@Override
public boolean onDestroyedByPlayer(BlockState blockstate, Level world, BlockPos pos, Player entity, boolean willHarvest, FluidState fluid) {
boolean retval = super.onDestroyedByPlayer(blockstate, world, pos, entity, willHarvest, fluid);
OreexperienceProcedure.execute(world, pos.getX(), pos.getY(), pos.getZ(), entity);
return retval;
}
} }

Some files were not shown because too many files have changed in this diff Show More