Added basic drunkenness

This commit is contained in:
Sn0wStorm 2013-04-30 01:23:29 +02:00
parent a7db7ff833
commit 2894985e71
5 changed files with 183 additions and 38 deletions

View File

@ -9,7 +9,6 @@ import org.bukkit.Material;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.inventory.meta.PotionMeta;
import com.dre.brewery.P;
import com.dre.brewery.BRecipe;
import com.dre.brewery.Brew;
@ -61,7 +60,7 @@ public class BIngredients {
//Potion is best with cooking only, can still be destilled, etc.
int quality =(int) Math.round((getIngredientQuality(cookRecipe) + getCookingQuality(cookRecipe)) / 2.0);
P.p.log("cooked potion has Quality: "+quality);
new Brew(uid,quality,new BIngredients(ingredients,cookedTime));
new Brew(uid,quality,cookRecipe.getAlcohol(),new BIngredients(ingredients,cookedTime));
cookedName = cookRecipe.getName(quality);
potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(false));

View File

@ -0,0 +1,109 @@
package com.dre.brewery;
import java.util.Map;
import java.util.HashMap;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.entity.Player;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.util.Vector;
import com.dre.brewery.Brew;
public class BPlayer {
public static Map<Player,BPlayer> players=new HashMap<Player,BPlayer>();
private int quality = 0;// = quality of drunkeness * drunkeness
private int drunkeness = 0;// = amount of drunkeness
private Vector push = new Vector(0,0,0);
private int time = 20;
public BPlayer(){
}
public static BPlayer get(Player player){
if(!players.isEmpty()){
if(players.containsKey(player)){
return players.get(player);
}
}
return null;
}
/*public void remove(BPlayer player){
players.remove(player);
}*/
//returns true if drinking was successful
public static boolean drink(PotionMeta meta,Player player){
Brew brew = Brew.get(meta);
if(brew != null){
BPlayer bPlayer = get(player);
if(bPlayer == null){
bPlayer = new BPlayer();
players.put(player,bPlayer);
}
bPlayer.drunkeness += brew.getAlcohol();
bPlayer.quality += brew.getQuality() * brew.getAlcohol();
P.p.msg(player,"Du bist nun "+bPlayer.drunkeness+"% betrunken, mit einer Qualität von "+bPlayer.getQuality());
return true;
}
return false;
}
//push the player around if he moves
public static void playerMove(PlayerMoveEvent event){
BPlayer bPlayer = get(event.getPlayer());
if(bPlayer != null){
bPlayer.move(event);
}
}
//player is drunk
public void move(PlayerMoveEvent event){
//has player more alc than 10
if(drunkeness >= 10){
if(drunkeness <= 100){
if(time > 1){
time--;
} else {
//Is he moving
if(event.getFrom().getX() != event.getTo().getX() || event.getFrom().getZ() != event.getTo().getZ()){
Player player = event.getPlayer();
Entity entity = (Entity) player;
//not in midair
if(entity.isOnGround()){
time--;
if(time == 0){
//push him only to the side? or any direction like now
push.setX(Math.random() - 0.5);
push.setZ(Math.random() - 0.5);
player.setVelocity(push);
} else if (time < 0 && time > -10){
//push him some more in the same direction
player.setVelocity(push);
} else {
//when more alc, push him more often
time = (int)(Math.random() * (201.0 - (drunkeness * 2)));
}
}
}
}
}
}
}
//getter
public int getDrunkeness(){
return drunkeness;
}
public int getQuality(){
return Math.round(quality / drunkeness);
}
}

View File

@ -90,6 +90,13 @@ public class BRecipe {
return false;
}
public boolean needsDistilling(){
if(distillruns == 0){
return true;
}
return false;
}
public boolean needsToAge(){
if(age == 0){
return false;
@ -171,5 +178,9 @@ public class BRecipe {
return difficulty;
}
public int getAlcohol(){
return alcohol;
}
}

View File

@ -12,8 +12,6 @@ import org.bukkit.inventory.BrewerInventory;
import com.dre.brewery.BIngredients;
import com.dre.brewery.P;
public class Brew {
public static Map<Integer,Brew> potions=new HashMap<Integer,Brew>();
@ -24,6 +22,7 @@ public class Brew {
private int quality;
private int distillRuns;
private float ageTime;
private int alcohol;
public Brew(int uid,BIngredients ingredients){
this.ingredients = ingredients;
@ -31,9 +30,10 @@ public class Brew {
}
//quality already set
public Brew(int uid,int quality,BIngredients ingredients){
public Brew(int uid,int quality,int alcohol,BIngredients ingredients){
this.ingredients = ingredients;
this.quality = quality;
this.alcohol = calcAlcohol(alcohol);
potions.put(uid,this);
}
@ -91,6 +91,39 @@ public class Brew {
return null;
}*/
//calculate alcohol from recipe
public int calcAlcohol(int alc){
if(distillRuns == 0){
distillRuns = 1;
}
alc /= distillRuns;
alc *= distillRuns * ((float)quality / 10.0);
return alc;
}
//calculating quality
public int calcQuality(BRecipe recipe,byte wood){
//calculate quality from all of the factors
float quality =(
ingredients.getIngredientQuality(recipe) +
ingredients.getCookingQuality(recipe) +
ingredients.getWoodQuality(recipe,wood) +
ingredients.getAgeQuality(recipe,ageTime));
quality /= 4;
return (int)Math.round(quality);
}
public int getQuality(){
return quality;
}
//return prev calculated alcohol
public int getAlcohol(){
return alcohol;
}
@ -116,15 +149,7 @@ public class Brew {
BRecipe recipe = brew.ingredients.getdistillRecipe();
if(recipe != null){
//calculate quality of ingredients and cookingtime
float quality = brew.ingredients.getIngredientQuality(recipe) + brew.ingredients.getCookingQuality(recipe);
quality /= 2;
/*if(recipe.getDistillRuns() > 1){
quality -= Math.abs(recipe.getDistillRuns() - (brew.distillRuns + 1)) * 2;
}*/
brew.quality = (int)Math.round(quality);
brew.quality = brew.calcQuality(recipe,(byte)0);
P.p.log("destilled "+recipe.getName(5)+" has Quality: "+brew.quality);
brew.distillRuns += 1;
//distillRuns will have an effect on the amount of alcohol, not the quality
@ -133,6 +158,7 @@ public class Brew {
lore.add(brew.distillRuns+" fach Destilliert");
potionMeta.setLore(lore);
}
brew.alcohol = brew.calcAlcohol(recipe.getAlcohol());
potionMeta.setDisplayName(recipe.getName(brew.quality));
@ -165,22 +191,16 @@ public class Brew {
if(brew.ageTime > 0.5){
BRecipe recipe = brew.ingredients.getAgeRecipe(wood,brew.ageTime);
if(recipe != null){
if(!recipe.needsDistilling() || brew.distillRuns > 0){
//calculate quality from all of the factors
float quality =(
brew.quality = brew.calcQuality(recipe,wood);
brew.alcohol = brew.calcAlcohol(recipe.getAlcohol());
P.p.log("Final "+recipe.getName(5)+" has Quality: "+brew.quality);
brew.ingredients.getIngredientQuality(recipe) +
brew.ingredients.getCookingQuality(recipe) +
brew.ingredients.getWoodQuality(recipe,wood) +
brew.ingredients.getAgeQuality(recipe,brew.ageTime));
quality /= 4;
brew.quality = (int)Math.round(quality);
P.p.log("Final "+recipe.getName(5)+" has Quality: "+brew.quality);
potionMeta.setDisplayName(recipe.getName(brew.quality));
item.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(false));
item.setItemMeta(potionMeta);
potionMeta.setDisplayName(recipe.getName(brew.quality));
item.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(false));
item.setItemMeta(potionMeta);
}
}
}
}

View File

@ -3,6 +3,7 @@ package com.dre.brewery.listeners;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.inventory.BrewEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -22,8 +23,7 @@ import com.dre.brewery.BCauldron;
import com.dre.brewery.BIngredients;
import com.dre.brewery.Brew;
import com.dre.brewery.Barrel;
import com.dre.brewery.P;
import com.dre.brewery.BPlayer;
public class PlayerListener implements Listener{
@EventHandler(priority = EventPriority.HIGH)
@ -130,23 +130,29 @@ public class PlayerListener implements Listener{
//player drinks a custom potion
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerItemConsume(PlayerItemConsumeEvent event){
if(event.getItem() != null){
if(event.getItem().getType() == Material.POTION){
if(event.getItem().hasItemMeta()){
PotionMeta potionMeta = ((PotionMeta) event.getItem().getItemMeta());
ItemStack item = event.getItem();
if(item != null){
if(item.getType() == Material.POTION){
if(item.hasItemMeta()){
PotionMeta potionMeta = ((PotionMeta) item.getItemMeta());
if(potionMeta.hasCustomEffect(PotionEffectType.REGENERATION)){
for(PotionEffect effect:potionMeta.getCustomEffects()){
if(effect.getType().getId() == 10){
//tell him the ID for testing
P.p.msg(event.getPlayer(),"ID: "+effect.getDuration());
if(BPlayer.drink(potionMeta,event.getPlayer())){
Brew.remove(item);
item.setType(Material.POTION);
}
}
}
}
}
}
}
}
//player walks while drunk, push him around!
@EventHandler(priority = EventPriority.LOW)
public void onPlayerMove(PlayerMoveEvent event){
BPlayer.playerMove(event);
}
}