Skip to content

Commit ed28a2d

Browse files
authored
Merge pull request #133 from EndlessCodeGroup/rewrites
I almost read your code (t/o)
2 parents 0400a05 + 3a99fe4 commit ed28a2d

File tree

6 files changed

+137
-105
lines changed

6 files changed

+137
-105
lines changed

src/main/java/ru/endlesscode/rpginventory/event/listener/ArmorEquipListener.java

Lines changed: 72 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
package ru.endlesscode.rpginventory.event.listener;
2020

2121
import org.bukkit.Location;
22-
import org.bukkit.block.BlockFace;
22+
import org.bukkit.block.Block;
23+
import org.bukkit.entity.Entity;
24+
import org.bukkit.entity.EntityType;
2325
import org.bukkit.entity.Player;
2426
import org.bukkit.event.EventHandler;
2527
import org.bukkit.event.EventPriority;
@@ -32,7 +34,7 @@
3234
import org.bukkit.event.inventory.InventoryType;
3335
import org.bukkit.event.player.PlayerInteractEvent;
3436
import org.bukkit.inventory.ItemStack;
35-
import org.jetbrains.annotations.*;
37+
import org.jetbrains.annotations.NotNull;
3638
import ru.endlesscode.rpginventory.RPGInventory;
3739
import ru.endlesscode.rpginventory.api.InventoryAPI;
3840
import ru.endlesscode.rpginventory.inventory.ActionType;
@@ -44,6 +46,8 @@
4446
import ru.endlesscode.rpginventory.utils.ItemUtils;
4547
import ru.endlesscode.rpginventory.utils.PlayerUtils;
4648

49+
import java.util.Collection;
50+
4751
/**
4852
* Created by OsipXD on 08.04.2016
4953
* It is part of the RpgInventory.
@@ -144,48 +148,75 @@ public void onNormalEquip(@NotNull InventoryClickEvent event) {
144148
}
145149

146150
@EventHandler
147-
public void onDispenseEquip(@NotNull BlockDispenseEvent event) {
151+
public void onDispenseEquip(BlockDispenseEvent event) {
148152
ArmorType type = ArmorType.matchType(event.getItem());
149153
Location blockLoc = event.getBlock().getLocation();
154+
Collection<Entity> nearbyEntities = blockLoc.getWorld().getNearbyEntities(blockLoc, 3D, 1.2D, 3D);
155+
for (Entity entity : nearbyEntities) {
156+
if (entity.getType() != EntityType.PLAYER) {
157+
continue;
158+
}
150159

151-
for (Player player : blockLoc.getWorld().getPlayers()) {
152-
Location playerLoc = player.getLocation();
153-
154-
if (blockLoc.getBlockY() - playerLoc.getBlockY() >= -1
155-
&& blockLoc.getBlockY() - playerLoc.getBlockY() <= 1) {
156-
157-
if (type == ArmorType.HELMET && player.getInventory().getHelmet() == null
158-
|| type == ArmorType.CHESTPLATE && player.getInventory().getChestplate() == null
159-
|| type == ArmorType.LEGGINGS && player.getInventory().getLeggings() == null
160-
|| type == ArmorType.BOOTS && player.getInventory().getBoots() == null) {
161-
162-
org.bukkit.block.Dispenser dispenser = (org.bukkit.block.Dispenser) event.getBlock().getState();
163-
org.bukkit.material.Dispenser dis = (org.bukkit.material.Dispenser) dispenser.getData();
164-
BlockFace directionFacing = dis.getFacing();
165-
166-
// Someone told me not to do big if checks because it's hard to read, look at me doing it -_-
167-
if (directionFacing == BlockFace.EAST && playerLoc.getBlockX() != blockLoc.getBlockX()
168-
&& playerLoc.getX() <= blockLoc.getX() + 2.3 && playerLoc.getX() >= blockLoc.getX()
169-
|| directionFacing == BlockFace.WEST && playerLoc.getX() >= blockLoc.getX() - 1.3
170-
&& playerLoc.getX() <= blockLoc.getX()
171-
|| directionFacing == BlockFace.SOUTH
172-
&& playerLoc.getBlockZ() != blockLoc.getBlockZ()
173-
&& playerLoc.getZ() <= blockLoc.getZ() + 2.3 && playerLoc.getZ() >= blockLoc.getZ()
174-
|| directionFacing == BlockFace.NORTH && playerLoc.getZ() >= blockLoc.getZ() - 1.3
175-
&& playerLoc.getZ() <= blockLoc.getZ()) {
176-
177-
if (!InventoryManager.playerIsLoaded(player)) {
178-
return;
179-
}
180-
181-
Slot armorSlot = SlotManager.instance().getSlot(type.name());
182-
event.setCancelled(armorSlot != null
183-
&& !InventoryManager.validateArmor(
184-
player, InventoryAction.PLACE_ONE, armorSlot, event.getItem()));
185-
return;
186-
}
187-
}
160+
Player player = (Player) entity;
161+
if (!this.isPlayerInRightPosition(event.getBlock(), player)) {
162+
continue;
163+
}
164+
if (this.hasInventoryArmorByType(type, player)) {
165+
continue;
188166
}
167+
if (InventoryManager.playerIsLoaded(player)) {
168+
Slot armorSlot = SlotManager.instance().getSlot(type.name());
169+
event.setCancelled(armorSlot != null
170+
&& !InventoryManager.validateArmor(player, InventoryAction.PLACE_ONE, armorSlot, event.getItem())
171+
);
172+
return;
173+
}
174+
}
175+
}
176+
177+
//Read helpers \:D/
178+
private boolean hasInventoryArmorByType(ArmorType type, Player player) {
179+
switch (type) {
180+
case HELMET:
181+
return player.getInventory().getHelmet() != null;
182+
case CHESTPLATE:
183+
return player.getInventory().getChestplate() != null;
184+
case LEGGINGS:
185+
return player.getInventory().getLeggings() != null;
186+
case BOOTS:
187+
return player.getInventory().getBoots() != null;
188+
case UNKNOWN:
189+
default:
190+
return true; //Why no?
191+
}
192+
}
193+
194+
private boolean isPlayerInRightPosition(Block block, Player player) {
195+
final Location blockLoc = block.getLocation();
196+
final Location playerLoc = player.getLocation();
197+
org.bukkit.block.Dispenser dispenser = (org.bukkit.block.Dispenser) block.getState();
198+
org.bukkit.material.Dispenser dispenserData = (org.bukkit.material.Dispenser) dispenser.getData();
199+
/*
200+
From old 'if' statement
201+
// Someone told me not to do big if checks because it's hard to read, look at me doing it -_-
202+
203+
directionFacing == BlockFace.EAST && playerLoc.getBlockX() != blockLoc.getBlockX() && playerLoc.getX() <= blockLoc.getX() + 2.3 && playerLoc.getX() >= blockLoc.getX()
204+
|| directionFacing == BlockFace.WEST && playerLoc.getX() >= blockLoc.getX() - 1.3 && playerLoc.getX() <= blockLoc.getX()
205+
|| directionFacing == BlockFace.SOUTH && playerLoc.getBlockZ() != blockLoc.getBlockZ() && playerLoc.getZ() <= blockLoc.getZ() + 2.3 && playerLoc.getZ() >= lockLoc.getZ()
206+
|| directionFacing == BlockFace.NORTH && playerLoc.getZ() >= blockLoc.getZ() - 1.3 && playerLoc.getZ() <= blockLoc.getZ()+
207+
*/
208+
switch (dispenserData.getFacing()) {
209+
case EAST:
210+
return playerLoc.getBlockX() != blockLoc.getBlockX() && playerLoc.getX() <= blockLoc.getX() + 2.3 && playerLoc.getX() >= blockLoc.getX();
211+
case WEST:
212+
return playerLoc.getX() >= blockLoc.getX() - 1.3 && playerLoc.getX() <= blockLoc.getX();
213+
case SOUTH:
214+
return playerLoc.getBlockZ() != blockLoc.getBlockZ() && playerLoc.getZ() <= blockLoc.getZ() + 2.3 && playerLoc.getZ() >= blockLoc.getZ();
215+
case NORTH:
216+
return playerLoc.getZ() >= blockLoc.getZ() - 1.3 && playerLoc.getZ() <= blockLoc.getZ();
217+
default:
218+
return false;
219+
189220
}
190221
}
191-
}
222+
}

src/main/java/ru/endlesscode/rpginventory/inventory/InventoryLocker.java

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.bukkit.GameMode;
2222
import org.bukkit.OfflinePlayer;
23+
import org.bukkit.configuration.file.FileConfiguration;
2324
import org.bukkit.entity.Player;
2425
import org.bukkit.inventory.ItemStack;
2526
import org.bukkit.inventory.meta.ItemMeta;
@@ -44,8 +45,8 @@
4445
*/
4546
public class InventoryLocker {
4647

47-
private static ItemStack lockedSlot = null;
48-
private static ItemStack buyableSlot = null;
48+
private static ItemStack LOCKED_SLOT = null;
49+
private static ItemStack BUYABLE_SLOT = null;
4950

5051
private InventoryLocker() {
5152
}
@@ -57,24 +58,23 @@ public static boolean init(@NotNull RPGInventory instance) {
5758

5859
try {
5960
// Setup locked slot
60-
lockedSlot = ItemUtils.getTexturedItem(Config.getConfig().getString("slots.locked"));
61-
ItemMeta meta = lockedSlot.getItemMeta();
61+
InventoryLocker.LOCKED_SLOT = ItemUtils.getTexturedItem(Config.getConfig().getString("slots.locked"));
62+
ItemMeta meta = InventoryLocker.LOCKED_SLOT.getItemMeta();
6263
meta.setDisplayName(RPGInventory.getLanguage().getMessage("locked.name"));
6364
meta.setLore(Collections.singletonList(RPGInventory.getLanguage().getMessage("locked.lore")));
6465

65-
lockedSlot.setItemMeta(meta);
66-
lockedSlot = addId(lockedSlot);
66+
InventoryLocker.LOCKED_SLOT.setItemMeta(meta);
67+
InventoryLocker.LOCKED_SLOT = addId(InventoryLocker.LOCKED_SLOT);
6768

6869
// Setup buyable slot
69-
buyableSlot = ItemUtils.getTexturedItem(Config.getConfig().getString("slots.buyable"));
70-
meta = buyableSlot.getItemMeta();
70+
InventoryLocker.BUYABLE_SLOT = ItemUtils.getTexturedItem(Config.getConfig().getString("slots.buyable"));
71+
meta = InventoryLocker.BUYABLE_SLOT.getItemMeta();
7172
meta.setDisplayName(RPGInventory.getLanguage().getMessage("buyable.name"));
7273
meta.setLore(Collections.singletonList(RPGInventory.getLanguage().getMessage("buyable.lore")));
7374

74-
buyableSlot.setItemMeta(meta);
75-
buyableSlot = addId(buyableSlot);
75+
InventoryLocker.BUYABLE_SLOT.setItemMeta(meta);
76+
InventoryLocker.BUYABLE_SLOT = addId(InventoryLocker.BUYABLE_SLOT);
7677
} catch (Exception e) {
77-
7878
e.printStackTrace();
7979
return false;
8080
}
@@ -88,14 +88,16 @@ private static boolean isEnabled() {
8888
}
8989

9090
public static boolean buySlot(@NotNull Player player, int line) {
91-
if (RPGInventory.economyConnected() && RPGInventory.getEconomy().withdrawPlayer(player, Config.getConfig().getDouble("slots.money.cost.line" + line)).transactionSuccess()) {
92-
if (RPGInventory.getLevelSystem() == PlayerUtils.LevelSystem.EXP && Config.getConfig().getBoolean("slots.level.spend")) {
93-
player.setLevel(player.getLevel() - Config.getConfig().getInt("slots.level.required.line" + line));
91+
if (!RPGInventory.economyConnected()) {
92+
return false;
93+
}
94+
final FileConfiguration config = Config.getConfig();
95+
if (RPGInventory.getEconomy().withdrawPlayer(player, config.getDouble("slots.money.cost.line" + line)).transactionSuccess()) {
96+
if (RPGInventory.getLevelSystem() == PlayerUtils.LevelSystem.EXP && config.getBoolean("slots.level.spend")) {
97+
player.setLevel(player.getLevel() - config.getInt("slots.level.required.line" + line));
9498
}
95-
9699
return true;
97100
}
98-
99101
return false;
100102
}
101103

@@ -106,17 +108,17 @@ public static int getLine(int slot) {
106108

107109
@NotNull
108110
public static ItemStack getBuyableSlotForLine(int line) {
109-
ItemStack slot = buyableSlot.clone();
111+
ItemStack slot = InventoryLocker.BUYABLE_SLOT.clone();
110112
ItemMeta im = slot.getItemMeta();
111113
List<String> lore = im.getLore();
112114
FileLanguage lang = RPGInventory.getLanguage();
113-
114-
if (Config.getConfig().getBoolean("slots.money.enabled")) {
115-
lore.add(lang.getMessage("buyable.money", StringUtils.doubleToString(Config.getConfig().getDouble("slots.money.cost.line" + line))));
115+
final FileConfiguration config = Config.getConfig();
116+
if (config.getBoolean("slots.money.enabled")) {
117+
lore.add(lang.getMessage("buyable.money", StringUtils.doubleToString(config.getDouble("slots.money.cost.line" + line))));
116118
}
117119

118-
if (Config.getConfig().getBoolean("slots.level.enabled")) {
119-
lore.add(lang.getMessage("buyable.level", Config.getConfig().getInt("slots.level.required.line" + line)));
120+
if (config.getBoolean("slots.level.enabled")) {
121+
lore.add(lang.getMessage("buyable.level", config.getInt("slots.level.required.line" + line)));
120122
}
121123
im.setLore(lore);
122124
slot.setItemMeta(im);
@@ -130,11 +132,11 @@ private static ItemStack addId(ItemStack item) {
130132
}
131133

132134
public static boolean isLockedSlot(@Nullable ItemStack item) {
133-
return isEnabled() && !ItemUtils.isEmpty(item) && ItemUtils.hasTag(item, "locked");
135+
return InventoryLocker.isEnabled() && !ItemUtils.isEmpty(item) && ItemUtils.hasTag(item, "locked");
134136
}
135137

136138
public static boolean isBuyableSlot(ItemStack currentItem, int line) {
137-
return getBuyableSlotForLine(line).equals(currentItem);
139+
return InventoryLocker.getBuyableSlotForLine(line).equals(currentItem);
138140
}
139141

140142
public static void lockSlots(@NotNull Player player) {
@@ -146,10 +148,10 @@ public static void lockSlots(@NotNull Player player, boolean force) {
146148
return;
147149
}
148150

149-
if (isEnabled()) {
151+
if (InventoryLocker.isEnabled()) {
150152
int maxSlot = getSlots(player) + 8;
151153
for (int i = 35; i > maxSlot; i--) {
152-
player.getInventory().setItem(i, lockedSlot);
154+
player.getInventory().setItem(i, InventoryLocker.LOCKED_SLOT);
153155
}
154156

155157
if (maxSlot < 35) {
@@ -162,10 +164,10 @@ public static void lockSlots(@NotNull Player player, boolean force) {
162164
}
163165

164166
public static void unlockSlots(@NotNull Player player) {
165-
if (isEnabled()) {
167+
if (InventoryLocker.isEnabled()) {
166168
for (int i = 8 + getSlots(player); i < 36; i++) {
167169
ItemStack itemStack = player.getInventory().getItem(i);
168-
if (isLockedSlot(itemStack)) {
170+
if (InventoryLocker.isLockedSlot(itemStack)) {
169171
player.getInventory().setItem(i, null);
170172
}
171173
}
@@ -176,16 +178,17 @@ public static void unlockSlots(@NotNull Player player) {
176178
}
177179

178180
public static boolean canBuySlot(@NotNull Player player, int line) {
179-
if (Config.getConfig().getBoolean("slots.money.enabled")) {
180-
double cost = Config.getConfig().getDouble("slots.money.cost.line" + line);
181+
final FileConfiguration config = Config.getConfig();
182+
if (config.getBoolean("slots.money.enabled")) {
183+
double cost = config.getDouble("slots.money.cost.line" + line);
181184

182185
if (!PlayerUtils.checkMoney(player, cost)) {
183186
return false;
184187
}
185188
}
186189

187-
if (Config.getConfig().getBoolean("slots.level.enabled")) {
188-
int requirement = Config.getConfig().getInt("slots.level.required.line" + line);
190+
if (config.getBoolean("slots.level.enabled")) {
191+
int requirement = config.getInt("slots.level.required.line" + line);
189192

190193
if (!PlayerUtils.checkLevel(player, requirement)) {
191194
PlayerUtils.sendMessage(player, RPGInventory.getLanguage().getMessage("error.level", requirement));

0 commit comments

Comments
 (0)