Skip to content

Commit 8dbf2b5

Browse files
committed
Fixing FabricMC ClassNotFound bug
1 parent 2db93cc commit 8dbf2b5

File tree

13 files changed

+148
-86
lines changed

13 files changed

+148
-86
lines changed

build.gradle

+7-22
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,10 @@ subprojects {
1919
apply plugin: 'maven-publish'
2020

2121
base {
22-
// Set up a suffixed format for the mod jar names, e.g. `example-fabric`.
2322
archivesName = "$rootProject.archives_name-$project.name"
2423
}
2524

2625
repositories {
27-
// Add repositories to retrieve artifacts from in here.
28-
// You should only use this when depending on other mods because
29-
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
30-
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
31-
// for more information about repositories.
3226
maven {
3327
url = "https://api.modrinth.com/maven"
3428
}
@@ -38,16 +32,16 @@ subprojects {
3832
minecraft "net.minecraft:minecraft:$rootProject.minecraft_version"
3933
mappings loom.officialMojangMappings()
4034

41-
modImplementation include ("maven.modrinth:midnightlib:${midnightlib_version}-fabric")
42-
modImplementation include ("maven.modrinth:midnightlib:${midnightlib_version}-neoforge")
35+
// Inclure uniquement la version correcte de MidnightLib
36+
if (project.name == "fabric") {
37+
modImplementation include("maven.modrinth:midnightlib:${midnightlib_version}-fabric")
38+
} else if (project.name == "neoforge") {
39+
modImplementation include("maven.modrinth:midnightlib:${midnightlib_version}-neoforge")
40+
}
4341
}
4442

4543
java {
46-
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
47-
// if it is present.
48-
// If you remove this line, sources will not be generated.
4944
withSourcesJar()
50-
5145
sourceCompatibility = JavaVersion.VERSION_21
5246
targetCompatibility = JavaVersion.VERSION_21
5347
}
@@ -56,21 +50,12 @@ subprojects {
5650
it.options.release = 21
5751
}
5852

59-
// Configure Maven publishing.
6053
publishing {
6154
publications {
6255
mavenJava(MavenPublication) {
6356
artifactId = base.archivesName.get()
6457
from components.java
6558
}
6659
}
67-
68-
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
69-
repositories {
70-
// Add repositories to publish to here.
71-
// Notice: This block does NOT have the same function as the block in the top level.
72-
// The repositories here will be used for publishing your artifact, not for
73-
// retrieving dependencies.
74-
}
7560
}
76-
}
61+
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package fr.rxokas.entitypurge;
22

33
import com.mojang.logging.LogUtils;
4-
import eu.midnightdust.lib.config.MidnightConfig;
5-
import fr.rxokas.entitypurge.config.ModConfig;
64
import org.slf4j.Logger;
75

86
public final class Entitypurge {
97
public static final String MOD_ID = "entitypurge";
108
public static final Logger LOGGER = LogUtils.getLogger();
119

1210
public static void init() {
13-
MidnightConfig.init(MOD_ID, ModConfig.class);
14-
TickHandler.init();
11+
1512
}
1613
}
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,15 @@
11
package fr.rxokas.entitypurge.util;
22

33
import fr.rxokas.entitypurge.Entitypurge;
4-
import fr.rxokas.entitypurge.config.ModConfig;
5-
import net.minecraft.network.chat.Component;
64
import net.minecraft.server.MinecraftServer;
7-
import net.minecraft.server.level.ServerPlayer;
85

96
public class BroadcastMessage {
7+
108
public static void broadcastToAllPlayers(MinecraftServer server, String message) {
119
if (server != null && server.isRunning()) {
12-
Component textComponent = Component.literal(message);
13-
14-
for (ServerPlayer player : server.getPlayerList().getPlayers()) {
15-
player.sendSystemMessage(textComponent);
16-
}
10+
Command.execute(server, String.format("/tellraw @a {\"text\":\"%s \"}",message));
1711
} else {
1812
Entitypurge.LOGGER.warn("Couldn't broadcast a message to all players: Server is not running or not available.");
1913
}
2014
}
21-
22-
public static void warn10sec(MinecraftServer server) {
23-
broadcastToAllPlayers(server, ModConfig.warning10sMessage+"§r");
24-
}
25-
26-
public static void tellHappend(MinecraftServer server) {
27-
broadcastToAllPlayers(server, ModConfig.warninghappendMessage+"§r");
28-
}
2915
}

common/src/main/resources/entitypurge.mixins.json

-13
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package fr.rxokas.entitypurge.fabric;
22

3-
import fr.rxokas.entitypurge.Entitypurge;
3+
import eu.midnightdust.lib.config.MidnightConfig;
44
import net.fabricmc.api.ModInitializer;
55

6+
import static fr.rxokas.entitypurge.Entitypurge.MOD_ID;
7+
68
public final class EntitypurgeFabric implements ModInitializer {
79
@Override
810
public void onInitialize() {
@@ -11,6 +13,8 @@ public void onInitialize() {
1113
// Proceed with mild caution.
1214

1315
// Run our common setup.
14-
Entitypurge.init();
16+
TickHandler.init();
17+
18+
MidnightConfig.init(MOD_ID, ModConfig.class);
1519
}
1620
}

common/src/main/java/fr/rxokas/entitypurge/config/ModConfig.java fabric/src/main/java/fr/rxokas/entitypurge/fabric/ModConfig.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package fr.rxokas.entitypurge.config;
1+
package fr.rxokas.entitypurge.fabric;
22

33
import eu.midnightdust.lib.config.MidnightConfig;
44

@@ -8,7 +8,7 @@
88
public class ModConfig extends MidnightConfig {
99
public static final String ENTITIES = "entities";
1010
@Entry(category = ENTITIES) public static boolean clearItem = true;
11-
@Entry(category = ENTITIES) public static int minutesBetweenEachPurge = 1;
11+
@Entry(category = ENTITIES) public static int minutesBetweenEachPurge = 10;
1212
@Entry(category = ENTITIES) public static List<String> entitiesToClear = new ArrayList<>();
1313

1414

common/src/main/java/fr/rxokas/entitypurge/TickHandler.java fabric/src/main/java/fr/rxokas/entitypurge/fabric/TickHandler.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
package fr.rxokas.entitypurge;
1+
package fr.rxokas.entitypurge.fabric;
22

33
import dev.architectury.event.events.common.TickEvent;
4-
import fr.rxokas.entitypurge.config.ModConfig;
5-
import fr.rxokas.entitypurge.util.BroadcastMessage;
64
import fr.rxokas.entitypurge.util.Command;
75
import net.minecraft.core.registries.BuiltInRegistries;
86
import net.minecraft.resources.ResourceLocation;
@@ -16,6 +14,8 @@
1614
import java.util.HashMap;
1715
import java.util.Map;
1816

17+
import static fr.rxokas.entitypurge.util.BroadcastMessage.broadcastToAllPlayers;
18+
1919
public class TickHandler {
2020
private static final Logger LOGGER = LoggerFactory.getLogger(TickHandler.class);
2121
private static final Accumulator accumulator = new Accumulator(ModConfig.minutesBetweenEachPurge);
@@ -57,11 +57,11 @@ private static void onServerTick(MinecraftServer server) {
5757
}
5858
}
5959
}
60-
if (ModConfig.warninghappend) BroadcastMessage.tellHappend(server);
60+
if (ModConfig.warninghappend) broadcastToAllPlayers(server, ModConfig.warninghappendMessage + "§r");
6161

6262
LOGGER.debug("Entity purge Done");
6363
} else if (ModConfig.warning10s && accumulator.lessThan10SecRemaining() && !alreadyWarn10s) {
64-
BroadcastMessage.warn10sec(server);
64+
broadcastToAllPlayers(server, ModConfig.warning10sMessage + "§r");
6565
alreadyWarn10s = true;
6666
}
6767
}

fabric/src/main/java/fr/rxokas/entitypurge/fabric/client/EntitypurgeFabricClient.java

-10
This file was deleted.

fabric/src/main/resources/fabric.mod.json

+1-7
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,12 @@
1111
"homepage": ""
1212
},
1313
"license": "MIT",
14-
"environment": "*",
14+
"environment": "server",
1515
"entrypoints": {
1616
"main": [
1717
"fr.rxokas.entitypurge.fabric.EntitypurgeFabric"
18-
],
19-
"client": [
20-
"fr.rxokas.entitypurge.fabric.client.EntitypurgeFabricClient"
2118
]
2219
},
23-
"mixins": [
24-
"entitypurge.mixins.json"
25-
],
2620
"depends": {
2721
"fabricloader": ">=0.16.10",
2822
"minecraft": "~1.21.4",
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package fr.rxokas.entitypurge.neoforge;
22

3+
import eu.midnightdust.lib.config.MidnightConfig;
34
import fr.rxokas.entitypurge.Entitypurge;
45
import net.neoforged.fml.common.Mod;
56

7+
import static fr.rxokas.entitypurge.Entitypurge.MOD_ID;
8+
69
@Mod(Entitypurge.MOD_ID)
710
public final class EntitypurgeNeoForge {
811
public EntitypurgeNeoForge() {
912
// Run our common setup.
10-
Entitypurge.init();
13+
TickHandler.init();
14+
15+
MidnightConfig.init(MOD_ID, ModConfig.class);
1116
}
1217
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package fr.rxokas.entitypurge.neoforge;
2+
3+
import eu.midnightdust.lib.config.MidnightConfig;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class ModConfig extends MidnightConfig {
9+
public static final String ENTITIES = "entities";
10+
@Entry(category = ENTITIES) public static boolean clearItem = true;
11+
@Entry(category = ENTITIES) public static int minutesBetweenEachPurge = 10;
12+
@Entry(category = ENTITIES) public static List<String> entitiesToClear = new ArrayList<>();
13+
14+
15+
public static final String BROADCAST = "broadcast";
16+
@Entry(category = BROADCAST) public static boolean warning10s = true;
17+
@Entry(category = BROADCAST) public static String warning10sMessage = "§cCaution, the clear lag will append in 10 seconds!";
18+
@Entry(category = BROADCAST) public static boolean warninghappend = true;
19+
@Entry(category = BROADCAST) public static String warninghappendMessage = "§2Clear lag done!";
20+
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package fr.rxokas.entitypurge.neoforge;
2+
3+
import dev.architectury.event.events.common.TickEvent;
4+
import fr.rxokas.entitypurge.util.Command;
5+
import net.minecraft.core.registries.BuiltInRegistries;
6+
import net.minecraft.resources.ResourceLocation;
7+
import net.minecraft.server.MinecraftServer;
8+
import net.minecraft.server.level.ServerLevel;
9+
import net.minecraft.world.entity.Entity;
10+
import net.minecraft.world.entity.EntityType;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
import java.util.HashMap;
15+
import java.util.Map;
16+
17+
import static fr.rxokas.entitypurge.util.BroadcastMessage.broadcastToAllPlayers;
18+
19+
public class TickHandler {
20+
private static final Logger LOGGER = LoggerFactory.getLogger(TickHandler.class);
21+
private static final Accumulator accumulator = new Accumulator(ModConfig.minutesBetweenEachPurge);
22+
private static final Map<String, EntityType<?>> entityTypeCache = new HashMap<>();
23+
24+
private static boolean alreadyWarn10s = false;
25+
26+
public static void init() {
27+
TickEvent.SERVER_POST.register(TickHandler::onServerTick);
28+
cacheEntityTypes();
29+
}
30+
31+
private static void cacheEntityTypes() {
32+
for (String entityId : ModConfig.entitiesToClear) {
33+
ResourceLocation entityResource = ResourceLocation.parse(entityId);
34+
BuiltInRegistries.ENTITY_TYPE.getOptional(entityResource).ifPresent(entityType ->
35+
entityTypeCache.put(entityId, entityType)
36+
);
37+
}
38+
}
39+
40+
private static void onServerTick(MinecraftServer server) {
41+
accumulator.add();
42+
43+
if (accumulator.canProcess()) {
44+
LOGGER.debug("Starting entity purge...");
45+
accumulator.reduce();
46+
alreadyWarn10s = false;
47+
48+
if (ModConfig.clearItem) Command.execute(server, "kill @e[type=item]");
49+
50+
if (!ModConfig.entitiesToClear.isEmpty()) {
51+
for (ServerLevel serverLevel : server.getAllLevels()) {
52+
for (String entityId : ModConfig.entitiesToClear) {
53+
EntityType<?> entityType = entityTypeCache.get(entityId);
54+
if (entityType == null) continue;
55+
56+
serverLevel.getEntities(entityType, Entity::isAlive).forEach(entity -> entity.remove(Entity.RemovalReason.DISCARDED));
57+
}
58+
}
59+
}
60+
if (ModConfig.warninghappend) broadcastToAllPlayers(server, ModConfig.warninghappendMessage + "§r");
61+
62+
LOGGER.debug("Entity purge Done");
63+
} else if (ModConfig.warning10s && accumulator.lessThan10SecRemaining() && !alreadyWarn10s) {
64+
broadcastToAllPlayers(server, ModConfig.warning10sMessage + "§r");
65+
alreadyWarn10s = true;
66+
}
67+
}
68+
69+
private static class Accumulator {
70+
private static final float TEN_SECONDS_IN_TICKS = 200; // 10 seconds in ticks (20 ticks per second)
71+
float total;
72+
float threshold;
73+
private final float tenSecondThreshold;
74+
75+
public Accumulator(float threshold) {
76+
this.threshold = threshold * 1200; // Convert minutes to ticks
77+
this.tenSecondThreshold = this.threshold - TEN_SECONDS_IN_TICKS;
78+
}
79+
80+
public boolean canProcess() {
81+
return total >= threshold;
82+
}
83+
84+
public void reduce() {
85+
total -= threshold;
86+
}
87+
88+
public void add() {
89+
total += 1;
90+
}
91+
92+
public boolean lessThan10SecRemaining() {
93+
return total >= tenSecondThreshold;
94+
}
95+
}
96+
}

neoforge/src/main/resources/META-INF/neoforge.mods.toml

+1-4
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,4 @@ modId = "midnightlib"
3939
type = "required"
4040
versionRange = "[1.6.7,)"
4141
ordering = "BEFORE"
42-
side = "BOTH"
43-
44-
[[mixins]]
45-
config = "entitypurge.mixins.json"
42+
side = "BOTH"

0 commit comments

Comments
 (0)