[1.7.10] Needed In Water v1.3

svk

1,185
2
Подобие thirst мода, со своими плюсами:

- вода расходуется по разному:
--- пустыня +1 ступень
--- савана +0,5 ступеня
--- красная пустыня +1,5 ступеня
--- зимние биомы +0,3 ступеня
--- при беге +1 ступень
--- при высоте >95 +0,5 ступеня
--- при высоте >126 + 0.5 ступеня
- в разных биомах разная вода, со своими путями отчистки.
- в игре присутствует 3 разных фильтра: земляной, угольный, фильтр обратного осмоса.

Краткое ознакомление:
[youtube]Bp2Q5caKqGE[/youtube]

Недочёты:
- Мод писался под себя, поэтому крафта бутылок и фильтра обратного осмоса отсутствует.
- Так-же бутылки пластиковые :D

Планы на будущее:
- Аппарат для выпаривания солёной воды
- Очиститель
- Звуки и анимация при питие

P.S. "Кому не лень, можете доработать: создать крафт бутылок, добавить конфиг и изменить текстуры бутылок."
P.S.S. "Все стандартные настройки в BaseClassMod.class".

src: https://github.com/svk2140/NeededInWater
 
прикольно могу помочь но ты както раз писал про набор в команду по разработке мода на оружие я могу быть как и кодером так и моделлером(лучше моделлером) можешь скинуть коды я посмотрю может дополню
[merge_posts_bbcode]Добавлено: 29.05.2015 15:15:38[/merge_posts_bbcode]

и ещё,лучше модели делать в obj а не в java коде в obj удобнее я просто видел видео с оружием и там модель была как будто в течне сделана
 
1,683
1
Боже,забейте меня топорами
Код:
package com.svk.NeededInWater.packets;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageCodec;

import java.util.Collections;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.LinkedList;
import java.util.List;

import com.svk.NeededInWater.packets.packets.AbstractPacket;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.INetHandler;
import net.minecraft.network.NetHandlerPlayServer;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.network.FMLEmbeddedChannel;
import cpw.mods.fml.common.network.FMLOutboundHandler;
import cpw.mods.fml.common.network.FMLOutboundHandler.OutboundTarget;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.common.network.internal.FMLProxyPacket;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

@Sharable
public class PacketPipeline extends MessageToMessageCodec {

   private EnumMap channels;
   private LinkedList packets = new LinkedList();
   private boolean isPostInitialised = false;


   public boolean registerPacket(Class clazz) {
      if(this.packets.size() > 256) {
         return false;
      } else if(this.packets.contains(clazz)) {
         return false;
      } else if(this.isPostInitialised) {
         return false;
      } else {
         this.packets.add(clazz);
         return true;
      }
   }

   protected void encode(ChannelHandlerContext ctx, Object obj, List out) throws Exception {//(ChannelHandlerContext ctx, Object msg, List out
       AbstractPacket msg = (AbstractPacket) obj;
       ByteBuf buffer = Unpooled.buffer();
      Class clazz = msg.getClass();
      if(!this.packets.contains(msg.getClass())) {
         throw new NullPointerException("No Packet Registered for: " + msg.getClass().getCanonicalName());
      } else {
         byte discriminator = (byte)this.packets.indexOf(clazz);
         buffer.writeByte(discriminator);
         msg.encodeInto(ctx, buffer);
         FMLProxyPacket proxyPacket = new FMLProxyPacket(buffer.copy(), (String)ctx.channel().attr(NetworkRegistry.FML_CHANNEL).get());
         out.add(proxyPacket);
      }
   }

   protected void decode(ChannelHandlerContext ctx, Object obj, List out) throws Exception {
       FMLProxyPacket msg = (FMLProxyPacket) obj;
      ByteBuf payload = msg.payload();
      byte discriminator = payload.readByte();
      Class clazz = (Class)this.packets.get(discriminator);
      if(clazz == null) {
         throw new NullPointerException("No packet registered for discriminator: " + discriminator);
      } else {
         AbstractPacket pkt = (AbstractPacket)clazz.newInstance();
         pkt.decodeInto(ctx, payload.slice());
         switch(PacketPipeline.NamelessClass1460521118.$SwitchMap$cpw$mods$fml$relauncher$Side[FMLCommonHandler.instance().getEffectiveSide().ordinal()]) {
         case 1:
            EntityPlayer player1 = this.getClientPlayer();
            pkt.handleClientSide(player1);
            break;
         case 2:
            INetHandler netHandler = (INetHandler)ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();
            EntityPlayerMP player = ((NetHandlerPlayServer)netHandler).playerEntity;
            pkt.handleServerSide(player);
         }

         out.add(pkt);
      }
   }

   public void initialise() {
      this.channels = NetworkRegistry.INSTANCE.newChannel("vol", new ChannelHandler[]{this});
   }

   public void postInitialise() {
      if(!this.isPostInitialised) {
         this.isPostInitialised = true;
         Collections.sort(this.packets, new Comparator() {
            public int compare(Object o1, Object o2) {
                Class clazz1 = (Class) o1;
                Class clazz2 = (Class) o2;
               int com = String.CASE_INSENSITIVE_ORDER.compare(clazz1.getCanonicalName(), clazz2.getCanonicalName());
               if(com == 0) {
                  com = clazz1.getCanonicalName().compareTo(clazz2.getCanonicalName());
               }

               return com;
            }
         });
      }
   }

   @SideOnly(Side.CLIENT)
   private EntityPlayer getClientPlayer() {
      return Minecraft.getMinecraft().thePlayer;
   }

   public void sendToAll(AbstractPacket message) {
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(OutboundTarget.ALL);
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).writeAndFlush(message);
   }

   public void sendTo(AbstractPacket message, EntityPlayerMP player) {
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(OutboundTarget.PLAYER);
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(player);
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).writeAndFlush(message);
   }

   public void sendToAllAround(AbstractPacket message, TargetPoint point) {
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(OutboundTarget.ALLAROUNDPOINT);
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(point);
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).writeAndFlush(message);
   }

   public void sendToDimension(AbstractPacket message, int dimensionId) {
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(OutboundTarget.DIMENSION);
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(Integer.valueOf(dimensionId));
      ((FMLEmbeddedChannel)this.channels.get(Side.SERVER)).writeAndFlush(message);
   }

   public void sendToServer(AbstractPacket message) {
      ((FMLEmbeddedChannel)this.channels.get(Side.CLIENT)).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(OutboundTarget.TOSERVER);
      ((FMLEmbeddedChannel)this.channels.get(Side.CLIENT)).writeAndFlush(message);
   }

   // $FF: synthetic class
   static class NamelessClass1460521118 {

      // $FF: synthetic field
      static final int[] $SwitchMap$cpw$mods$fml$relauncher$Side = new int[Side.values().length];


      static {
         try {
            $SwitchMap$cpw$mods$fml$relauncher$Side[Side.CLIENT.ordinal()] = 1;
         } catch (NoSuchFieldError var2) {
            ;
         }

         try {
            $SwitchMap$cpw$mods$fml$relauncher$Side[Side.SERVER.ordinal()] = 2;
         } catch (NoSuchFieldError var1) {
            ;
         }

      }
   }
}
 
808
3
124
Попахивает? Я б сказал, что воняет)
С другой стороны, декомпилирована там только система передачи пакетов, так что не вижу ничего плохого.
 
2,955
12
Нет, ну офигеть, главное что работает и все. Я тоже могу понаписать много говнокода и костылей и сказать: "Главное что работает". Нет, нифига, не самое главное. Как работает тоже очень важно.
 

svk

1,185
2
А я и не говорил, что это не важно. Какое отличие в работе?
 
2,955
12
Сравни говнокод и нормальный код. А вообще это уже не моё дело, не хочу поливать тебя грязью.
 

svk

1,185
2
Щас поправлю всё...
[merge_posts_bbcode]Добавлено: 29.05.2015 19:17:57[/merge_posts_bbcode]

Исправлю WaterScale, EventSpectatorThirst и это
 
1,683
1
Я тебе пулл кинул,заменив elseif на switch-case.твоё дело,по-моему он не обязателен(оба варианта годны).Сам выбирай
 

svk

1,185
2
WTF, когда я пытался это сделать, у меня написало, что switch не работает с объектами данного типа 0_0
[merge_posts_bbcode]Добавлено: 29.05.2015 19:59:58[/merge_posts_bbcode]

if более красиво выглядит. По производительности, есть разница?
 

svk

1,185
2
С числами это более удобно, но не в данном случае. В данном случае всё начинает перемешиваться...
 
1,683
1
Как хочешь.А ещё вопрос-куда ты торопился?Куча говнокода ошибок.Даже орфографических
 

svk

1,185
2
Dovakin написал(а):
Как хочешь.А ещё вопрос-куда ты торопился?Куча говнокода ошибок.Даже орфографических
Не знаю, у меня всегда мало времени, и приходится всё в темпе делать...
Если не сложно, покажи где :D
 
Сверху