From 3a81d94b3240273536e26c44a8f201351be94db5 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Tue, 3 Mar 2020 17:14:57 -0800 Subject: [PATCH] 1.16 support part 5 --- Changelog.txt | 31 +++++++----- .../config/skills/salvage/SalvageConfig.java | 2 + .../datatypes/skills/MaterialType.java | 7 +++ .../nossr50/skills/mining/MiningManager.java | 48 +++++++++++++++++-- .../java/com/gmail/nossr50/util/Misc.java | 23 +++++++++ .../gmail/nossr50/util/skills/SkillUtils.java | 5 ++ src/main/resources/repair.vanilla.yml | 33 +++++++++++++ src/main/resources/salvage.vanilla.yml | 40 +++++++++++++++- 8 files changed, 173 insertions(+), 16 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 0f9fb402f..b54670dea 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,23 +1,28 @@ Version 2.1.119 1.16 Support Fixed another dupe bug + Fixed a bug that can cause blast mining to give out more rewards than intended + Blast Mining rewards are now randomized but still influenced by your blast mining rank mcMMO is now aware of turtle shell and treats it appropriately mcMMO is now aware of chainmail armor and treats it appropriately Calculations which change depend on the quality of your tool or armor has had netherrack support coded in All excavation drops that can drop from soul_sand now also drop from soul_soil (edited treasures.yml) + Added Netherrack armor/weapons/tools to repair.vanilla.yml + Added Netherrack armor/weapons/tools to salvage.vanilla.yml + Added 'Bamboo_Sapling' to bonus drops for Herbalism in experience.yml - Added 'Ancient_Debris' with a value of 7777 to mining experience tables in experience.yml - Added 'Basalt' with a value of 40 to mining experience tables in experience.yml - Added 'Crimson_Fungus' with a value of 50 to herbalism experience tables in experience.yml - Added 'Warped_Fungus' with a value of 50 to herbalism experience tables in experience.yml - Added 'Warped_Nylium' with a value of 5 to mining experience tables in experience.yml - Added 'Crimson_Nylium' with a value of 5 to mining experience tables in experience.yml - Added 'Crimson_Stem' with a value of 35 to woodcutting experience tables in experience.yml - Added 'Crimson_Roots' with a value of 35 to woodcutting experience tables in experience.yml - Added 'Warped_Stem' with a value of 35 to woodcutting experience tables in experience.yml - Added 'Warped_Roots' with a value of 35 to woodcutting experience tables in experience.yml - Added 'Ancient_Debris' with a value of 200 to smelting experience tables in experience.yml + Added 'Ancient_Debris' with a value of 7777 to Mining experience tables in experience.yml + Added 'Basalt' with a value of 40 to Mining experience tables in experience.yml + Added 'Crimson_Fungus' with a value of 50 to Herbalism experience tables in experience.yml + Added 'Warped_Fungus' with a value of 50 to Herbalism experience tables in experience.yml + Added 'Warped_Nylium' with a value of 5 to Mining experience tables in experience.yml + Added 'Crimson_Nylium' with a value of 5 to Mining experience tables in experience.yml + Added 'Crimson_Stem' with a value of 35 to Woodcutting experience tables in experience.yml + Added 'Crimson_Roots' with a value of 35 to Woodcutting experience tables in experience.yml + Added 'Warped_Stem' with a value of 35 to Woodcutting experience tables in experience.yml + Added 'Warped_Roots' with a value of 35 to Woodcutting experience tables in experience.yml + Added 'Ancient_Debris' with a value of 200 to Smelting experience tables in experience.yml Added 'Nether_Sprouts' with a value of 10 to Herbalism experience tables in experience.yml Added 'Shroomlight' with a value of 100 to Woodcutting experience tables in experience.yml Added 'Soul_Soil' with a value of 50 to Excavation experience tables in experience.yml @@ -38,6 +43,10 @@ Version 2.1.119 Added 'Shroomlight' to bonus drops for Woodcutting in config.yml NOTES: You may have to edit your configs for this update to mcMMO, either do it manually or delete the config files to regenerate them. + Here are the default configuration files if you wish to compare them to your own servers settings while updating your configs. + Netherrack is repaired using netherrack scraps for now, wait for 2.2 for a better version of repair. + Netherrack salvages into netherrack scraps for now, wait for 2.2 for a better version of salvage. + Version 2.1.118 Fixed another dupe bug diff --git a/src/main/java/com/gmail/nossr50/config/skills/salvage/SalvageConfig.java b/src/main/java/com/gmail/nossr50/config/skills/salvage/SalvageConfig.java index dc802c468..45a92c16b 100644 --- a/src/main/java/com/gmail/nossr50/config/skills/salvage/SalvageConfig.java +++ b/src/main/java/com/gmail/nossr50/config/skills/salvage/SalvageConfig.java @@ -75,6 +75,8 @@ public class SalvageConfig extends ConfigLoader { } else if (ItemUtils.isDiamondArmor(salvageItem) || ItemUtils.isDiamondTool(salvageItem)) { salvageMaterialType = MaterialType.DIAMOND; + } else if (ItemUtils.isNetherriteTool(salvageItem) || ItemUtils.isNetherriteArmor(salvageItem)) { + salvageMaterialType = MaterialType.NETHERRACK; } } else { diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/MaterialType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/MaterialType.java index 62f7ed160..cf4807848 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/MaterialType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/MaterialType.java @@ -10,6 +10,7 @@ public enum MaterialType { IRON, GOLD, DIAMOND, + NETHERRACK, OTHER; public Material getDefaultMaterial() { @@ -35,6 +36,12 @@ public enum MaterialType { case DIAMOND: return Material.DIAMOND; + case NETHERRACK: + if(Material.getMaterial("netherrite_scrap") != null) + return Material.getMaterial("netherrite_scrap"); + else + return Material.GOLD_INGOT; + case OTHER: default: return null; diff --git a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java index b8b4d4669..c30187d5d 100644 --- a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java +++ b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java @@ -17,6 +17,7 @@ import com.gmail.nossr50.util.player.NotificationManager; import com.gmail.nossr50.util.random.RandomChanceUtil; import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.skills.SkillUtils; +import org.apache.commons.lang.math.RandomUtils; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockState; @@ -131,6 +132,30 @@ public class MiningManager extends SkillManager { * @param yield The % of blocks to drop * @param event The {@link EntityExplodeEvent} */ + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage + //TODO: Rewrite this garbage public void blastMiningDropProcessing(float yield, EntityExplodeEvent event) { //Strip out only stuff that gives mining XP @@ -148,7 +173,7 @@ public class MiningManager extends SkillManager { int xp = 0; - float oreBonus = (float) (getOreBonus() / 100); +// float oreBonus = (float) (getOreBonus() / 100); //TODO: Pretty sure something is fucked with debrisReduction stuff // float debrisReduction = (float) (getDebrisReduction() / 100); int dropMultiplier = getDropMultiplier(); @@ -156,13 +181,14 @@ public class MiningManager extends SkillManager { // float debrisYield = yield - debrisReduction; for (BlockState blockState : ores) { - if (Misc.getRandom().nextFloat() < (notOres.size() + oreBonus)) { + if (RandomUtils.nextInt(ores.size()) >= (ores.size() / 2)) { xp += Mining.getBlockXp(blockState); Misc.dropItem(Misc.getBlockCenter(blockState), new ItemStack(blockState.getType())); // Initial block that would have been dropped for (int i = 1; i < dropMultiplier; i++) { - Mining.handleSilkTouchDrops(blockState); // Bonus drops - should drop the block & not the items + if(RandomUtils.nextInt(100) >= 75) + Mining.handleSilkTouchDrops(blockState); // Bonus drops - should drop the block & not the items } } } @@ -234,7 +260,21 @@ public class MiningManager extends SkillManager { * @return the Blast Mining tier */ public int getDropMultiplier() { - return getDropMultiplier(getBlastMiningTier()); + switch(getBlastMiningTier()) { + case 8: + case 7: + return 3; + case 6: + case 5: + case 4: + case 3: + return 2; + case 2: + case 1: + return 1; + default: + return 0; + } } /** diff --git a/src/main/java/com/gmail/nossr50/util/Misc.java b/src/main/java/com/gmail/nossr50/util/Misc.java index f3746829b..cbb60ee46 100644 --- a/src/main/java/com/gmail/nossr50/util/Misc.java +++ b/src/main/java/com/gmail/nossr50/util/Misc.java @@ -144,6 +144,29 @@ public final class Misc { return location.getWorld().dropItem(location, itemStack); } + /** + * Drop an item at a given location. + * + * @param location The location to drop the item at + * @param itemStack The item to drop + * @return Dropped Item entity or null if invalid or cancelled + */ + public static Item dropItem(Location location, ItemStack itemStack, int count) { + if (itemStack.getType() == Material.AIR) { + return null; + } + + // We can't get the item until we spawn it and we want to make it cancellable, so we have a custom event. + McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(location, itemStack); + mcMMO.p.getServer().getPluginManager().callEvent(event); + + if (event.isCancelled()) { + return null; + } + + return location.getWorld().dropItem(location, itemStack); + } + /** * Drop items at a given location. * diff --git a/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java b/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java index 7bc395adc..ad0605777 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/SkillUtils.java @@ -298,6 +298,11 @@ public class SkillUtils { public static int getRepairAndSalvageQuantities(Material itemMaterial, Material recipeMaterial) { int quantity = 0; + if(mcMMO.getMaterialMapStore().isNetherriteTool(itemMaterial) || mcMMO.getMaterialMapStore().isNetherriteArmor(itemMaterial)) { + //One netherrite bar requires 4 netherrite scraps + return 4; + } + for(Iterator recipeIterator = Bukkit.getServer().recipeIterator(); recipeIterator.hasNext();) { Recipe bukkitRecipe = recipeIterator.next(); diff --git a/src/main/resources/repair.vanilla.yml b/src/main/resources/repair.vanilla.yml index 49eec21d7..52cae9158 100644 --- a/src/main/resources/repair.vanilla.yml +++ b/src/main/resources/repair.vanilla.yml @@ -181,6 +181,39 @@ Repairables: DIAMOND_BOOTS: MinimumLevel: 0 XpMultiplier: 6 + + # + # Diamond repairables + ### + # Tools + NETHERRITE_SWORD: + MinimumLevel: 0 + XpMultiplier: .6 + NETHERRITE_SHOVEL: + MinimumLevel: 0 + XpMultiplier: .4 + NETHERRITE_PICKAXE: + MinimumLevel: 0 + XpMultiplier: 1.1 + NETHERRITE_AXE: + MinimumLevel: 0 + XpMultiplier: 1.1 + NETHERRITE_HOE: + MinimumLevel: 0 + XpMultiplier: .75 + # Armor + NETHERRITE_HELMET: + MinimumLevel: 0 + XpMultiplier: 7 + NETHERRITE_CHESTPLATE: + MinimumLevel: 0 + XpMultiplier: 7 + NETHERRITE_LEGGINGS: + MinimumLevel: 0 + XpMultiplier: 7 + NETHERRITE_BOOTS: + MinimumLevel: 0 + XpMultiplier: 7 # # Leather repairables ### diff --git a/src/main/resources/salvage.vanilla.yml b/src/main/resources/salvage.vanilla.yml index 4f39ce75f..55e969c05 100644 --- a/src/main/resources/salvage.vanilla.yml +++ b/src/main/resources/salvage.vanilla.yml @@ -12,7 +12,7 @@ ## This defaults to OTHER. # # MaterialType: This is the type of the material of the item to be salvaged, this is only important for permissions. -## Valid values are STRING, LEATHER, WOOD, STONE, IRON, GOLD, DIAMOND, and OTHER +## Valid values are STRING, LEATHER, WOOD, STONE, IRON, GOLD, DIAMOND, NETHERRACK, and OTHER ## This defaults to OTHER. # # SalvageMaterial: This is the material name of the item used to salvage this item. @@ -219,6 +219,44 @@ Salvageables: MinimumLevel: 50 XpMultiplier: 6 MaximumQuantity: 4 + + NETHERRITE_SWORD: + MinimumLevel: 50 + XpMultiplier: .5 + MaximumQuantity: 2 + NETHERRITE_SHOVEL: + MinimumLevel: 50 + XpMultiplier: .3 + MaximumQuantity: 1 + NETHERRITE_PICKAXE: + MinimumLevel: 50 + XpMultiplier: 1 + MaximumQuantity: 3 + NETHERRITE_AXE: + MinimumLevel: 50 + XpMultiplier: 1 + MaximumQuantity: 3 + NETHERRITE_HOE: + MinimumLevel: 50 + XpMultiplier: .5 + MaximumQuantity: 2 + # Armor + NETHERRITE_HELMET: + MinimumLevel: 50 + XpMultiplier: 6 + MaximumQuantity: 5 + NETHERRITE_CHESTPLATE: + MinimumLevel: 50 + XpMultiplier: 6 + MaximumQuantity: 8 + NETHERRITE_LEGGINGS: + MinimumLevel: 50 + XpMultiplier: 6 + MaximumQuantity: 7 + NETHERRITE_BOOTS: + MinimumLevel: 50 + XpMultiplier: 6 + MaximumQuantity: 4 # # Leather salvageables ###