Created
April 8, 2018 23:40
-
-
Save pdglobal/ded671d56e55ce4c7911681372a7aba5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package mobmoney; | |
import mobmoney.Mobmoney; | |
import java.io.IOException; | |
import java.math.BigDecimal; | |
import java.util.HashMap; | |
import java.util.List; | |
import java.util.Map; | |
import java.util.UUID; | |
import java.util.Map.Entry; | |
import java.util.Optional; | |
import java.util.stream.Collectors; | |
import org.spongepowered.api.Sponge; | |
import org.spongepowered.api.data.key.Keys; | |
import org.spongepowered.api.entity.Entity; | |
import org.spongepowered.api.entity.EntityTypes; | |
import org.spongepowered.api.entity.Item; | |
import org.spongepowered.api.entity.living.player.Player; | |
import org.spongepowered.api.event.Listener; | |
import org.spongepowered.api.event.cause.Cause; | |
import org.spongepowered.api.event.cause.entity.damage.source.DamageSources; | |
import org.spongepowered.api.event.entity.DamageEntityEvent; | |
import org.spongepowered.api.event.filter.cause.First; | |
import org.spongepowered.api.event.game.state.GameStartingServerEvent; | |
import org.spongepowered.api.event.item.inventory.ChangeInventoryEvent; | |
import org.spongepowered.api.item.ItemType; | |
import org.spongepowered.api.item.ItemTypes; | |
import org.spongepowered.api.item.inventory.ItemStackSnapshot; | |
import org.spongepowered.api.plugin.Plugin; | |
import org.spongepowered.api.service.economy.EconomyService; | |
import org.spongepowered.api.service.economy.account.UniqueAccount; | |
import org.spongepowered.api.service.economy.transaction.TransactionResult; | |
import org.spongepowered.api.text.Text; | |
import org.spongepowered.api.text.format.TextColors; | |
import org.spongepowered.api.world.Location; | |
import org.spongepowered.api.world.World; | |
import com.flowpowered.math.vector.Vector3d; | |
@Plugin(id = Mobmoney.PLUGIN_ID, name = Mobmoney.PLUGIN_NAME, version = Mobmoney.PLUGIN_VERSION) | |
public class Mobmoney { | |
public static final String PLUGIN_ID = "mobmoney"; | |
public static final String PLUGIN_NAME = "Mobmoney"; | |
public static final String PLUGIN_VERSION = "SNAPSHOT-01"; | |
Map<Location<World>, Double> values = new HashMap<>(); | |
@Listener | |
public void onEnable(GameStartingServerEvent event) { | |
// your code | |
} | |
@Listener | |
public void onPickup(ChangeInventoryEvent.Pickup.Pre event, @First Player player) { | |
Item item = event.getTargetEntity(); | |
if (item.getItemType().equals(ItemTypes.GOLD_NUGGET)) { | |
List<Entry<Location<World>, Double>> list = this.values.entrySet().stream() | |
.filter(e -> e.getKey().getExtent().getUniqueId().equals(item.getWorld().getUniqueId())) | |
.filter(e -> e.getKey().getPosition().distance(item.getLocation().getPosition()) <= 2).collect(Collectors.toList()); | |
list.forEach(e -> { | |
try { | |
depositToPlayer(player.getUniqueId(), new BigDecimal(e.getValue()), event.getCause()); | |
item.damage(1, DamageSources.VOID); | |
player.sendMessage(Text.builder(e.getValue()+" credits added to your balance.").color(TextColors.BLUE).build()); | |
} catch (IOException e1) { | |
e1.printStackTrace(); | |
} | |
}); | |
} | |
} | |
@Listener | |
public void onKill(DamageEntityEvent event) { | |
if (!event.willCauseDeath()) { | |
return; | |
} | |
ItemType type = ItemTypes.GOLD_NUGGET; | |
ItemStackSnapshot stack = type.getTemplate(); | |
Entity death = event.getTargetEntity(); | |
Vector3d deathPos = death.getLocation().getPosition(); | |
Item item = (Item) death.getWorld().createEntity(EntityTypes.ITEM, deathPos); | |
item.offer(Keys.REPRESENTED_ITEM, stack); | |
death.getWorld().spawnEntity(item); | |
this.values.put(item.getLocation(), Math.ceil(death.get(Keys.MAX_HEALTH).get() / 2)); | |
} | |
public static TransactionResult depositToPlayer(UUID uuid, BigDecimal amount, Cause cause) throws IOException { | |
return getEcoAccount(uuid).deposit(getService().getDefaultCurrency(), amount, cause); | |
} | |
private static EconomyService getService() throws IOException{ | |
Optional<EconomyService> opService = Sponge.getServiceManager().provide(EconomyService.class); | |
if(!opService.isPresent()) { | |
throw new IOException("No Eco plugin detected"); | |
} | |
EconomyService service = opService.get(); | |
return service; | |
} | |
private static UniqueAccount getEcoAccount(UUID uuid) throws IOException { | |
EconomyService service = getService(); | |
Optional<UniqueAccount> opAccount = service.getOrCreateAccount(uuid); | |
if(!opAccount.isPresent()) { | |
throw new IOException("Could not find/create account"); | |
} | |
return opAccount.get(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment