Use Java 1.12 source code for loot table, clean up code.

This commit is contained in:
BrainFart17
2026-04-06 01:21:36 -07:00
parent c5a8e8b786
commit 97a82c20ef
3 changed files with 59 additions and 67 deletions
+26 -46
View File
@@ -13,46 +13,31 @@ FishingHelper* FishingHelper::getInstance()
return &instance;
}
FishingHelper::FishingHelper() :
random(new Random()), level0Array(3), level1Array(3), level2Array(3), level3Array(3),
fishingFishArray(4), fishingJunkArray(12), fishingTreasuresArray(5)
FishingHelper::FishingHelper() : catchTypeArray(3), fishingFishArray(4), fishingJunkArray(12), fishingTreasuresArray(5)
{
// Source: https://minecraft.wiki/w/Fishing
level0Array[0] = new CatchTypeWeighedItem(CatchType::JUNK, 10 );
level0Array[1] = new CatchTypeWeighedItem(CatchType::TREASURE, 5 );
level0Array[2] = new CatchTypeWeighedItem(CatchType::FISH, 85 );
level1Array[0] = new CatchTypeWeighedItem(CatchType::JUNK, 81 );
level1Array[1] = new CatchTypeWeighedItem(CatchType::TREASURE, 71 );
level1Array[2] = new CatchTypeWeighedItem(CatchType::FISH, 848 );
level2Array[0] = new CatchTypeWeighedItem(CatchType::JUNK, 61 );
level2Array[1] = new CatchTypeWeighedItem(CatchType::TREASURE, 92 );
level2Array[2] = new CatchTypeWeighedItem(CatchType::FISH, 847 );
level3Array[0] = new CatchTypeWeighedItem(CatchType::JUNK, 41 );
level3Array[1] = new CatchTypeWeighedItem(CatchType::TREASURE, 113 );
level3Array[2] = new CatchTypeWeighedItem(CatchType::FISH, 845 );
// Source: https://github.com/WangTingZheng/mcp940/tree/master/src/minecraft/assets/minecraft/loot_tables/gameplay
catchTypeArray[0] = new CatchTypeWeighedItem(CatchType::JUNK, -2, 10 );
catchTypeArray[1] = new CatchTypeWeighedItem(CatchType::TREASURE, 2, 5 );
catchTypeArray[2] = new CatchTypeWeighedItem(CatchType::FISH, -1, 85);
fishingTreasuresArray[0] = new CatchWeighedItem(Item::bow_Id, 1, 0, 1);
fishingTreasuresArray[1] = new CatchWeighedItem(Item::book_Id, 1, 0, 1);
fishingTreasuresArray[2] = new CatchWeighedItem(Item::fishingRod_Id, 1, 0, 1);
fishingTreasuresArray[3] = new CatchWeighedItem(Item::nameTag_Id, 1, 0, 2); // Doubled the chance of name tags to account for lack of nautilus shells.
fishingTreasuresArray[3] = new CatchWeighedItem(Item::nameTag_Id, 1, 0, 1);
fishingTreasuresArray[4] = new CatchWeighedItem(Item::saddle_Id, 1, 0, 1);
fishingTreasuresArray[4] = new CatchWeighedItem(Tile::waterLily_Id, 1, 0, 1);
fishingFishArray[0] = new CatchWeighedItem(Item::fish_raw_Id, 1, 0, 60); // Fish
fishingFishArray[1] = new CatchWeighedItem(Item::fish_raw_Id, 1, 1, 25); // Salmon
fishingFishArray[2] = new CatchWeighedItem(Item::fish_raw_Id, 1, 2, 2); // Clownfish
fishingFishArray[3] = new CatchWeighedItem(Item::fish_raw_Id, 1, 3, 13); // Pufferfish
fishingJunkArray[0] = new CatchWeighedItem(Tile::waterLily_Id, 1, 0, 17);
fishingJunkArray[1] = new CatchWeighedItem(Item::bone_Id, 1, 0, 10);
fishingJunkArray[2] = new CatchWeighedItem(Item::bowl_Id, 1, 0, 10);
fishingJunkArray[3] = new CatchWeighedItem(Item::leather_Id, 1, 0, 10);
fishingJunkArray[1] = new CatchWeighedItem(Item::bone_Id, 1, 0, 10);
fishingJunkArray[6] = new CatchWeighedItem(Item::potion_Id, 1, 0, 10); // Water bottle
fishingJunkArray[2] = new CatchWeighedItem(Item::bowl_Id, 1, 0, 10);
fishingJunkArray[4] = new CatchWeighedItem(Item::boots_leather_Id, 1, 0, 10);
fishingJunkArray[5] = new CatchWeighedItem(Item::rotten_flesh_Id, 1, 0, 10);
fishingJunkArray[6] = new CatchWeighedItem(Item::potion_Id, 1, 0, 10); // Water bottle
fishingJunkArray[7] = new CatchWeighedItem(Tile::tripWireSource_Id, 1, 0, 10);
fishingJunkArray[8] = new CatchWeighedItem(Item::stick_Id, 1, 0, 5);
fishingJunkArray[9] = new CatchWeighedItem(Item::string_Id, 1, 0, 5);
@@ -60,26 +45,14 @@ FishingHelper::FishingHelper() :
fishingJunkArray[11] = new CatchWeighedItem(Item::dye_powder_Id, 10, 0, 1); // 10 ink sacs
}
CatchType FishingHelper::getRandCatchType(int level)
CatchType FishingHelper::getRandCatchType(int luck, Random* random)
{
CatchTypeWeighedItem* catchTypeWeighedItem = nullptr;
switch (level) {
case 0:
catchTypeWeighedItem = static_cast<CatchTypeWeighedItem *>(WeighedRandom::getRandomItem(random, level0Array));
return catchTypeWeighedItem->getType();
case 1:
catchTypeWeighedItem = static_cast<CatchTypeWeighedItem *>(WeighedRandom::getRandomItem(random, level1Array));
return catchTypeWeighedItem->getType();
case 2:
catchTypeWeighedItem = static_cast<CatchTypeWeighedItem *>(WeighedRandom::getRandomItem(random, level2Array));
return catchTypeWeighedItem->getType();
case 3:
catchTypeWeighedItem = static_cast<CatchTypeWeighedItem *>(WeighedRandom::getRandomItem(random, level3Array));
return catchTypeWeighedItem->getType();
}
catchTypeArray.calcWeights(luck); // Recalculate the weights based on the luck level of the player
catchTypeWeighedItem = static_cast<CatchTypeWeighedItem *>(WeighedRandom::getRandomItem(random, catchTypeArray));
}
CatchWeighedItem* FishingHelper::getRandCatch(CatchType catchType)
CatchWeighedItem* FishingHelper::getRandCatch(CatchType catchType, Random* random)
{
CatchWeighedItem* catchWeighedItem = nullptr;
switch (catchType) {
@@ -92,7 +65,7 @@ CatchWeighedItem* FishingHelper::getRandCatch(CatchType catchType)
}
}
std::shared_ptr<ItemInstance> FishingHelper::handleCatch(CatchWeighedItem* weighedCatch, CatchType catchType)
std::shared_ptr<ItemInstance> FishingHelper::handleCatch(CatchWeighedItem* weighedCatch, CatchType catchType, Random* random)
{
std::shared_ptr<ItemInstance> itemInstance = std::make_shared<ItemInstance>(
weighedCatch->getItemId(), weighedCatch->getCount(), weighedCatch->getAuxValue()
@@ -102,16 +75,23 @@ std::shared_ptr<ItemInstance> FishingHelper::handleCatch(CatchWeighedItem* weigh
itemInstance->setAuxValue((int) (itemInstance->getMaxDamage() * ((double) random->nextInt(901) + 100.0) / 1000.0)); // 10% to 100% damage
}
else if (itemInstance->id == Item::fishingRod_Id && catchType == CatchType::TREASURE) {
itemInstance->setAuxValue((int) (itemInstance->getMaxDamage() * ((double) random->nextInt(251) + 750.0) / 1000.0)); // 75% to 100% damage
itemInstance = EnchantmentHelper::enchantItem(random, itemInstance, random->nextInt(9) + 22); // 22 to 30 enchantment level
itemInstance->setAuxValue((int)(itemInstance->getMaxDamage() * ((double)random->nextInt(251) / 1000.0)); // 0% to 25% damage
itemInstance = EnchantmentHelper::enchantItem(random, itemInstance, 30);
}
else if (itemInstance->id == Item::bow_Id) {
itemInstance->setAuxValue((int) (itemInstance->getMaxDamage() * ((double) random->nextInt(251) + 750.0) / 1000.0)); // 75% to 100% damage
itemInstance = EnchantmentHelper::enchantItem(random, itemInstance, random->nextInt(9) + 22); // 22 to 30 enchantment level
itemInstance->setAuxValue((int)(itemInstance->getMaxDamage() * ((double)random->nextInt(251) / 1000.0)); // 0% to 25% damage
itemInstance = EnchantmentHelper::enchantItem(random, itemInstance, 30);
}
else if (itemInstance->id == Item::book_Id) {
itemInstance = EnchantmentHelper::enchantItem(random, itemInstance, 30);
}
return itemInstance;
}
std::shared_ptr<ItemInstance> FishingHelper::getCatch(int luck, Random* random)
{
CatchType catchType = getRandCatchType(luck, random);
CatchWeighedItem* catchWeighedItem = getRandCatch(catchType, random);
return handleCatch(catchWeighedItem, catchType, random);
}