Conversation
iambibi
left a comment
There was a problem hiding this comment.
- Pas de registre + tu as mis tes packages dans core.utils alors que c'est pas un utils, je te conseille de regarder le commentaire + de les moves dans core.registry.region
- Méthode pas du tout optimisé (utilise plutot des points que des chunks ou tu parcours TOUTES les entites, j'imagine meme pas avec une région qui fait 1000x1000)
| 0L, | ||
| 10L // 0.5s | ||
| ); | ||
| } |
There was a problem hiding this comment.
vive les perf, tu mets des entités dont on s'en fou totalement et si tu fais tout ça juste pour dire des que le joueur rentre dans une zone, on affiche un message, et quand il sort et qu'il rerentre on l'affiche et que tu mets du code plus compliqué pour gerer ça aucun interet
|
|
||
| return !wasInside; | ||
| } | ||
| } No newline at end of file |
There was a problem hiding this comment.
y'a pas de registre ? ex
(et tu enregistres simplement et clairement les regions)
/**
* Registre qui mets à la disposition d'enregistrer des POI (Point of Interest)
* qui est conretement une region, entre 2 points
*/
public class CustomPoiRegistry extends Registry<String, CustomPoi>
implements KeyedRegistry<String, CustomPoi>, HasListeners {
// ** REGISTER POIs **
public final CustomPoi SINGULARITY = register(new SingularityPoi());
@Override
public void postInit() {
for (CustomPoi poi : values()) {
poi.firstLoad();
WorldGuardHook.registerWorldGuardRegion(poi.getKey(), poi.getWorld(), poi.getPos1(), poi.getPos2());
}
}
@Override
public String key(CustomPoi registryObject) {
return registryObject.getKey().asString();
}
@Override
public Set<ListenerFactory> getListeners() {
return Set.of(
PoiDetectionListener::new
);
}
public Optional<CustomPoi> getByLocation(Location location) {
BlockVector3 locVec3 = BlockVector3.at(location.getX(), location.getY(), location.getZ());
World world = location.getWorld();
for (CustomPoi poi : values()) {
if (!poi.getWorld().getName().equals(world.getName())) continue;
if (!locVec3.containedWithin(poi.getPos1(), poi.getPos2())) continue;
return Optional.of(poi);
}
return Optional.empty();
}
}
| } | ||
|
|
||
| // use for enter/exit detection only | ||
| public boolean simpleInOutVerification(Entity entity) { |
| } | ||
|
|
||
| public void initChunks() { | ||
| chunks = getChunks(); |
There was a problem hiding this comment.
en plus tu load les chunks lors du init de la classe, c'est pas opti, alors que tu pourrais faire juste un truc avec 2 points (et 1 points + distance pour cylinderRegion). qui est concretement un BlockVector3. au lieu d'enregistrer les instances des chunks
| @Override | ||
| public SquareRegion clone() { | ||
| try { | ||
| return (SquareRegion) super.clone(); | ||
| } catch (CloneNotSupportedException e) { | ||
| throw new RuntimeException(e); | ||
| } | ||
| } |
|
|
||
| for (int cx = minChunkX; cx <= maxChunkX; cx++) { | ||
| for (int cz = minChunkZ; cz <= maxChunkZ; cz++) { | ||
| chunks.add(regionWorld.getChunkAt(cx, cz)); |
There was a problem hiding this comment.
ça ne va pas cette histoire, pourquoi travailler avec des chunks alors tu pourrais juste avec des nombres qui sont en réalité tes co.
| continue; | ||
| } | ||
|
|
||
| chunks = Stream.concat(chunks.stream(), region.getChunks().stream()) |
| BlockVector3 cylCenter; | ||
| World regionWorld; | ||
| double radius; | ||
| double minY; | ||
| double maxY; |
Petit résumé de la PR:
Ajout d'un système de région avec détection d'entité dedans
Étape nécessaire afin que la PR soit fini (si PR en draft)
Decrivez vos changements
Le système est assez simple, c'est un zone, on peut ajouter une détection sur les entités pour dire de faire quelque chose si tel entité est dedans... ( pour détecter les entités, la région récupères les chunks dans les quel elle se situe et récupère les entité dedans )