192 lines
4.7 KiB
Java
192 lines
4.7 KiB
Java
|
package mineplex.core.gadget.persistence;
|
||
|
|
||
|
import org.bukkit.entity.Player;
|
||
|
|
||
|
import mineplex.core.common.util.BukkitFuture;
|
||
|
import mineplex.core.database.PlayerKeyValueRepository;
|
||
|
import mineplex.core.gadget.GadgetManager;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticCategory;
|
||
|
import mineplex.core.gadget.types.Gadget;
|
||
|
import mineplex.core.gadget.types.GadgetType;
|
||
|
import mineplex.core.gadget.types.GameModifierGadget;
|
||
|
import mineplex.core.gadget.types.OutfitGadget;
|
||
|
import mineplex.core.gadget.types.WeaponNameGadget;
|
||
|
|
||
|
public class UserGadgetPersistence
|
||
|
{
|
||
|
|
||
|
private final GadgetManager _manager;
|
||
|
private final PlayerKeyValueRepository<String> _repository;
|
||
|
private boolean _enabled;
|
||
|
|
||
|
public UserGadgetPersistence(GadgetManager manager)
|
||
|
{
|
||
|
_manager = manager;
|
||
|
_repository = new PlayerKeyValueRepository<>("gadgets", String.class);
|
||
|
_enabled = true;
|
||
|
}
|
||
|
|
||
|
public void setEnabled(boolean enabled)
|
||
|
{
|
||
|
_enabled = enabled;
|
||
|
}
|
||
|
|
||
|
public void load(Player player)
|
||
|
{
|
||
|
if (!_enabled)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
_repository.getAll(player.getUniqueId()).thenCompose(BukkitFuture.accept(values ->
|
||
|
{
|
||
|
if (player.isOnline())
|
||
|
{
|
||
|
for (Gadget gadget : _manager.getAllGadgets())
|
||
|
{
|
||
|
if (!gadget.ownsGadget(player))
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
GadgetType gadgetType = gadget.getGadgetType();
|
||
|
switch (gadgetType)
|
||
|
{
|
||
|
case MUSIC_DISC:
|
||
|
case ITEM:
|
||
|
case MORPH:
|
||
|
case BALLOON:
|
||
|
case MOUNT:
|
||
|
break;
|
||
|
case COSTUME:
|
||
|
OutfitGadget outfitGadget = (OutfitGadget) gadget;
|
||
|
String key = "activeCostume" + outfitGadget.getSlot().getDatabaseKey();
|
||
|
if (!values.containsKey(key))
|
||
|
continue;
|
||
|
if (values.get(key).equals(gadget.getName()))
|
||
|
{
|
||
|
gadget.enable(player, false);
|
||
|
}
|
||
|
break;
|
||
|
case GAME_MODIFIER:
|
||
|
GameModifierGadget gameModifierGadget = (GameModifierGadget) gadget;
|
||
|
GameCosmeticCategory category = gameModifierGadget.getCategory();
|
||
|
|
||
|
if (category.isAllowingMultiple())
|
||
|
{
|
||
|
if (!values.containsKey(gadget.getName()))
|
||
|
continue;
|
||
|
if (values.get(gadget.getName()).equals("enabled"))
|
||
|
{
|
||
|
gadget.enable(player, false);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
key = "active" + category.getType().getName().replace(" ", "") + category.getCategoryName().replace(" ", "");
|
||
|
if (!values.containsKey(key))
|
||
|
continue;
|
||
|
if (values.get(key).equals(gadget.getName()))
|
||
|
{
|
||
|
gadget.enable(player, false);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case WEAPON_NAME:
|
||
|
WeaponNameGadget weaponNameGadget = (WeaponNameGadget) gadget;
|
||
|
key = weaponNameGadget.getGadgetType().getDatabaseKey() + weaponNameGadget.getWeaponNameType().getWeaponType().getId();
|
||
|
|
||
|
if (gadget.getName().equals(values.get(key)))
|
||
|
{
|
||
|
gadget.enable(player, false);
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
if (!values.containsKey(gadgetType.getDatabaseKey()))
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (values.get(gadgetType.getDatabaseKey()).equals(gadget.getName()))
|
||
|
{
|
||
|
gadget.enable(player, false);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}));
|
||
|
}
|
||
|
|
||
|
public void save(Player player, Gadget gadget, boolean enabled)
|
||
|
{
|
||
|
String value = "disabled", key;
|
||
|
GadgetType gadgetType = gadget.getGadgetType();
|
||
|
|
||
|
switch (gadgetType)
|
||
|
{
|
||
|
case MUSIC_DISC:
|
||
|
case ITEM:
|
||
|
case MORPH:
|
||
|
case BALLOON:
|
||
|
case MOUNT:
|
||
|
return;
|
||
|
case COSTUME:
|
||
|
OutfitGadget outfitGadget = (OutfitGadget) gadget;
|
||
|
key = "activeCostume" + outfitGadget.getSlot().getDatabaseKey();
|
||
|
|
||
|
if (enabled)
|
||
|
{
|
||
|
value = outfitGadget.getName();
|
||
|
}
|
||
|
break;
|
||
|
case GAME_MODIFIER:
|
||
|
GameModifierGadget gameModifierGadget = (GameModifierGadget) gadget;
|
||
|
GameCosmeticCategory category = gameModifierGadget.getCategory();
|
||
|
|
||
|
if (category.isAllowingMultiple())
|
||
|
{
|
||
|
key = gameModifierGadget.getName();
|
||
|
if (enabled)
|
||
|
{
|
||
|
value = "enabled";
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
key = "active" + category.getType().getName().replace(" ", "") + category.getCategoryName().replace(" ", "");
|
||
|
if (enabled)
|
||
|
{
|
||
|
value = gameModifierGadget.getName();
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case WEAPON_NAME:
|
||
|
WeaponNameGadget weaponNameGadget = (WeaponNameGadget) gadget;
|
||
|
key = weaponNameGadget.getGadgetType().getDatabaseKey() + weaponNameGadget.getWeaponNameType().getWeaponType().getId();
|
||
|
|
||
|
if (enabled)
|
||
|
{
|
||
|
value = gadget.getName();
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
key = gadgetType.getDatabaseKey();
|
||
|
if (enabled)
|
||
|
{
|
||
|
value = gadget.getName();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!enabled)
|
||
|
{
|
||
|
_repository.remove(player.getUniqueId(), key);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_repository.put(player.getUniqueId(), key, value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|