Brew Drink command to simulate drinking a brew

This commit is contained in:
Sn0wStorm
2020-11-16 15:53:08 +01:00
parent 2471628e2d
commit 4111ceec81
11 changed files with 101 additions and 22 deletions
+7 -5
View File
@@ -161,12 +161,14 @@ public class BPlayer {
bPlayer = addPlayer(player);
}
BrewDrinkEvent drinkEvent = new BrewDrinkEvent(brew, meta, player, bPlayer);
P.p.getServer().getPluginManager().callEvent(drinkEvent);
if (drinkEvent.isCancelled()) {
if (bPlayer.drunkeness <= 0) {
bPlayer.remove();
if (meta != null) {
P.p.getServer().getPluginManager().callEvent(drinkEvent);
if (drinkEvent.isCancelled()) {
if (bPlayer.drunkeness <= 0) {
bPlayer.remove();
}
return false;
}
return false;
}
if (brew.hasRecipe()) {
+2 -2
View File
@@ -779,7 +779,7 @@ public class Brew implements Cloneable {
* @param recipe Recipe is required if the brew doesn't have a currentRecipe
* @return The created Item, null if the Event is cancelled
*/
public ItemStack createItem(BRecipe recipe) {
public ItemStack createItem(@Nullable BRecipe recipe) {
return createItem(recipe, true);
}
@@ -791,7 +791,7 @@ public class Brew implements Cloneable {
* @return The created Item, null if the Event is cancelled
*/
@Contract("_, false -> !null")
public ItemStack createItem(BRecipe recipe, boolean event) {
public ItemStack createItem(@Nullable BRecipe recipe, boolean event) {
if (recipe == null) {
recipe = getCurrentRecipe();
}
@@ -7,6 +7,7 @@ import com.dre.brewery.recipe.BRecipe;
import com.dre.brewery.recipe.Ingredient;
import com.dre.brewery.recipe.RecipeItem;
import com.dre.brewery.utility.BUtil;
import com.dre.brewery.utility.Tuple;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -16,6 +17,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Locale;
@@ -140,6 +142,10 @@ public class CommandListener implements CommandExecutor {
cmdPuke(sender, args);
} else if (cmd.equalsIgnoreCase("drink")) {
cmdDrink(sender, args);
} else {
if (p.getServer().getPlayerExact(cmd) != null || BPlayer.hasPlayerbyName(cmd)) {
@@ -214,6 +220,10 @@ public class CommandListener implements CommandExecutor {
cmds.add(p.languageReader.get("Help_Give"));
}
if (sender.hasPermission("brewery.cmd.drink") || sender.hasPermission("brewery.cmd.drinkOther")) {
cmds.add(p.languageReader.get("Help_Drink"));
}
if (sender.hasPermission("brewery.cmd.reload")) {
cmds.add(p.languageReader.get("Help_Configname"));
cmds.add(p.languageReader.get("Help_Reload"));
@@ -615,13 +625,35 @@ public class CommandListener implements CommandExecutor {
}
public void cmdCreate(CommandSender sender, String[] args) {
if (args.length < 2) {
p.msg(sender, p.languageReader.get("Etc_Usage"));
p.msg(sender, p.languageReader.get("Help_Create"));
return;
}
Tuple<Brew, Player> brewForPlayer = getFromCommand(sender, args);
if (brewForPlayer != null) {
if (brewForPlayer.b().getInventory().firstEmpty() == -1) {
p.msg(sender, p.languageReader.get("CMD_Copy_Error", "1"));
return;
}
ItemStack item = brewForPlayer.a().createItem(null);
if (item != null) {
brewForPlayer.b().getInventory().addItem(item);
p.msg(sender, p.languageReader.get("CMD_Created"));
}
}
}
@Nullable
public Tuple<Brew, Player> getFromCommand(CommandSender sender, String[] args) {
if (args.length < 2) {
return null;
}
int quality = 10;
boolean hasQuality = false;
String pName = null;
@@ -647,7 +679,7 @@ public class CommandListener implements CommandExecutor {
if (!(sender instanceof Player) && player == null) {
p.msg(sender, p.languageReader.get("Error_PlayerCommand"));
return;
return null;
}
if (player == null) {
@@ -675,22 +707,13 @@ public class CommandListener implements CommandExecutor {
}
name = name.replaceAll("\"", "");
if (player.getInventory().firstEmpty() == -1) {
p.msg(sender, p.languageReader.get("CMD_Copy_Error", "1"));
return;
}
BRecipe recipe = BRecipe.getMatching(name);
if (recipe != null) {
ItemStack item = recipe.create(quality);
if (item != null) {
player.getInventory().addItem(item);
p.msg(sender, p.languageReader.get("CMD_Created"));
}
return new Tuple<>(recipe.createBrew(quality), player);
} else {
p.msg(sender, p.languageReader.get("Error_NoBrewName", name));
}
return null;
}
public void cmdPuke(CommandSender sender, String[] args) {
@@ -728,7 +751,37 @@ public class CommandListener implements CommandExecutor {
count = 20 + (int) (Math.random() * 40);
}
BPlayer.addPuke(player, count);
return;
}
public void cmdDrink(CommandSender sender, String[] args) {
if (!sender.hasPermission("brewery.cmd.drink") || !sender.hasPermission("brewery.cmd.drink")) {
p.msg(sender, p.languageReader.get("Error_NoPermissions"));
return;
}
if (args.length < 2) {
p.msg(sender, p.languageReader.get("Etc_Usage"));
p.msg(sender, p.languageReader.get("Help_Drink"));
return;
}
Tuple<Brew, Player> brewForPlayer = getFromCommand(sender, args);
if (brewForPlayer != null) {
Player player = brewForPlayer.b();
if ((!sender.equals(player) && !sender.hasPermission("brewery.cmd.drinkOther")) ||
(sender.equals(player) && !sender.hasPermission("brewery.cmd.drink"))) {
p.msg(sender, p.languageReader.get("Error_NoPermissions"));
} else {
Brew brew = brewForPlayer.a();
String brewName = brew.getCurrentRecipe().getName(brew.getQuality());
BPlayer.drink(brew, null, player);
p.msg(player, p.languageReader.get("CMD_Drink", brewName));
if (!sender.equals(player)) {
p.msg(sender, p.languageReader.get("CMD_DrinkOther", player.getDisplayName(), brewName));
}
}
}
}
}