mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-11-24 19:45:43 +01:00
Recoded reward chests / item rewards; resolves #113
This commit is contained in:
parent
d0c725d2d7
commit
be7681480d
@ -8,6 +8,6 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>dungeonsxl</artifactId>
|
<artifactId>dungeonsxl</artifactId>
|
||||||
<version>0.14.1</version>
|
<version>0.14.2</version>
|
||||||
</parent>
|
</parent>
|
||||||
</project>
|
</project>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>dungeonsxl</artifactId>
|
<artifactId>dungeonsxl</artifactId>
|
||||||
<version>0.14.1</version>
|
<version>0.14.2</version>
|
||||||
</parent>
|
</parent>
|
||||||
<build>
|
<build>
|
||||||
<resources>
|
<resources>
|
||||||
|
@ -137,6 +137,7 @@ public enum DMessages implements Messages {
|
|||||||
LOG_ERROR_MOB_ENCHANTMENT("Log_Error_MobEnchantment", "&4Error at loading mob.yml: Enchantment &6&v1&4 doesn't exist!"),
|
LOG_ERROR_MOB_ENCHANTMENT("Log_Error_MobEnchantment", "&4Error at loading mob.yml: Enchantment &6&v1&4 doesn't exist!"),
|
||||||
LOG_ERROR_MOBTYPE("Log_Error_MobType", "&4Error at loading mob.yml: Mob &6&v1&4 doesn't exist!"),
|
LOG_ERROR_MOBTYPE("Log_Error_MobType", "&4Error at loading mob.yml: Mob &6&v1&4 doesn't exist!"),
|
||||||
LOG_ERROR_NO_CONSOLE_COMMAND("Log_Error_NoConsoleCommand", "&6/dxl &v1&4 can not be executed as console!"),
|
LOG_ERROR_NO_CONSOLE_COMMAND("Log_Error_NoConsoleCommand", "&6/dxl &v1&4 can not be executed as console!"),
|
||||||
|
LOG_ERROR_SIGN_SETUP("Log_Error_SignSetup", "&4A sign at &6&v1&4 is erroneous!"),
|
||||||
LOG_GENERATE_NEW_WORLD("Log_GenerateNewWorld", "&6Generating new world..."),
|
LOG_GENERATE_NEW_WORLD("Log_GenerateNewWorld", "&6Generating new world..."),
|
||||||
LOG_IMPORT_WORLD("Log_ImportWorld", "&6Importing world..."),
|
LOG_IMPORT_WORLD("Log_ImportWorld", "&6Importing world..."),
|
||||||
LOG_NEW_MAP("Log_NewDungeon", "&6Creating new map."),
|
LOG_NEW_MAP("Log_NewDungeon", "&6Creating new map."),
|
||||||
|
@ -51,6 +51,7 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.Chest;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -72,6 +73,7 @@ import org.bukkit.event.player.PlayerPortalEvent;
|
|||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
|
import org.bukkit.inventory.InventoryView;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.BookMeta;
|
import org.bukkit.inventory.meta.BookMeta;
|
||||||
|
|
||||||
@ -651,7 +653,28 @@ public class PlayerListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RewardChest.onOpenInventory(event);
|
InventoryView inventory = event.getView();
|
||||||
|
|
||||||
|
DGameWorld gameWorld = DGameWorld.getByWorld(event.getPlayer().getWorld());
|
||||||
|
|
||||||
|
if (gameWorld == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(inventory.getTopInventory().getHolder() instanceof Chest)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Chest chest = (Chest) inventory.getTopInventory().getHolder();
|
||||||
|
|
||||||
|
for (RewardChest rewardChest : gameWorld.getRewardChests()) {
|
||||||
|
if (!rewardChest.getChest().equals(chest)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
rewardChest.onOpen((Player) event.getPlayer());
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (!plugin.getMainConfig().getOpenInventories() && !DPermissions.hasPermission(event.getPlayer(), DPermissions.INSECURE)) {
|
if (!plugin.getMainConfig().getOpenInventories() && !DPermissions.hasPermission(event.getPlayer(), DPermissions.INSECURE)) {
|
||||||
World world = event.getPlayer().getWorld();
|
World world = event.getPlayer().getWorld();
|
||||||
|
@ -33,9 +33,7 @@ import io.github.dre2n.dungeonsxl.game.GameRules;
|
|||||||
import io.github.dre2n.dungeonsxl.game.GameType;
|
import io.github.dre2n.dungeonsxl.game.GameType;
|
||||||
import io.github.dre2n.dungeonsxl.game.GameTypeDefault;
|
import io.github.dre2n.dungeonsxl.game.GameTypeDefault;
|
||||||
import io.github.dre2n.dungeonsxl.mob.DMob;
|
import io.github.dre2n.dungeonsxl.mob.DMob;
|
||||||
import static io.github.dre2n.dungeonsxl.player.DGlobalPlayer.plugin;
|
|
||||||
import io.github.dre2n.dungeonsxl.requirement.Requirement;
|
import io.github.dre2n.dungeonsxl.requirement.Requirement;
|
||||||
import io.github.dre2n.dungeonsxl.reward.DLootInventory;
|
|
||||||
import io.github.dre2n.dungeonsxl.reward.Reward;
|
import io.github.dre2n.dungeonsxl.reward.Reward;
|
||||||
import io.github.dre2n.dungeonsxl.task.CreateDInstancePlayerTask;
|
import io.github.dre2n.dungeonsxl.task.CreateDInstancePlayerTask;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.DistanceTrigger;
|
import io.github.dre2n.dungeonsxl.trigger.DistanceTrigger;
|
||||||
@ -53,10 +51,8 @@ import org.bukkit.entity.Damageable;
|
|||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Wolf;
|
import org.bukkit.entity.Wolf;
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a player in a DGameWorld.
|
* Represents a player in a DGameWorld.
|
||||||
@ -75,8 +71,6 @@ public class DGamePlayer extends DInstancePlayer {
|
|||||||
private int wolfRespawnTime = 30;
|
private int wolfRespawnTime = 30;
|
||||||
private long offlineTime;
|
private long offlineTime;
|
||||||
|
|
||||||
private Inventory treasureInv = plugin.getServer().createInventory(getPlayer(), 45, DMessages.PLAYER_TREASURES.getMessage());
|
|
||||||
|
|
||||||
private int initialLives = -1;
|
private int initialLives = -1;
|
||||||
private int lives;
|
private int lives;
|
||||||
|
|
||||||
@ -341,21 +335,6 @@ public class DGamePlayer extends DInstancePlayer {
|
|||||||
this.offlineTime = offlineTime;
|
this.offlineTime = offlineTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the treasureInv
|
|
||||||
*/
|
|
||||||
public Inventory getTreasureInv() {
|
|
||||||
return treasureInv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param treasureInv
|
|
||||||
* the treasureInv to set
|
|
||||||
*/
|
|
||||||
public void setTreasureInv(Inventory treasureInv) {
|
|
||||||
this.treasureInv = treasureInv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the initialLives
|
* @return the initialLives
|
||||||
*/
|
*/
|
||||||
@ -428,8 +407,6 @@ public class DGamePlayer extends DInstancePlayer {
|
|||||||
reward.giveTo(getPlayer());
|
reward.giveTo(getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
addTreasure();
|
|
||||||
|
|
||||||
getData().logTimeLastPlayed(dGroup.getDungeon().getName());
|
getData().logTimeLastPlayed(dGroup.getDungeon().getName());
|
||||||
|
|
||||||
// Tutorial Permissions
|
// Tutorial Permissions
|
||||||
@ -846,10 +823,6 @@ public class DGamePlayer extends DInstancePlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addTreasure() {
|
|
||||||
new DLootInventory(getPlayer(), treasureInv.getContents());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(boolean updateSecond) {
|
public void update(boolean updateSecond) {
|
||||||
boolean locationValid = true;
|
boolean locationValid = true;
|
||||||
|
@ -36,8 +36,6 @@ public class DLootInventory {
|
|||||||
private InventoryView inventoryView;
|
private InventoryView inventoryView;
|
||||||
private Player player;
|
private Player player;
|
||||||
|
|
||||||
private long time;
|
|
||||||
|
|
||||||
public DLootInventory(Player player, ItemStack[] itemStacks) {
|
public DLootInventory(Player player, ItemStack[] itemStacks) {
|
||||||
plugin.getDLootInventories().add(this);
|
plugin.getDLootInventories().add(this);
|
||||||
|
|
||||||
@ -50,6 +48,7 @@ public class DLootInventory {
|
|||||||
this.player = player;
|
this.player = player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
/**
|
/**
|
||||||
* @return the inventory
|
* @return the inventory
|
||||||
*/
|
*/
|
||||||
@ -95,6 +94,8 @@ public class DLootInventory {
|
|||||||
this.player = player;
|
this.player = player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long time;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the time
|
* @return the time
|
||||||
*/
|
*/
|
||||||
@ -110,7 +111,7 @@ public class DLootInventory {
|
|||||||
this.time = time;
|
this.time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Static
|
/* Statics */
|
||||||
/**
|
/**
|
||||||
* @param player
|
* @param player
|
||||||
* the player whose DLootIntentory will be returned
|
* the player whose DLootIntentory will be returned
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012-2016 Frank Baumann
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package io.github.dre2n.dungeonsxl.reward;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class ItemReward extends Reward {
|
||||||
|
|
||||||
|
private RewardType type = RewardTypeDefault.ITEM;
|
||||||
|
|
||||||
|
private List<ItemStack> items = new ArrayList<>();
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
|
/**
|
||||||
|
* @return the reward items
|
||||||
|
*/
|
||||||
|
public ItemStack[] getItems() {
|
||||||
|
return items.toArray(new ItemStack[items.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param items
|
||||||
|
* the reward items to set
|
||||||
|
*/
|
||||||
|
public void setItems(ItemStack[] items) {
|
||||||
|
this.items = Arrays.asList(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param items
|
||||||
|
* the reward items to add
|
||||||
|
*/
|
||||||
|
public void addItems(ItemStack... items) {
|
||||||
|
this.items.addAll(Arrays.asList(items));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param items
|
||||||
|
* the reward items to remove
|
||||||
|
*/
|
||||||
|
public void removeItems(ItemStack... items) {
|
||||||
|
this.items.addAll(Arrays.asList(items));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RewardType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
|
@Override
|
||||||
|
public void giveTo(Player player) {
|
||||||
|
new DLootInventory(player, getItems());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -54,7 +54,7 @@ public class MoneyReward extends Reward {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void giveTo(Player player) {
|
public void giveTo(Player player) {
|
||||||
if (plugin.getEconomyProvider() == null) {
|
if (plugin.getEconomyProvider() == null || money == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,8 +29,6 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Chest;
|
import org.bukkit.block.Chest;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
|
||||||
import org.bukkit.inventory.InventoryView;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,8 +44,9 @@ public class RewardChest {
|
|||||||
private DGameWorld gameWorld;
|
private DGameWorld gameWorld;
|
||||||
private double moneyReward;
|
private double moneyReward;
|
||||||
private int levelReward;
|
private int levelReward;
|
||||||
|
private ItemStack[] itemReward;
|
||||||
|
|
||||||
public RewardChest(Block chest, DGameWorld gameWorld, double moneyReward, int levelReward) {
|
public RewardChest(Block chest, DGameWorld gameWorld, double moneyReward, int levelReward, ItemStack[] itemReward) {
|
||||||
if (!(chest.getState() instanceof Chest)) {
|
if (!(chest.getState() instanceof Chest)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -56,6 +55,7 @@ public class RewardChest {
|
|||||||
this.gameWorld = gameWorld;
|
this.gameWorld = gameWorld;
|
||||||
this.moneyReward = moneyReward;
|
this.moneyReward = moneyReward;
|
||||||
this.levelReward = levelReward;
|
this.levelReward = levelReward;
|
||||||
|
this.itemReward = itemReward;
|
||||||
|
|
||||||
gameWorld.getRewardChests().add(this);
|
gameWorld.getRewardChests().add(this);
|
||||||
}
|
}
|
||||||
@ -135,6 +135,23 @@ public class RewardChest {
|
|||||||
this.levelReward = levelReward;
|
this.levelReward = levelReward;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
|
/**
|
||||||
|
* @param opener
|
||||||
|
* the player who opens the chest
|
||||||
|
*/
|
||||||
|
public void onOpen(Player opener) {
|
||||||
|
if (used) {
|
||||||
|
MessageUtil.sendMessage(plugin.getServer().getPlayer(opener.getUniqueId()), DMessages.ERROR_CHEST_IS_OPENED.getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chest.getLocation().distance(chest.getLocation()) < 1) {
|
||||||
|
addTreasure(DGroup.getByPlayer(opener));
|
||||||
|
used = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void addTreasure(DGroup dGroup) {
|
public void addTreasure(DGroup dGroup) {
|
||||||
if (dGroup == null) {
|
if (dGroup == null) {
|
||||||
return;
|
return;
|
||||||
@ -142,14 +159,20 @@ public class RewardChest {
|
|||||||
|
|
||||||
boolean hasMoneyReward = false;
|
boolean hasMoneyReward = false;
|
||||||
boolean hasLevelReward = false;
|
boolean hasLevelReward = false;
|
||||||
|
boolean hasItemReward = false;
|
||||||
|
|
||||||
for (Reward reward : dGroup.getRewards()) {
|
for (Reward reward : dGroup.getRewards()) {
|
||||||
if (reward instanceof MoneyReward) {
|
if (reward.getType() == RewardTypeDefault.MONEY) {
|
||||||
hasMoneyReward = true;
|
hasMoneyReward = true;
|
||||||
((MoneyReward) reward).addMoney(moneyReward);
|
((MoneyReward) reward).addMoney(moneyReward);
|
||||||
} else if (reward instanceof LevelReward) {
|
|
||||||
|
} else if (reward.getType() == RewardTypeDefault.LEVEL) {
|
||||||
hasLevelReward = true;
|
hasLevelReward = true;
|
||||||
((LevelReward) reward).addLevels(levelReward);
|
((LevelReward) reward).addLevels(levelReward);
|
||||||
|
|
||||||
|
} else if (reward.getType() == RewardTypeDefault.ITEM) {
|
||||||
|
hasItemReward = true;
|
||||||
|
((ItemReward) reward).addItems(itemReward);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,95 +188,64 @@ public class RewardChest {
|
|||||||
dGroup.addReward(reward);
|
dGroup.addReward(reward);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!hasItemReward) {
|
||||||
|
Reward reward = Reward.create(RewardTypeDefault.ITEM);
|
||||||
|
((ItemReward) reward).addItems(itemReward);
|
||||||
|
dGroup.addReward(reward);
|
||||||
|
}
|
||||||
|
|
||||||
for (Player player : dGroup.getPlayers()) {
|
for (Player player : dGroup.getPlayers()) {
|
||||||
DGamePlayer dPlayer = DGamePlayer.getByPlayer(player);
|
DGamePlayer dPlayer = DGamePlayer.getByPlayer(player);
|
||||||
if (dPlayer == null) {
|
if (dPlayer == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
String msg = "";
|
if (itemReward != null) {
|
||||||
for (ItemStack itemStack : chest.getInventory().getContents()) {
|
String msg = "";
|
||||||
|
for (ItemStack itemStack : chest.getInventory().getContents()) {
|
||||||
|
|
||||||
if (itemStack == null) {
|
if (itemStack == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
dPlayer.getTreasureInv().addItem(itemStack);
|
|
||||||
String name = null;
|
|
||||||
|
|
||||||
if (itemStack.hasItemMeta()) {
|
|
||||||
if (itemStack.getItemMeta().hasDisplayName()) {
|
|
||||||
name = itemStack.getItemMeta().getDisplayName();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (name == null) {
|
String name = null;
|
||||||
if (Bukkit.getPluginManager().getPlugin("Vault") != null) {
|
|
||||||
ItemInfo itemInfo = Items.itemByStack(itemStack);
|
if (itemStack.hasItemMeta()) {
|
||||||
if (itemInfo != null) {
|
if (itemStack.getItemMeta().hasDisplayName()) {
|
||||||
name = itemInfo.getName();
|
name = itemStack.getItemMeta().getDisplayName();
|
||||||
} else {
|
|
||||||
name = itemStack.getType().name();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
|
||||||
name = itemStack.getType().toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (name == null) {
|
||||||
|
if (Bukkit.getPluginManager().getPlugin("Vault") != null) {
|
||||||
|
ItemInfo itemInfo = Items.itemByStack(itemStack);
|
||||||
|
if (itemInfo != null) {
|
||||||
|
name = itemInfo.getName();
|
||||||
|
} else {
|
||||||
|
name = itemStack.getType().name();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
name = itemStack.getType().toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
msg += ChatColor.RED + " " + itemStack.getAmount() + " " + name + ChatColor.GOLD + ",";
|
||||||
}
|
}
|
||||||
|
|
||||||
msg += ChatColor.RED + " " + itemStack.getAmount() + " " + name + ChatColor.GOLD + ",";
|
if (msg.length() >= 1) {
|
||||||
|
msg = msg.substring(0, msg.length() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageUtil.sendMessage(player, DMessages.PLAYER_LOOT_ADDED.getMessage(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg.length() >= 1) {
|
|
||||||
msg = msg.substring(0, msg.length() - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageUtil.sendMessage(player, plugin.getMessageConfig().getMessage(DMessages.PLAYER_LOOT_ADDED, msg));
|
|
||||||
if (moneyReward != 0 && plugin.getEconomyProvider() != null) {
|
if (moneyReward != 0 && plugin.getEconomyProvider() != null) {
|
||||||
MessageUtil.sendMessage(player, plugin.getMessageConfig().getMessage(DMessages.PLAYER_LOOT_ADDED, plugin.getEconomyProvider().format(moneyReward)));
|
MessageUtil.sendMessage(player, DMessages.PLAYER_LOOT_ADDED.getMessage(plugin.getEconomyProvider().format(moneyReward)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (levelReward != 0) {
|
if (levelReward != 0) {
|
||||||
MessageUtil.sendMessage(player, plugin.getMessageConfig().getMessage(DMessages.PLAYER_LOOT_ADDED, levelReward + " levels"));
|
MessageUtil.sendMessage(player, DMessages.PLAYER_LOOT_ADDED.getMessage(levelReward + " levels"));
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Statics */
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
* @param event
|
|
||||||
* event.getPlayer() has to be a Player
|
|
||||||
*/
|
|
||||||
public static void onOpenInventory(InventoryOpenEvent event) {
|
|
||||||
InventoryView inventory = event.getView();
|
|
||||||
|
|
||||||
DGameWorld gameWorld = DGameWorld.getByWorld(event.getPlayer().getWorld());
|
|
||||||
|
|
||||||
if (gameWorld == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(inventory.getTopInventory().getHolder() instanceof Chest)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Chest chest = (Chest) inventory.getTopInventory().getHolder();
|
|
||||||
|
|
||||||
for (RewardChest rewardChest : gameWorld.getRewardChests()) {
|
|
||||||
if (!rewardChest.chest.equals(chest)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rewardChest.used) {
|
|
||||||
MessageUtil.sendMessage(plugin.getServer().getPlayer(event.getPlayer().getUniqueId()), DMessages.ERROR_CHEST_IS_OPENED.getMessage());
|
|
||||||
event.setCancelled(true);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rewardChest.chest.getLocation().distance(chest.getLocation()) < 1) {
|
|
||||||
rewardChest.addTreasure(DGroup.getByPlayer((Player) event.getPlayer()));
|
|
||||||
rewardChest.used = true;
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,9 @@ package io.github.dre2n.dungeonsxl.reward;
|
|||||||
*/
|
*/
|
||||||
public enum RewardTypeDefault implements RewardType {
|
public enum RewardTypeDefault implements RewardType {
|
||||||
|
|
||||||
|
ITEM("item", ItemReward.class),
|
||||||
MONEY("money", MoneyReward.class),
|
MONEY("money", MoneyReward.class),
|
||||||
LEVEL("level", LevelReward.class),
|
LEVEL("level", LevelReward.class);
|
||||||
LOOT_INVENTORY("loot", Reward.class);
|
|
||||||
|
|
||||||
private String identifier;
|
private String identifier;
|
||||||
private Class<? extends Reward> handler;
|
private Class<? extends Reward> handler;
|
||||||
|
@ -20,7 +20,10 @@ import io.github.dre2n.commons.util.NumberUtil;
|
|||||||
import io.github.dre2n.dungeonsxl.reward.RewardChest;
|
import io.github.dre2n.dungeonsxl.reward.RewardChest;
|
||||||
import io.github.dre2n.dungeonsxl.world.DGameWorld;
|
import io.github.dre2n.dungeonsxl.world.DGameWorld;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.Chest;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Frank Baumann, Daniel Saukel
|
* @author Frank Baumann, Daniel Saukel
|
||||||
@ -29,14 +32,102 @@ public class ChestSign extends DSign {
|
|||||||
|
|
||||||
private DSignType type = DSignTypeDefault.CHEST;
|
private DSignType type = DSignTypeDefault.CHEST;
|
||||||
|
|
||||||
// Variables
|
private Block chest;
|
||||||
|
|
||||||
private double moneyReward;
|
private double moneyReward;
|
||||||
private int levelReward;
|
private int levelReward;
|
||||||
|
private ItemStack[] itemReward;
|
||||||
|
|
||||||
public ChestSign(Sign sign, String[] lines, DGameWorld gameWorld) {
|
public ChestSign(Sign sign, String[] lines, DGameWorld gameWorld) {
|
||||||
super(sign, lines, gameWorld);
|
super(sign, lines, gameWorld);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
|
/**
|
||||||
|
* @return the money reward
|
||||||
|
*/
|
||||||
|
public double getMoneyReward() {
|
||||||
|
return moneyReward;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param amount
|
||||||
|
* the amount to set
|
||||||
|
*/
|
||||||
|
public void setMoneyReward(double amount) {
|
||||||
|
moneyReward = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the level reward
|
||||||
|
*/
|
||||||
|
public int getLevelReward() {
|
||||||
|
return levelReward;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param amount
|
||||||
|
* the amount to set
|
||||||
|
*/
|
||||||
|
public void setLevelReward(int amount) {
|
||||||
|
levelReward = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the item reward
|
||||||
|
*/
|
||||||
|
public ItemStack[] getItemReward() {
|
||||||
|
if (itemReward == null) {
|
||||||
|
checkChest();
|
||||||
|
}
|
||||||
|
return itemReward;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param items
|
||||||
|
* the items to set as a reward
|
||||||
|
*/
|
||||||
|
public void setItemReward(ItemStack[] items) {
|
||||||
|
itemReward = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DSignType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
|
/**
|
||||||
|
* Checks for a chest next to the sign and sets the reward to its contents.
|
||||||
|
*/
|
||||||
|
public void checkChest() {
|
||||||
|
Block sign = getSign().getBlock();
|
||||||
|
for (int i = -1; i <= 1; i++) {
|
||||||
|
Block xRelative = sign.getRelative(i, 0, 0);
|
||||||
|
Block yRelative = sign.getRelative(0, i, 0);
|
||||||
|
Block zRelative = sign.getRelative(0, 0, i);
|
||||||
|
|
||||||
|
if (xRelative.getType() == Material.CHEST) {
|
||||||
|
if (itemReward == null) {
|
||||||
|
itemReward = ((Chest) xRelative.getState()).getBlockInventory().getContents();
|
||||||
|
}
|
||||||
|
chest = xRelative;
|
||||||
|
|
||||||
|
} else if (yRelative.getType() == Material.CHEST) {
|
||||||
|
if (itemReward == null) {
|
||||||
|
itemReward = ((Chest) yRelative.getState()).getBlockInventory().getContents();
|
||||||
|
}
|
||||||
|
chest = yRelative;
|
||||||
|
|
||||||
|
} else if (zRelative.getType() == Material.CHEST) {
|
||||||
|
if (itemReward == null) {
|
||||||
|
itemReward = ((Chest) zRelative.getState()).getBlockInventory().getContents();
|
||||||
|
}
|
||||||
|
chest = zRelative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean check() {
|
public boolean check() {
|
||||||
return true;
|
return true;
|
||||||
@ -54,26 +145,17 @@ public class ChestSign extends DSign {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = -1; i <= 1; i++) {
|
if (chest == null) {
|
||||||
if (getSign().getBlock().getRelative(i, 0, 0).getType() == Material.CHEST) {
|
checkChest();
|
||||||
new RewardChest(getSign().getBlock().getRelative(i, 0, 0), getGameWorld(), moneyReward, levelReward);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getSign().getBlock().getRelative(0, 0, i).getType() == Material.CHEST) {
|
|
||||||
new RewardChest(getSign().getBlock().getRelative(0, 0, i), getGameWorld(), moneyReward, levelReward);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getSign().getBlock().getRelative(0, i, 0).getType() == Material.CHEST) {
|
|
||||||
new RewardChest(getSign().getBlock().getRelative(0, i, 0), getGameWorld(), moneyReward, levelReward);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getSign().getBlock().setType(Material.AIR);
|
if (chest != null) {
|
||||||
}
|
new RewardChest(chest, getGameWorld(), moneyReward, levelReward, itemReward);
|
||||||
|
getSign().getBlock().setType(Material.AIR);
|
||||||
|
|
||||||
@Override
|
} else {
|
||||||
public DSignType getType() {
|
markAsErroneous();
|
||||||
return type;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package io.github.dre2n.dungeonsxl.sign;
|
|||||||
|
|
||||||
import io.github.dre2n.commons.util.messageutil.MessageUtil;
|
import io.github.dre2n.commons.util.messageutil.MessageUtil;
|
||||||
import io.github.dre2n.dungeonsxl.DungeonsXL;
|
import io.github.dre2n.dungeonsxl.DungeonsXL;
|
||||||
|
import io.github.dre2n.dungeonsxl.config.DMessages;
|
||||||
import io.github.dre2n.dungeonsxl.event.dsign.DSignRegistrationEvent;
|
import io.github.dre2n.dungeonsxl.event.dsign.DSignRegistrationEvent;
|
||||||
import io.github.dre2n.dungeonsxl.game.Game;
|
import io.github.dre2n.dungeonsxl.game.Game;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.Trigger;
|
import io.github.dre2n.dungeonsxl.trigger.Trigger;
|
||||||
@ -26,6 +27,7 @@ import java.lang.reflect.Constructor;
|
|||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -36,6 +38,11 @@ public abstract class DSign {
|
|||||||
|
|
||||||
static DungeonsXL plugin = DungeonsXL.getInstance();
|
static DungeonsXL plugin = DungeonsXL.getInstance();
|
||||||
|
|
||||||
|
public static final String ERROR_0 = ChatColor.DARK_RED + "## ERROR ##";
|
||||||
|
public static final String ERROR_1 = ChatColor.WHITE + "Please";
|
||||||
|
public static final String ERROR_2 = ChatColor.WHITE + "contact an";
|
||||||
|
public static final String ERROR_3 = ChatColor.WHITE + "Admin!";
|
||||||
|
|
||||||
private Sign sign;
|
private Sign sign;
|
||||||
protected String[] lines;
|
protected String[] lines;
|
||||||
private DGameWorld gameWorld;
|
private DGameWorld gameWorld;
|
||||||
@ -75,6 +82,7 @@ public abstract class DSign {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
/**
|
/**
|
||||||
* @return the sign
|
* @return the sign
|
||||||
*/
|
*/
|
||||||
@ -142,6 +150,7 @@ public abstract class DSign {
|
|||||||
triggers.remove(trigger);
|
triggers.remove(trigger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
public void onInit() {
|
public void onInit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,6 +194,20 @@ public abstract class DSign {
|
|||||||
return !triggers.isEmpty();
|
return !triggers.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a placeholder to show that the sign is setup incorrectly.
|
||||||
|
*/
|
||||||
|
public void markAsErroneous() {
|
||||||
|
sign.setLine(0, ERROR_0);
|
||||||
|
sign.setLine(1, ERROR_1);
|
||||||
|
sign.setLine(2, ERROR_2);
|
||||||
|
sign.setLine(3, ERROR_3);
|
||||||
|
sign.update();
|
||||||
|
|
||||||
|
DMessages.LOG_ERROR_SIGN_SETUP.getMessage(sign.getX() + ", " + sign.getY() + ", " + sign.getZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
public static DSign create(Sign sign, DGameWorld gameWorld) {
|
public static DSign create(Sign sign, DGameWorld gameWorld) {
|
||||||
return create(sign, sign.getLines(), gameWorld);
|
return create(sign, sign.getLines(), gameWorld);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>dungeonsxl</artifactId>
|
<artifactId>dungeonsxl</artifactId>
|
||||||
<version>0.14.1</version>
|
<version>0.14.2</version>
|
||||||
</parent>
|
</parent>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>dungeonsxl</artifactId>
|
<artifactId>dungeonsxl</artifactId>
|
||||||
<version>0.14.1</version>
|
<version>0.14.2</version>
|
||||||
</parent>
|
</parent>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>dungeonsxl</artifactId>
|
<artifactId>dungeonsxl</artifactId>
|
||||||
<version>0.14.1</version>
|
<version>0.14.2</version>
|
||||||
</parent>
|
</parent>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
2
pom.xml
2
pom.xml
@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>dungeonsxl</artifactId>
|
<artifactId>dungeonsxl</artifactId>
|
||||||
<version>0.14.1</version>
|
<version>0.14.2</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>DungeonsXL</name>
|
<name>DungeonsXL</name>
|
||||||
<url>https://dre2n.github.io</url>
|
<url>https://dre2n.github.io</url>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>dungeonsxl</artifactId>
|
<artifactId>dungeonsxl</artifactId>
|
||||||
<version>0.14.1</version>
|
<version>0.14.2</version>
|
||||||
</parent>
|
</parent>
|
||||||
<build>
|
<build>
|
||||||
<finalName>dungeonsxl-${project.version}${buildNo}</finalName>
|
<finalName>dungeonsxl-${project.version}${buildNo}</finalName>
|
||||||
|
Loading…
Reference in New Issue
Block a user