Skip to content

Commit f6c1980

Browse files
authored
Merge pull request #12 from FTBTeam/dev
Dev
2 parents 1b7cadf + 73e3109 commit f6c1980

File tree

19 files changed

+239
-17
lines changed

19 files changed

+239
-17
lines changed

CHANGELOG.md

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ 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+
## [2.0.3]
8+
9+
### Fixed
10+
* (Fabric) Fixed crash when Common Protection API is loaded and FTB Chunks is not loaded
11+
12+
## [2.0.2]
13+
14+
### Added
15+
* Basic KJS/FTB Teams integration; fire events when a player joins or leaves a team
16+
717
## [2.0.1]
818

919
### Added

common/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ dependencies {
1717
modApi("dev.ftb.mods:ftb-quests:${rootProject.ftb_quests_version}")
1818
modApi("dev.ftb.mods:ftb-chunks:${rootProject.ftb_chunks_version}")
1919
modApi("dev.ftb.mods:ftb-ranks:${rootProject.ftb_ranks_version}")
20+
modApi("dev.ftb.mods:ftb-essentials:${rootProject.ftb_essentials_version}")
21+
modApi("dev.ftb.mods:ftb-teams:${rootProject.ftb_teams_version}")
2022

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

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

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class FTBXModCompat {
1616
public static boolean isFTBQuestsLoaded;
1717
public static boolean isFTBChunksLoaded;
1818
public static boolean isFTBRanksLoaded;
19+
public static boolean isFTBEssentialsLoaded;
1920

2021
public static boolean isKubeJSLoaded;
2122
public static boolean isGameStagesLoaded;
@@ -42,6 +43,7 @@ private static void detectLoadedMods() {
4243
isFTBQuestsLoaded = Platform.isModLoaded("ftbquests");
4344
isFTBChunksLoaded = Platform.isModLoaded("ftbchunks");
4445
isFTBRanksLoaded = Platform.isModLoaded("ftbranks");
46+
isFTBEssentialsLoaded = Platform.isModLoaded("ftbessentials");
4547

4648
isKubeJSLoaded = Platform.isModLoaded("kubejs");
4749
isGameStagesLoaded = Platform.isModLoaded("gamestages");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package dev.ftb.mods.ftbxmodcompat.config;
2+
3+
import dev.ftb.mods.ftblibrary.config.NameMap;
4+
import dev.ftb.mods.ftblibrary.snbt.config.EnumValue;
5+
import dev.ftb.mods.ftblibrary.snbt.config.SNBTConfig;
6+
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;
7+
8+
import java.util.function.BooleanSupplier;
9+
10+
public interface FTBXModConfig {
11+
SNBTConfig CONFIG = SNBTConfig.create(FTBXModCompat.MOD_ID);
12+
13+
EnumValue<StageSelector> STAGE_SELECTOR = CONFIG.addEnum("stage_selector", NameMap.of(StageSelector.DEFAULT, StageSelector.values()).create())
14+
.comment("Select the game stages implementation to use", "DEFAULT: use KubeJS, Game Stages, vanilla in preference order, depending on mod availability");
15+
16+
EnumValue<PermSelector> PERMISSION_SELECTOR = CONFIG.addEnum("permission_selector", NameMap.of(PermSelector.DEFAULT, PermSelector.values()).create())
17+
.comment("Select the permissions implementation to use", "DEFAULT: use FTB Ranks then Luckperms in preference order, depending on mod availability");
18+
19+
enum StageSelector {
20+
DEFAULT(()-> true),
21+
VANILLA(() -> true),
22+
KUBEJS(() -> FTBXModCompat.isKubeJSLoaded),
23+
GAMESTAGES(() -> FTBXModCompat.isGameStagesLoaded);
24+
25+
private final BooleanSupplier usable;
26+
27+
StageSelector(BooleanSupplier usable) {
28+
this.usable = usable;
29+
}
30+
31+
public boolean isUsable() {
32+
return usable.getAsBoolean();
33+
}
34+
}
35+
36+
enum PermSelector {
37+
DEFAULT(()-> true),
38+
FTB_RANKS(() -> FTBXModCompat.isFTBRanksLoaded),
39+
LUCKPERMS(() -> FTBXModCompat.isLuckPermsLoaded);
40+
41+
private final BooleanSupplier usable;
42+
43+
PermSelector(BooleanSupplier usable) {
44+
this.usable = usable;
45+
}
46+
47+
public boolean isUsable() {
48+
return usable.getAsBoolean();
49+
}
50+
}
51+
}

common/src/main/java/dev/ftb/mods/ftbxmodcompat/ftbchunks/FTBChunksSetup.java

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.ftb.mods.ftbxmodcompat.ftbchunks;
22

33
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;
4+
import dev.ftb.mods.ftbxmodcompat.ftbchunks.ftbessentials.EssentialsCompat;
45
import dev.ftb.mods.ftbxmodcompat.ftbchunks.ftbranks.FTBRanksEventHandler;
56
import dev.ftb.mods.ftbxmodcompat.ftbchunks.waystones.WaystonesCommon;
67

@@ -12,5 +13,8 @@ public static void init() {
1213
if (FTBXModCompat.isWaystonesLoaded) {
1314
WaystonesCommon.init();
1415
}
16+
if (FTBXModCompat.isFTBEssentialsLoaded) {
17+
EssentialsCompat.init();
18+
}
1519
}
1620
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbchunks.ftbessentials;
2+
3+
import dev.architectury.event.EventResult;
4+
import dev.ftb.mods.ftbchunks.api.ClaimedChunk;
5+
import dev.ftb.mods.ftbchunks.api.FTBChunksAPI;
6+
import dev.ftb.mods.ftbessentials.FTBEssentialsEvents;
7+
import dev.ftb.mods.ftblibrary.math.ChunkDimPos;
8+
import net.minecraft.core.BlockPos;
9+
import net.minecraft.server.level.ServerLevel;
10+
import net.minecraft.server.level.ServerPlayer;
11+
12+
public class EssentialsCompat {
13+
public static void init() {
14+
FTBEssentialsEvents.RTP_EVENT.register(EssentialsCompat::onRTP);
15+
}
16+
17+
private static EventResult onRTP(ServerLevel serverLevel, ServerPlayer player, BlockPos pos, int attempt) {
18+
// prevent RTP from sending players into claimed chunks owned by someone else
19+
ClaimedChunk cc = FTBChunksAPI.api().getManager().getChunk(new ChunkDimPos(serverLevel, pos));
20+
if (cc != null && !cc.getTeamData().isTeamMember(player.getUUID())) {
21+
return EventResult.interruptFalse();
22+
}
23+
return EventResult.pass();
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbteams.kubejs;
2+
3+
import dev.latvian.mods.kubejs.event.EventGroup;
4+
import dev.latvian.mods.kubejs.event.EventHandler;
5+
6+
public interface FTBTeamsKubeJSEvents {
7+
EventGroup EVENT_GROUP = EventGroup.of("FTBTeamsEvents");
8+
9+
EventHandler PLAYER_JOINED_PARTY = EVENT_GROUP.server("playerJoinedParty", () -> PlayerTeamEventJS.class);
10+
EventHandler PLAYER_LEFT_PARTY = EVENT_GROUP.server("playerLeftParty", () -> PlayerTeamEventJS.class);
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbteams.kubejs;
2+
3+
import dev.ftb.mods.ftbteams.api.event.PlayerJoinedPartyTeamEvent;
4+
import dev.ftb.mods.ftbteams.api.event.PlayerLeftPartyTeamEvent;
5+
import dev.ftb.mods.ftbteams.api.event.TeamEvent;
6+
import dev.latvian.mods.kubejs.KubeJSPlugin;
7+
import dev.latvian.mods.kubejs.script.ScriptType;
8+
9+
public class FTBTeamsKubeJSPlugin extends KubeJSPlugin {
10+
@Override
11+
public void init() {
12+
TeamEvent.PLAYER_JOINED_PARTY.register(FTBTeamsKubeJSPlugin::onPlayerJoinedParty);
13+
TeamEvent.PLAYER_LEFT_PARTY.register(FTBTeamsKubeJSPlugin::onPlayerLeftParty);
14+
}
15+
16+
@Override
17+
public void registerEvents() {
18+
FTBTeamsKubeJSEvents.EVENT_GROUP.register();
19+
}
20+
21+
private static void onPlayerJoinedParty(PlayerJoinedPartyTeamEvent event) {
22+
FTBTeamsKubeJSEvents.PLAYER_JOINED_PARTY.post(ScriptType.SERVER, new PlayerTeamEventJS(event.getPlayer(), event.getTeam(), event.getPreviousTeam()));
23+
}
24+
25+
private static void onPlayerLeftParty(PlayerLeftPartyTeamEvent event) {
26+
FTBTeamsKubeJSEvents.PLAYER_LEFT_PARTY.post(ScriptType.SERVER, new PlayerTeamEventJS(event.getPlayer(), event.getPlayerTeam(), event.getTeam()));
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbteams.kubejs;
2+
3+
import dev.ftb.mods.ftbteams.api.Team;
4+
5+
import java.util.UUID;
6+
7+
public class KJSTeamWrapper {
8+
private final Team team;
9+
10+
public KJSTeamWrapper(Team team) {
11+
this.team = team;
12+
}
13+
14+
public UUID getId() {
15+
return team.getId();
16+
}
17+
18+
public String getName() {
19+
return team.getShortName();
20+
}
21+
22+
public boolean isPartyTeam() {
23+
return team.isPartyTeam();
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package dev.ftb.mods.ftbxmodcompat.ftbteams.kubejs;
2+
3+
import dev.ftb.mods.ftbteams.api.Team;
4+
import dev.latvian.mods.kubejs.player.PlayerEventJS;
5+
import net.minecraft.server.level.ServerPlayer;
6+
import net.minecraft.world.entity.player.Player;
7+
8+
public class PlayerTeamEventJS extends PlayerEventJS {
9+
private final ServerPlayer player;
10+
private final Team currentTeam;
11+
private final Team prevTeam;
12+
13+
public PlayerTeamEventJS(ServerPlayer player, Team currentTeam, Team prevTeam) {
14+
this.player = player;
15+
this.currentTeam = currentTeam;
16+
this.prevTeam = prevTeam;
17+
}
18+
19+
@Override
20+
public Player getEntity() {
21+
return player;
22+
}
23+
24+
public KJSTeamWrapper getCurrentTeam() {
25+
return new KJSTeamWrapper(currentTeam);
26+
}
27+
28+
public KJSTeamWrapper getPrevTeam() {
29+
return new KJSTeamWrapper(prevTeam);
30+
}
31+
}

common/src/main/java/dev/ftb/mods/ftbxmodcompat/generic/gamestages/KubeJSStageProvider.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
package dev.ftb.mods.ftbxmodcompat.generic.gamestages;
22

33
import dev.ftb.mods.ftblibrary.integration.stages.StageProvider;
4+
import dev.latvian.mods.kubejs.stages.Stages;
45
import net.minecraft.server.level.ServerPlayer;
56
import net.minecraft.world.entity.player.Player;
67

78
public class KubeJSStageProvider implements StageProvider {
89
@Override
910
public boolean has(Player player, String stage) {
10-
return false;
11-
// return Stages.get(player).has(stage);
11+
return Stages.get(player).has(stage);
1212
}
1313

1414
@Override
1515
public void add(ServerPlayer player, String stage) {
16-
// Stages.get(player).add(stage);
16+
Stages.get(player).add(stage);
1717
}
1818

1919
@Override
2020
public void remove(ServerPlayer player, String stage) {
21-
// Stages.get(player).remove(stage);
21+
Stages.get(player).remove(stage);
2222
}
2323

2424
@Override
2525
public void sync(ServerPlayer player) {
26-
// Stages.get(player).sync();
26+
Stages.get(player).sync();
2727
}
2828

2929
@Override

common/src/main/java/dev/ftb/mods/ftbxmodcompat/generic/gamestages/StagesSetup.java

+20-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,30 @@
22

33
import dev.ftb.mods.ftblibrary.integration.stages.StageHelper;
44
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;
5+
import dev.ftb.mods.ftbxmodcompat.config.FTBXModConfig;
6+
import dev.ftb.mods.ftbxmodcompat.config.FTBXModConfig.StageSelector;
57

68
public class StagesSetup {
79
public static void init() {
8-
if (FTBXModCompat.isKubeJSLoaded) {
9-
StageHelper.getInstance().setProviderImpl(new KubeJSStageProvider());
10-
} else if (FTBXModCompat.isGameStagesLoaded) {
11-
StageHelper.getInstance().setProviderImpl(new GameStagesStageProvider());
10+
StageSelector sel = FTBXModConfig.STAGE_SELECTOR.get();
11+
if (sel != StageSelector.DEFAULT && !sel.isUsable()) {
12+
FTBXModCompat.LOGGER.error("Stages implementation {} isn't available, falling back to default", sel);
13+
sel = StageSelector.DEFAULT;
1214
}
15+
16+
switch (sel) {
17+
case KUBEJS -> StageHelper.getInstance().setProviderImpl(new KubeJSStageProvider());
18+
case GAMESTAGES -> StageHelper.getInstance().setProviderImpl(new GameStagesStageProvider());
19+
case VANILLA -> { /* do nothing, this is the fallback */ }
20+
case DEFAULT -> {
21+
if (FTBXModCompat.isKubeJSLoaded) {
22+
StageHelper.getInstance().setProviderImpl(new KubeJSStageProvider());
23+
} else if (FTBXModCompat.isGameStagesLoaded) {
24+
StageHelper.getInstance().setProviderImpl(new GameStagesStageProvider());
25+
}
26+
}
27+
}
28+
1329
FTBXModCompat.LOGGER.info("Chose [{}] as the active game stages implementation", StageHelper.getInstance().getProvider().getName());
1430
}
1531
}

common/src/main/java/dev/ftb/mods/ftbxmodcompat/generic/permissions/PermissionsSetup.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,24 @@
22

33
import dev.ftb.mods.ftblibrary.integration.permissions.PermissionHelper;
44
import dev.ftb.mods.ftbxmodcompat.FTBXModCompat;
5+
import dev.ftb.mods.ftbxmodcompat.config.FTBXModConfig;
6+
import dev.ftb.mods.ftbxmodcompat.config.FTBXModConfig.PermSelector;
57

68
public class PermissionsSetup {
79
public static void init() {
10+
PermSelector sel = FTBXModConfig.PERMISSION_SELECTOR.get();
11+
if (sel != PermSelector.DEFAULT && !sel.isUsable()) {
12+
FTBXModCompat.LOGGER.error("Permissions implementation {} isn't available, falling back to default", sel);
13+
sel = PermSelector.DEFAULT;
14+
}
15+
816
PermissionHelper pHelper = PermissionHelper.INSTANCE;
9-
if (FTBXModCompat.isFTBRanksLoaded) {
10-
pHelper.setProviderImpl(new FTBRanksProvider());
11-
} else if (FTBXModCompat.isLuckPermsLoaded) {
12-
pHelper.setProviderImpl(new LuckPermsProvider());
17+
switch (sel) {
18+
case LUCKPERMS -> pHelper.setProviderImpl(new LuckPermsProvider());
19+
case FTB_RANKS -> pHelper.setProviderImpl(new FTBRanksProvider());
20+
case DEFAULT -> { /* do nothing, this is the fallback */ }
1321
}
22+
1423
FTBXModCompat.LOGGER.info("Chose [{}] as the active permissions implementation", pHelper.getProvider().getName());
1524
}
1625
}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
+dev.ftb.mods.ftbquests
2-
+dev.ftb.mods.ftbchunks
2+
+dev.ftb.mods.ftbchunks
3+
+dev.ftb.mods.ftbteams
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
dev.ftb.mods.ftbxmodcompat.ftbquests.kubejs.KubeJSIntegration ftbquests
2-
dev.ftb.mods.ftbxmodcompat.ftbchunks.kubejs.FTBChunksKubeJSPlugin ftbchunks
2+
dev.ftb.mods.ftbxmodcompat.ftbchunks.kubejs.FTBChunksKubeJSPlugin ftbchunks
3+
dev.ftb.mods.ftbxmodcompat.ftbteams.kubejs.FTBTeamsKubeJSPlugin ftbteams

fabric/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ dependencies {
4141
modApi("dev.ftb.mods:ftb-quests-fabric:${rootProject.ftb_quests_version}")
4242
modApi("dev.ftb.mods:ftb-chunks-fabric:${rootProject.ftb_chunks_version}")
4343
modApi("dev.ftb.mods:ftb-ranks-fabric:${rootProject.ftb_ranks_version}")
44+
modApi("dev.ftb.mods:ftb-essentials-fabric:${rootProject.ftb_essentials_version}")
45+
modApi("dev.ftb.mods:ftb-teams-fabric:${rootProject.ftb_teams_version}")
4446

4547
modCompileOnly("eu.pb4:common-protection-api:${common_prot_api_version}") { transitive = false }
4648

fabric/src/main/java/dev/ftb/mods/ftbxmodcompat/fabric/FTBXModCompatFabric.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public void onInitialize() {
1414
WaystonesCompat.init();
1515
}
1616

17-
if (FTBXModCompat.isCommonProtLoaded) {
17+
if (FTBXModCompat.isFTBChunksLoaded && FTBXModCompat.isCommonProtLoaded) {
1818
FTBChunksProtectionProvider.init();
1919
}
2020
}

forge/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ dependencies {
3636
modApi("dev.ftb.mods:ftb-quests-forge:${rootProject.ftb_quests_version}")
3737
modApi("dev.ftb.mods:ftb-chunks-forge:${rootProject.ftb_chunks_version}")
3838
modApi("dev.ftb.mods:ftb-ranks-forge:${rootProject.ftb_ranks_version}")
39+
modApi("dev.ftb.mods:ftb-essentials-forge:${rootProject.ftb_essentials_version}")
40+
modApi("dev.ftb.mods:ftb-teams-forge:${rootProject.ftb_teams_version}")
3941

4042
modCompileOnlyApi("me.shedaniel:RoughlyEnoughItems-forge:${rootProject.rei_version}")
4143
modCompileOnlyApi("net.darkhax.gamestages:GameStages-Forge-${rootProject.minecraft_version}:${rootProject.gamestages_version}") { transitive false }

gradle.properties

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ minecraft_version=1.20.1
44
enabled_platforms=fabric,forge
55

66
archives_base_name=ftb-xmod-compat
7-
mod_version=2.0.1
7+
mod_version=2.0.3
88
maven_group=dev.ftb.mods
99
curseforge_id=889915
1010

@@ -19,6 +19,8 @@ ftb_library_version=2001.1.3
1919
ftb_quests_version=2001.1.3
2020
ftb_chunks_version=2001.2.0
2121
ftb_ranks_version=2001.1.3
22+
ftb_essentials_version=2001.2.0
23+
ftb_teams_version=2001.1.4
2224

2325
kubejs_version=2001.6.3-build.18
2426
gamestages_version=15.0.1

0 commit comments

Comments
 (0)