Skip to content

Commit 243373b

Browse files
committed
Fix #44
Add a config to sync stats No need for XP to revert skill level grpg_Health now has a name Bump version 1.2.8
1 parent 4bde952 commit 243373b

File tree

11 files changed

+75
-23
lines changed

11 files changed

+75
-23
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ compileJava {
3030
sourceCompatibility = targetCompatibility = "1.8"
3131
}
3232

33-
version = "1.2.7.2"
33+
version = "1.2.8"
3434
group= "net.infstudio.gokistats" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
3535
archivesBaseName = "gokiStats"
3636

src/main/java/net/infstudio/goki/api/stat/Stats.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,6 @@ public interface Stats {
3636
StatBase STEALTH = new StatStealth(19, "grpg_Stealth", 10);
3737
StatBase STEADY_GUARD = new StatSteadyGuard(18, "grpg_Steady_Guard", 10);
3838
StatMiningMagician MINING_MAGICIAN = new StatMiningMagician(20, "grpg_Mining_Magician", 10);
39-
StatBase ROLL = new StatRoll(21, "grpg_Roll", 10);
39+
StatBase ROLL = new StatRoll(22, "grpg_Roll", 10);
4040

4141
}

src/main/java/net/infstudio/goki/client/network/handler/PacketGuiClientHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
77
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
88
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
9+
import net.minecraftforge.fml.relauncher.Side;
10+
import net.minecraftforge.fml.relauncher.SideOnly;
911

1012
public class PacketGuiClientHandler implements IMessageHandler<S2COpenGui, IMessage> {
1113
@Override
14+
@SideOnly(Side.CLIENT)
1215
public IMessage onMessage(S2COpenGui message, MessageContext ctx) {
1316
Minecraft.getMinecraft().addScheduledTask(() ->
1417
Minecraft.getMinecraft().displayGuiScreen(new GuiStats(Minecraft.getMinecraft().player)));

src/main/java/net/infstudio/goki/client/network/handler/PacketSyncClientHandler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package net.infstudio.goki.client.network.handler;
22

3+
import net.infstudio.goki.api.stat.Stats;
34
import net.infstudio.goki.common.network.message.S2CStatSync;
45
import net.infstudio.goki.common.network.message.S2CSyncAll;
56
import net.infstudio.goki.api.stat.StatBase;
67
import net.infstudio.goki.common.utils.DataHelper;
78
import net.minecraft.client.Minecraft;
9+
import net.minecraft.entity.SharedMonsterAttributes;
810
import net.minecraft.entity.player.EntityPlayer;
911
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
1012
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
@@ -22,6 +24,9 @@ public IMessage onMessage(S2CStatSync message, MessageContext ctx) {
2224
return null;
2325
StatBase stat = StatBase.stats.get(message.stat);
2426
Minecraft.getMinecraft().addScheduledTask(() -> {
27+
if (stat == Stats.MAX_HEALTH)
28+
player.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH)
29+
.setBaseValue(20 + message.amount);
2530
DataHelper.setPlayerRevertStatLevel(player, stat, message.reverted);
2631
DataHelper.setPlayerStatLevel(player, stat, message.amount);
2732
});
@@ -45,6 +50,8 @@ public IMessage onMessage(S2CSyncAll message, MessageContext ctx) {
4550
for (int i = 0; i < message.revertedStatLevels.length; i++) {
4651
DataHelper.setPlayerRevertStatLevel(player, StatBase.stats.get(i), message.revertedStatLevels[i]);
4752
}
53+
player.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH)
54+
.setBaseValue(20 + DataHelper.getPlayerStatLevel(player, Stats.MAX_HEALTH));
4855
});
4956
return null;
5057
}

src/main/java/net/infstudio/goki/common/config/GokiConfig.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ public class GokiConfig {
1313
@Config.RequiresMcRestart
1414
public static boolean keyBindingEnabled = true;
1515

16+
@Config.Name("Initiative stat synchronization")
17+
@Config.Comment("Enables synchronizing all stat data in a period")
18+
public static boolean initiativeSync = false;
19+
20+
@Config.Name("Ticks for initiative sync")
21+
@Config.Comment("Default 400 Ticks (20s)")
22+
@Config.RangeInt(min = 20)
23+
public static int syncTicks = 400;
24+
1625
@Config.Name("Global Modifiers")
1726
public static GlobalModifiers globalModifiers = new GlobalModifiers();
1827

src/main/java/net/infstudio/goki/common/handlers/CommonHandler.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
3838
import net.minecraftforge.fml.common.registry.ForgeRegistries;
3939
import net.minecraftforge.fml.common.registry.GameRegistry;
40+
import net.minecraftforge.fml.relauncher.Side;
41+
import net.minecraftforge.fml.relauncher.SideOnly;
4042

4143
import java.util.List;
4244
import java.util.Random;
@@ -118,6 +120,7 @@ public void harvestBlock(BlockEvent.HarvestDropsEvent event) {
118120
}
119121
}
120122

123+
@SideOnly(Side.SERVER)
121124
@SubscribeEvent
122125
public void playerLoggedIn(net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent event) {
123126
EntityPlayer player = event.player;
@@ -127,16 +130,6 @@ public void playerLoggedIn(net.minecraftforge.fml.common.gameevent.PlayerEvent.P
127130
} // Client side: Do nothing
128131
}
129132

130-
@SubscribeEvent
131-
public void onPlayerRespawn(PlayerRespawnEvent event) {
132-
EntityPlayer player = event.player;
133-
if (!player.world.isRemote) {
134-
// Server side
135-
GokiPacketHandler.CHANNEL.sendTo(new S2CSyncAll(player), (EntityPlayerMP) player);
136-
} // Client side: Do nothing
137-
138-
}
139-
140133
@SubscribeEvent
141134
public void playerFall(LivingFallEvent event) {
142135
if ((event.getEntity() instanceof EntityPlayer)) {
@@ -149,14 +142,25 @@ public void playerFall(LivingFallEvent event) {
149142
}
150143
}
151144

145+
@SideOnly(Side.SERVER)
146+
@SubscribeEvent
147+
public void playerChangedWorld(net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerChangedDimensionEvent event) {
148+
if (!event.player.world.isRemote) {
149+
GokiPacketHandler.CHANNEL.sendTo(new S2CSyncAll(event.player), (EntityPlayerMP) event.player);
150+
}
151+
}
152+
153+
@SideOnly(Side.SERVER)
152154
@SubscribeEvent
153155
public void playerRespawn(PlayerRespawnEvent event) {
154156
EntityPlayer player = event.player;
155-
if (!player.world.isRemote && GokiConfig.globalModifiers.loseStatsOnDeath) {
156-
for (int stat = 0; stat < StatBase.totalStats; stat++) {
157-
DataHelper.multiplyPlayerStatLevel(player,
158-
StatBase.stats.get(stat),
159-
level -> level - (int) (GokiConfig.globalModifiers.loseStatsMultiplier * level));
157+
if (!player.world.isRemote) {
158+
if (GokiConfig.globalModifiers.loseStatsOnDeath) {
159+
for (int stat = 0; stat < StatBase.totalStats; stat++) {
160+
DataHelper.multiplyPlayerStatLevel(player,
161+
StatBase.stats.get(stat),
162+
level -> level - (int) (GokiConfig.globalModifiers.loseStatsMultiplier * level));
163+
}
160164
}
161165
GokiPacketHandler.CHANNEL.sendTo(new S2CSyncAll(player), (EntityPlayerMP) player);
162166
}

src/main/java/net/infstudio/goki/common/handlers/TickHandler.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,39 @@
11
package net.infstudio.goki.common.handlers;
22

33
import net.infstudio.goki.api.stat.Stats;
4+
import net.infstudio.goki.common.config.GokiConfig;
5+
import net.infstudio.goki.common.network.GokiPacketHandler;
6+
import net.infstudio.goki.common.network.message.S2CSyncAll;
47
import net.infstudio.goki.common.utils.DataHelper;
58
import net.minecraft.entity.EntityLivingBase;
69
import net.minecraft.entity.MoverType;
710
import net.minecraft.entity.SharedMonsterAttributes;
811
import net.minecraft.entity.ai.attributes.AttributeModifier;
912
import net.minecraft.entity.ai.attributes.IAttributeInstance;
1013
import net.minecraft.entity.player.EntityPlayer;
14+
import net.minecraft.entity.player.EntityPlayerMP;
1115
import net.minecraft.tileentity.TileEntity;
1216
import net.minecraft.tileentity.TileEntityFurnace;
1317
import net.minecraft.util.math.BlockPos;
1418
import net.minecraft.util.math.MathHelper;
19+
import net.minecraftforge.fml.common.FMLCommonHandler;
1520
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
1621
import net.minecraftforge.fml.common.gameevent.TickEvent;
22+
import net.minecraftforge.fml.relauncher.Side;
23+
import net.minecraftforge.fml.relauncher.SideOnly;
1724

1825
import java.lang.reflect.Field;
1926
import java.util.ArrayList;
2027
import java.util.UUID;
28+
import java.util.concurrent.atomic.AtomicInteger;
2129

2230
public class TickHandler {
2331
public static final UUID knockbackResistanceID = UUID.randomUUID();
2432
public static final UUID stealthSpeedID = UUID.randomUUID();
2533
public static final UUID swimSpeedID = UUID.randomUUID();
2634

35+
public static AtomicInteger tickTimer = new AtomicInteger();
36+
2737
@SubscribeEvent
2838
public void playerTick(TickEvent.PlayerTickEvent event) {
2939
if (event.phase == TickEvent.Phase.START) { // Due to issue #32
@@ -55,6 +65,21 @@ public void playerTick(TickEvent.PlayerTickEvent event) {
5565
}
5666
}
5767

68+
@SubscribeEvent
69+
@SideOnly(Side.SERVER)
70+
public void serverTick(TickEvent.ServerTickEvent event) {
71+
if (event.phase == TickEvent.Phase.END) {
72+
if (tickTimer.get() == GokiConfig.syncTicks) {
73+
tickTimer.lazySet(0);
74+
for (EntityPlayerMP player : FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getPlayers()) {
75+
GokiPacketHandler.CHANNEL.sendTo(new S2CSyncAll(player), player);
76+
}
77+
} else {
78+
tickTimer.getAndIncrement();
79+
}
80+
}
81+
}
82+
5883
public static boolean isJumping(EntityLivingBase livingBase) {
5984
Field field = null;
6085
try {

src/main/java/net/infstudio/goki/common/network/GokiPacketHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class GokiPacketHandler {
1616
public static final SimpleNetworkWrapper CHANNEL = NetworkRegistry.INSTANCE.newSimpleChannel(Reference.MODID);
1717

1818
static {
19-
CHANNEL.registerMessage(new PacketSyncHandler.Stat(), C2SStatSync.class, 0, Side.SERVER);
19+
CHANNEL.registerMessage(PacketSyncHandler.Stat.class, C2SStatSync.class, 0, Side.SERVER);
2020
CHANNEL.registerMessage(PacketSyncClientHandler.StatAll.class, S2CSyncAll.class, 1, Side.CLIENT);
2121
CHANNEL.registerMessage(PacketSyncClientHandler.Stat.class, S2CStatSync.class, 2, Side.CLIENT);
2222
CHANNEL.registerMessage(PacketGuiClientHandler.class, S2COpenGui.class, 3, Side.CLIENT);

src/main/java/net/infstudio/goki/common/network/handler/PacketSyncHandler.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@ public IMessage onMessage(C2SStatSync message, MessageContext ctx) {
3232
int cost = stat.getCost(level + message.amount - 1);
3333
int currentXP = DataHelper.getXPTotal(player.experienceLevel, player.experience);
3434
player.getServerWorld().addScheduledTask(() -> {
35+
int reverted = DataHelper.getPlayerRevertStatLevel(player, stat);
36+
reverted = Math.max(reverted - message.amount, 0);
37+
if (GokiConfig.globalModifiers.globalMaxRevertLevel < reverted && GokiConfig.globalModifiers.globalMaxRevertLevel != -1) return;
38+
DataHelper.setPlayerRevertStatLevel(player, stat, reverted);
3539

3640
if (currentXP >= cost) {
37-
int reverted = DataHelper.getPlayerRevertStatLevel(player, stat);
38-
reverted = Math.max(reverted - message.amount, 0);
39-
if (GokiConfig.globalModifiers.globalMaxRevertLevel < reverted && GokiConfig.globalModifiers.globalMaxRevertLevel != -1) return;
40-
DataHelper.setPlayerRevertStatLevel(player, stat, reverted);
41-
4241
DataHelper.setPlayerStatLevel(player, stat, level + message.amount);
4342

4443
// Sync to client player
@@ -54,6 +53,9 @@ public IMessage onMessage(C2SStatSync message, MessageContext ctx) {
5453
DataHelper.setPlayersExpTo(player, currentXP + (int) (stat.getCost(level + message.amount + 1) * GokiConfig.globalModifiers.globalRevertFactor));
5554
} else
5655
DataHelper.setPlayersExpTo(player, currentXP - cost);
56+
} else {
57+
// Sync to client player
58+
GokiPacketHandler.CHANNEL.sendTo(new S2CStatSync(StatBase.stats.indexOf(stat), level, reverted), player);
5759
}
5860
});
5961
return null;

src/main/resources/assets/gokistats/lang/en_us.lang

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ grpg_Steady_Guard.name=Steady Guard
2020
grpg_Stealth.name=Stealth
2121
grpg_Mining_Magician.name=Mining Magician
2222
grpg_Roll.name=Roll
23+
grpg_Health.name=Additional Health
2324

2425
grpg_Mining.des=Mine %f%% faster.
2526
grpg_Digging.des=Dig %f%% faster.
@@ -46,6 +47,7 @@ grpg_Steady_Guard.des=%f%% less knockback when blocking.
4647
grpg_Stealth.des=Move %1$f%% faster and reap %2$f%%more often (%3$f%%) when sneaking.;
4748
grpg_Mining_Magician.des=Chance to find additional materials when harvesting ores.
4849
grpg_Roll.des=%f%% chance to avoid damage and counterattack enemy.
50+
grpg_Health.des=Get %f more health.
4951

5052
grpg_Roll.message=*Avoided*
5153
grpg_Roll.knockback=*Knockback*

0 commit comments

Comments
 (0)