Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package zorg.esinia.server.gathering;
- import java.time.Instant;
- import java.time.ZoneId;
- import java.time.format.DateTimeFormatter;
- import java.time.format.FormatStyle;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Locale;
- import java.util.Map;
- import java.util.Optional;
- import java.util.Random;
- import java.util.UUID;
- import java.util.concurrent.TimeUnit;
- import java.util.concurrent.atomic.AtomicInteger;
- import java.util.stream.Collectors;
- import org.spongepowered.api.block.BlockSnapshot;
- import org.spongepowered.api.block.BlockType;
- import org.spongepowered.api.block.BlockTypes;
- import org.spongepowered.api.data.key.Keys;
- import org.spongepowered.api.data.type.HandTypes;
- import org.spongepowered.api.data.type.TreeType;
- import org.spongepowered.api.entity.living.player.Player;
- import org.spongepowered.api.event.Listener;
- import org.spongepowered.api.event.block.InteractBlockEvent;
- import org.spongepowered.api.event.cause.Cause;
- import org.spongepowered.api.event.filter.cause.Last;
- import org.spongepowered.api.item.ItemType;
- import org.spongepowered.api.item.inventory.ItemStack;
- import org.spongepowered.api.scheduler.Task;
- import org.spongepowered.api.scoreboard.Scoreboard;
- import org.spongepowered.api.scoreboard.critieria.Criteria;
- import org.spongepowered.api.scoreboard.displayslot.DisplaySlots;
- import org.spongepowered.api.scoreboard.objective.Objective;
- import org.spongepowered.api.text.Text;
- import org.spongepowered.api.text.format.TextColor;
- import org.spongepowered.api.text.format.TextColors;
- import org.spongepowered.api.text.serializer.TextSerializers;
- import org.spongepowered.api.world.Location;
- import org.spongepowered.api.world.World;
- import com.google.common.collect.ImmutableList;
- import ninja.leaping.configurate.ConfigurationNode;
- import zorg.esinia.server.Config;
- import zorg.esinia.server.Esinia;
- import zorg.esinia.server.Config.GatheringBlocksEntry;
- import zorg.esinia.server.Config.RewardsEntry;
- public class Lumbering {
- private Esinia plugin;
- public Config config;
- public Lumbering(Esinia plugin){
- this.plugin = plugin;
- this.config = plugin.config;
- }
- Map<UUID, Task> tasks = new HashMap<>();
- Map<UUID, Scoreboard> boards = new HashMap<>();
- Map<UUID, Boolean> isCrafting = new HashMap<>();
- Random rand = new Random();
- @Listener
- public void onRightClickMainHand(InteractBlockEvent.Secondary.MainHand event, @Last Player player){
- DateTimeFormatter formatter =
- DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
- .withLocale(Locale.US)
- .withZone(ZoneId.systemDefault());
- Instant instant = Instant.now();
- String timeString = formatter.format(instant);
- ConfigurationNode iscraftingNode = plugin.root.getNode("isCrafting", player.getUniqueId().toString(), "isCrafting");
- boolean isHarvesting = iscraftingNode.getBoolean();
- int toolSpeed = 0;
- int toolDurability = 0;
- String variantName = "";
- UUID id = player.getUniqueId();
- Location<World > playerLocation = player.getLocation();
- Location<World> loc = event.getTargetBlock().getLocation().get();
- ConfigurationNode node = plugin.root.getNode("respawnblocks", loc.toString());
- if (loc.getBlockX() >= -1342 && loc.getBlockX() <= 1046 && loc.getBlockZ() >= -1254 && loc.getBlockY() <= 1198){
- plugin.getLogger().info("Lumbering: Proper Location");
- BlockType blockName = event.getTargetBlock().getState().getType();
- if (blockName.equals(BlockTypes.LOG)){
- plugin.getLogger().info("Lumbering: block is log");
- variantName = event.getTargetBlock().get(Keys.TREE_TYPE).get().getName();
- }
- String variantnameFinal = variantName;
- Optional<GatheringBlocksEntry> gatheringblocksEntry_ = config.gatheringBlocks.stream().filter(f -> f.blockName.equals(blockName) && f.variantName.equals(variantnameFinal)).findFirst();
- if (gatheringblocksEntry_.isPresent()) {
- plugin.getLogger().info("Lumbering: block is present");
- if (!isHarvesting){
- plugin.getLogger().info("Lumbering: player is not busy");
- GatheringBlocksEntry gatheringblocksEntry = gatheringblocksEntry_.get();
- int difficulty = gatheringblocksEntry.difficulty;
- int blockXP = gatheringblocksEntry.xp;
- String gatheringType = gatheringblocksEntry.type;
- ConfigurationNode nodeType = plugin.root.getNode(gatheringType, player.getUniqueId().toString());
- int level = nodeType.getNode("Level").getInt();
- int xp = nodeType.getNode("XP").getInt();
- Optional<ItemStack> playerTool_ = player.getItemInHand(HandTypes.MAIN_HAND);
- if (playerTool_.isPresent()){
- plugin.getLogger().info("Lumbering: Player has a tool");
- ItemStack playerTool = playerTool_.get();
- Optional<List<Text>> toolLore_ = playerTool.get(Keys.ITEM_LORE);
- if(toolLore_.isPresent()){
- plugin.getLogger().info("Lumbering: Tool has lore");
- List<Text> toolLore = toolLore_.get();
- for (Text lore : toolLore) {
- if (lore.toPlain().contains("Speed: ")){
- String speedLore = lore.toPlain().replace("Speed: ", "");
- toolSpeed += Integer.valueOf(speedLore);
- }
- if (lore.toPlain().contains("Durability: ")){
- String durabilityLore = lore.toPlain().replace("Durability: ", "");
- toolDurability += Integer.valueOf(durabilityLore);
- }
- }
- double tooldurabilityFinal = toolDurability/100;
- int toolspeedFinal = toolSpeed;
- Integer time = (1 - (level/100) + (difficulty/100) - (toolspeedFinal/100));
- Objective obj = Objective.builder()
- .criterion(Criteria.DUMMY)
- .name("timer")
- .displayName(Text.of(TextColors.DARK_BLUE, "[ ]"))
- .build();
- Scoreboard board = Scoreboard.builder()
- .objectives(ImmutableList.of(obj))
- .build();
- obj.getOrCreateScore(Text.of(player.getName())).setScore(0);
- player.setScoreboard(board);
- board.updateDisplaySlot(obj, DisplaySlots.SIDEBAR);
- boards.put(player.getUniqueId(), board);
- AtomicInteger integer = new AtomicInteger(10);
- plugin.getLogger().info("Lumbering: timer has started");
- tasks.put(id, Task.builder()
- .delay(time, TimeUnit.SECONDS)
- .interval(time, TimeUnit.SECONDS)
- .execute(() -> {
- if (player.getLocation().equals(playerLocation)) {
- iscraftingNode.setValue(true);
- plugin.saveConfig();
- char[] arr = new char[10];
- Arrays.fill(arr, 0, 11 - integer.getAndDecrement(), '|');
- obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[", String.valueOf(arr), "]"));
- if (integer.get() == 0) {
- obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[||||||||||]"));
- double random = rand.nextDouble();
- if (tooldurabilityFinal <= ((random - 0.15) + difficulty/150)) {
- player.sendMessage(Text.of("You failed at harvesting."));
- iscraftingNode.setValue(false);
- plugin.saveConfig();
- tasks.remove(id).cancel();
- boards.remove(id);
- //player.sendMessage(Text.of("Your tool broke while harvesting."));
- } else {
- List<RewardsEntry> rewards = gatheringblocksEntry.rewards;
- for (RewardsEntry reward : rewards) {
- ItemType rewardID = reward.type;
- String rewardName = reward.name;
- TextColor rewardColor = reward.color;
- List<String> rewardLore = reward.lore;
- int rewardQuantity = reward.quantity;
- TreeType treeType = reward.treeType;
- ItemStack rewardStack = ItemStack.of(rewardID, rewardQuantity);
- rewardStack.offer(Keys.DISPLAY_NAME, Text.of(rewardColor, rewardName));
- List<Text> rewardloreFinal = rewardLore.stream().map(TextSerializers.FORMATTING_CODE::deserialize).collect(Collectors.toList());
- rewardStack.offer(Keys.ITEM_LORE, rewardloreFinal);
- if (treeType != null){
- rewardStack.offer(Keys.TREE_TYPE, treeType);
- player.getInventory().offer(rewardStack);
- } else{
- player.getInventory().offer(rewardStack);
- }
- }
- BlockSnapshot block = event.getTargetBlock();
- node.getNode("Snapshot").setValue(block);
- node.getNode("Time").setValue(timeString);
- node.getNode("Location").setValue(block.getLocation().get());
- block.getLocation().get().setBlockType(BlockTypes.AIR, Cause.source(plugin).build());
- int rxp = (int) Math.round(100 * Math.exp(0.6931 * level));
- int fxp = xp + blockXP;
- if (fxp >= rxp){
- int newXP = fxp - rxp;
- int fLevel = level + 1;
- nodeType.getNode("XP").setValue(newXP);
- nodeType.getNode("Level").setValue(fLevel);
- player.sendMessage(Text.of("You gained one level."));
- iscraftingNode.setValue(false);
- plugin.saveConfig();
- } else {
- nodeType.getNode("XP").setValue(fxp);
- iscraftingNode.setValue(false);
- plugin.saveConfig();
- }
- tasks.remove(id).cancel();
- boards.remove(id);
- }
- }
- } else {
- player.sendMessage(Text.of("Don't move while harvesting."));
- iscraftingNode.setValue(false);
- plugin.saveConfig();
- tasks.remove(id).cancel();
- boards.remove(id);
- }
- })
- .submit(plugin));
- } else {
- plugin.getLogger().info("Lumbering: Why doesn't this tool have lore?");
- }
- }
- }
- }
- }
- //if (event.getTargetBlock().getState().getType().getName().equals("minecraft:log")){
- // BlockSnapshot block = event.getTargetBlock();
- // node.getNode("Snapshot").setValue(block);
- // node.getNode("Time").setValue(timeString);
- // String then_ = node.getNode("Time").getString();
- // Instant then = (Instant) formatter.parse(then_);
- // Duration timeElapsed = Duration.between(instant, then);
- // Location<World> blockLocation = block.getLocation().get();
- // blockLocation.setBlock(block.getState(), Cause.source(plugin).build());
- // }
- // player.sendMessage(Text.of("_______________________________________________________________"));
- //}
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment