Skip to content

Commit 53ca271

Browse files
authored
Merge pull request #5 from FTBTeam/dev
Dev
2 parents 5bd8730 + d469548 commit 53ca271

File tree

32 files changed

+745
-12
lines changed

32 files changed

+745
-12
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [1.2.0]
8+
9+
### Added
10+
* Now handles cross-mod compat for FTB Chunks
11+
* FTB Chunks 1902.4.0 or later required; all cross-mod compat has been moved from FTB Chunks to FTB XMod Compat
12+
* Mod support: KubeJS (6.1), Game Stages (Forge only), Waystone (Forge/Fabric), Common Protection API (Fabric only)
13+
714
## [1.1.2]
815

916
### Fixed

build.gradle

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,6 @@ allprojects {
4242
url "https://maven.architectury.dev/"
4343
}
4444

45-
maven {
46-
url "https://maven.blamejared.com/"
47-
}
48-
4945
maven {
5046
url "https://maven.saps.dev/minecraft"
5147
content {
@@ -57,9 +53,17 @@ allprojects {
5753
maven {
5854
url "https://maven.blamejared.com"
5955
content {
56+
includeGroup "mezz.jei"
6057
includeGroup "net.darkhax.gamestages"
6158
}
6259
}
60+
61+
maven {
62+
url "https://www.cursemaven.com"
63+
content {
64+
includeGroup "curse.maven"
65+
}
66+
}
6367
}
6468

6569
tasks.withType(JavaCompile) {

common/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ dependencies {
1515

1616
modApi("dev.ftb.mods:ftb-library:${rootProject.ftb_library_version}") { transitive false }
1717
modApi("dev.ftb.mods:ftb-quests:${rootProject.ftb_quests_version}")
18+
modApi("dev.ftb.mods:ftb-chunks:${rootProject.ftb_chunks_version}")
19+
modApi("dev.ftb.mods:ftb-ranks:${rootProject.ftb_ranks_version}")
1820

1921
modCompileOnly("me.shedaniel:RoughlyEnoughItems-api:${rootProject.rei_version}")
2022
modCompileOnly("mezz.jei:jei-${rootProject.minecraft_version}-common-api:${rootProject.jei_version}")
2123

24+
compileOnly("net.luckperms:api:${rootProject.luckperms_api_version}")
25+
2226
modImplementation "dev.latvian.mods:kubejs:${rootProject.kubejs_version}"
2327
}
2428

common/src/main/java/dev/ftb/mods/ftbxmodcompat/FTBXModCompat.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package dev.ftb.mods.ftbxmodcompat;
22

33
import dev.architectury.platform.Platform;
4+
import dev.ftb.mods.ftbxmodcompat.ftbchunks.FTBChunksSetup;
45
import dev.ftb.mods.ftbxmodcompat.ftbquests.FTBQuestsSetup;
56
import dev.ftb.mods.ftbxmodcompat.generic.gamestages.StagesSetup;
7+
import dev.ftb.mods.ftbxmodcompat.generic.permissions.PermissionsSetup;
68
import org.apache.logging.log4j.LogManager;
79
import org.apache.logging.log4j.Logger;
810

@@ -12,27 +14,41 @@ public class FTBXModCompat {
1214
public static final Logger LOGGER = LogManager.getLogger("FTB XMod Compat");
1315

1416
public static boolean isFTBQuestsLoaded;
17+
public static boolean isFTBChunksLoaded;
18+
public static boolean isFTBRanksLoaded;
1519

1620
public static boolean isKubeJSLoaded;
1721
public static boolean isGameStagesLoaded;
1822
public static boolean isREILoaded;
1923
public static boolean isJEILoaded;
24+
public static boolean isLuckPermsLoaded;
25+
public static boolean isWaystonesLoaded;
26+
public static boolean isCommonProtLoaded;
2027

2128
public static void init() {
2229
detectLoadedMods();
2330

2431
StagesSetup.init();
32+
PermissionsSetup.init();
2533
if (isFTBQuestsLoaded) {
2634
FTBQuestsSetup.init();
2735
}
36+
if (isFTBChunksLoaded) {
37+
FTBChunksSetup.init();
38+
}
2839
}
2940

3041
private static void detectLoadedMods() {
3142
isFTBQuestsLoaded = Platform.isModLoaded("ftbquests");
43+
isFTBChunksLoaded = Platform.isModLoaded("ftbchunks");
44+
isFTBRanksLoaded = Platform.isModLoaded("ftbranks");
3245

3346
isKubeJSLoaded = Platform.isModLoaded("kubejs");
3447
isGameStagesLoaded = Platform.isModLoaded("gamestages");
3548
isREILoaded = Platform.isModLoaded("roughlyenoughitems");
3649
isJEILoaded = Platform.isModLoaded("jei");
50+
isLuckPermsLoaded = Platform.isModLoaded("luckperms");
51+
isWaystonesLoaded = Platform.isModLoaded("waystones");
52+
isCommonProtLoaded = Platform.isModLoaded("common-protection-api");
3753
}
3854
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbchunks;
2+
3+
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;
4+
import dev.ftb.mods.ftbxmodcompat.ftbchunks.ftbranks.FTBRanksEventHandler;
5+
import dev.ftb.mods.ftbxmodcompat.ftbchunks.waystones.WaystonesCommon;
6+
7+
public class FTBChunksSetup {
8+
public static void init() {
9+
if (FTBXModCompat.isFTBRanksLoaded) {
10+
FTBRanksEventHandler.registerEvents();
11+
}
12+
if (FTBXModCompat.isWaystonesLoaded) {
13+
WaystonesCommon.init();
14+
}
15+
}
16+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbchunks.ftbranks;
2+
3+
import com.mojang.authlib.GameProfile;
4+
import dev.ftb.mods.ftbchunks.data.FTBChunksAPI;
5+
import dev.ftb.mods.ftbchunks.data.FTBChunksTeamData;
6+
import dev.ftb.mods.ftbchunks.integration.PermissionsHelper;
7+
import dev.ftb.mods.ftbranks.api.RankManager;
8+
import dev.ftb.mods.ftbranks.api.event.*;
9+
import dev.ftb.mods.ftbteams.FTBTeamsAPI;
10+
import dev.ftb.mods.ftbteams.data.Team;
11+
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;
12+
import net.minecraft.server.level.ServerPlayer;
13+
14+
import static dev.ftb.mods.ftbchunks.integration.PermissionsHelper.*;
15+
16+
public class FTBRanksEventHandler {
17+
public static void registerEvents() {
18+
RankEvent.ADD_PLAYER.register(FTBRanksEventHandler::playerAdded);
19+
RankEvent.REMOVE_PLAYER.register(FTBRanksEventHandler::playerRemoved);
20+
RankEvent.PERMISSION_CHANGED.register(FTBRanksEventHandler::permissionSet);
21+
RankEvent.RELOADED.register(FTBRanksEventHandler::ranksReloaded);
22+
RankEvent.CONDITION_CHANGED.register(FTBRanksEventHandler::conditionChanged);
23+
24+
FTBXModCompat.LOGGER.info("[FTB Chunks] FTB Ranks detected, listening for ranks events");
25+
}
26+
27+
private static void playerAdded(PlayerAddedToRankEvent event) {
28+
updateForPlayer(event.getManager(), event.getPlayer());
29+
}
30+
31+
private static void playerRemoved(PlayerRemovedFromRankEvent event) {
32+
updateForPlayer(event.getManager(), event.getPlayer());
33+
}
34+
35+
private static void permissionSet(PermissionNodeChangedEvent event) {
36+
String node = event.getNode();
37+
if (node.equals(MAX_CLAIMED_PERM) || node.equals(MAX_FORCE_LOADED_PERM) || node.equals(CHUNK_LOAD_OFFLINE_PERM)) {
38+
updateAll(event.getManager());
39+
}
40+
}
41+
42+
private static void ranksReloaded(RanksReloadedEvent event) {
43+
updateAll(event.getManager());
44+
}
45+
46+
private static void conditionChanged(ConditionChangedEvent event) {
47+
updateAll(event.getManager());
48+
}
49+
50+
private static void updateAll(RankManager manager) {
51+
if (FTBChunksAPI.isManagerLoaded()) {
52+
manager.getServer().getPlayerList().getPlayers().forEach(player -> {
53+
FTBChunksTeamData data = FTBChunksAPI.getManager().getData(player);
54+
data.setForceLoadMember(player.getUUID(), PermissionsHelper.getChunkLoadOffline(player, false));
55+
});
56+
FTBTeamsAPI.getManager().getTeams().forEach(team -> FTBChunksAPI.getManager().getData(team).updateLimits());
57+
}
58+
}
59+
60+
private static void updateForPlayer(RankManager manager, GameProfile profile) {
61+
Team team = FTBTeamsAPI.getPlayerTeam(profile.getId());
62+
if (team != null) {
63+
FTBChunksTeamData teamData = FTBChunksAPI.getManager().getData(team);
64+
ServerPlayer player = manager.getServer().getPlayerList().getPlayer(profile.getId());
65+
if (player != null) {
66+
teamData.setForceLoadMember(player.getUUID(), PermissionsHelper.getChunkLoadOffline(player, false));
67+
}
68+
teamData.updateLimits();
69+
}
70+
}
71+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbchunks.kubejs;
2+
3+
import dev.ftb.mods.ftbchunks.data.ClaimedChunk;
4+
import dev.latvian.mods.kubejs.entity.EntityEventJS;
5+
import net.minecraft.commands.CommandSourceStack;
6+
import net.minecraft.core.BlockPos;
7+
import net.minecraft.server.level.ServerPlayer;
8+
import net.minecraft.world.entity.Entity;
9+
import net.minecraft.world.level.Level;
10+
import org.jetbrains.annotations.Nullable;
11+
12+
public class AfterEventJS extends EntityEventJS {
13+
public final CommandSourceStack source;
14+
public final ClaimedChunk chunk;
15+
16+
public AfterEventJS(CommandSourceStack s, ClaimedChunk c) {
17+
source = s;
18+
chunk = c;
19+
}
20+
21+
@Override
22+
public Level getLevel() {
23+
return source.getLevel();
24+
}
25+
26+
@Override
27+
@Nullable
28+
public Entity getEntity() {
29+
return source.getEntity();
30+
}
31+
32+
@Nullable
33+
public ServerPlayer getPlayer() {
34+
return source.getEntity() instanceof ServerPlayer sp ? sp : null;
35+
}
36+
37+
public BlockPos getClaimPos() {
38+
return chunk.pos.getChunkPos().getWorldPosition();
39+
}
40+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbchunks.kubejs;
2+
3+
import dev.ftb.mods.ftbchunks.data.ClaimResult;
4+
import dev.ftb.mods.ftbchunks.data.ClaimedChunk;
5+
import dev.latvian.mods.kubejs.event.EventExit;
6+
import net.minecraft.commands.CommandSourceStack;
7+
8+
public class BeforeEventJS extends AfterEventJS {
9+
private ClaimResult result;
10+
11+
public BeforeEventJS(CommandSourceStack source, ClaimedChunk chunk) {
12+
super(source, chunk);
13+
result = chunk;
14+
}
15+
16+
public ClaimResult getResult() {
17+
return result;
18+
}
19+
20+
public void setResult(ClaimResult r) throws EventExit {
21+
result = r;
22+
cancel(result);
23+
}
24+
25+
public void setCustomResult(String messageKey) throws EventExit {
26+
result = new ClaimResult() {
27+
@Override
28+
public String claimResultName() {
29+
return messageKey;
30+
}
31+
32+
@Override
33+
public String getTranslationKey() {
34+
return messageKey;
35+
}
36+
};
37+
cancel(result);
38+
}
39+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbchunks.kubejs;
2+
3+
import dev.latvian.mods.kubejs.event.EventGroup;
4+
import dev.latvian.mods.kubejs.event.EventHandler;
5+
import dev.latvian.mods.kubejs.event.Extra;
6+
7+
public interface FTBChunksKubeJSEvents {
8+
EventGroup EVENT_GROUP = EventGroup.of("FTBChunksEvents");
9+
10+
EventHandler BEFORE = EVENT_GROUP.server("before", () -> BeforeEventJS.class).extra(Extra.REQUIRES_STRING).hasResult();
11+
EventHandler AFTER = EVENT_GROUP.server("after", () -> AfterEventJS.class).extra(Extra.REQUIRES_STRING);
12+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbchunks.kubejs;
2+
3+
import dev.architectury.event.CompoundEventResult;
4+
import dev.ftb.mods.ftbchunks.data.ClaimResult;
5+
import dev.ftb.mods.ftbchunks.data.ClaimResults;
6+
import dev.ftb.mods.ftbchunks.data.ClaimedChunk;
7+
import dev.ftb.mods.ftbchunks.event.ClaimedChunkEvent;
8+
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;
9+
import dev.ftb.mods.ftbxmodcompat.ftbquests.kubejs.CustomTaskEventJS;
10+
import dev.ftb.mods.ftbxmodcompat.ftbquests.kubejs.FTBQuestsKubeJSEvents;
11+
import dev.latvian.mods.kubejs.KubeJSPlugin;
12+
import dev.latvian.mods.kubejs.script.ScriptType;
13+
import dev.latvian.mods.rhino.util.wrap.TypeWrappers;
14+
import net.minecraft.commands.CommandSourceStack;
15+
16+
public class FTBChunksKubeJSPlugin extends KubeJSPlugin {
17+
@Override
18+
public void init() {
19+
ClaimedChunkEvent.BEFORE_CLAIM.register((source, chunk) -> before(source, chunk, "claim"));
20+
ClaimedChunkEvent.BEFORE_LOAD.register((source, chunk) -> before(source, chunk, "load"));
21+
ClaimedChunkEvent.BEFORE_UNCLAIM.register((source, chunk) -> before(source, chunk, "unclaim"));
22+
ClaimedChunkEvent.BEFORE_UNLOAD.register((source, chunk) -> before(source, chunk, "unload"));
23+
ClaimedChunkEvent.AFTER_CLAIM.register((source, chunk) -> after(source, chunk, "claim"));
24+
ClaimedChunkEvent.AFTER_LOAD.register((source, chunk) -> after(source, chunk, "load"));
25+
ClaimedChunkEvent.AFTER_UNCLAIM.register((source, chunk) -> after(source, chunk, "unclaim"));
26+
ClaimedChunkEvent.AFTER_UNLOAD.register((source, chunk) -> after(source, chunk, "unload"));
27+
28+
FTBXModCompat.LOGGER.info("[FTB Chunks] Enabled KubeJS integration");
29+
}
30+
31+
@Override
32+
public void registerEvents() {
33+
FTBChunksKubeJSEvents.EVENT_GROUP.register();
34+
}
35+
36+
@Override
37+
public void registerTypeWrappers(ScriptType type, TypeWrappers typeWrappers) {
38+
typeWrappers.register(ClaimResult.class, (ctx, o) -> ClaimResults.valueOf(o.toString().toUpperCase()));
39+
}
40+
41+
private CompoundEventResult<ClaimResult> before(CommandSourceStack source, ClaimedChunk chunk, String id) {
42+
return FTBChunksKubeJSEvents.BEFORE.post(ScriptType.SERVER, new BeforeEventJS(source, chunk)).archCompound();
43+
}
44+
45+
private void after(CommandSourceStack source, ClaimedChunk chunk, String id) {
46+
FTBChunksKubeJSEvents.AFTER.post(ScriptType.SERVER, id, new AfterEventJS(source, chunk));
47+
}
48+
}

0 commit comments

Comments
 (0)