20 août 2013, 12:42

@‘elias54’:

#6. BONUS(6. BONUS)

Pour le bonus, pas grand chose… Ah si ! Ajouter un overlay pour donner un petit effet à votre zoom ! 😄

Overlay ? C’est quoi ça ? 😮
-Ça : http://puu.sh/46id6.png

Pour se faire, c’est simple, ajoutez cette ligne tout en haut de votre TickHandler :


public static final ResourceLocation zoomOverlay = new ResourceLocation("votreModID", "textures/blur/votreZoomOverlay.png");

Comme vous l’aurez compris il s’agit d’une texture que nous allons imposer à l’écran ! 🙂

%(#FF0000)[-ATTENTION-
La texture de l’overlay doit être en 256x256 ! (si vous faites un téléscope (par exemple), autant vous donner l’overlay : http://puu.sh/46iD2.png Maintenant vous avez un exemple de ce que je veux dire. En effet, la texture semble écrasé, mais in game elle ne le sera pas, car grâce à la méthode que je vais vous montrer, nous allons “étirer” la texture histoire qu’elle ressemble à quelque chose ! 🙂 )]

Donc dans votre classe, ajoutez cette méthode :


public static void renderTextureOverlay(ResourceLocation s, float f)
{
Minecraft minecraft = FMLClientHandler.instance().getClient();
ScaledResolution scaledresolution = new ScaledResolution(minecraft.gameSettings, minecraft.displayWidth, minecraft.displayHeight);
int i = scaledresolution.getScaledWidth();
int j = scaledresolution.getScaledHeight();
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
GL11.glDisable(GL11.GL_ALPHA_TEST);
minecraft.func_110434_K().func_110577_a(s);
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(0.0D, j, -90D, 0.0D, 1.0D);
tessellator.addVertexWithUV(i, j, -90D, 1.0D, 1.0D);
tessellator.addVertexWithUV(i, 0.0D, -90D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D);
tessellator.draw();
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
}

On a presque fini ! Nous avons préparé ce dont nous avons besoin. 🙂

Créez une nouvelle condition en dessous de :


if (type.equals(EnumSet.of(TickType.CLIENT)))
{
}

Elle est exactement la même, juste à remplacer CLIENT par RENDER, donc comme ceci :


if (type.equals(EnumSet.of(TickType.RENDER)))
{
}

Et dans cette condition nous allons ajouter encore une AUTRE condition qui va appeler la méthode que nous avons faite ci dessus ! 😄


if(VotreClassePrincipale.zoom && minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
{
renderTextureOverlay(zoomOverlay, 1.0F);
}

C’est tout ?!
-Oui, déjà fini ^^

Voilà ce à quoi votre classe TickHandler devrait ressembler :


public class TickClientHandler implements ITickHandler
{
public static final ResourceLocation zoomOverlay = new ResourceLocation("votreModID", "textures/blur/votreZoomOverlay.png"); //256x256 la texture je vous le rappel ! :D

@Override
public void tickStart(EnumSet <ticktype>type, Object... tickData) {
}

@Override
public void tickEnd(EnumSet <ticktype>type, Object... tickData)
{
final Minecraft minecraft = FMLClientHandler.instance().getClient();
final EntityPlayerSP player = minecraft.thePlayer;
if (type.equals(EnumSet.of(TickType.CLIENT)))
{
if(VotreClassePrincipale.zoom)
{
if(minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
{
zoom(6F);
}
}else {
zoom(1.0F);
}
}
if (type.equals(EnumSet.of(TickType.RENDER)))
{
if(VotreClassePrincipale.zoom && minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null)
{
renderTextureOverlay(zoomOverlay, 1.0F);
}
}
}

public static void renderTextureOverlay(ResourceLocation s, float f)
{
Minecraft minecraft = FMLClientHandler.instance().getClient();
ScaledResolution scaledresolution = new ScaledResolution(minecraft.gameSettings, minecraft.displayWidth, minecraft.displayHeight);
int i = scaledresolution.getScaledWidth();
int j = scaledresolution.getScaledHeight();
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
GL11.glDisable(GL11.GL_ALPHA_TEST);
minecraft.func_110434_K().func_110577_a(s);
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(0.0D, j, -90D, 0.0D, 1.0D);
tessellator.addVertexWithUV(i, j, -90D, 1.0D, 1.0D);
tessellator.addVertexWithUV(i, 0.0D, -90D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D);
tessellator.draw();
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, f);
}

@Override
public EnumSet <ticktype>ticks() {
// TODO Auto-generated method stub
return EnumSet.of(TickType.RENDER, TickType.CLIENT);
}

public static void zoom(float value)
{
ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, value, "cameraZoom");
}

@Override
public String getLabel() {
return "TickClientHandler";
}

}

```</ticktype></ticktype></ticktype>

Le public ```java
static final ResourceLocation zoomOverlay = new ResourceLocation(“votreModID”, “textures/blur/votreZoomOverlay.png”);

et le ```java
minecraft.func_110434_K().func_110577_a(s);
``` et```java
public static void renderTextureOverlay(ResourceLocation s, float f)
``` sont soulignés en rouge , je suppose qu'ils n'existent pas en 1.5.2 , donc par quoi les remplacer ?