intelligence pvp thing done
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package net.nuggetmc.ai.utils;
|
||||
|
||||
import net.minecraft.server.v1_16_R3.EntityLiving;
|
||||
import net.nuggetmc.ai.TerminatorPlus;
|
||||
import net.nuggetmc.ai.bot.Bot;
|
||||
import net.nuggetmc.ai.bot.agent.Agent;
|
||||
@@ -10,11 +11,13 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.permissions.ServerOperator;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.beans.Statement;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Debugger {
|
||||
|
||||
@@ -191,7 +194,7 @@ public class Debugger {
|
||||
}
|
||||
|
||||
public void item() {
|
||||
TerminatorPlus.getInstance().getManager().fetch().forEach(b -> b.item = true);
|
||||
TerminatorPlus.getInstance().getManager().fetch().forEach(b -> b.setDefaultItem(new ItemStack(Material.IRON_SWORD)));
|
||||
}
|
||||
|
||||
public void j(boolean b) {
|
||||
@@ -215,7 +218,7 @@ public class Debugger {
|
||||
}
|
||||
|
||||
public void tp() {
|
||||
Bot bot = MathUtils.getRandomSetElement(TerminatorPlus.getInstance().getManager().fetch());
|
||||
Bot bot = MathUtils.getRandomSetElement(TerminatorPlus.getInstance().getManager().fetch().stream().filter(EntityLiving::isAlive).collect(Collectors.toSet()));
|
||||
|
||||
if (bot == null) {
|
||||
print("Failed to locate a bot.");
|
||||
|
||||
59
src/main/java/net/nuggetmc/ai/utils/ItemUtils.java
Normal file
59
src/main/java/net/nuggetmc/ai/utils/ItemUtils.java
Normal file
@@ -0,0 +1,59 @@
|
||||
package net.nuggetmc.ai.utils;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ItemUtils {
|
||||
|
||||
public static double getLegacyAttackDamage(ItemStack item) {
|
||||
switch (item.getType()) {
|
||||
default:
|
||||
return 0.25;
|
||||
|
||||
case WOODEN_SHOVEL:
|
||||
case GOLDEN_SHOVEL:
|
||||
case WOODEN_HOE:
|
||||
case GOLDEN_HOE:
|
||||
case STONE_HOE:
|
||||
case IRON_HOE:
|
||||
case DIAMOND_HOE:
|
||||
case NETHERITE_HOE:
|
||||
return 1;
|
||||
|
||||
case WOODEN_PICKAXE:
|
||||
case GOLDEN_PICKAXE:
|
||||
case STONE_SHOVEL:
|
||||
return 2;
|
||||
|
||||
case WOODEN_AXE:
|
||||
case GOLDEN_AXE:
|
||||
case STONE_PICKAXE:
|
||||
case IRON_SHOVEL:
|
||||
return 3;
|
||||
|
||||
case WOODEN_SWORD:
|
||||
case GOLDEN_SWORD:
|
||||
case STONE_AXE:
|
||||
case IRON_PICKAXE:
|
||||
case DIAMOND_SHOVEL:
|
||||
return 4;
|
||||
|
||||
case STONE_SWORD:
|
||||
case IRON_AXE:
|
||||
case DIAMOND_PICKAXE:
|
||||
case NETHERITE_SHOVEL:
|
||||
return 5;
|
||||
|
||||
case IRON_SWORD:
|
||||
case DIAMOND_AXE:
|
||||
case NETHERITE_PICKAXE:
|
||||
return 6;
|
||||
|
||||
case DIAMOND_SWORD:
|
||||
case NETHERITE_AXE:
|
||||
return 7;
|
||||
|
||||
case NETHERITE_SWORD:
|
||||
return 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
package net.nuggetmc.ai.utils;
|
||||
|
||||
import net.nuggetmc.ai.bot.Bot;
|
||||
import org.bukkit.util.NumberConversions;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class MathUtils {
|
||||
|
||||
@@ -90,4 +91,93 @@ public class MathUtils {
|
||||
public static String round2Dec(double n) {
|
||||
return FORMATTER_2.format(n);
|
||||
}
|
||||
|
||||
public static List<Map.Entry<Bot, Integer>> sortByValue(HashMap<Bot, Integer> hm) {
|
||||
List<Map.Entry<Bot, Integer>> list = new LinkedList<>(hm.entrySet());
|
||||
list.sort(Map.Entry.comparingByValue());
|
||||
Collections.reverse(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
public static double generateConnectionValue(List<Double> list, double mutationSize) {
|
||||
double[] bounds = getBounds(list, mutationSize);
|
||||
return random(bounds[0], bounds[1]);
|
||||
}
|
||||
|
||||
public static double generateConnectionValue(List<Double> list) {
|
||||
return generateConnectionValue(list, 0);
|
||||
}
|
||||
|
||||
public static double random(double low, double high) {
|
||||
return Math.random() * (high - low) + low;
|
||||
}
|
||||
|
||||
public static double sum(List<Double> list) {
|
||||
return list.stream().mapToDouble(n -> n).sum();
|
||||
}
|
||||
|
||||
public static double min(List<Double> list) {
|
||||
if (list.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
double min = Double.MAX_VALUE;
|
||||
|
||||
for (double n : list) {
|
||||
if (n < min) {
|
||||
min = n;
|
||||
}
|
||||
}
|
||||
|
||||
return min;
|
||||
}
|
||||
|
||||
public static double max(List<Double> list) {
|
||||
if (list.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
double max = 0;
|
||||
|
||||
for (double n : list) {
|
||||
if (n > max) {
|
||||
max = n;
|
||||
}
|
||||
}
|
||||
|
||||
return max;
|
||||
}
|
||||
|
||||
public static double getMidValue(List<Double> list) {
|
||||
return (min(list) + max(list)) / 2D;
|
||||
}
|
||||
|
||||
public static double distribution(List<Double> list, double mid) {
|
||||
return Math.sqrt(sum(list.stream().map(n -> Math.pow(n - mid, 2)).collect(Collectors.toList())) / list.size());
|
||||
}
|
||||
|
||||
public static double[] getBounds(List<Double> list, double mutationSize) {
|
||||
double mid = getMidValue(list);
|
||||
double dist = distribution(list, mid);
|
||||
double p = mutationSize * dist / Math.sqrt(list.size());
|
||||
|
||||
return new double[] {
|
||||
mid - p,
|
||||
mid + p
|
||||
};
|
||||
}
|
||||
|
||||
public static double getMutationSize(int generation) {
|
||||
int shift = 4;
|
||||
|
||||
if (generation <= shift + 1) {
|
||||
return 7.38905609893;
|
||||
}
|
||||
|
||||
double a = 0.8;
|
||||
double b = -8.5 - shift;
|
||||
double c = 2;
|
||||
|
||||
return Math.pow(a, generation + b) + c;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package net.nuggetmc.ai.utils;
|
||||
|
||||
import net.nuggetmc.ai.TerminatorPlus;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
@@ -49,4 +50,21 @@ public class PlayerUtils {
|
||||
Debugger.log("Failed to fetch from the usercache.");
|
||||
}
|
||||
}
|
||||
|
||||
public static Location findAbove(Location loc, int amount) {
|
||||
boolean check = false;
|
||||
|
||||
for (int i = 0; i <= amount; i++) {
|
||||
if (loc.clone().add(0, i, 0).getBlock().getType().isSolid()) {
|
||||
check = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (check) {
|
||||
return loc;
|
||||
} else {
|
||||
return loc.clone().add(0, amount, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user