This commit is contained in:
parent
27dd4a0fcb
commit
454647c599
6 changed files with 120 additions and 4 deletions
|
@ -9,9 +9,9 @@ group=net.pietru
|
|||
id=cookie_utils
|
||||
|
||||
# Dependency Versions
|
||||
cosmic_reach_version=0.3.12
|
||||
cosmic_reach_version=0.3.14
|
||||
# If unspecified, will use the version above
|
||||
cosmic_reach_server_version=0.3.12
|
||||
cosmic_reach_server_version=0.3.14
|
||||
cosmic_quilt_version=2.3.1
|
||||
#2.2.0
|
||||
|
||||
|
|
|
@ -48,6 +48,10 @@ public class Area {
|
|||
return space.contains(c);
|
||||
}
|
||||
|
||||
public boolean does_intersect(BoundingBox c){
|
||||
return space.contains(c);
|
||||
}
|
||||
|
||||
public boolean get_action_bool(String action,String player_id){
|
||||
if (is_plr_valid(player_id))
|
||||
for (int i = 0; i < player_perms.size; i++) {
|
||||
|
|
|
@ -114,6 +114,16 @@ public class Region {
|
|||
return null;
|
||||
}
|
||||
|
||||
public static int get_owned_areas(String playerId){
|
||||
int c = 0;
|
||||
for (int i = 0; i< areas.size; i++){
|
||||
Area a = areas.get(i);
|
||||
if (a.enabled && a.is_user_type(playerId,"Owner"))
|
||||
c++;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
public static void reload_regions(){
|
||||
is_not_reloading=false;
|
||||
|
||||
|
|
|
@ -95,13 +95,18 @@ public class TextCommands {
|
|||
packet.setupAndSend(channelHandlerContext);
|
||||
});
|
||||
commands.put("my_area",(args, networkIdentity, channelHandlerContext) -> {
|
||||
Account account = ServerSingletons.getAccount(networkIdentity);
|
||||
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);
|
||||
});
|
||||
commands.put("my_claims",(args, networkIdentity, channelHandlerContext) -> {
|
||||
Account account = ServerSingletons.getAccount(networkIdentity);
|
||||
|
||||
MessagePacket packet = new MessagePacket("[Server] You have "+Region.get_owned_areas(account.getUniqueId())+" claims...");
|
||||
packet.setupAndSend(channelHandlerContext);
|
||||
});
|
||||
commands.put("setup",(args, networkIdentity, channelHandlerContext) -> {
|
||||
Account account = ServerSingletons.getAccount(networkIdentity);
|
||||
boolean cancel = false;
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
package net.pietru.cookie_utils.mixins;
|
||||
|
||||
import com.badlogic.gdx.math.Vector3;
|
||||
import com.badlogic.gdx.math.collision.BoundingBox;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import finalforeach.cosmicreach.blockentities.BlockEntitySign;
|
||||
import finalforeach.cosmicreach.entities.player.Player;
|
||||
import finalforeach.cosmicreach.networking.packets.MessagePacket;
|
||||
import finalforeach.cosmicreach.networking.server.ServerSingletons;
|
||||
import finalforeach.cosmicreach.world.Zone;
|
||||
import net.pietru.cookie_utils.api.Area;
|
||||
import net.pietru.cookie_utils.api.Region;
|
||||
import net.pietru.cookie_utils.permissions.ObjectPermList;
|
||||
import net.pietru.cookie_utils.permissions.Permissions;
|
||||
import net.pietru.cookie_utils.permissions.PlayerAreaPerm;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(BlockEntitySign.class)
|
||||
public class BlockEntitySignMixin {
|
||||
|
||||
@Shadow
|
||||
private String[] texts = new String[]{"", "", "", "", ""};
|
||||
@Shadow
|
||||
Zone zone;
|
||||
@Shadow
|
||||
int x;
|
||||
@Shadow
|
||||
int y;
|
||||
@Shadow
|
||||
int z;
|
||||
|
||||
@Inject(method = "onInteract", at = @At("HEAD"), cancellable = true)
|
||||
private void event_onInteract(CallbackInfo ci, @Local Player player, @Local Zone zone){
|
||||
if (texts[0].equals("[CLAIM]") && texts[2].isEmpty() && !player.isProne) {
|
||||
String ownerId = player.getAccount().getUniqueId();
|
||||
int c = Region.get_owned_areas(ownerId);
|
||||
if (Permissions.has_perm(ownerId,"claims.limit."+(c+1))) {
|
||||
int size = isInt(texts[1]) ? Math.max(Math.min(Integer.parseInt(texts[1]), 15), 2) : 15;
|
||||
Vector3 ca = new Vector3(x - size, y - size, z - size);
|
||||
Vector3 cb = new Vector3(x + size, y + size, z + size);
|
||||
BoundingBox test = new BoundingBox(ca,cb);
|
||||
boolean can_claim = true;
|
||||
for (int i = 0; (i< Region.areas.size && can_claim); i++){
|
||||
Area a = Region.areas.get(i);
|
||||
if (a.piority>=0 && a.does_intersect(test)) {
|
||||
can_claim=false;
|
||||
}
|
||||
}
|
||||
|
||||
ci.cancel();
|
||||
if (can_claim) {
|
||||
Area area = new Area();
|
||||
area.enabled = true;
|
||||
ObjectPermList.get_default_perms(area.perms);
|
||||
area.setCorners(ca, cb);
|
||||
area.name = "self_claim_sign_" + ownerId.replace(":", "_") + ".json";
|
||||
area.zoneId = zone.zoneId;
|
||||
|
||||
PlayerAreaPerm plr_perm = PlayerAreaPerm.get_owner_perm(ownerId);
|
||||
area.player_perms.add(plr_perm);
|
||||
area.save(false);
|
||||
|
||||
plr_perm.save(area, false);
|
||||
|
||||
Region.areas.add(area);
|
||||
Region.sort_areas();
|
||||
|
||||
if (area.parent.isEmpty())
|
||||
Region.load_area_player_perms(area);
|
||||
|
||||
MessagePacket packet = new MessagePacket("[Server] Successfully claimed area of size "+size+" (size*2+1)");
|
||||
packet.setupAndSend(ServerSingletons.getConnection(player));
|
||||
} else {
|
||||
MessagePacket packet = new MessagePacket("[Server] Area of size "+size+" intersects another protected area...");
|
||||
packet.setupAndSend(ServerSingletons.getConnection(player));
|
||||
}
|
||||
} else {
|
||||
MessagePacket packet = new MessagePacket("[Server] Sorry, but you can't claim more land...");
|
||||
packet.setupAndSend(ServerSingletons.getConnection(player));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isInt(String str) {
|
||||
try {
|
||||
Integer.parseInt(str);
|
||||
return true;
|
||||
} catch(NumberFormatException e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,7 +13,8 @@
|
|||
"MobSpawnerMixin",
|
||||
"PlayerPositionMixin",
|
||||
"NettyServerMixin",
|
||||
"ServerSingletonsMixin"
|
||||
"ServerSingletonsMixin",
|
||||
"BlockEntitySignMixin"
|
||||
],
|
||||
"client": [],
|
||||
"injectors": {
|
||||
|
|
Loading…
Reference in a new issue