Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class AnvilStone {
- boolean isCrafting = false;
- public Config config;
- private Esinia plugin;
- public AnvilStone(Esinia plugin){
- this.plugin = plugin;
- }
- Map<UUID, Task> tasks = new HashMap<>();
- Map<UUID, Scoreboard> boards = new HashMap<>();
- //listener for the following event
- @Listener
- //event that occurs when a block is interacted with via right click
- public void onRightClickMainHand(InteractBlockEvent.Secondary.MainHand event){
- Player player = event.getCause().last(Player.class).get();
- //Sponge.getServer().getBroadcastChannel().send(Text.of("Right Click Event"));
- if (player != null){
- //Sponge.getServer().getBroadcastChannel().send(Text.of("Player Exists"));
- if (event.getTargetBlock().getState().getType() == BlockTypes.ANVIL){
- //Sponge.getServer().getBroadcastChannel().send(Text.of("Cancelled and Anvil"));
- player.getItemInHand(HandTypes.MAIN_HAND).ifPresent(mainhanditem -> {
- if (mainhanditem.get(Keys.DISPLAY_NAME).get().equals(Text.of("Wooden Hammer"))){
- event.setCancelled(true);
- //Sponge.getServer().getBroadcastChannel().send(Text.of("Has Wooden Hammer"));
- Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzshovel").ifPresent(modstoneshoveltype -> {
- Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzaxe").ifPresent(modstoneaxetype -> {
- Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzpickaxe").ifPresent(modstonepickaxetype -> {
- Inventory BasicAnvilInventory = Inventory.builder().of(InventoryArchetypes.DOUBLE_CHEST)
- .property(InventoryDimension.PROPERTY_NAME, new InventoryDimension(9, 1))
- .property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of("Stone Working")))
- .build(this.plugin);
- ItemStack stoneshovel = ItemStack.of(modstoneshoveltype, 1);
- stoneshovel.offer(Keys.DISPLAY_NAME, Text.of("Stone Shovel"));
- List<Text> itemShovelLore = new ArrayList<Text>();
- itemShovelLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
- itemShovelLore.add(Text.of(TextColors.GOLD, "1 Flat Stone"));
- itemShovelLore.add(Text.of(TextColors.GOLD, "1 Tool Handle"));
- stoneshovel.offer(Keys.ITEM_LORE , itemShovelLore);
- BasicAnvilInventory.query(new SlotPos(0,0)).set(stoneshovel);
- ItemStack stoneaxe = ItemStack.of(modstoneaxetype, 1);
- stoneaxe.offer(Keys.DISPLAY_NAME, Text.of("Stone Axe"));
- List<Text> itemAxeLore = new ArrayList<Text>();
- itemAxeLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
- itemAxeLore.add(Text.of(TextColors.GOLD, "1 Stone Axehead"));
- itemAxeLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
- stoneaxe.offer(Keys.ITEM_LORE , itemAxeLore);
- BasicAnvilInventory.query(new SlotPos(1,0)).set(stoneaxe);
- ItemStack stonepickaxe = ItemStack.of(modstonepickaxetype, 1);
- stonepickaxe.offer(Keys.DISPLAY_NAME, Text.of("Stone Pickaxe"));
- List<Text> itemPickaxeLore = new ArrayList<Text>();
- itemPickaxeLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
- itemPickaxeLore.add(Text.of(TextColors.GOLD, "1 Stone Pickaxehead"));
- itemPickaxeLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
- stonepickaxe.offer(Keys.ITEM_LORE , itemPickaxeLore);
- BasicAnvilInventory.query(new SlotPos(2,0)).set(stonepickaxe);
- ItemStack stonesword = ItemStack.of(ItemTypes.STONE_SWORD, 1);
- stonesword.offer(Keys.DISPLAY_NAME, Text.of("Stone Sword"));
- List<Text> itemSwordLore = new ArrayList<Text>();
- itemSwordLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
- itemSwordLore.add(Text.of(TextColors.GOLD, "1 Stone Blade"));
- itemSwordLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
- stonesword.offer(Keys.ITEM_LORE , itemPickaxeLore);
- BasicAnvilInventory.query(new SlotPos(3,0)).set(stonesword);
- player.openInventory(BasicAnvilInventory, Cause.of(NamedCause.source(player)));
- });
- });
- });
- }
- });
- }
- }
- }
- @Listener
- public void onInventoryClick(ClickInventoryEvent event, @Root Player player, @Getter("getTargetInventory") Inventory inventory) {
- ConfigurationNode nodeStone = plugin.root.getNode("Stoneworking", player.getUniqueId().toString());
- int level = nodeStone.getNode("Level").getInt();
- int XP = nodeStone.getNode("XP").getInt();
- Location<World> p_loc = player.getLocation();
- UUID id = player.getUniqueId();
- if (isCrafting){
- event.setCancelled(true);
- player.sendMessage(Text.of("You are currently crafting"));
- } else if (inventory.getName().get().contains("Stone Working")){
- event.setCancelled(true);
- ItemStackSnapshot clicked = event.getCursorTransaction().getFinal();
- String name = clicked.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain();
- //if (!name.startsWith("&f")) {
- // it does not have the correct name
- //}
- //name = name.replaceAll("^&f", "");
- ItemType itemID = clicked.getType();
- Optional<ItemEntry> itemEntry_ = config.items.stream().filter(f -> f.name.equals(name) && f.id.equals(itemID)).findFirst();
- if (itemEntry_.isPresent()) {
- boolean hasReagents = true;
- ItemEntry itemEntry = itemEntry_.get();
- String itemName = itemEntry.name;
- int itemQuantity = itemEntry.quantity;
- List<CraftingEntry> craftingReagents = itemEntry.crafting;
- reagents: for (CraftingEntry craftingReagent : craftingReagents) {
- ItemType reagentID = craftingReagent.id;
- String reagentName = craftingReagent.name;
- int reagentQuantity = craftingReagent.quantity;
- int inventoryreagentQuantity = 0;
- for (Inventory slot : player.getInventory().query(reagentID).slots()){
- ItemStack stack = slot.peek().get();
- if (!stack.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain().equals(reagentName)){
- player.sendMessage(Text.of("You need " + reagentName + " to craft " + itemName + "."));
- hasReagents = false;
- break reagents;
- } else {
- inventoryreagentQuantity += stack.getQuantity();
- }
- }
- if (inventoryreagentQuantity < reagentQuantity){
- player.sendMessage(Text.of("You need " + reagentQuantity + " " + reagentName + " to craft " + itemQuantity + " " + itemName + "."));
- hasReagents = false;
- break reagents;
- }
- }
- if (hasReagents){
- Integer time = 1 - (level/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);
- tasks.put(id, Task.builder()
- .delay(time, TimeUnit.SECONDS)
- .interval(time, TimeUnit.SECONDS)
- .execute(() -> {
- isCrafting = true;
- if (player.getLocation() == p_loc){
- player.setScoreboard(board);
- char[] arr = new char[10];
- Arrays.fill(arr, 0, 11 - integer.decrementAndGet(), '|');
- obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[", String.valueOf(arr), "]"));
- if (integer.get() == 0) {
- obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[||||||||||]"));
- for (CraftingEntry craftingReagent : craftingReagents) {
- ItemType reagentID = craftingReagent.id;
- String reagentName = craftingReagent.name;
- int reagentQuantity = craftingReagent.quantity;
- inventory: for (Inventory slot : player.getInventory().query(reagentID).slots()){
- ItemStack stack = slot.peek().get();
- if (stack.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain().equals(reagentName)){
- if (stack.getQuantity() >= reagentQuantity) {
- slot.poll(reagentQuantity);
- break inventory;
- }
- }
- }
- }
- ItemStack reward = ItemStack.of(itemID, itemQuantity);
- reward.offer(Keys.DISPLAY_NAME, Text.of(itemName));
- //List<Text> itemShovelLore = new ArrayList<Text>();
- //itemShovelLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
- //itemShovelLore.add(Text.of(TextColors.GOLD, "1 Flat Stone"));
- //itemShovelLore.add(Text.of(TextColors.GOLD, "1 Tool Handle"));
- //stoneshovel.offer(Keys.ITEM_LORE, itemShovelLore);
- player.getInventory().offer(reward);
- int rxp = (int) Math.round(100 * Math.exp(0.6931 * level));
- int fxp = XP + 1;
- if (fxp >= rxp){
- int newXP = fxp - rxp;
- int fLevel = level + 1;
- nodeStone.getNode("XP").setValue(newXP);
- nodeStone.getNode("Level").setValue(fLevel);
- plugin.saveConfig();
- isCrafting = false;
- tasks.remove(id).cancel();
- boards.remove(id);
- } else{
- nodeStone.getNode("XP").setValue(fxp);
- plugin.saveConfig();
- isCrafting = false;
- tasks.remove(id).cancel();
- boards.remove(id);
- }
- }
- } else{
- player.sendMessage(Text.of("Don't move while crafting."));
- isCrafting = false;
- tasks.remove(id).cancel();
- boards.remove(id);
- }
- })
- .submit(this));
- }
- }
- }
- }
- @Listener
- public void onItemDrop(SpawnEntityEvent event){
- if (event.getCause().root() instanceof Player){
- if (isCrafting){
- event.setCancelled(true);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement