From 6c6d60f7a53695a0c539bcb5274b3ac00c32df9f Mon Sep 17 00:00:00 2001 From: pietru Date: Tue, 18 Feb 2025 23:09:57 +0100 Subject: [PATCH] my_area now will show area you are in via particles, Areas are more strict with does_intersect --- gradle.properties | 6 +-- .../net/pietru/cookie_utils/api/Area.java | 3 ++ .../net/pietru/cookie_utils/api/Region.java | 10 ++--- .../pietru/cookie_utils/api/TextCommands.java | 40 ++++++++++++++++++- .../cookie_utils/utils/ParticleUtil.java | 17 ++++++++ 5 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 src/main/java/net/pietru/cookie_utils/utils/ParticleUtil.java diff --git a/gradle.properties b/gradle.properties index 2207606..ae04cb5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,14 +4,14 @@ org.gradle.parallel=true org.gradle.caching=false # Project Info -version=1.0.5 +version=1.0.6 group=net.pietru id=cookie_utils # Dependency Versions -cosmic_reach_version=0.3.16 +cosmic_reach_version=0.3.26 # If unspecified, will use the version above -cosmic_reach_server_version=0.3.16 +cosmic_reach_server_version=0.3.26 cosmic_quilt_version=2.3.1 #2.2.0 diff --git a/src/main/java/net/pietru/cookie_utils/api/Area.java b/src/main/java/net/pietru/cookie_utils/api/Area.java index 90532e2..60fd1ac 100644 --- a/src/main/java/net/pietru/cookie_utils/api/Area.java +++ b/src/main/java/net/pietru/cookie_utils/api/Area.java @@ -45,6 +45,9 @@ public class Area { } public boolean does_intersect(Vector3 c){ + c.x=(int)c.x; + c.y=(int)c.y; + c.z=(int)c.z; return space.contains(c); } diff --git a/src/main/java/net/pietru/cookie_utils/api/Region.java b/src/main/java/net/pietru/cookie_utils/api/Region.java index 5727d2c..ca10889 100644 --- a/src/main/java/net/pietru/cookie_utils/api/Region.java +++ b/src/main/java/net/pietru/cookie_utils/api/Region.java @@ -30,7 +30,7 @@ public class Region { if (is_not_reloading) for (Area a : areas){ - if (a.enabled && (z.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(g_position)){ + if (a.enabled && (a.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(g_position)){ can=a.get_action_bool(action,player_id); break; } @@ -47,7 +47,7 @@ public class Region { if (is_not_reloading) for (int i = 0; i< areas.size; i++){ Area a = areas.get(i); - if (a.enabled && (z.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(g_position)){ + if (a.enabled && (a.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(g_position)){ can=a.get_action_bool(action); break; } @@ -63,7 +63,7 @@ public class Region { if (is_not_reloading) for (int i = 0; i< areas.size; i++){ Area a = areas.get(i); - if (a.enabled && (z.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(position)){ + if (a.enabled && (a.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(position)){ can=a.get_action_bool(action,player_id); break; } @@ -78,7 +78,7 @@ public class Region { if (is_not_reloading) for (int i = 0; i< areas.size; i++){ Area a = areas.get(i); - if (a.enabled && (z.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(position)){ + if (a.enabled && (a.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(position)){ can=a.get_action_bool(action); break; } @@ -106,7 +106,7 @@ public class Region { if (is_not_reloading) for (int i = 0; i< areas.size; i++){ Area a = areas.get(i); - if (a.enabled && (z.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(position)){ + if (a.enabled && (a.zoneId.isEmpty() || z.zoneId.equals(a.zoneId)) && a.does_intersect(position)){ return a; } } diff --git a/src/main/java/net/pietru/cookie_utils/api/TextCommands.java b/src/main/java/net/pietru/cookie_utils/api/TextCommands.java index d5b310c..cd7cb42 100644 --- a/src/main/java/net/pietru/cookie_utils/api/TextCommands.java +++ b/src/main/java/net/pietru/cookie_utils/api/TextCommands.java @@ -1,17 +1,22 @@ package net.pietru.cookie_utils.api; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.math.collision.BoundingBox; import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.JsonWriter; import finalforeach.cosmicreach.GameSingletons; import finalforeach.cosmicreach.ZoneLoader; import finalforeach.cosmicreach.ZoneLoaders; import finalforeach.cosmicreach.accounts.Account; +import finalforeach.cosmicreach.entities.EntityLaserProjectile; import finalforeach.cosmicreach.entities.player.Player; import finalforeach.cosmicreach.io.SaveLocation; import finalforeach.cosmicreach.networking.NetworkIdentity; import finalforeach.cosmicreach.networking.packets.MessagePacket; +import finalforeach.cosmicreach.networking.packets.ParticleSystemPacket; import finalforeach.cosmicreach.networking.server.ServerSingletons; +import finalforeach.cosmicreach.particles.GameParticleSystem; import finalforeach.cosmicreach.savelib.utils.TriConsumer; import finalforeach.cosmicreach.world.IZoneLoader; import finalforeach.cosmicreach.world.Zone; @@ -20,6 +25,7 @@ import io.netty.channel.ChannelHandlerContext; import net.pietru.cookie_utils.permissions.GroupPerms; import net.pietru.cookie_utils.permissions.Permissions; import net.pietru.cookie_utils.setups.Setup; +import net.pietru.cookie_utils.utils.ParticleUtil; import java.io.BufferedWriter; import java.io.File; @@ -101,12 +107,42 @@ public class TextCommands { MessagePacket packet = new MessagePacket("[Server] Your name is "+account.getUsername()); packet.setupAndSend(channelHandlerContext); }); - commands.put("my_area",(args, networkIdentity, channelHandlerContext) -> { + commands.put("my_area",(args, networkIdentity, ctx) -> { Player plr = ServerSingletons.getPlayer(networkIdentity); Area area = get_area_at_pos(plr.getPosition(), plr.getZone()); MessagePacket packet = new MessagePacket("[Server] You are in "+(area!=null?area.name : "no area atm...")); - packet.setupAndSend(channelHandlerContext); + packet.setupAndSend(ctx); + + if (area==null) + return; + + BoundingBox bb = area.getBox(); + + GameParticleSystem system = GameParticleSystem.laserParticleSystem.copy(); + system.startColor.set(Color.YELLOW); + system.duration = 20.0F; + + Vector3 m = new Vector3(.5f,.5f,.5f); + + for (int x = (int) bb.min.x; x<=bb.max.x; x++){ + ParticleUtil.send_particle(x, (int) bb.min.y, (int) bb.min.z,system,ctx,m); + ParticleUtil.send_particle(x, (int) bb.max.y, (int) bb.min.z,system,ctx,m); + ParticleUtil.send_particle(x, (int) bb.min.y, (int) bb.max.z,system,ctx,m); + ParticleUtil.send_particle(x, (int) bb.max.y, (int) bb.max.z,system,ctx,m); + } + for (int y = (int) bb.min.y; y<=bb.max.y; y++){ + ParticleUtil.send_particle((int) bb.min.x,y, (int) bb.min.z,system,ctx,m); + ParticleUtil.send_particle((int) bb.max.x,y, (int) bb.min.z,system,ctx,m); + ParticleUtil.send_particle((int) bb.min.x,y, (int) bb.max.z,system,ctx,m); + ParticleUtil.send_particle((int) bb.max.x,y, (int) bb.max.z,system,ctx,m); + } + for (int z = (int) bb.min.z; z<=bb.max.z; z++){ + ParticleUtil.send_particle((int) bb.min.x, (int) bb.min.y,z,system,ctx,m); + ParticleUtil.send_particle((int) bb.max.x, (int) bb.min.y,z,system,ctx,m); + ParticleUtil.send_particle((int) bb.min.x, (int) bb.max.y,z,system,ctx,m); + ParticleUtil.send_particle((int) bb.max.x, (int) bb.max.y,z,system,ctx,m); + } }); commands.put("my_claims",(args, networkIdentity, channelHandlerContext) -> { Account account = ServerSingletons.getAccount(networkIdentity); diff --git a/src/main/java/net/pietru/cookie_utils/utils/ParticleUtil.java b/src/main/java/net/pietru/cookie_utils/utils/ParticleUtil.java new file mode 100644 index 0000000..5b0d11a --- /dev/null +++ b/src/main/java/net/pietru/cookie_utils/utils/ParticleUtil.java @@ -0,0 +1,17 @@ +package net.pietru.cookie_utils.utils; + +import com.badlogic.gdx.math.Vector3; +import finalforeach.cosmicreach.networking.packets.ParticleSystemPacket; +import finalforeach.cosmicreach.particles.GameParticleSystem; +import io.netty.channel.ChannelHandlerContext; + +public class ParticleUtil { + public static void send_particle(float x, float y, float z, GameParticleSystem system, ChannelHandlerContext ctx){ + system.setOrigin(x,y,z); + ParticleSystemPacket particle = new ParticleSystemPacket(system); + particle.setupAndSend(ctx); + } + public static void send_particle(float x, float y, float z, GameParticleSystem system, ChannelHandlerContext ctx, Vector3 m){ + send_particle(x+m.x,y+m.y,z+m.z,system,ctx); + } +}