mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-23 21:38:00 +01:00
Link the player's race to the race reported by their minelp skin
This commit is contained in:
parent
38e7b8bc36
commit
9518c93e3f
4 changed files with 88 additions and 2 deletions
23
src/main/java/com/minelittlepony/unicopia/MineLP.java
Normal file
23
src/main/java/com/minelittlepony/unicopia/MineLP.java
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
package com.minelittlepony.unicopia;
|
||||||
|
|
||||||
|
import com.minelittlepony.MineLittlePony;
|
||||||
|
|
||||||
|
public final class MineLP {
|
||||||
|
private static boolean checkComplete;
|
||||||
|
private static boolean modIsActive;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if mine little pony is present. That's all we need.
|
||||||
|
*/
|
||||||
|
public static boolean modIsActive() {
|
||||||
|
if (!checkComplete) {
|
||||||
|
try {
|
||||||
|
MineLittlePony.getConfig();
|
||||||
|
modIsActive = true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
modIsActive = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return modIsActive;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,8 +4,11 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
|
import com.minelittlepony.pony.data.PonyRace;
|
||||||
|
|
||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
public enum Race {
|
public enum Race {
|
||||||
HUMAN(false, false, false),
|
HUMAN(false, false, false),
|
||||||
|
@ -80,6 +83,31 @@ public enum Race {
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public static Race fromPonyRace(PonyRace ponyRace) {
|
||||||
|
switch (ponyRace) {
|
||||||
|
case ALICORN:
|
||||||
|
return ALICORN;
|
||||||
|
case CHANGELING:
|
||||||
|
case REFORMED_CHANGELING:
|
||||||
|
return CHANGELING;
|
||||||
|
case ZEBRA:
|
||||||
|
case EARTH:
|
||||||
|
return EARTH;
|
||||||
|
case GRIFFIN:
|
||||||
|
case HIPPOGRIFF:
|
||||||
|
case PEGASUS:
|
||||||
|
case BATPONY:
|
||||||
|
return PEGASUS;
|
||||||
|
case SEAPONY:
|
||||||
|
case UNICORN:
|
||||||
|
return UNICORN;
|
||||||
|
default:
|
||||||
|
return HUMAN;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Race fromId(int id) {
|
public static Race fromId(int id) {
|
||||||
return raceIdMap.getOrDefault(id, HUMAN);
|
return raceIdMap.getOrDefault(id, HUMAN);
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
|
||||||
import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
|
import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
|
||||||
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
|
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
|
||||||
import com.minelittlepony.unicopia.power.PowersRegistry;
|
import com.minelittlepony.unicopia.power.PowersRegistry;
|
||||||
|
import com.minelittlepony.pony.data.IPony;
|
||||||
|
|
||||||
import come.minelittlepony.unicopia.forgebullshit.FBS;
|
import come.minelittlepony.unicopia.forgebullshit.FBS;
|
||||||
|
|
||||||
|
@ -57,6 +58,16 @@ public class Unicopia {
|
||||||
public static int MAGIC_PARTICLE;
|
public static int MAGIC_PARTICLE;
|
||||||
public static int RAIN_PARTICLE;
|
public static int RAIN_PARTICLE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The race preferred by the client - as determined by mine little pony.
|
||||||
|
* Human if minelp was not installed.
|
||||||
|
*
|
||||||
|
* This is not neccessarily the _actual_ race used for the player,
|
||||||
|
* as the server may not allow certain race types, or the player may override
|
||||||
|
* this option in-game themselves.
|
||||||
|
*/
|
||||||
|
private static Race clientPlayerRace = getclientPlayerRace();
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void preInit(FMLPreInitializationEvent event) {
|
public void preInit(FMLPreInitializationEvent event) {
|
||||||
if (UClient.isClientSide()) {
|
if (UClient.isClientSide()) {
|
||||||
|
@ -64,10 +75,19 @@ public class Unicopia {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
private static Race getclientPlayerRace() {
|
||||||
|
if (Minecraft.getMinecraft().player != null && MineLP.modIsActive()) {
|
||||||
|
return Race.fromPonyRace(IPony.forPlayer(Minecraft.getMinecraft().player).getRace(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
return Race.HUMAN;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void init(FMLInitializationEvent event) {
|
public void init(FMLInitializationEvent event) {
|
||||||
channel = JumpingCastle.subscribeTo(MODID, () -> {
|
channel = JumpingCastle.subscribeTo(MODID, () -> {
|
||||||
channel.send(new MsgRequestCapabilities(Minecraft.getMinecraft().player), Target.SERVER);
|
channel.send(new MsgRequestCapabilities(Minecraft.getMinecraft().player, clientPlayerRace), Target.SERVER);
|
||||||
})
|
})
|
||||||
.listenFor(MsgRequestCapabilities.class)
|
.listenFor(MsgRequestCapabilities.class)
|
||||||
.listenFor(MsgPlayerCapabilities.class)
|
.listenFor(MsgPlayerCapabilities.class)
|
||||||
|
@ -111,6 +131,14 @@ public class Unicopia {
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onGameTick(TickEvent.ClientTickEvent event) {
|
public static void onGameTick(TickEvent.ClientTickEvent event) {
|
||||||
|
Race newRace = getclientPlayerRace();
|
||||||
|
|
||||||
|
if (newRace != clientPlayerRace) {
|
||||||
|
clientPlayerRace = newRace;
|
||||||
|
|
||||||
|
channel.send(new MsgRequestCapabilities(Minecraft.getMinecraft().player, clientPlayerRace), Target.SERVER);
|
||||||
|
}
|
||||||
|
|
||||||
if (event.phase == Phase.END) {
|
if (event.phase == Phase.END) {
|
||||||
Keyboard.getKeyHandler().onKeyInput();
|
Keyboard.getKeyHandler().onKeyInput();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.google.gson.annotations.Expose;
|
||||||
import com.minelittlepony.jumpingcastle.api.IChannel;
|
import com.minelittlepony.jumpingcastle.api.IChannel;
|
||||||
import com.minelittlepony.jumpingcastle.api.IMessage;
|
import com.minelittlepony.jumpingcastle.api.IMessage;
|
||||||
import com.minelittlepony.jumpingcastle.api.IMessageHandler;
|
import com.minelittlepony.jumpingcastle.api.IMessageHandler;
|
||||||
|
import com.minelittlepony.unicopia.Race;
|
||||||
import com.minelittlepony.unicopia.player.IPlayer;
|
import com.minelittlepony.unicopia.player.IPlayer;
|
||||||
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
|
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
|
||||||
|
|
||||||
|
@ -16,8 +17,12 @@ public class MsgRequestCapabilities implements IMessage, IMessageHandler<MsgRequ
|
||||||
@Expose
|
@Expose
|
||||||
public UUID senderId;
|
public UUID senderId;
|
||||||
|
|
||||||
public MsgRequestCapabilities(EntityPlayer player) {
|
@Expose
|
||||||
|
public Race race;
|
||||||
|
|
||||||
|
public MsgRequestCapabilities(EntityPlayer player, Race preferredRace) {
|
||||||
senderId = player.getGameProfile().getId();
|
senderId = player.getGameProfile().getId();
|
||||||
|
race = preferredRace;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -25,6 +30,8 @@ public class MsgRequestCapabilities implements IMessage, IMessageHandler<MsgRequ
|
||||||
System.out.println("[SERVER] Sending capabilities to player id " + senderId);
|
System.out.println("[SERVER] Sending capabilities to player id " + senderId);
|
||||||
IPlayer player = PlayerSpeciesList.instance().getPlayer(senderId);
|
IPlayer player = PlayerSpeciesList.instance().getPlayer(senderId);
|
||||||
|
|
||||||
|
player.setPlayerSpecies(message.race);
|
||||||
|
|
||||||
channel.respond(new MsgPlayerCapabilities(player), senderId);
|
channel.respond(new MsgPlayerCapabilities(player), senderId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue