dynmap support

This commit is contained in:
Flemmli97 2022-05-16 20:01:07 +02:00
parent fc76c147cc
commit 83acb77647
9 changed files with 149 additions and 1 deletions

View File

@ -1,3 +1,7 @@
Flan 1.7.8
================
- Add dynmap support for claims
Flan 1.7.7
================
- Prevent moss/grassblock/nylium bonemealing if too close to a claim without permission

View File

@ -6,12 +6,21 @@ configurations {
shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
}
repositories {
maven {
name = "CurseMaven"
url "https://www.cursemaven.com"
}
}
dependencies {
// We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
// Do NOT use other classes from fabric loader
modImplementation "net.fabricmc:fabric-loader:${rootProject.loader_version}"
implementation group: 'org.yaml', name: 'snakeyaml', version: '1.25'
shadowCommon group: 'org.yaml', name: 'snakeyaml', version: '1.25'
modImplementation dynmap_fabric
}
architectury {

View File

@ -14,6 +14,7 @@ import io.github.flemmli97.flan.config.Config;
import io.github.flemmli97.flan.config.ConfigHandler;
import io.github.flemmli97.flan.platform.ClaimPermissionCheck;
import io.github.flemmli97.flan.platform.CrossPlatformStuff;
import io.github.flemmli97.flan.platform.integration.dynmap.DynmapCalls;
import io.github.flemmli97.flan.player.LogoutTracker;
import io.github.flemmli97.flan.player.PlayerClaimData;
import net.minecraft.ChatFormatting;
@ -164,6 +165,7 @@ public class Claim implements IPermissionContainer {
public void setClaimName(String name) {
this.claimName = name;
this.setDirty(true);
DynmapCalls.changeClaimName(this);
}
public UUID getOwner() {

View File

@ -14,6 +14,7 @@ import io.github.flemmli97.flan.api.data.IPlayerData;
import io.github.flemmli97.flan.api.permission.ClaimPermission;
import io.github.flemmli97.flan.api.permission.PermissionRegistry;
import io.github.flemmli97.flan.config.ConfigHandler;
import io.github.flemmli97.flan.platform.integration.dynmap.DynmapCalls;
import io.github.flemmli97.flan.platform.integration.permissions.PermissionNodeHandler;
import io.github.flemmli97.flan.player.EnumDisplayType;
import io.github.flemmli97.flan.player.EnumEditMode;
@ -154,6 +155,7 @@ public class ClaimStorage implements IPermissionStorage {
claim.remove();
claim.getOwnerPlayer().ifPresent(o -> PlayerClaimData.get(o).updateScoreboard());
}
DynmapCalls.removeMarker(claim);
return this.claimUUIDMap.remove(claim.getClaimID()) != null;
}
@ -275,6 +277,7 @@ public class ClaimStorage implements IPermissionStorage {
old.add(claim);
return old;
});
DynmapCalls.addClaimMarker(claim);
}
public boolean transferOwner(Claim claim, ServerPlayer player, UUID newOwner) {
@ -292,6 +295,7 @@ public class ClaimStorage implements IPermissionStorage {
return old;
});
this.dirty.add(claim.getOwner());
DynmapCalls.changeClaimOwner(claim);
return true;
}

View File

@ -0,0 +1,28 @@
package io.github.flemmli97.flan.platform.integration.dynmap;
import io.github.flemmli97.flan.claim.Claim;
public class DynmapCalls {
public static boolean dynmapLoaded;
public static void addClaimMarker(Claim claim) {
if (dynmapLoaded)
DynmapIntegration.addClaimMarker(claim);
}
public static void removeMarker(Claim claim) {
if (dynmapLoaded)
DynmapIntegration.removeMarker(claim);
}
public static void changeClaimName(Claim claim) {
if (dynmapLoaded)
DynmapIntegration.changeClaimName(claim);
}
public static void changeClaimOwner(Claim claim) {
if (dynmapLoaded)
DynmapIntegration.changeClaimOwner(claim);
}
}

View File

@ -0,0 +1,93 @@
package io.github.flemmli97.flan.platform.integration.dynmap;
import com.mojang.authlib.GameProfile;
import io.github.flemmli97.flan.claim.Claim;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;
import org.dynmap.DynmapCommonAPI;
import org.dynmap.DynmapCommonAPIListener;
import org.dynmap.markers.AreaMarker;
import org.dynmap.markers.MarkerAPI;
import org.dynmap.markers.MarkerSet;
import java.util.Optional;
public class DynmapIntegration {
private static MarkerSet markerSet;
private static final String markerID = "flan.claims", markerLabel = "Claims";
public static void reg() {
DynmapCommonAPIListener.register(new DynmapCommonAPIListener() {
@Override
public void apiEnabled(DynmapCommonAPI dynmapCommonAPI) {
MarkerAPI markerAPI = dynmapCommonAPI.getMarkerAPI();
markerSet = markerAPI.createMarkerSet(markerID, markerLabel, dynmapCommonAPI.getMarkerAPI().getMarkerIcons(), false);
DynmapCalls.dynmapLoaded = true;
}
});
}
static void addClaimMarker(Claim claim) {
if (markerSet == null)
return;
int[] dim = claim.getDimensions();
AreaMarker marker = markerSet.createAreaMarker(claim.getClaimID().toString(), claimLabel(claim), true, getWorldName(claim.getWorld()), new double[]{dim[0], dim[1]}, new double[]{dim[2], dim[3]}, false);
marker.setLineStyle(3, 0.8, lineColor(claim.isAdminClaim()));
marker.setFillStyle(0.2, fillColor(claim.isAdminClaim()));
}
static void removeMarker(Claim claim) {
if (markerSet == null)
return;
AreaMarker marker = markerSet.findAreaMarker(claim.getClaimID().toString());
if (marker != null)
marker.deleteMarker();
}
static void changeClaimName(Claim claim) {
if (markerSet == null)
return;
markerSet.findAreaMarker(claim.getClaimID().toString())
.setLabel(claimLabel(claim));
}
static void changeClaimOwner(Claim claim) {
if (markerSet == null)
return;
if (claim.getClaimName() == null || claim.getClaimName().isEmpty())
markerSet.findAreaMarker(claim.getClaimID().toString())
.setLabel(claimLabel(claim));
}
private static String getWorldName(Level level) {
ResourceKey<Level> key = level.dimension();
if (key == Level.OVERWORLD) {
return level.getServer().getWorldData().getLevelName();
} else if (key == Level.END) {
return "DIM1";
} else if (key == Level.NETHER) {
return "DIM-1";
}
return key.location().getNamespace() + "_" + key.location().getPath();
}
private static int lineColor(boolean admin) {
return admin ? 0xb50909 : 0xffa200;
}
private static int fillColor(boolean admin) {
return admin ? 0xff0000 : 0xe0e01d;
}
private static String claimLabel(Claim claim) {
String name = claim.getClaimName();
if (name == null || name.isEmpty()) {
if (claim.isAdminClaim())
return "Admin Claim";
Optional<GameProfile> prof = claim.getWorld().getServer().getProfileCache().get(claim.getOwner());
return prof.map(GameProfile::getName).orElse("UNKOWN") + "'s Claim";
}
return name;
}
}

View File

@ -9,6 +9,7 @@ import io.github.flemmli97.flan.event.ItemInteractEvents;
import io.github.flemmli97.flan.event.PlayerEvents;
import io.github.flemmli97.flan.event.WorldEvents;
import io.github.flemmli97.flan.fabric.platform.integration.playerability.PlayerAbilityEvents;
import io.github.flemmli97.flan.platform.integration.dynmap.DynmapIntegration;
import io.github.flemmli97.flan.player.PlayerDataHandler;
import io.github.flemmli97.flan.scoreboard.ClaimCriterias;
import net.fabricmc.api.ModInitializer;
@ -60,6 +61,8 @@ public class FlanFabric implements ModInitializer {
Flan.octoEconomy = FabricLoader.getInstance().isModLoaded("octo-economy-api");
if (Flan.playerAbilityLib)
PlayerAbilityEvents.register();
if (FabricLoader.getInstance().isModLoaded("dynmap"))
DynmapIntegration.reg();
ClaimCriterias.init();
}

View File

@ -6,6 +6,7 @@ import io.github.flemmli97.flan.forge.forgeevent.EntityInteractEventsForge;
import io.github.flemmli97.flan.forge.forgeevent.ItemInteractEventsForge;
import io.github.flemmli97.flan.forge.forgeevent.ServerEvents;
import io.github.flemmli97.flan.forge.forgeevent.WorldEventsForge;
import io.github.flemmli97.flan.platform.integration.dynmap.DynmapIntegration;
import io.github.flemmli97.flan.scoreboard.ClaimCriterias;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.EventPriority;
@ -50,6 +51,9 @@ public class FlanForge {
forge.addListener(ServerEvents::disconnect);
forge.addListener(ServerEvents::serverTick);
if (ModList.get().isLoaded("dynmap"))
DynmapIntegration.reg();
ClaimCriterias.init();
}
}

View File

@ -11,7 +11,7 @@ forge_version=1.18.2-40.0.3
loader_version=0.13.2
# Mod Properties
mod_version=1.7.7
mod_version=1.7.8
maven_group=io.github.flemmli97
archives_base_name=flan
@ -24,6 +24,7 @@ fabric_permissions_api=0.1-SNAPSHOT
player_ability_lib=1.2.2
ftb_ranks=1801.1.6-build.20
dicemcmm=curse.maven:dicemcmoney-406972:3548047
dynmap_fabric=curse.maven:dynmap-59433:3724084
# Curse properties
curse_versions=1.18.2, Java 17