[FEAT] APIs for Player Revive mod and Whitelist changes
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
package com.hypherionmc.craterlib.api.events.compat;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor(staticName = "of")
|
||||
@Getter
|
||||
public class PlayerBleedOutEvent extends CraterEvent {
|
||||
private final BridgedPlayer player;
|
||||
}
|
@@ -0,0 +1,12 @@
|
||||
package com.hypherionmc.craterlib.api.events.compat;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor(staticName = "of")
|
||||
@Getter
|
||||
public class PlayerRevivedEvent extends CraterEvent {
|
||||
private final BridgedPlayer player;
|
||||
}
|
@@ -0,0 +1,26 @@
|
||||
package com.hypherionmc.craterlib.api.events.server;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEvent;
|
||||
import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
public class WhitelistChangedEvent {
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
public static final class EntryAdded extends CraterEvent {
|
||||
|
||||
private final BridgedGameProfile profile;
|
||||
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
public static final class EntryRemoved extends CraterEvent {
|
||||
|
||||
private final BridgedGameProfile profile;
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -9,5 +9,8 @@ public interface CompatUtils {
|
||||
|
||||
boolean isPlayerActive(BridgedPlayer player);
|
||||
String getSkinUUID(BridgedPlayer player);
|
||||
boolean isPlayerBleeding(BridgedPlayer player);
|
||||
boolean playerBledOut(BridgedPlayer player);
|
||||
boolean playerRevived(BridgedPlayer player);
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,14 @@
|
||||
package com.hypherionmc.craterlib.mixin.events;
|
||||
|
||||
import net.minecraft.server.players.StoredUserEntry;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(StoredUserEntry.class)
|
||||
public interface StoredUserEntryAccessor<T> {
|
||||
|
||||
@Accessor("user")
|
||||
@Nullable T getUser();
|
||||
|
||||
}
|
@@ -0,0 +1,46 @@
|
||||
package com.hypherionmc.craterlib.mixin.events;
|
||||
|
||||
import com.hypherionmc.craterlib.api.events.server.WhitelistChangedEvent;
|
||||
import com.hypherionmc.craterlib.core.event.CraterEventBus;
|
||||
import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import net.minecraft.server.players.StoredUserEntry;
|
||||
import net.minecraft.server.players.StoredUserList;
|
||||
import net.minecraft.server.players.UserWhiteListEntry;
|
||||
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;
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
@Mixin(StoredUserList.class)
|
||||
public abstract class WhitelistMixin<K, V extends StoredUserEntry<K>> {
|
||||
|
||||
@Shadow protected abstract boolean contains(K k0);
|
||||
|
||||
@Inject(method = "add", at = @At("HEAD"))
|
||||
private void injectAddEvent(V arg, CallbackInfo ci) {
|
||||
try {
|
||||
if (arg instanceof UserWhiteListEntry entry) {
|
||||
StoredUserEntryAccessor entryAccessor = (StoredUserEntryAccessor) entry;
|
||||
if (entryAccessor.getUser() != null && !contains((K) entryAccessor.getUser())) {
|
||||
CraterEventBus.INSTANCE.postEvent(new WhitelistChangedEvent.EntryAdded(BridgedGameProfile.of((GameProfile) entryAccessor.getUser())));
|
||||
}
|
||||
}
|
||||
} catch (Exception ignored) {}
|
||||
}
|
||||
|
||||
@Inject(method = "remove(Lnet/minecraft/server/players/StoredUserEntry;)V", at = @At("HEAD"))
|
||||
private void injectRemoveEvent(V arg, CallbackInfo ci) {
|
||||
try {
|
||||
if (arg instanceof UserWhiteListEntry entry) {
|
||||
StoredUserEntryAccessor entryAccessor = (StoredUserEntryAccessor) entry;
|
||||
if (entryAccessor.getUser() != null && contains((K) entryAccessor.getUser())) {
|
||||
CraterEventBus.INSTANCE.postEvent(new WhitelistChangedEvent.EntryRemoved(BridgedGameProfile.of((GameProfile) entryAccessor.getUser())));
|
||||
}
|
||||
}
|
||||
} catch (Exception ignored) {}
|
||||
}
|
||||
|
||||
}
|
@@ -4,6 +4,8 @@
|
||||
"package": "com.hypherionmc.craterlib.mixin",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"mixins": [
|
||||
"events.StoredUserEntryAccessor",
|
||||
"events.WhitelistMixin"
|
||||
],
|
||||
"client": [
|
||||
"ChatInputSuggestorMixin",
|
||||
|
@@ -20,4 +20,19 @@ public class FabricCompatHelper implements CompatUtils {
|
||||
public String getSkinUUID(BridgedPlayer player) {
|
||||
return FabricTailor.getTailorSkin(player.toMojangServerPlayer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerBleeding(BridgedPlayer player) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean playerBledOut(BridgedPlayer player) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean playerRevived(BridgedPlayer player) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@@ -6,6 +6,8 @@ dependencies {
|
||||
// NOT AVAILABLE ON FORGE modImplementation("maven.modrinth:vanishmod:${vanishmod}")
|
||||
|
||||
modImplementation("me.shedaniel.cloth:cloth-config-forge:${cloth_config}")
|
||||
modImplementation("unimaven.curseforge:playerrevive-266890:${player_revive}")
|
||||
modImplementation("unimaven.curseforge:creativecore-257814:${creative_core}")
|
||||
|
||||
// Do not edit or remove
|
||||
implementation project(":Common")
|
||||
|
@@ -2,6 +2,8 @@ package com.hypherionmc.craterlib.common;
|
||||
|
||||
import com.hypherionmc.craterlib.core.platform.CompatUtils;
|
||||
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
|
||||
import team.creative.playerrevive.api.IBleeding;
|
||||
import team.creative.playerrevive.server.PlayerReviveServer;
|
||||
|
||||
public class ForgeCompatHelper implements CompatUtils {
|
||||
|
||||
@@ -14,4 +16,30 @@ public class ForgeCompatHelper implements CompatUtils {
|
||||
public String getSkinUUID(BridgedPlayer player) {
|
||||
return player.getStringUUID();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerBleeding(BridgedPlayer player) {
|
||||
if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
return false;
|
||||
|
||||
return PlayerReviveServer.isBleeding(player.toMojangServerPlayer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean playerBledOut(BridgedPlayer player) {
|
||||
if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
return false;
|
||||
|
||||
IBleeding bleeding = PlayerReviveServer.getBleeding(player.toMojangServerPlayer());
|
||||
return bleeding != null && bleeding.bledOut();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean playerRevived(BridgedPlayer player) {
|
||||
if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
return false;
|
||||
|
||||
IBleeding bleeding = PlayerReviveServer.getBleeding(player.toMojangServerPlayer());
|
||||
return bleeding != null && bleeding.revived();
|
||||
}
|
||||
}
|
||||
|
@@ -8,6 +8,8 @@ dependencies {
|
||||
stupidRemapArch("dev.ftb.mods:ftb-ranks-neoforge:${ftb_ranks}")
|
||||
|
||||
modImplementation("me.shedaniel.cloth:cloth-config-neoforge:${cloth_config}")
|
||||
modImplementation("unimaven.curseforge:playerrevive-266890:${player_revive}")
|
||||
modImplementation("unimaven.curseforge:creativecore-257814:${creative_core}")
|
||||
|
||||
// Do not edit or remove
|
||||
implementation project(":Common")
|
||||
|
@@ -2,6 +2,7 @@ package com.hypherionmc.craterlib;
|
||||
|
||||
import com.hypherionmc.craterlib.client.NeoForgeClientHelper;
|
||||
import com.hypherionmc.craterlib.common.NeoForgeServerEvents;
|
||||
import com.hypherionmc.craterlib.compat.PlayerReviveEvents;
|
||||
import com.hypherionmc.craterlib.compat.Vanish;
|
||||
import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork;
|
||||
import com.hypherionmc.craterlib.core.networking.PacketRegistry;
|
||||
@@ -29,6 +30,10 @@ public class CraterLib {
|
||||
if (ModloaderEnvironment.INSTANCE.isModLoaded("vmod")) {
|
||||
NeoForge.EVENT_BUS.register(new Vanish());
|
||||
}
|
||||
|
||||
if (ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive")) {
|
||||
NeoForge.EVENT_BUS.register(new PlayerReviveEvents());
|
||||
}
|
||||
}
|
||||
|
||||
public void commonSetup(FMLCommonSetupEvent evt) {
|
||||
|
@@ -4,6 +4,8 @@ import com.hypherionmc.craterlib.core.platform.CompatUtils;
|
||||
import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment;
|
||||
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
|
||||
import redstonedubstep.mods.vanishmod.VanishUtil;
|
||||
import team.creative.playerrevive.api.IBleeding;
|
||||
import team.creative.playerrevive.server.PlayerReviveServer;
|
||||
|
||||
public class NeoForgeCompatHelper implements CompatUtils {
|
||||
|
||||
@@ -19,4 +21,30 @@ public class NeoForgeCompatHelper implements CompatUtils {
|
||||
public String getSkinUUID(BridgedPlayer player) {
|
||||
return player.getStringUUID();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerBleeding(BridgedPlayer player) {
|
||||
if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
return false;
|
||||
|
||||
return PlayerReviveServer.isBleeding(player.toMojangServerPlayer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean playerBledOut(BridgedPlayer player) {
|
||||
if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
return false;
|
||||
|
||||
IBleeding bleeding = PlayerReviveServer.getBleeding(player.toMojangServerPlayer());
|
||||
return bleeding != null && bleeding.bledOut();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean playerRevived(BridgedPlayer player) {
|
||||
if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
return false;
|
||||
|
||||
IBleeding bleeding = PlayerReviveServer.getBleeding(player.toMojangServerPlayer());
|
||||
return bleeding != null && bleeding.revived();
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,23 @@
|
||||
package com.hypherionmc.craterlib.compat;
|
||||
|
||||
import com.hypherionmc.craterlib.core.event.CraterEventBus;
|
||||
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
|
||||
import lombok.NoArgsConstructor;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import team.creative.playerrevive.api.event.PlayerBleedOutEvent;
|
||||
import team.creative.playerrevive.api.event.PlayerRevivedEvent;
|
||||
|
||||
@NoArgsConstructor
|
||||
public class PlayerReviveEvents {
|
||||
|
||||
@SubscribeEvent
|
||||
public void playerRevived(PlayerRevivedEvent event) {
|
||||
CraterEventBus.INSTANCE.postEvent(com.hypherionmc.craterlib.api.events.compat.PlayerRevivedEvent.of(BridgedPlayer.of(event.getEntity())));
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void playerBledOutEvent(PlayerBleedOutEvent event) {
|
||||
CraterEventBus.INSTANCE.postEvent(com.hypherionmc.craterlib.api.events.compat.PlayerRevivedEvent.of(BridgedPlayer.of(event.getEntity())));
|
||||
}
|
||||
|
||||
}
|
@@ -75,4 +75,18 @@ public class PaperCompatHelper implements CompatUtils {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayerBleeding(BridgedPlayer player) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean playerBledOut(BridgedPlayer player) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean playerRevived(BridgedPlayer player) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@@ -56,6 +56,10 @@ subprojects {
|
||||
includeGroup "maven.modrinth"
|
||||
}
|
||||
}
|
||||
|
||||
maven {
|
||||
url = "https://unimaven.cc"
|
||||
}
|
||||
}
|
||||
|
||||
configurations {
|
||||
|
@@ -7,3 +7,6 @@
|
||||
|
||||
- Swapped Built In Config screen for a Cloth Config System, so client side mods can have in-game configs
|
||||
- Added new APIs for Simple RPC (V4 rewrite)
|
||||
- Added new APIs for getting player information from Commands
|
||||
- Added Compat API for Player Revive Mod
|
||||
- Added new APIs to know when the Minecraft Whitelist changes
|
@@ -2,7 +2,7 @@
|
||||
version_major=2
|
||||
version_minor=1
|
||||
version_patch=3
|
||||
version_build=0
|
||||
version_build=1
|
||||
|
||||
#Mod
|
||||
mod_author=HypherionSA
|
||||
@@ -39,6 +39,8 @@ vanishmod=1.1.12.1
|
||||
vanishmod_neo=puxrKAMr
|
||||
ftb_essentials=2101.1.0
|
||||
ftb_ranks=2101.1.1
|
||||
player_revive=6119534
|
||||
creative_core=6113754
|
||||
|
||||
# Publishing
|
||||
curse_id=867099
|
||||
|
Reference in New Issue
Block a user