chore: align ore drops and XP with vanilla 1.21 and add AGENTS.md guide
This commit is contained in:
@@ -189,6 +189,7 @@ public class ModConfigs {
|
||||
|
||||
public final ModConfigSpec.ConfigValue<Integer> concentratedCoalOreMinDrops;
|
||||
public final ModConfigSpec.ConfigValue<Integer> concentratedCoalOreMaxDrops;
|
||||
public final ModConfigSpec.BooleanValue concentratedCoalOreEnableFortune;
|
||||
|
||||
public final ModConfigSpec.ConfigValue<Integer> pureGoldenOreMinDrops;
|
||||
public final ModConfigSpec.ConfigValue<Integer> pureGoldenOreMaxDrops;
|
||||
@@ -204,15 +205,18 @@ public class ModConfigs {
|
||||
|
||||
public final ModConfigSpec.ConfigValue<Integer> lapisOreMinDrops;
|
||||
public final ModConfigSpec.ConfigValue<Integer> lapisOreMaxDrops;
|
||||
public final ModConfigSpec.BooleanValue lapisOreEnableFortune;
|
||||
|
||||
public final ModConfigSpec.ConfigValue<Integer> redstoneOreMinDrops;
|
||||
public final ModConfigSpec.ConfigValue<Integer> redstoneOreMaxDrops;
|
||||
public final ModConfigSpec.BooleanValue redstoneOreEnableFortune;
|
||||
|
||||
public final ModConfigSpec.ConfigValue<Integer> emeraldOreMinDrops;
|
||||
public final ModConfigSpec.ConfigValue<Integer> emeraldOreMaxDrops;
|
||||
|
||||
public final ModConfigSpec.ConfigValue<Integer> copperOreMinDrops;
|
||||
public final ModConfigSpec.ConfigValue<Integer> copperOreMaxDrops;
|
||||
public final ModConfigSpec.BooleanValue copperOreEnableFortune;
|
||||
|
||||
public final ModConfigSpec.ConfigValue<Integer> oreExperienceDrops;
|
||||
|
||||
@@ -234,32 +238,35 @@ public class ModConfigs {
|
||||
|
||||
builder.push("concentrated_diamond_ore");
|
||||
concentratedDiamondOreMinDrops = builder
|
||||
.comment("Minimum diamonds dropped by Concentrated Diamond Ore (default: 1)")
|
||||
.comment("Minimum diamonds dropped by Deepslate Diamond Ore (default: 1) - vanilla equivalent")
|
||||
.defineInRange("minDrops", 1, 0, 64);
|
||||
concentratedDiamondOreMaxDrops = builder
|
||||
.comment("Maximum diamonds dropped by Concentrated Diamond Ore (default: 2)")
|
||||
.defineInRange("maxDrops", 2, 0, 64);
|
||||
.comment("Maximum diamonds dropped by Deepslate Diamond Ore (default: 1) - vanilla equivalent")
|
||||
.defineInRange("maxDrops", 1, 0, 64);
|
||||
concentratedDiamondOreEnableFortune = builder
|
||||
.comment("Enable Fortune enchantment on Concentrated Diamond Ore (default: true)")
|
||||
.comment("Enable Fortune enchantment on Deepslate Diamond Ore (default: true) - vanilla equivalent")
|
||||
.define("enableFortune", true);
|
||||
builder.pop();
|
||||
|
||||
builder.push("concentrated_coal_ore");
|
||||
concentratedCoalOreMinDrops = builder
|
||||
.comment("Minimum coal dropped by Concentrated Coal Ore (default: 2)")
|
||||
.defineInRange("minDrops", 2, 0, 64);
|
||||
.comment("Minimum coal dropped by Concentrated Coal Ore (default: 1) - vanilla equivalent")
|
||||
.defineInRange("minDrops", 1, 0, 64);
|
||||
concentratedCoalOreMaxDrops = builder
|
||||
.comment("Maximum coal dropped by Concentrated Coal Ore (default: 4)")
|
||||
.defineInRange("maxDrops", 4, 0, 64);
|
||||
.comment("Maximum coal dropped by Concentrated Coal Ore (default: 1) - vanilla equivalent")
|
||||
.defineInRange("maxDrops", 1, 0, 64);
|
||||
concentratedCoalOreEnableFortune = builder
|
||||
.comment("Enable Fortune enchantment on Concentrated Coal Ore (default: true) - vanilla equivalent")
|
||||
.define("enableFortune", true);
|
||||
builder.pop();
|
||||
|
||||
builder.push("pure_golden_ore");
|
||||
pureGoldenOreMinDrops = builder
|
||||
.comment("Minimum gold nuggets dropped by Pure Golden Ore (default: 2)")
|
||||
.defineInRange("minDrops", 2, 0, 64);
|
||||
.comment("Minimum raw gold dropped by Pure Golden Ore (default: 1) - vanilla equivalent")
|
||||
.defineInRange("minDrops", 1, 0, 64);
|
||||
pureGoldenOreMaxDrops = builder
|
||||
.comment("Maximum gold nuggets dropped by Pure Golden Ore (default: 4)")
|
||||
.defineInRange("maxDrops", 4, 0, 64);
|
||||
.comment("Maximum raw gold dropped by Pure Golden Ore (default: 1) - vanilla equivalent")
|
||||
.defineInRange("maxDrops", 1, 0, 64);
|
||||
builder.pop();
|
||||
|
||||
builder.push("ash_coal_ore");
|
||||
@@ -273,44 +280,53 @@ public class ModConfigs {
|
||||
|
||||
builder.push("impure_ores");
|
||||
impureIronOreMinDrops = builder
|
||||
.comment("Minimum impure iron dropped by Impure Iron Ore (default: 1)")
|
||||
.comment("Minimum raw iron dropped by Iron Ore (default: 1) - vanilla equivalent")
|
||||
.defineInRange("ironMinDrops", 1, 0, 64);
|
||||
impureIronOreMaxDrops = builder
|
||||
.comment("Maximum impure iron dropped by Impure Iron Ore (default: 2)")
|
||||
.defineInRange("ironMaxDrops", 2, 0, 64);
|
||||
.comment("Maximum raw iron dropped by Iron Ore (default: 1) - vanilla equivalent")
|
||||
.defineInRange("ironMaxDrops", 1, 0, 64);
|
||||
impureGoldOreMinDrops = builder
|
||||
.comment("Minimum impure gold dropped by Impure Gold Ore (default: 1)")
|
||||
.comment("Minimum raw gold dropped by Impure Gold Ore (default: 1)")
|
||||
.defineInRange("goldMinDrops", 1, 0, 64);
|
||||
impureGoldOreMaxDrops = builder
|
||||
.comment("Maximum impure gold dropped by Impure Gold Ore (default: 2)")
|
||||
.defineInRange("goldMaxDrops", 2, 0, 64);
|
||||
.comment("Maximum raw gold dropped by Impure Gold Ore (default: 1)")
|
||||
.defineInRange("goldMaxDrops", 1, 0, 64);
|
||||
builder.pop();
|
||||
|
||||
builder.push("vanilla_ore_variants");
|
||||
lapisOreMinDrops = builder
|
||||
.comment("Minimum lapis dropped (default: 4)")
|
||||
.comment("Minimum lapis dropped (default: 4) - vanilla equivalent")
|
||||
.defineInRange("lapisMinDrops", 4, 0, 64);
|
||||
lapisOreMaxDrops = builder
|
||||
.comment("Maximum lapis dropped (default: 9)")
|
||||
.comment("Maximum lapis dropped (default: 9) - vanilla equivalent")
|
||||
.defineInRange("lapisMaxDrops", 9, 0, 64);
|
||||
lapisOreEnableFortune = builder
|
||||
.comment("Enable Fortune enchantment on Lapis Ore (default: true) - vanilla equivalent")
|
||||
.define("enableFortune", true);
|
||||
redstoneOreMinDrops = builder
|
||||
.comment("Minimum redstone dropped (default: 4)")
|
||||
.comment("Minimum redstone dropped (default: 4) - vanilla equivalent")
|
||||
.defineInRange("redstoneMinDrops", 4, 0, 64);
|
||||
redstoneOreMaxDrops = builder
|
||||
.comment("Maximum redstone dropped (default: 5)")
|
||||
.comment("Maximum redstone dropped (default: 5) - vanilla equivalent")
|
||||
.defineInRange("redstoneMaxDrops", 5, 0, 64);
|
||||
redstoneOreEnableFortune = builder
|
||||
.comment("Enable Fortune enchantment on Redstone Ore (default: true) - vanilla equivalent")
|
||||
.define("enableFortune", true);
|
||||
emeraldOreMinDrops = builder
|
||||
.comment("Minimum emerald dropped (default: 1)")
|
||||
.comment("Minimum emerald dropped (default: 1) - vanilla equivalent")
|
||||
.defineInRange("emeraldMinDrops", 1, 0, 64);
|
||||
emeraldOreMaxDrops = builder
|
||||
.comment("Maximum emerald dropped (default: 1)")
|
||||
.comment("Maximum emerald dropped (default: 1) - vanilla equivalent")
|
||||
.defineInRange("emeraldMaxDrops", 1, 0, 64);
|
||||
copperOreMinDrops = builder
|
||||
.comment("Minimum copper dropped (default: 2)")
|
||||
.comment("Minimum raw copper dropped (default: 2) - vanilla equivalent")
|
||||
.defineInRange("copperMinDrops", 2, 0, 64);
|
||||
copperOreMaxDrops = builder
|
||||
.comment("Maximum copper dropped (default: 5)")
|
||||
.comment("Maximum raw copper dropped (default: 5) - vanilla equivalent")
|
||||
.defineInRange("copperMaxDrops", 5, 0, 64);
|
||||
copperOreEnableFortune = builder
|
||||
.comment("Enable Fortune enchantment on Copper Ore (default: true) - vanilla equivalent")
|
||||
.define("enableFortune", true);
|
||||
builder.pop();
|
||||
|
||||
oreExperienceDrops = builder
|
||||
|
||||
+49
-17
@@ -80,13 +80,14 @@ public class ConfigurableOreDropsProcedure {
|
||||
case "concentrated_coal":
|
||||
minDrops = ModConfigs.DROPS.concentratedCoalOreMinDrops.get();
|
||||
maxDrops = ModConfigs.DROPS.concentratedCoalOreMaxDrops.get();
|
||||
enableFortune = ModConfigs.DROPS.concentratedCoalOreEnableFortune.get();
|
||||
dropItem = new ItemStack(Items.COAL);
|
||||
break;
|
||||
|
||||
case "pure_golden":
|
||||
minDrops = ModConfigs.DROPS.pureGoldenOreMinDrops.get();
|
||||
maxDrops = ModConfigs.DROPS.pureGoldenOreMaxDrops.get();
|
||||
dropItem = new ItemStack(Items.GOLD_NUGGET);
|
||||
dropItem = new ItemStack(Items.RAW_GOLD);
|
||||
break;
|
||||
|
||||
case "ash_coal":
|
||||
@@ -98,7 +99,7 @@ public class ConfigurableOreDropsProcedure {
|
||||
case "impure_iron":
|
||||
minDrops = ModConfigs.DROPS.impureIronOreMinDrops.get();
|
||||
maxDrops = ModConfigs.DROPS.impureIronOreMaxDrops.get();
|
||||
dropItem = new ItemStack(Items.IRON_NUGGET); // Use iron nugget until IMPUREIRON item is created
|
||||
dropItem = new ItemStack(Items.RAW_IRON);
|
||||
break;
|
||||
|
||||
case "impure_gold":
|
||||
@@ -110,12 +111,14 @@ public class ConfigurableOreDropsProcedure {
|
||||
case "lapis":
|
||||
minDrops = ModConfigs.DROPS.lapisOreMinDrops.get();
|
||||
maxDrops = ModConfigs.DROPS.lapisOreMaxDrops.get();
|
||||
enableFortune = ModConfigs.DROPS.lapisOreEnableFortune.get();
|
||||
dropItem = new ItemStack(Items.LAPIS_LAZULI);
|
||||
break;
|
||||
|
||||
case "redstone":
|
||||
minDrops = ModConfigs.DROPS.redstoneOreMinDrops.get();
|
||||
maxDrops = ModConfigs.DROPS.redstoneOreMaxDrops.get();
|
||||
enableFortune = ModConfigs.DROPS.redstoneOreEnableFortune.get();
|
||||
dropItem = new ItemStack(Items.REDSTONE);
|
||||
break;
|
||||
|
||||
@@ -128,6 +131,7 @@ public class ConfigurableOreDropsProcedure {
|
||||
case "copper":
|
||||
minDrops = ModConfigs.DROPS.copperOreMinDrops.get();
|
||||
maxDrops = ModConfigs.DROPS.copperOreMaxDrops.get();
|
||||
enableFortune = ModConfigs.DROPS.copperOreEnableFortune.get();
|
||||
dropItem = new ItemStack(Items.RAW_COPPER);
|
||||
break;
|
||||
|
||||
@@ -136,15 +140,23 @@ public class ConfigurableOreDropsProcedure {
|
||||
return;
|
||||
}
|
||||
|
||||
// Calculate drops
|
||||
int dropCount = minDrops + random.nextInt(maxDrops - minDrops + 1);
|
||||
// Calculate base drops
|
||||
int dropCount = minDrops + (maxDrops > minDrops ? random.nextInt(maxDrops - minDrops + 1) : 0);
|
||||
|
||||
// Apply fortune if enabled
|
||||
if (enableFortune && fortuneLevel > 0) {
|
||||
int fortuneBonus = random.nextInt(fortuneLevel + 2) - 1;
|
||||
if (fortuneBonus < 0)
|
||||
fortuneBonus = 0;
|
||||
dropCount += fortuneBonus;
|
||||
if (oreType.equals("lapis") || oreType.equals("copper") || oreType.equals("redstone")) {
|
||||
// Vanilla-like multiplier for multi-drop ores (Lapis, Copper, Redstone)
|
||||
// Level 3: 2/5 chance of x1, 1/5 chance of x2, 1/5 chance of x3, 1/5 chance of x4
|
||||
int multiplier = random.nextInt(fortuneLevel + 2) - 1;
|
||||
if (multiplier < 0) multiplier = 0;
|
||||
dropCount *= (multiplier + 1);
|
||||
} else {
|
||||
// Vanilla-like bonus for discrete ores (Diamond, Coal, Emerald)
|
||||
int fortuneBonus = random.nextInt(fortuneLevel + 2) - 1;
|
||||
if (fortuneBonus < 0) fortuneBonus = 0;
|
||||
dropCount += fortuneBonus;
|
||||
}
|
||||
}
|
||||
|
||||
// Drop the items
|
||||
@@ -161,15 +173,35 @@ public class ConfigurableOreDropsProcedure {
|
||||
}
|
||||
}
|
||||
|
||||
// Drop experience if configured
|
||||
int expAmount = ModConfigs.DROPS.oreExperienceDrops.get();
|
||||
if (expAmount > 0 && entity instanceof Player) {
|
||||
ExperienceOrb expOrb = new ExperienceOrb(
|
||||
(ServerLevel) world,
|
||||
x + 0.5, y + 0.5, z + 0.5,
|
||||
expAmount
|
||||
);
|
||||
((ServerLevel) world).addFreshEntity(expOrb);
|
||||
// Drop experience based on ore type (Vanilla 1.21 values)
|
||||
int expAmount = 0;
|
||||
if (entity instanceof Player) {
|
||||
switch (oreType) {
|
||||
case "concentrated_coal":
|
||||
expAmount = random.nextInt(3); // 0-2
|
||||
break;
|
||||
case "shard_diamond":
|
||||
case "concentrated_diamond":
|
||||
case "emerald":
|
||||
expAmount = 3 + random.nextInt(5); // 3-7
|
||||
break;
|
||||
case "lapis":
|
||||
expAmount = 2 + random.nextInt(4); // 2-5
|
||||
break;
|
||||
case "redstone":
|
||||
expAmount = 1 + random.nextInt(5); // 1-5
|
||||
break;
|
||||
// Iron, Gold, Copper ores don't drop XP in Vanilla 1.21 (only after smelting)
|
||||
}
|
||||
|
||||
if (expAmount > 0 && world instanceof ServerLevel) {
|
||||
ExperienceOrb expOrb = new ExperienceOrb(
|
||||
(ServerLevel) world,
|
||||
x + 0.5, y + 0.5, z + 0.5,
|
||||
expAmount
|
||||
);
|
||||
((ServerLevel) world).addFreshEntity(expOrb);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,9 @@ public class OreexperienceProcedure {
|
||||
}
|
||||
|
||||
if (!hasSilkTouch) {
|
||||
if (world instanceof ServerLevel _level)
|
||||
_level.addFreshEntity(new ExperienceOrb(_level, x, y, z, 2));
|
||||
// XP is now handled centrally in ConfigurableOreDropsProcedure to match Vanilla 1.21 values
|
||||
// if (world instanceof ServerLevel _level)
|
||||
// _level.addFreshEntity(new ExperienceOrb(_level, x, y, z, 2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user