Loot for World Events
This commit is contained in:
parent
d07c319581
commit
e0284e2eb0
@ -99,8 +99,12 @@ public class Clans extends JavaPlugin
|
||||
new Explosion(this, blockRestore);
|
||||
new FriendManager(this, _clientManager, preferenceManager, portal);
|
||||
new InventoryManager(this, _clientManager);
|
||||
|
||||
// Enable custom-gear related managers
|
||||
PacketHandler packetHandler = new PacketHandler(this);
|
||||
GearManager customGear = new GearManager(this, packetHandler);
|
||||
|
||||
_clansManager = new ClansManager(this, serverStatusManager.getCurrentServerName(), _clientManager, _donationManager, blockRestore, teleport, chat, webServerAddress);
|
||||
_clansManager = new ClansManager(this, serverStatusManager.getCurrentServerName(), _clientManager, _donationManager, blockRestore, teleport, chat, customGear, webServerAddress);
|
||||
new Recipes(this);
|
||||
new Farming(this);
|
||||
new BuildingShop(_clansManager, _clientManager, _donationManager);
|
||||
@ -113,10 +117,6 @@ public class Clans extends JavaPlugin
|
||||
((CraftWorld) world).getHandle().spigotConfig.itemMerge = 0;
|
||||
}
|
||||
|
||||
// Enable custom-gear related managers
|
||||
PacketHandler packetHandler = new PacketHandler(this);
|
||||
GearManager customGear = new GearManager(this, packetHandler);
|
||||
|
||||
//Updates
|
||||
getServer().getScheduler().scheduleSyncRepeatingTask(this, new Updater(this), 1, 1);
|
||||
|
||||
|
@ -40,6 +40,7 @@ import mineplex.game.clans.clans.commands.ClansAllyChatCommand;
|
||||
import mineplex.game.clans.clans.commands.ClansChatCommand;
|
||||
import mineplex.game.clans.clans.commands.ClansCommand;
|
||||
import mineplex.game.clans.clans.commands.ServerTimeCommand;
|
||||
import mineplex.game.clans.clans.loot.LootManager;
|
||||
import mineplex.game.clans.clans.regions.ClansRegions;
|
||||
import mineplex.game.clans.clans.repository.ClanTerritory;
|
||||
import mineplex.game.clans.clans.repository.tokens.ClanMemberToken;
|
||||
@ -53,6 +54,7 @@ import mineplex.game.clans.fields.Field;
|
||||
import mineplex.game.clans.gameplay.Gameplay;
|
||||
import mineplex.game.clans.gameplay.safelog.LoggingManager;
|
||||
import mineplex.game.clans.gameplay.safelog.npc.NPCManager;
|
||||
import mineplex.game.clans.items.GearManager;
|
||||
import mineplex.game.clans.spawn.Spawn;
|
||||
import mineplex.minecraft.game.classcombat.Class.ClassManager;
|
||||
import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken;
|
||||
@ -113,7 +115,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelat
|
||||
public String[] denyClan = new String[] {
|
||||
"neut", "neutral", "sethome", "promote", "demote", "admin", "help", "create", "disband", "delete", "invite", "join", "kick", "ally", "trust", "claim", "unclaim", "territory", "home"};
|
||||
|
||||
public ClansManager(JavaPlugin plugin, String serverName, CoreClientManager clientManager, DonationManager donationManager, BlockRestore blockRestore, Teleport teleport, Chat chat, String webServerAddress)
|
||||
public ClansManager(JavaPlugin plugin, String serverName, CoreClientManager clientManager, DonationManager donationManager, BlockRestore blockRestore, Teleport teleport, Chat chat, GearManager gearManager, String webServerAddress)
|
||||
{
|
||||
super("Clans Manager", plugin);
|
||||
|
||||
@ -146,7 +148,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelat
|
||||
new Spawn(plugin);
|
||||
new NPCManager(this);
|
||||
new LoggingManager(plugin);
|
||||
new GoldManager(this, _clientManager, donationManager);
|
||||
GoldManager goldManager = new GoldManager(this, _clientManager, donationManager);
|
||||
|
||||
DamageManager damageManager = new DamageManager(plugin, _combatManager, new NpcManager(plugin, creature), disguiseManager);
|
||||
|
||||
@ -173,7 +175,8 @@ public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelat
|
||||
|
||||
ClanEnergyManager clanEnergyManager = new ClanEnergyManager(plugin, this, clientManager, donationManager);
|
||||
|
||||
_worldEvent = new WorldEventManager(plugin, this, damageManager);
|
||||
LootManager lootManager = new LootManager(gearManager, goldManager);
|
||||
_worldEvent = new WorldEventManager(plugin, this, damageManager, lootManager);
|
||||
|
||||
for (ClanToken token : _clanDataAccess.getRepository().retrieveClans())
|
||||
{
|
||||
|
@ -0,0 +1,21 @@
|
||||
package mineplex.game.clans.clans.loot;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
import mineplex.game.clans.items.GearManager;
|
||||
|
||||
public class GearLoot implements ILoot
|
||||
{
|
||||
private GearManager _gearManager;
|
||||
|
||||
public GearLoot(GearManager gearManager)
|
||||
{
|
||||
_gearManager = gearManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dropLoot(Location location)
|
||||
{
|
||||
_gearManager.spawnItem(location);
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package mineplex.game.clans.clans.loot;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.game.clans.economy.GoldManager;
|
||||
|
||||
public class GoldLoot implements ILoot
|
||||
{
|
||||
private GoldManager _goldManager;
|
||||
private int _min;
|
||||
private int _max;
|
||||
|
||||
public GoldLoot(GoldManager goldManager, int min, int max)
|
||||
{
|
||||
_goldManager = goldManager;
|
||||
_min = min;
|
||||
_max = max;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dropLoot(Location location)
|
||||
{
|
||||
int count = _min + UtilMath.r(_max - _min);
|
||||
_goldManager.dropGold(location, count);
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package mineplex.game.clans.clans.loot;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.game.clans.items.economy.GoldToken;
|
||||
|
||||
public class GoldTokenLoot implements ILoot
|
||||
{
|
||||
private int _minGold;
|
||||
private int _maxGold;
|
||||
|
||||
public GoldTokenLoot(int minGold, int maxGold)
|
||||
{
|
||||
_minGold = minGold;
|
||||
_maxGold = maxGold;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dropLoot(Location location)
|
||||
{
|
||||
int gold = _minGold + UtilMath.r(_maxGold - _minGold);
|
||||
|
||||
GoldToken token = new GoldToken(gold);
|
||||
location.getWorld().dropItemNaturally(location, token.toItemStack());
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package mineplex.game.clans.clans.loot;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
public interface ILoot
|
||||
{
|
||||
public void dropLoot(Location location);
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package mineplex.game.clans.clans.loot;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
|
||||
public class ItemLoot implements ILoot
|
||||
{
|
||||
private Material _material;
|
||||
private byte _data;
|
||||
private int _min;
|
||||
private int _max;
|
||||
|
||||
public ItemLoot(Material material)
|
||||
{
|
||||
this(material, 1, 1);
|
||||
}
|
||||
|
||||
public ItemLoot(Material material, int min, int max)
|
||||
{
|
||||
this(material, (byte) 0, min, max);
|
||||
}
|
||||
|
||||
public ItemLoot(Material material, byte data, int min, int max)
|
||||
{
|
||||
_material = material;
|
||||
_data = data;
|
||||
_min = min;
|
||||
_max = max;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dropLoot(Location location)
|
||||
{
|
||||
int count = _min + UtilMath.r(_max - _min);
|
||||
ItemStack item = new ItemStack(_material, count, (short) 0, _data);
|
||||
location.getWorld().dropItemNaturally(location, item);
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package mineplex.game.clans.clans.loot;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import mineplex.game.clans.economy.GoldManager;
|
||||
import mineplex.game.clans.items.GearManager;
|
||||
import mineplex.game.clans.items.generation.WeightSet;
|
||||
|
||||
public class LootManager
|
||||
{
|
||||
private GearManager _gearManager;
|
||||
private GoldManager _goldManager;
|
||||
|
||||
private WeightSet<ILoot> _commonSet;
|
||||
private WeightSet<ILoot> _rareSet;
|
||||
|
||||
public LootManager(GearManager gearManager, GoldManager goldManager)
|
||||
{
|
||||
_gearManager = gearManager;
|
||||
_goldManager = goldManager;
|
||||
|
||||
_commonSet = new WeightSet<ILoot>();
|
||||
_rareSet = new WeightSet<ILoot>();
|
||||
|
||||
populateCommon();
|
||||
populateRare();
|
||||
}
|
||||
|
||||
private void populateCommon()
|
||||
{
|
||||
// Food
|
||||
_commonSet.add(5, new ItemLoot(Material.CARROT, 1, 5));
|
||||
_commonSet.add(5, new ItemLoot(Material.APPLE, 1, 3));
|
||||
_commonSet.add(5, new ItemLoot(Material.COOKED_BEEF, 1, 3));
|
||||
_commonSet.add(5, new ItemLoot(Material.RAW_BEEF, 1, 4));
|
||||
_commonSet.add(5, new ItemLoot(Material.POTATO_ITEM, 1, 5));
|
||||
// Armor
|
||||
_commonSet.add(2, new ItemLoot(Material.IRON_HELMET, 1, 1));
|
||||
_commonSet.add(2, new ItemLoot(Material.IRON_CHESTPLATE, 1, 1));
|
||||
_commonSet.add(2, new ItemLoot(Material.IRON_LEGGINGS, 1, 1));
|
||||
_commonSet.add(2, new ItemLoot(Material.IRON_BOOTS, 1, 1));
|
||||
|
||||
// Gear
|
||||
_commonSet.add(2, new GearLoot(_gearManager));
|
||||
|
||||
// Gold
|
||||
_commonSet.add(5, new GoldLoot(_goldManager, 100, 1000));
|
||||
_commonSet.add(5, new GoldTokenLoot(100, 1000));
|
||||
}
|
||||
|
||||
private void populateRare()
|
||||
{
|
||||
// Gear
|
||||
_rareSet.add(10, new GearLoot(_gearManager));
|
||||
}
|
||||
|
||||
public void dropCommon(Location location)
|
||||
{
|
||||
_commonSet.generateRandom().dropLoot(location);
|
||||
}
|
||||
|
||||
public void dropRare(Location location)
|
||||
{
|
||||
_rareSet.generateRandom().dropLoot(location);
|
||||
}
|
||||
|
||||
}
|
@ -29,6 +29,7 @@ import mineplex.core.scoreboard.elements.ScoreboardElement;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.game.clans.clans.ClansManager;
|
||||
import mineplex.game.clans.clans.loot.LootManager;
|
||||
import mineplex.game.clans.clans.worldevent.command.WorldEventCommand;
|
||||
import mineplex.game.clans.clans.worldevent.event.EventState;
|
||||
import mineplex.game.clans.clans.worldevent.event.WorldEvent;
|
||||
@ -42,11 +43,12 @@ public class WorldEventManager extends MiniPlugin implements ScoreboardElement
|
||||
private ClansManager _clansManager;
|
||||
private EventTerrainFinder _terrainFinder;
|
||||
private DamageManager _damageManager;
|
||||
private LootManager _lootManager;
|
||||
|
||||
private long _lastEventEnd;
|
||||
private long _nextEventStart;
|
||||
|
||||
public WorldEventManager(JavaPlugin plugin, ClansManager clansManager, DamageManager damageManager)
|
||||
public WorldEventManager(JavaPlugin plugin, ClansManager clansManager, DamageManager damageManager, LootManager lootManager)
|
||||
{
|
||||
super("World Event", plugin);
|
||||
|
||||
@ -54,6 +56,7 @@ public class WorldEventManager extends MiniPlugin implements ScoreboardElement
|
||||
_terrainFinder = new EventTerrainFinder(this, clansManager);
|
||||
_clansManager = clansManager;
|
||||
_damageManager = damageManager;
|
||||
_lootManager = lootManager;
|
||||
_events = new LinkedList<WorldEvent>();
|
||||
_lastEventEnd = System.currentTimeMillis();
|
||||
updateNextEventTime();
|
||||
@ -179,6 +182,11 @@ public class WorldEventManager extends MiniPlugin implements ScoreboardElement
|
||||
return _damageManager;
|
||||
}
|
||||
|
||||
public LootManager getLoot()
|
||||
{
|
||||
return _lootManager;
|
||||
}
|
||||
|
||||
public EventTerrainFinder getTerrainFinder()
|
||||
{
|
||||
return _terrainFinder;
|
||||
|
@ -2,15 +2,22 @@ package mineplex.game.clans.clans.worldevent.event.undead;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.Chest;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityInteractEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilWorld;
|
||||
import mineplex.game.clans.clans.worldevent.WorldEventManager;
|
||||
import mineplex.game.clans.clans.worldevent.event.EventState;
|
||||
@ -60,7 +67,6 @@ public class UndeadCamp extends WorldEvent
|
||||
@Override
|
||||
protected void customTick()
|
||||
{
|
||||
System.out.println("tick");
|
||||
if (getState() == EventState.PREPARE)
|
||||
{
|
||||
if (_hutCur < _hutMax) createHut();
|
||||
@ -332,15 +338,29 @@ public class UndeadCamp extends WorldEvent
|
||||
_poleCur++;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onChestOpen(EntityInteractEvent event)
|
||||
private void openChest(Block block)
|
||||
{
|
||||
Block block = event.getBlock();
|
||||
_chests.remove(block);
|
||||
|
||||
// Effect
|
||||
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, Material.ENDER_CHEST.getId());
|
||||
|
||||
setBlock(block, Material.AIR);
|
||||
|
||||
// Loot
|
||||
int count = 1 + UtilMath.r(3);
|
||||
for (int i = 0; i < count; i++)
|
||||
getEventManager().getLoot().dropCommon(block.getLocation());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onChestOpen(PlayerInteractEvent event)
|
||||
{
|
||||
Block block = event.getClickedBlock();
|
||||
if (_chests.contains(block))
|
||||
{
|
||||
setBlock(event.getBlock(), Material.AIR);
|
||||
openChest(block);
|
||||
event.setCancelled(true);
|
||||
_chests.remove(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ public class WeightSet<T>
|
||||
|
||||
private Set<Weight<T>> _weights;
|
||||
|
||||
private WeightSet()
|
||||
public WeightSet()
|
||||
{
|
||||
_weights = new HashSet<Weight<T>>();
|
||||
}
|
||||
@ -48,6 +48,11 @@ public class WeightSet<T>
|
||||
_weights.add(new Weight<T>(1, element)); // Constant weight of 1 means all elements are equally likely
|
||||
}
|
||||
}
|
||||
|
||||
public void add(int weight, T element)
|
||||
{
|
||||
_weights.add(new Weight<T>(weight, element));
|
||||
}
|
||||
|
||||
private int getTotalWeight()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user