Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ plugins {
}


version '1.4.2-1.19.2' // Needs to be version specific
version '1.4.3-1.19.2' // Needs to be version specific
def nmsVersion = "1.19.2" //[NMS]
def apiVersion = '1.19'
def specialSourceVersion = '1.11.0' //[NMS]
Expand Down Expand Up @@ -71,8 +71,10 @@ repositories {
includeGroup("org.spigotmc")
}
}
maven { url "https://arcanearts.jfrog.io/artifactory/archives" }
maven { url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' }
maven { url "https://arcanearts.jfrog.io/artifactory/archives" } // Artifactory
maven { url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' } // PAPI
maven { url "https://maven.enginehub.org/repo/" } // WorldGuard

}

/**
Expand Down Expand Up @@ -132,6 +134,7 @@ dependencies {
testAnnotationProcessor 'systems.manifold:manifold-ext:2022.1.19'
implementation 'systems.manifold:manifold-rt:2022.1.19'
implementation 'com.elmakers.mine.bukkit:EffectLib:9.4'
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.7'

// Shaded
implementation 'io.papermc:paperlib:1.0.5'
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/volmit/adapt/Adapt.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.volmit.adapt.api.data.WorldData;
import com.volmit.adapt.api.potion.BrewingListener;
import com.volmit.adapt.api.potion.BrewingManager;
import com.volmit.adapt.api.tick.Ticker;
import com.volmit.adapt.api.value.MaterialValue;
import com.volmit.adapt.api.world.AdaptServer;
Expand Down Expand Up @@ -127,7 +127,7 @@ public File getJarFile() {

@Override
public void start() {
if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
new PapiExpansion().register();
}
loadLanguageLocalization();
Expand All @@ -139,7 +139,7 @@ public void start() {
sqlManager.establishConnection();
}
adaptServer = new AdaptServer();
registerListener(new BrewingListener());
registerListener(new BrewingManager());
setupMetrics();
startupPrint(); // Splash screen
}
Expand Down Expand Up @@ -257,12 +257,12 @@ private void startupPrint() {
Random r = new Random();
int game = r.nextInt(100);

if (game < 90){ // 90%
if (game < 90) { // 90%
Adapt.info(
"\n" +
C.GRAY + " █████" + C.DARK_RED + "╗ " + C.GRAY + "██████" + C.DARK_RED + "╗ " + C.GRAY + "█████" + C.DARK_RED + "╗ " + C.GRAY + "██████" + C.DARK_RED + "╗ " + C.GRAY + "████████" + C.DARK_RED + "╗\n" +
C.GRAY + "██" + C.DARK_RED + "╔══" + C.GRAY + "██" + C.DARK_RED + "╗" + C.GRAY + "██" + C.DARK_RED + "╔══" + C.GRAY + "██" + C.DARK_RED + "╗" + C.GRAY + "██" + C.DARK_RED + "╔══" + C.GRAY + "██" + C.DARK_RED + "╗" + C.GRAY + "██" + C.DARK_RED + "╔══" + C.GRAY + "██" + C.DARK_RED + "╗╚══" + C.GRAY + "██" + C.DARK_RED + "╔══╝" + C.WHITE + " Version: " + C.DARK_RED + instance.getDescription().getVersion() + " \n" +
C.GRAY + "███████" + C.DARK_RED + "║" + C.GRAY + "██" + C.DARK_RED + "║ " + C.GRAY + "██" + C.DARK_RED + "║" + C.GRAY + "███████" + C.DARK_RED + "║" + C.GRAY + "██████" + C.DARK_RED + "╔╝ " + C.GRAY + "██" + C.DARK_RED + "║" + C.WHITE + " By: " + C.RED + "A"+ C.GOLD + "r"+ C.YELLOW + "c"+ C.GREEN + "a"+ C.DARK_GRAY + "n"+ C.AQUA + "e "+ C.AQUA + "A"+ C.BLUE + "r"+ C.DARK_BLUE + "t"+ C.DARK_PURPLE + "s"+ C.WHITE +" (Volmit Software)\n" +
C.GRAY + "███████" + C.DARK_RED + "║" + C.GRAY + "██" + C.DARK_RED + "║ " + C.GRAY + "██" + C.DARK_RED + "║" + C.GRAY + "███████" + C.DARK_RED + "║" + C.GRAY + "██████" + C.DARK_RED + "╔╝ " + C.GRAY + "██" + C.DARK_RED + "║" + C.WHITE + " By: " + C.RED + "A" + C.GOLD + "r" + C.YELLOW + "c" + C.GREEN + "a" + C.DARK_GRAY + "n" + C.AQUA + "e " + C.AQUA + "A" + C.BLUE + "r" + C.DARK_BLUE + "t" + C.DARK_PURPLE + "s" + C.WHITE + " (Volmit Software)\n" +
C.GRAY + "██" + C.DARK_RED + "╔══" + C.GRAY + "██" + C.DARK_RED + "║" + C.GRAY + "██" + C.DARK_RED + "║ " + C.GRAY + "██" + C.DARK_RED + "║" + C.GRAY + "██" + C.DARK_RED + "╔══" + C.GRAY + "██" + C.DARK_RED + "║" + C.GRAY + "██" + C.DARK_RED + "╔═══╝ " + C.GRAY + "██" + C.DARK_RED + "║" + C.WHITE + " Java Version: " + C.DARK_RED + getJavaVersion() + " \n" +
C.GRAY + "██" + C.DARK_RED + "║ " + C.GRAY + "██" + C.DARK_RED + "║" + C.GRAY + "██████" + C.DARK_RED + "╔╝" + C.GRAY + "██" + C.DARK_RED + "║ " + C.GRAY + "██" + C.DARK_RED + "║" + C.GRAY + "██" + C.DARK_RED + "║ " + C.GRAY + "██" + C.DARK_RED + "║ \n" +
C.DARK_RED + "╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ \n"
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/volmit/adapt/AdaptConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public class AdaptConfig {
private double playerXpPerSkillLevelUpBase = 489;
private double playerXpPerSkillLevelUpLevelMultiplier = 44;
private double powerPerLevel = 0.73;
private boolean requireBuildPermissionToUseSkills = true;
private boolean requireWorldguardBuildPermToUseAdaptations = true;
private boolean hardcoreResetOnPlayerDeath = false;
private boolean hardcoreNoRefunds = false;
private boolean loginBonus = true;
Expand Down
33 changes: 28 additions & 5 deletions src/main/java/com/volmit/adapt/api/adaptation/Adaptation.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,25 @@

package com.volmit.adapt.api.adaptation;

import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import com.volmit.adapt.Adapt;
import com.volmit.adapt.AdaptConfig;
import com.volmit.adapt.api.Component;
import com.volmit.adapt.api.advancement.AdaptAdvancement;
import com.volmit.adapt.api.potion.BrewingRecipe;
import com.volmit.adapt.api.recipe.AdaptRecipe;
import com.volmit.adapt.api.skill.Skill;
import com.volmit.adapt.api.tick.Ticked;
import com.volmit.adapt.api.world.AdaptPlayer;
import com.volmit.adapt.api.world.PlayerData;
import com.volmit.adapt.content.event.AdaptAdaptationUseEvent;
import com.volmit.adapt.util.*;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -157,20 +161,39 @@ default Long getStorageLong(Player p, String key) {
double getCostFactor();

List<AdaptRecipe> getRecipes();
List<BrewingRecipe> getBrewingRecipes();

void onRegisterAdvancements(List<AdaptAdvancement> advancements);

private boolean canBuild(Player p, Location l) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
com.sk89q.worldedit.util.Location loc = BukkitAdapter.adapt(l);
if (!hasBypass(p, l)) {
return query.testState(loc, WorldGuardPlugin.inst().wrapPlayer(p), Flags.BUILD);
}else {
return true;
}
}

private boolean hasBypass(Player p, Location l) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(p);
com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(l.getWorld());
return WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, world);
}

default boolean hasAdaptation(Player p) {
if (!this.getSkill().isEnabled()) {
this.unregister();
}

if (p.getClass().getSimpleName().equals("PlayerNPC")) {
return false;
}
if (AdaptConfig.get().blacklistedWorlds.contains(p.getWorld().getName())) {
return false;
}
if (AdaptConfig.get().isRequireWorldguardBuildPermToUseAdaptations() && !canBuild(p, p.getLocation())) {
return false;
}
return getLevel(p) > 0;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.google.gson.Gson;
import com.volmit.adapt.Adapt;
import com.volmit.adapt.api.advancement.AdaptAdvancement;
import com.volmit.adapt.api.potion.BrewingRecipe;
import com.volmit.adapt.api.recipe.AdaptRecipe;
import com.volmit.adapt.api.skill.Skill;
import com.volmit.adapt.api.tick.TickedObject;
Expand Down Expand Up @@ -54,13 +55,15 @@ public abstract class SimpleAdaptation<T> extends TickedObject implements Adapta
private String name;
private List<AdaptAdvancement> cachedAdvancements;
private List<AdaptRecipe> recipes;
private List<BrewingRecipe> brewingRecipes;
private Class<T> configType;
private T config;

public SimpleAdaptation(String name) {
super("adaptations", UUID.randomUUID() + "-" + name, 1000);
cachedAdvancements = new ArrayList<>();
recipes = new ArrayList<>();
brewingRecipes = new ArrayList<>();
setMaxLevel(5);
setCostFactor(0.35);
setBaseCost(3);
Expand Down Expand Up @@ -140,6 +143,10 @@ public void registerRecipe(AdaptRecipe r) {
recipes.add(r);
}

public void registerBrewingRecipe(BrewingRecipe r) {
brewingRecipes.add(r);
}

@Override
public String getDisplayName() {
try {
Expand Down
26 changes: 0 additions & 26 deletions src/main/java/com/volmit/adapt/api/potion/BrewingListener.java

This file was deleted.

64 changes: 64 additions & 0 deletions src/main/java/com/volmit/adapt/api/potion/BrewingManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.volmit.adapt.api.potion;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.volmit.adapt.Adapt;
import com.volmit.adapt.api.world.AdaptPlayer;
import com.volmit.adapt.util.J;
import org.bukkit.Color;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.BrewingStand;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.BrewerInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionType;

import java.util.List;
import java.util.Map;

public class BrewingManager implements Listener {

private static final Map<BrewingRecipe, List<String>> recipes = Maps.newHashMap();
private static final Map<Location, BrewingTask> activeTasks = Maps.newHashMap();

public BrewingManager() {
registerRecipe("test-potion", BrewingRecipe.builder()
.ingredient(new ItemStack(Material.GOLDEN_CARROT))
.basePotion(PotionBuilder.vanilla(PotionBuilder.Type.REGULAR, PotionType.WATER, false, false))
.result(PotionBuilder.of(PotionBuilder.Type.REGULAR).setName("Test Potion").setColor(Color.BLACK).build())
.brewingTime(60).fuelCost(1).build());
}

public static void registerRecipe(String adaptation, BrewingRecipe recipe) {
recipes.putIfAbsent(recipe, Lists.newArrayList(adaptation));
recipes.computeIfPresent(recipe, (k, v) -> {
if(!v.contains(adaptation))
v.add(adaptation);
return v;
});
}

@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
if(e.getClickedInventory() == null || e.getClickedInventory().getType() != InventoryType.BREWING || e.getClickedInventory().getHolder() == null)
return;

J.s(() -> {
BrewerInventory inv = (BrewerInventory)e.getClickedInventory();
BrewingStand stand = inv.getHolder();
AdaptPlayer p = Adapt.instance.getAdaptServer().getPlayer((Player)e.getWhoClicked());
recipes.keySet().stream().filter(r -> BrewingTask.isValid(r, stand)).findFirst().ifPresent(r -> {
if(activeTasks.containsKey(stand.getLocation()))
activeTasks.remove(stand.getLocation()).cancel();
if(recipes.get(r).stream().noneMatch(p::hasAdaptation))
return;
activeTasks.put(stand.getLocation(), new BrewingTask(r, inv, stand));
});
});
}
}
11 changes: 9 additions & 2 deletions src/main/java/com/volmit/adapt/api/potion/BrewingRecipe.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
package com.volmit.adapt.api.potion;


import lombok.Builder;
import lombok.Data;
import org.bukkit.inventory.ItemStack;

public record BrewingRecipe(ItemStack basePotion, ItemStack ingredient, ItemStack result, int brewingTime, int fuelCost) { }
@Data
@Builder
public class BrewingRecipe {
private final String id;
private final ItemStack basePotion, ingredient, result;
private final int brewingTime, fuelCost;
}
30 changes: 19 additions & 11 deletions src/main/java/com/volmit/adapt/api/potion/BrewingTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@

public class BrewingTask extends BukkitRunnable {

private static final int DEFAULT_BREW_TIME = 400;

private final BrewingRecipe recipe;
private final BrewerInventory inventory;
private final BrewingStand block;
Expand All @@ -22,16 +24,18 @@ public BrewingTask(BrewingRecipe recipe, BrewerInventory inventory, BrewingStand
this.inventory = inventory;
this.block = block;

this.brewTime = recipe.brewingTime();
this.brewTime = recipe.getBrewingTime();

if(block.getFuelLevel() > recipe.fuelCost()) {
block.setFuelLevel(block.getFuelLevel() - recipe.fuelCost());
if(block.getFuelLevel() > recipe.getFuelCost()) {
block.setFuelLevel(block.getFuelLevel() - recipe.getFuelCost());
} else {
int rest = recipe.fuelCost() - block.getFuelLevel();
int rest = recipe.getFuelCost() - block.getFuelLevel();
inventory.setFuel(decrease(inventory.getFuel(), rest / 20));
block.setFuelLevel(20 - rest % 20);
}

block.setBrewingTime(DEFAULT_BREW_TIME);

runTaskTimer(Adapt.instance, 0L, 1L);
}

Expand All @@ -41,8 +45,8 @@ public void run() {
inventory.setIngredient(decrease(inventory.getIngredient(), 1));

for(int i = 0; i < 3; i++) {
if(recipe.basePotion().equals(inventory.getItem(i)))
inventory.setItem(i, recipe.result());
if(recipe.getBasePotion().equals(inventory.getItem(i)))
inventory.setItem(i, recipe.getResult());
}

inventory.getViewers().forEach(e -> {
Expand All @@ -54,11 +58,11 @@ public void run() {
}

brewTime--;
block.setBrewingTime(brewTime);
block.setBrewingTime(getRemainingTime());
block.update(true);
}

private ItemStack decrease(ItemStack source, int amount) {
public static ItemStack decrease(ItemStack source, int amount) {
if(source.getAmount() > amount) {
source.setAmount(source.getAmount() - amount);
return source;
Expand All @@ -68,18 +72,22 @@ private ItemStack decrease(ItemStack source, int amount) {

public static boolean isValid(BrewingRecipe recipe, BrewingStand block) {
BrewerInventory inv = block.getInventory();
if(!recipe.ingredient().equals(inv.getIngredient()))
if(!recipe.getIngredient().isSimilar(inv.getIngredient()))
return false;

int totalFuel = (inv.getFuel() != null && inv.getFuel().getType() != Material.AIR ? inv.getFuel().getAmount() * 20 : 0) + block.getFuelLevel();
if(totalFuel < recipe.fuelCost())
if(totalFuel < recipe.getFuelCost())
return false;

for(int i = 0; i < 3; i++) {
if(recipe.basePotion().equals(inv.getItem(i)))
if(recipe.getBasePotion().isSimilar(inv.getItem(i)))
return true;
}

return false;
}

private int getRemainingTime() {
return (int)(DEFAULT_BREW_TIME * (brewTime / (float)recipe.getBrewingTime()));
}
}
Loading