From 7829de2d99c04858b5bfb156f66cdc17212561d4 Mon Sep 17 00:00:00 2001 From: Lorenz Date: Sat, 6 Aug 2022 11:46:08 +0200 Subject: Merge branch 'master' of C:\Users\Lorenz\IdeaProjects\SkyHanni with conflicts. --- .../hannibal2/skyhanni/test/GriffinJavaUtils.java | 353 +++++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/test/GriffinJavaUtils.java (limited to 'src/main/java/at/hannibal2/skyhanni/test/GriffinJavaUtils.java') diff --git a/src/main/java/at/hannibal2/skyhanni/test/GriffinJavaUtils.java b/src/main/java/at/hannibal2/skyhanni/test/GriffinJavaUtils.java new file mode 100644 index 000000000..431cfbe6f --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/test/GriffinJavaUtils.java @@ -0,0 +1,353 @@ +package at.hannibal2.skyhanni.test; + +import at.hannibal2.skyhanni.utils.LorenzVec; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.text.DecimalFormat; +import java.util.*; +import java.util.List; +import java.util.function.Function; + +public class GriffinJavaUtils { + public static void permute(ArrayList> result, T[] a, int k) { + if (k == a.length) { + ArrayList subResult = new ArrayList<>(); + result.add(subResult); + Collections.addAll(subResult, a); + } else { + for (int i = k; i < a.length; i++) { + T temp = a[k]; + a[k] = a[i]; + a[i] = temp; + + permute(result, a, k + 1); + + temp = a[k]; + a[k] = a[i]; + a[i] = temp; + } + } + } + +// public static ArrayList sortLocationListC(LorenzVec start, Map map, boolean brokenMath) { +// Map fastestWithout = new HashMap<>(); +// for (T without : map.keySet()) { +// +// ArrayList> variants = new ArrayList<>(); +// ArrayList values = new ArrayList<>(map.keySet()); +// +// values.remove(without); +// T[] array = (T[]) values.toArray(); +// +// permute(variants, array, 0); +// +// LinkedHashMap, Double> distances = new LinkedHashMap<>(); +// +// for (ArrayList list : variants) { +// +// double distance = 0; +// LorenzVec last = start; +// +// for (T t : list) { +// LorenzVec location = map.get(t); +// distance += last.distanceSq(location); +// last = location; +// } +// +// distances.put(list, distance); +// } +// +// Map, Double> sort; +// if (brokenMath) { +// sort = sortByValue(distances); +// } else { +// sort = sortByValueAsc(distances); +// } +// +// double fastestDistance = sort.values().iterator().next(); +// fastestWithout.put(without, fastestDistance); +// } +// +// T skip = sortByValueAsc(fastestWithout).keySet().iterator().next(); +// +// +// map.remove(skip); +// ArrayList result = sortLocationListB(start, map, brokenMath, false, T -> false, 0); +// result.add(skip); +// +// return result; +// } + + public static ArrayList sortLocationListB(LorenzVec start, Map map, boolean brokenMath, + boolean skipWorst, Function shouldAddToHostile, int addToHostileLastValue) { + +// if (skipWorst) { +// return sortLocationListC(start, map, brokenMath); +// } + ArrayList> variants = new ArrayList<>(); + Set values = map.keySet(); + T[] array = (T[]) values.toArray(); + + permute(variants, array, 0); + + LinkedHashMap, Double> distances = new LinkedHashMap<>(); + + int with = 0; + int without = 0; + + for (ArrayList list : variants) { + + double distance = 0; + LorenzVec last = start; + T lastT = null; + + for (T t : list) { + LorenzVec location = map.get(t); + distance += last.distanceSq(location); + last = location; + lastT = t; + } + if (shouldAddToHostile.apply(lastT)) { + distance += addToHostileLastValue; + with++; + } else { + without++; + } + + distances.put(list, distance); + } +// LorenzUtils.Companion.chat("with: " + with); +// LorenzUtils.Companion.chat("without: " + without); + + Map, Double> sort; + if (brokenMath) { + sort = sortByValue(distances); + } else { + sort = sortByValueAsc(distances); + } + ArrayList result = sort.keySet().iterator().next(); + ArrayList resultList = new ArrayList<>(); + for (T t : result) { + resultList.add(map.get(t)); + } + + return resultList; + } + + //descending + public static > Map sortByValue(Map map) { + List> list = new ArrayList<>(map.entrySet()); + list.sort(Map.Entry.comparingByValue()); + Collections.reverse(list); + + Map result = new LinkedHashMap<>(); + for (Map.Entry entry : list) { + result.put(entry.getKey(), entry.getValue()); + } + + return result; + } + + //ascending + public static > Map sortByValueAsc(Map map) { + List> list = new ArrayList<>(map.entrySet()); + list.sort(Map.Entry.comparingByValue()); + + Map result = new LinkedHashMap<>(); + for (Map.Entry entry : list) { + result.put(entry.getKey(), entry.getValue()); + } + + return result; + } + + public static String formatInteger(int i) { + return new DecimalFormat("#,##0").format(i).replace(',', '.'); + } + + public static List getItemsInInventory() { + return getItemsInInventory(false); + } + + public static List getItemsInInventory(boolean withCursorItem) { + List list = new ArrayList<>(); + +// EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; + EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; + if (player == null) { + System.err.println("loadCurrentInventory: player is null!"); + return list; + } + + InventoryPlayer inventory = player.inventory; + ItemStack[] mainInventory = inventory.mainInventory; + + ArrayList helpList = new ArrayList<>(); + helpList.addAll(Arrays.asList(mainInventory)); + + if (withCursorItem) { + helpList.add(inventory.getItemStack()); + } + + for (ItemStack item : helpList) { + if (item == null) continue; + String name = item.getDisplayName(); + if (name.equalsIgnoreCase("air")) continue; + if (name.equalsIgnoreCase("luft")) continue; + list.add(item); + } + + return list; + } + + public static void drawWaypoint(LorenzVec pos, float partialTicks, Color color, boolean beacon) { + drawWaypoint(pos, partialTicks, color, beacon, false); + } + + public static void drawWaypoint(LorenzVec pos, float partialTicks, Color color, boolean beacon, boolean forceBeacon) { + Entity viewer = Minecraft.getMinecraft().getRenderViewEntity(); + double viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * partialTicks; + double viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * partialTicks; + double viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * partialTicks; + + double x = pos.getX() - viewerX; + double y = pos.getY() - viewerY; + double z = pos.getZ() - viewerZ; + + + GlStateManager.disableDepth(); + GlStateManager.disableCull(); + GlStateManager.disableTexture2D(); + if (beacon) { + double distSq = x * x + y * y + z * z; + if (distSq > 5 * 5 || forceBeacon) { + //TODO add beacon +// GriffinUtils.renderBeaconBeam(x, y, z, color.getRGB(), 1.0f, partialTicks); + } + } +// BlockPos a = pos.toBlocPos(); +// BlockPos b = pos.add(1, 1, 1).toBlocPos(); +// draw3DBox(new AxisAlignedBB(a, b), color, partialTicks); + + AxisAlignedBB aabb = new AxisAlignedBB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 1, pos.getZ() + 1); + + draw3DBox(aabb, color, partialTicks); + GlStateManager.disableLighting(); + GlStateManager.enableTexture2D(); + GlStateManager.enableDepth(); + + } + + public static void draw3DLine(LorenzVec p1, LorenzVec p2, Color color, int lineWidth, boolean depth, float partialTicks) { + GlStateManager.disableDepth(); + GlStateManager.disableCull(); + +// Vec3 pos1 = new Vec3(p1.getX(), p1.getY(), p1.getZ()); +// Vec3 pos2 = new Vec3(p2.getX(), p2.getY(), p2.getZ()); + + Entity render = Minecraft.getMinecraft().getRenderViewEntity(); + WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer(); + + double realX = render.lastTickPosX + (render.posX - render.lastTickPosX) * partialTicks; + double realY = render.lastTickPosY + (render.posY - render.lastTickPosY) * partialTicks; + double realZ = render.lastTickPosZ + (render.posZ - render.lastTickPosZ) * partialTicks; + + GlStateManager.pushMatrix(); + GlStateManager.translate(-realX, -realY, -realZ); + GlStateManager.disableTexture2D(); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GL11.glLineWidth(lineWidth); + + + if (!depth) { + GL11.glDisable(GL11.GL_DEPTH_TEST); + GlStateManager.depthMask(false); + } + GlStateManager.color(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); + worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION); + + worldRenderer.pos(p1.getX(), p1.getY(), p1.getZ()).endVertex(); + worldRenderer.pos(p2.getX(), p2.getY(), p2.getZ()).endVertex(); + Tessellator.getInstance().draw(); + + GlStateManager.translate(realX, realY, realZ); + if (!depth) { + GL11.glEnable(GL11.GL_DEPTH_TEST); + GlStateManager.depthMask(true); + } + + + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableTexture2D(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + + + GlStateManager.disableLighting(); + GlStateManager.enableDepth(); + } + + public static void draw3DBox(AxisAlignedBB aabb, Color colour, float partialTicks) { + Entity render = Minecraft.getMinecraft().getRenderViewEntity(); + WorldRenderer worldRenderer = Tessellator.getInstance().getWorldRenderer(); + + double realX = render.lastTickPosX + (render.posX - render.lastTickPosX) * partialTicks; + double realY = render.lastTickPosY + (render.posY - render.lastTickPosY) * partialTicks; + double realZ = render.lastTickPosZ + (render.posZ - render.lastTickPosZ) * partialTicks; + + GlStateManager.pushMatrix(); + GlStateManager.translate(-realX, -realY, -realZ); + GlStateManager.disableTexture2D(); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GL11.glLineWidth(2); + GlStateManager.color(colour.getRed() / 255f, colour.getGreen() / 255f, colour.getBlue() / 255f, colour.getAlpha() / 255f); + worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION); + + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); + Tessellator.getInstance().draw(); + worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION); + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + Tessellator.getInstance().draw(); + worldRenderer.begin(GL11.GL_LINE_STRIP, DefaultVertexFormats.POSITION); + worldRenderer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); + worldRenderer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); + worldRenderer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); + worldRenderer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); + worldRenderer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); + Tessellator.getInstance().draw(); + + GlStateManager.translate(realX, realY, realZ); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableTexture2D(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } +} -- cgit