Skip to content

Commit

Permalink
Инвентарь скиллов меняет свое содержимое в зависимости от выбранной с…
Browse files Browse the repository at this point in the history
…таты
  • Loading branch information
RareScrap committed Dec 18, 2017
1 parent 38c60d9 commit b986057
Show file tree
Hide file tree
Showing 9 changed files with 142 additions and 44 deletions.
5 changes: 3 additions & 2 deletions src/main/java/rsstats/client/ClientProxy.java
Expand Up @@ -11,6 +11,7 @@
import rsstats.common.RSStats;
import rsstats.common.event.KeyHandler;
import rsstats.data.ExtendedPlayer;
import rsstats.inventory.container.MainContainer;

/**
* Прокси, исполняемый на стороне клиента
Expand All @@ -34,7 +35,7 @@ public Object getClientGuiElement(int ID, EntityPlayer player, World world, int
if (world instanceof WorldClient) {
// Ищем GUI, соответствующий данному ID
switch (ID) {
case RSStats.GUI: return new MainMenuGUI(player, player.inventory, ExtendedPlayer.get(player).statsInventory, ExtendedPlayer.get(player).skillsInventory);
case RSStats.GUI: return new MainMenuGUI(ExtendedPlayer.get(player), new MainContainer(player, player.inventory, ExtendedPlayer.get(player).statsInventory, ExtendedPlayer.get(player).skillsInventory));
/*
ВНИМАНИЕ! По туториалу, мне не нужно делать проверку в строке 25.
Более того, мне нужно свитч затолкать в CommonProxy. Но так как
Expand All @@ -51,6 +52,6 @@ public Object getClientGuiElement(int ID, EntityPlayer player, World world, int
public void registerKeyBindings() {
keyHandler = new KeyHandler();
FMLCommonHandler.instance().bus().register(keyHandler);
MinecraftForge.EVENT_BUS.register(new MainMenuGUI());
MinecraftForge.EVENT_BUS.register(new MainMenuGUI(null, new MainContainer()));
}
}
54 changes: 36 additions & 18 deletions src/main/java/rsstats/client/gui/MainMenuGUI.java
Expand Up @@ -7,16 +7,19 @@
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import rsstats.common.CommonProxy;
import rsstats.common.network.PacketShowSkillsByStat;
import rsstats.data.ExtendedPlayer;
import rsstats.inventory.SkillsInventory;
import rsstats.inventory.StatsInventory;
import rsstats.inventory.container.MainContainer;
import rsstats.items.SkillItem;

import java.util.List;

Expand All @@ -27,7 +30,7 @@
*/
public class MainMenuGUI extends InventoryEffectRenderer {
/** Расположение фона GUI */
public static final ResourceLocation background =
private static final ResourceLocation background =
new ResourceLocation("rsstats","textures/gui/StatsAndInvTab.png");

/** Длина GUI в пикселях. Defined as float, passed as int. */
Expand All @@ -36,21 +39,24 @@ public class MainMenuGUI extends InventoryEffectRenderer {
private float ySizeFloat;

private StatsInventory statsInventory;
public SkillsInventory skillsInventory;

private MainContainer mainContainer; // TODO: Рефакторить
public ExtendedPlayer player;
/** UnlocalozedName текущей выбранно статы */
private String current="";

/** Инвентарь для статов */
// Could use IInventory type to be more generic, but this way will save an import...
// Нужно для запроса кастомного имени инвентаря для отрисоки названия инвентаря
//private final StatsInventory statsInventory;

public MainMenuGUI(EntityPlayer player, InventoryPlayer inventoryPlayer, StatsInventory statsInventory, SkillsInventory skillsInventory) {
super(new MainContainer(player, inventoryPlayer, statsInventory, skillsInventory));
this.statsInventory = statsInventory;
this.allowUserInput = true;
}

public MainMenuGUI() {
super(new MainContainer());
public MainMenuGUI(ExtendedPlayer player, MainContainer mainContainer) {
super(mainContainer);
this.mainContainer = mainContainer;
this.allowUserInput = true;
this.player = player;
}

/**
Expand Down Expand Up @@ -188,20 +194,32 @@ protected void handleMouseClick(Slot p_146984_1_, int p_146984_2_, int p_146984_
super.handleMouseClick(p_146984_1_, p_146984_2_, p_146984_3_, p_146984_4_);
}


@Override
protected void renderToolTip(ItemStack p_146285_1_, int p_146285_2_, int p_146285_3_) {
//System.out.println("hoover");
super.renderToolTip(p_146285_1_, p_146285_2_, p_146285_3_);
protected void renderToolTip(ItemStack itemStack, int p_146285_2_, int p_146285_3_) {
Item item = itemStack.getItem();
if (!item.getUnlocalizedName().equals(current) && !(item instanceof SkillItem)) {
PacketShowSkillsByStat packet = new PacketShowSkillsByStat(itemStack.getItem().getUnlocalizedName());
CommonProxy.INSTANCE.sendToServer(packet);
current = itemStack.getItem().getUnlocalizedName();
}

super.renderToolTip(itemStack, p_146285_2_, p_146285_3_);
}

@Override
protected void drawHoveringText(List p_146283_1_, int p_146283_2_, int p_146283_3_, FontRenderer font) {
//System.out.println("hoover");
super.drawHoveringText(p_146283_1_, p_146283_2_, p_146283_3_, font);
}




/**
* Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
*
* @param p_73869_1_
* @param p_73869_2_
*/
@Override
protected void keyTyped(char p_73869_1_, int p_73869_2_) {
// TODO: Добавь отображение скиллов по нажатой цифре
super.keyTyped(p_73869_1_, p_73869_2_);
}
}
10 changes: 5 additions & 5 deletions src/main/java/rsstats/common/CommonProxy.java
Expand Up @@ -15,11 +15,10 @@
import cpw.mods.fml.relauncher.Side;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import static rsstats.common.RSStats.instance;
import static rsstats.common.RSStats.proxy;
import rsstats.common.event.KeyHandler;
import rsstats.common.network.PacketOpenRSStatsInventory;
import rsstats.common.network.PacketOpenSSPPage;
import rsstats.common.network.PacketShowSkillsByStat;
import rsstats.common.network.RollPacketToServer;
import rsstats.data.ExtendedPlayer;
import rsstats.inventory.container.MainContainer;
Expand All @@ -32,6 +31,9 @@
import java.util.ArrayList;
import java.util.List;

import static rsstats.common.RSStats.instance;
import static rsstats.common.RSStats.proxy;

/**
* Проки, содержащий код как для клиента, так и сервера
* @author RareScrap
Expand All @@ -48,6 +50,7 @@ public void preInit(FMLPreInitializationEvent event, ArrayList<DiceRoll> dices)
INSTANCE.registerMessage(RollPacketToServer.MessageHandler.class, RollPacketToServer.class, 0, Side.SERVER); // Регистрация сообщения о пробросе статы
INSTANCE.registerMessage(PacketOpenRSStatsInventory.MessageHandler.class, PacketOpenRSStatsInventory.class, 1, Side.SERVER);
INSTANCE.registerMessage(PacketOpenSSPPage.MessageHandler.class, PacketOpenSSPPage.class, 2, Side.SERVER);
INSTANCE.registerMessage(PacketShowSkillsByStat.MessageHandler.class, PacketShowSkillsByStat.class, 3, Side.SERVER);

// Инициализация предметов статов
StatItem strenghtStatItem = new StatItem(dices, "StrengthStatItem", "rsstats:strenght", "item.StrengthStatItem"); // 3 - rarescrap:StrenghtIcon_
Expand All @@ -69,8 +72,6 @@ public void preInit(FMLPreInitializationEvent event, ArrayList<DiceRoll> dices)
modificators.add(new RollModifier(-2, "Отсуствующий навык"));
dices.add(0, new DiceRoll(dices.get(0), dices.get(0).getPlayerName(), dices.get(0).getRollName(), modificators));

System.out.print("PIZDA " + dices.size());

// Инициализация предметов склиллов
SkillItem equitationSkillItem = new SkillItem(dices, "EquitationSkillItem", "rsstats:skills/Equitation", "item.EquitationSkillItem", agilityStatItem);
SkillItem lockpickingSkillItem = new SkillItem(dices, "LockpickingSkillItem", "rsstats:skills/Lockpicking", "item.LockpickingSkillItem", agilityStatItem);
Expand Down Expand Up @@ -129,7 +130,6 @@ public void postInit(FMLPostInitializationEvent event) {}

@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
System.out.print("PIZDA1"+ID+"\n");
switch (ID) {
case RSStats.GUI:
return new MainContainer(player, player.inventory, ExtendedPlayer.get(player).statsInventory, ExtendedPlayer.get(player).skillsInventory);
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/rsstats/common/RSStats.java
Expand Up @@ -7,7 +7,6 @@
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import net.minecraftforge.common.MinecraftForge;
import rsstats.client.gui.SSPPage;
import rsstats.common.event.TestEventHandler;
Expand Down Expand Up @@ -52,7 +51,7 @@ public class RSStats {
public static CommonProxy proxy;

/** Объект, регистриующий сообщения, которыми обмениваются клиент и сервер */
public static SimpleNetworkWrapper INSTANCE = new SimpleNetworkWrapper(MODID);
//public static SimpleNetworkWrapper INSTANCE = new SimpleNetworkWrapper(MODID);
/** Дайсы, которые будут использоваться в моде */
ArrayList<DiceRoll> dices;

Expand Down
Expand Up @@ -5,7 +5,6 @@
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import rsstats.common.RSStats;
import rsstats.inventory.container.MainContainer;

/**
Expand Down Expand Up @@ -57,8 +56,10 @@ public IMessage onMessage(PacketShowSkillsByStat message, MessageContext ctx) {
if (message.parentStatName == null)
throw new NullPointerException("parentStatName is null");

MainContainer serverMainContainer = RSStats.proxy.serverMainContainer;
serverMainContainer.setSkillsFor(message.parentStatName);
((MainContainer) ctx.getServerHandler().playerEntity.openContainer).getSkillsInventory().setSkillsFor(message.parentStatName);

//MainContainer serverMainContainer = RSStats.proxy.serverMainContainer;
//serverMainContainer.setSkillsFor(message.parentStatName);

return null;
}
Expand Down
11 changes: 5 additions & 6 deletions src/main/java/rsstats/data/ExtendedPlayer.java
Expand Up @@ -22,7 +22,7 @@ public class ExtendedPlayer implements IExtendedEntityProperties {
/** Каждый наследник {@link IExtendedEntityProperties} должен иметь индивидуальное имя */
private static final String INV_NAME = "StatsInventory";

private final EntityPlayer player;
private final EntityPlayer entityPlayer;

/** Инвентарь для статов */
public final StatsInventory statsInventory = new StatsInventory();
Expand All @@ -36,11 +36,11 @@ public class ExtendedPlayer implements IExtendedEntityProperties {
*/

public ExtendedPlayer(EntityPlayer player) {
this.player = player;
this.entityPlayer = player;
}

/**
* Used to register these extended properties for the player during EntityConstructing event
* Used to register these extended properties for the entityPlayer during EntityConstructing event
* This method is for convenience only; it will make your code look nicer
* @param player
*/
Expand All @@ -49,15 +49,15 @@ public static final void register(EntityPlayer player) {
}

/**
* Returns ExtendedPlayer properties for player
* Returns ExtendedPlayer properties for entityPlayer
* This method is for convenience only; it will make your code look nicer
*/
public static final ExtendedPlayer get(EntityPlayer player) {
return (ExtendedPlayer) player.getExtendedProperties(INV_NAME);
}

public boolean isServerSide() {
return this.player instanceof EntityPlayerMP;
return this.entityPlayer instanceof EntityPlayerMP;
}

// LOAD, SAVE =============================================================
Expand All @@ -77,5 +77,4 @@ public void loadNBTData(NBTTagCompound properties) {
@Override
public void init(Entity entity, World world) {
}

}
47 changes: 44 additions & 3 deletions src/main/java/rsstats/inventory/SkillsInventory.java
Expand Up @@ -7,9 +7,6 @@
import net.minecraftforge.common.util.Constants;
import rsstats.common.RSStats;
import rsstats.items.SkillItem;
import rsstats.utils.DiceRoll;

import java.util.ArrayList;

public class SkillsInventory extends StatsInventory {
/** The name your custom inventory will display in the GUI, possibly just "Inventory" */
Expand Down Expand Up @@ -166,4 +163,48 @@ public void readFromNBT(NBTTagCompound compound) {
}
}
}

/**
* Очищает {@link #inventory}, выставляя все его элементы null
*/
public void clearInventory() {
for (int i = 0; i < getSizeInventory(); i++) {
inventory[i] = null;
}

}

public void setSkillsFor(String parentStatName) {
clearInventory();

if ("item.StrengthStatItem".equals(parentStatName)) {
setInventorySlotContents(0, new ItemStack(GameRegistry.findItem(RSStats.MODID, "ClimbingSkillItem"), 1, 2));
} else if ("item.AgilityStatItem".equals(parentStatName)) {
setInventorySlotContents(0, new ItemStack(GameRegistry.findItem(RSStats.MODID, "EquitationSkillItem"), 1, 2));
setInventorySlotContents(1, new ItemStack(GameRegistry.findItem(RSStats.MODID, "LockpickingSkillItem"), 1, 2));
setInventorySlotContents(2, new ItemStack(GameRegistry.findItem(RSStats.MODID, "DrivingSkillItem"), 1, 2));
setInventorySlotContents(3, new ItemStack(GameRegistry.findItem(RSStats.MODID, "FightingSkillItem"), 1, 2));
setInventorySlotContents(4, new ItemStack(GameRegistry.findItem(RSStats.MODID, "DisguiseSkillItem"), 1, 2));
setInventorySlotContents(5, new ItemStack(GameRegistry.findItem(RSStats.MODID, "ThrowingSkillItem"), 1, 2));
setInventorySlotContents(6, new ItemStack(GameRegistry.findItem(RSStats.MODID, "PilotingSkillItem"), 1, 2));
setInventorySlotContents(7, new ItemStack(GameRegistry.findItem(RSStats.MODID, "SwimmingSkillItem"), 1, 2));
setInventorySlotContents(8, new ItemStack(GameRegistry.findItem(RSStats.MODID, "ShootingSkillItem"), 1, 2));
setInventorySlotContents(9, new ItemStack(GameRegistry.findItem(RSStats.MODID, "ShippingSkillItem"), 1, 2));
} else if ("item.IntelligenceStatItem".equals(parentStatName)) {
setInventorySlotContents(0, new ItemStack(GameRegistry.findItem(RSStats.MODID, "GamblingSkillItem"), 1, 2));
setInventorySlotContents(1, new ItemStack(GameRegistry.findItem(RSStats.MODID, "PerceptionSkillItem"), 1, 2));
setInventorySlotContents(2, new ItemStack(GameRegistry.findItem(RSStats.MODID, "SurvivalSkillItem"), 1, 2));
setInventorySlotContents(3, new ItemStack(GameRegistry.findItem(RSStats.MODID, "TrackingSkillItem"), 1, 2));
setInventorySlotContents(4, new ItemStack(GameRegistry.findItem(RSStats.MODID, "MedicineSkillItem"), 1, 2));
setInventorySlotContents(5, new ItemStack(GameRegistry.findItem(RSStats.MODID, "ProvocationSkillItem"), 1, 2));
setInventorySlotContents(6, new ItemStack(GameRegistry.findItem(RSStats.MODID, "InvestigationSkillItem"), 1, 2));
setInventorySlotContents(7, new ItemStack(GameRegistry.findItem(RSStats.MODID, "RepearSkillItem"), 1, 2));
setInventorySlotContents(8, new ItemStack(GameRegistry.findItem(RSStats.MODID, "StreetFlairSkillItem"), 1, 2));
} else if ("item.EnduranceStatItem".equals(parentStatName)) {

} else if ("item.CharacterStatItem".equals(parentStatName)) {
setInventorySlotContents(0, new ItemStack(GameRegistry.findItem(RSStats.MODID, "IntimidationSkillItem"), 1, 2));
setInventorySlotContents(1, new ItemStack(GameRegistry.findItem(RSStats.MODID, "DiplomacySkillItem"), 1, 2));
}
}
}

0 comments on commit b986057

Please sign in to comment.