mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-10-31 09:13:43 +01:00 
			
		
		
		
	Adding herbalism green thumb ability to carrots, potatoes, and netherwart.
This commit is contained in:
		| @@ -11,33 +11,74 @@ import com.gmail.nossr50.datatypes.SkillType; | |||||||
| public class GreenThumbTimer implements Runnable { | public class GreenThumbTimer implements Runnable { | ||||||
|     private Block block; |     private Block block; | ||||||
|     private PlayerProfile profile; |     private PlayerProfile profile; | ||||||
|  |     private Material type; | ||||||
|  |  | ||||||
|     public GreenThumbTimer(Block block, PlayerProfile profile) { |     public GreenThumbTimer(Block block, PlayerProfile profile, Material material) { | ||||||
|         this.block = block; |         this.block = block; | ||||||
|         this.profile = profile; |         this.profile = profile; | ||||||
|  |         this.type = material; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void run() { |     public void run() { | ||||||
|         block.setType(Material.CROPS); |         if(this.block.getType() != this.type) | ||||||
|  |             this.block.setType(this.type); | ||||||
|  |  | ||||||
|  |         switch(this.type) { | ||||||
|  |         case CROPS: | ||||||
|  |         case CARROT: | ||||||
|  |         case POTATO: | ||||||
|             //This replants the wheat at a certain stage in development based on Herbalism Skill |             //This replants the wheat at a certain stage in development based on Herbalism Skill | ||||||
|         if (!profile.getAbilityMode(AbilityType.GREEN_TERRA)) { |             if (!this.profile.getAbilityMode(AbilityType.GREEN_TERRA)) { | ||||||
|             if (profile.getSkillLevel(SkillType.HERBALISM) >= 600) { |                 if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 600) { | ||||||
|                 block.setData(CropState.MEDIUM.getData()); |                     this.block.setData(CropState.MEDIUM.getData()); | ||||||
|                 } |                 } | ||||||
|             else if (profile.getSkillLevel(SkillType.HERBALISM) >= 400) { |                 else if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 400) { | ||||||
|                 block.setData(CropState.SMALL.getData()); |                     this.block.setData(CropState.SMALL.getData()); | ||||||
|                 } |                 } | ||||||
|             else if (profile.getSkillLevel(SkillType.HERBALISM) >= 200) { |                 else if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 200) { | ||||||
|                 block.setData(CropState.VERY_SMALL.getData()); |                     this.block.setData(CropState.VERY_SMALL.getData()); | ||||||
|                 } |                 } | ||||||
|                 else { |                 else { | ||||||
|                 block.setData(CropState.GERMINATED.getData()); |                     this.block.setData(CropState.GERMINATED.getData()); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|             block.setData(CropState.MEDIUM.getData()); |                 this.block.setData(CropState.MEDIUM.getData()); | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |         case NETHER_WARTS: | ||||||
|  |             if (!this.profile.getAbilityMode(AbilityType.GREEN_TERRA)) { | ||||||
|  |                 if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 600) { | ||||||
|  |                     this.block.setData((byte) 2); | ||||||
|  |                 } | ||||||
|  |                 else if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 400) { | ||||||
|  |                     this.block.setData((byte) 1); | ||||||
|  |                 } | ||||||
|  |                 else { | ||||||
|  |                     this.block.setData((byte) 0); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 this.block.setData((byte) 2); | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |         case COCOA: | ||||||
|  |             if (!this.profile.getAbilityMode(AbilityType.GREEN_TERRA)) { | ||||||
|  |                 if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 600) { | ||||||
|  |                     this.block.setData((byte) ((this.block.getData() ^ ((byte) 0xc)) | ((byte) 4))); | ||||||
|  |                 } | ||||||
|  |                 else if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 400) { | ||||||
|  |                     this.block.setData((byte) ((this.block.getData() ^ ((byte) 0xc)) | ((byte) 4))); | ||||||
|  |                 } | ||||||
|  |                 else { | ||||||
|  |                     this.block.setData((byte) (this.block.getData() ^ ((byte) 0xc))); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 this.block.setData((byte) ((this.block.getData() ^ ((byte) 0xc)) | ((byte) 4))); | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -152,6 +152,10 @@ public class Herbalism { | |||||||
|             if (data == (byte) 0x3) { |             if (data == (byte) 0x3) { | ||||||
|                 mat = Material.NETHER_STALK; |                 mat = Material.NETHER_STALK; | ||||||
|                 xp = Config.getInstance().getHerbalismXPNetherWart(); |                 xp = Config.getInstance().getHerbalismXPNetherWart(); | ||||||
|  |  | ||||||
|  |                 if (Permissions.getInstance().greenThumbNetherwart(player)) { | ||||||
|  |                     greenThumbWheat(block, player, event, plugin); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
| @@ -204,6 +208,11 @@ public class Herbalism { | |||||||
|             if ((((byte) data) & 0x8) == 0x8) { |             if ((((byte) data) & 0x8) == 0x8) { | ||||||
|                 mat = Material.COCOA; |                 mat = Material.COCOA; | ||||||
|                 xp = Config.getInstance().getHerbalismXPCocoa(); |                 xp = Config.getInstance().getHerbalismXPCocoa(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 if (Permissions.getInstance().greenThumbCocoa(player)) { | ||||||
|  |                     greenThumbWheat(block, player, event, plugin); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
| @@ -211,6 +220,11 @@ public class Herbalism { | |||||||
|             if (data == CropState.RIPE.getData()) { |             if (data == CropState.RIPE.getData()) { | ||||||
|                 mat = Material.CARROT; |                 mat = Material.CARROT; | ||||||
|                 xp = Config.getInstance().getHerbalismXPCarrot(); |                 xp = Config.getInstance().getHerbalismXPCarrot(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 if (Permissions.getInstance().greenThumbCarrots(player)) { | ||||||
|  |                     greenThumbWheat(block, player, event, plugin); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
| @@ -218,6 +232,10 @@ public class Herbalism { | |||||||
|             if (data == CropState.RIPE.getData()) { |             if (data == CropState.RIPE.getData()) { | ||||||
|                 mat = Material.POTATO; |                 mat = Material.POTATO; | ||||||
|                 xp = Config.getInstance().getHerbalismXPPotato(); |                 xp = Config.getInstance().getHerbalismXPPotato(); | ||||||
|  |  | ||||||
|  |                 if (Permissions.getInstance().greenThumbPotatoes(player)) { | ||||||
|  |                     greenThumbWheat(block, player, event, plugin); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
| @@ -386,8 +404,28 @@ public class Herbalism { | |||||||
|         PlayerProfile profile = Users.getProfile(player); |         PlayerProfile profile = Users.getProfile(player); | ||||||
|         int herbLevel = profile.getSkillLevel(SkillType.HERBALISM); |         int herbLevel = profile.getSkillLevel(SkillType.HERBALISM); | ||||||
|         PlayerInventory inventory = player.getInventory(); |         PlayerInventory inventory = player.getInventory(); | ||||||
|         boolean hasSeeds = inventory.contains(Material.SEEDS); |         boolean hasSeeds = false; | ||||||
|         Location location = block.getLocation(); |         Location location = block.getLocation(); | ||||||
|  |         Material type = block.getType(); | ||||||
|  |  | ||||||
|  |         switch(type) { | ||||||
|  |         case CROPS: | ||||||
|  |             hasSeeds = inventory.contains(Material.SEEDS); | ||||||
|  |             break; | ||||||
|  |         case COCOA: | ||||||
|  |             // Broken: Requires an update to bukkit to enable seaching for variable-sized ItemStacks. | ||||||
|  |             hasSeeds = inventory.contains(new ItemStack(Material.INK_SACK, 1, (short) 3), 1); | ||||||
|  |             break; | ||||||
|  |         case CARROT: | ||||||
|  |             hasSeeds = inventory.contains(Material.CARROT_ITEM); | ||||||
|  |             break; | ||||||
|  |         case POTATO: | ||||||
|  |             hasSeeds = inventory.contains(Material.POTATO_ITEM); | ||||||
|  |             break; | ||||||
|  |         case NETHER_WARTS: | ||||||
|  |             hasSeeds = inventory.contains(Material.NETHER_STALK); | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         int randomChance = 1500; |         int randomChance = 1500; | ||||||
|  |  | ||||||
| @@ -398,12 +436,35 @@ public class Herbalism { | |||||||
|         if (hasSeeds && profile.getAbilityMode(AbilityType.GREEN_TERRA) || hasSeeds && (herbLevel > MAX_BONUS_LEVEL || random.nextInt(randomChance) <= herbLevel)) { |         if (hasSeeds && profile.getAbilityMode(AbilityType.GREEN_TERRA) || hasSeeds && (herbLevel > MAX_BONUS_LEVEL || random.nextInt(randomChance) <= herbLevel)) { | ||||||
|             event.setCancelled(true); |             event.setCancelled(true); | ||||||
|  |  | ||||||
|  |             switch(type) { | ||||||
|  |             case CROPS: | ||||||
|                 Misc.dropItem(location, new ItemStack(Material.WHEAT)); |                 Misc.dropItem(location, new ItemStack(Material.WHEAT)); | ||||||
|                 Misc.randomDropItems(location, new ItemStack(Material.SEEDS), 50, 3); |                 Misc.randomDropItems(location, new ItemStack(Material.SEEDS), 50, 3); | ||||||
|  |  | ||||||
|             plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new GreenThumbTimer(block, profile), 1); |  | ||||||
|  |  | ||||||
|                 inventory.removeItem(new ItemStack(Material.SEEDS)); |                 inventory.removeItem(new ItemStack(Material.SEEDS)); | ||||||
|  |                 break; | ||||||
|  |             case COCOA: | ||||||
|  |                 Misc.dropItem(location, new ItemStack(Material.INK_SACK, 3, (short) 3)); | ||||||
|  |                 inventory.removeItem(new ItemStack(Material.INK_SACK, 1, (short) 3)); | ||||||
|  |                 break; | ||||||
|  |             case CARROT: | ||||||
|  |                 Misc.dropItem(location, new ItemStack(Material.CARROT_ITEM)); | ||||||
|  |                 Misc.randomDropItems(location, new ItemStack(Material.CARROT_ITEM), 50, 3); | ||||||
|  |                 inventory.removeItem(new ItemStack(Material.POTATO_ITEM)); | ||||||
|  |                 break; | ||||||
|  |             case POTATO: | ||||||
|  |                 Misc.dropItem(location, new ItemStack(Material.POTATO_ITEM)); | ||||||
|  |                 Misc.randomDropItems(location, new ItemStack(Material.POTATO_ITEM), 50, 3); | ||||||
|  |                 Misc.randomDropItem(location, new ItemStack(Material.POISONOUS_POTATO), 2); | ||||||
|  |                 inventory.removeItem(new ItemStack(Material.POTATO_ITEM)); | ||||||
|  |                 break; | ||||||
|  |             case NETHER_WARTS: | ||||||
|  |                 Misc.dropItem(location, new ItemStack(Material.NETHER_STALK, 2)); | ||||||
|  |                 Misc.randomDropItems(location, new ItemStack(Material.NETHER_STALK), 50, 2); | ||||||
|  |                 inventory.removeItem(new ItemStack(Material.NETHER_STALK)); | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new GreenThumbTimer(block, profile, type), 1); | ||||||
|             player.updateInventory();   // Needed until replacement available |             player.updateInventory();   // Needed until replacement available | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -264,6 +264,22 @@ public class Permissions { | |||||||
|         return player.hasPermission("mcmmo.ability.herbalism.greenthumbblocks"); |         return player.hasPermission("mcmmo.ability.herbalism.greenthumbblocks"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public boolean greenThumbCarrots(Player player) { | ||||||
|  |         return player.hasPermission("mcmmo.ability.herbalism.greenthumbcarrots"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean greenThumbCocoa(Player player) { | ||||||
|  |         return player.hasPermission("mcmmo.ability.herbalism.greenthumbcocoa"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean greenThumbNetherwart(Player player) { | ||||||
|  |         return player.hasPermission("mcmmo.ability.herbalism.greenthumbnetherwart"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public boolean greenThumbPotatoes(Player player) { | ||||||
|  |         return player.hasPermission("mcmmo.ability.herbalism.greenthumbpotatoes"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public boolean greenThumbWheat(Player player) { |     public boolean greenThumbWheat(Player player) { | ||||||
|         return player.hasPermission("mcmmo.ability.herbalism.greenthumbwheat"); |         return player.hasPermission("mcmmo.ability.herbalism.greenthumbwheat"); | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Glitchfinder
					Glitchfinder