mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-22 21:26:46 +01:00
Adding herbalism green thumb ability to carrots, potatoes, and netherwart.
This commit is contained in:
parent
b93dafee63
commit
7859660ece
@ -11,33 +11,74 @@ import com.gmail.nossr50.datatypes.SkillType;
|
||||
public class GreenThumbTimer implements Runnable {
|
||||
private Block block;
|
||||
private PlayerProfile profile;
|
||||
private Material type;
|
||||
|
||||
public GreenThumbTimer(Block block, PlayerProfile profile) {
|
||||
public GreenThumbTimer(Block block, PlayerProfile profile, Material material) {
|
||||
this.block = block;
|
||||
this.profile = profile;
|
||||
this.type = material;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
block.setType(Material.CROPS);
|
||||
if(this.block.getType() != this.type)
|
||||
this.block.setType(this.type);
|
||||
|
||||
//This replants the wheat at a certain stage in development based on Herbalism Skill
|
||||
if (!profile.getAbilityMode(AbilityType.GREEN_TERRA)) {
|
||||
if (profile.getSkillLevel(SkillType.HERBALISM) >= 600) {
|
||||
block.setData(CropState.MEDIUM.getData());
|
||||
}
|
||||
else if (profile.getSkillLevel(SkillType.HERBALISM) >= 400) {
|
||||
block.setData(CropState.SMALL.getData());
|
||||
}
|
||||
else if (profile.getSkillLevel(SkillType.HERBALISM) >= 200) {
|
||||
block.setData(CropState.VERY_SMALL.getData());
|
||||
switch(this.type) {
|
||||
case CROPS:
|
||||
case CARROT:
|
||||
case POTATO:
|
||||
//This replants the wheat at a certain stage in development based on Herbalism Skill
|
||||
if (!this.profile.getAbilityMode(AbilityType.GREEN_TERRA)) {
|
||||
if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 600) {
|
||||
this.block.setData(CropState.MEDIUM.getData());
|
||||
}
|
||||
else if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 400) {
|
||||
this.block.setData(CropState.SMALL.getData());
|
||||
}
|
||||
else if (this.profile.getSkillLevel(SkillType.HERBALISM) >= 200) {
|
||||
this.block.setData(CropState.VERY_SMALL.getData());
|
||||
}
|
||||
else {
|
||||
this.block.setData(CropState.GERMINATED.getData());
|
||||
}
|
||||
}
|
||||
else {
|
||||
block.setData(CropState.GERMINATED.getData());
|
||||
this.block.setData(CropState.MEDIUM.getData());
|
||||
}
|
||||
}
|
||||
else {
|
||||
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) {
|
||||
mat = Material.NETHER_STALK;
|
||||
xp = Config.getInstance().getHerbalismXPNetherWart();
|
||||
|
||||
if (Permissions.getInstance().greenThumbNetherwart(player)) {
|
||||
greenThumbWheat(block, player, event, plugin);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -204,6 +208,11 @@ public class Herbalism {
|
||||
if ((((byte) data) & 0x8) == 0x8) {
|
||||
mat = Material.COCOA;
|
||||
xp = Config.getInstance().getHerbalismXPCocoa();
|
||||
|
||||
|
||||
if (Permissions.getInstance().greenThumbCocoa(player)) {
|
||||
greenThumbWheat(block, player, event, plugin);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -211,6 +220,11 @@ public class Herbalism {
|
||||
if (data == CropState.RIPE.getData()) {
|
||||
mat = Material.CARROT;
|
||||
xp = Config.getInstance().getHerbalismXPCarrot();
|
||||
|
||||
|
||||
if (Permissions.getInstance().greenThumbCarrots(player)) {
|
||||
greenThumbWheat(block, player, event, plugin);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -218,6 +232,10 @@ public class Herbalism {
|
||||
if (data == CropState.RIPE.getData()) {
|
||||
mat = Material.POTATO;
|
||||
xp = Config.getInstance().getHerbalismXPPotato();
|
||||
|
||||
if (Permissions.getInstance().greenThumbPotatoes(player)) {
|
||||
greenThumbWheat(block, player, event, plugin);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -386,8 +404,28 @@ public class Herbalism {
|
||||
PlayerProfile profile = Users.getProfile(player);
|
||||
int herbLevel = profile.getSkillLevel(SkillType.HERBALISM);
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
boolean hasSeeds = inventory.contains(Material.SEEDS);
|
||||
boolean hasSeeds = false;
|
||||
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;
|
||||
|
||||
@ -398,12 +436,35 @@ public class Herbalism {
|
||||
if (hasSeeds && profile.getAbilityMode(AbilityType.GREEN_TERRA) || hasSeeds && (herbLevel > MAX_BONUS_LEVEL || random.nextInt(randomChance) <= herbLevel)) {
|
||||
event.setCancelled(true);
|
||||
|
||||
Misc.dropItem(location, new ItemStack(Material.WHEAT));
|
||||
Misc.randomDropItems(location, new ItemStack(Material.SEEDS), 50, 3);
|
||||
switch(type) {
|
||||
case CROPS:
|
||||
Misc.dropItem(location, new ItemStack(Material.WHEAT));
|
||||
Misc.randomDropItems(location, new ItemStack(Material.SEEDS), 50, 3);
|
||||
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), 1);
|
||||
|
||||
inventory.removeItem(new ItemStack(Material.SEEDS));
|
||||
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new GreenThumbTimer(block, profile, type), 1);
|
||||
player.updateInventory(); // Needed until replacement available
|
||||
}
|
||||
}
|
||||
|
@ -264,6 +264,22 @@ public class Permissions {
|
||||
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) {
|
||||
return player.hasPermission("mcmmo.ability.herbalism.greenthumbwheat");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user