예제 #1
0
  /** Handles the water game logic. */
  public void onUpdate(EntityPlayer par1EntityPlayer) {
    if (par1EntityPlayer.playerTemperature.getIsHot()) {
      baseWaterExhaustionValue = baseWaterExhaustionValueWhenIsHot;
    } else {
      baseWaterExhaustionValue = baseWaterExhaustionValueNormal;
    }

    int i = par1EntityPlayer.worldObj.difficultySetting;
    prevWaterLevel = waterLevel;

    if (waterExhaustionLevel > 4F) {
      waterExhaustionLevel -= 4F;

      if (i > 0) {
        waterLevel = Math.max(waterLevel - 1, 0);
      }
    }

    if (waterLevel <= 0) {
      waterTimer++;

      if (waterTimer >= 80) {
        if (par1EntityPlayer.getHealth() > 10
            || i >= 3
            || par1EntityPlayer.getHealth() > 1 && i >= 2) {
          par1EntityPlayer.attackEntityFrom(DamageSource.dehydrated, 1);
        }

        waterTimer = 0;
      }
    } else {
      waterTimer = 0;
    }
  }
  @Overwrite
  @SneakyThrows
  public void teleport(MC_Location loc) {
    if (loc != null) {
      plr.setVehicle(null);
      _SerializableLocation sloc =
          new _SerializableLocation(loc.x, loc.y, loc.z, loc.dimension, loc.yaw, loc.pitch);
      if (loc.dimension != this.plr.dimension) {
        int newDimen = loc.dimension;
        MC_EventInfo ei = new MC_EventInfo();
        PlayerWrapper pWrap = new PlayerWrapper(this.plr);

        for (Object var2 : _JoeUtils.plugins) {
          try {
            ((PluginInfo) var2).ref.onAttemptPlayerChangeDimension(pWrap, newDimen, ei);
          } catch (Throwable var8) {
            var8.printStackTrace();
          }
        }

        if (_JoeUtils.DebugMode) {
          String var21 =
              String.format(
                  "JKC DEBUG: --- DimensionChange (%s) to --- (%s) --- %s @ %s",
                  new Object[] {
                    _JoeUtils.GetDimensionName(plr.dimension),
                    _JoeUtils.GetDimensionName(newDimen),
                    plr.getName(),
                    _JoeUtils.GetEntityLocationDescription(plr)
                  });
          System.out.println(var21);
        }

        WorldServer localWorldFrom =
            MinecraftServer.getServer().getWorldServerByDimension(plr.dimension);
        localWorldFrom.getEntityTracker().removePlayer(plr);
        localWorldFrom.getPlayerChunkMap().removePlayer(plr);
        MinecraftServer.getServer().getThePlayerList().players.remove(plr);
        plr.worldEnt.removeEntity(plr);
        plr.dimension = newDimen;
        WorldServer localWorldTo =
            MinecraftServer.getServer().getWorldServerByDimension(plr.dimension);
        plr.setEntityWorld(localWorldTo);
        plr.dead = false;
        plr.setPositionRotation(loc.x, loc.y, loc.z, loc.yaw, loc.pitch);
        localWorldTo.cachedChunks.getOrCreateChunk((int) plr.xCoord >> 4, (int) plr.zCoord >> 4);
        while (!localWorldTo.getNearbyEntities(plr, plr.funcAppliesIfCanBePushed()).isEmpty()
            && plr.yCoord < 256.0D) {
          plr.setPositionRotation(plr.xCoord, plr.yCoord + 1.0D, plr.zCoord, plr.yaw, plr.pitch);
        }
        plr.dead = false;
        int packetDimen = plr.dimension;
        if (packetDimen > 1) {
          Environment i =
              PluginMultiWorld.getInstance()
                  .getStorageManager()
                  .getCustomConfig(packetDimen)
                  .getEnvironment();
          GenerationType generationType =
              PluginMultiWorld.getInstance()
                  .getStorageManager()
                  .getCustomConfig(packetDimen)
                  .getGenerationType();
          if (generationType == GenerationType.END) {
            packetDimen = 1;
          } else if (generationType == GenerationType.NETHER
              || i == codecrafter47.multiworld.api.Environment.NETHER) {
            packetDimen = -1;
          } else if (i == codecrafter47.multiworld.api.Environment.END) {
            packetDimen = 1;
          } else {
            packetDimen = 0;
          }
        }
        plr.plrConnection.sendPacket(
            new Packet_Respawn(
                packetDimen,
                plr.worldEnt.getDifficulty(),
                plr.worldEnt.getWorldData().getLevelType(),
                plr.playerInteractManager.getGameMode()));
        plr.plrConnection.sendPacket(new Packet_SetExperience(plr.m_exp, plr.xpTotal, plr.xpLevel));
        plr.setSneaking(false);
        MinecraftServer.getServer()
            .getThePlayerList()
            .sendPlayerPacketsAboutNewDimension(plr, localWorldTo);
        localWorldTo.getPlayerChunkMap().addPlayer(plr);
        localWorldTo.addEntity(plr);
        MinecraftServer.getServer().getThePlayerList().players.add(plr);
        plr.playerInteractManager.setInnerWorld(localWorldTo);
        plr.setHealth(plr.getHealth());
        plr.updateInventory(plr.defaultContainer);
        if (localWorldTo.S()) {
          plr.plrConnection.sendPacket(new Packet_ChangeGameState(2, 0.0F));
        } else {
          plr.plrConnection.sendPacket(new Packet_ChangeGameState(1, 0.0F));
        }
      } else {
        this.plr.TeleportSLoc(sloc);
      }
    }
  }