Skip to content

Commit 6eb1419

Browse files
authored
Merge pull request #2 from Pixaurora/more-client-versions
Add client versions between 1.0.0 and 1.2.5
2 parents 7900a91 + 388b715 commit 6eb1419

File tree

63 files changed

+2535
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2535
-1
lines changed

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,11 @@ dependencies {
3636
shadow libs.gson
3737
implementation libs.gson
3838

39+
include project(":versions:1.0.0-client")
3940
include project(":versions:1.0.1-server")
41+
include project(":versions:1.1.0-client")
4042
include project(":versions:1.1.0-server")
43+
include project(":versions:1.2.5-client")
4144
include project(":versions:1.2.5-server")
4245
include project(":versions:1.3.2")
4346
include project(":versions:1.4.7")

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ mod_version = 1.1.0
1010
maven_group = net.lostluma
1111
archives_base_name = server-stats
1212

13-
minecraft_version_min = 1.0.1
13+
minecraft_version_min = 1.0.0
1414
minecraft_version_max = 1.12.2
1515

1616
# Minecraft Properties

settings.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@ pluginManagement {
1616
}
1717
}
1818

19+
include(":versions:1.0.0-client")
1920
include(":versions:1.0.1-server")
21+
include(":versions:1.1.0-client")
2022
include(":versions:1.1.0-server")
23+
include(":versions:1.2.5-client")
2124
include(":versions:1.2.5-server")
2225
include(":versions:1.3.2")
2326
include(":versions:1.4.7")

versions/1.0.0-client/build.gradle

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
plugins {
2+
id 'maven-publish'
3+
alias libs.plugins.shadow
4+
alias libs.plugins.quilt.loom
5+
alias libs.plugins.ploceus
6+
}
7+
8+
apply from: "${rootProject.projectDir}/gradle/common.gradle"
9+
10+
group = project.maven_group
11+
version = generateVersionWithMetadata()
12+
13+
base {
14+
archivesName = project.archives_base_name
15+
}
16+
17+
loom {
18+
clientOnlyMinecraftJar()
19+
20+
accessWidenerPath = file("src/main/resources/server_stats.accesswidener")
21+
}
22+
23+
ploceus {
24+
clientOnlyMappings()
25+
}
26+
27+
dependencies {
28+
minecraft "com.mojang:minecraft:${project.minecraft_version}"
29+
30+
mappings loom.layered {
31+
mappings "net.ornithemc:feather:${project.feather_version}:v2"
32+
addLayer ploceus.nestedMappings() // Required for nests
33+
}
34+
35+
nests "net.ornithemc:nests:${project.nests_version}"
36+
modImplementation libs.quilt.loader
37+
38+
implementation libs.gson
39+
}
40+
41+
shadowJar {
42+
configurations = [project.configurations.shadow]
43+
relocate "com.google", "net.lostluma.server_stats.external"
44+
}
45+
46+
remapJar {
47+
inputFile.set shadowJar.archiveFile
48+
dependsOn shadowJar
49+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Mod Properties
2+
archives_base_name = server-stats-mixins-client
3+
4+
# Minecraft Properties
5+
minecraft_version = 1.0.0
6+
7+
nests_version = 1.0.0-client+build.1
8+
feather_version = 1.0.0-client+build.11
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package net.lostluma.server_stats;
2+
3+
public class Constants {
4+
public static final String MOD_ID = "server_stats";
5+
public static final String STATS_PACKET_CHANNEL = MOD_ID + "|s";
6+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package net.lostluma.server_stats.mixin.client;
2+
3+
import net.lostluma.server_stats.stats.Stats;
4+
import net.minecraft.client.entity.living.player.InputPlayerEntity;
5+
import net.minecraft.client.entity.living.player.LocalPlayerEntity;
6+
import net.minecraft.entity.living.player.PlayerEntity;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
11+
12+
@Mixin({ InputPlayerEntity.class, LocalPlayerEntity.class })
13+
public class LocalPlayerEntityMixin {
14+
private PlayerEntity getPlayer() {
15+
return (PlayerEntity) (Object) this;
16+
}
17+
18+
@Inject(method = "incrementStat(Lnet/minecraft/stat/Stat;I)V", at = @At("HEAD"))
19+
private void incrementStat(net.minecraft.stat.Stat vanillaStat, int amount, CallbackInfo callbackInfo) {
20+
if (vanillaStat == null) {
21+
return;
22+
}
23+
24+
var stat = Stats.byVanillaId(vanillaStat.id);
25+
26+
if (stat != null) {
27+
this.getPlayer().server_stats$incrementStat(stat, amount);
28+
}
29+
}
30+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package net.lostluma.server_stats.mixin.client;
2+
3+
import net.lostluma.server_stats.stats.ServerPlayerStats;
4+
import net.minecraft.world.WorldSettings;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Shadow;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
import net.lostluma.server_stats.stats.Stats;
12+
import net.minecraft.client.Minecraft;
13+
import net.minecraft.client.entity.living.player.InputPlayerEntity;
14+
15+
@Mixin(Minecraft.class)
16+
public class MinecraftMixin {
17+
@Shadow
18+
public InputPlayerEntity player;
19+
20+
@Inject(method = "<init>", at = @At("TAIL"))
21+
private void onInit(CallbackInfo callbackInfo) {
22+
Stats.init();
23+
}
24+
25+
@Inject(method = "startGame", at = @At("HEAD"))
26+
private void startGame(String worldDir, String worldName, WorldSettings worldSettings, CallbackInfo callbackInfo) {
27+
ServerPlayerStats.setWorldDirectory(String.format("saves/%s", worldDir));
28+
}
29+
30+
@Inject(method = "m_4977780", at = @At("TAIL"))
31+
private void changeDimension(int dimension, CallbackInfo callbackInfo) {
32+
this.player.server_stats$saveStats();
33+
}
34+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package net.lostluma.server_stats.mixin.common;
2+
3+
import org.spongepowered.asm.mixin.Mixin;
4+
import org.spongepowered.asm.mixin.injection.At;
5+
import org.spongepowered.asm.mixin.injection.Inject;
6+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
7+
8+
import net.lostluma.server_stats.stats.Stats;
9+
import net.minecraft.entity.Entities;
10+
11+
@Mixin(Entities.class)
12+
public class EntitiesMixin {
13+
@Inject(method = "register", at = @At("TAIL"))
14+
private static void registerWithSpawnEgg(Class<?> type, String key, int id, CallbackInfo callbackInfo) {
15+
Stats.createEntityKillStat(key);
16+
Stats.createKilledByEntityStat(key);
17+
}
18+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package net.lostluma.server_stats.mixin.common;
2+
3+
import net.lostluma.server_stats.stats.Stats;
4+
import net.minecraft.entity.damage.DamageSource;
5+
import net.minecraft.entity.living.LivingEntity;
6+
import org.jetbrains.annotations.Nullable;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Unique;
9+
10+
import net.lostluma.server_stats.stats.ServerPlayerStats;
11+
import net.lostluma.server_stats.stats.Stat;
12+
import net.lostluma.server_stats.types.StatsPlayer;
13+
import net.minecraft.client.Minecraft;
14+
import net.minecraft.entity.living.player.PlayerEntity;
15+
import org.spongepowered.asm.mixin.injection.At;
16+
import org.spongepowered.asm.mixin.injection.Inject;
17+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
18+
19+
@Mixin(PlayerEntity.class)
20+
public class PlayerEntityMixin implements StatsPlayer {
21+
@Unique
22+
private ServerPlayerStats server_stats$serverPlayerStats = null;
23+
24+
private PlayerEntity getPlayer() {
25+
return (PlayerEntity) (Object) this;
26+
}
27+
28+
@Override
29+
public void server_stats$incrementStat(Stat stat, int amount) {
30+
var stats = this.server_stats$getStats();
31+
var player = (PlayerEntity)(Object)this;
32+
33+
if (stats != null) {
34+
stats.increment(player, stat, amount);
35+
}
36+
}
37+
38+
@Override
39+
public void server_stats$saveStats() {
40+
var stats = this.server_stats$getStats();
41+
42+
if (stats != null) {
43+
stats.save();
44+
}
45+
}
46+
47+
@Override
48+
public @Nullable ServerPlayerStats server_stats$getStats() {
49+
var player = (PlayerEntity)(Object)this;
50+
51+
// Unmapped method returns true when the server is multiplayer
52+
if (Minecraft.INSTANCE.m_2812472()) {
53+
return null;
54+
}
55+
56+
if (this.server_stats$serverPlayerStats == null) {
57+
this.server_stats$serverPlayerStats = new ServerPlayerStats(player);
58+
}
59+
60+
return this.server_stats$serverPlayerStats;
61+
}
62+
63+
@Inject(method = "onKill", at = @At("HEAD"))
64+
private void onKill(LivingEntity entity, CallbackInfo callbackInfo) {
65+
this.getPlayer().server_stats$incrementStat(Stats.getEntityKillStat(entity), 1);
66+
}
67+
68+
@Inject(method = "onKilled", at = @At("HEAD"))
69+
private void onKilled(DamageSource source, CallbackInfo callbackInfo) {
70+
if (source.getAttacker() != null) {
71+
var attacker = source.getAttacker();
72+
this.getPlayer().server_stats$incrementStat(Stats.getKilledByEntityStat(attacker), 1);
73+
}
74+
}
75+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.lostluma.server_stats.mixin.common;
2+
3+
import java.util.List;
4+
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Shadow;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
import net.minecraft.entity.living.player.PlayerEntity;
12+
import net.minecraft.world.World;
13+
14+
@Mixin(World.class)
15+
public class WorldMixin {
16+
@Shadow
17+
public List<PlayerEntity> players;
18+
19+
@Inject(method = "saveData", at = @At("TAIL"))
20+
public void onSave(CallbackInfo callbackInfo) {
21+
for (PlayerEntity player : this.players) {
22+
player.server_stats$saveStats();
23+
}
24+
}
25+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net.lostluma.server_stats.stats;
2+
3+
import org.jetbrains.annotations.Nullable;
4+
5+
public class GeneralStat extends Stat {
6+
public GeneralStat(String key, @Nullable Integer vanillaId) {
7+
super(key, vanillaId);
8+
}
9+
10+
@Override
11+
public Stat register() {
12+
super.register();
13+
Stats.GENERAL.add(this);
14+
return this;
15+
}
16+
}

0 commit comments

Comments
 (0)