Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework items #134

Merged
merged 14 commits into from
Apr 13, 2024
61 changes: 48 additions & 13 deletions src/main/java/net/tiagofar78/prisonescape/Events.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package net.tiagofar78.prisonescape;

import net.tiagofar78.prisonescape.bukkit.BukkitItems;
import net.tiagofar78.prisonescape.game.PrisonEscapeGame;
import net.tiagofar78.prisonescape.game.PrisonEscapeItem;
import net.tiagofar78.prisonescape.game.prisonbuilding.ClickReturnAction;
import net.tiagofar78.prisonescape.game.prisonbuilding.PrisonEscapeLocation;
import net.tiagofar78.prisonescape.items.FunctionalItem;
import net.tiagofar78.prisonescape.items.Item;
import net.tiagofar78.prisonescape.items.ItemFactory;
import net.tiagofar78.prisonescape.managers.ConfigManager;
import net.tiagofar78.prisonescape.managers.GameManager;

Expand All @@ -17,13 +18,15 @@
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
Expand Down Expand Up @@ -61,23 +64,20 @@ public void playerMove(PlayerMoveEvent e) {

@EventHandler
public void playerInteractWithPrison(PlayerInteractEvent e) {
Block block = e.getClickedBlock();
if (block == null) {
return;
}

PrisonEscapeGame game = GameManager.getGame();
if (game == null) {
return;
}

Block block = e.getClickedBlock();

@SuppressWarnings("deprecation")
PrisonEscapeItem itemInHand = BukkitItems.convertToPrisonEscapeItem(
e.getPlayer().getItemInHand()
);
PrisonEscapeLocation location = new PrisonEscapeLocation(block.getX(), block.getY(), block.getZ());
Item itemInHand = ItemFactory.createItem(e.getPlayer().getItemInHand());
PrisonEscapeLocation location = block == null
? null
: new PrisonEscapeLocation(block.getX(), block.getY(), block.getZ());

int returnCode = game.playerInteractWithPrison(e.getPlayer().getName(), location, itemInHand);
int returnCode = game.playerInteract(e.getPlayer().getName(), location, itemInHand, e);
if (returnCode == 0) {
e.setCancelled(true);
}
Expand Down Expand Up @@ -151,7 +151,7 @@ public void playerClickInventory(InventoryClickEvent e) {
ItemStack current = e.getCurrentItem();

Player player = (Player) e.getWhoClicked();
PrisonEscapeItem item = BukkitItems.convertToPrisonEscapeItem(e.getCursor());
Item item = ItemFactory.createItem(e.getCursor());
ClickReturnAction returnAction = game.playerClickMenu(player.getName(), e.getSlot(), item, isPlayerInv);
if (returnAction == ClickReturnAction.IGNORE) {
return;
Expand Down Expand Up @@ -230,4 +230,39 @@ public void onBlockBreak(BlockBreakEvent event) {
}
}

@EventHandler
public void onPlayerInteractWithPlayer(PlayerInteractEntityEvent e) {
if (GameManager.getGame() == null) {
return;
}

@SuppressWarnings("deprecation")
Item item = ItemFactory.createItem(e.getPlayer().getItemInHand());

if (item.isFunctional()) {
((FunctionalItem) item).use(e);
}
}

@EventHandler
public void onPlayerCombat(EntityDamageByEntityEvent e) {
if (GameManager.getGame() == null) {
return;
}

Entity eAttacker = e.getDamager();
if (!(eAttacker instanceof Player)) {
return;
}

Player pAttacker = (Player) eAttacker;

@SuppressWarnings("deprecation")
Item item = ItemFactory.createItem(pAttacker.getItemInHand());

if (item.isFunctional()) {
((FunctionalItem) item).use(e);
}
}

}
2 changes: 0 additions & 2 deletions src/main/java/net/tiagofar78/prisonescape/PrisonEscape.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package net.tiagofar78.prisonescape;

import net.tiagofar78.prisonescape.commands.PrisonEscapeCommand;
import net.tiagofar78.prisonescape.kits.TeamSelectorKit;

import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
Expand Down Expand Up @@ -34,7 +33,6 @@ public void onEnable() {
getCommand(COMMAND_LABEL).setExecutor(new PrisonEscapeCommand());

getServer().getPluginManager().registerEvents(new Events(), this);
getServer().getPluginManager().registerEvents(new TeamSelectorKit(), this);
}

public static PrisonEscape getPrisonEscape() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.tiagofar78.prisonescape.bukkit;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;

public class BukkitEffectGiver {

private static final int TICKS_PER_SECOND = 20;

public static void giveSpeedEffect(String playerName, int level, int duration) {
Player player = Bukkit.getPlayer(playerName);
if (player == null || !player.isOnline()) {
return;
}

int ticksDuration = duration * TICKS_PER_SECOND;

player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, ticksDuration, level));
}

}
128 changes: 38 additions & 90 deletions src/main/java/net/tiagofar78/prisonescape/bukkit/BukkitItems.java
Original file line number Diff line number Diff line change
@@ -1,109 +1,57 @@
package net.tiagofar78.prisonescape.bukkit;

import net.tiagofar78.prisonescape.game.PrisonEscapeItem;
import net.tiagofar78.prisonescape.game.PrisonEscapeGame;
import net.tiagofar78.prisonescape.managers.GameManager;

import org.bukkit.Material;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.List;

public class BukkitItems {

public static PrisonEscapeItem convertToPrisonEscapeItem(ItemStack item) {
if (item == null) {
return null;
}
public static ItemStack createItemStack(Material type) {
return new ItemStack(type);
}

switch (item.getType()) {
case SPYGLASS:
return PrisonEscapeItem.SEARCH;
case IRON_BARS:
return PrisonEscapeItem.HANDCUFS;
case WOODEN_SHOVEL:
return PrisonEscapeItem.PLASTIC_SPOON;
case GOLDEN_SHOVEL:
return PrisonEscapeItem.METAL_SPOON;
case STONE_SHOVEL:
return PrisonEscapeItem.PLASTIC_SHOVEL;
case DIAMOND_SHOVEL:
return PrisonEscapeItem.METAL_SHOVEL;
case TORCH:
return PrisonEscapeItem.MATCHES;
case IRON_NUGGET:
return PrisonEscapeItem.BOLTS;
case SLIME_BALL:
return PrisonEscapeItem.DUCTTAPE;
case STRING:
return PrisonEscapeItem.WIRE;
case BOWL:
return PrisonEscapeItem.PLASTIC_PLATE;
case FLINT:
return PrisonEscapeItem.OIL;
case STICK:
return PrisonEscapeItem.STICK;
case POTION:
return PrisonEscapeItem.COFFEE;
default:
return null;
}
public static void setName(ItemStack item, String name) {
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);

item.setItemMeta(meta);
}

public static void setLore(ItemStack item, List<String> lore) {
ItemMeta meta = item.getItemMeta();
meta.setLore(lore);

item.setItemMeta(meta);
}

@SuppressWarnings("deprecation")
public static ItemStack getEventItem(PlayerInteractEvent e) {
return getEventItem(e.getPlayer().getItemInHand());
}

public static ItemStack convertToItemStack(PrisonEscapeItem item) {
if (item == null) {
@SuppressWarnings("deprecation")
public static ItemStack getEventItem(PlayerInteractEntityEvent e) {
return getEventItem(e.getPlayer().getItemInHand());
}

private static ItemStack getEventItem(ItemStack item) {
PrisonEscapeGame game = GameManager.getGame();
if (game == null) {
return null;
}

Material material;
switch (item) {
case SEARCH:
material = Material.SPYGLASS;
break;
case HANDCUFS:
material = Material.IRON_BARS;
break;
case PLASTIC_SPOON:
material = Material.WOODEN_SHOVEL;
break;
case METAL_SPOON:
material = Material.GOLDEN_SHOVEL;
break;
case PLASTIC_SHOVEL:
material = Material.STONE_SHOVEL;
break;
case METAL_SHOVEL:
material = Material.DIAMOND_SHOVEL;
break;
case MATCHES:
material = Material.TORCH;
break;
case BOLTS:
material = Material.IRON_NUGGET;
break;
case DUCTTAPE:
material = Material.SLIME_BALL;
break;
case WIRE:
material = Material.STRING;
break;
case PLASTIC_PLATE:
material = Material.BOWL;
break;
case OIL:
material = Material.FLINT;
break;
case STICK:
material = Material.STICK;
break;
case COFFEE:
material = Material.POTION;
break;
case ENERGY_DRINK:
material = Material.POTION;
break;
default:
material = Material.STONE;
break;
if (item == null || item.getType() == Material.AIR) {
return null;
}

return new ItemStack(material);
return item;
}

}
21 changes: 9 additions & 12 deletions src/main/java/net/tiagofar78/prisonescape/bukkit/BukkitMenu.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package net.tiagofar78.prisonescape.bukkit;

import net.tiagofar78.prisonescape.game.PrisonEscapeItem;
import net.tiagofar78.prisonescape.items.Item;
import net.tiagofar78.prisonescape.managers.MessageLanguageManager;

import org.bukkit.Bukkit;
Expand Down Expand Up @@ -33,11 +33,7 @@ private static ItemStack createGlassItem() {
private static final int[] NON_HIDDEN_ITEMS_INDEXES = {9 + 2, 9 + 3, 9 + 5, 9 + 6};
private static final int HIDDEN_ITEM_INDEX = 9 * 4 + 4;

public static void openVault(
String playerName,
List<PrisonEscapeItem> contents,
List<PrisonEscapeItem> hiddenContents
) {
public static void openVault(String playerName, List<Item> contents, List<Item> hiddenContents) {
Player bukkitPlayer = Bukkit.getPlayer(playerName);
if (bukkitPlayer == null || !bukkitPlayer.isOnline()) {
return;
Expand All @@ -54,7 +50,7 @@ public static void openVault(
}

for (int i = 0; i < contents.size(); i++) {
ItemStack item = BukkitItems.convertToItemStack(contents.get(i));
ItemStack item = contents.get(i).toItemStack(messages);
inv.setItem(NON_HIDDEN_ITEMS_INDEXES[i], item);
}

Expand All @@ -66,7 +62,7 @@ public static void openVault(
}
}

ItemStack hiddenItem = BukkitItems.convertToItemStack(hiddenContents.get(0));
ItemStack hiddenItem = hiddenContents.get(0).toItemStack(messages);
inv.setItem(HIDDEN_ITEM_INDEX, hiddenItem);

bukkitPlayer.openInventory(inv);
Expand Down Expand Up @@ -106,7 +102,7 @@ private static ItemStack createHiddenIndicatorItem(MessageLanguageManager messag
private static final int[] CHEST_CONTENT_INDEXES =
{SLOTS_PER_LINE * 1 + 2, SLOTS_PER_LINE * 1 + 3, SLOTS_PER_LINE * 1 + 4, SLOTS_PER_LINE * 1 + 5, SLOTS_PER_LINE * 1 + 6};

public static void openChest(String playerName, List<PrisonEscapeItem> contents) {
public static void openChest(String playerName, List<Item> contents) {
Player bukkitPlayer = Bukkit.getPlayer(playerName);
if (bukkitPlayer == null || !bukkitPlayer.isOnline()) {
return;
Expand All @@ -123,7 +119,7 @@ public static void openChest(String playerName, List<PrisonEscapeItem> contents)
}

for (int i = 0; i < contents.size(); i++) {
ItemStack item = BukkitItems.convertToItemStack(contents.get(i));
ItemStack item = contents.get(i).toItemStack(messages);
inv.setItem(CHEST_CONTENT_INDEXES[i], item);
}

Expand All @@ -146,13 +142,14 @@ public static int convertToIndexChest(int slot) {

private static final int[] UNCOVERED_INDEXES = {0, 1, 2, 3};

public static void setItem(String playerName, int slot, PrisonEscapeItem item) {
public static void setItem(String playerName, int slot, Item item) {
Player bukkitPlayer = Bukkit.getPlayer(playerName);
if (bukkitPlayer == null || !bukkitPlayer.isOnline()) {
return;
}

ItemStack bukkitItem = BukkitItems.convertToItemStack(item);
MessageLanguageManager messages = MessageLanguageManager.getInstanceByPlayer(playerName);
ItemStack bukkitItem = item.toItemStack(messages);
bukkitPlayer.getInventory().setItem(slot, bukkitItem);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package net.tiagofar78.prisonescape.dataobjects;

import net.tiagofar78.prisonescape.game.PrisonEscapeItem;
import net.tiagofar78.prisonescape.items.Item;

public class ItemProbability {

private PrisonEscapeItem _item;
private Item _item;
private double _probability;

public ItemProbability(PrisonEscapeItem item, double probability) {
public ItemProbability(Item item, double probability) {
_item = item;
_probability = probability;
}

public PrisonEscapeItem getItem() {
public Item getItem() {
return _item;
}

Expand Down
Loading
Loading