Search in sources :

Example 36 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class AbstractModItemArmour method getArmorModel.

@Override
@SideOnly(Side.CLIENT)
public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack stack, int armorSlot) {
    if (!SkinNBTHelper.stackHasSkinData(stack)) {
        return null;
    }
    SkinPointer skinData = SkinNBTHelper.getSkinPointerFromStack(stack);
    AbstractModelSkin targetModel = null;
    SkinModelRenderer emr = SkinModelRenderer.INSTANCE;
    Skin data = emr.getCustomArmourItemData(skinData);
    if (data == null) {
        return null;
    }
    targetModel = emr.getModelForEquipmentType(data.getSkinType());
    if (targetModel == null) {
        return null;
    }
    targetModel.npcSkinData = data;
    targetModel.npcDyeData = skinData.getSkinDye();
    return targetModel;
}
Also used : SkinModelRenderer(riskyken.armourersWorkshop.client.render.SkinModelRenderer) SkinPointer(riskyken.armourersWorkshop.common.skin.data.SkinPointer) AbstractModelSkin(riskyken.armourersWorkshop.client.model.skin.AbstractModelSkin) Skin(riskyken.armourersWorkshop.common.skin.data.Skin) AbstractModelSkin(riskyken.armourersWorkshop.client.model.skin.AbstractModelSkin) SideOnly(cpw.mods.fml.relauncher.SideOnly)

Example 37 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class SkinIOUtils method recoverSkins.

public static void recoverSkins(EntityPlayer player) {
    player.addChatComponentMessage(new ChatComponentText("Starting skin recovery."));
    File skinDir = getSkinDatabaseDirectory();
    if (skinDir.exists() & skinDir.isDirectory()) {
        File recoverDir = new File(System.getProperty("user.dir"), "recovered-skins");
        if (!recoverDir.exists()) {
            recoverDir.mkdirs();
        }
        File[] skinFiles = skinDir.listFiles();
        player.addChatComponentMessage(new ChatComponentText(String.format("Found %d skins to be recovered.", skinFiles.length)));
        player.addChatComponentMessage(new ChatComponentText("Working..."));
        int unnamedSkinCount = 0;
        int successCount = 0;
        int failCount = 0;
        for (int i = 0; i < skinFiles.length; i++) {
            File skinFile = skinFiles[i];
            Skin skin = loadSkinFromFile(skinFile);
            if (skin != null) {
                String fileName = skin.getProperties().getPropertyString(Skin.KEY_FILE_NAME, null);
                String customName = skin.getProperties().getPropertyString(Skin.KEY_CUSTOM_NAME, null);
                if (!StringUtils.isNullOrEmpty(fileName)) {
                    fileName = makeFileNameValid(fileName);
                    File newSkinFile = new File(recoverDir, fileName + SKIN_FILE_EXTENSION);
                    if (newSkinFile.exists()) {
                        int nameCount = 0;
                        while (true) {
                            nameCount++;
                            newSkinFile = new File(recoverDir, fileName + "-" + nameCount + SKIN_FILE_EXTENSION);
                            if (!newSkinFile.exists()) {
                                break;
                            }
                        }
                    }
                    saveSkinToFile(newSkinFile, skin);
                    successCount++;
                    continue;
                }
                if (!StringUtils.isNullOrEmpty(customName)) {
                    customName = makeFileNameValid(customName);
                    File newSkinFile = new File(recoverDir, customName + SKIN_FILE_EXTENSION);
                    if (newSkinFile.exists()) {
                        int nameCount = 0;
                        while (true) {
                            nameCount++;
                            newSkinFile = new File(recoverDir, customName + "-" + nameCount + SKIN_FILE_EXTENSION);
                            if (!newSkinFile.exists()) {
                                break;
                            }
                        }
                    }
                    saveSkinToFile(newSkinFile, skin);
                    successCount++;
                    continue;
                }
                unnamedSkinCount++;
                saveSkinToFile(new File(recoverDir, "unnamed-skin-" + unnamedSkinCount + SKIN_FILE_EXTENSION), skin);
                successCount++;
            } else {
                failCount++;
            }
        }
        player.addChatComponentMessage(new ChatComponentText("Finished skin recovery."));
        player.addChatComponentMessage(new ChatComponentText(String.format("%d skins were recovered and %d fail recovery.", successCount, failCount)));
    } else {
        player.addChatComponentMessage(new ChatComponentText("No skins found to recover."));
    }
}
Also used : Skin(riskyken.armourersWorkshop.common.skin.data.Skin) ChatComponentText(net.minecraft.util.ChatComponentText) LibraryFile(riskyken.armourersWorkshop.common.library.LibraryFile) File(java.io.File)

Example 38 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class SkinIOUtils method loadSkinFromFile.

public static Skin loadSkinFromFile(File file) {
    DataInputStream stream = null;
    Skin skin = null;
    try {
        stream = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
        skin = SkinSerializer.readSkinFromStream(stream);
    } catch (FileNotFoundException e) {
        ModLogger.log(Level.WARN, "Skin file not found.");
        ModLogger.log(Level.WARN, file);
    } catch (IOException e) {
        ModLogger.log(Level.ERROR, "Skin file load failed.");
        e.printStackTrace();
    } catch (NewerFileVersionException e) {
        ModLogger.log(Level.ERROR, "Can not load skin file it was saved in newer version.");
        e.printStackTrace();
    } catch (InvalidCubeTypeException e) {
        ModLogger.log(Level.ERROR, "Unable to load skin. Unknown cube types found.");
        e.printStackTrace();
    } catch (Exception e) {
        ModLogger.log(Level.ERROR, "Unable to load skin. Unknown error.");
        e.printStackTrace();
    } finally {
        IOUtils.closeQuietly(stream);
    }
    return skin;
}
Also used : InvalidCubeTypeException(riskyken.armourersWorkshop.common.exception.InvalidCubeTypeException) BufferedInputStream(java.io.BufferedInputStream) FileNotFoundException(java.io.FileNotFoundException) Skin(riskyken.armourersWorkshop.common.skin.data.Skin) IOException(java.io.IOException) DataInputStream(java.io.DataInputStream) NewerFileVersionException(riskyken.armourersWorkshop.common.exception.NewerFileVersionException) FileInputStream(java.io.FileInputStream) NewerFileVersionException(riskyken.armourersWorkshop.common.exception.NewerFileVersionException) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) InvalidCubeTypeException(riskyken.armourersWorkshop.common.exception.InvalidCubeTypeException)

Example 39 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class GuiMiniArmourerBuildingModel method renderModels.

private void renderModels(int mouseX, int mouseY) {
    float scale = 0.0625F;
    GL11.glPushMatrix();
    GL11.glTranslatef(parent.width / 2, parent.height / 2, 500.0F);
    GL11.glScalef((float) (-zoom), (float) zoom, (float) zoom);
    GL11.glRotatef(180F, 0F, 1F, 0F);
    GL11.glRotatef(pitch, 1.0F, 0.0F, 0.0F);
    GL11.glRotatef(rotation, 0F, 1F, 0F);
    GL11.glTranslated(0, 1 * scale, 0);
    GL11.glScalef(-1, -1, 1);
    if (hoverCubeId != 0 && renderCubes != null) {
        int cubeId = (int) Math.ceil((double) hoverCubeId / 6);
        int cubeFace = cubeId * 6 - hoverCubeId;
        if (cubeId - 1 < renderCubes.size() & cubeId - 1 >= 0) {
            MiniCube tarCube = renderCubes.get(cubeId - 1);
            MiniCube newCube = new MiniCube(CubeRegistry.INSTANCE.getCubeFormId((byte) 0));
            ForgeDirection dir = GuiMiniArmourerHelper.getDirectionForCubeFace(cubeFace);
            newCube.setX((byte) (tarCube.getX() + dir.offsetX));
            newCube.setY((byte) (tarCube.getY() + dir.offsetY));
            newCube.setZ((byte) (tarCube.getZ() + dir.offsetZ));
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            IRenderBuffer buff = RenderBridge.INSTANCE;
            buff.startDrawingQuads();
            renderArmourBlock((byte) newCube.getX(), (byte) newCube.getY(), (byte) newCube.getZ(), newCube.getColour(), scale, true);
            buff.draw();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            GL11.glDisable(GL11.GL_BLEND);
        }
    }
    // Gui.drawRect(0, 0, parent.width, parent.height, 0xFF000000);
    drawBuildingCubes(false);
    GL11.glScalef(-1, -1, 1);
    RenderHelper.enableStandardItemLighting();
    mc.renderEngine.bindTexture(mc.thePlayer.getLocationSkin());
    if (skinPointer != null) {
        Skin skin = ClientSkinCache.INSTANCE.getSkin(skinPointer);
        if (skin != null) {
            for (int i = 0; i < skin.getParts().size(); i++) {
                SkinPart part = skin.getParts().get(i);
                if (part.getPartType() == currentSkinPartType) {
                    SkinPartRenderer.INSTANCE.renderPart(part, scale, skinPointer.getSkinDye(), null, false);
                }
            }
        }
    }
    if (currentSkinPartType != null) {
        GL11.glTranslated(0, -currentSkinPartType.getBuildingSpace().getY() * scale, 0);
        currentSkinPartType.renderBuildingGuide(scale, true, false);
    // SkinRenderHelper.renderBuildingGrid(currentSkinPartType, scale);
    }
    /*
        if (currentSkinType != null) {
            SkinRenderHelper.renderBuildingGuide(currentSkinType, scale, true, false);
            SkinRenderHelper.renderBuildingGrid(currentSkinType, scale);
        }
        */
    GL11.glPopMatrix();
}
Also used : ForgeDirection(net.minecraftforge.common.util.ForgeDirection) MiniCube(riskyken.armourersWorkshop.common.data.MiniCube) IRenderBuffer(riskyken.armourersWorkshop.client.render.IRenderBuffer) Skin(riskyken.armourersWorkshop.common.skin.data.Skin) SkinPart(riskyken.armourersWorkshop.common.skin.data.SkinPart)

Example 40 with Skin

use of riskyken.armourersWorkshop.common.skin.data.Skin in project Armourers-Workshop by RiskyKen.

the class GuiSkinLibrary method drawScreen.

@Override
public void drawScreen(int mouseX, int mouseY, float partialTickTime) {
    int oldMouseX = mouseX;
    int oldMouseY = mouseY;
    if (isDialogOpen()) {
        mouseX = mouseY = 0;
    }
    GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
    super.drawScreen(mouseX, mouseY, partialTickTime);
    GL11.glPopAttrib();
    ILibraryManager libraryManager = ArmourersWorkshop.proxy.libraryManager;
    ArrayList<LibraryFile> files = libraryManager.getServerPublicFileList().getFileList();
    loadSaveButton.enabled = true;
    if (isLoading()) {
        loadSaveButton.displayString = GuiHelper.getLocalizedControlName(armourLibrary.getInventoryName(), "load");
        if (fileList.getSelectedListEntry() == null || ((GuiFileListItem) fileList.getSelectedListEntry()).getFile().directory) {
            loadSaveButton.displayString = "";
            loadSaveButton.enabled = false;
        }
    } else {
        loadSaveButton.displayString = GuiHelper.getLocalizedControlName(armourLibrary.getInventoryName(), "save");
    }
    if (!((Slot) inventorySlots.inventorySlots.get(36)).getHasStack() & !armourLibrary.isCreativeLibrary()) {
        loadSaveButton.displayString = "";
        loadSaveButton.enabled = false;
    }
    if (fileSwitchType == LibraryFileType.LOCAL) {
        files = libraryManager.getClientPublicFileList().getFileList();
        if (!mc.isIntegratedServerRunning()) {
            loadSaveButton.enabled = false;
            if (isLoading()) {
                loadSaveButton.enabled = ConfigHandler.allowClientsToUploadSkins;
            } else {
                loadSaveButton.enabled = ConfigHandler.allowClientsToDownloadSkins;
            }
        }
    } else {
        loadSaveButton.enabled = true;
    }
    if (fileSwitchType == LibraryFileType.SERVER_PRIVATE) {
        files = libraryManager.getServerPrivateFileList(mc.thePlayer).getFileList();
    }
    String typeFilter = dropDownList.getListSelectedItem().tag;
    ISkinType skinTypeFilter = SkinTypeRegistry.INSTANCE.getSkinTypeFromRegistryName(typeFilter);
    lastSkinType = skinTypeFilter;
    lastSearchText = searchTextbox.getText();
    IGuiListItem selectedItem = fileList.getSelectedListEntry();
    if (selectedItem != null) {
    // deleteButton.enabled = !((GuiFileListItem)selectedItem).getFile().readOnly;
    } else {
    // deleteButton.enabled = false;
    }
    fileList.setSelectedIndex(-1);
    fileList.clearList();
    if (!(currentFolder.equals("/") | currentFolder.equals(getPrivateRoot(player)))) {
        fileList.addListItem(new GuiFileListItem(new LibraryFile("../", "", null, true)));
        if (selectedItem != null && ((GuiFileListItem) selectedItem).getFile().fileName.equals("../")) {
            fileList.setSelectedIndex(0);
        }
    }
    if (files != null) {
        for (int i = 0; i < files.size(); i++) {
            LibraryFile file = files.get(i);
            if (skinTypeFilter == null | skinTypeFilter == file.skinType) {
                if (file.filePath.equals(currentFolder)) {
                    if (!searchTextbox.getText().equals("")) {
                        if (file.fileName.toLowerCase().contains(searchTextbox.getText().toLowerCase())) {
                            fileList.addListItem(new GuiFileListItem(file));
                            if (selectedItem != null && ((GuiFileListItem) selectedItem).getFile() == file) {
                                fileList.setSelectedIndex(fileList.getSize() - 1);
                            }
                        }
                    } else {
                        fileList.addListItem(new GuiFileListItem(file));
                        if (selectedItem != null && ((GuiFileListItem) selectedItem).getFile() == file) {
                            fileList.setSelectedIndex(fileList.getSize() - 1);
                        }
                    }
                }
            }
        }
    }
    scrollAmount = scrollbar.getValue();
    fileList.setScrollPercentage(scrollbar.getPercentageValue());
    for (int i = 0; i < buttonList.size(); i++) {
        GuiButton button = (GuiButton) buttonList.get(i);
        if (button instanceof GuiIconButton) {
            ((GuiIconButton) button).drawRollover(mc, mouseX, mouseY);
        }
    }
    if (showModelPreviews()) {
        GuiFileListItem item = (GuiFileListItem) fileList.getSelectedListEntry();
        if (item != null && !item.getFile().isDirectory()) {
            SkinIdentifier identifier = new SkinIdentifier(0, new LibraryFile(item.getFile().getFullName()), 0, null);
            Skin skin = ClientSkinCache.INSTANCE.getSkin(identifier, true);
            if (skin != null) {
                SkinPointer skinPointer = new SkinPointer(identifier);
                int listRight = this.width - INVENTORY_WIDTH - PADDING * 5;
                listRight = MathHelper.clamp_int(listRight, 0, 200);
                listRight += INVENTORY_WIDTH + PADDING * 2 + 10;
                int listTop = TITLE_HEIGHT + 14 + PADDING * 2;
                int xSize = (this.width - listRight - PADDING) / 2;
                int ySize = (this.height - listTop - PADDING) / 2;
                float x = listRight + xSize;
                float y = listTop + ySize;
                float scale = 1F;
                scale = 1 * Math.min(xSize, ySize);
                ScaledResolution scaledResolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
                int startX = listRight + PADDING;
                int startY = listTop + PADDING;
                int tarW = (int) (x + xSize);
                int tarH = (int) (y + ySize);
                drawRect(startX, startY, tarW, tarH, 0x77777777);
                if (scale > 8) {
                    GL11.glPushMatrix();
                    GL11.glTranslatef((float) x, (float) y, 500.0F);
                    GL11.glScalef(10, 10, -10);
                    GL11.glRotatef(30, 1, 0, 0);
                    GL11.glRotatef(45, 0, 1, 0);
                    float rotation = (float) ((double) System.currentTimeMillis() / 10 % 360);
                    GL11.glRotatef(rotation, 0.0F, 1.0F, 0.0F);
                    RenderHelper.enableStandardItemLighting();
                    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                    GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
                    GL11.glEnable(GL11.GL_NORMALIZE);
                    GL11.glEnable(GL11.GL_COLOR_MATERIAL);
                    ModRenderHelper.enableAlphaBlend();
                    SkinItemRenderHelper.renderSkinAsItem(skin, skinPointer, true, false, tarW - startX, tarH - startY);
                    GL11.glPopAttrib();
                    GL11.glPopMatrix();
                }
            }
        }
    }
    GL11.glColor4f(1, 1, 1, 1);
    if (isDialogOpen()) {
        this.dialog.draw(oldMouseX, oldMouseY, partialTickTime);
    }
}
Also used : IGuiListItem(riskyken.armourersWorkshop.client.gui.controls.IGuiListItem) ISkinType(riskyken.armourersWorkshop.api.common.skin.type.ISkinType) SkinPointer(riskyken.armourersWorkshop.common.skin.data.SkinPointer) ILibraryManager(riskyken.armourersWorkshop.common.library.ILibraryManager) SkinIdentifier(riskyken.armourersWorkshop.common.skin.data.SkinIdentifier) ScaledResolution(net.minecraft.client.gui.ScaledResolution) GuiFileListItem(riskyken.armourersWorkshop.client.gui.controls.GuiFileListItem) GuiButton(net.minecraft.client.gui.GuiButton) GuiIconButton(riskyken.armourersWorkshop.client.gui.controls.GuiIconButton) Slot(net.minecraft.inventory.Slot) Skin(riskyken.armourersWorkshop.common.skin.data.Skin) LibraryFile(riskyken.armourersWorkshop.common.library.LibraryFile)

Aggregations

Skin (riskyken.armourersWorkshop.common.skin.data.Skin)69 SkinPointer (riskyken.armourersWorkshop.common.skin.data.SkinPointer)19 ItemStack (net.minecraft.item.ItemStack)11 ISkinPointer (riskyken.armourersWorkshop.api.common.skin.data.ISkinPointer)11 LibraryFile (riskyken.armourersWorkshop.common.library.LibraryFile)10 SkinIdentifier (riskyken.armourersWorkshop.common.skin.data.SkinIdentifier)10 SkinPart (riskyken.armourersWorkshop.common.skin.data.SkinPart)10 ForgeDirection (net.minecraftforge.common.util.ForgeDirection)9 IOException (java.io.IOException)6 ISkinIdentifier (riskyken.armourersWorkshop.api.common.skin.data.ISkinIdentifier)6 AbstractModelSkin (riskyken.armourersWorkshop.client.model.skin.AbstractModelSkin)6 ItemSkin (riskyken.armourersWorkshop.common.items.ItemSkin)6 Color (java.awt.Color)4 ByteArrayInputStream (java.io.ByteArrayInputStream)4 DataInputStream (java.io.DataInputStream)4 AbstractClientPlayer (net.minecraft.client.entity.AbstractClientPlayer)4 BakedSkin (riskyken.armourersWorkshop.client.model.bake.ModelBakery.BakedSkin)4 SideOnly (cpw.mods.fml.relauncher.SideOnly)3 BufferedInputStream (java.io.BufferedInputStream)3 ArrayList (java.util.ArrayList)3