package emu.grasscutter.scripts; import ch.ethz.globis.phtree.PhTree; import emu.grasscutter.utils.Position; import java.util.ArrayList; import java.util.List; import java.util.function.Function; public class SceneIndexManager { public static void buildIndex(PhTree tree, List elements, Function extractor){ elements.forEach(e -> tree.put(extractor.apply(e), e)); } public static List queryNeighbors(PhTree tree, Position position, int range){ var result = new ArrayList(); var arrPos = position.toLongArray(); var query = tree.query(calRange(arrPos, -range), calRange(arrPos, range)); while(query.hasNext()){ var element = query.next(); result.add(element); } return result; } public static List queryNeighbors(PhTree tree, long[] position, int range){ var result = new ArrayList(); var query = tree.query(calRange(position, -range), calRange(position, range)); while(query.hasNext()){ var element = query.next(); result.add(element); } return result; } private static long[] calRange(long[] position, int range){ var newPos = position.clone(); for(int i=0;i