mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-22 13:16:45 +01:00
Add lifespan to Taming summons
This commit is contained in:
parent
b5a2e76926
commit
eda38cba66
@ -27,6 +27,8 @@ Version 1.5.01-dev
|
|||||||
+ Added options to tools.yml and armor.yml config files to set a pretty repair material name
|
+ Added options to tools.yml and armor.yml config files to set a pretty repair material name
|
||||||
+ Added full support for repairables in tools.yml and armor.yml config files
|
+ Added full support for repairables in tools.yml and armor.yml config files
|
||||||
+ Added magical mod config file import command, for Cauldron 1.7+. Check wiki for usage
|
+ Added magical mod config file import command, for Cauldron 1.7+. Check wiki for usage
|
||||||
|
+ Added particle effects and sounds to "Call of the Wild" (Taming)
|
||||||
|
+ Added summon length to "Call of the Wild". Summons will now commit suicide after their lifespan expires
|
||||||
= Fixed bug where pistons would mess with the block tracking
|
= Fixed bug where pistons would mess with the block tracking
|
||||||
= Fixed bug where the Updater was running on the main thread.
|
= Fixed bug where the Updater was running on the main thread.
|
||||||
= Fixed bug when players would use /ptp without being in a party
|
= Fixed bug when players would use /ptp without being in a party
|
||||||
|
@ -383,6 +383,7 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public boolean getDodgeEffectEnabled() { return config.getBoolean("Particles.Dodge", true); }
|
public boolean getDodgeEffectEnabled() { return config.getBoolean("Particles.Dodge", true); }
|
||||||
public boolean getBleedEffectEnabled() { return config.getBoolean("Particles.Bleed", true); }
|
public boolean getBleedEffectEnabled() { return config.getBoolean("Particles.Bleed", true); }
|
||||||
public boolean getGreaterImpactEffectEnabled() { return config.getBoolean("Particles.Greater_Impact", true); }
|
public boolean getGreaterImpactEffectEnabled() { return config.getBoolean("Particles.Greater_Impact", true); }
|
||||||
|
public boolean getCallOfTheWildEffectEnabled() { return config.getBoolean("Particles.Call_of_the_Wild", true); }
|
||||||
public boolean getLevelUpEffectsEnabled() { return config.getBoolean("Particles.LevelUp_Enabled", true); }
|
public boolean getLevelUpEffectsEnabled() { return config.getBoolean("Particles.LevelUp_Enabled", true); }
|
||||||
public int getLevelUpEffectsTier() { return config.getInt("Particles.LevelUp_Tier", 100); }
|
public int getLevelUpEffectsTier() { return config.getInt("Particles.LevelUp_Tier", 100); }
|
||||||
public boolean getLargeFireworks() { return config.getBoolean("Particles.LargeFireworks", true); }
|
public boolean getLargeFireworks() { return config.getBoolean("Particles.LargeFireworks", true); }
|
||||||
@ -496,7 +497,9 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public Material getTamingCOTWMaterial(EntityType type) { return Material.matchMaterial(config.getString("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Item_Material")); }
|
public Material getTamingCOTWMaterial(EntityType type) { return Material.matchMaterial(config.getString("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Item_Material")); }
|
||||||
public int getTamingCOTWCost(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Item_Amount"); }
|
public int getTamingCOTWCost(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Item_Amount"); }
|
||||||
public int getTamingCOTWAmount(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Summon_Amount"); }
|
public int getTamingCOTWAmount(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Summon_Amount"); }
|
||||||
|
public int getTamingCOTWLength(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type)+ ".Summon_Length"); }
|
||||||
public double getTamingCOTWRange() { return config.getDouble("Skills.Taming.Call_Of_The_Wild.Range", 40.0D); }
|
public double getTamingCOTWRange() { return config.getDouble("Skills.Taming.Call_Of_The_Wild.Range", 40.0D); }
|
||||||
|
public int getTamingCOTWMaxAmount(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type)+ "_MaxAmount"); }
|
||||||
|
|
||||||
/* Woodcutting */
|
/* Woodcutting */
|
||||||
public boolean getWoodcuttingDoubleDropsEnabled(TreeSpecies species) { return config.getBoolean("Double_Drops.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_")); }
|
public boolean getWoodcuttingDoubleDropsEnabled(TreeSpecies species) { return config.getBoolean("Double_Drops.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_")); }
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
package com.gmail.nossr50.skills.taming;
|
package com.gmail.nossr50.skills.taming;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.EntityEffect;
|
import org.bukkit.EntityEffect;
|
||||||
import org.bukkit.entity.AnimalTamer;
|
import org.bukkit.entity.AnimalTamer;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Tameable;
|
import org.bukkit.entity.Tameable;
|
||||||
import org.bukkit.entity.Wolf;
|
import org.bukkit.entity.Wolf;
|
||||||
@ -12,6 +16,8 @@ import com.gmail.nossr50.config.experience.ExperienceConfig;
|
|||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
|
||||||
public class Taming {
|
public class Taming {
|
||||||
|
private static List<TrackedTamingEntity> trackedEntities = new ArrayList<TrackedTamingEntity>();
|
||||||
|
|
||||||
public static int environmentallyAwareUnlockLevel = AdvancedConfig.getInstance().getEnviromentallyAwareUnlock();
|
public static int environmentallyAwareUnlockLevel = AdvancedConfig.getInstance().getEnviromentallyAwareUnlock();
|
||||||
public static int holyHoundUnlockLevel = AdvancedConfig.getInstance().getHolyHoundUnlock();
|
public static int holyHoundUnlockLevel = AdvancedConfig.getInstance().getHolyHoundUnlock();
|
||||||
|
|
||||||
@ -75,4 +81,14 @@ public class Taming {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static void addToTracker(LivingEntity livingEntity) {
|
||||||
|
TrackedTamingEntity trackedEntity = new TrackedTamingEntity(livingEntity);
|
||||||
|
|
||||||
|
trackedEntities.add(trackedEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static void removeFromTracker(TrackedTamingEntity trackedEntity) {
|
||||||
|
trackedEntities.remove(trackedEntity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package com.gmail.nossr50.skills.taming;
|
package com.gmail.nossr50.skills.taming;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Horse;
|
import org.bukkit.entity.Horse;
|
||||||
@ -24,6 +26,7 @@ import com.gmail.nossr50.skills.SkillManager;
|
|||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
||||||
|
|
||||||
public class TamingManager extends SkillManager {
|
public class TamingManager extends SkillManager {
|
||||||
@ -208,6 +211,7 @@ public class TamingManager extends SkillManager {
|
|||||||
|
|
||||||
ItemStack heldItem = player.getItemInHand();
|
ItemStack heldItem = player.getItemInHand();
|
||||||
int heldItemAmount = heldItem.getAmount();
|
int heldItemAmount = heldItem.getAmount();
|
||||||
|
Location location = player.getLocation();
|
||||||
|
|
||||||
if (heldItemAmount < summonAmount) {
|
if (heldItemAmount < summonAmount) {
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.NeedMore", StringUtils.getPrettyItemString(heldItem.getType())));
|
player.sendMessage(LocaleLoader.getString("Skills.NeedMore", StringUtils.getPrettyItemString(heldItem.getType())));
|
||||||
@ -219,9 +223,10 @@ public class TamingManager extends SkillManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int amount = Config.getInstance().getTamingCOTWAmount(type);
|
int amount = Config.getInstance().getTamingCOTWAmount(type);
|
||||||
|
int tamingCOTWLength = Config.getInstance().getTamingCOTWLength(type);
|
||||||
|
|
||||||
for (int i = 0; i < amount; i++) {
|
for (int i = 0; i < amount; i++) {
|
||||||
LivingEntity entity = (LivingEntity) player.getWorld().spawnEntity(player.getLocation(), type);
|
LivingEntity entity = (LivingEntity) player.getWorld().spawnEntity(location, type);
|
||||||
|
|
||||||
FakeEntityTameEvent event = new FakeEntityTameEvent(entity, player);
|
FakeEntityTameEvent event = new FakeEntityTameEvent(entity, player);
|
||||||
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
mcMMO.p.getServer().getPluginManager().callEvent(event);
|
||||||
@ -234,6 +239,10 @@ public class TamingManager extends SkillManager {
|
|||||||
((Tameable) entity).setOwner(player);
|
((Tameable) entity).setOwner(player);
|
||||||
entity.setRemoveWhenFarAway(false);
|
entity.setRemoveWhenFarAway(false);
|
||||||
|
|
||||||
|
if (tamingCOTWLength > 0) {
|
||||||
|
Taming.addToTracker(entity);
|
||||||
|
}
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case OCELOT:
|
case OCELOT:
|
||||||
((Ocelot) entity).setCatType(Ocelot.Type.values()[1 + Misc.getRandom().nextInt(3)]);
|
((Ocelot) entity).setCatType(Ocelot.Type.values()[1 + Misc.getRandom().nextInt(3)]);
|
||||||
@ -263,10 +272,19 @@ public class TamingManager extends SkillManager {
|
|||||||
entity.setCustomName(LocaleLoader.getString("Taming.Summon.Name.Format", player.getName(), StringUtils.getPrettyEntityTypeString(type)));
|
entity.setCustomName(LocaleLoader.getString("Taming.Summon.Name.Format", player.getName(), StringUtils.getPrettyEntityTypeString(type)));
|
||||||
entity.setCustomNameVisible(true);
|
entity.setCustomNameVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ParticleEffectUtils.playCallOfTheWildEffect(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
player.setItemInHand(heldItemAmount == summonAmount ? null : new ItemStack(heldItem.getType(), heldItemAmount - summonAmount));
|
player.setItemInHand(heldItemAmount == summonAmount ? null : new ItemStack(heldItem.getType(), heldItemAmount - summonAmount));
|
||||||
player.sendMessage(LocaleLoader.getString("Taming.Summon.Complete"));
|
|
||||||
|
String lifeSpan = "";
|
||||||
|
if (tamingCOTWLength > 0) {
|
||||||
|
lifeSpan = LocaleLoader.getString("Taming.Summon.Lifespan", tamingCOTWLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
player.sendMessage(LocaleLoader.getString("Taming.Summon.Complete") + lifeSpan);
|
||||||
|
player.playSound(location, Sound.FIREWORK_LARGE_BLAST2, 1F, 0.5F);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean rangeCheck(EntityType type) {
|
private boolean rangeCheck(EntityType type) {
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
package com.gmail.nossr50.skills.taming;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.util.Misc;
|
||||||
|
import com.gmail.nossr50.util.skills.CombatUtils;
|
||||||
|
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||||
|
|
||||||
|
public class TrackedTamingEntity extends BukkitRunnable {
|
||||||
|
private LivingEntity livingEntity;
|
||||||
|
private UUID id;
|
||||||
|
private long timeStamp;
|
||||||
|
private int length;
|
||||||
|
|
||||||
|
protected TrackedTamingEntity(LivingEntity livingEntity) {
|
||||||
|
this.livingEntity = livingEntity;
|
||||||
|
this.id = livingEntity.getUniqueId();
|
||||||
|
this.timeStamp = System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR;
|
||||||
|
|
||||||
|
this.length = Config.getInstance().getTamingCOTWLength(livingEntity.getType()) * Misc.TICK_CONVERSION_FACTOR;
|
||||||
|
|
||||||
|
this.runTaskLater(mcMMO.p, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (livingEntity.isValid()) {
|
||||||
|
Location location = livingEntity.getLocation();
|
||||||
|
location.getWorld().playSound(location, Sound.FIZZ, 0.8F, 0.8F);
|
||||||
|
ParticleEffectUtils.playCallOfTheWildEffect(livingEntity);
|
||||||
|
CombatUtils.dealDamage(livingEntity, livingEntity.getMaxHealth(), DamageCause.SUICIDE, livingEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
Taming.removeFromTracker(this);
|
||||||
|
this.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LivingEntity getLivingEntity() {
|
||||||
|
return livingEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected UUID getID() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected long getTimeStamp() {
|
||||||
|
return timeStamp;
|
||||||
|
}
|
||||||
|
}
|
@ -59,6 +59,14 @@ public final class ParticleEffectUtils {
|
|||||||
livingEntity.getWorld().createExplosion(location.getX(), location.getY(), location.getZ(), 0F, false, false);
|
livingEntity.getWorld().createExplosion(location.getX(), location.getY(), location.getZ(), 0F, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void playCallOfTheWildEffect(LivingEntity livingEntity) {
|
||||||
|
if (!Config.getInstance().getCallOfTheWildEffectEnabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
livingEntity.getWorld().playEffect(livingEntity.getEyeLocation(), Effect.MOBSPAWNER_FLAMES, 1);
|
||||||
|
}
|
||||||
|
|
||||||
public static void playAbilityEnabledEffect(Player player) {
|
public static void playAbilityEnabledEffect(Player player) {
|
||||||
if (!Config.getInstance().getAbilityActivationEffectEnabled()) {
|
if (!Config.getInstance().getAbilityActivationEffectEnabled()) {
|
||||||
return;
|
return;
|
||||||
|
@ -353,21 +353,26 @@ Skills:
|
|||||||
# Item_Material: Material of the item needed to summon the pet
|
# Item_Material: Material of the item needed to summon the pet
|
||||||
# Item_Amount: Amount of items required to summon the pet
|
# Item_Amount: Amount of items required to summon the pet
|
||||||
# Summon_Amount: Amount of pets to summon when using Call Of The Wild
|
# Summon_Amount: Amount of pets to summon when using Call Of The Wild
|
||||||
|
# Summon_Length: Pets despawn when their summon life length expires
|
||||||
Wolf:
|
Wolf:
|
||||||
Item_Material: BONE
|
Item_Material: BONE
|
||||||
Item_Amount: 10
|
Item_Amount: 10
|
||||||
Summon_Amount: 1
|
Summon_Amount: 1
|
||||||
|
Summon_Length: 240
|
||||||
Ocelot:
|
Ocelot:
|
||||||
Item_Material: RAW_FISH
|
Item_Material: RAW_FISH
|
||||||
Item_Amount: 10
|
Item_Amount: 10
|
||||||
Summon_Amount: 1
|
Summon_Amount: 1
|
||||||
|
Summon_Length: 240
|
||||||
Horse:
|
Horse:
|
||||||
Item_Material: APPLE
|
Item_Material: APPLE
|
||||||
Item_Amount: 10
|
Item_Amount: 10
|
||||||
Summon_Amount: 1
|
Summon_Amount: 1
|
||||||
|
Summon_Length: 240
|
||||||
|
|
||||||
# Range to check for nearby pets when using Call Of The Wild, 0 will disable the check
|
# Range to check for nearby pets when using Call Of The Wild, 0 will disable the check
|
||||||
Range: 40.0
|
Range: 40.0
|
||||||
|
|
||||||
Unarmed:
|
Unarmed:
|
||||||
Enabled_For_PVP: true
|
Enabled_For_PVP: true
|
||||||
Enabled_For_PVE: true
|
Enabled_For_PVE: true
|
||||||
@ -473,6 +478,7 @@ Particles:
|
|||||||
Dodge: true
|
Dodge: true
|
||||||
Bleed: true
|
Bleed: true
|
||||||
Greater_Impact: true
|
Greater_Impact: true
|
||||||
|
Call_of_the_Wild: true
|
||||||
|
|
||||||
# These settings determine if fireworks should get launched when a player levels-up,
|
# These settings determine if fireworks should get launched when a player levels-up,
|
||||||
# this will happen by default for every 100 levels.
|
# this will happen by default for every 100 levels.
|
||||||
|
@ -360,6 +360,7 @@ Taming.Listener=Taming:
|
|||||||
Taming.SkillName=TAMING
|
Taming.SkillName=TAMING
|
||||||
Taming.Skillup=[[YELLOW]]Taming skill increased by {0}. Total ({1})
|
Taming.Skillup=[[YELLOW]]Taming skill increased by {0}. Total ({1})
|
||||||
Taming.Summon.Complete=[[GREEN]]Summoning complete
|
Taming.Summon.Complete=[[GREEN]]Summoning complete
|
||||||
|
Taming.Summon.Lifespan=[[YELLOW]] (Lifespan: {0}s)
|
||||||
Taming.Summon.Fail.Ocelot=[[RED]]You have too many ocelots nearby to summon any more.
|
Taming.Summon.Fail.Ocelot=[[RED]]You have too many ocelots nearby to summon any more.
|
||||||
Taming.Summon.Fail.Wolf=[[RED]]You have too many wolves nearby to summon any more.
|
Taming.Summon.Fail.Wolf=[[RED]]You have too many wolves nearby to summon any more.
|
||||||
Taming.Summon.Fail.Horse=[[RED]]You have too many horses nearby to summon any more.
|
Taming.Summon.Fail.Horse=[[RED]]You have too many horses nearby to summon any more.
|
||||||
|
Loading…
Reference in New Issue
Block a user