Преглед на файлове

Remove some code duplication in our ShareHandler.

GJ преди 12 години
родител
ревизия
7a61f55e49
променени са 1 файла, в които са добавени 52 реда и са изтрити 65 реда
  1. 52 65
      src/main/java/com/gmail/nossr50/party/ShareHandler.java

+ 52 - 65
src/main/java/com/gmail/nossr50/party/ShareHandler.java

@@ -65,12 +65,7 @@ public final class ShareHandler {
                 }
 
                 double partySize = nearMembers.size() + 1;
-                double shareBonus = Config.getInstance().getPartyShareBonusBase() + partySize * Config.getInstance().getPartyShareBonusIncrease();
-
-                if (shareBonus > Config.getInstance().getPartyShareBonusCap()) {
-                    shareBonus = Config.getInstance().getPartyShareBonusCap();
-                }
-
+                double shareBonus = Math.min(Config.getInstance().getPartyShareBonusBase() + partySize * Config.getInstance().getPartyShareBonusIncrease(), Config.getInstance().getPartyShareBonusCap());
                 float splitXp = (float) (xp / partySize * shareBonus);
 
                 for (Player member : nearMembers) {
@@ -78,7 +73,6 @@ public final class ShareHandler {
                 }
 
                 mcMMOPlayer.beginUnsharedXpGain(skillType, splitXp);
-
                 return true;
 
             case NONE:
@@ -96,32 +90,43 @@ public final class ShareHandler {
      */
     public static boolean handleItemShare(Item drop, McMMOPlayer mcMMOPlayer) {
         ItemStack itemStack = drop.getItemStack();
+        ItemShareType dropType = ItemShareType.getShareType(itemStack);
+
+        if (dropType == null) {
+            return false;
+        }
+
         Party party = mcMMOPlayer.getParty();
-        Player player = mcMMOPlayer.getPlayer();
-        Player winningPlayer = null;
 
-        ItemStack newStack = itemStack.clone();
-        newStack.setAmount(1);
+        if (!party.sharingDrops(dropType)) {
+            return false;
+        }
 
-        ItemShareType dropType = ItemShareType.getShareType(itemStack);
+        ShareMode shareMode = party.getItemShareMode();
 
-        if (dropType == null || !party.sharingDrops(dropType)) {
+        if (shareMode == ShareMode.NONE) {
             return false;
         }
 
-        switch (party.getItemShareMode()) {
-            case EQUAL:
-                McMMOPlayer mcMMOTarget;
-                nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
+        Player player = mcMMOPlayer.getPlayer();
 
-                if (nearMembers.isEmpty()) {
-                    return false;
-                }
+        nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
 
-                nearMembers.add(player);
-                partySize = nearMembers.size();
+        if (nearMembers.isEmpty()) {
+            return false;
+        }
+
+        Player winningPlayer = null;
+        ItemStack newStack = itemStack.clone();
+
+        nearMembers.add(player);
+        partySize = nearMembers.size();
+
+        drop.remove();
+        newStack.setAmount(1);
 
-                drop.remove();
+        switch (shareMode) {
+            case EQUAL:
                 int itemWeight = ItemWeightConfig.getInstance().getItemWeight(itemStack.getType());
 
                 for (int i = 0; i < itemStack.getAmount(); i++) {
@@ -132,64 +137,46 @@ public final class ShareHandler {
                         int itemShareModifier = mcMMOMember.getItemShareModifier();
                         int diceRoll = Misc.getRandom().nextInt(itemShareModifier);
 
-                        if (diceRoll > highestRoll) {
-                            highestRoll = diceRoll;
-
-                            if (winningPlayer != null) {
-                                McMMOPlayer mcMMOWinning = UserManager.getPlayer(winningPlayer);
-                                mcMMOWinning.setItemShareModifier(mcMMOWinning.getItemShareModifier() + itemWeight);
-                            }
-
-                            winningPlayer = member;
-                        }
-                        else {
+                        if (diceRoll <= highestRoll) {
                             mcMMOMember.setItemShareModifier(itemShareModifier + itemWeight);
+                            continue;
                         }
-                    }
 
-                    mcMMOTarget = UserManager.getPlayer(winningPlayer);
-                    mcMMOTarget.setItemShareModifier(mcMMOTarget.getItemShareModifier() - itemWeight);
+                        highestRoll = diceRoll;
+
+                        if (winningPlayer != null) {
+                            McMMOPlayer mcMMOWinning = UserManager.getPlayer(winningPlayer);
+                            mcMMOWinning.setItemShareModifier(mcMMOWinning.getItemShareModifier() + itemWeight);
+                        }
 
-                    if (winningPlayer.getInventory().addItem(newStack).size() != 0) {
-                        winningPlayer.getWorld().dropItemNaturally(winningPlayer.getLocation(), newStack);
+                        winningPlayer = member;
                     }
 
-                    winningPlayer.updateInventory();
+                    McMMOPlayer mcMMOTarget = UserManager.getPlayer(winningPlayer);
+                    mcMMOTarget.setItemShareModifier(mcMMOTarget.getItemShareModifier() - itemWeight);
+                    awardDrop(winningPlayer, newStack);
                 }
+
                 return true;
 
             case RANDOM:
-                nearMembers = PartyManager.getNearMembers(player, party, Config.getInstance().getPartyShareRange());
-
-                if (nearMembers.isEmpty()) {
-                    return false;
-                }
-
-                partySize = nearMembers.size() + 1;
-
-                drop.remove();
-
                 for (int i = 0; i < itemStack.getAmount(); i++) {
-                    int randomMember = Misc.getRandom().nextInt(partySize);
-
-                    if (randomMember >= nearMembers.size()) {
-                        winningPlayer = player;
-                    }
-                    else {
-                        winningPlayer = nearMembers.get(randomMember);
-                    }
-
-                    if (winningPlayer.getInventory().addItem(newStack).size() != 0) {
-                        winningPlayer.getWorld().dropItemNaturally(winningPlayer.getLocation(), newStack);
-                    }
-
-                    winningPlayer.updateInventory();
+                    winningPlayer = nearMembers.get(Misc.getRandom().nextInt(partySize));
+                    awardDrop(winningPlayer, newStack);
                 }
+
                 return true;
 
-            case NONE:
             default:
                 return false;
         }
     }
+
+    private static void awardDrop(Player winningPlayer, ItemStack drop) {
+        if (winningPlayer.getInventory().addItem(drop).size() != 0) {
+            winningPlayer.getWorld().dropItemNaturally(winningPlayer.getLocation(), drop);
+        }
+
+        winningPlayer.updateInventory();
+    }
 }